UNPKG

@electron-forge/cli

Version:

A complete tool for building modern Electron applications

87 lines (85 loc) • 7.74 kB
import { api } from '@electron-forge/core'; import { resolveWorkingDir } from '@electron-forge/core-utils'; import { Option, program } from 'commander'; import './util/terminate.js'; import packageJSON from '../package.json' with { type: 'json' }; (async () => { let commandArgs = process.argv; let appArgs; const doubleDashIndex = process.argv.indexOf('--'); if (doubleDashIndex !== -1) { commandArgs = process.argv.slice(0, doubleDashIndex); appArgs = process.argv.slice(doubleDashIndex + 1); } let dir; program .version(packageJSON.version, '-V, --version', 'Output the current version.') .helpOption('-h, --help', 'Output usage information.') .argument('[dir]', 'Directory to run the command in. (default: current directory)') .option('-p, --app-path <path>', 'Path to the Electron app to launch. (default: current directory)') .option('-l, --enable-logging', 'Enable internal Electron logging.') .option('-n, --run-as-node', 'Run the Electron app as a Node.JS script.') .addOption(new Option('--vscode').hideHelp()) // Used to enable arg transformation for debugging Electron through VSCode. Hidden from users. .option('-i, --inspect-electron', 'Run Electron in inspect mode to allow debugging the main process.') .option('--inspect-brk-electron', 'Run Electron in inspect-brk mode to allow debugging the main process.') .addHelpText('after', ` Any arguments found after "--" will be passed to the Electron app. For example... $ npx electron-forge start /path/to/project --enable-logging -- -d -f foo.txt ...will pass the arguments "-d -f foo.txt" to the Electron app.`) .action((targetDir) => { dir = resolveWorkingDir(targetDir); }) .parse(commandArgs); const options = program.opts(); const opts = { dir, interactive: process.stdin.isTTY ?? false, enableLogging: !!options.enableLogging, runAsNode: !!options.runAsNode, inspect: !!options.inspectElectron, inspectBrk: !!options.inspectBrkElectron, }; if (options.vscode && appArgs) { // Args are in the format ~arg~ so we need to strip the "~" appArgs = appArgs .map((arg) => arg.substr(1, arg.length - 2)) .filter((arg) => arg.length > 0); } if (options.appPath) opts.appPath = options.appPath; if (appArgs) opts.args = appArgs; const spawned = await api.start(opts); await new Promise((resolve) => { const listenForExit = (child) => { // Why: changing to const causes TypeScript compilation to fail. /* eslint-disable prefer-const */ let onExit; let onRestart; /* eslint-enable prefer-const */ const removeListeners = () => { child.removeListener('exit', onExit); child.removeListener('restarted', onRestart); }; onExit = (code) => { removeListeners(); // `child`, not `spawned`: the first child's `restarted` flag stays true // forever, so using it would ignore every exit after the first restart. if (child.restarted) return; if (code !== 0) { process.exit(code); } resolve(); }; onRestart = (newChild) => { removeListeners(); listenForExit(newChild); }; child.on('exit', onExit); child.on('restarted', onRestart); }; listenForExit(spawned); }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlY3Ryb24tZm9yZ2Utc3RhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZWxlY3Ryb24tZm9yZ2Utc3RhcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEdBQUcsRUFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUvRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUU1QyxPQUFPLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDLE9BQU8sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBRWhFLENBQUMsS0FBSyxJQUFJLEVBQUU7SUFDVixJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQy9CLElBQUksT0FBTyxDQUFDO0lBRVosTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsSUFBSSxlQUFlLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzQixXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELElBQUksR0FBRyxDQUFDO0lBQ1IsT0FBTztTQUNKLE9BQU8sQ0FDTixXQUFXLENBQUMsT0FBTyxFQUNuQixlQUFlLEVBQ2YsNkJBQTZCLENBQzlCO1NBQ0EsVUFBVSxDQUFDLFlBQVksRUFBRSwyQkFBMkIsQ0FBQztTQUNyRCxRQUFRLENBQ1AsT0FBTyxFQUNQLCtEQUErRCxDQUNoRTtTQUNBLE1BQU0sQ0FDTCx1QkFBdUIsRUFDdkIsa0VBQWtF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