bb-app 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bb-app.js CHANGED
@@ -13970,6 +13970,8 @@ var HOST_AUTH_FILE_NAME = "auth.json";
13970
13970
  var HOST_ID_FILE_NAME = "host-id";
13971
13971
  var HEALTH_CHECK_TIMEOUT_MS = 15e3;
13972
13972
  var HEALTH_CHECK_INTERVAL_MS = 100;
13973
+ var MANAGED_PROCESS_TERMINATION_TIMEOUT_MS = 5e3;
13974
+ var MANAGED_PROCESS_KILL_TIMEOUT_MS = 1e3;
13973
13975
  var START_COMMAND = "start";
13974
13976
  var HOST_DAEMON_COMMAND = "host-daemon";
13975
13977
  var HOST_DAEMON_JOIN_COMMAND = "join";
@@ -14922,6 +14924,35 @@ function waitForProcessExit(childProcess) {
14922
14924
  });
14923
14925
  });
14924
14926
  }
14927
+ function waitForProcessExitWithTimeout(args) {
14928
+ if (hasProcessExited(args.childProcess)) {
14929
+ return Promise.resolve("exited");
14930
+ }
14931
+ return new Promise((resolvePromise) => {
14932
+ let settled = false;
14933
+ let timeout;
14934
+ const finish = (result) => {
14935
+ if (settled) {
14936
+ return;
14937
+ }
14938
+ settled = true;
14939
+ clearTimeout(timeout);
14940
+ args.childProcess.off("exit", exitHandler);
14941
+ resolvePromise(result);
14942
+ };
14943
+ const exitHandler = () => {
14944
+ finish("exited");
14945
+ };
14946
+ timeout = setTimeout(() => {
14947
+ finish("timed-out");
14948
+ }, args.timeoutMs);
14949
+ timeout.unref();
14950
+ args.childProcess.once("exit", exitHandler);
14951
+ if (hasProcessExited(args.childProcess)) {
14952
+ finish("exited");
14953
+ }
14954
+ });
14955
+ }
14925
14956
  async function waitForNamedProcessExit(args) {
14926
14957
  return {
14927
14958
  processName: args.processName,
@@ -14934,12 +14965,29 @@ function toExitCode(result) {
14934
14965
  }
14935
14966
  return result.signal === null ? 1 : 128;
14936
14967
  }
14937
- async function terminateProcessIfRunning(childProcess, signal) {
14938
- if (hasProcessExited(childProcess)) {
14968
+ async function terminateProcessIfRunning(args) {
14969
+ if (hasProcessExited(args.childProcess)) {
14970
+ return;
14971
+ }
14972
+ args.childProcess.kill(args.signal);
14973
+ const gracefulResult = await waitForProcessExitWithTimeout({
14974
+ childProcess: args.childProcess,
14975
+ timeoutMs: MANAGED_PROCESS_TERMINATION_TIMEOUT_MS
14976
+ });
14977
+ if (gracefulResult === "exited") {
14939
14978
  return;
14940
14979
  }
14941
- childProcess.kill(signal);
14942
- await waitForProcessExit(childProcess);
14980
+ log(
14981
+ yellow("!"),
14982
+ `${args.processName} did not stop after ${MANAGED_PROCESS_TERMINATION_TIMEOUT_MS}ms - sending SIGKILL`
14983
+ );
14984
+ if (!hasProcessExited(args.childProcess)) {
14985
+ args.childProcess.kill("SIGKILL");
14986
+ }
14987
+ await waitForProcessExitWithTimeout({
14988
+ childProcess: args.childProcess,
14989
+ timeoutMs: MANAGED_PROCESS_KILL_TIMEOUT_MS
14990
+ });
14943
14991
  }
14944
14992
  function createSharedEnv(args) {
14945
14993
  return {
@@ -15097,7 +15145,11 @@ async function runHostDaemonOnly(args) {
15097
15145
  shuttingDown = true;
15098
15146
  process.stdout.write("\n");
15099
15147
  log(dim("\u25CF"), "Shutting down");
15100
- await terminateProcessIfRunning(daemonProcess, signal);
15148
+ await terminateProcessIfRunning({
15149
+ childProcess: daemonProcess,
15150
+ processName: "daemon",
15151
+ signal
15152
+ });
15101
15153
  };
15102
15154
  const removeSignalForwarding = installTerminationSignalForwarding(
15103
15155
  (signal) => {
@@ -15264,11 +15316,19 @@ async function runBbApp(cliArgs = process.argv.slice(2)) {
15264
15316
  process.stdout.write("\n");
15265
15317
  log(dim("\u25CF"), "Shutting down");
15266
15318
  const terminationPromises = [
15267
- terminateProcessIfRunning(serverProcess, signal)
15319
+ terminateProcessIfRunning({
15320
+ childProcess: serverProcess,
15321
+ processName: "server",
15322
+ signal
15323
+ })
15268
15324
  ];
15269
15325
  if (daemonProcess !== null) {
15270
15326
  terminationPromises.push(
15271
- terminateProcessIfRunning(daemonProcess, signal)
15327
+ terminateProcessIfRunning({
15328
+ childProcess: daemonProcess,
15329
+ processName: "daemon",
15330
+ signal
15331
+ })
15272
15332
  );
15273
15333
  }
15274
15334
  await Promise.all(terminationPromises);
@@ -15338,15 +15398,17 @@ async function runBbApp(cliArgs = process.argv.slice(2)) {
15338
15398
  outputBuffer.flush();
15339
15399
  const firstExit = await Promise.race([serverExit, daemonExit]);
15340
15400
  if (firstExit.processName === "server") {
15341
- await terminateProcessIfRunning(
15342
- daemonProcess,
15343
- firstExit.result.signal ?? "SIGTERM"
15344
- );
15401
+ await terminateProcessIfRunning({
15402
+ childProcess: daemonProcess,
15403
+ processName: "daemon",
15404
+ signal: firstExit.result.signal ?? "SIGTERM"
15405
+ });
15345
15406
  } else {
15346
- await terminateProcessIfRunning(
15347
- serverProcess,
15348
- firstExit.result.signal ?? "SIGTERM"
15349
- );
15407
+ await terminateProcessIfRunning({
15408
+ childProcess: serverProcess,
15409
+ processName: "server",
15410
+ signal: firstExit.result.signal ?? "SIGTERM"
15411
+ });
15350
15412
  }
15351
15413
  process.exitCode = toExitCode(firstExit.result);
15352
15414
  } catch (error48) {
@@ -13970,6 +13970,8 @@ var HOST_AUTH_FILE_NAME = "auth.json";
13970
13970
  var HOST_ID_FILE_NAME = "host-id";
13971
13971
  var HEALTH_CHECK_TIMEOUT_MS = 15e3;
13972
13972
  var HEALTH_CHECK_INTERVAL_MS = 100;
13973
+ var MANAGED_PROCESS_TERMINATION_TIMEOUT_MS = 5e3;
13974
+ var MANAGED_PROCESS_KILL_TIMEOUT_MS = 1e3;
13973
13975
  var HOST_DAEMON_JOIN_COMMAND = "join";
13974
13976
  var MANAGED_CONFIG_KEYS = BB_APP_MANAGED_CONFIG_KEYS;
13975
13977
  var MANAGED_CONFIG_KEY_VALUES = new Set(MANAGED_CONFIG_KEYS);
@@ -14525,18 +14527,64 @@ function waitForProcessExit(childProcess) {
14525
14527
  });
14526
14528
  });
14527
14529
  }
14530
+ function waitForProcessExitWithTimeout(args) {
14531
+ if (hasProcessExited(args.childProcess)) {
14532
+ return Promise.resolve("exited");
14533
+ }
14534
+ return new Promise((resolvePromise) => {
14535
+ let settled = false;
14536
+ let timeout;
14537
+ const finish = (result) => {
14538
+ if (settled) {
14539
+ return;
14540
+ }
14541
+ settled = true;
14542
+ clearTimeout(timeout);
14543
+ args.childProcess.off("exit", exitHandler);
14544
+ resolvePromise(result);
14545
+ };
14546
+ const exitHandler = () => {
14547
+ finish("exited");
14548
+ };
14549
+ timeout = setTimeout(() => {
14550
+ finish("timed-out");
14551
+ }, args.timeoutMs);
14552
+ timeout.unref();
14553
+ args.childProcess.once("exit", exitHandler);
14554
+ if (hasProcessExited(args.childProcess)) {
14555
+ finish("exited");
14556
+ }
14557
+ });
14558
+ }
14528
14559
  function toExitCode(result) {
14529
14560
  if (result.code !== null) {
14530
14561
  return result.code;
14531
14562
  }
14532
14563
  return result.signal === null ? 1 : 128;
14533
14564
  }
14534
- async function terminateProcessIfRunning(childProcess, signal) {
14535
- if (hasProcessExited(childProcess)) {
14565
+ async function terminateProcessIfRunning(args) {
14566
+ if (hasProcessExited(args.childProcess)) {
14567
+ return;
14568
+ }
14569
+ args.childProcess.kill(args.signal);
14570
+ const gracefulResult = await waitForProcessExitWithTimeout({
14571
+ childProcess: args.childProcess,
14572
+ timeoutMs: MANAGED_PROCESS_TERMINATION_TIMEOUT_MS
14573
+ });
14574
+ if (gracefulResult === "exited") {
14536
14575
  return;
14537
14576
  }
14538
- childProcess.kill(signal);
14539
- await waitForProcessExit(childProcess);
14577
+ log(
14578
+ yellow("!"),
14579
+ `${args.processName} did not stop after ${MANAGED_PROCESS_TERMINATION_TIMEOUT_MS}ms - sending SIGKILL`
14580
+ );
14581
+ if (!hasProcessExited(args.childProcess)) {
14582
+ args.childProcess.kill("SIGKILL");
14583
+ }
14584
+ await waitForProcessExitWithTimeout({
14585
+ childProcess: args.childProcess,
14586
+ timeoutMs: MANAGED_PROCESS_KILL_TIMEOUT_MS
14587
+ });
14540
14588
  }
14541
14589
  function resolveHostDaemonServerUrl(args) {
14542
14590
  return trimToUndefined(args.env.BB_SERVER_URL) ?? args.context.serverUrl;
@@ -14662,7 +14710,11 @@ async function runHostDaemonOnly(args) {
14662
14710
  shuttingDown = true;
14663
14711
  process.stdout.write("\n");
14664
14712
  log(dim("\u25CF"), "Shutting down");
14665
- await terminateProcessIfRunning(daemonProcess, signal);
14713
+ await terminateProcessIfRunning({
14714
+ childProcess: daemonProcess,
14715
+ processName: "daemon",
14716
+ signal
14717
+ });
14666
14718
  };
14667
14719
  const removeSignalForwarding = installTerminationSignalForwarding(
14668
14720
  (signal) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bb-app",
3
- "version": "0.0.7",
3
+ "version": "0.0.8",
4
4
  "description": "bb app launcher for npx",
5
5
  "keywords": [
6
6
  "bb",