Denys Vuika 8f684a9f6a
[ACS-5987] improved security for shell scripts (#8889)
* improved security for node process functions

* improved security for node process functions

* remove unused file from demo shell

* restore regex

* fix regex

* update escaping

* lint fixes

* fix typo

* fix export

* fix exports

* fix lint

* fix lint
2023-09-27 05:52:33 -04:00

46 lines
1.2 KiB
JavaScript
Executable File

#!/usr/bin/env node
const minimist = require('minimist');
const { resolve, join } = require('node:path');
const { readFileSync, existsSync } = require('node:fs');
const { argv, exit, env, cwd } = require('node:process');
function printHelp() {
const pkgData = readFileSync(resolve(__dirname, '..', 'package.json')).toString();
const { name, version } = JSON.parse(pkgData);
console.log(`${name} v${version}`);
}
const args = minimist(argv.slice(2), {
boolean: ['verbose']
});
if (args._.length === 0) {
printHelp();
exit(1);
}
const scriptName = args._.shift();
const scriptPath = env.DEVELOP
? resolve(join(__dirname, '../dist/scripts', scriptName))
: resolve(join(__dirname, '../scripts', scriptName));
if (!existsSync(`${scriptPath}.js`)) {
console.error(`Error: command ${scriptName} not found.`);
exit(1);
}
const workingDir = cwd();
try {
Promise.resolve()
.then(() => require(scriptPath).default(args, workingDir))
.then(exitCode => exit(exitCode || 0))
.catch(err => {
console.error(err && err.stack);
exit(99);
});
} catch (err) {
console.error(err.stack);
exit(99);
}