UNPKG

3.32 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const qq = require("qqjs");
4async function writeBinScripts({ config, baseWorkspace, nodeVersion }) {
5 const binPathEnvVar = config.scopedEnvVarKey('BINPATH');
6 const redirectedEnvVar = config.scopedEnvVarKey('REDIRECTED');
7 const clientHomeEnvVar = config.scopedEnvVarKey('OCLIF_CLIENT_HOME');
8 const writeWin32 = async () => {
9 const { bin } = config;
10 await qq.write([baseWorkspace, 'bin', `${config.bin}.cmd`], `@echo off
11setlocal enableextensions
12
13if not "%${redirectedEnvVar}%"=="1" if exist "%LOCALAPPDATA%\\${bin}\\client\\bin\\${bin}.cmd" (
14 set ${redirectedEnvVar}=1
15 "%LOCALAPPDATA%\\${bin}\\client\\bin\\${bin}.cmd" %*
16 goto:EOF
17)
18
19if not defined ${binPathEnvVar} set ${binPathEnvVar}="%~dp0${bin}.cmd"
20if exist "%~dp0..\\bin\\node.exe" (
21 "%~dp0..\\bin\\node.exe" "%~dp0..\\bin\\run" %*
22) else if exist "%LOCALAPPDATA%\\oclif\\node\\node-${nodeVersion}.exe" (
23 "%LOCALAPPDATA%\\oclif\\node\\node-${nodeVersion}.exe" "%~dp0..\\bin\\run" %*
24) else (
25 node "%~dp0..\\bin\\run" %*
26)
27`);
28 // await qq.write([output, 'bin', config.bin], `#!/bin/sh
29 // basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
30 // "$basedir/../client/bin/${config.bin}.cmd" "$@"
31 // ret=$?
32 // exit $ret
33 // `)
34 };
35 const writeUnix = async () => {
36 const bin = qq.join([baseWorkspace, 'bin', config.bin]);
37 await qq.write(bin, `#!/usr/bin/env bash
38set -e
39echoerr() { echo "$@" 1>&2; }
40
41get_script_dir () {
42 SOURCE="\${BASH_SOURCE[0]}"
43 # While \$SOURCE is a symlink, resolve it
44 while [ -h "\$SOURCE" ]; do
45 DIR="\$( cd -P "\$( dirname "\$SOURCE" )" && pwd )"
46 SOURCE="\$( readlink "\$SOURCE" )"
47 # If \$SOURCE was a relative symlink (so no "/" as prefix, need to resolve it relative to the symlink base directory
48 [[ \$SOURCE != /* ]] && SOURCE="\$DIR/\$SOURCE"
49 done
50 DIR="\$( cd -P "\$( dirname "\$SOURCE" )" && pwd )"
51 echo "\$DIR"
52}
53DIR=\$(get_script_dir)
54CLI_HOME=\$(cd && pwd)
55XDG_DATA_HOME=\${XDG_DATA_HOME:="\$CLI_HOME/.local/share"}
56CLIENT_HOME=\${${clientHomeEnvVar}:=$XDG_DATA_HOME/${config.dirname}/client}
57BIN_PATH="\$CLIENT_HOME/bin/${config.bin}"
58if [ -z "\$${redirectedEnvVar}" ] && [ -x "\$BIN_PATH" ] && [[ ! "\$DIR/${config.bin}" -ef "\$BIN_PATH" ]]; then
59 if [ "\$DEBUG" == "*" ]; then
60 echoerr "\$BIN_PATH" "\$@"
61 fi
62 ${binPathEnvVar}="\$BIN_PATH" ${redirectedEnvVar}=1 "\$BIN_PATH" "\$@"
63else
64 export ${binPathEnvVar}=\${${binPathEnvVar}:="\$DIR/${config.bin}"}
65 if [ -x "$(command -v "\$XDG_DATA_HOME/oclif/node/node-custom")" ]; then
66 NODE="\$XDG_DATA_HOME/oclif/node/node-custom"
67 elif [ -x "$(command -v "\$DIR/node")" ]; then
68 NODE="\$DIR/node"
69 elif [ -x "$(command -v "\$XDG_DATA_HOME/oclif/node/node-${nodeVersion}")" ]; then
70 NODE="\$XDG_DATA_HOME/oclif/node/node-${nodeVersion}"
71 elif [ -x "$(command -v node)" ]; then
72 NODE=node
73 else
74 echoerr 'Error: node is not installed.' >&2
75 exit 1
76 fi
77 if [ "\$DEBUG" == "*" ]; then
78 echoerr ${binPathEnvVar}="\$${binPathEnvVar}" "\$NODE" "\$DIR/run" "\$@"
79 fi
80 "\$NODE" "\$DIR/run" "\$@"
81fi
82`);
83 await qq.chmod(bin, 0o755);
84 };
85 await writeWin32();
86 await writeUnix();
87}
88exports.writeBinScripts = writeBinScripts;