UNPKG

node-env-run

Version:

Wrapper executable to load env variables from .env and run Node

68 lines (67 loc) 2.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.escapeArguments = exports.constructNewArgv = exports.setEnvironmentVariables = exports.getScriptToExecute = void 0; const Debug = require("debug"); const fs = require("fs"); const path_1 = require("path"); const debug = Debug('node-env-run'); function getScriptToExecute(script, cwd) { if (script === '.') { debug('Evalute package.json to determine script to execute.'); const pathToPkg = path_1.resolve(cwd, 'package.json'); if (!fs.existsSync(pathToPkg)) { debug('could not find package.json'); return null; } const pkg = JSON.parse(fs.readFileSync(pathToPkg, 'utf8')); if (!pkg.main) { console.error('Could not find a "main" entry in the package.json'); return null; } script = path_1.resolve(cwd, pkg.main); } else { script = path_1.resolve(cwd, script); } return script; } exports.getScriptToExecute = getScriptToExecute; function setEnvironmentVariables(readValues, force = false) { if (force) { debug('Force overriding enabled'); } const envKeysToSet = Object.keys(readValues).filter((key) => { if (force && typeof readValues[key] !== 'undefined') { const val = readValues[key]; if (typeof val === 'string' && val.length === 0) { debug(`Not overriding ${key}`); return false; } debug(`Overriding ${key}`); return true; } return !process.env[key]; }); envKeysToSet.forEach((key) => { process.env[key] = readValues[key]; }); debug(`Set the env variables: ${envKeysToSet.map((k) => `"${k}"`).join(',')}`); } exports.setEnvironmentVariables = setEnvironmentVariables; function constructNewArgv(currentArgv, script, newArguments) { const [node] = currentArgv; return [node, script, ...newArguments.split(' ')]; } exports.constructNewArgv = constructNewArgv; const REGULAR_SHELL_CHARACTERS = ['a-z', 'A-Z', '1-9', '-', '_', '/', ':', '=']; const REGEX_NOT_REGULAR_CHARACTER = new RegExp(`[^${REGULAR_SHELL_CHARACTERS.join('')}]`); function escapeArguments(args) { const escapedArguments = args.map((arg) => { if (arg.match(REGEX_NOT_REGULAR_CHARACTER)) { return `"${arg}"`; } return arg; }); return escapedArguments; } exports.escapeArguments = escapeArguments;