@ontrails/core 1.0.0-beta.12 → 1.0.0-beta.13
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/CHANGELOG.md +59 -35
- package/README.md +19 -19
- package/dist/context.d.ts +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +5 -4
- package/dist/context.js.map +1 -1
- package/dist/derive.d.ts +8 -3
- package/dist/derive.d.ts.map +1 -1
- package/dist/derive.js +7 -7
- package/dist/derive.js.map +1 -1
- package/dist/event.d.ts +4 -41
- package/dist/event.d.ts.map +1 -1
- package/dist/event.js +4 -14
- package/dist/event.js.map +1 -1
- package/dist/execute.d.ts +10 -10
- package/dist/execute.d.ts.map +1 -1
- package/dist/execute.js +35 -28
- package/dist/execute.js.map +1 -1
- package/dist/gate.d.ts +17 -0
- package/dist/gate.d.ts.map +1 -0
- package/dist/gate.js +21 -0
- package/dist/gate.js.map +1 -0
- package/dist/index.d.ts +10 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -8
- package/dist/index.js.map +1 -1
- package/dist/layer.d.ts +5 -16
- package/dist/layer.d.ts.map +1 -1
- package/dist/layer.js +3 -20
- package/dist/layer.js.map +1 -1
- package/dist/provision-config.d.ts +22 -0
- package/dist/provision-config.d.ts.map +1 -0
- package/dist/provision-config.js +210 -0
- package/dist/provision-config.js.map +1 -0
- package/dist/provision.d.ts +71 -0
- package/dist/provision.d.ts.map +1 -0
- package/dist/provision.js +56 -0
- package/dist/provision.js.map +1 -0
- package/dist/run.d.ts +27 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +34 -0
- package/dist/run.js.map +1 -0
- package/dist/service-config.d.ts +7 -7
- package/dist/service-config.d.ts.map +1 -1
- package/dist/service-config.js +75 -73
- package/dist/service-config.js.map +1 -1
- package/dist/service.d.ts +32 -36
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +21 -21
- package/dist/service.js.map +1 -1
- package/dist/signal.d.ts +33 -0
- package/dist/signal.d.ts.map +1 -0
- package/dist/signal.js +17 -0
- package/dist/signal.js.map +1 -0
- package/dist/topo.d.ts +10 -10
- package/dist/topo.d.ts.map +1 -1
- package/dist/topo.js +48 -35
- package/dist/topo.js.map +1 -1
- package/dist/trail.d.ts +16 -16
- package/dist/trail.d.ts.map +1 -1
- package/dist/trail.js +5 -4
- package/dist/trail.js.map +1 -1
- package/dist/types.d.ts +10 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -2
- package/dist/types.js.map +1 -1
- package/dist/validate-topo.d.ts +2 -2
- package/dist/validate-topo.js +31 -31
- package/dist/validate-topo.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/context.test.ts +8 -8
- package/src/__tests__/execute.test.ts +124 -122
- package/src/__tests__/{layer.test.ts → gate.test.ts} +26 -26
- package/src/__tests__/{dispatch.test.ts → run.test.ts} +39 -39
- package/src/__tests__/service-config.test.ts +41 -37
- package/src/__tests__/service.test.ts +71 -71
- package/src/__tests__/{event.test.ts → signal.test.ts} +15 -15
- package/src/__tests__/topo.test.ts +54 -54
- package/src/__tests__/trail-permit.test.ts +4 -4
- package/src/__tests__/trail.test.ts +58 -58
- package/src/__tests__/type-utils.test.ts +3 -3
- package/src/__tests__/validate-topo.test.ts +38 -38
- package/src/context.ts +5 -4
- package/src/derive.ts +8 -8
- package/src/event.ts +11 -73
- package/src/execute.ts +56 -40
- package/src/{layer.ts → gate.ts} +13 -13
- package/src/index.ts +24 -22
- package/src/{service-config.ts → provision-config.ts} +124 -105
- package/src/provision.ts +148 -0
- package/src/{dispatch.ts → run.ts} +8 -8
- package/src/signal.ts +65 -0
- package/src/topo.ts +74 -52
- package/src/trail.ts +23 -22
- package/src/types.ts +11 -11
- package/src/validate-topo.ts +33 -33
- package/tsconfig.tsbuildinfo +1 -1
- package/src/service.ts +0 -145
package/dist/types.d.ts
CHANGED
|
@@ -7,9 +7,9 @@ import type { Result } from './result.js';
|
|
|
7
7
|
*/
|
|
8
8
|
export type Implementation<I, O> = (input: I, ctx: TrailContext) => Result<O, Error> | Promise<Result<O, Error>>;
|
|
9
9
|
/** Invoke another trail by id — used for trail composition */
|
|
10
|
-
export type
|
|
11
|
-
/** Resolve a
|
|
12
|
-
export type
|
|
10
|
+
export type CrossFn = <O>(id: string, input: unknown) => Promise<Result<O, Error>>;
|
|
11
|
+
/** Resolve a provision instance from the current trail context. */
|
|
12
|
+
export type ProvisionLookup = <T = unknown>(provisionOrId: {
|
|
13
13
|
readonly id: string;
|
|
14
14
|
} | string) => T;
|
|
15
15
|
/** Callback for reporting progress from long-running trails */
|
|
@@ -33,8 +33,8 @@ export interface Logger {
|
|
|
33
33
|
fatal(message: string, data?: Record<string, unknown>): void;
|
|
34
34
|
child(context: Record<string, unknown>): Logger;
|
|
35
35
|
}
|
|
36
|
-
/** Context extension key for the invoking
|
|
37
|
-
export declare const
|
|
36
|
+
/** Context extension key for the invoking trailhead name. */
|
|
37
|
+
export declare const TRAILHEAD_KEY: "__trails_trailhead";
|
|
38
38
|
/** Minimal permit shape available on TrailContext. Permits extends this. */
|
|
39
39
|
export interface BasePermit {
|
|
40
40
|
readonly id: string;
|
|
@@ -43,8 +43,8 @@ export interface BasePermit {
|
|
|
43
43
|
/** Runtime context threaded through every trail execution */
|
|
44
44
|
export interface TrailContext {
|
|
45
45
|
readonly requestId: string;
|
|
46
|
-
readonly
|
|
47
|
-
readonly
|
|
46
|
+
readonly abortSignal: AbortSignal;
|
|
47
|
+
readonly cross?: CrossFn | undefined;
|
|
48
48
|
readonly permit?: BasePermit;
|
|
49
49
|
readonly workspaceRoot?: string | undefined;
|
|
50
50
|
readonly logger?: Logger | undefined;
|
|
@@ -52,7 +52,7 @@ export interface TrailContext {
|
|
|
52
52
|
readonly cwd?: string | undefined;
|
|
53
53
|
readonly env?: Record<string, string | undefined> | undefined;
|
|
54
54
|
readonly extensions?: Readonly<Record<string, unknown>> | undefined;
|
|
55
|
-
readonly
|
|
55
|
+
readonly provision?: ProvisionLookup | undefined;
|
|
56
56
|
}
|
|
57
57
|
/**
|
|
58
58
|
* Permit requirement declared on a trail spec.
|
|
@@ -65,7 +65,7 @@ export type PermitRequirement = {
|
|
|
65
65
|
readonly scopes: readonly string[];
|
|
66
66
|
} | 'public';
|
|
67
67
|
/** Input shape used to seed a runtime TrailContext before resolution. */
|
|
68
|
-
export type TrailContextInit = Omit<TrailContext, '
|
|
69
|
-
readonly
|
|
68
|
+
export type TrailContextInit = Omit<TrailContext, 'provision'> & {
|
|
69
|
+
readonly provision?: ProvisionLookup | undefined;
|
|
70
70
|
};
|
|
71
71
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,CAAC,IAAI,CACjC,KAAK,EAAE,CAAC,EACR,GAAG,EAAE,YAAY,KACd,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAElD,8DAA8D;AAC9D,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/** Context extension key for the invoking
|
|
2
|
-
export const
|
|
1
|
+
/** Context extension key for the invoking trailhead name. */
|
|
2
|
+
export const TRAILHEAD_KEY = '__trails_trailhead';
|
|
3
3
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAgDA,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAgDA,6DAA6D;AAC7D,MAAM,CAAC,MAAM,aAAa,GAAG,oBAA6B,CAAC"}
|
package/dist/validate-topo.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Structural validation for a Topo graph.
|
|
3
3
|
*
|
|
4
|
-
* Checks trail
|
|
4
|
+
* Checks trail crossing references, example input validity, event origin
|
|
5
5
|
* references, and output schema completeness. Returns a Result with all
|
|
6
6
|
* issues collected into a single ValidationError.
|
|
7
7
|
*/
|
|
@@ -16,7 +16,7 @@ export interface TopoIssue {
|
|
|
16
16
|
/**
|
|
17
17
|
* Validate the structural integrity of a Topo graph.
|
|
18
18
|
*
|
|
19
|
-
* Checks
|
|
19
|
+
* Checks crossing references, example inputs, event origins, and output
|
|
20
20
|
* schema presence. Returns `Result.ok()` when no issues are found, or
|
|
21
21
|
* `Result.err(ValidationError)` with all issues in the error context.
|
|
22
22
|
*/
|
package/dist/validate-topo.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Structural validation for a Topo graph.
|
|
3
3
|
*
|
|
4
|
-
* Checks trail
|
|
4
|
+
* Checks trail crossing references, example input validity, event origin
|
|
5
5
|
* references, and output schema completeness. Returns a Result with all
|
|
6
6
|
* issues collected into a single ValidationError.
|
|
7
7
|
*/
|
|
@@ -14,12 +14,12 @@ import { validateInput } from './validation.js';
|
|
|
14
14
|
const WHITE = 0;
|
|
15
15
|
const GRAY = 1;
|
|
16
16
|
const BLACK = 2;
|
|
17
|
-
/** Build an adjacency list and initial color map from trails with
|
|
18
|
-
const
|
|
17
|
+
/** Build an adjacency list and initial color map from trails with crossings. */
|
|
18
|
+
const buildCrossGraph = (trails) => {
|
|
19
19
|
const graph = new Map();
|
|
20
20
|
for (const [id, t] of trails) {
|
|
21
|
-
if (t.
|
|
22
|
-
graph.set(id, t.
|
|
21
|
+
if (t.crosses.length > 0) {
|
|
22
|
+
graph.set(id, t.crosses);
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
const color = new Map();
|
|
@@ -28,10 +28,10 @@ const buildFollowGraph = (trails) => {
|
|
|
28
28
|
}
|
|
29
29
|
return { color, graph };
|
|
30
30
|
};
|
|
31
|
-
/** Detect multi-node cycles in the trail
|
|
32
|
-
const
|
|
31
|
+
/** Detect multi-node cycles in the trail crossing graph via DFS. */
|
|
32
|
+
const detectCrossCycles = (trails) => {
|
|
33
33
|
const issues = [];
|
|
34
|
-
const { color, graph } =
|
|
34
|
+
const { color, graph } = buildCrossGraph(trails);
|
|
35
35
|
const dfs = (node, path) => {
|
|
36
36
|
color.set(node, GRAY);
|
|
37
37
|
for (const next of graph.get(node) ?? []) {
|
|
@@ -43,7 +43,7 @@ const detectFollowCycles = (trails) => {
|
|
|
43
43
|
const cycle = [...path.slice(path.indexOf(next)), next];
|
|
44
44
|
issues.push({
|
|
45
45
|
message: `Cycle detected: ${cycle.join(' → ')}`,
|
|
46
|
-
rule: '
|
|
46
|
+
rule: 'cross-cycle',
|
|
47
47
|
trailId: next,
|
|
48
48
|
});
|
|
49
49
|
}
|
|
@@ -60,37 +60,37 @@ const detectFollowCycles = (trails) => {
|
|
|
60
60
|
}
|
|
61
61
|
return issues;
|
|
62
62
|
};
|
|
63
|
-
const
|
|
63
|
+
const checkCrosses = (trails, topo) => {
|
|
64
64
|
const issues = [];
|
|
65
65
|
for (const [id, trail] of trails) {
|
|
66
|
-
for (const
|
|
67
|
-
if (
|
|
66
|
+
for (const crossedId of trail.crosses) {
|
|
67
|
+
if (crossedId === id) {
|
|
68
68
|
issues.push({
|
|
69
|
-
message: `Trail
|
|
70
|
-
rule: 'no-self-
|
|
69
|
+
message: `Trail crosses itself`,
|
|
70
|
+
rule: 'no-self-cross',
|
|
71
71
|
trailId: id,
|
|
72
72
|
});
|
|
73
73
|
}
|
|
74
|
-
else if (!topo.has(
|
|
74
|
+
else if (!topo.has(crossedId)) {
|
|
75
75
|
issues.push({
|
|
76
|
-
message: `
|
|
77
|
-
rule: '
|
|
76
|
+
message: `Crosses "${crossedId}" which is not in the topo`,
|
|
77
|
+
rule: 'cross-exists',
|
|
78
78
|
trailId: id,
|
|
79
79
|
});
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
|
-
issues.push(...
|
|
83
|
+
issues.push(...detectCrossCycles(trails));
|
|
84
84
|
return issues;
|
|
85
85
|
};
|
|
86
|
-
const
|
|
86
|
+
const checkProvisions = (trails, topo) => {
|
|
87
87
|
const issues = [];
|
|
88
88
|
for (const [id, trail] of trails) {
|
|
89
|
-
for (const
|
|
90
|
-
if (!topo.
|
|
89
|
+
for (const declaredProvision of trail.provisions) {
|
|
90
|
+
if (!topo.hasProvision(declaredProvision.id)) {
|
|
91
91
|
issues.push({
|
|
92
|
-
message: `
|
|
93
|
-
rule: '
|
|
92
|
+
message: `Provision "${declaredProvision.id}" is not in the topo`,
|
|
93
|
+
rule: 'provision-exists',
|
|
94
94
|
trailId: id,
|
|
95
95
|
});
|
|
96
96
|
}
|
|
@@ -129,17 +129,17 @@ const checkExamples = (trails) => {
|
|
|
129
129
|
}
|
|
130
130
|
return issues;
|
|
131
131
|
};
|
|
132
|
-
const
|
|
132
|
+
const checkSignalOrigins = (signals, topo) => {
|
|
133
133
|
const issues = [];
|
|
134
|
-
for (const [id, evt] of
|
|
134
|
+
for (const [id, evt] of signals) {
|
|
135
135
|
if (!evt.from) {
|
|
136
136
|
continue;
|
|
137
137
|
}
|
|
138
138
|
for (const originId of evt.from) {
|
|
139
139
|
if (!topo.has(originId)) {
|
|
140
140
|
issues.push({
|
|
141
|
-
message: `
|
|
142
|
-
rule: '
|
|
141
|
+
message: `Signal origin "${originId}" is not in the topo`,
|
|
142
|
+
rule: 'signal-origin-exists',
|
|
143
143
|
trailId: id,
|
|
144
144
|
});
|
|
145
145
|
}
|
|
@@ -153,16 +153,16 @@ const checkEventOrigins = (events, topo) => {
|
|
|
153
153
|
/**
|
|
154
154
|
* Validate the structural integrity of a Topo graph.
|
|
155
155
|
*
|
|
156
|
-
* Checks
|
|
156
|
+
* Checks crossing references, example inputs, event origins, and output
|
|
157
157
|
* schema presence. Returns `Result.ok()` when no issues are found, or
|
|
158
158
|
* `Result.err(ValidationError)` with all issues in the error context.
|
|
159
159
|
*/
|
|
160
160
|
export const validateTopo = (topo) => {
|
|
161
161
|
const issues = [
|
|
162
|
-
...
|
|
163
|
-
...
|
|
162
|
+
...checkCrosses(topo.trails, topo),
|
|
163
|
+
...checkProvisions(topo.trails, topo),
|
|
164
164
|
...checkExamples(topo.trails),
|
|
165
|
-
...
|
|
165
|
+
...checkSignalOrigins(topo.signals, topo),
|
|
166
166
|
];
|
|
167
167
|
if (issues.length === 0) {
|
|
168
168
|
return Result.ok();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-topo.js","sourceRoot":"","sources":["../src/validate-topo.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAYhD,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,KAAK,GAAG,CAAC,CAAC;AAChB,MAAM,IAAI,GAAG,CAAC,CAAC;AACf,MAAM,KAAK,GAAG,CAAC,CAAC;AAEhB,
|
|
1
|
+
{"version":3,"file":"validate-topo.js","sourceRoot":"","sources":["../src/validate-topo.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAYhD,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,KAAK,GAAG,CAAC,CAAC;AAChB,MAAM,IAAI,GAAG,CAAC,CAAC;AACf,MAAM,KAAK,GAAG,CAAC,CAAC;AAEhB,gFAAgF;AAChF,MAAM,eAAe,GAAG,CACtB,MAAqC,EAIrC,EAAE;IACF,MAAM,KAAK,GAAG,IAAI,GAAG,EAA6B,CAAC;IACnD,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9B,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC,CAAC;AAEF,oEAAoE;AACpE,MAAM,iBAAiB,GAAG,CACxB,MAAqC,EACxB,EAAE;IACf,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEjD,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,IAAc,EAAQ,EAAE;QACjD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,SAAS;YACX,CAAC;YACD,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;YACnC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACf,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBACxD,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,mBAAmB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;oBAC/C,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;gBACvB,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;YAC5B,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CACnB,MAAqC,EACrC,IAAU,EACG,EAAE;IACf,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACjC,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACtC,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,sBAAsB;oBAC/B,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,EAAE;iBACZ,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,YAAY,SAAS,4BAA4B;oBAC1D,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,EAAE;iBACZ,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACtB,MAAqC,EACrC,IAAU,EACG,EAAE;IACf,MAAM,MAAM,GAAgB,EAAE,CAAC;IAE/B,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACjC,KAAK,MAAM,iBAAiB,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC7C,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,cAAc,iBAAiB,CAAC,EAAE,sBAAsB;oBACjE,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EAAE,EAAE;iBACZ,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACtB,EAAU,EACV,OAKC,EACD,WAAmE,EACnE,SAAkB,EACL,EAAE;IACf,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,aAAa,CAAC,WAAgC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9E,IAAI,MAAM,CAAC,KAAK,EAAE,IAAI,OAAO,CAAC,KAAK,KAAK,iBAAiB,EAAE,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC;YACV,OAAO,EAAE,YAAY,OAAO,CAAC,IAAI,uCAAuC;YACxE,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC;YACV,OAAO,EAAE,YAAY,OAAO,CAAC,IAAI,sDAAsD;YACvF,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAAqC,EAAe,EAAE;IAC3E,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpB,SAAS;QACX,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACzB,OAAuC,EACvC,IAAU,EACG,EAAE;IACf,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACd,SAAS;QACX,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACxB,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,kBAAkB,QAAQ,sBAAsB;oBACzD,IAAI,EAAE,sBAAsB;oBAC5B,OAAO,EAAE,EAAE;iBACZ,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAU,EAAiC,EAAE;IACxE,MAAM,MAAM,GAAG;QACb,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;QAClC,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;QACrC,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7B,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;KAC1C,CAAC;IAEF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,EAAE,EAAE,CAAC;IACrB,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,CACf,IAAI,eAAe,CACjB,+BAA+B,MAAM,CAAC,MAAM,WAAW,EACvD;QACE,OAAO,EAAE,EAAE,MAAM,EAAE;KACpB,CACF,CACF,CAAC;AACJ,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -23,10 +23,10 @@ describe('createTrailContext', () => {
|
|
|
23
23
|
expect(ctx.env).toBe(process.env);
|
|
24
24
|
});
|
|
25
25
|
|
|
26
|
-
test('provides a non-aborted
|
|
26
|
+
test('provides a non-aborted abortSignal by default', () => {
|
|
27
27
|
const ctx = createTrailContext();
|
|
28
|
-
expect(ctx.
|
|
29
|
-
expect(ctx.
|
|
28
|
+
expect(ctx.abortSignal).toBeInstanceOf(AbortSignal);
|
|
29
|
+
expect(ctx.abortSignal.aborted).toBe(false);
|
|
30
30
|
});
|
|
31
31
|
|
|
32
32
|
test('override values take precedence', () => {
|
|
@@ -34,17 +34,17 @@ describe('createTrailContext', () => {
|
|
|
34
34
|
ac.abort();
|
|
35
35
|
|
|
36
36
|
const ctx = createTrailContext({
|
|
37
|
+
abortSignal: ac.signal,
|
|
37
38
|
cwd: '/custom/dir',
|
|
38
39
|
env: { CUSTOM: 'yes' },
|
|
39
40
|
requestId: 'custom-id',
|
|
40
|
-
signal: ac.signal,
|
|
41
41
|
workspaceRoot: '/tmp',
|
|
42
42
|
});
|
|
43
43
|
|
|
44
44
|
expect(ctx.cwd).toBe('/custom/dir');
|
|
45
45
|
expect(ctx.env).toEqual({ CUSTOM: 'yes' });
|
|
46
46
|
expect(ctx.requestId).toBe('custom-id');
|
|
47
|
-
expect(ctx.
|
|
47
|
+
expect(ctx.abortSignal.aborted).toBe(true);
|
|
48
48
|
expect(ctx.workspaceRoot).toBe('/tmp');
|
|
49
49
|
});
|
|
50
50
|
|
|
@@ -57,14 +57,14 @@ describe('createTrailContext', () => {
|
|
|
57
57
|
expect(ctx.extensions?.['nested']).toEqual({ key: 'value' });
|
|
58
58
|
});
|
|
59
59
|
|
|
60
|
-
test('provides a
|
|
60
|
+
test('provides a provision accessor backed by extensions', () => {
|
|
61
61
|
const widget = { id: 'widget-1' };
|
|
62
62
|
const ctx = createTrailContext({
|
|
63
63
|
extensions: { 'widget.main': widget },
|
|
64
64
|
});
|
|
65
65
|
|
|
66
|
-
expect(ctx.
|
|
67
|
-
expect(ctx.
|
|
66
|
+
expect(ctx.provision('widget.main')).toBe(widget);
|
|
67
|
+
expect(ctx.provision<{ id: string }>({ id: 'widget.main' }).id).toBe(
|
|
68
68
|
'widget-1'
|
|
69
69
|
);
|
|
70
70
|
});
|