@idlebox/node 1.4.10 → 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,62 +1,138 @@
1
- import { AppExit, ensureDisposeGlobal, globalSingletonStrong, prettyPrintError } from '@idlebox/common';
1
+ /** biome-ignore-all lint/suspicious/noDebugger: debug file */
2
+ import { AppExit, ensureDisposeGlobal, ensureGlobalObject, prettyPrintError } from '@idlebox/common';
3
+ import assert from 'node:assert';
2
4
  import { createRequire, syncBuiltinESMExports } from 'node:module';
5
+ import { basename } from 'node:path';
3
6
  import process from 'node:process';
7
+ import { Exit, InterruptError, UncaughtException, UnhandledRejection } from './internal-errors.js';
4
8
  const originalExit = process.exit;
5
- class Exit extends AppExit {
6
- constructor(code) {
7
- super(`process exit with code ${code}`, code);
9
+ const prefix = process.stderr.isTTY ? '' : `<${title()} ${process.pid}> `;
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}`);
8
15
  }
16
+ abnormalExitCode = code;
9
17
  }
10
- const shuttingDown = false;
18
+ function title() {
19
+ if (process.title && process.title !== 'node') {
20
+ return process.title;
21
+ }
22
+ return basename(process.argv[1] || '') || 'node';
23
+ }
24
+ function getCurrentCode() {
25
+ return typeof process.exitCode === 'string' ? parseInt(process.exitCode) : process.exitCode || 0;
26
+ }
27
+ let shuttingDown = false;
11
28
  export function shutdown(exitCode) {
12
- debugger;
29
+ if (hasInspect)
30
+ debugger;
13
31
  if (exitCode) {
14
32
  process.exitCode = exitCode;
15
33
  }
16
- const code = typeof process.exitCode === 'string' ? parseInt(process.exitCode) : process.exitCode || 0;
17
- if (shuttingDown) {
18
- 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);
19
108
  }
20
- ensureDisposeGlobal().finally(() => {
21
- originalExit(process.exitCode);
22
- });
23
- throw new Exit(code);
24
109
  }
25
- const exitHandler = Symbol('exithandler/registed');
26
110
  /**
27
111
  * 注册nodejs退出处理器
28
112
  */
29
113
  export function registerNodejsExitHandler() {
30
- globalSingletonStrong(exitHandler, _real_register);
114
+ ensureGlobalObject('exithandler/register', _real_register);
31
115
  }
32
116
  function _real_register() {
33
117
  process.on('SIGINT', () => {
34
- console.log('\nReceived SIGINT. Exiting gracefully...');
35
- if (shuttingDown) {
36
- console.error('Exiting immediately.');
37
- originalExit(1);
38
- }
39
- shutdown(0);
118
+ console.error(`\n${prefix}Received SIGINT. Exiting gracefully...`);
119
+ callErrorHandler(new InterruptError('SIGINT'));
40
120
  });
41
121
  process.on('SIGTERM', () => {
42
- console.log('Received SIGTERM. Exiting gracefully...');
43
- shutdown(0);
122
+ console.error(`${prefix}Received SIGTERM. Exiting gracefully...`);
123
+ callErrorHandler(new InterruptError('SIGTERM'));
44
124
  });
45
125
  process.on('beforeExit', (code) => {
46
- console.log(`Process beforeExit with code: ${code}`);
126
+ // empty handler prevent real exit
47
127
  shutdown(code);
48
128
  });
49
- process.on('unhandledRejection', (reason, _promise) => {
50
- if (reason instanceof Error) {
51
- if (reason instanceof AppExit) {
52
- return;
53
- }
54
- prettyPrintError('Unhandled Rejection', reason);
55
- }
56
- else {
57
- console.error('Unhandled Rejection / error type unknown:', reason);
129
+ process.on('unhandledRejection', (reason, promise) => {
130
+ if (reason instanceof AppExit) {
131
+ return;
58
132
  }
59
- shutdown(1);
133
+ if (hasInspect)
134
+ debugger;
135
+ callErrorHandler(new UnhandledRejection(reason, promise));
60
136
  });
61
137
  const processMdl = createRequire(import.meta.url)('node:process');
62
138
  processMdl.exit = shutdown;
@@ -65,12 +141,13 @@ function _real_register() {
65
141
  if (error instanceof AppExit) {
66
142
  return;
67
143
  }
68
- prettyPrintError('Uncaught Exception', error);
69
- shutdown(1);
144
+ if (hasInspect)
145
+ debugger;
146
+ callErrorHandler(new UncaughtException(error));
70
147
  }
71
148
  if (process.hasUncaughtExceptionCaptureCallback()) {
72
149
  process.on('uncaughtException', uncaughtException);
73
- throw new Error('[process uncaught exception capture] callback already registered by other module');
150
+ throw new Error(`${prefix} [uncaught exception capture] callback already registered by other module`);
74
151
  }
75
152
  process.setUncaughtExceptionCaptureCallback(uncaughtException);
76
153
  return true;
@@ -79,7 +156,8 @@ function _real_register() {
79
156
  * @deprecated 仅用于测试
80
157
  */
81
158
  export function die(message) {
82
- console.error(message);
159
+ debugger;
160
+ console.error(`${prefix}DIE!`, message);
83
161
  shutdown(1);
84
162
  }
85
163
  //# sourceMappingURL=register.js.map
@@ -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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"}