sb-babel-cli
Version:
A smarter babel-cli
96 lines (95 loc) • 5.31 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const os_1 = __importDefault(require("os"));
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const commander_1 = __importDefault(require("commander"));
const __1 = __importDefault(require(".."));
const helpers_1 = require("../helpers");
const manifest = JSON.parse(fs_1.default.readFileSync(path_1.default.resolve(__dirname, '../../package.json'), 'utf8'));
const NODE_ARGS = [
['debug-port', 'debugPort', true],
['inspect-port', 'inspectPort', true],
['inspect', 'inspect', false],
['inspect-brk', 'inspectBrk', false],
['inspect-publish-uid', 'inspectPublishUid', true],
['enable-source-maps', 'enableSourceMaps', false],
];
commander_1.default
.version(manifest.version)
.description(manifest.description)
.usage('[options] <source directory>')
.option('-w, --watch', 'Watch files for changes')
.option('--root <directory>', 'Root directory for compilation; where presets and CLI config is resolved from (defaults to cwd)')
.option('--cache-directory <directory>', 'Directory to store the cache ".sb-babel-cli" (defaults to homedir)')
.option('--ignored <glob>', 'Ignored files and directories that match the given glob (You can specify --ignored <glob> multiple times)', (value, previous) => previous.concat([value]), [])
.option('--ignored-for-restart <glob>', 'These files are transpiled, but do not cause restart (You can specify --ignored-for-restart <glob> multiple times)', (value, previous) => previous.concat([value]), [])
.option('--source-maps [true|false|inline]', 'Generate source maps for transpiled files', (value) => value !== 'inline' ? value === 'true' : 'inline')
.option('--reset-cache', 'Re-transpile all files ignoring cache')
.option('--keep-extra-files', 'Do NOT delete extra files in the output directory')
.option('-o, --output-directory <directory>', 'Output directory to write transpiled files to')
.option('--output-file-extension <extension>', 'Output file extension (defaults to .js)')
.option('-x, --execute <entryFile>', 'Relative path of file to execute (only supported in watcher mode)')
.option('--execute-delay <delay>', 'Delay in ms in between restarts of executed file (defaults to 1000ms)', (value) => parseInt(value, 10) || 1000)
.option('--extensions <exts>', 'Comma separated extensions to process through the CLI (defaults to .js)', (value) => value
.split(',')
.map((item) => item.trim())
.filter(Boolean))
.option('--no-load-config', 'Disables loading of "sb-config-file" from package.json (in --root)')
.option('--print-config', 'Print the config being used (for debugging only)')
.option('--silent', 'Disable log outputs')
.on('--help', () => {
console.log('\nArguments after -- will be passed as-are to programs executed through -x');
})
.combineFlagAndOptionalValue(true);
NODE_ARGS.forEach(([nodeArg, , hasOption]) => {
commander_1.default.option(`--${nodeArg}${hasOption ? ' <arg>' : ''}`, 'Passthrough arg for Node.js runtime for programs executed through -x');
});
commander_1.default.parse(process.argv);
if (commander_1.default.args.length < 1) {
commander_1.default.outputHelp();
process.exit(1);
}
const nodeArgs = NODE_ARGS.filter((item) => commander_1.default[item[1]] != null)
.map((item) => (item[2] ? [`--${item[0]}`, commander_1.default[item[1]]] : [`--${item[0]}`]))
.flat();
const specifiedArgs = [];
function optionalGet(obj, key, defaultValue) {
if (obj[key] == null) {
return defaultValue;
}
specifiedArgs.push(key);
return obj[key];
}
const configPartial = {
sourceDirectory: commander_1.default.args[0],
outputDirectory: optionalGet(commander_1.default, 'outputDirectory', ''),
rootDirectory: optionalGet(commander_1.default, 'root', process.cwd()),
cacheDirectory: optionalGet(commander_1.default, 'cacheDirectory', os_1.default.homedir()),
watch: optionalGet(commander_1.default, 'watch', false),
ignored: optionalGet(commander_1.default, 'ignored', []),
ignoredForRestart: optionalGet(commander_1.default, 'ignoredForRestart', []),
sourceMaps: optionalGet(commander_1.default, 'sourceMaps', false),
resetCache: optionalGet(commander_1.default, 'resetCache', false),
keepExtraFiles: optionalGet(commander_1.default, 'keepExtraFiles', false),
outputFileExtension: optionalGet(commander_1.default, 'outputFileExtension', '.js'),
execute: optionalGet(commander_1.default, 'execute', ''),
executeDelay: optionalGet(commander_1.default, 'executeDelay', 250),
extensions: optionalGet(commander_1.default, 'extensions', ['.js']),
loadConfig: optionalGet(commander_1.default, 'loadConfig', true),
printConfig: optionalGet(commander_1.default, 'printConfig', false),
silent: optionalGet(commander_1.default, 'silent', false),
nodeArgs,
programArgs: commander_1.default.args.slice(1),
};
__1.default({
...configPartial,
specifiedArgs,
}).catch((error) => {
helpers_1.logError(error);
process.exit(1);
});