diff --git a/packages/api/cli/src/electron-forge-start.ts b/packages/api/cli/src/electron-forge-start.ts index fc192dc0ab..ef7a675f78 100644 --- a/packages/api/cli/src/electron-forge-start.ts +++ b/packages/api/cli/src/electron-forge-start.ts @@ -27,6 +27,7 @@ import workingDir from './util/working-dir'; .option('-n, --run-as-node', 'Run the Electron app as a Node.JS script') .option('--vscode', 'Used to enable arg transformation for debugging Electron through VSCode. Do not use yourself.') .option('-i, --inspect-electron', 'Triggers inspect mode on Electron to allow debugging the main process. Electron >1.7 only') + .option('--inspect-brk-electron', 'Triggers inspect-brk mode on Electron to allow debugging the main process. Electron >1.7 only') .action((cwd) => { dir = workingDir(dir, cwd); }) .parse(commandArgs); @@ -44,6 +45,7 @@ import workingDir from './util/working-dir'; enableLogging: !!program.enableLogging, runAsNode: !!program.runAsNode, inspect: !!program.inspectElectron, + inspectBrk: !!program.inspectBrkElectron, }; if (program.vscode && appArgs) { diff --git a/packages/api/core/src/api/start.ts b/packages/api/core/src/api/start.ts index 69266ff435..6b4b8a24d9 100644 --- a/packages/api/core/src/api/start.ts +++ b/packages/api/core/src/api/start.ts @@ -21,6 +21,7 @@ export default async ({ args = [], runAsNode = false, inspect = false, + inspectBrk = false, }: StartOptions) => { asyncOra.interactive = interactive; @@ -63,6 +64,7 @@ export default async ({ args, runAsNode, inspect, + inspectBrk, }); let prefixArgs: string[] = []; if (typeof spawnedPluginChild === 'string') { @@ -100,6 +102,9 @@ export default async ({ if (inspect) { args = ['--inspect' as (string|number)].concat(args); } + if (inspectBrk) { + args = ['--inspect-brk' as (string|number)].concat(args); + } let spawned!: ChildProcess; diff --git a/packages/api/core/test/fast/start_spec.ts b/packages/api/core/test/fast/start_spec.ts index c9e7bb3349..f6e6e4d87a 100644 --- a/packages/api/core/test/fast/start_spec.ts +++ b/packages/api/core/test/fast/start_spec.ts @@ -170,6 +170,21 @@ describe('start', () => { expect(spawnStub.firstCall.args[1].slice(1)).to.deep.equal(['--inspect'].concat(args)); }); + it('should pass --inspect-brk at the start of the args if inspectBrk is set', async () => { + const args = ['magic']; + resolveStub.returnsArg(0); + spawnStub.returns(0); + await start({ + args, + dir: __dirname, + interactive: false, + inspectBrk: true, + }); + expect(spawnStub.callCount).to.equal(1); + expect(spawnStub.firstCall.args[0]).to.equal('fake_electron_path'); + expect(spawnStub.firstCall.args[1].slice(1)).to.deep.equal(['--inspect-brk'].concat(args)); + }); + it('should resolve with a handle to the spawned instance', async () => { resolveStub.returnsArg(0); const fakeChild = { on: () => {} }; diff --git a/packages/utils/types/src/index.ts b/packages/utils/types/src/index.ts index 8a48548e0e..5be2127a17 100644 --- a/packages/utils/types/src/index.ts +++ b/packages/utils/types/src/index.ts @@ -115,6 +115,11 @@ export interface StartOptions { * Enables the node inspector, you can connect to this from chrome://inspect */ inspect?: boolean; + /** + * Enables the node inspector, you can connect to this from chrome://inspect + * Pauses the execution on first JavaScript line until debugger connects. + */ + inspectBrk?: boolean; } export interface ForgeTemplate {