@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/execute.js
CHANGED
|
@@ -1,64 +1,71 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Centralized trail execution pipeline.
|
|
3
3
|
*
|
|
4
|
-
* Validates input, builds context, composes
|
|
4
|
+
* Validates input, builds context, composes gates, and runs the
|
|
5
5
|
* implementation. Surfaces (CLI, MCP, HTTP) delegate here instead
|
|
6
6
|
* of reimplementing the pipeline.
|
|
7
7
|
*/
|
|
8
|
-
import {
|
|
8
|
+
import { composeGates } from './gate.js';
|
|
9
9
|
import { createTrailContext } from './context.js';
|
|
10
10
|
import { InternalError } from './errors.js';
|
|
11
11
|
import { Result } from './result.js';
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
12
|
+
import { createProvisionLookup } from './provision.js';
|
|
13
|
+
import { resolveProvisions } from './provision-config.js';
|
|
14
14
|
import { validateInput } from './validation.js';
|
|
15
15
|
// ---------------------------------------------------------------------------
|
|
16
16
|
// Context resolution
|
|
17
17
|
// ---------------------------------------------------------------------------
|
|
18
|
+
const applyContextOverrides = (base, options) => {
|
|
19
|
+
const withOverrides = options?.ctx
|
|
20
|
+
? {
|
|
21
|
+
...base,
|
|
22
|
+
...options.ctx,
|
|
23
|
+
extensions: { ...base.extensions, ...options.ctx.extensions },
|
|
24
|
+
}
|
|
25
|
+
: base;
|
|
26
|
+
return options?.abortSignal
|
|
27
|
+
? { ...withOverrides, abortSignal: options.abortSignal }
|
|
28
|
+
: withOverrides;
|
|
29
|
+
};
|
|
30
|
+
const bindProvisionLookup = (resolved, options) => {
|
|
31
|
+
if (options?.ctx?.extensions === undefined &&
|
|
32
|
+
resolved.provision !== undefined) {
|
|
33
|
+
return resolved;
|
|
34
|
+
}
|
|
35
|
+
const bound = { ...resolved };
|
|
36
|
+
const lookup = createProvisionLookup(() => bound);
|
|
37
|
+
bound.provision = lookup;
|
|
38
|
+
return bound;
|
|
39
|
+
};
|
|
18
40
|
/**
|
|
19
41
|
* Build a TrailContext from options.
|
|
20
42
|
*
|
|
21
43
|
* Resolution order:
|
|
22
44
|
* 1. Factory (`createContext`) or `createTrailContext()` defaults.
|
|
23
45
|
* 2. Partial `ctx` overrides merged on top.
|
|
24
|
-
* 3. `
|
|
46
|
+
* 3. `abortSignal` override takes final precedence.
|
|
25
47
|
*/
|
|
26
48
|
const resolveContext = async (options) => {
|
|
27
49
|
const seed = options?.createContext
|
|
28
50
|
? await options.createContext()
|
|
29
51
|
: createTrailContext();
|
|
30
|
-
const base = seed.
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
...base,
|
|
34
|
-
...options.ctx,
|
|
35
|
-
extensions: { ...base.extensions, ...options.ctx.extensions },
|
|
36
|
-
}
|
|
37
|
-
: base;
|
|
38
|
-
const resolved = options?.signal
|
|
39
|
-
? { ...withOverrides, signal: options.signal }
|
|
40
|
-
: withOverrides;
|
|
41
|
-
if (options?.ctx?.extensions !== undefined ||
|
|
42
|
-
resolved.service === undefined) {
|
|
43
|
-
const bound = { ...resolved };
|
|
44
|
-
bound.service = createServiceLookup(() => bound);
|
|
45
|
-
return bound;
|
|
46
|
-
}
|
|
47
|
-
return resolved;
|
|
52
|
+
const base = seed.provision ? seed : createTrailContext(seed);
|
|
53
|
+
const resolved = applyContextOverrides(base, options);
|
|
54
|
+
return bindProvisionLookup(resolved, options);
|
|
48
55
|
};
|
|
49
56
|
const prepareContext = async (trail, options) => {
|
|
50
57
|
const baseCtx = await resolveContext(options);
|
|
51
|
-
return await
|
|
58
|
+
return await resolveProvisions(trail, baseCtx, options?.provisions, options?.configValues);
|
|
52
59
|
};
|
|
53
|
-
const runTrail = async (trail, input, ctx,
|
|
54
|
-
const impl =
|
|
60
|
+
const runTrail = async (trail, input, ctx, gates) => {
|
|
61
|
+
const impl = composeGates([...gates], trail, trail.blaze);
|
|
55
62
|
return await impl(input, ctx);
|
|
56
63
|
};
|
|
57
64
|
// ---------------------------------------------------------------------------
|
|
58
65
|
// Pipeline
|
|
59
66
|
// ---------------------------------------------------------------------------
|
|
60
67
|
/**
|
|
61
|
-
* Execute a trail through the standard validate-context-
|
|
68
|
+
* Execute a trail through the standard validate-context-gates-run pipeline.
|
|
62
69
|
*
|
|
63
70
|
* The function never throws -- unexpected exceptions are caught and
|
|
64
71
|
* returned as `Result.err(InternalError)`.
|
|
@@ -73,7 +80,7 @@ export const executeTrail = async (trail, rawInput, options) => {
|
|
|
73
80
|
if (resolvedCtx.isErr()) {
|
|
74
81
|
return resolvedCtx;
|
|
75
82
|
}
|
|
76
|
-
return await runTrail(trail, validated.value, resolvedCtx.value, options?.
|
|
83
|
+
return await runTrail(trail, validated.value, resolvedCtx.value, options?.gates ?? []);
|
|
77
84
|
}
|
|
78
85
|
catch (error) {
|
|
79
86
|
const message = error instanceof Error ? error.message : String(error);
|
package/dist/execute.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"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"}
|
package/dist/gate.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Trail } from './trail.js';
|
|
2
|
+
import type { Implementation } from './types.js';
|
|
3
|
+
/** A composable gate that wraps trail implementations. */
|
|
4
|
+
export interface Gate {
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly description?: string | undefined;
|
|
7
|
+
/** Wrap a trail's implementation, returning a new implementation. */
|
|
8
|
+
wrap<I, O>(trail: Trail<I, O>, implementation: Implementation<I, O>): Implementation<I, O>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Apply gates outermost-first: gates[0] wraps gates[1] wraps ... wraps
|
|
12
|
+
* the base implementation.
|
|
13
|
+
*
|
|
14
|
+
* An empty gates array returns the implementation unchanged.
|
|
15
|
+
*/
|
|
16
|
+
export declare const composeGates: <I, O>(gates: readonly Gate[], trail: Trail<I, O>, implementation: Implementation<I, O>) => Implementation<I, O>;
|
|
17
|
+
//# sourceMappingURL=gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD,0DAA0D;AAC1D,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE1C,qEAAqE;IACrE,IAAI,CAAC,CAAC,EAAE,CAAC,EACP,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAClB,cAAc,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GACnC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACzB;AAMD;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,CAAC,EAC/B,OAAO,SAAS,IAAI,EAAE,EACtB,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAClB,gBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,KACnC,cAAc,CAAC,CAAC,EAAE,CAAC,CAUrB,CAAC"}
|
package/dist/gate.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Composition
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
/**
|
|
5
|
+
* Apply gates outermost-first: gates[0] wraps gates[1] wraps ... wraps
|
|
6
|
+
* the base implementation.
|
|
7
|
+
*
|
|
8
|
+
* An empty gates array returns the implementation unchanged.
|
|
9
|
+
*/
|
|
10
|
+
export const composeGates = (gates, trail, implementation) => {
|
|
11
|
+
// Fold right so gates[0] is the outermost wrapper.
|
|
12
|
+
let result = implementation;
|
|
13
|
+
for (let i = gates.length - 1; i >= 0; i -= 1) {
|
|
14
|
+
const gate = gates[i];
|
|
15
|
+
if (gate) {
|
|
16
|
+
result = gate.wrap(trail, result);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=gate.js.map
|
package/dist/gate.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate.js","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"AAmBA,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,KAAsB,EACtB,KAAkB,EAClB,cAAoC,EACd,EAAE;IACxB,mDAAmD;IACnD,IAAI,MAAM,GAAG,cAAc,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,29 +1,31 @@
|
|
|
1
1
|
export { Result } from './result.js';
|
|
2
2
|
export { TrailsError, ValidationError, AmbiguousError, AssertionError, NotFoundError, AlreadyExistsError, ConflictError, PermissionError, TimeoutError, RateLimitError, NetworkError, InternalError, AuthError, CancelledError, exitCodeMap, statusCodeMap, jsonRpcCodeMap, retryableMap, isRetryable, isTrailsError, } from './errors.js';
|
|
3
3
|
export type { ErrorCategory } from './errors.js';
|
|
4
|
-
export type { Implementation, TrailContext, TrailContextInit,
|
|
5
|
-
export {
|
|
4
|
+
export type { Implementation, TrailContext, TrailContextInit, CrossFn, BasePermit, PermitRequirement, ProgressCallback, ProgressEvent, Logger, ProvisionLookup, } from './types.js';
|
|
5
|
+
export { TRAILHEAD_KEY } from './types.js';
|
|
6
6
|
export { createTrailContext } from './context.js';
|
|
7
|
-
export {
|
|
8
|
-
export type {
|
|
7
|
+
export { createProvisionLookup, findDuplicateProvisionId, isProvision, provision, } from './provision.js';
|
|
8
|
+
export type { AnyProvision, Provision, ProvisionContext, ProvisionOverrideMap, ProvisionSpec, } from './provision.js';
|
|
9
9
|
export { trail } from './trail.js';
|
|
10
10
|
export type { AnyTrail, Intent, Trail, TrailSpec, TrailExample, } from './trail.js';
|
|
11
11
|
export type { TrailInput, TrailOutput, TrailResult } from './type-utils.js';
|
|
12
12
|
export { inputOf, outputOf } from './type-utils.js';
|
|
13
|
+
export { signal } from './signal.js';
|
|
14
|
+
export type { AnySignal, Signal, SignalSpec } from './signal.js';
|
|
13
15
|
export { event } from './event.js';
|
|
14
16
|
export type { AnyEvent, Event, EventSpec } from './event.js';
|
|
15
17
|
export { topo } from './topo.js';
|
|
16
18
|
export type { Topo } from './topo.js';
|
|
17
19
|
export { validateTopo } from './validate-topo.js';
|
|
18
20
|
export type { TopoIssue } from './validate-topo.js';
|
|
19
|
-
export {
|
|
20
|
-
export type {
|
|
21
|
+
export { composeGates } from './gate.js';
|
|
22
|
+
export type { Gate } from './gate.js';
|
|
21
23
|
export { deriveFields } from './derive.js';
|
|
22
24
|
export type { Field, FieldOverride } from './derive.js';
|
|
23
25
|
export { executeTrail } from './execute.js';
|
|
24
26
|
export type { ExecuteTrailOptions } from './execute.js';
|
|
25
|
-
export {
|
|
26
|
-
export type {
|
|
27
|
+
export { run } from './run.js';
|
|
28
|
+
export type { RunOptions } from './run.js';
|
|
27
29
|
export { validateInput, validateOutput, formatZodIssues, zodToJsonSchema, } from './validation.js';
|
|
28
30
|
export { serializeError, deserializeError } from './serialization.js';
|
|
29
31
|
export type { SerializedError } from './serialization.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,aAAa,EACb,SAAS,EACT,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,EACd,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,YAAY,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2,28 +2,29 @@
|
|
|
2
2
|
export { Result } from './result.js';
|
|
3
3
|
// Errors
|
|
4
4
|
export { TrailsError, ValidationError, AmbiguousError, AssertionError, NotFoundError, AlreadyExistsError, ConflictError, PermissionError, TimeoutError, RateLimitError, NetworkError, InternalError, AuthError, CancelledError, exitCodeMap, statusCodeMap, jsonRpcCodeMap, retryableMap, isRetryable, isTrailsError, } from './errors.js';
|
|
5
|
-
export {
|
|
5
|
+
export { TRAILHEAD_KEY } from './types.js';
|
|
6
6
|
// Context factory
|
|
7
7
|
export { createTrailContext } from './context.js';
|
|
8
|
-
//
|
|
9
|
-
export {
|
|
8
|
+
// Provision
|
|
9
|
+
export { createProvisionLookup, findDuplicateProvisionId, isProvision, provision, } from './provision.js';
|
|
10
10
|
// Trail
|
|
11
11
|
export { trail } from './trail.js';
|
|
12
12
|
export { inputOf, outputOf } from './type-utils.js';
|
|
13
|
-
//
|
|
13
|
+
// Signal
|
|
14
|
+
export { signal } from './signal.js';
|
|
14
15
|
export { event } from './event.js';
|
|
15
16
|
// Topo
|
|
16
17
|
export { topo } from './topo.js';
|
|
17
18
|
// Topo validation
|
|
18
19
|
export { validateTopo } from './validate-topo.js';
|
|
19
|
-
//
|
|
20
|
-
export {
|
|
20
|
+
// Gate
|
|
21
|
+
export { composeGates } from './gate.js';
|
|
21
22
|
// Derive
|
|
22
23
|
export { deriveFields } from './derive.js';
|
|
23
24
|
// Execute
|
|
24
25
|
export { executeTrail } from './execute.js';
|
|
25
|
-
//
|
|
26
|
-
export {
|
|
26
|
+
// Run
|
|
27
|
+
export { run } from './run.js';
|
|
27
28
|
// Validation
|
|
28
29
|
export { validateInput, validateOutput, formatZodIssues, zodToJsonSchema, } from './validation.js';
|
|
29
30
|
// Serialization
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,SAAS;AACT,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,aAAa,EACb,SAAS,EACT,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,EACd,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;AAgBrB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,SAAS;AACT,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,aAAa,EACb,SAAS,EACT,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,EACd,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;AAgBrB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,kBAAkB;AAClB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,YAAY;AACZ,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,WAAW,EACX,SAAS,GACV,MAAM,gBAAgB,CAAC;AASxB,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAWnC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEpD,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,OAAO;AACP,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO;AACP,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM;AACN,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAG/B,aAAa;AACb,OAAO,EACL,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,gBAAgB;AAChB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtE,aAAa;AACb,OAAO,EACL,KAAK,EACL,WAAW,EACX,WAAW,EACX,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAGzB,uDAAuD;AAEvD,gBAAgB;AAChB,OAAO,EACL,KAAK,EACL,OAAO,EACP,IAAI,EACJ,KAAK,EACL,cAAc,EACd,WAAW,EACX,OAAO,EACP,MAAM,GACP,MAAM,cAAc,CAAC;AAStB,gBAAgB;AAChB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE7E,YAAY;AACZ,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,OAAO;AACP,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGzD,SAAS;AACT,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB,cAAc;AACd,OAAO,EACL,KAAK,EACL,MAAM,EACN,OAAO,EACP,MAAM,EACN,eAAe,GAChB,MAAM,kBAAkB,CAAC"}
|
package/dist/layer.d.ts
CHANGED
|
@@ -1,17 +1,6 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
readonly description?: string | undefined;
|
|
7
|
-
/** Wrap a trail's implementation, returning a new implementation */
|
|
8
|
-
wrap<I, O>(trail: Trail<I, O>, implementation: Implementation<I, O>): Implementation<I, O>;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Apply layers outermost-first: layers[0] wraps layers[1] wraps ... wraps
|
|
12
|
-
* the base implementation.
|
|
13
|
-
*
|
|
14
|
-
* An empty layers array returns the implementation unchanged.
|
|
15
|
-
*/
|
|
16
|
-
export declare const composeLayers: <I, O>(layers: readonly Layer[], trail: Trail<I, O>, implementation: Implementation<I, O>) => Implementation<I, O>;
|
|
1
|
+
import type { Gate } from './gate.js';
|
|
2
|
+
/** Backward-compatible alias while `Layer` migrates to `Gate`. */
|
|
3
|
+
export type Layer = Gate;
|
|
4
|
+
/** Backward-compatible alias while `composeLayers()` migrates to `composeGates()`. */
|
|
5
|
+
export declare const composeLayers: <I, O>(gates: readonly Gate[], trail: import("./trail.js").Trail<I, O>, implementation: import("./types.js").Implementation<I, O>) => import("./types.js").Implementation<I, O>;
|
|
17
6
|
//# sourceMappingURL=layer.d.ts.map
|
package/dist/layer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layer.d.ts","sourceRoot":"","sources":["../src/layer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"layer.d.ts","sourceRoot":"","sources":["../src/layer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,kEAAkE;AAClE,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC;AAEzB,sFAAsF;AACtF,eAAO,MAAM,aAAa,iLAAe,CAAC"}
|
package/dist/layer.js
CHANGED
|
@@ -1,21 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Apply layers outermost-first: layers[0] wraps layers[1] wraps ... wraps
|
|
6
|
-
* the base implementation.
|
|
7
|
-
*
|
|
8
|
-
* An empty layers array returns the implementation unchanged.
|
|
9
|
-
*/
|
|
10
|
-
export const composeLayers = (layers, trail, implementation) => {
|
|
11
|
-
// Fold right so layers[0] is the outermost wrapper
|
|
12
|
-
let result = implementation;
|
|
13
|
-
for (let i = layers.length - 1; i >= 0; i -= 1) {
|
|
14
|
-
const layer = layers[i];
|
|
15
|
-
if (layer) {
|
|
16
|
-
result = layer.wrap(trail, result);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
1
|
+
import { composeGates } from './gate.js';
|
|
2
|
+
/** Backward-compatible alias while `composeLayers()` migrates to `composeGates()`. */
|
|
3
|
+
export const composeLayers = composeGates;
|
|
21
4
|
//# sourceMappingURL=layer.js.map
|
package/dist/layer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layer.js","sourceRoot":"","sources":["../src/layer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"layer.js","sourceRoot":"","sources":["../src/layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAMzC,sFAAsF;AACtF,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provision resolution pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from execute.ts to keep both modules under the 400 LOC ceiling.
|
|
5
|
+
* Handles config validation, singleton caching, concurrent-creation dedup,
|
|
6
|
+
* and the full resolve-or-create flow for declared provisions.
|
|
7
|
+
*/
|
|
8
|
+
import type { ProvisionOverrideMap } from './provision.js';
|
|
9
|
+
import type { AnyTrail } from './trail.js';
|
|
10
|
+
import type { TrailContext } from './types.js';
|
|
11
|
+
import { Result } from './result.js';
|
|
12
|
+
type ConfigValues = Readonly<Record<string, Record<string, unknown>>>;
|
|
13
|
+
/**
|
|
14
|
+
* Resolve all declared provisions for a trail.
|
|
15
|
+
*
|
|
16
|
+
* Validates per-provision config, checks overrides and caches, and creates
|
|
17
|
+
* new instances as needed. Returns an enriched context with all provision
|
|
18
|
+
* instances injected into extensions.
|
|
19
|
+
*/
|
|
20
|
+
export declare const resolveProvisions: (trail: AnyTrail, ctx: TrailContext, overrides?: ProvisionOverrideMap, configValues?: ConfigValues) => Promise<Result<TrailContext, Error>>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=provision-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provision-config.d.ts","sourceRoot":"","sources":["../src/provision-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAGV,oBAAoB,EACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAOrC,KAAK,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AA0TtE;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC5B,OAAO,QAAQ,EACf,KAAK,YAAY,EACjB,YAAY,oBAAoB,EAChC,eAAe,YAAY,KAC1B,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAsBrC,CAAC"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provision resolution pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from execute.ts to keep both modules under the 400 LOC ceiling.
|
|
5
|
+
* Handles config validation, singleton caching, concurrent-creation dedup,
|
|
6
|
+
* and the full resolve-or-create flow for declared provisions.
|
|
7
|
+
*/
|
|
8
|
+
import { InternalError, ValidationError } from './errors.js';
|
|
9
|
+
import { Result } from './result.js';
|
|
10
|
+
import { createProvisionLookup } from './provision.js';
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Singleton caches
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
const singletonProvisions = new WeakMap();
|
|
15
|
+
/** In-flight provision creation promises, keyed by provision x context. */
|
|
16
|
+
const pendingCreations = new WeakMap();
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Context helpers
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
const toProvisionContext = (ctx, config) => ({
|
|
21
|
+
config,
|
|
22
|
+
cwd: ctx.cwd,
|
|
23
|
+
env: ctx.env,
|
|
24
|
+
workspaceRoot: ctx.workspaceRoot,
|
|
25
|
+
});
|
|
26
|
+
const toProvisionContextKey = (ctx) => JSON.stringify({
|
|
27
|
+
config: ctx.config,
|
|
28
|
+
cwd: ctx.cwd,
|
|
29
|
+
env: Object.entries(ctx.env ?? {}).toSorted(([left], [right]) => left.localeCompare(right)),
|
|
30
|
+
workspaceRoot: ctx.workspaceRoot,
|
|
31
|
+
});
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Config validation
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
/** Validate and resolve a provision's config from the provided configValues map. */
|
|
36
|
+
const resolveProvisionConfig = (declaredProvision, configValues) => {
|
|
37
|
+
if (declaredProvision.config === undefined) {
|
|
38
|
+
return Result.ok();
|
|
39
|
+
}
|
|
40
|
+
const raw = configValues?.[declaredProvision.id];
|
|
41
|
+
if (raw === undefined) {
|
|
42
|
+
return Result.err(new ValidationError(`Provision "${declaredProvision.id}" declares a config schema but no config was provided`));
|
|
43
|
+
}
|
|
44
|
+
const parsed = declaredProvision.config.safeParse(raw);
|
|
45
|
+
if (!parsed.success) {
|
|
46
|
+
return Result.err(new ValidationError(`Provision "${declaredProvision.id}" config validation failed: ${parsed.error.message}`));
|
|
47
|
+
}
|
|
48
|
+
return Result.ok(parsed.data);
|
|
49
|
+
};
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
// Override / cache lookups
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
const hasOwnProvisionOverride = (overrides, id) => overrides !== undefined && Object.hasOwn(overrides, id);
|
|
54
|
+
const getCachedSingletonProvision = (declaredProvision, provisionContext) => {
|
|
55
|
+
const scopedCache = singletonProvisions.get(declaredProvision);
|
|
56
|
+
if (scopedCache === undefined) {
|
|
57
|
+
return { found: false, value: undefined };
|
|
58
|
+
}
|
|
59
|
+
const key = toProvisionContextKey(provisionContext);
|
|
60
|
+
if (!scopedCache.has(key)) {
|
|
61
|
+
return { found: false, value: undefined };
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
found: true,
|
|
65
|
+
value: scopedCache.get(key),
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
const getProvidedProvision = (ctx, overrides, declaredProvision, provisionContext) => {
|
|
69
|
+
const { id } = declaredProvision;
|
|
70
|
+
if (hasOwnProvisionOverride(overrides, id)) {
|
|
71
|
+
return Result.ok(overrides[id]);
|
|
72
|
+
}
|
|
73
|
+
if (Object.hasOwn(ctx.extensions ?? {}, id)) {
|
|
74
|
+
return Result.ok(ctx.extensions?.[id]);
|
|
75
|
+
}
|
|
76
|
+
const cached = getCachedSingletonProvision(declaredProvision, provisionContext);
|
|
77
|
+
if (cached.found) {
|
|
78
|
+
return Result.ok(cached.value);
|
|
79
|
+
}
|
|
80
|
+
return undefined;
|
|
81
|
+
};
|
|
82
|
+
const getOverrideOrExtension = (ctx, overrides, declaredProvision) => getProvidedProvision(ctx, overrides, declaredProvision, toProvisionContext(ctx));
|
|
83
|
+
const resolveConfigAwareProvidedProvision = (ctx, declaredProvision, configValues) => {
|
|
84
|
+
const configResult = resolveProvisionConfig(declaredProvision, configValues);
|
|
85
|
+
if (configResult.isErr()) {
|
|
86
|
+
return configResult;
|
|
87
|
+
}
|
|
88
|
+
const provisionContext = toProvisionContext(ctx, configResult.value);
|
|
89
|
+
const provided = getProvidedProvision(ctx, undefined, declaredProvision, provisionContext);
|
|
90
|
+
return provided
|
|
91
|
+
? Result.ok({ kind: 'provided', value: provided.unwrap() })
|
|
92
|
+
: Result.ok({ kind: 'context', provisionContext });
|
|
93
|
+
};
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
95
|
+
// Instance creation
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
const toInternalProvisionError = (id, error) => {
|
|
98
|
+
const cause = error instanceof Error ? error : undefined;
|
|
99
|
+
const message = cause?.message ?? String(error);
|
|
100
|
+
return new InternalError(`Provision "${id}" failed to resolve: ${message}`, {
|
|
101
|
+
...(cause ? { cause } : {}),
|
|
102
|
+
context: { provisionId: id },
|
|
103
|
+
});
|
|
104
|
+
};
|
|
105
|
+
const getSingletonProvisionCache = (declaredProvision) => {
|
|
106
|
+
const existing = singletonProvisions.get(declaredProvision);
|
|
107
|
+
if (existing !== undefined) {
|
|
108
|
+
return existing;
|
|
109
|
+
}
|
|
110
|
+
const created = new Map();
|
|
111
|
+
singletonProvisions.set(declaredProvision, created);
|
|
112
|
+
return created;
|
|
113
|
+
};
|
|
114
|
+
const doCreateProvisionInstance = async (declaredProvision, provisionContext) => {
|
|
115
|
+
try {
|
|
116
|
+
const created = await declaredProvision.create(provisionContext);
|
|
117
|
+
if (created.isErr()) {
|
|
118
|
+
return Result.err(created.error);
|
|
119
|
+
}
|
|
120
|
+
const instance = created.unwrap();
|
|
121
|
+
getSingletonProvisionCache(declaredProvision).set(toProvisionContextKey(provisionContext), instance);
|
|
122
|
+
return Result.ok(instance);
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
return Result.err(toInternalProvisionError(declaredProvision.id, error));
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
const trackPendingCreation = (declaredProvision, key, promise) => {
|
|
129
|
+
const pending = pendingCreations.get(declaredProvision);
|
|
130
|
+
if (pending) {
|
|
131
|
+
pending.set(key, promise);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
pendingCreations.set(declaredProvision, new Map([[key, promise]]));
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* Deduplicates concurrent creation of the same provision singleton.
|
|
139
|
+
* If a creation is already in flight for this provision x context key,
|
|
140
|
+
* returns the existing promise instead of spawning a second factory call.
|
|
141
|
+
*/
|
|
142
|
+
const createProvisionInstance = async (declaredProvision, provisionContext) => {
|
|
143
|
+
const key = toProvisionContextKey(provisionContext);
|
|
144
|
+
const inflight = pendingCreations.get(declaredProvision)?.get(key);
|
|
145
|
+
if (inflight) {
|
|
146
|
+
return inflight;
|
|
147
|
+
}
|
|
148
|
+
const promise = doCreateProvisionInstance(declaredProvision, provisionContext);
|
|
149
|
+
trackPendingCreation(declaredProvision, key, promise);
|
|
150
|
+
try {
|
|
151
|
+
return await promise;
|
|
152
|
+
}
|
|
153
|
+
finally {
|
|
154
|
+
pendingCreations.get(declaredProvision)?.delete(key);
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
/** Validate config and resolve a single declared provision. */
|
|
158
|
+
const resolveDeclaredProvision = async (declaredProvision, ctx, overrides, configValues) => {
|
|
159
|
+
// Check overrides/extensions first — skip config validation entirely when
|
|
160
|
+
// a provision instance is already provided.
|
|
161
|
+
const overrideOrExtension = getOverrideOrExtension(ctx, overrides, declaredProvision);
|
|
162
|
+
if (overrideOrExtension !== undefined) {
|
|
163
|
+
return overrideOrExtension;
|
|
164
|
+
}
|
|
165
|
+
// Resolve config before consulting the singleton cache so config-aware
|
|
166
|
+
// provisions use the same canonical context for cache reads and writes.
|
|
167
|
+
const configAwareProvision = resolveConfigAwareProvidedProvision(ctx, declaredProvision, configValues);
|
|
168
|
+
if (configAwareProvision.isErr()) {
|
|
169
|
+
return configAwareProvision;
|
|
170
|
+
}
|
|
171
|
+
// No provided instance — create via factory.
|
|
172
|
+
const resolved = configAwareProvision.unwrap();
|
|
173
|
+
if (resolved.kind === 'provided') {
|
|
174
|
+
return Result.ok(resolved.value);
|
|
175
|
+
}
|
|
176
|
+
return await createProvisionInstance(declaredProvision, resolved.provisionContext);
|
|
177
|
+
};
|
|
178
|
+
// ---------------------------------------------------------------------------
|
|
179
|
+
// Full trail provision resolution
|
|
180
|
+
// ---------------------------------------------------------------------------
|
|
181
|
+
const withResolvedProvisions = (ctx, resolvedProvisions) => {
|
|
182
|
+
const extensions = { ...ctx.extensions, ...resolvedProvisions };
|
|
183
|
+
const resolvedCtx = { ...ctx, extensions };
|
|
184
|
+
const lookup = createProvisionLookup(() => resolvedCtx);
|
|
185
|
+
resolvedCtx.provision = lookup;
|
|
186
|
+
return resolvedCtx;
|
|
187
|
+
};
|
|
188
|
+
/**
|
|
189
|
+
* Resolve all declared provisions for a trail.
|
|
190
|
+
*
|
|
191
|
+
* Validates per-provision config, checks overrides and caches, and creates
|
|
192
|
+
* new instances as needed. Returns an enriched context with all provision
|
|
193
|
+
* instances injected into extensions.
|
|
194
|
+
*/
|
|
195
|
+
export const resolveProvisions = async (trail, ctx, overrides, configValues) => {
|
|
196
|
+
const { provisions } = trail;
|
|
197
|
+
if (provisions.length === 0) {
|
|
198
|
+
return Result.ok(ctx);
|
|
199
|
+
}
|
|
200
|
+
const resolvedProvisions = {};
|
|
201
|
+
for (const declaredProvision of provisions) {
|
|
202
|
+
const resolved = await resolveDeclaredProvision(declaredProvision, ctx, overrides, configValues);
|
|
203
|
+
if (resolved.isErr()) {
|
|
204
|
+
return resolved;
|
|
205
|
+
}
|
|
206
|
+
resolvedProvisions[declaredProvision.id] = resolved.unwrap();
|
|
207
|
+
}
|
|
208
|
+
return Result.ok(withResolvedProvisions(ctx, resolvedProvisions));
|
|
209
|
+
};
|
|
210
|
+
//# sourceMappingURL=provision-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provision-config.js","sourceRoot":"","sources":["../src/provision-config.ts"],"names":[],"mappings":"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"}
|