@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,18 @@
|
|
|
1
|
+
import type { DependencyGraph, DependencyResolutionResult, ParallelModuleGroup } from "./dependencyGraph.type.js";
|
|
2
|
+
/**
|
|
3
|
+
* Builds a dependency graph from module IDs and their dependencies.
|
|
4
|
+
*/
|
|
5
|
+
export declare function buildDependencyGraph(modules: ReadonlyMap<string, readonly string[]>): DependencyGraph;
|
|
6
|
+
/**
|
|
7
|
+
* Resolves module dependencies into an initialization order.
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolveDependencies(modules: ReadonlyMap<string, readonly string[]>): DependencyResolutionResult;
|
|
10
|
+
/**
|
|
11
|
+
* Returns parallel module groups for concurrent initialization.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getParallelGroups(modules: ReadonlyMap<string, readonly string[]>): readonly ParallelModuleGroup[];
|
|
14
|
+
/**
|
|
15
|
+
* Validates that all module dependencies exist.
|
|
16
|
+
*/
|
|
17
|
+
export declare function validateDependencies(modules: ReadonlyMap<string, readonly string[]>): void;
|
|
18
|
+
//# sourceMappingURL=dependencyGraph.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencyGraph.core.d.ts","sourceRoot":"","sources":["../../src/dependencyGraph/dependencyGraph.core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAEf,0BAA0B,EAC1B,mBAAmB,EAEpB,MAAM,2BAA2B,CAAC;AAInC;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,GAC9C,eAAe,CAuFjB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,GAC9C,0BAA0B,CA4B5B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,GAC9C,SAAS,mBAAmB,EAAE,CAShC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,GAC9C,IAAI,CAQN"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { RuntimeCircularDependencyError } from "../runtimeError/runtimeError.base.js";
|
|
2
|
+
/**
|
|
3
|
+
* Builds a dependency graph from module IDs and their dependencies.
|
|
4
|
+
*/
|
|
5
|
+
export function buildDependencyGraph(modules) {
|
|
6
|
+
const nodes = new Map();
|
|
7
|
+
const circularDependencies = [];
|
|
8
|
+
// Build nodes
|
|
9
|
+
for (const [moduleId, deps] of modules) {
|
|
10
|
+
nodes.set(moduleId, {
|
|
11
|
+
moduleId,
|
|
12
|
+
dependencies: deps,
|
|
13
|
+
dependents: [],
|
|
14
|
+
depth: 0,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
// Populate dependents
|
|
18
|
+
for (const [moduleId, node] of nodes) {
|
|
19
|
+
for (const depId of node.dependencies) {
|
|
20
|
+
const depNode = nodes.get(depId);
|
|
21
|
+
if (depNode) {
|
|
22
|
+
depNode.dependents.push(moduleId);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// Calculate depths and detect cycles
|
|
27
|
+
const visited = new Set();
|
|
28
|
+
const recursionStack = new Set();
|
|
29
|
+
const order = [];
|
|
30
|
+
function calculateDepth(moduleId, path = []) {
|
|
31
|
+
if (recursionStack.has(moduleId)) {
|
|
32
|
+
const cycleStart = path.indexOf(moduleId);
|
|
33
|
+
const cycle = path.slice(cycleStart);
|
|
34
|
+
circularDependencies.push({
|
|
35
|
+
cycle,
|
|
36
|
+
moduleId,
|
|
37
|
+
dependencyId: path[path.length - 1] ?? moduleId,
|
|
38
|
+
});
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
if (visited.has(moduleId)) {
|
|
42
|
+
return nodes.get(moduleId)?.depth ?? 0;
|
|
43
|
+
}
|
|
44
|
+
visited.add(moduleId);
|
|
45
|
+
recursionStack.add(moduleId);
|
|
46
|
+
const node = nodes.get(moduleId);
|
|
47
|
+
if (!node) {
|
|
48
|
+
recursionStack.delete(moduleId);
|
|
49
|
+
return 0;
|
|
50
|
+
}
|
|
51
|
+
let maxDepth = 0;
|
|
52
|
+
for (const depId of node.dependencies) {
|
|
53
|
+
const depDepth = calculateDepth(depId, [...path, moduleId]);
|
|
54
|
+
maxDepth = Math.max(maxDepth, depDepth + 1);
|
|
55
|
+
}
|
|
56
|
+
node.depth = maxDepth;
|
|
57
|
+
recursionStack.delete(moduleId);
|
|
58
|
+
order.push(moduleId);
|
|
59
|
+
return maxDepth;
|
|
60
|
+
}
|
|
61
|
+
for (const moduleId of nodes.keys()) {
|
|
62
|
+
if (!visited.has(moduleId)) {
|
|
63
|
+
calculateDepth(moduleId);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Sort by depth for initialization order
|
|
67
|
+
const ordered = [...nodes.entries()]
|
|
68
|
+
.sort(([, a], [, b]) => a.depth - b.depth)
|
|
69
|
+
.map(([id]) => id);
|
|
70
|
+
return Object.freeze({
|
|
71
|
+
nodes: Object.freeze(new Map(nodes)),
|
|
72
|
+
ordered: Object.freeze(ordered),
|
|
73
|
+
hasCircularDependency: circularDependencies.length > 0,
|
|
74
|
+
circularDependencies: Object.freeze(circularDependencies.map((c) => c.cycle)),
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Resolves module dependencies into an initialization order.
|
|
79
|
+
*/
|
|
80
|
+
export function resolveDependencies(modules) {
|
|
81
|
+
const graph = buildDependencyGraph(modules);
|
|
82
|
+
if (graph.hasCircularDependency) {
|
|
83
|
+
throw new RuntimeCircularDependencyError(graph.circularDependencies[0] ?? []);
|
|
84
|
+
}
|
|
85
|
+
// Group modules by depth for parallel initialization
|
|
86
|
+
const depthGroups = new Map();
|
|
87
|
+
for (const [moduleId, node] of graph.nodes) {
|
|
88
|
+
const group = depthGroups.get(node.depth) ?? [];
|
|
89
|
+
group.push(moduleId);
|
|
90
|
+
depthGroups.set(node.depth, group);
|
|
91
|
+
}
|
|
92
|
+
const parallelGroups = [...depthGroups.entries()]
|
|
93
|
+
.sort(([a], [b]) => a - b)
|
|
94
|
+
.map(([, modules]) => Object.freeze(modules));
|
|
95
|
+
return Object.freeze({
|
|
96
|
+
order: graph.ordered,
|
|
97
|
+
parallelGroups: Object.freeze(parallelGroups),
|
|
98
|
+
hasCircularDependency: false,
|
|
99
|
+
circularDependencies: [],
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Returns parallel module groups for concurrent initialization.
|
|
104
|
+
*/
|
|
105
|
+
export function getParallelGroups(modules) {
|
|
106
|
+
const result = resolveDependencies(modules);
|
|
107
|
+
return result.parallelGroups.map((group, index) => Object.freeze({
|
|
108
|
+
modules: group,
|
|
109
|
+
depth: index,
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Validates that all module dependencies exist.
|
|
114
|
+
*/
|
|
115
|
+
export function validateDependencies(modules) {
|
|
116
|
+
for (const [moduleId, deps] of modules) {
|
|
117
|
+
for (const depId of deps) {
|
|
118
|
+
if (!modules.has(depId)) {
|
|
119
|
+
throw new RuntimeCircularDependencyError([moduleId, depId]);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=dependencyGraph.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencyGraph.core.js","sourceRoot":"","sources":["../../src/dependencyGraph/dependencyGraph.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents a node in the module dependency graph.
|
|
3
|
+
*/
|
|
4
|
+
export interface DependencyNode {
|
|
5
|
+
readonly moduleId: string;
|
|
6
|
+
readonly dependencies: readonly string[];
|
|
7
|
+
readonly dependents: readonly string[];
|
|
8
|
+
readonly depth: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Module dependency graph for topological ordering.
|
|
12
|
+
*/
|
|
13
|
+
export interface DependencyGraph {
|
|
14
|
+
readonly nodes: ReadonlyMap<string, DependencyNode>;
|
|
15
|
+
readonly ordered: readonly string[];
|
|
16
|
+
readonly hasCircularDependency: boolean;
|
|
17
|
+
readonly circularDependencies: readonly (readonly string[])[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Result of dependency resolution.
|
|
21
|
+
*/
|
|
22
|
+
export interface DependencyResolutionResult {
|
|
23
|
+
readonly order: readonly string[];
|
|
24
|
+
readonly parallelGroups: readonly (readonly string[])[];
|
|
25
|
+
readonly hasCircularDependency: boolean;
|
|
26
|
+
readonly circularDependencies: readonly (readonly string[])[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A group of modules that can be initialized concurrently.
|
|
30
|
+
*/
|
|
31
|
+
export interface ParallelModuleGroup {
|
|
32
|
+
readonly modules: readonly string[];
|
|
33
|
+
readonly depth: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Error information for circular dependencies.
|
|
37
|
+
*/
|
|
38
|
+
export interface CircularDependencyInfo {
|
|
39
|
+
readonly cycle: readonly string[];
|
|
40
|
+
readonly moduleId: string;
|
|
41
|
+
readonly dependencyId: string;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=dependencyGraph.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencyGraph.type.d.ts","sourceRoot":"","sources":["../../src/dependencyGraph/dependencyGraph.type.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,oBAAoB,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;CAC/D;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;IACxD,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,oBAAoB,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;CAC/D;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencyGraph.type.js","sourceRoot":"","sources":["../../src/dependencyGraph/dependencyGraph.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module dependency graph and resolution.
|
|
3
|
+
*/
|
|
4
|
+
export { buildDependencyGraph, resolveDependencies, getParallelGroups, validateDependencies, } from "./dependencyGraph.core.js";
|
|
5
|
+
export type { DependencyNode, DependencyGraph, DependencyResolutionResult, ParallelModuleGroup, CircularDependencyInfo, } from "./dependencyGraph.type.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dependencyGraph/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EACV,cAAc,EACd,eAAe,EACf,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dependencyGraph/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/runtime
|
|
3
|
+
*
|
|
4
|
+
* Application runtime orchestrator for the Zudojs framework.
|
|
5
|
+
*
|
|
6
|
+
* The runtime manages the complete application lifecycle:
|
|
7
|
+
* - Deterministic startup with dependency ordering
|
|
8
|
+
* - Graceful shutdown with timeout
|
|
9
|
+
* - Process signal handling
|
|
10
|
+
* - Runtime events and observability
|
|
11
|
+
* - Module lifecycle orchestration
|
|
12
|
+
*/
|
|
13
|
+
export { DefaultRuntime, createRuntime } from "./runtime/runtime.core.js";
|
|
14
|
+
export type { Runtime, RuntimeDependencies } from "./runtime/runtime.core.js";
|
|
15
|
+
export * from "./runtimeState/index.js";
|
|
16
|
+
export * from "./runtimeOptions/index.js";
|
|
17
|
+
export * from "./runtimeEvents/index.js";
|
|
18
|
+
export * from "./runtimeContext/index.js";
|
|
19
|
+
export * from "./dependencyGraph/index.js";
|
|
20
|
+
export * from "./readiness/index.js";
|
|
21
|
+
export * from "./lifecycle/index.js";
|
|
22
|
+
export * from "./startup/index.js";
|
|
23
|
+
export * from "./shutdown/index.js";
|
|
24
|
+
export * from "./signalHandler/index.js";
|
|
25
|
+
export * from "./runtimeError/index.js";
|
|
26
|
+
export * from "./registry/index.js";
|
|
27
|
+
export * from "./testRuntime/index.js";
|
|
28
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1E,YAAY,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAE9E,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/runtime
|
|
3
|
+
*
|
|
4
|
+
* Application runtime orchestrator for the Zudojs framework.
|
|
5
|
+
*
|
|
6
|
+
* The runtime manages the complete application lifecycle:
|
|
7
|
+
* - Deterministic startup with dependency ordering
|
|
8
|
+
* - Graceful shutdown with timeout
|
|
9
|
+
* - Process signal handling
|
|
10
|
+
* - Runtime events and observability
|
|
11
|
+
* - Module lifecycle orchestration
|
|
12
|
+
*/
|
|
13
|
+
export { DefaultRuntime, createRuntime } from "./runtime/runtime.core.js";
|
|
14
|
+
export * from "./runtimeState/index.js";
|
|
15
|
+
export * from "./runtimeOptions/index.js";
|
|
16
|
+
export * from "./runtimeEvents/index.js";
|
|
17
|
+
export * from "./runtimeContext/index.js";
|
|
18
|
+
export * from "./dependencyGraph/index.js";
|
|
19
|
+
export * from "./readiness/index.js";
|
|
20
|
+
export * from "./lifecycle/index.js";
|
|
21
|
+
export * from "./startup/index.js";
|
|
22
|
+
export * from "./shutdown/index.js";
|
|
23
|
+
export * from "./signalHandler/index.js";
|
|
24
|
+
export * from "./runtimeError/index.js";
|
|
25
|
+
export * from "./registry/index.js";
|
|
26
|
+
export * from "./testRuntime/index.js";
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAI1E,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module lifecycle management.
|
|
3
|
+
*/
|
|
4
|
+
export { LifecycleManager } from "./lifecycle.core.js";
|
|
5
|
+
export type { LifecyclePhase, LifecycleResult, LifecycleFailure, LifecycleContext, ManagedModule, LifecycleManagerOptions, } from "./lifecycle.type.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lifecycle/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,YAAY,EACV,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,uBAAuB,GACxB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lifecycle/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { Logger } from "@zudojs/logger";
|
|
2
|
+
import type { Container } from "@zudojs/container";
|
|
3
|
+
import type { Module } from "@zudojs/core";
|
|
4
|
+
import type { LifecycleResult, LifecycleManagerOptions } from "./lifecycle.type.js";
|
|
5
|
+
/**
|
|
6
|
+
* Manages the lifecycle of runtime modules.
|
|
7
|
+
*/
|
|
8
|
+
export declare class LifecycleManager {
|
|
9
|
+
private readonly modules;
|
|
10
|
+
private readonly logger;
|
|
11
|
+
private readonly container;
|
|
12
|
+
private readonly runtimeId;
|
|
13
|
+
private readonly environment;
|
|
14
|
+
private readonly options;
|
|
15
|
+
private readonly initializedModules;
|
|
16
|
+
private readonly startedModules;
|
|
17
|
+
constructor(modules: ReadonlyMap<string, Module>, logger: Logger, container: Container, runtimeId: string, environment: string, options?: LifecycleManagerOptions);
|
|
18
|
+
/**
|
|
19
|
+
* Initializes all modules in dependency order.
|
|
20
|
+
*/
|
|
21
|
+
initialize(): Promise<LifecycleResult>;
|
|
22
|
+
/**
|
|
23
|
+
* Starts all modules in dependency order.
|
|
24
|
+
*/
|
|
25
|
+
start(): Promise<LifecycleResult>;
|
|
26
|
+
/**
|
|
27
|
+
* Stops all modules in reverse dependency order.
|
|
28
|
+
*/
|
|
29
|
+
stop(): Promise<LifecycleResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Destroys all modules in reverse dependency order.
|
|
32
|
+
*/
|
|
33
|
+
destroy(): Promise<LifecycleResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Rolls back initialization for modules that were started.
|
|
36
|
+
*/
|
|
37
|
+
rollback(): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Creates a module context for lifecycle hooks.
|
|
40
|
+
*/
|
|
41
|
+
private createModuleContext;
|
|
42
|
+
/**
|
|
43
|
+
* Builds a dependency graph from registered modules.
|
|
44
|
+
*/
|
|
45
|
+
private buildModuleDependencyGraph;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=lifecycle.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.core.d.ts","sourceRoot":"","sources":["../../src/lifecycle/lifecycle.core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,cAAc,CAAC;AAE1D,OAAO,KAAK,EACV,eAAe,EAIf,uBAAuB,EACxB,MAAM,qBAAqB,CAAC;AAU7B;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAgB;IACnD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAE/C,YACE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,uBAA4B,EAYtC;IAED;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC,CA4DlD;IAED;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,eAAe,CAAC,CAiD7C;IAED;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC,CA8C5C;IAED;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC,CAgD/C;IAED;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAkBrC;IAED;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;OAEG;IACH,OAAO,CAAC,0BAA0B;CASnC"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { resolveDependencies } from "../dependencyGraph/index.js";
|
|
2
|
+
import { RuntimeStartError, RuntimeStopError, RuntimeDependencyError, } from "../runtimeError/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Manages the lifecycle of runtime modules.
|
|
5
|
+
*/
|
|
6
|
+
export class LifecycleManager {
|
|
7
|
+
modules;
|
|
8
|
+
logger;
|
|
9
|
+
container;
|
|
10
|
+
runtimeId;
|
|
11
|
+
environment;
|
|
12
|
+
options;
|
|
13
|
+
initializedModules = [];
|
|
14
|
+
startedModules = [];
|
|
15
|
+
constructor(modules, logger, container, runtimeId, environment, options = {}) {
|
|
16
|
+
this.modules = modules;
|
|
17
|
+
this.logger = logger;
|
|
18
|
+
this.container = container;
|
|
19
|
+
this.runtimeId = runtimeId;
|
|
20
|
+
this.environment = environment;
|
|
21
|
+
this.options = {
|
|
22
|
+
shutdownTimeout: options.shutdownTimeout ?? 30_000,
|
|
23
|
+
continueOnFailure: options.continueOnFailure ?? false,
|
|
24
|
+
parallelInitialization: options.parallelInitialization ?? true,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Initializes all modules in dependency order.
|
|
29
|
+
*/
|
|
30
|
+
async initialize() {
|
|
31
|
+
const startTime = Date.now();
|
|
32
|
+
const succeeded = [];
|
|
33
|
+
const failed = [];
|
|
34
|
+
const depGraph = this.buildModuleDependencyGraph();
|
|
35
|
+
for (const moduleId of depGraph.order) {
|
|
36
|
+
const module = this.modules.get(moduleId);
|
|
37
|
+
if (!module) {
|
|
38
|
+
failed.push({
|
|
39
|
+
moduleId,
|
|
40
|
+
phase: "initialize",
|
|
41
|
+
error: new RuntimeDependencyError(moduleId, "unknown"),
|
|
42
|
+
durationMs: 0,
|
|
43
|
+
});
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const moduleStartTime = Date.now();
|
|
47
|
+
try {
|
|
48
|
+
if (module.onInitialize) {
|
|
49
|
+
const context = this.createModuleContext(module);
|
|
50
|
+
await module.onInitialize(context);
|
|
51
|
+
}
|
|
52
|
+
succeeded.push(moduleId);
|
|
53
|
+
this.initializedModules.push(moduleId);
|
|
54
|
+
this.logger.debug(`Module "${moduleId}" initialized.`, {
|
|
55
|
+
durationMs: Date.now() - moduleStartTime,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
const failure = {
|
|
60
|
+
moduleId,
|
|
61
|
+
phase: "initialize",
|
|
62
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
63
|
+
durationMs: Date.now() - moduleStartTime,
|
|
64
|
+
};
|
|
65
|
+
failed.push(failure);
|
|
66
|
+
this.logger.error(`Module "${moduleId}" failed during initialization.`, { error: failure.error });
|
|
67
|
+
if (!this.options.continueOnFailure) {
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return Object.freeze({
|
|
73
|
+
phase: "initialize",
|
|
74
|
+
succeeded: Object.freeze(succeeded),
|
|
75
|
+
failed: Object.freeze(failed),
|
|
76
|
+
durationMs: Date.now() - startTime,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Starts all modules in dependency order.
|
|
81
|
+
*/
|
|
82
|
+
async start() {
|
|
83
|
+
const startTime = Date.now();
|
|
84
|
+
const succeeded = [];
|
|
85
|
+
const failed = [];
|
|
86
|
+
for (const moduleId of this.initializedModules) {
|
|
87
|
+
const module = this.modules.get(moduleId);
|
|
88
|
+
if (!module)
|
|
89
|
+
continue;
|
|
90
|
+
const moduleStartTime = Date.now();
|
|
91
|
+
try {
|
|
92
|
+
if (module.onReady) {
|
|
93
|
+
const context = this.createModuleContext(module);
|
|
94
|
+
await module.onReady(context);
|
|
95
|
+
}
|
|
96
|
+
succeeded.push(moduleId);
|
|
97
|
+
this.startedModules.push(moduleId);
|
|
98
|
+
this.logger.debug(`Module "${moduleId}" started.`, {
|
|
99
|
+
durationMs: Date.now() - moduleStartTime,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
const failure = {
|
|
104
|
+
moduleId,
|
|
105
|
+
phase: "start",
|
|
106
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
107
|
+
durationMs: Date.now() - moduleStartTime,
|
|
108
|
+
};
|
|
109
|
+
failed.push(failure);
|
|
110
|
+
this.logger.error(`Module "${moduleId}" failed during startup.`, {
|
|
111
|
+
error: failure.error,
|
|
112
|
+
});
|
|
113
|
+
if (!this.options.continueOnFailure) {
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return Object.freeze({
|
|
119
|
+
phase: "start",
|
|
120
|
+
succeeded: Object.freeze(succeeded),
|
|
121
|
+
failed: Object.freeze(failed),
|
|
122
|
+
durationMs: Date.now() - startTime,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Stops all modules in reverse dependency order.
|
|
127
|
+
*/
|
|
128
|
+
async stop() {
|
|
129
|
+
const startTime = Date.now();
|
|
130
|
+
const succeeded = [];
|
|
131
|
+
const failed = [];
|
|
132
|
+
const reversedModules = [...this.startedModules].reverse();
|
|
133
|
+
for (const moduleId of reversedModules) {
|
|
134
|
+
const module = this.modules.get(moduleId);
|
|
135
|
+
if (!module)
|
|
136
|
+
continue;
|
|
137
|
+
const moduleStartTime = Date.now();
|
|
138
|
+
try {
|
|
139
|
+
if (module.onShutdown) {
|
|
140
|
+
const context = this.createModuleContext(module);
|
|
141
|
+
await module.onShutdown(context);
|
|
142
|
+
}
|
|
143
|
+
succeeded.push(moduleId);
|
|
144
|
+
this.logger.debug(`Module "${moduleId}" stopped.`, {
|
|
145
|
+
durationMs: Date.now() - moduleStartTime,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
const failure = {
|
|
150
|
+
moduleId,
|
|
151
|
+
phase: "stop",
|
|
152
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
153
|
+
durationMs: Date.now() - moduleStartTime,
|
|
154
|
+
};
|
|
155
|
+
failed.push(failure);
|
|
156
|
+
this.logger.error(`Module "${moduleId}" failed during shutdown.`, {
|
|
157
|
+
error: failure.error,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return Object.freeze({
|
|
162
|
+
phase: "stop",
|
|
163
|
+
succeeded: Object.freeze(succeeded),
|
|
164
|
+
failed: Object.freeze(failed),
|
|
165
|
+
durationMs: Date.now() - startTime,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Destroys all modules in reverse dependency order.
|
|
170
|
+
*/
|
|
171
|
+
async destroy() {
|
|
172
|
+
const startTime = Date.now();
|
|
173
|
+
const succeeded = [];
|
|
174
|
+
const failed = [];
|
|
175
|
+
const reversedModules = [...this.startedModules, ...this.initializedModules]
|
|
176
|
+
.filter((id, index, arr) => arr.indexOf(id) === index)
|
|
177
|
+
.reverse();
|
|
178
|
+
for (const moduleId of reversedModules) {
|
|
179
|
+
const module = this.modules.get(moduleId);
|
|
180
|
+
if (!module)
|
|
181
|
+
continue;
|
|
182
|
+
const moduleStartTime = Date.now();
|
|
183
|
+
try {
|
|
184
|
+
if (module.onDestroy) {
|
|
185
|
+
const context = this.createModuleContext(module);
|
|
186
|
+
await module.onDestroy(context);
|
|
187
|
+
}
|
|
188
|
+
succeeded.push(moduleId);
|
|
189
|
+
this.logger.debug(`Module "${moduleId}" destroyed.`, {
|
|
190
|
+
durationMs: Date.now() - moduleStartTime,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
const failure = {
|
|
195
|
+
moduleId,
|
|
196
|
+
phase: "destroy",
|
|
197
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
198
|
+
durationMs: Date.now() - moduleStartTime,
|
|
199
|
+
};
|
|
200
|
+
failed.push(failure);
|
|
201
|
+
this.logger.error(`Module "${moduleId}" failed during destruction.`, {
|
|
202
|
+
error: failure.error,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return Object.freeze({
|
|
207
|
+
phase: "destroy",
|
|
208
|
+
succeeded: Object.freeze(succeeded),
|
|
209
|
+
failed: Object.freeze(failed),
|
|
210
|
+
durationMs: Date.now() - startTime,
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Rolls back initialization for modules that were started.
|
|
215
|
+
*/
|
|
216
|
+
async rollback() {
|
|
217
|
+
const reversedModules = [...this.startedModules].reverse();
|
|
218
|
+
for (const moduleId of reversedModules) {
|
|
219
|
+
const module = this.modules.get(moduleId);
|
|
220
|
+
if (!module?.onShutdown)
|
|
221
|
+
continue;
|
|
222
|
+
try {
|
|
223
|
+
const context = this.createModuleContext(module);
|
|
224
|
+
await module.onShutdown(context);
|
|
225
|
+
this.logger.debug(`Module "${moduleId}" rolled back.`);
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
this.logger.error(`Module "${moduleId}" rollback failed.`, {
|
|
229
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Creates a module context for lifecycle hooks.
|
|
236
|
+
*/
|
|
237
|
+
createModuleContext(module) {
|
|
238
|
+
return {
|
|
239
|
+
id: module.id,
|
|
240
|
+
name: module.name,
|
|
241
|
+
version: module.version,
|
|
242
|
+
options: module.options ?? {},
|
|
243
|
+
scope: module.scope,
|
|
244
|
+
application: {},
|
|
245
|
+
configuration: {},
|
|
246
|
+
logger: this.logger,
|
|
247
|
+
getConfiguration: () => ({}),
|
|
248
|
+
getConfig: () => undefined,
|
|
249
|
+
requireConfig: (path) => {
|
|
250
|
+
throw new Error(`Config "${path}" not found.`);
|
|
251
|
+
},
|
|
252
|
+
getModuleContext: () => undefined,
|
|
253
|
+
hasModule: () => false,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Builds a dependency graph from registered modules.
|
|
258
|
+
*/
|
|
259
|
+
buildModuleDependencyGraph() {
|
|
260
|
+
const moduleDeps = new Map();
|
|
261
|
+
for (const [id, module] of this.modules) {
|
|
262
|
+
moduleDeps.set(id, module.dependencies ?? []);
|
|
263
|
+
}
|
|
264
|
+
return resolveDependencies(moduleDeps);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=lifecycle.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.core.js","sourceRoot":"","sources":["../../src/lifecycle/lifecycle.core.ts"],"names":[],"mappings":"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"}
|