@zudojs/runtime 0.0.1
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 +37 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/dependencyGraph/dependencyGraph.core.d.ts +18 -0
- package/dist/dependencyGraph/dependencyGraph.core.d.ts.map +1 -0
- package/dist/dependencyGraph/dependencyGraph.core.js +124 -0
- package/dist/dependencyGraph/dependencyGraph.core.js.map +1 -0
- package/dist/dependencyGraph/dependencyGraph.type.d.ts +43 -0
- package/dist/dependencyGraph/dependencyGraph.type.d.ts.map +1 -0
- package/dist/dependencyGraph/dependencyGraph.type.js +2 -0
- package/dist/dependencyGraph/dependencyGraph.type.js.map +1 -0
- package/dist/dependencyGraph/index.d.ts +6 -0
- package/dist/dependencyGraph/index.d.ts.map +1 -0
- package/dist/dependencyGraph/index.js +5 -0
- package/dist/dependencyGraph/index.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/lifecycle/index.d.ts +6 -0
- package/dist/lifecycle/index.d.ts.map +1 -0
- package/dist/lifecycle/index.js +5 -0
- package/dist/lifecycle/index.js.map +1 -0
- package/dist/lifecycle/lifecycle.core.d.ts +47 -0
- package/dist/lifecycle/lifecycle.core.d.ts.map +1 -0
- package/dist/lifecycle/lifecycle.core.js +267 -0
- package/dist/lifecycle/lifecycle.core.js.map +1 -0
- package/dist/lifecycle/lifecycle.type.d.ts +51 -0
- package/dist/lifecycle/lifecycle.type.d.ts.map +1 -0
- package/dist/lifecycle/lifecycle.type.js +2 -0
- package/dist/lifecycle/lifecycle.type.js.map +1 -0
- package/dist/readiness/index.d.ts +6 -0
- package/dist/readiness/index.d.ts.map +1 -0
- package/dist/readiness/index.js +5 -0
- package/dist/readiness/index.js.map +1 -0
- package/dist/readiness/readiness.core.d.ts +45 -0
- package/dist/readiness/readiness.core.d.ts.map +1 -0
- package/dist/readiness/readiness.core.js +115 -0
- package/dist/readiness/readiness.core.js.map +1 -0
- package/dist/readiness/readiness.type.d.ts +40 -0
- package/dist/readiness/readiness.type.d.ts.map +1 -0
- package/dist/readiness/readiness.type.js +2 -0
- package/dist/readiness/readiness.type.js.map +1 -0
- package/dist/registry/index.d.ts +5 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +5 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/registry.core.d.ts +74 -0
- package/dist/registry/registry.core.d.ts.map +1 -0
- package/dist/registry/registry.core.js +126 -0
- package/dist/registry/registry.core.js.map +1 -0
- package/dist/runtime/runtime.core.d.ts +97 -0
- package/dist/runtime/runtime.core.d.ts.map +1 -0
- package/dist/runtime/runtime.core.js +253 -0
- package/dist/runtime/runtime.core.js.map +1 -0
- package/dist/runtimeContext/index.d.ts +7 -0
- package/dist/runtimeContext/index.d.ts.map +1 -0
- package/dist/runtimeContext/index.js +6 -0
- package/dist/runtimeContext/index.js.map +1 -0
- package/dist/runtimeContext/runtimeContext.core.d.ts +11 -0
- package/dist/runtimeContext/runtimeContext.core.d.ts.map +1 -0
- package/dist/runtimeContext/runtimeContext.core.js +41 -0
- package/dist/runtimeContext/runtimeContext.core.js.map +1 -0
- package/dist/runtimeContext/runtimeContext.factory.d.ts +14 -0
- package/dist/runtimeContext/runtimeContext.factory.d.ts.map +1 -0
- package/dist/runtimeContext/runtimeContext.factory.js +20 -0
- package/dist/runtimeContext/runtimeContext.factory.js.map +1 -0
- package/dist/runtimeContext/runtimeContext.type.d.ts +59 -0
- package/dist/runtimeContext/runtimeContext.type.d.ts.map +1 -0
- package/dist/runtimeContext/runtimeContext.type.js +2 -0
- package/dist/runtimeContext/runtimeContext.type.js.map +1 -0
- package/dist/runtimeError/index.d.ts +5 -0
- package/dist/runtimeError/index.d.ts.map +1 -0
- package/dist/runtimeError/index.js +5 -0
- package/dist/runtimeError/index.js.map +1 -0
- package/dist/runtimeError/runtimeError.base.d.ts +80 -0
- package/dist/runtimeError/runtimeError.base.d.ts.map +1 -0
- package/dist/runtimeError/runtimeError.base.js +149 -0
- package/dist/runtimeError/runtimeError.base.js.map +1 -0
- package/dist/runtimeEvents/index.d.ts +6 -0
- package/dist/runtimeEvents/index.d.ts.map +1 -0
- package/dist/runtimeEvents/index.js +5 -0
- package/dist/runtimeEvents/index.js.map +1 -0
- package/dist/runtimeEvents/runtimeEvents.core.d.ts +28 -0
- package/dist/runtimeEvents/runtimeEvents.core.d.ts.map +1 -0
- package/dist/runtimeEvents/runtimeEvents.core.js +63 -0
- package/dist/runtimeEvents/runtimeEvents.core.js.map +1 -0
- package/dist/runtimeEvents/runtimeEvents.type.d.ts +75 -0
- package/dist/runtimeEvents/runtimeEvents.type.d.ts.map +1 -0
- package/dist/runtimeEvents/runtimeEvents.type.js +2 -0
- package/dist/runtimeEvents/runtimeEvents.type.js.map +1 -0
- package/dist/runtimeOptions/index.d.ts +7 -0
- package/dist/runtimeOptions/index.d.ts.map +1 -0
- package/dist/runtimeOptions/index.js +6 -0
- package/dist/runtimeOptions/index.js.map +1 -0
- package/dist/runtimeOptions/runtimeOptions.core.d.ts +14 -0
- package/dist/runtimeOptions/runtimeOptions.core.d.ts.map +1 -0
- package/dist/runtimeOptions/runtimeOptions.core.js +37 -0
- package/dist/runtimeOptions/runtimeOptions.core.js.map +1 -0
- package/dist/runtimeOptions/runtimeOptions.type.d.ts +94 -0
- package/dist/runtimeOptions/runtimeOptions.type.d.ts.map +1 -0
- package/dist/runtimeOptions/runtimeOptions.type.js +14 -0
- package/dist/runtimeOptions/runtimeOptions.type.js.map +1 -0
- package/dist/runtimeState/index.d.ts +6 -0
- package/dist/runtimeState/index.d.ts.map +1 -0
- package/dist/runtimeState/index.js +5 -0
- package/dist/runtimeState/index.js.map +1 -0
- package/dist/runtimeState/runtimeState.core.d.ts +50 -0
- package/dist/runtimeState/runtimeState.core.d.ts.map +1 -0
- package/dist/runtimeState/runtimeState.core.js +88 -0
- package/dist/runtimeState/runtimeState.core.js.map +1 -0
- package/dist/runtimeState/runtimeState.type.d.ts +71 -0
- package/dist/runtimeState/runtimeState.type.d.ts.map +1 -0
- package/dist/runtimeState/runtimeState.type.js +2 -0
- package/dist/runtimeState/runtimeState.type.js.map +1 -0
- package/dist/shutdown/index.d.ts +5 -0
- package/dist/shutdown/index.d.ts.map +1 -0
- package/dist/shutdown/index.js +5 -0
- package/dist/shutdown/index.js.map +1 -0
- package/dist/shutdown/shutdown.core.d.ts +8 -0
- package/dist/shutdown/shutdown.core.d.ts.map +1 -0
- package/dist/shutdown/shutdown.core.js +87 -0
- package/dist/shutdown/shutdown.core.js.map +1 -0
- package/dist/signalHandler/index.d.ts +5 -0
- package/dist/signalHandler/index.d.ts.map +1 -0
- package/dist/signalHandler/index.js +5 -0
- package/dist/signalHandler/index.js.map +1 -0
- package/dist/signalHandler/signalHandler.core.d.ts +44 -0
- package/dist/signalHandler/signalHandler.core.d.ts.map +1 -0
- package/dist/signalHandler/signalHandler.core.js +90 -0
- package/dist/signalHandler/signalHandler.core.js.map +1 -0
- package/dist/startup/index.d.ts +5 -0
- package/dist/startup/index.d.ts.map +1 -0
- package/dist/startup/index.js +5 -0
- package/dist/startup/index.js.map +1 -0
- package/dist/startup/startup.core.d.ts +12 -0
- package/dist/startup/startup.core.d.ts.map +1 -0
- package/dist/startup/startup.core.js +91 -0
- package/dist/startup/startup.core.js.map +1 -0
- package/dist/testRuntime/index.d.ts +5 -0
- package/dist/testRuntime/index.d.ts.map +1 -0
- package/dist/testRuntime/index.js +5 -0
- package/dist/testRuntime/index.js.map +1 -0
- package/dist/testRuntime/testRuntime.core.d.ts +34 -0
- package/dist/testRuntime/testRuntime.core.d.ts.map +1 -0
- package/dist/testRuntime/testRuntime.core.js +81 -0
- package/dist/testRuntime/testRuntime.core.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Defines valid runtime state transitions.
|
|
3
|
+
*/
|
|
4
|
+
export const RUNTIME_STATE_TRANSITIONS = Object.freeze({
|
|
5
|
+
created: ["initializing", "failed"],
|
|
6
|
+
initializing: ["initialized", "running", "failed"],
|
|
7
|
+
initialized: ["starting", "running", "failed"],
|
|
8
|
+
starting: ["running", "failed"],
|
|
9
|
+
running: ["stopping", "failed"],
|
|
10
|
+
stopping: ["stopped", "failed"],
|
|
11
|
+
stopped: [],
|
|
12
|
+
failed: [],
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* Terminal runtime states.
|
|
16
|
+
*/
|
|
17
|
+
export const TERMINAL_STATES = Object.freeze([
|
|
18
|
+
"stopped",
|
|
19
|
+
"failed",
|
|
20
|
+
]);
|
|
21
|
+
/**
|
|
22
|
+
* Runtime states from which startup is allowed.
|
|
23
|
+
*/
|
|
24
|
+
export const STARTABLE_STATES = Object.freeze([
|
|
25
|
+
"created",
|
|
26
|
+
]);
|
|
27
|
+
/**
|
|
28
|
+
* Runtime states from which shutdown is allowed.
|
|
29
|
+
*/
|
|
30
|
+
export const STOPPABLE_STATES = Object.freeze([
|
|
31
|
+
"running",
|
|
32
|
+
]);
|
|
33
|
+
/**
|
|
34
|
+
* Checks whether a state transition is valid.
|
|
35
|
+
*/
|
|
36
|
+
export function canTransition(from, to) {
|
|
37
|
+
const allowed = RUNTIME_STATE_TRANSITIONS[from];
|
|
38
|
+
return allowed.includes(to);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Asserts that a state transition is valid.
|
|
42
|
+
*/
|
|
43
|
+
export function assertTransition(from, to) {
|
|
44
|
+
if (!canTransition(from, to)) {
|
|
45
|
+
throw new Error(`Invalid runtime state transition from "${from}" to "${to}".`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Returns whether the runtime is in a terminal state.
|
|
50
|
+
*/
|
|
51
|
+
export function isTerminalState(state) {
|
|
52
|
+
return TERMINAL_STATES.includes(state);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Returns whether the runtime can start.
|
|
56
|
+
*/
|
|
57
|
+
export function canStart(state) {
|
|
58
|
+
return STARTABLE_STATES.includes(state);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Returns whether the runtime can stop.
|
|
62
|
+
*/
|
|
63
|
+
export function canStop(state) {
|
|
64
|
+
return STOPPABLE_STATES.includes(state);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Returns whether the runtime is currently running.
|
|
68
|
+
*/
|
|
69
|
+
export function isRunning(state) {
|
|
70
|
+
return state === "running";
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Returns whether the runtime has failed.
|
|
74
|
+
*/
|
|
75
|
+
export function hasFailed(state) {
|
|
76
|
+
return state === "failed";
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Creates a runtime status snapshot.
|
|
80
|
+
*/
|
|
81
|
+
export function createStatus(state) {
|
|
82
|
+
return Object.freeze({
|
|
83
|
+
state,
|
|
84
|
+
ready: state === "running",
|
|
85
|
+
running: state === "running",
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=runtimeState.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimeState.core.js","sourceRoot":"","sources":["../../src/runtimeState/runtimeState.core.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAElC,MAAM,CAAC,MAAM,CAAC;IAChB,OAAO,EAAE,CAAC,cAAc,EAAE,QAAQ,CAAC;IACnC,YAAY,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,QAAQ,CAAC;IAClD,WAAW,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC;IAC9C,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC/B,OAAO,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;IAC/B,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC/B,OAAO,EAAE,EAAE;IACX,MAAM,EAAE,EAAE;CACX,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAA4B,MAAM,CAAC,MAAM,CAAC;IACpE,SAAS;IACT,QAAQ;CACT,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA4B,MAAM,CAAC,MAAM,CAAC;IACrE,SAAS;CACV,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA4B,MAAM,CAAC,MAAM,CAAC;IACrE,SAAS;CACV,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAkB,EAAE,EAAgB;IAChE,MAAM,OAAO,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAkB,EAAE,EAAgB;IACnE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,0CAA0C,IAAI,SAAS,EAAE,IAAI,CAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAmB;IACjD,OAAO,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAmB;IAC1C,OAAO,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,KAAmB;IACzC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAmB;IAC3C,OAAO,KAAK,KAAK,SAAS,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAmB;IAC3C,OAAO,KAAK,KAAK,QAAQ,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAmB;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,KAAK;QACL,KAAK,EAAE,KAAK,KAAK,SAAS;QAC1B,OAAO,EAAE,KAAK,KAAK,SAAS;KAC7B,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { EntityId } from "@zudojs/constants";
|
|
2
|
+
import type { RuntimeError } from "@zudojs/errors";
|
|
3
|
+
/**
|
|
4
|
+
* Extended runtime lifecycle states.
|
|
5
|
+
*
|
|
6
|
+
* Extends the core runtime states with additional granularity
|
|
7
|
+
* for initialization and startup phases.
|
|
8
|
+
*/
|
|
9
|
+
export type RuntimeState = "created" | "initializing" | "initialized" | "starting" | "running" | "stopping" | "stopped" | "failed";
|
|
10
|
+
/**
|
|
11
|
+
* Failure-specific runtime states.
|
|
12
|
+
*/
|
|
13
|
+
export type RuntimeFailureState = "initialization_failed" | "startup_failed" | "shutdown_failed";
|
|
14
|
+
/**
|
|
15
|
+
* All possible runtime states including failure variants.
|
|
16
|
+
*/
|
|
17
|
+
export type RuntimeStateFull = RuntimeState | RuntimeFailureState;
|
|
18
|
+
/**
|
|
19
|
+
* Unique runtime identifier.
|
|
20
|
+
*/
|
|
21
|
+
export type RuntimeId = EntityId;
|
|
22
|
+
/**
|
|
23
|
+
* Runtime status snapshot.
|
|
24
|
+
*/
|
|
25
|
+
export interface RuntimeStatus {
|
|
26
|
+
readonly state: RuntimeState;
|
|
27
|
+
readonly ready: boolean;
|
|
28
|
+
readonly running: boolean;
|
|
29
|
+
readonly startedAt?: Date;
|
|
30
|
+
readonly stoppedAt?: Date;
|
|
31
|
+
readonly failedAt?: Date;
|
|
32
|
+
readonly error?: RuntimeError;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* A record of a runtime state transition.
|
|
36
|
+
*/
|
|
37
|
+
export interface RuntimeStateTransition {
|
|
38
|
+
readonly from: RuntimeState;
|
|
39
|
+
readonly to: RuntimeState;
|
|
40
|
+
readonly timestamp: Date;
|
|
41
|
+
readonly reason?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Defines valid state transitions.
|
|
45
|
+
*/
|
|
46
|
+
export type RuntimeStateTransitions = {
|
|
47
|
+
[K in RuntimeState]: readonly RuntimeState[];
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Runtime health state.
|
|
51
|
+
*/
|
|
52
|
+
export type RuntimeHealthState = "healthy" | "degraded" | "unhealthy" | "starting" | "stopping" | "unknown";
|
|
53
|
+
/**
|
|
54
|
+
* Runtime health status with details.
|
|
55
|
+
*/
|
|
56
|
+
export interface RuntimeHealth {
|
|
57
|
+
readonly state: RuntimeHealthState;
|
|
58
|
+
readonly checks: readonly RuntimeHealthCheck[];
|
|
59
|
+
readonly timestamp: Date;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Individual health check result.
|
|
63
|
+
*/
|
|
64
|
+
export interface RuntimeHealthCheck {
|
|
65
|
+
readonly name: string;
|
|
66
|
+
readonly healthy: boolean;
|
|
67
|
+
readonly message?: string;
|
|
68
|
+
readonly durationMs: number;
|
|
69
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=runtimeState.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimeState.type.d.ts","sourceRoot":"","sources":["../../src/runtimeState/runtimeState.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,cAAc,GACd,aAAa,GACb,UAAU,GACV,SAAS,GACT,UAAU,GACV,SAAS,GACT,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAC7B,uBAAuB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,mBAAmB,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;AAEjC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;KACnC,CAAC,IAAI,YAAY,GAAG,SAAS,YAAY,EAAE;CAC7C,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC5B,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AAE7E;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimeState.type.js","sourceRoot":"","sources":["../../src/runtimeState/runtimeState.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shutdown/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shutdown/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Logger } from "@zudojs/logger";
|
|
2
|
+
import type { EventBus } from "@zudojs/events";
|
|
3
|
+
import { LifecycleManager } from "../lifecycle/index.js";
|
|
4
|
+
/**
|
|
5
|
+
* Executes the shutdown sequence with timeout.
|
|
6
|
+
*/
|
|
7
|
+
export declare function executeShutdown(lifecycle: LifecycleManager, runtimeId: string, eventBus: EventBus | undefined, logger: Logger, shutdownTimeout: number, emitEvents: boolean): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=shutdown.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shutdown.core.d.ts","sourceRoot":"","sources":["../../src/shutdown/shutdown.core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAOzD;;GAEG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,gBAAgB,EAC3B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAC9B,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,OAAO,GAClB,OAAO,CAAC,IAAI,CAAC,CAkEf"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { createEvent } from "@zudojs/events";
|
|
2
|
+
import { LifecycleManager } from "../lifecycle/index.js";
|
|
3
|
+
import { RuntimeStopError, RuntimeTimeoutError, } from "../runtimeError/index.js";
|
|
4
|
+
/**
|
|
5
|
+
* Executes the shutdown sequence with timeout.
|
|
6
|
+
*/
|
|
7
|
+
export async function executeShutdown(lifecycle, runtimeId, eventBus, logger, shutdownTimeout, emitEvents) {
|
|
8
|
+
if (emitEvents && eventBus) {
|
|
9
|
+
eventBus.publish(createEvent({
|
|
10
|
+
type: "runtime.shutdown.drain",
|
|
11
|
+
payload: {
|
|
12
|
+
runtimeId,
|
|
13
|
+
timestamp: new Date(),
|
|
14
|
+
state: "stopping",
|
|
15
|
+
},
|
|
16
|
+
}));
|
|
17
|
+
}
|
|
18
|
+
logger.info("Initiating graceful shutdown.", { timeoutMs: shutdownTimeout });
|
|
19
|
+
const stopPromise = performShutdown(lifecycle, logger);
|
|
20
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
21
|
+
setTimeout(() => {
|
|
22
|
+
reject(new RuntimeTimeoutError("shutdown", shutdownTimeout));
|
|
23
|
+
}, shutdownTimeout);
|
|
24
|
+
});
|
|
25
|
+
try {
|
|
26
|
+
await Promise.race([stopPromise, timeoutPromise]);
|
|
27
|
+
if (emitEvents && eventBus) {
|
|
28
|
+
eventBus.publish(createEvent({
|
|
29
|
+
type: "runtime.shutdown.complete",
|
|
30
|
+
payload: {
|
|
31
|
+
runtimeId,
|
|
32
|
+
timestamp: new Date(),
|
|
33
|
+
state: "stopped",
|
|
34
|
+
},
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
logger.info("Graceful shutdown complete.");
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
if (error instanceof RuntimeTimeoutError) {
|
|
41
|
+
logger.error("Shutdown timed out, forcing stop.");
|
|
42
|
+
}
|
|
43
|
+
if (emitEvents && eventBus) {
|
|
44
|
+
eventBus.publish(createEvent({
|
|
45
|
+
type: "runtime.failed",
|
|
46
|
+
payload: {
|
|
47
|
+
runtimeId,
|
|
48
|
+
timestamp: new Date(),
|
|
49
|
+
state: "shutdown_failed",
|
|
50
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
51
|
+
phase: "stop",
|
|
52
|
+
},
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
throw new RuntimeStopError("Runtime shutdown failed.", {
|
|
56
|
+
phase: "stop",
|
|
57
|
+
cause: error instanceof Error ? error : undefined,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Performs the actual shutdown operations.
|
|
63
|
+
*/
|
|
64
|
+
async function performShutdown(lifecycle, logger) {
|
|
65
|
+
// Stop modules
|
|
66
|
+
const stopResult = await lifecycle.stop();
|
|
67
|
+
if (stopResult.failed.length > 0) {
|
|
68
|
+
logger.warn("Some modules failed during shutdown.", {
|
|
69
|
+
failedModules: stopResult.failed.map((f) => f.moduleId),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
logger.info("All modules stopped.", {
|
|
73
|
+
modules: stopResult.succeeded,
|
|
74
|
+
durationMs: stopResult.durationMs,
|
|
75
|
+
});
|
|
76
|
+
// Destroy modules
|
|
77
|
+
const destroyResult = await lifecycle.destroy();
|
|
78
|
+
if (destroyResult.failed.length > 0) {
|
|
79
|
+
logger.warn("Some modules failed during destruction.", {
|
|
80
|
+
failedModules: destroyResult.failed.map((f) => f.moduleId),
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
logger.info("All modules destroyed.", {
|
|
84
|
+
durationMs: destroyResult.durationMs,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=shutdown.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shutdown.core.js","sourceRoot":"","sources":["../../src/shutdown/shutdown.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signalHandler/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signalHandler/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { Logger } from "@zudojs/logger";
|
|
2
|
+
/**
|
|
3
|
+
* Signal handler for process lifecycle events.
|
|
4
|
+
*/
|
|
5
|
+
export declare class SignalHandler {
|
|
6
|
+
private readonly logger;
|
|
7
|
+
private readonly handleSignals;
|
|
8
|
+
private readonly handleFatalErrors;
|
|
9
|
+
private shutdownHandler;
|
|
10
|
+
private isShuttingDown;
|
|
11
|
+
constructor(logger: Logger, options: {
|
|
12
|
+
readonly handleSignals: boolean;
|
|
13
|
+
readonly handleFatalErrors: boolean;
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* Registers signal handlers.
|
|
17
|
+
*/
|
|
18
|
+
register(shutdownHandler: () => void): void;
|
|
19
|
+
/**
|
|
20
|
+
* Removes all signal handlers.
|
|
21
|
+
*/
|
|
22
|
+
unregister(): void;
|
|
23
|
+
/**
|
|
24
|
+
* Handles SIGTERM signal.
|
|
25
|
+
*/
|
|
26
|
+
private handleTermination;
|
|
27
|
+
/**
|
|
28
|
+
* Handles SIGINT signal.
|
|
29
|
+
*/
|
|
30
|
+
private handleInterruption;
|
|
31
|
+
/**
|
|
32
|
+
* Handles uncaught exceptions.
|
|
33
|
+
*/
|
|
34
|
+
private handleUncaughtException;
|
|
35
|
+
/**
|
|
36
|
+
* Handles unhandled promise rejections.
|
|
37
|
+
*/
|
|
38
|
+
private handleUnhandledRejection;
|
|
39
|
+
/**
|
|
40
|
+
* Initiates graceful shutdown.
|
|
41
|
+
*/
|
|
42
|
+
private initiateShutdown;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=signalHandler.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signalHandler.core.d.ts","sourceRoot":"","sources":["../../src/signalHandler/signalHandler.core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IACxC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IAC5C,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,cAAc,CAAS;IAE/B,YACE,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QACP,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;QAChC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;KACrC,EAKF;IAED;;OAEG;IACI,QAAQ,CAAC,eAAe,EAAE,MAAM,IAAI,GAAG,IAAI,CAYjD;IAED;;OAEG;IACI,UAAU,IAAI,IAAI,CAYxB;IAED;;OAEG;IACH,OAAO,CAAC,iBAAiB,CAGvB;IAEF;;OAEG;IACH,OAAO,CAAC,kBAAkB,CAGxB;IAEF;;OAEG;IACH,OAAO,CAAC,uBAAuB,CAM7B;IAEF;;OAEG;IACH,OAAO,CAAC,wBAAwB,CAO9B;IAEF;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAYzB"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signal handler for process lifecycle events.
|
|
3
|
+
*/
|
|
4
|
+
export class SignalHandler {
|
|
5
|
+
logger;
|
|
6
|
+
handleSignals;
|
|
7
|
+
handleFatalErrors;
|
|
8
|
+
shutdownHandler = null;
|
|
9
|
+
isShuttingDown = false;
|
|
10
|
+
constructor(logger, options) {
|
|
11
|
+
this.logger = logger;
|
|
12
|
+
this.handleSignals = options.handleSignals;
|
|
13
|
+
this.handleFatalErrors = options.handleFatalErrors;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Registers signal handlers.
|
|
17
|
+
*/
|
|
18
|
+
register(shutdownHandler) {
|
|
19
|
+
this.shutdownHandler = shutdownHandler;
|
|
20
|
+
if (this.handleSignals) {
|
|
21
|
+
process.on("SIGTERM", this.handleTermination);
|
|
22
|
+
process.on("SIGINT", this.handleInterruption);
|
|
23
|
+
}
|
|
24
|
+
if (this.handleFatalErrors) {
|
|
25
|
+
process.on("uncaughtException", this.handleUncaughtException);
|
|
26
|
+
process.on("unhandledRejection", this.handleUnhandledRejection);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Removes all signal handlers.
|
|
31
|
+
*/
|
|
32
|
+
unregister() {
|
|
33
|
+
if (this.handleSignals) {
|
|
34
|
+
process.off("SIGTERM", this.handleTermination);
|
|
35
|
+
process.off("SIGINT", this.handleInterruption);
|
|
36
|
+
}
|
|
37
|
+
if (this.handleFatalErrors) {
|
|
38
|
+
process.off("uncaughtException", this.handleUncaughtException);
|
|
39
|
+
process.off("unhandledRejection", this.handleUnhandledRejection);
|
|
40
|
+
}
|
|
41
|
+
this.shutdownHandler = null;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Handles SIGTERM signal.
|
|
45
|
+
*/
|
|
46
|
+
handleTermination = () => {
|
|
47
|
+
this.logger.info("Received SIGTERM signal.");
|
|
48
|
+
this.initiateShutdown();
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Handles SIGINT signal.
|
|
52
|
+
*/
|
|
53
|
+
handleInterruption = () => {
|
|
54
|
+
this.logger.info("Received SIGINT signal.");
|
|
55
|
+
this.initiateShutdown();
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Handles uncaught exceptions.
|
|
59
|
+
*/
|
|
60
|
+
handleUncaughtException = (error) => {
|
|
61
|
+
this.logger.error("Uncaught exception.", { errorMessage: error.message });
|
|
62
|
+
if (this.handleFatalErrors) {
|
|
63
|
+
this.initiateShutdown();
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Handles unhandled promise rejections.
|
|
68
|
+
*/
|
|
69
|
+
handleUnhandledRejection = (reason) => {
|
|
70
|
+
const message = reason instanceof Error ? reason.message : String(reason);
|
|
71
|
+
this.logger.error("Unhandled rejection.", { reason: message });
|
|
72
|
+
if (this.handleFatalErrors) {
|
|
73
|
+
this.initiateShutdown();
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Initiates graceful shutdown.
|
|
78
|
+
*/
|
|
79
|
+
initiateShutdown() {
|
|
80
|
+
if (this.isShuttingDown) {
|
|
81
|
+
this.logger.warn("Shutdown already in progress, ignoring signal.");
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
this.isShuttingDown = true;
|
|
85
|
+
if (this.shutdownHandler) {
|
|
86
|
+
this.shutdownHandler();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=signalHandler.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signalHandler.core.js","sourceRoot":"","sources":["../../src/signalHandler/signalHandler.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/startup/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/startup/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Logger } from "@zudojs/logger";
|
|
2
|
+
import type { EventBus } from "@zudojs/events";
|
|
3
|
+
import { LifecycleManager } from "../lifecycle/index.js";
|
|
4
|
+
/**
|
|
5
|
+
* Executes the startup sequence.
|
|
6
|
+
*/
|
|
7
|
+
export declare function executeStartup(lifecycle: LifecycleManager, runtimeId: string, eventBus: EventBus | undefined, logger: Logger, emitEvents: boolean): Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* Rolls back a failed startup.
|
|
10
|
+
*/
|
|
11
|
+
export declare function rollbackStartup(lifecycle: LifecycleManager, logger: Logger): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=startup.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup.core.d.ts","sourceRoot":"","sources":["../../src/startup/startup.core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAMzD;;GAEG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,gBAAgB,EAC3B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAC9B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,GAClB,OAAO,CAAC,IAAI,CAAC,CAoGf;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,gBAAgB,EAC3B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAMf"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { createEvent } from "@zudojs/events";
|
|
2
|
+
import { LifecycleManager } from "../lifecycle/index.js";
|
|
3
|
+
import { RuntimeStartError } from "../runtimeError/index.js";
|
|
4
|
+
/**
|
|
5
|
+
* Executes the startup sequence.
|
|
6
|
+
*/
|
|
7
|
+
export async function executeStartup(lifecycle, runtimeId, eventBus, logger, emitEvents) {
|
|
8
|
+
// Initialize modules
|
|
9
|
+
if (emitEvents && eventBus) {
|
|
10
|
+
eventBus.publish(createEvent({
|
|
11
|
+
type: "runtime.module.initializing",
|
|
12
|
+
payload: {
|
|
13
|
+
runtimeId,
|
|
14
|
+
timestamp: new Date(),
|
|
15
|
+
state: "initializing",
|
|
16
|
+
},
|
|
17
|
+
}));
|
|
18
|
+
}
|
|
19
|
+
const initResult = await lifecycle.initialize();
|
|
20
|
+
if (initResult.failed.length > 0) {
|
|
21
|
+
const failure = initResult.failed[0];
|
|
22
|
+
if (emitEvents && eventBus) {
|
|
23
|
+
eventBus.publish(createEvent({
|
|
24
|
+
type: "runtime.module.failed",
|
|
25
|
+
payload: {
|
|
26
|
+
runtimeId,
|
|
27
|
+
state: "initialization_failed",
|
|
28
|
+
timestamp: new Date(),
|
|
29
|
+
error: failure.error,
|
|
30
|
+
phase: "initialize",
|
|
31
|
+
failedModuleId: failure.moduleId,
|
|
32
|
+
},
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
throw new RuntimeStartError(`Module "${failure.moduleId}" failed during initialization.`, {
|
|
36
|
+
phase: "initialize",
|
|
37
|
+
failedModuleId: failure.moduleId,
|
|
38
|
+
cause: failure.error,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
logger.info("All modules initialized.", {
|
|
42
|
+
modules: initResult.succeeded,
|
|
43
|
+
durationMs: initResult.durationMs,
|
|
44
|
+
});
|
|
45
|
+
// Start modules
|
|
46
|
+
if (emitEvents && eventBus) {
|
|
47
|
+
eventBus.publish(createEvent({
|
|
48
|
+
type: "runtime.module.starting",
|
|
49
|
+
payload: {
|
|
50
|
+
runtimeId,
|
|
51
|
+
timestamp: new Date(),
|
|
52
|
+
state: "starting",
|
|
53
|
+
},
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
const startResult = await lifecycle.start();
|
|
57
|
+
if (startResult.failed.length > 0) {
|
|
58
|
+
const failure = startResult.failed[0];
|
|
59
|
+
if (emitEvents && eventBus) {
|
|
60
|
+
eventBus.publish(createEvent({
|
|
61
|
+
type: "runtime.module.failed",
|
|
62
|
+
payload: {
|
|
63
|
+
runtimeId,
|
|
64
|
+
state: "startup_failed",
|
|
65
|
+
timestamp: new Date(),
|
|
66
|
+
error: failure.error,
|
|
67
|
+
phase: "start",
|
|
68
|
+
failedModuleId: failure.moduleId,
|
|
69
|
+
},
|
|
70
|
+
}));
|
|
71
|
+
}
|
|
72
|
+
throw new RuntimeStartError(`Module "${failure.moduleId}" failed during startup.`, {
|
|
73
|
+
phase: "start",
|
|
74
|
+
failedModuleId: failure.moduleId,
|
|
75
|
+
cause: failure.error,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
logger.info("All modules started.", {
|
|
79
|
+
modules: startResult.succeeded,
|
|
80
|
+
durationMs: startResult.durationMs,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Rolls back a failed startup.
|
|
85
|
+
*/
|
|
86
|
+
export async function rollbackStartup(lifecycle, logger) {
|
|
87
|
+
logger.info("Rolling back module startup.");
|
|
88
|
+
await lifecycle.rollback();
|
|
89
|
+
logger.info("Module rollback complete.");
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=startup.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup.core.js","sourceRoot":"","sources":["../../src/startup/startup.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testRuntime/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testRuntime/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,uBAAuB,CAAC"}
|