apcore-js 0.18.0 → 0.19.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 +3 -1
- package/dist/acl-handlers.d.ts +14 -0
- package/dist/acl-handlers.d.ts.map +1 -1
- package/dist/acl-handlers.js +37 -4
- package/dist/acl-handlers.js.map +1 -1
- package/dist/acl.d.ts +4 -1
- package/dist/acl.d.ts.map +1 -1
- package/dist/acl.js +40 -21
- package/dist/acl.js.map +1 -1
- package/dist/bindings.d.ts.map +1 -1
- package/dist/bindings.js +113 -11
- package/dist/bindings.js.map +1 -1
- package/dist/builtin-steps.d.ts +19 -5
- package/dist/builtin-steps.d.ts.map +1 -1
- package/dist/builtin-steps.js +78 -23
- package/dist/builtin-steps.js.map +1 -1
- package/dist/client.d.ts +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js.map +1 -1
- package/dist/context.d.ts +34 -7
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +96 -39
- package/dist/context.js.map +1 -1
- package/dist/decorator.d.ts +3 -0
- package/dist/decorator.d.ts.map +1 -1
- package/dist/decorator.js +3 -0
- package/dist/decorator.js.map +1 -1
- package/dist/errors.d.ts +66 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +192 -56
- package/dist/errors.js.map +1 -1
- package/dist/events/emitter.d.ts +2 -0
- package/dist/events/emitter.d.ts.map +1 -1
- package/dist/events/emitter.js +20 -10
- package/dist/events/emitter.js.map +1 -1
- package/dist/executor.d.ts +4 -1
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +36 -12
- package/dist/executor.js.map +1 -1
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/index.d.ts +15 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -4
- package/dist/index.js.map +1 -1
- package/dist/middleware/index.d.ts +1 -1
- package/dist/middleware/index.d.ts.map +1 -1
- package/dist/middleware/index.js +1 -1
- package/dist/middleware/index.js.map +1 -1
- package/dist/middleware/logging.d.ts +6 -0
- package/dist/middleware/logging.d.ts.map +1 -1
- package/dist/middleware/logging.js +13 -3
- package/dist/middleware/logging.js.map +1 -1
- package/dist/middleware/manager.d.ts.map +1 -1
- package/dist/middleware/manager.js +1 -0
- package/dist/middleware/manager.js.map +1 -1
- package/dist/middleware/platform-notify.d.ts.map +1 -1
- package/dist/middleware/platform-notify.js +4 -0
- package/dist/middleware/platform-notify.js.map +1 -1
- package/dist/middleware/retry.d.ts +16 -7
- package/dist/middleware/retry.d.ts.map +1 -1
- package/dist/middleware/retry.js +21 -15
- package/dist/middleware/retry.js.map +1 -1
- package/dist/observability/context-logger.d.ts.map +1 -1
- package/dist/observability/context-logger.js +18 -5
- package/dist/observability/context-logger.js.map +1 -1
- package/dist/observability/metrics-utils.d.ts.map +1 -1
- package/dist/observability/metrics-utils.js +3 -5
- package/dist/observability/metrics-utils.js.map +1 -1
- package/dist/observability/metrics.d.ts +1 -0
- package/dist/observability/metrics.d.ts.map +1 -1
- package/dist/observability/metrics.js +14 -1
- package/dist/observability/metrics.js.map +1 -1
- package/dist/observability/tracing.d.ts +2 -0
- package/dist/observability/tracing.d.ts.map +1 -1
- package/dist/observability/tracing.js +12 -2
- package/dist/observability/tracing.js.map +1 -1
- package/dist/observability/usage.d.ts.map +1 -1
- package/dist/observability/usage.js +10 -1
- package/dist/observability/usage.js.map +1 -1
- package/dist/pipeline-config.d.ts +13 -7
- package/dist/pipeline-config.d.ts.map +1 -1
- package/dist/pipeline-config.js +77 -9
- package/dist/pipeline-config.js.map +1 -1
- package/dist/registry/conflicts.d.ts +2 -2
- package/dist/registry/conflicts.d.ts.map +1 -1
- package/dist/registry/conflicts.js +10 -11
- package/dist/registry/conflicts.js.map +1 -1
- package/dist/registry/dependencies.d.ts +1 -1
- package/dist/registry/dependencies.d.ts.map +1 -1
- package/dist/registry/dependencies.js +69 -20
- package/dist/registry/dependencies.js.map +1 -1
- package/dist/registry/registry.d.ts +8 -1
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +112 -24
- package/dist/registry/registry.js.map +1 -1
- package/dist/registry/scanner.d.ts.map +1 -1
- package/dist/registry/scanner.js +6 -0
- package/dist/registry/scanner.js.map +1 -1
- package/dist/registry/version.d.ts +1 -0
- package/dist/registry/version.d.ts.map +1 -1
- package/dist/registry/version.js +33 -4
- package/dist/registry/version.js.map +1 -1
- package/dist/schema/extractor.d.ts +69 -0
- package/dist/schema/extractor.d.ts.map +1 -0
- package/dist/schema/extractor.js +142 -0
- package/dist/schema/extractor.js.map +1 -0
- package/dist/schema/index.d.ts +2 -0
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +1 -0
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/ref-resolver.d.ts.map +1 -1
- package/dist/schema/ref-resolver.js +10 -1
- package/dist/schema/ref-resolver.js.map +1 -1
- package/dist/sys-modules/control.d.ts.map +1 -1
- package/dist/sys-modules/control.js +4 -1
- package/dist/sys-modules/control.js.map +1 -1
- package/dist/sys-modules/registration.d.ts +12 -0
- package/dist/sys-modules/registration.d.ts.map +1 -1
- package/dist/sys-modules/registration.js +12 -0
- package/dist/sys-modules/registration.js.map +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
package/dist/pipeline-config.js
CHANGED
|
@@ -63,12 +63,18 @@ class ConfiguredStep {
|
|
|
63
63
|
/**
|
|
64
64
|
* Resolve a step definition dict into a Step instance.
|
|
65
65
|
*
|
|
66
|
-
* Resolution order:
|
|
67
|
-
* 1. `type` field -> look up in registry
|
|
68
|
-
* 2. `handler` field -> dynamic import (
|
|
66
|
+
* Resolution order (DECLARATIVE_CONFIG_SPEC.md §4):
|
|
67
|
+
* 1. `type` field -> look up in registry (sync, fast path)
|
|
68
|
+
* 2. `handler` field -> dynamic ESM import via `await import()`
|
|
69
|
+
* Format: `"module:exportName"`. The resolved export is invoked as
|
|
70
|
+
* `factory(config)` — wrap classes in a factory if needed.
|
|
69
71
|
* 3. Neither -> throw Error
|
|
72
|
+
*
|
|
73
|
+
* NOTE: this function is async because handler resolution requires
|
|
74
|
+
* `await import()`. Type-registry lookups still resolve synchronously
|
|
75
|
+
* inside this async wrapper.
|
|
70
76
|
*/
|
|
71
|
-
export function _resolveStep(stepDef) {
|
|
77
|
+
export async function _resolveStep(stepDef) {
|
|
72
78
|
const typeName = stepDef.type;
|
|
73
79
|
const handlerPath = stepDef.handler;
|
|
74
80
|
const config = stepDef.config ?? {};
|
|
@@ -78,10 +84,10 @@ export function _resolveStep(stepDef) {
|
|
|
78
84
|
const step = factory(config);
|
|
79
85
|
return new ConfiguredStep(step, stepDef);
|
|
80
86
|
}
|
|
81
|
-
// (2) Handler path
|
|
87
|
+
// (2) Handler path -- dynamic ESM import
|
|
82
88
|
if (handlerPath) {
|
|
83
|
-
|
|
84
|
-
|
|
89
|
+
const step = await _importStep(handlerPath, config);
|
|
90
|
+
return new ConfiguredStep(step, stepDef);
|
|
85
91
|
}
|
|
86
92
|
// (3) Neither
|
|
87
93
|
if (typeName) {
|
|
@@ -90,6 +96,68 @@ export function _resolveStep(stepDef) {
|
|
|
90
96
|
}
|
|
91
97
|
throw new Error(`Step '${stepDef.name ?? ''}' has neither 'type' nor 'handler'`);
|
|
92
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Dynamically import a Step factory from a `"module:exportName"` handler path.
|
|
101
|
+
*
|
|
102
|
+
* Mirrors `bindings.ts#resolveTarget` security model: rejects path-traversal
|
|
103
|
+
* (`..`) segments and `file:` URLs at parse time. The resolved export must be
|
|
104
|
+
* a callable `(config) => Step`. Classes should be wrapped in a thin factory.
|
|
105
|
+
*/
|
|
106
|
+
async function _importStep(handlerPath, config) {
|
|
107
|
+
// Security checks run on the whole path BEFORE the module:export split,
|
|
108
|
+
// because 'file:' URLs contain a colon that would otherwise be misparsed.
|
|
109
|
+
const FORBIDDEN_SCHEMES = ['file:', 'http:', 'https:', 'ftp:', 'data:', 'blob:'];
|
|
110
|
+
for (const scheme of FORBIDDEN_SCHEMES) {
|
|
111
|
+
if (handlerPath.startsWith(scheme)) {
|
|
112
|
+
throw new Error(`Handler path '${handlerPath}' must not use '${scheme}' URLs.`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (handlerPath.includes('..')) {
|
|
116
|
+
throw new Error(`Handler path '${handlerPath}' must not contain '..' segments.`);
|
|
117
|
+
}
|
|
118
|
+
if (!handlerPath.includes(':')) {
|
|
119
|
+
throw new Error(`Invalid handler path '${handlerPath}'. Expected format: 'module:exportName'.`);
|
|
120
|
+
}
|
|
121
|
+
// Split from the right so module specifiers containing ':' (e.g., URL-like)
|
|
122
|
+
// don't get misparsed. Standard forms ('./mod:fn', '@scope/pkg:fn') split fine
|
|
123
|
+
// either way; rsplit defends against future scheme-like specifiers.
|
|
124
|
+
const lastColon = handlerPath.lastIndexOf(':');
|
|
125
|
+
const modulePath = handlerPath.slice(0, lastColon);
|
|
126
|
+
const exportName = handlerPath.slice(lastColon + 1);
|
|
127
|
+
let mod;
|
|
128
|
+
try {
|
|
129
|
+
mod = await import(modulePath);
|
|
130
|
+
}
|
|
131
|
+
catch (e) {
|
|
132
|
+
throw new Error(`Cannot import handler module '${modulePath}': ${e.message}`);
|
|
133
|
+
}
|
|
134
|
+
const resolved = mod[exportName];
|
|
135
|
+
if (resolved == null) {
|
|
136
|
+
throw new Error(`Export '${exportName}' not found in module '${modulePath}'.`);
|
|
137
|
+
}
|
|
138
|
+
if (typeof resolved !== 'function') {
|
|
139
|
+
throw new Error(`Handler '${handlerPath}' resolved to a non-callable. ` +
|
|
140
|
+
`Expected a (config) => Step factory; wrap classes in a factory if needed.`);
|
|
141
|
+
}
|
|
142
|
+
// Distinguish class export (has a prototype with a `constructor` pointing
|
|
143
|
+
// back to itself) from factory function. The previous implementation used
|
|
144
|
+
// try/new-then-fallback-to-call, which silently swallowed legitimate
|
|
145
|
+
// constructor errors (bad config, missing required field) and produced
|
|
146
|
+
// misleading secondary failures when the fallback call was invoked on a
|
|
147
|
+
// class that required `new`.
|
|
148
|
+
const isLikelyClass = typeof resolved === 'function' &&
|
|
149
|
+
resolved.prototype != null &&
|
|
150
|
+
typeof resolved.prototype === 'object' &&
|
|
151
|
+
resolved.prototype.constructor === resolved &&
|
|
152
|
+
// Arrow functions have no prototype; factories with .prototype typically
|
|
153
|
+
// have the default Object constructor, so also require the function's
|
|
154
|
+
// name to start uppercase (class convention).
|
|
155
|
+
/^[A-Z]/.test(resolved.name ?? '');
|
|
156
|
+
const step = isLikelyClass
|
|
157
|
+
? new resolved(config)
|
|
158
|
+
: resolved(config);
|
|
159
|
+
return step;
|
|
160
|
+
}
|
|
93
161
|
/**
|
|
94
162
|
* Build an ExecutionStrategy from YAML pipeline configuration.
|
|
95
163
|
*
|
|
@@ -102,7 +170,7 @@ export function _resolveStep(stepDef) {
|
|
|
102
170
|
* @param deps - Forwarded to `buildStandardStrategy()`.
|
|
103
171
|
* @returns Configured ExecutionStrategy.
|
|
104
172
|
*/
|
|
105
|
-
export function buildStrategyFromConfig(pipelineConfig, deps) {
|
|
173
|
+
export async function buildStrategyFromConfig(pipelineConfig, deps) {
|
|
106
174
|
const strategy = buildStandardStrategy(deps);
|
|
107
175
|
// (1) Remove steps
|
|
108
176
|
for (const stepName of pipelineConfig.remove ?? []) {
|
|
@@ -131,7 +199,7 @@ export function buildStrategyFromConfig(pipelineConfig, deps) {
|
|
|
131
199
|
}
|
|
132
200
|
// (3) Resolve and insert custom steps
|
|
133
201
|
for (const stepDef of pipelineConfig.steps ?? []) {
|
|
134
|
-
const step = _resolveStep(stepDef);
|
|
202
|
+
const step = await _resolveStep(stepDef);
|
|
135
203
|
const after = stepDef.after;
|
|
136
204
|
const before = stepDef.before;
|
|
137
205
|
if (after) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-config.js","sourceRoot":"","sources":["../src/pipeline-config.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"pipeline-config.js","sourceRoot":"","sources":["../src/pipeline-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,12 +16,12 @@ export interface ConflictResult {
|
|
|
16
16
|
*
|
|
17
17
|
* Steps:
|
|
18
18
|
* 1. Exact duplicate detection.
|
|
19
|
-
* 2. Reserved word detection (
|
|
19
|
+
* 2. Reserved word detection (first segment).
|
|
20
20
|
* 3. Case collision detection.
|
|
21
21
|
*
|
|
22
22
|
* @param newId - Canonical ID to be registered.
|
|
23
23
|
* @param existingIds - Set of already registered IDs.
|
|
24
|
-
* @param reservedWords - Reserved words that cannot be used as ID
|
|
24
|
+
* @param reservedWords - Reserved words that cannot be used as the first ID segment.
|
|
25
25
|
* @param lowercaseMap - Optional pre-built lowercase-to-original_id mapping for O(1) case collision.
|
|
26
26
|
* @returns ConflictResult if a conflict is found, null if the ID is safe.
|
|
27
27
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conflicts.d.ts","sourceRoot":"","sources":["../../src/registry/conflicts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qCAAqC;AACrC,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,eAAe,GAAG,gBAAgB,CAAC;AAE/E,kCAAkC;AAClC,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,SAAS,CAAC;AAEnD,sCAAsC;AACtC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,EAChC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,EAClC,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,cAAc,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"conflicts.d.ts","sourceRoot":"","sources":["../../src/registry/conflicts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qCAAqC;AACrC,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,eAAe,GAAG,gBAAgB,CAAC;AAE/E,kCAAkC;AAClC,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,SAAS,CAAC;AAEnD,sCAAsC;AACtC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,EAChC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,EAClC,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,cAAc,GAAG,IAAI,CA4CvB"}
|
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Steps:
|
|
8
8
|
* 1. Exact duplicate detection.
|
|
9
|
-
* 2. Reserved word detection (
|
|
9
|
+
* 2. Reserved word detection (first segment).
|
|
10
10
|
* 3. Case collision detection.
|
|
11
11
|
*
|
|
12
12
|
* @param newId - Canonical ID to be registered.
|
|
13
13
|
* @param existingIds - Set of already registered IDs.
|
|
14
|
-
* @param reservedWords - Reserved words that cannot be used as ID
|
|
14
|
+
* @param reservedWords - Reserved words that cannot be used as the first ID segment.
|
|
15
15
|
* @param lowercaseMap - Optional pre-built lowercase-to-original_id mapping for O(1) case collision.
|
|
16
16
|
* @returns ConflictResult if a conflict is found, null if the ID is safe.
|
|
17
17
|
*/
|
|
@@ -24,15 +24,14 @@ export function detectIdConflicts(newId, existingIds, reservedWords, lowercaseMa
|
|
|
24
24
|
message: `Module ID '${newId}' is already registered`,
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
|
-
// Step 2: Reserved word check
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
27
|
+
// Step 2: Reserved word check (first segment only)
|
|
28
|
+
const firstSegment = newId.split('.')[0];
|
|
29
|
+
if (reservedWords.has(firstSegment)) {
|
|
30
|
+
return {
|
|
31
|
+
type: 'reserved_word',
|
|
32
|
+
severity: 'error',
|
|
33
|
+
message: `Module ID '${newId}' contains reserved word '${firstSegment}'`,
|
|
34
|
+
};
|
|
36
35
|
}
|
|
37
36
|
// Step 3: Case collision
|
|
38
37
|
const normalizedNew = newId.toLowerCase();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conflicts.js","sourceRoot":"","sources":["../../src/registry/conflicts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,WAAgC,EAChC,aAAkC,EAClC,YAA0C;IAE1C,0BAA0B;IAC1B,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,cAAc,KAAK,yBAAyB;SACtD,CAAC;IACJ,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"conflicts.js","sourceRoot":"","sources":["../../src/registry/conflicts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,WAAgC,EAChC,aAAkC,EAClC,YAA0C;IAE1C,0BAA0B;IAC1B,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,cAAc,KAAK,yBAAyB;SACtD,CAAC;IACJ,CAAC;IAED,mDAAmD;IACnD,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,cAAc,KAAK,6BAA6B,YAAY,GAAG;SACzE,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC1C,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACjD,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC3C,OAAO;gBACL,IAAI,EAAE,gBAAgB;gBACtB,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,cAAc,KAAK,yCAAyC,QAAQ,GAAG;aACjF,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,UAAU,CAAC,WAAW,EAAE,KAAK,aAAa,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;gBACvE,OAAO;oBACL,IAAI,EAAE,gBAAgB;oBACtB,QAAQ,EAAE,SAAS;oBACnB,OAAO,EAAE,cAAc,KAAK,yCAAyC,UAAU,GAAG;iBACnF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Dependency resolution via Kahn's topological sort.
|
|
3
3
|
*/
|
|
4
4
|
import type { DependencyInfo } from './types.js';
|
|
5
|
-
export declare function resolveDependencies(modules: Array<[string, DependencyInfo[]]>, knownIds?: Set<string> | null): string[];
|
|
5
|
+
export declare function resolveDependencies(modules: Array<[string, DependencyInfo[]]>, knownIds?: Set<string> | null, moduleVersions?: Map<string, string> | Record<string, string> | null): string[];
|
|
6
6
|
//# sourceMappingURL=dependencies.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../src/registry/dependencies.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../src/registry/dependencies.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC,EAC1C,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAC7B,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GACnE,MAAM,EAAE,CAkFV"}
|
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Dependency resolution via Kahn's topological sort.
|
|
3
3
|
*/
|
|
4
|
-
import { CircularDependencyError,
|
|
5
|
-
|
|
4
|
+
import { CircularDependencyError, DependencyNotFoundError, DependencyVersionMismatchError, } from '../errors.js';
|
|
5
|
+
import { matchesVersionHint } from './version.js';
|
|
6
|
+
export function resolveDependencies(modules, knownIds, moduleVersions) {
|
|
6
7
|
if (modules.length === 0)
|
|
7
8
|
return [];
|
|
8
9
|
const ids = knownIds ?? new Set(modules.map(([id]) => id));
|
|
10
|
+
const versionLookup = (() => {
|
|
11
|
+
if (moduleVersions == null)
|
|
12
|
+
return null;
|
|
13
|
+
if (moduleVersions instanceof Map)
|
|
14
|
+
return moduleVersions;
|
|
15
|
+
return new Map(Object.entries(moduleVersions));
|
|
16
|
+
})();
|
|
9
17
|
// Build graph and in-degree
|
|
10
18
|
const graph = new Map();
|
|
11
19
|
const inDegree = new Map();
|
|
@@ -17,7 +25,24 @@ export function resolveDependencies(modules, knownIds) {
|
|
|
17
25
|
if (!ids.has(dep.moduleId)) {
|
|
18
26
|
if (dep.optional)
|
|
19
27
|
continue;
|
|
20
|
-
throw new
|
|
28
|
+
throw new DependencyNotFoundError(moduleId, dep.moduleId);
|
|
29
|
+
}
|
|
30
|
+
if (dep.version && versionLookup !== null) {
|
|
31
|
+
const actual = versionLookup.get(dep.moduleId);
|
|
32
|
+
if (actual === undefined) {
|
|
33
|
+
// Version constraint cannot be evaluated — surface this so a silent
|
|
34
|
+
// bypass does not masquerade as a satisfied constraint. Typical
|
|
35
|
+
// cause: the target module is registered but has no `version`
|
|
36
|
+
// string on its class and no YAML metadata declared one.
|
|
37
|
+
console.warn(`[apcore:registry] Cannot enforce version constraint '${dep.version}' on '${dep.moduleId}' for '${moduleId}': no version information available for the target module`);
|
|
38
|
+
}
|
|
39
|
+
else if (!matchesVersionHint(actual, dep.version)) {
|
|
40
|
+
if (dep.optional) {
|
|
41
|
+
console.warn(`[apcore:registry] Optional dependency '${dep.moduleId}' for module '${moduleId}' has version '${actual}' which does not satisfy constraint '${dep.version}', skipping`);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
throw new DependencyVersionMismatchError(moduleId, dep.moduleId, dep.version, actual);
|
|
45
|
+
}
|
|
21
46
|
}
|
|
22
47
|
if (!graph.has(dep.moduleId))
|
|
23
48
|
graph.set(dep.moduleId, new Set());
|
|
@@ -58,26 +83,50 @@ function extractCycle(modules, remaining) {
|
|
|
58
83
|
const depMap = new Map();
|
|
59
84
|
for (const [modId, deps] of modules) {
|
|
60
85
|
if (remaining.has(modId)) {
|
|
61
|
-
|
|
86
|
+
const uniq = new Set(deps.filter((d) => remaining.has(d.moduleId)).map((d) => d.moduleId));
|
|
87
|
+
depMap.set(modId, [...uniq].sort());
|
|
62
88
|
}
|
|
63
89
|
}
|
|
64
|
-
const
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
90
|
+
const sortedRemaining = [...remaining].sort();
|
|
91
|
+
for (const start of sortedRemaining) {
|
|
92
|
+
const cycle = dfsFindCycle(depMap, start);
|
|
93
|
+
if (cycle !== null)
|
|
94
|
+
return cycle;
|
|
95
|
+
}
|
|
96
|
+
return sortedRemaining;
|
|
97
|
+
}
|
|
98
|
+
function dfsFindCycle(depMap, start) {
|
|
99
|
+
const path = [];
|
|
100
|
+
const onPath = new Set();
|
|
101
|
+
const visited = new Set();
|
|
102
|
+
const stack = [[start, 0]];
|
|
103
|
+
while (stack.length > 0) {
|
|
104
|
+
const frame = stack[stack.length - 1];
|
|
105
|
+
const [node, idx] = frame;
|
|
106
|
+
if (idx === 0) {
|
|
107
|
+
if (onPath.has(node)) {
|
|
108
|
+
const startIdx = path.indexOf(node);
|
|
109
|
+
return [...path.slice(startIdx), node];
|
|
110
|
+
}
|
|
111
|
+
if (visited.has(node)) {
|
|
112
|
+
stack.pop();
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
visited.add(node);
|
|
116
|
+
onPath.add(node);
|
|
117
|
+
path.push(node);
|
|
118
|
+
}
|
|
119
|
+
const neighbors = depMap.get(node) ?? [];
|
|
120
|
+
if (idx < neighbors.length) {
|
|
121
|
+
frame[1] = idx + 1;
|
|
122
|
+
stack.push([neighbors[idx], 0]);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
onPath.delete(node);
|
|
126
|
+
path.pop();
|
|
127
|
+
stack.pop();
|
|
76
128
|
}
|
|
77
|
-
visited.push(nxt);
|
|
78
|
-
visitedSet.add(nxt);
|
|
79
|
-
current = nxt;
|
|
80
129
|
}
|
|
81
|
-
return
|
|
130
|
+
return null;
|
|
82
131
|
}
|
|
83
132
|
//# sourceMappingURL=dependencies.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/registry/dependencies.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/registry/dependencies.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@ export declare const MODULE_ID_PATTERN: RegExp;
|
|
|
25
25
|
*/
|
|
26
26
|
export declare const MAX_MODULE_ID_LENGTH = 192;
|
|
27
27
|
/**
|
|
28
|
-
* Reserved words that cannot appear as
|
|
28
|
+
* Reserved words that cannot appear as the first segment of a module ID.
|
|
29
29
|
*/
|
|
30
30
|
export declare const RESERVED_WORDS: Set<string>;
|
|
31
31
|
/**
|
|
@@ -53,6 +53,7 @@ export declare class Registry {
|
|
|
53
53
|
private _moduleMeta;
|
|
54
54
|
private _callbacks;
|
|
55
55
|
private _idMap;
|
|
56
|
+
private _lowercaseMap;
|
|
56
57
|
private _schemaCache;
|
|
57
58
|
private _config;
|
|
58
59
|
private _watchers?;
|
|
@@ -92,6 +93,8 @@ export declare class Registry {
|
|
|
92
93
|
* duplicate.
|
|
93
94
|
*/
|
|
94
95
|
register(moduleId: string, module: unknown): void;
|
|
96
|
+
/** Inner registration — no validator, no ID validation. Used by discover() paths that run their own checks. */
|
|
97
|
+
private _registerImpl;
|
|
95
98
|
unregister(moduleId: string): boolean;
|
|
96
99
|
get(moduleId: string): unknown | null;
|
|
97
100
|
has(moduleId: string): boolean;
|
|
@@ -162,6 +165,10 @@ export declare class Registry {
|
|
|
162
165
|
beginDrain(moduleId: string): void;
|
|
163
166
|
/**
|
|
164
167
|
* Remove the draining mark and clean up drain state.
|
|
168
|
+
*
|
|
169
|
+
* If any waitDrained waiters are still pending (e.g., refCount briefly
|
|
170
|
+
* hit zero and then a new acquire bumped it back up), resolve them first
|
|
171
|
+
* so they do not wait for their individual timeouts before returning.
|
|
165
172
|
*/
|
|
166
173
|
endDrain(moduleId: string): void;
|
|
167
174
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAW3C,OAAO,KAAK,EAAkB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAiDnE;;GAEG;AACH,eAAO,MAAM,eAAe;;;EAGjB,CAAC;AAEZ;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAA0C,CAAC;AAEzE;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC;;GAEG;AACH,eAAO,MAAM,cAAc,aAA+E,CAAC;AAiD3G;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,CAAC;CACjI;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACzD;AAED,KAAK,aAAa,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;AAEjE,qBAAa,QAAQ;IACnB,OAAO,CAAC,eAAe,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,WAAW,CAAmD;IACtE,OAAO,CAAC,UAAU,CAGf;IACH,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,YAAY,CAAmD;IACvE,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,SAAS,CAAC,CAA2B;IAC7C,OAAO,CAAC,eAAe,CAAC,CAAsB;IAC9C,OAAO,CAAC,iBAAiB,CAA2B;IACpD,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,YAAY,CAAS;IAG7B,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,eAAe,CAA6C;gBAExD,OAAO,CAAC,EAAE;QACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,cAAc,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;QAChE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B;IA0BD,4DAA4D;YAC9C,YAAY;IAM1B,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAI3C,YAAY,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAIxC,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;YAOnB,eAAe;YAkDf,gBAAgB;YAahB,UAAU;YAeV,oBAAoB;YA4BpB,gBAAgB;YAUhB,sBAAsB;YAiBtB,YAAY;IAe1B,OAAO,CAAC,iBAAiB;IAmCzB,OAAO,CAAC,gBAAgB;IAiCxB;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAkBjD,+GAA+G;IAC/G,OAAO,CAAC,aAAa;IAsCrB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAuBrC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAOrC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9B,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,EAAE;IA0B9D,IAAI,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI3C,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,SAAS,IAAI,MAAM,EAAE,CAExB;IAED,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IA4BxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IA2ClC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAUhD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAc9C,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/B,OAAO,CAAC,aAAa;IAWf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyD5B,OAAO,IAAI,IAAI;YAUD,iBAAiB;YA4BjB,mBAAmB;IAejC,OAAO,CAAC,eAAe;IAYvB;;;;;;;;OAQG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAwBzD;;;;;;;;OAQG;IACH,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,OAAe,GACtB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAYjC,UAAU,IAAI,IAAI;IAMlB;;OAEG;IACH,IAAI,QAAQ,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAE1C;IAED;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAYlC;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAgB/B;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIrC;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIlC;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAUhC;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,MAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBzE;;;;;;;OAOG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,MAAa,GAAG,OAAO,CAAC,OAAO,CAAC;CAiBnF"}
|