@idlebox/node 1.4.11 → 1.4.12

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.
@@ -1,37 +1,111 @@
1
1
  /** biome-ignore-all lint/suspicious/noDebugger: debug file */
2
2
  import { AppExit, ensureDisposeGlobal, ensureGlobalObject, prettyPrintError } from '@idlebox/common';
3
+ import assert from 'node:assert';
3
4
  import { createRequire, syncBuiltinESMExports } from 'node:module';
4
5
  import { basename } from 'node:path';
5
6
  import process from 'node:process';
7
+ import { Exit, InterruptError, UncaughtException, UnhandledRejection } from './internal-errors.js';
6
8
  const originalExit = process.exit;
7
9
  const prefix = process.stderr.isTTY ? '' : `<${title()} ${process.pid}> `;
8
10
  const hasInspect = process.argv.some((arg) => arg.startsWith('--inspect=') || arg.startsWith('--inspect-brk=') || arg === '--inspect' || arg === '--inspect-brk');
11
+ let abnormalExitCode = 1;
12
+ export function setAbnormalExitCode(code) {
13
+ if (code < 1) {
14
+ throw new TypeError(`abnormal exit code must be greater than 0, got ${code}`);
15
+ }
16
+ abnormalExitCode = code;
17
+ }
9
18
  function title() {
10
19
  if (process.title && process.title !== 'node') {
11
20
  return process.title;
12
21
  }
13
22
  return basename(process.argv[1] || '') || 'node';
14
23
  }
