@zudojs/lifecycle 1.2.3 → 1.3.0
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/README.md +44 -15
- package/dist/index.d.ts +2 -3
- package/dist/index.js +7 -1
- package/dist/lifecycleComponent/index.d.ts +0 -1
- package/dist/lifecycleComponent/index.js +0 -1
- package/dist/lifecycleComponent/lifecycleComponent.type.d.ts +27 -8
- package/dist/lifecycleComponent/lifecycleComponent.type.js +0 -1
- package/dist/lifecycleContext/index.d.ts +0 -1
- package/dist/lifecycleContext/index.js +0 -1
- package/dist/lifecycleContext/lifecycleContext.type.d.ts +0 -1
- package/dist/lifecycleContext/lifecycleContext.type.js +0 -1
- package/dist/lifecycleEvents/index.d.ts +0 -1
- package/dist/lifecycleEvents/index.js +0 -1
- package/dist/lifecycleEvents/lifecycleEvents.core.d.ts +20 -5
- package/dist/lifecycleEvents/lifecycleEvents.core.js +0 -1
- package/dist/lifecycleExecutor/index.d.ts +3 -3
- package/dist/lifecycleExecutor/index.js +2 -2
- package/dist/lifecycleExecutor/lifecycleExecutor.abandoned.d.ts +31 -0
- package/dist/lifecycleExecutor/lifecycleExecutor.abandoned.js +75 -0
- package/dist/lifecycleExecutor/lifecycleExecutor.core.d.ts +18 -24
- package/dist/lifecycleExecutor/lifecycleExecutor.core.js +64 -105
- package/dist/lifecycleExecutor/lifecycleExecutor.retry.d.ts +30 -0
- package/dist/lifecycleExecutor/lifecycleExecutor.retry.js +66 -0
- package/dist/lifecycleExecutor/lifecycleExecutor.type.d.ts +50 -0
- package/dist/lifecycleExecutor/lifecycleExecutor.type.js +6 -0
- package/dist/lifecycleInternal/asyncUtils.core.d.ts +0 -1
- package/dist/lifecycleInternal/asyncUtils.core.js +0 -1
- package/dist/lifecycleInternal/dependencyGraph.core.d.ts +34 -7
- package/dist/lifecycleInternal/dependencyGraph.core.js +55 -38
- package/dist/lifecycleInternal/dependencyGraph.cycle.d.ts +20 -0
- package/dist/lifecycleInternal/dependencyGraph.cycle.js +57 -0
- package/dist/lifecycleInternal/index.d.ts +1 -1
- package/dist/lifecycleInternal/index.js +0 -1
- package/dist/lifecycleInternal/timeoutBudget.core.d.ts +0 -1
- package/dist/lifecycleInternal/timeoutBudget.core.js +0 -1
- package/dist/lifecycleInternal/topologicalSort.core.d.ts +12 -2
- package/dist/lifecycleInternal/topologicalSort.core.js +41 -22
- package/dist/lifecycleManager/index.d.ts +0 -1
- package/dist/lifecycleManager/index.js +0 -1
- package/dist/lifecycleManager/lifecycleManager.context.d.ts +15 -7
- package/dist/lifecycleManager/lifecycleManager.context.js +0 -1
- package/dist/lifecycleManager/lifecycleManager.core.d.ts +12 -2
- package/dist/lifecycleManager/lifecycleManager.core.js +30 -3
- package/dist/lifecycleManager/lifecycleManager.deadline.d.ts +29 -0
- package/dist/lifecycleManager/lifecycleManager.deadline.js +79 -0
- package/dist/lifecycleManager/lifecycleManager.shutdown.d.ts +0 -1
- package/dist/lifecycleManager/lifecycleManager.shutdown.js +60 -69
- package/dist/lifecycleManager/lifecycleManager.startup.d.ts +0 -1
- package/dist/lifecycleManager/lifecycleManager.startup.js +12 -4
- package/dist/lifecyclePhase/index.d.ts +0 -1
- package/dist/lifecyclePhase/index.js +0 -1
- package/dist/lifecyclePhase/lifecyclePhase.core.d.ts +0 -1
- package/dist/lifecyclePhase/lifecyclePhase.core.js +0 -1
- package/dist/lifecyclePlan/index.d.ts +0 -1
- package/dist/lifecyclePlan/index.js +0 -1
- package/dist/lifecyclePlan/lifecyclePlan.core.d.ts +0 -1
- package/dist/lifecyclePlan/lifecyclePlan.core.js +0 -2
- package/dist/lifecycleRegistry/index.d.ts +0 -1
- package/dist/lifecycleRegistry/index.js +0 -1
- package/dist/lifecycleRegistry/lifecycleRegistry.core.d.ts +0 -1
- package/dist/lifecycleRegistry/lifecycleRegistry.core.js +3 -2
- package/dist/lifecycleSignal/index.d.ts +0 -1
- package/dist/lifecycleSignal/index.js +0 -1
- package/dist/lifecycleSignal/lifecycleSignal.handler.d.ts +0 -1
- package/dist/lifecycleSignal/lifecycleSignal.handler.js +0 -1
- package/dist/lifecycleState/index.d.ts +0 -1
- package/dist/lifecycleState/index.js +0 -1
- package/dist/lifecycleState/lifecycleState.machine.d.ts +0 -1
- package/dist/lifecycleState/lifecycleState.machine.js +0 -1
- package/package.json +3 -3
|
@@ -40,7 +40,7 @@ const PHASE_EVENTS = {
|
|
|
40
40
|
end: "component:started",
|
|
41
41
|
},
|
|
42
42
|
[LifecyclePhase.READY]: {
|
|
43
|
-
begin: "component:
|
|
43
|
+
begin: "component:readying",
|
|
44
44
|
end: "component:ready",
|
|
45
45
|
},
|
|
46
46
|
};
|
|
@@ -48,7 +48,7 @@ const PHASE_EVENTS = {
|
|
|
48
48
|
const PHASE_APPLICATION_EVENT = {
|
|
49
49
|
[LifecyclePhase.INITIALIZE]: "application:initializing",
|
|
50
50
|
[LifecyclePhase.START]: "application:starting",
|
|
51
|
-
[LifecyclePhase.READY]: "application:
|
|
51
|
+
[LifecyclePhase.READY]: "application:readying",
|
|
52
52
|
};
|
|
53
53
|
/**
|
|
54
54
|
* Performs the full startup sequence: initialize → start → ready.
|
|
@@ -189,7 +189,6 @@ async function executePhase(ctx, phase) {
|
|
|
189
189
|
continue;
|
|
190
190
|
transitionComponentBatch(ctx, runnable.map((r) => r.id), EXECUTING_STATE[phase]);
|
|
191
191
|
for (const reg of runnable) {
|
|
192
|
-
markAttempted(ctx, reg.id, phase);
|
|
193
192
|
ctx.events.emit(events.begin, {
|
|
194
193
|
component: { componentId: reg.id },
|
|
195
194
|
});
|
|
@@ -205,6 +204,16 @@ async function executePhase(ctx, phase) {
|
|
|
205
204
|
}
|
|
206
205
|
for (const result of results) {
|
|
207
206
|
recordResult(ctx, result);
|
|
207
|
+
// A phase counts as reached when its hook completed or timed out
|
|
208
|
+
// (still running, outcome unknown). `initialize` counts even when
|
|
209
|
+
// it threw: a half-initialised component may hold resources that
|
|
210
|
+
// only dispose() releases. A thrown start() does NOT count, so
|
|
211
|
+
// stop() is never called on a component that never started.
|
|
212
|
+
if (result.success ||
|
|
213
|
+
result.timedOut === true ||
|
|
214
|
+
phase === LifecyclePhase.INITIALIZE) {
|
|
215
|
+
markAttempted(ctx, result.id, phase);
|
|
216
|
+
}
|
|
208
217
|
if (!result.success) {
|
|
209
218
|
transitionComponent(ctx, result.id, LifecycleState.FAILED);
|
|
210
219
|
emitComponentFailed(ctx, result);
|
|
@@ -226,4 +235,3 @@ async function executePhase(ctx, phase) {
|
|
|
226
235
|
}
|
|
227
236
|
return undefined;
|
|
228
237
|
}
|
|
229
|
-
//# sourceMappingURL=lifecycleManager.startup.js.map
|
|
@@ -23,4 +23,3 @@ export interface ExecutionPlan {
|
|
|
23
23
|
* Builds an execution plan for a given lifecycle phase.
|
|
24
24
|
*/
|
|
25
25
|
export declare function buildExecutionPlan(registrations: readonly LifecycleRegistration[], phase: LifecyclePhase): ExecutionPlan;
|
|
26
|
-
//# sourceMappingURL=lifecyclePlan.core.d.ts.map
|
|
@@ -35,10 +35,8 @@ function buildGraphForPhase(registrations) {
|
|
|
35
35
|
for (const reg of registrations) {
|
|
36
36
|
graph.addNode(reg.id);
|
|
37
37
|
for (const dep of reg.dependsOn) {
|
|
38
|
-
graph.addNode(dep);
|
|
39
38
|
graph.addEdge(reg.id, dep);
|
|
40
39
|
}
|
|
41
40
|
}
|
|
42
41
|
return graph;
|
|
43
42
|
}
|
|
44
|
-
//# sourceMappingURL=lifecyclePlan.core.js.map
|
|
@@ -45,8 +45,10 @@ export class LifecycleRegistry {
|
|
|
45
45
|
};
|
|
46
46
|
this._registrations.set(id, registration);
|
|
47
47
|
this._graph.addNode(id);
|
|
48
|
+
// Dependencies are NOT declared here: the graph tracks them as
|
|
49
|
+
// undeclared until the dependency itself registers, so a typo in
|
|
50
|
+
// `dependsOn` is caught by the graph as well as by validate().
|
|
48
51
|
for (const dep of registration.dependsOn) {
|
|
49
|
-
this._graph.addNode(dep);
|
|
50
52
|
this._graph.addEdge(id, dep);
|
|
51
53
|
}
|
|
52
54
|
}
|
|
@@ -95,4 +97,3 @@ export class LifecycleRegistry {
|
|
|
95
97
|
return this._registrations.size;
|
|
96
98
|
}
|
|
97
99
|
}
|
|
98
|
-
//# sourceMappingURL=lifecycleRegistry.core.js.map
|
|
@@ -26,4 +26,3 @@ export declare const DEFAULT_SHUTDOWN_SIGNALS: readonly NodeJS.Signals[];
|
|
|
26
26
|
* Returns a cleanup function to remove the handlers.
|
|
27
27
|
*/
|
|
28
28
|
export declare function installSignalHandlers(options: SignalHandlerOptions): () => void;
|
|
29
|
-
//# sourceMappingURL=lifecycleSignal.handler.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zudojs/lifecycle",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Application and component lifecycle orchestration with state machine, dependency ordering, graceful shutdown, rollback, and signals.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
"!dist/.tsbuildinfo"
|
|
25
25
|
],
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@zudojs/errors": "1.
|
|
28
|
-
"@zudojs/constants": "1.
|
|
27
|
+
"@zudojs/errors": "1.4.0",
|
|
28
|
+
"@zudojs/constants": "1.2.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/node": "^26.6.2",
|