@antelopejs/core 1.13.1 → 1.13.3
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/core/cli/commands/project/dev-action.js +5 -2
- package/dist/core/cli/commands/project/dev-action.js.map +1 -1
- package/dist/core/cli/commands/project/init-action.js +11 -29
- package/dist/core/cli/commands/project/init-action.js.map +1 -1
- package/dist/core/cli/full-cli.js +2 -2
- package/dist/core/cli/full-cli.js.map +1 -1
- package/dist/core/cli/help.d.ts +0 -2
- package/dist/core/cli/help.js +4 -31
- package/dist/core/cli/help.js.map +1 -1
- package/dist/core/cli/index.js +3 -2
- package/dist/core/cli/index.js.map +1 -1
- package/dist/core/cli/output/format.d.ts +2 -0
- package/dist/core/cli/output/format.js +29 -0
- package/dist/core/cli/output/format.js.map +1 -1
- package/dist/core/cli/output/types.d.ts +1 -1
- package/dist/core/cli/output/ui.js +36 -14
- package/dist/core/cli/output/ui.js.map +1 -1
- package/dist/core/cli/plugin-arguments.d.ts +1 -0
- package/dist/core/cli/plugin-arguments.js +17 -2
- package/dist/core/cli/plugin-arguments.js.map +1 -1
- package/dist/core/cli/public.d.ts +2 -2
- package/dist/core/cli/public.js +3 -3
- package/dist/core/cli/public.js.map +1 -1
- package/dist/core/runtime/launch-sequence.js +12 -5
- package/dist/core/runtime/launch-sequence.js.map +1 -1
- package/dist/core/runtime/process-claim.d.ts +7 -0
- package/dist/core/runtime/process-claim.js +111 -0
- package/dist/core/runtime/process-claim.js.map +1 -0
- package/dist/core/runtime/project-launch.js +2 -66
- package/dist/core/runtime/project-launch.js.map +1 -1
- package/dist/core/shutdown/process-tree.d.ts +1 -0
- package/dist/core/shutdown/process-tree.js +9 -0
- package/dist/core/shutdown/process-tree.js.map +1 -1
- package/dist/core/shutdown/shutdown-manager.d.ts +12 -4
- package/dist/core/shutdown/shutdown-manager.js +70 -36
- package/dist/core/shutdown/shutdown-manager.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,14 +1,36 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ShutdownManager = exports.DEFAULT_SHUTDOWN_TIMEOUT_MS = void 0;
|
|
3
|
+
exports.ShutdownManager = exports.SHUTDOWN_CLEANUP_TIMEOUT_MS = exports.DEFAULT_SHUTDOWN_TIMEOUT_MS = void 0;
|
|
4
4
|
const logging_1 = require("@antelopejs/interface-core/logging");
|
|
5
|
+
const exit_codes_1 = require("../cli/exit-codes");
|
|
5
6
|
const Logger = new logging_1.Logging.Channel("shutdown");
|
|
6
7
|
exports.DEFAULT_SHUTDOWN_TIMEOUT_MS = 10000;
|
|
7
|
-
|
|
8
|
-
const
|
|
8
|
+
exports.SHUTDOWN_CLEANUP_TIMEOUT_MS = 3000;
|
|
9
|
+
const MILLISECONDS_PER_SECOND = 1000;
|
|
10
|
+
const SIGNAL_EXIT_CODES = {
|
|
11
|
+
SIGINT: exit_codes_1.CANCELLED_EXIT_CODE,
|
|
12
|
+
SIGTERM: exit_codes_1.SUCCESS_EXIT_CODE,
|
|
13
|
+
};
|
|
14
|
+
const FORCED_EXIT_CODES = {
|
|
15
|
+
SIGINT: exit_codes_1.CANCELLED_EXIT_CODE,
|
|
16
|
+
SIGTERM: exit_codes_1.FAILURE_EXIT_CODE,
|
|
17
|
+
};
|
|
18
|
+
const SILENT_LISTENER = {
|
|
19
|
+
onStopping: () => undefined,
|
|
20
|
+
onStopped: () => undefined,
|
|
21
|
+
onForced: () => undefined,
|
|
22
|
+
};
|
|
23
|
+
function settleWithin(work, timeoutMs) {
|
|
24
|
+
let timer;
|
|
25
|
+
const timeout = new Promise((resolve) => {
|
|
26
|
+
timer = setTimeout(() => resolve(false), timeoutMs);
|
|
27
|
+
});
|
|
28
|
+
return Promise.race([work.then(() => true), timeout]).finally(() => clearTimeout(timer));
|
|
29
|
+
}
|
|
9
30
|
class ShutdownManager {
|
|
10
31
|
timeoutMs;
|
|
11
32
|
signalSource;
|
|
33
|
+
signalListener;
|
|
12
34
|
handlers = [];
|
|
13
35
|
isShuttingDown = false;
|
|
14
36
|
shutdownPromise;
|
|
@@ -16,9 +38,10 @@ class ShutdownManager {
|
|
|
16
38
|
sigintHandler;
|
|
17
39
|
sigtermHandler;
|
|
18
40
|
seenSignals = new Set();
|
|
19
|
-
constructor(timeoutMs = exports.DEFAULT_SHUTDOWN_TIMEOUT_MS, signalSource = process) {
|
|
41
|
+
constructor(timeoutMs = exports.DEFAULT_SHUTDOWN_TIMEOUT_MS, signalSource = process, signalListener = SILENT_LISTENER) {
|
|
20
42
|
this.timeoutMs = timeoutMs;
|
|
21
43
|
this.signalSource = signalSource;
|
|
44
|
+
this.signalListener = signalListener;
|
|
22
45
|
}
|
|
23
46
|
register(handler, priority) {
|
|
24
47
|
this.handlers.push({ handler, priority });
|
|
@@ -61,17 +84,22 @@ class ShutdownManager {
|
|
|
61
84
|
}
|
|
62
85
|
handleSignal(signal) {
|
|
63
86
|
if (this.isShuttingDown) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
87
|
+
this.handleSignalDuringShutdown(signal);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
this.seenSignals.add(signal);
|
|
91
|
+
this.signalListener.onStopping(signal);
|
|
92
|
+
void this.shutdown(SIGNAL_EXIT_CODES[signal]);
|
|
93
|
+
}
|
|
94
|
+
handleSignalDuringShutdown(signal) {
|
|
95
|
+
if (this.seenSignals.has(signal)) {
|
|
96
|
+
Logger.Warn(`Received ${signal} during shutdown. Forcing process exit.`);
|
|
97
|
+
this.signalListener.onForced(signal);
|
|
98
|
+
process.exit(FORCED_EXIT_CODES[signal]);
|
|
71
99
|
return;
|
|
72
100
|
}
|
|
73
101
|
this.seenSignals.add(signal);
|
|
74
|
-
|
|
102
|
+
Logger.Info(`Received ${signal} during graceful shutdown; ignoring (already shutting down).`);
|
|
75
103
|
}
|
|
76
104
|
updateRequestedExitCode(exitCode) {
|
|
77
105
|
if (typeof exitCode !== "number") {
|
|
@@ -81,42 +109,48 @@ class ShutdownManager {
|
|
|
81
109
|
this.requestedExitCode = exitCode;
|
|
82
110
|
return;
|
|
83
111
|
}
|
|
84
|
-
if (this.requestedExitCode ===
|
|
85
|
-
exitCode !==
|
|
112
|
+
if (this.requestedExitCode === exit_codes_1.SUCCESS_EXIT_CODE &&
|
|
113
|
+
exitCode !== exit_codes_1.SUCCESS_EXIT_CODE) {
|
|
86
114
|
this.requestedExitCode = exitCode;
|
|
87
115
|
}
|
|
88
116
|
}
|
|
89
117
|
async executeShutdown() {
|
|
90
|
-
await this.
|
|
118
|
+
const hasTimedOut = await this.executeHandlers();
|
|
119
|
+
if (this.seenSignals.size > 0) {
|
|
120
|
+
this.signalListener.onStopped(hasTimedOut);
|
|
121
|
+
}
|
|
91
122
|
if (typeof this.requestedExitCode === "number") {
|
|
92
123
|
process.exit(this.requestedExitCode);
|
|
93
124
|
}
|
|
94
125
|
}
|
|
95
|
-
runHandlersWithTimeout() {
|
|
96
|
-
let timeout;
|
|
97
|
-
const timeoutPromise = new Promise((resolve) => {
|
|
98
|
-
timeout = setTimeout(() => {
|
|
99
|
-
Logger.Error("Shutdown timed out, forcing completion");
|
|
100
|
-
resolve();
|
|
101
|
-
}, this.timeoutMs);
|
|
102
|
-
});
|
|
103
|
-
return Promise.race([this.executeHandlers(), timeoutPromise]).finally(() => {
|
|
104
|
-
if (timeout) {
|
|
105
|
-
clearTimeout(timeout);
|
|
106
|
-
}
|
|
107
|
-
this.handlers = [];
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
126
|
async executeHandlers() {
|
|
111
127
|
const sortedHandlers = [...this.handlers].sort((left, right) => right.priority - left.priority);
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
128
|
+
this.handlers = [];
|
|
129
|
+
const run = await this.runHandlersWithin(sortedHandlers, this.timeoutMs);
|
|
130
|
+
if (!run.hasTimedOut) {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
Logger.Error(`Shutdown timed out after ${this.timeoutMs / MILLISECONDS_PER_SECOND}s, abandoning the handler still running`);
|
|
134
|
+
await this.runHandlersWithin(run.remaining, exports.SHUTDOWN_CLEANUP_TIMEOUT_MS);
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
async runHandlersWithin(handlers, timeoutMs) {
|
|
138
|
+
const deadline = Date.now() + timeoutMs;
|
|
139
|
+
for (const [index, { handler }] of handlers.entries()) {
|
|
140
|
+
const hasSettled = await settleWithin(this.runHandler(handler), deadline - Date.now());
|
|
141
|
+
if (!hasSettled) {
|
|
142
|
+
return { hasTimedOut: true, remaining: handlers.slice(index + 1) };
|
|
118
143
|
}
|
|
119
144
|
}
|
|
145
|
+
return { hasTimedOut: false, remaining: [] };
|
|
146
|
+
}
|
|
147
|
+
async runHandler(handler) {
|
|
148
|
+
try {
|
|
149
|
+
await handler();
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
Logger.Error("Shutdown handler error:", error);
|
|
153
|
+
}
|
|
120
154
|
}
|
|
121
155
|
}
|
|
122
156
|
exports.ShutdownManager = ShutdownManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown-manager.js","sourceRoot":"","sources":["../../../src/core/shutdown/shutdown-manager.ts"],"names":[],"mappings":";;;AAAA,gEAA6D;
|
|
1
|
+
{"version":3,"file":"shutdown-manager.js","sourceRoot":"","sources":["../../../src/core/shutdown/shutdown-manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antelopejs/core",
|
|
3
|
-
"version": "1.13.
|
|
3
|
+
"version": "1.13.3",
|
|
4
4
|
"description": "TypeScript framework extending hexagonal architecture across your application and its ecosystem through explicit contracts and replaceable modules.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"antelopejs",
|