UNPKG

oclif

Version:

oclif: create your own CLI

127 lines (122 loc) 5.25 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.writeBinScripts = writeBinScripts; const node_child_process_1 = require("node:child_process"); const fs = __importStar(require("node:fs")); const node_path_1 = __importDefault(require("node:path")); const node_util_1 = require("node:util"); const exec = (0, node_util_1.promisify)(node_child_process_1.exec); async function writeBinScripts({ baseWorkspace, config, nodeOptions, nodeVersion, }) { const binPathEnvVar = config.scopedEnvVarKey('BINPATH'); const redirectedEnvVar = config.scopedEnvVarKey('REDIRECTED'); const clientHomeEnvVar = config.scopedEnvVarKey('OCLIF_CLIENT_HOME'); const writeWin32 = async (bin) => { await fs.promises.writeFile(node_path_1.default.join(baseWorkspace, 'bin', `${bin}.cmd`), `@echo off setlocal enableextensions if not "%${redirectedEnvVar}%"=="1" if exist "%LOCALAPPDATA%\\${bin}\\client\\bin\\${bin}.cmd" ( set ${redirectedEnvVar}=1 "%LOCALAPPDATA%\\${bin}\\client\\bin\\${bin}.cmd" %* goto:EOF ) if not defined ${binPathEnvVar} set ${binPathEnvVar}="%~dp0${bin}.cmd" if exist "%~dp0..\\bin\\node.exe" ( "%~dp0..\\bin\\node.exe" ${`${nodeOptions.join(' ')} `}"%~dp0..\\bin\\run" %* ) else if exist "%LOCALAPPDATA%\\oclif\\node\\node-${nodeVersion}.exe" ( "%LOCALAPPDATA%\\oclif\\node\\node-${nodeVersion}.exe" ${`${nodeOptions.join(' ')} `}"%~dp0..\\bin\\run" %* ) else ( node ${`${nodeOptions.join(' ')} `}"%~dp0..\\bin\\run" %* ) `); }; const writeUnix = async () => { const bin = node_path_1.default.join(baseWorkspace, 'bin', config.bin); await fs.promises.writeFile(bin, `#!/usr/bin/env bash set -e echoerr() { echo "$@" 1>&2; } get_script_dir () { SOURCE="\${BASH_SOURCE[0]}" # While \$SOURCE is a symlink, resolve it while [ -h "\$SOURCE" ]; do DIR="\$( cd -P "\$( dirname "\$SOURCE" )" && pwd )" SOURCE="\$( readlink "\$SOURCE" )" # If \$SOURCE was a relative symlink (so no "/" as prefix, need to resolve it relative to the symlink base directory [[ \$SOURCE != /* ]] && SOURCE="\$DIR/\$SOURCE" done DIR="\$( cd -P "\$( dirname "\$SOURCE" )" && pwd )" echo "\$DIR" } DIR=\$(get_script_dir) CLI_HOME=\$(cd && pwd) XDG_DATA_HOME=\${XDG_DATA_HOME:="\$CLI_HOME/.local/share"} CLIENT_HOME=\${${clientHomeEnvVar}:=$XDG_DATA_HOME/${config.dirname}/client} BIN_PATH="\$CLIENT_HOME/bin/${config.bin}" if [ -z "\$${redirectedEnvVar}" ] && [ -x "\$BIN_PATH" ] && [[ ! "\$DIR/${config.bin}" -ef "\$BIN_PATH" ]]; then if [ "\$DEBUG" == "*" ]; then echoerr "\$BIN_PATH" "\$@" fi ${binPathEnvVar}="\$BIN_PATH" ${redirectedEnvVar}=1 "\$BIN_PATH" "\$@" else export ${binPathEnvVar}=\${${binPathEnvVar}:="\$DIR/${config.bin}"} if [ -x "$(command -v "\$XDG_DATA_HOME/oclif/node/node-custom")" ]; then NODE="\$XDG_DATA_HOME/oclif/node/node-custom" elif [ -x "$(command -v "\$DIR/node")" ]; then NODE="\$DIR/node" elif [ -x "$(command -v "\$XDG_DATA_HOME/oclif/node/node-${nodeVersion}")" ]; then NODE="\$XDG_DATA_HOME/oclif/node/node-${nodeVersion}" elif [ -x "$(command -v node)" ]; then NODE=node else echoerr 'Error: node is not installed.' >&2 exit 1 fi if [ "\$DEBUG" == "*" ]; then echoerr ${binPathEnvVar}="\$${binPathEnvVar}" "\$NODE" ${`${nodeOptions.join(' ')} `}"\$DIR/run" "\$@" fi "\$NODE" ${`${nodeOptions.join(' ')} `}"\$DIR/run" "\$@" fi `, { mode: 0o755 }); }; await Promise.all([ writeWin32(config.bin), writeUnix(), ...(config.binAliases?.map((alias) => process.platform === 'win32' ? writeWin32(alias) : exec(`ln -sf ${config.bin} ${alias}`, { cwd: node_path_1.default.join(baseWorkspace, 'bin') })) ?? []), ]); }