From a1efd0d76db620dd41dd1d56012dcd74f89df847 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 18 May 2020 11:29:54 +0200 Subject: [PATCH] packages/cli: nicer handling of waiting for bundler to exit --- packages/cli/src/commands/app/build.ts | 3 --- packages/cli/src/commands/app/serve.ts | 5 ++--- packages/cli/src/commands/plugin/serve.ts | 5 ++--- packages/cli/src/lib/bundler/server.ts | 24 +++++++++++++++-------- 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/packages/cli/src/commands/app/build.ts b/packages/cli/src/commands/app/build.ts index 482159e773..c654baa439 100644 --- a/packages/cli/src/commands/app/build.ts +++ b/packages/cli/src/commands/app/build.ts @@ -22,7 +22,4 @@ export default async (cmd: Command) => { entry: 'src/index', statsJsonEnabled: cmd.stats, }); - - // Wait for interrupt signal - await new Promise(() => {}); }; diff --git a/packages/cli/src/commands/app/serve.ts b/packages/cli/src/commands/app/serve.ts index 143e4139e5..182e338287 100644 --- a/packages/cli/src/commands/app/serve.ts +++ b/packages/cli/src/commands/app/serve.ts @@ -18,11 +18,10 @@ import { serveBundle } from '../../lib/bundler'; import { Command } from 'commander'; export default async (cmd: Command) => { - await serveBundle({ + const waitForExit = await serveBundle({ entry: 'src/index', checksEnabled: cmd.check, }); - // Wait for interrupt signal - await new Promise(() => {}); + await waitForExit(); }; diff --git a/packages/cli/src/commands/plugin/serve.ts b/packages/cli/src/commands/plugin/serve.ts index 79a540d879..5700992644 100644 --- a/packages/cli/src/commands/plugin/serve.ts +++ b/packages/cli/src/commands/plugin/serve.ts @@ -18,11 +18,10 @@ import { serveBundle } from '../../lib/bundler'; import { Command } from 'commander'; export default async (cmd: Command) => { - await serveBundle({ + const waitForExit = await serveBundle({ entry: 'dev/index', checksEnabled: cmd.check, }); - // Wait for interrupt signal - await new Promise(() => {}); + await waitForExit(); }; diff --git a/packages/cli/src/lib/bundler/server.ts b/packages/cli/src/lib/bundler/server.ts index ea29b04459..3aaf5968f5 100644 --- a/packages/cli/src/lib/bundler/server.ts +++ b/packages/cli/src/lib/bundler/server.ts @@ -29,7 +29,7 @@ export async function serveBundle(options: ServeOptions) { const port = await choosePort(host, defaultPort); if (!port) { - return; + throw new Error(`Invalid or no port set: '${port}'`); } const protocol = yn(process.env.HTTPS, { default: false }) ? 'https' : 'http'; @@ -57,15 +57,23 @@ export async function serveBundle(options: ServeOptions) { return; } - for (const signal of ['SIGINT', 'SIGTERM'] as const) { - process.on(signal, () => { - server.close(); - process.exit(); - }); - } - openBrowser(urls.localUrlForBrowser); resolve(); }); }); + + const waitForExit = async () => { + for (const signal of ['SIGINT', 'SIGTERM'] as const) { + process.on(signal, () => { + server.close(); + // exit instead of resolve. The process is shutting down and resolving a promise here logs an error + process.exit(); + }); + } + + // Block indefinitely and wait for the interrupt signal + return new Promise(() => {}); + }; + + return waitForExit; }