15
- class Exit extends AppExit {
16
- constructor(code) {
17
- super(`process exit with code ${code}`, code);
18
- }
24
+ function getCurrentCode() {
25
+ return typeof process.exitCode === 'string' ? parseInt(process.exitCode) : process.exitCode || 0;
19
26
  }
20
- const shuttingDown = false;
27
+ let shuttingDown = false;
21
28
  export function shutdown(exitCode) {
22
29
  if (hasInspect)
23
30
  debugger;
24
31
  if (exitCode) {
25
32
  process.exitCode = exitCode;
26
33
  }
27
- const code = typeof process.exitCode === 'string' ? parseInt(process.exitCode) : process.exitCode || 0;
28
- if (shuttingDown) {
29
- throw new Exit(code);
34
+ if (!shuttingDown) {
35
+ shuttingDown = true;
36
+ ensureDisposeGlobal().finally(() => {
37
+ originalExit(getCurrentCode());
38
+ });
39
+ }
40
+ throw new Exit(getCurrentCode());
41
+ }
42
+ const typed_error_handlers = new WeakMap();
43
+ const inherit_error_handlers = new Map();
44
+ export function registerNodejsGlobalTypedErrorHandlerWithInheritance(ErrorCls, fn) {
45
+ if (typed_error_handlers.has(ErrorCls)) {
46
+ throw new ErrorCls(`conflict register of error type ${ErrorCls.name}`);
47
+ }
48
+ assert.notEqual(ErrorCls, Error, 'cannot register basic Error type');
49
+ inherit_error_handlers.set(ErrorCls, fn);
50
+ }
51
+ export function registerNodejsGlobalTypedErrorHandler(ErrorCls, fn) {
52
+ if (typed_error_handlers.has(ErrorCls)) {
53
+ throw new ErrorCls(`conflict register of error type ${ErrorCls.name}`);
54
+ }
55
+ assert.notEqual(ErrorCls, Error, 'cannot register basic Error type');
56
+ typed_error_handlers.set(ErrorCls, fn);
57
+ }
58
+ function callErrorHandler(e) {
59
+ if (!(e instanceof Error)) {
60
+ prettyPrintError(`${prefix}catch unexpect object`, new Error(`error object is ${typeof e} ${e ? e.constructor?.name : 'unknown'}`));
61
+ throw originalExit(abnormalExitCode);
62
+ }
63
+ try {
64
+ const catcher = typed_error_handlers.get(e.constructor);
65
+ if (catcher) {
66
+ catcher(e);
67
+ return;
68
+ }
69
+ for (const [Cls, fn] of inherit_error_handlers) {
70
+ if (e instanceof Cls) {
71
+ fn(e);
72
+ return;
73
+ }
74
+ }
75
+ }
76
+ catch (ee) {
77
+ prettyPrintError(`${prefix}error while handle error`, {
78
+ message: ee.message,
79
+ stack: ee.stack,
80
+ cause: e,
81
+ });
82
+ return;
83
+ }
84
+ if (e instanceof InterruptError) {
85
+ if (shuttingDown) {
86
+ console.error(`${prefix}Exiting immediately.`);
87
+ originalExit(1);
88
+ }
89
+ shutdown(0);
90
+ }
91
+ if (e instanceof AppExit) {
92
+ ensureDisposeGlobal().finally(() => {
93
+ originalExit(getCurrentCode());
94
+ });
95
+ }
96
+ if (e instanceof UncaughtException) {
97
+ if (e.cause instanceof Error) {
98
+ prettyPrintError(`${prefix}Unhandled Rejection`, e.cause);
99
+ }
100
+ else {
101
+ console.error(`${prefix}Unhandled Rejection / error type unknown:`, e.cause);
102
+ }
103
+ shutdown(abnormalExitCode);
104
+ }
105
+ if (e instanceof UncaughtException) {
106
+ prettyPrintError(`${prefix}Uncaught Exception`, e.cause);
107
+ shutdown(abnormalExitCode);
30
108
  }
31
- ensureDisposeGlobal().finally(() => {
32
- originalExit(process.exitCode);
33
- });
34
- throw new Exit(code);
35
109
  }
36
110
  /**
37
111
  * 注册nodejs退出处理器
@@ -42,33 +116,23 @@ export function registerNodejsExitHandler() {
42
116
  function _real_register() {
43
117
  process.on('SIGINT', () => {
44
118
  console.error(`\n${prefix}Received SIGINT. Exiting gracefully...`);
45
- if (shuttingDown) {
46
- console.error(`Exiting immediately.`);
47
- originalExit(1);
48
- }
49
- shutdown(0);
119
+ callErrorHandler(new InterruptError('SIGINT'));
50
120
  });
51
121
  process.on('SIGTERM', () => {
52
122
  console.error(`${prefix}Received SIGTERM. Exiting gracefully...`);
53
- shutdown(0);
123
+ callErrorHandler(new InterruptError('SIGTERM'));
54
124
  });
55
125
  process.on('beforeExit', (code) => {
56
- console.error(`${prefix}Process beforeExit with code: ${code}`);
126
+ // empty handler prevent real exit
57
127
  shutdown(code);
58
128
  });
59
- process.on('unhandledRejection', (reason, _promise) => {
129
+ process.on('unhandledRejection', (reason, promise) => {
130
+ if (reason instanceof AppExit) {
131
+ return;
132
+ }
60
133
  if (hasInspect)
61
134
  debugger;
62
- if (reason instanceof Error) {
63
- if (reason instanceof AppExit) {
64
- return;
65
- }
66
- prettyPrintError(`${prefix}Unhandled Rejection`, reason);
67
- }
68
- else {
69
- console.error(`${prefix}Unhandled Rejection / error type unknown:`, reason);
70
- }
71
- shutdown(1);
135
+ callErrorHandler(new UnhandledRejection(reason, promise));
72
136
  });
73
137
  const processMdl = createRequire(import.meta.url)('node:process');
74
138
  processMdl.exit = shutdown;
@@ -79,8 +143,7 @@ function _real_register() {
79
143
  }
80
144
  if (hasInspect)
81
145
  debugger;
82
- prettyPrintError(`${prefix}Uncaught Exception`, error);
83
- shutdown(1);
146
+ callErrorHandler(new UncaughtException(error));
84
147
  }
85
148
  if (process.hasUncaughtExceptionCaptureCallback()) {
86
149
  process.on('uncaughtException', uncaughtException);
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/lifecycle/register.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/lifecycle/register.ts"],"names":[],"mappings":"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"}