@antelopejs/core 1.13.1 → 1.13.2
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/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
|
@@ -40,7 +40,6 @@ exports.prepareFromRefreshedArtifact = exports.prepareFromArtifact = exports.pre
|
|
|
40
40
|
exports.memoizeLoaderContext = memoizeLoaderContext;
|
|
41
41
|
exports.runLaunchSequence = runLaunchSequence;
|
|
42
42
|
const node_path_1 = __importDefault(require("node:path"));
|
|
43
|
-
const shutdown_1 = require("../shutdown");
|
|
44
43
|
const filesystem_1 = require("../filesystem");
|
|
45
44
|
const module_manager_1 = require("../module-manager");
|
|
46
45
|
const tasks_1 = require("../cli/output/tasks");
|
|
@@ -50,6 +49,7 @@ const dev_server_registry_1 = require("./dev-server-registry");
|
|
|
50
49
|
const runtime_policy_1 = require("./runtime-policy");
|
|
51
50
|
const build_runtime_1 = require("./build-runtime");
|
|
52
51
|
const runtime_bootstrap_1 = require("./runtime-bootstrap");
|
|
52
|
+
const process_claim_1 = require("./process-claim");
|
|
53
53
|
const module_loading_1 = require("./module-loading");
|
|
54
54
|
function memoizeLoaderContext(create) {
|
|
55
55
|
let pending;
|
|
@@ -114,8 +114,16 @@ const prepareFromRefreshedArtifact = async (projectFolder, env) => {
|
|
|
114
114
|
return prepareFromBuiltArtifact(artifact, projectFolder, fs, () => (0, build_runtime_1.ensureBuildModulesExist)(artifact, fs));
|
|
115
115
|
};
|
|
116
116
|
exports.prepareFromRefreshedArtifact = prepareFromRefreshedArtifact;
|
|
117
|
+
function armShutdown(shutdownManager, manager, policy) {
|
|
118
|
+
const moduleShutdown = (0, process_claim_1.registerModuleShutdownHandler)(shutdownManager, manager);
|
|
119
|
+
if (policy.processHandlers) {
|
|
120
|
+
(0, runtime_bootstrap_1.setupProcessHandlers)(shutdownManager);
|
|
121
|
+
}
|
|
122
|
+
(0, process_claim_1.claimProcess)(shutdownManager, policy);
|
|
123
|
+
return moduleShutdown;
|
|
124
|
+
}
|
|
117
125
|
async function runLaunchSequence(prepare, projectFolder, env, options, policy = runtime_policy_1.DEFAULT_RUNTIME_POLICY) {
|
|
118
|
-
const shutdownManager =
|
|
126
|
+
const shutdownManager = (0, process_claim_1.createShutdownManager)(policy);
|
|
119
127
|
const manager = new module_manager_1.ModuleManager();
|
|
120
128
|
const request = {
|
|
121
129
|
prepare,
|
|
@@ -124,15 +132,14 @@ async function runLaunchSequence(prepare, projectFolder, env, options, policy =
|
|
|
124
132
|
options,
|
|
125
133
|
policy,
|
|
126
134
|
};
|
|
127
|
-
|
|
128
|
-
(0, runtime_bootstrap_1.setupProcessHandlers)(shutdownManager);
|
|
129
|
-
}
|
|
135
|
+
const moduleShutdown = armShutdown(shutdownManager, manager, policy);
|
|
130
136
|
const previouslySilent = tasks_1.terminalDisplay.isSilent();
|
|
131
137
|
tasks_1.terminalDisplay.setSilent(!policy.terminal);
|
|
132
138
|
try {
|
|
133
139
|
return await completeLaunchSequence(request, shutdownManager, manager);
|
|
134
140
|
}
|
|
135
141
|
catch (error) {
|
|
142
|
+
shutdownManager.unregister(moduleShutdown);
|
|
136
143
|
const cleanupErrors = await cleanupFailedLaunch(manager, shutdownManager);
|
|
137
144
|
(0, runtime_bootstrap_1.releaseProcessShutdownManager)(shutdownManager);
|
|
138
145
|
if (cleanupErrors.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch-sequence.js","sourceRoot":"","sources":["../../../src/core/runtime/launch-sequence.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"launch-sequence.js","sourceRoot":"","sources":["../../../src/core/runtime/launch-sequence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ModuleManager } from "../module-manager";
|
|
2
|
+
import type { RuntimePolicy } from "./runtime-policy";
|
|
3
|
+
import { type ShutdownHandler, ShutdownManager } from "../shutdown";
|
|
4
|
+
export declare function getActiveShutdownManager(): ShutdownManager | undefined;
|
|
5
|
+
export declare function createShutdownManager(policy: RuntimePolicy): ShutdownManager;
|
|
6
|
+
export declare function registerModuleShutdownHandler(shutdownManager: ShutdownManager, manager: ModuleManager): ShutdownHandler;
|
|
7
|
+
export declare function claimProcess(shutdownManager: ShutdownManager, policy: RuntimePolicy): void;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getActiveShutdownManager = getActiveShutdownManager;
|
|
4
|
+
exports.createShutdownManager = createShutdownManager;
|
|
5
|
+
exports.registerModuleShutdownHandler = registerModuleShutdownHandler;
|
|
6
|
+
exports.claimProcess = claimProcess;
|
|
7
|
+
const logging_1 = require("@antelopejs/interface-core/logging");
|
|
8
|
+
const tasks_1 = require("../cli/output/tasks");
|
|
9
|
+
const runtime_bootstrap_1 = require("./runtime-bootstrap");
|
|
10
|
+
const shutdown_1 = require("../shutdown");
|
|
11
|
+
const Logger = new logging_1.Logging.Channel("loader");
|
|
12
|
+
const SHUTDOWN_PRIORITY_MODULES = 30;
|
|
13
|
+
const SHUTDOWN_PRIORITY_CHILD_PROCESSES = 15;
|
|
14
|
+
const SHUTDOWN_PRIORITY_CLEANUP = 10;
|
|
15
|
+
const STOPPING_LABELS = {
|
|
16
|
+
SIGINT: "Stopping the project (Ctrl+C again to force)",
|
|
17
|
+
SIGTERM: "Stopping the project",
|
|
18
|
+
};
|
|
19
|
+
const STOPPED_LABEL = "Stopped the project";
|
|
20
|
+
const TIMED_OUT_LABEL = "Stopped the project after the shutdown timed out";
|
|
21
|
+
const FORCED_LABEL = "Stopped the project without waiting for its shutdown";
|
|
22
|
+
const activeShutdownManagers = [];
|
|
23
|
+
function getActiveShutdownManager() {
|
|
24
|
+
return activeShutdownManagers.at(-1);
|
|
25
|
+
}
|
|
26
|
+
function setActiveShutdownManager(shutdownManager) {
|
|
27
|
+
releaseActiveShutdownManager(shutdownManager);
|
|
28
|
+
activeShutdownManagers.at(-1)?.removeSignalHandlers();
|
|
29
|
+
activeShutdownManagers.push(shutdownManager);
|
|
30
|
+
shutdownManager.setupSignalHandlers();
|
|
31
|
+
}
|
|
32
|
+
function releaseActiveShutdownManager(shutdownManager) {
|
|
33
|
+
const index = activeShutdownManagers.indexOf(shutdownManager);
|
|
34
|
+
if (index === -1) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const wasActive = index === activeShutdownManagers.length - 1;
|
|
38
|
+
activeShutdownManagers.splice(index, 1);
|
|
39
|
+
shutdownManager.removeSignalHandlers();
|
|
40
|
+
if (wasActive) {
|
|
41
|
+
activeShutdownManagers.at(-1)?.setupSignalHandlers();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function createStopListener(isReported) {
|
|
45
|
+
let task;
|
|
46
|
+
return {
|
|
47
|
+
onStopping: (signal) => {
|
|
48
|
+
task = isReported
|
|
49
|
+
? (0, tasks_1.getProcessTasks)().start(STOPPING_LABELS[signal])
|
|
50
|
+
: undefined;
|
|
51
|
+
},
|
|
52
|
+
onStopped: (hasTimedOut) => {
|
|
53
|
+
if (hasTimedOut) {
|
|
54
|
+
task?.warn(TIMED_OUT_LABEL);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
task?.succeed(STOPPED_LABEL);
|
|
58
|
+
},
|
|
59
|
+
onForced: () => {
|
|
60
|
+
(0, shutdown_1.killProcessTree)();
|
|
61
|
+
task?.warn(FORCED_LABEL);
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function createShutdownManager(policy) {
|
|
66
|
+
return new shutdown_1.ShutdownManager(shutdown_1.DEFAULT_SHUTDOWN_TIMEOUT_MS, process, createStopListener(policy.terminal));
|
|
67
|
+
}
|
|
68
|
+
async function shutdownModules(manager) {
|
|
69
|
+
const errors = [];
|
|
70
|
+
try {
|
|
71
|
+
await manager.stopAll();
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
errors.push(error);
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
await manager.destroyAll();
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
errors.push(error);
|
|
81
|
+
}
|
|
82
|
+
if (errors.length > 0) {
|
|
83
|
+
throw new AggregateError(errors, "Shutdown failed");
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function registerModuleShutdownHandler(shutdownManager, manager) {
|
|
87
|
+
const handler = () => shutdownModules(manager);
|
|
88
|
+
shutdownManager.register(handler, SHUTDOWN_PRIORITY_MODULES);
|
|
89
|
+
return handler;
|
|
90
|
+
}
|
|
91
|
+
function registerChildProcessCleanup(shutdownManager) {
|
|
92
|
+
shutdownManager.register(async () => {
|
|
93
|
+
const terminated = await (0, shutdown_1.terminateProcessTree)();
|
|
94
|
+
if (terminated.length > 0) {
|
|
95
|
+
Logger.Debug(`Terminated ${terminated.length} leftover child process(es): ${terminated.join(", ")}`);
|
|
96
|
+
}
|
|
97
|
+
}, SHUTDOWN_PRIORITY_CHILD_PROCESSES);
|
|
98
|
+
}
|
|
99
|
+
function claimProcess(shutdownManager, policy) {
|
|
100
|
+
if (policy.signals) {
|
|
101
|
+
registerChildProcessCleanup(shutdownManager);
|
|
102
|
+
}
|
|
103
|
+
shutdownManager.register(async () => {
|
|
104
|
+
releaseActiveShutdownManager(shutdownManager);
|
|
105
|
+
(0, runtime_bootstrap_1.releaseProcessShutdownManager)(shutdownManager);
|
|
106
|
+
}, SHUTDOWN_PRIORITY_CLEANUP);
|
|
107
|
+
if (policy.signals) {
|
|
108
|
+
setActiveShutdownManager(shutdownManager);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=process-claim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-claim.js","sourceRoot":"","sources":["../../../src/core/runtime/process-claim.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,74 +37,18 @@ exports.startProject = startProject;
|
|
|
37
37
|
exports.launchFromBuild = launchFromBuild;
|
|
38
38
|
const node_stream_1 = require("node:stream");
|
|
39
39
|
const logging_1 = require("@antelopejs/interface-core/logging");
|
|
40
|
+
const process_claim_1 = require("./process-claim");
|
|
40
41
|
const runtime_bootstrap_1 = require("./runtime-bootstrap");
|
|
41
42
|
const config_paths_1 = require("../config/config-paths");
|
|
42
|
-
const shutdown_1 = require("../shutdown");
|
|
43
43
|
const runtime_policy_1 = require("./runtime-policy");
|
|
44
44
|
const launch_sequence_1 = require("./launch-sequence");
|
|
45
45
|
const Logger = new logging_1.Logging.Channel("loader");
|
|
46
46
|
const MAX_STREAM_LISTENERS = 20;
|
|
47
47
|
const INTERACTIVE_PROMPT = "> ";
|
|
48
|
-
const SHUTDOWN_PRIORITY_MODULES = 30;
|
|
49
48
|
const SHUTDOWN_PRIORITY_RESOURCES = 20;
|
|
50
|
-
const SHUTDOWN_PRIORITY_CHILD_PROCESSES = 15;
|
|
51
49
|
const SHUTDOWN_PRIORITY_CLEANUP = 10;
|
|
52
50
|
const UNSUPPORTED_ARTIFACT_OPTIONS_WARNING = "Watch and interactive modes are only available when launching from configuration; ignoring them for this build artifact launch.";
|
|
53
51
|
node_stream_1.Writable.prototype.setMaxListeners(MAX_STREAM_LISTENERS);
|
|
54
|
-
const activeShutdownManagers = [];
|
|
55
|
-
function setActiveShutdownManager(shutdownManager) {
|
|
56
|
-
releaseActiveShutdownManager(shutdownManager);
|
|
57
|
-
activeShutdownManagers.at(-1)?.removeSignalHandlers();
|
|
58
|
-
activeShutdownManagers.push(shutdownManager);
|
|
59
|
-
shutdownManager.setupSignalHandlers();
|
|
60
|
-
}
|
|
61
|
-
function releaseActiveShutdownManager(shutdownManager) {
|
|
62
|
-
const index = activeShutdownManagers.indexOf(shutdownManager);
|
|
63
|
-
if (index === -1) {
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
const wasActive = index === activeShutdownManagers.length - 1;
|
|
67
|
-
activeShutdownManagers.splice(index, 1);
|
|
68
|
-
shutdownManager.removeSignalHandlers();
|
|
69
|
-
if (wasActive) {
|
|
70
|
-
activeShutdownManagers.at(-1)?.setupSignalHandlers();
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
function registerModuleShutdownHandler(shutdownManager, manager) {
|
|
74
|
-
shutdownManager.register(() => shutdownModules(manager), SHUTDOWN_PRIORITY_MODULES);
|
|
75
|
-
}
|
|
76
|
-
async function shutdownModules(manager) {
|
|
77
|
-
const errors = [];
|
|
78
|
-
try {
|
|
79
|
-
await manager.stopAll();
|
|
80
|
-
}
|
|
81
|
-
catch (error) {
|
|
82
|
-
errors.push(error);
|
|
83
|
-
}
|
|
84
|
-
try {
|
|
85
|
-
await manager.destroyAll();
|
|
86
|
-
}
|
|
87
|
-
catch (error) {
|
|
88
|
-
errors.push(error);
|
|
89
|
-
}
|
|
90
|
-
if (errors.length > 0) {
|
|
91
|
-
throw new AggregateError(errors, "Shutdown failed");
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
function registerChildProcessCleanup(shutdownManager) {
|
|
95
|
-
shutdownManager.register(async () => {
|
|
96
|
-
const terminated = await (0, shutdown_1.terminateProcessTree)();
|
|
97
|
-
if (terminated.length > 0) {
|
|
98
|
-
Logger.Debug(`Terminated ${terminated.length} leftover child process(es): ${terminated.join(", ")}`);
|
|
99
|
-
}
|
|
100
|
-
}, SHUTDOWN_PRIORITY_CHILD_PROCESSES);
|
|
101
|
-
}
|
|
102
|
-
function registerShutdownCleanup(shutdownManager) {
|
|
103
|
-
shutdownManager.register(async () => {
|
|
104
|
-
releaseActiveShutdownManager(shutdownManager);
|
|
105
|
-
(0, runtime_bootstrap_1.releaseProcessShutdownManager)(shutdownManager);
|
|
106
|
-
}, SHUTDOWN_PRIORITY_CLEANUP);
|
|
107
|
-
}
|
|
108
52
|
function keepRunningThroughFailedReloads(shutdownManager) {
|
|
109
53
|
const withdraw = (0, runtime_bootstrap_1.tolerateInvalidatedModuleWork)();
|
|
110
54
|
shutdownManager.register(async () => {
|
|
@@ -151,11 +95,6 @@ async function setupWatching(manager, fs, projectFolder, env, options, shutdownM
|
|
|
151
95
|
}
|
|
152
96
|
async function setupPostLaunchFeatures(started, projectFolder, env, options) {
|
|
153
97
|
const { manager, shutdownManager } = started;
|
|
154
|
-
registerModuleShutdownHandler(shutdownManager, manager);
|
|
155
|
-
if (started.policy.signals) {
|
|
156
|
-
registerChildProcessCleanup(shutdownManager);
|
|
157
|
-
}
|
|
158
|
-
registerShutdownCleanup(shutdownManager);
|
|
159
98
|
if (!started.dev && (options.watch || options.interactive)) {
|
|
160
99
|
Logger.Warn(UNSUPPORTED_ARTIFACT_OPTIONS_WARNING);
|
|
161
100
|
}
|
|
@@ -170,9 +109,6 @@ async function setupPostLaunchFeatures(started, projectFolder, env, options) {
|
|
|
170
109
|
}, SHUTDOWN_PRIORITY_RESOURCES);
|
|
171
110
|
repl.start(INTERACTIVE_PROMPT);
|
|
172
111
|
}
|
|
173
|
-
if (started.policy.signals) {
|
|
174
|
-
setActiveShutdownManager(shutdownManager);
|
|
175
|
-
}
|
|
176
112
|
}
|
|
177
113
|
async function startProject(prepare, projectFolder, env, options, policy = runtime_policy_1.DEFAULT_RUNTIME_POLICY) {
|
|
178
114
|
const started = await (0, launch_sequence_1.runLaunchSequence)(prepare, projectFolder, env, options, policy);
|
|
@@ -191,7 +127,7 @@ async function restartProject(projectFolder, env, options) {
|
|
|
191
127
|
return;
|
|
192
128
|
isRestarting = true;
|
|
193
129
|
try {
|
|
194
|
-
const activeShutdownManager =
|
|
130
|
+
const activeShutdownManager = (0, process_claim_1.getActiveShutdownManager)();
|
|
195
131
|
if (activeShutdownManager) {
|
|
196
132
|
await activeShutdownManager.shutdown();
|
|
197
133
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-launch.js","sourceRoot":"","sources":["../../../src/core/runtime/project-launch.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"project-launch.js","sourceRoot":"","sources":["../../../src/core/runtime/project-launch.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqIA,oCAqBC;AAwBD,0CAYC;AA9LD,6CAAuC;AACvC,gEAA6D;AAK7D,mDAA2D;AAC3D,2DAAoE;AACpE,yDAAwE;AAExE,qDAA8E;AAM9E,uDAK2B;AAE3B,MAAM,MAAM,GAAG,IAAI,iBAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE7C,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,2BAA2B,GAAG,EAAE,CAAC;AACvC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AACrC,MAAM,oCAAoC,GACxC,iIAAiI,CAAC;AAEpI,sBAAQ,CAAC,SAAS,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC;AAOzD,SAAS,+BAA+B,CACtC,eAAgC;IAEhC,MAAM,QAAQ,GAAG,IAAA,iDAA6B,GAAE,CAAC;IACjD,eAAe,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClC,QAAQ,EAAE,CAAC;IACb,CAAC,EAAE,yBAAyB,CAAC,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,OAAsB,EACtB,EAAkB,EAClB,aAAqB,EACrB,GAAW,EACX,OAAsB,EACtB,eAAgC,EAChC,aAA4B;IAE5B,MAAM,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;0DACjE,uBAAuB;0DACvB,qBAAqB;0DACrB,kBAAkB;KAC1B,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;IACpC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QACjD,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE,CAAC;YACjD,OAAO;QACT,CAAC;QACD,MAAM,aAAa,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC1E,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,eAAe,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClC,SAAS,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC,EAAE,2BAA2B,CAAC,CAAC;IAChC,+BAA+B,CAAC,eAAe,CAAC,CAAC;IAEjD,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;QACpD,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;YAC9C,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrE,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACvE,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,IAAA,gCAAiB,EAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAC9D,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,EAAE;YACvC,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;YACjE,KAAK,cAAc,CAAC,aAAa,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,aAAa,EAAE,CAAC;AAC1B,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,OAAuB,EACvB,aAAqB,EACrB,GAAW,EACX,OAAsB;IAEtB,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAE7C,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,aAAa,CACjB,OAAO,EACP,OAAO,CAAC,EAAE,EACV,aAAa,EACb,GAAG,EACH,OAAO,EACP,eAAe,EACf,MAAM,OAAO,CAAC,WAAW,EAAE,CAC5B,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,EAAE,WAAW,EAAE,GAAG,wDAAa,sBAAsB,GAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;QACzD,eAAe,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAClC,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,EAAE,2BAA2B,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,YAAY,CAChC,OAAwB,EACxB,aAAqB,EACrB,GAAW,EACX,OAAsB,EACtB,SAAwB,uCAAsB;IAE9C,MAAM,OAAO,GAAG,MAAM,IAAA,mCAAiB,EACrC,OAAO,EACP,aAAa,EACb,GAAG,EACH,OAAO,EACP,MAAM,CACP,CAAC;IACF,IAAI,CAAC;QACH,MAAM,uBAAuB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACpE,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;QACzC,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,IAAI,YAAY,GAAG,KAAK,CAAC;AAEzB,KAAK,UAAU,cAAc,CAC3B,aAAqB,EACrB,GAAW,EACX,OAAsB;IAEtB,IAAI,YAAY;QAAE,OAAO;IACzB,YAAY,GAAG,IAAI,CAAC;IAEpB,IAAI,CAAC;QACH,MAAM,qBAAqB,GAAG,IAAA,wCAAwB,GAAE,CAAC;QACzD,IAAI,qBAAqB,EAAE,CAAC;YAC1B,MAAM,qBAAqB,CAAC,QAAQ,EAAE,CAAC;QACzC,CAAC;QAED,MAAM,YAAY,CAAC,mCAAiB,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;YAAS,CAAC;QACT,YAAY,GAAG,KAAK,CAAC;IACvB,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,gBAAwB,GAAG,EAC3B,MAAc,0BAAW,EACzB,UAA8B,EAAE;IAEhC,MAAM,OAAO,GAAG,MAAM,YAAY,CAChC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,8CAA4B,CAAC,CAAC,CAAC,qCAAmB,EAC1E,aAAa,EACb,GAAG,IAAI,0BAAW,EAClB,OAAO,CACR,CAAC;IACF,OAAO,OAAO,CAAC,OAAO,CAAC;AACzB,CAAC"}
|
|
@@ -8,5 +8,6 @@ export interface ProcessTreeOptions {
|
|
|
8
8
|
gracePeriodMs?: number;
|
|
9
9
|
}
|
|
10
10
|
export declare function collectDescendants(rootPid: number, options?: ProcessTreeOptions): number[];
|
|
11
|
+
export declare function killProcessTree(rootPid?: number, options?: ProcessTreeOptions): number[];
|
|
11
12
|
export declare function terminateProcessTree(rootPid?: number, options?: ProcessTreeOptions): Promise<number[]>;
|
|
12
13
|
export {};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.collectDescendants = collectDescendants;
|
|
4
|
+
exports.killProcessTree = killProcessTree;
|
|
4
5
|
exports.terminateProcessTree = terminateProcessTree;
|
|
5
6
|
const node_fs_1 = require("node:fs");
|
|
6
7
|
const PROC_PATH = "/proc";
|
|
@@ -92,6 +93,14 @@ function collectDescendants(rootPid, options = {}) {
|
|
|
92
93
|
}
|
|
93
94
|
return descendants;
|
|
94
95
|
}
|
|
96
|
+
function killProcessTree(rootPid = process.pid, options = {}) {
|
|
97
|
+
const kill = options.kill ?? defaultKill;
|
|
98
|
+
const descendants = collectDescendants(rootPid, options);
|
|
99
|
+
for (const pid of descendants) {
|
|
100
|
+
signal(pid, "SIGKILL", kill);
|
|
101
|
+
}
|
|
102
|
+
return descendants;
|
|
103
|
+
}
|
|
95
104
|
async function terminateProcessTree(rootPid = process.pid, options = {}) {
|
|
96
105
|
const descendants = collectDescendants(rootPid, options);
|
|
97
106
|
if (descendants.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-tree.js","sourceRoot":"","sources":["../../../src/core/shutdown/process-tree.ts"],"names":[],"mappings":";;AAqFA,gDAqCC;AAeD,oDA4BC;
|
|
1
|
+
{"version":3,"file":"process-tree.js","sourceRoot":"","sources":["../../../src/core/shutdown/process-tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
export type ShutdownHandler = () => Promise<void> | void;
|
|
2
|
-
type ProcessSignal = "SIGINT" | "SIGTERM";
|
|
2
|
+
export type ProcessSignal = "SIGINT" | "SIGTERM";
|
|
3
3
|
export interface ProcessSignalSource {
|
|
4
4
|
on(signal: ProcessSignal, listener: () => void): unknown;
|
|
5
5
|
removeListener(signal: ProcessSignal, listener: () => void): unknown;
|
|
6
6
|
}
|
|
7
|
+
export interface SignalShutdownListener {
|
|
8
|
+
onStopping(signal: ProcessSignal): void;
|
|
9
|
+
onStopped(hasTimedOut: boolean): void;
|
|
10
|
+
onForced(signal: ProcessSignal): void;
|
|
11
|
+
}
|
|
7
12
|
export declare const DEFAULT_SHUTDOWN_TIMEOUT_MS = 10000;
|
|
13
|
+
export declare const SHUTDOWN_CLEANUP_TIMEOUT_MS = 3000;
|
|
8
14
|
export declare class ShutdownManager {
|
|
9
15
|
private timeoutMs;
|
|
10
16
|
private signalSource;
|
|
17
|
+
private signalListener;
|
|
11
18
|
private handlers;
|
|
12
19
|
private isShuttingDown;
|
|
13
20
|
private shutdownPromise?;
|
|
@@ -15,7 +22,7 @@ export declare class ShutdownManager {
|
|
|
15
22
|
private sigintHandler?;
|
|
16
23
|
private sigtermHandler?;
|
|
17
24
|
private seenSignals;
|
|
18
|
-
constructor(timeoutMs?: number, signalSource?: ProcessSignalSource);
|
|
25
|
+
constructor(timeoutMs?: number, signalSource?: ProcessSignalSource, signalListener?: SignalShutdownListener);
|
|
19
26
|
register(handler: ShutdownHandler, priority: number): void;
|
|
20
27
|
unregister(handler: ShutdownHandler): void;
|
|
21
28
|
shutdown(exitCode?: number): Promise<void>;
|
|
@@ -24,9 +31,10 @@ export declare class ShutdownManager {
|
|
|
24
31
|
removeSignalHandlers(): void;
|
|
25
32
|
private detachSignalHandler;
|
|
26
33
|
private handleSignal;
|
|
34
|
+
private handleSignalDuringShutdown;
|
|
27
35
|
private updateRequestedExitCode;
|
|
28
36
|
private executeShutdown;
|
|
29
|
-
private runHandlersWithTimeout;
|
|
30
37
|
private executeHandlers;
|
|
38
|
+
private runHandlersWithin;
|
|
39
|
+
private runHandler;
|
|
31
40
|
}
|
|
32
|
-
export {};
|
|
@@ -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.2",
|
|
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",
|