@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.
Files changed (98) hide show
  1. package/CHANGELOG.md +59 -35
  2. package/README.md +19 -19
  3. package/dist/context.d.ts +1 -1
  4. package/dist/context.d.ts.map +1 -1
  5. package/dist/context.js +5 -4
  6. package/dist/context.js.map +1 -1
  7. package/dist/derive.d.ts +8 -3
  8. package/dist/derive.d.ts.map +1 -1
  9. package/dist/derive.js +7 -7
  10. package/dist/derive.js.map +1 -1
  11. package/dist/event.d.ts +4 -41
  12. package/dist/event.d.ts.map +1 -1
  13. package/dist/event.js +4 -14
  14. package/dist/event.js.map +1 -1
  15. package/dist/execute.d.ts +10 -10
  16. package/dist/execute.d.ts.map +1 -1
  17. package/dist/execute.js +35 -28
  18. package/dist/execute.js.map +1 -1
  19. package/dist/gate.d.ts +17 -0
  20. package/dist/gate.d.ts.map +1 -0
  21. package/dist/gate.js +21 -0
  22. package/dist/gate.js.map +1 -0
  23. package/dist/index.d.ts +10 -8
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +9 -8
  26. package/dist/index.js.map +1 -1
  27. package/dist/layer.d.ts +5 -16
  28. package/dist/layer.d.ts.map +1 -1
  29. package/dist/layer.js +3 -20
  30. package/dist/layer.js.map +1 -1
  31. package/dist/provision-config.d.ts +22 -0
  32. package/dist/provision-config.d.ts.map +1 -0
  33. package/dist/provision-config.js +210 -0
  34. package/dist/provision-config.js.map +1 -0
  35. package/dist/provision.d.ts +71 -0
  36. package/dist/provision.d.ts.map +1 -0
  37. package/dist/provision.js +56 -0
  38. package/dist/provision.js.map +1 -0
  39. package/dist/run.d.ts +27 -0
  40. package/dist/run.d.ts.map +1 -0
  41. package/dist/run.js +34 -0
  42. package/dist/run.js.map +1 -0
  43. package/dist/service-config.d.ts +7 -7
  44. package/dist/service-config.d.ts.map +1 -1
  45. package/dist/service-config.js +75 -73
  46. package/dist/service-config.js.map +1 -1
  47. package/dist/service.d.ts +32 -36
  48. package/dist/service.d.ts.map +1 -1
  49. package/dist/service.js +21 -21
  50. package/dist/service.js.map +1 -1
  51. package/dist/signal.d.ts +33 -0
  52. package/dist/signal.d.ts.map +1 -0
  53. package/dist/signal.js +17 -0
  54. package/dist/signal.js.map +1 -0
  55. package/dist/topo.d.ts +10 -10
  56. package/dist/topo.d.ts.map +1 -1
  57. package/dist/topo.js +48 -35
  58. package/dist/topo.js.map +1 -1
  59. package/dist/trail.d.ts +16 -16
  60. package/dist/trail.d.ts.map +1 -1
  61. package/dist/trail.js +5 -4
  62. package/dist/trail.js.map +1 -1
  63. package/dist/types.d.ts +10 -10
  64. package/dist/types.d.ts.map +1 -1
  65. package/dist/types.js +2 -2
  66. package/dist/types.js.map +1 -1
  67. package/dist/validate-topo.d.ts +2 -2
  68. package/dist/validate-topo.js +31 -31
  69. package/dist/validate-topo.js.map +1 -1
  70. package/package.json +1 -1
  71. package/src/__tests__/context.test.ts +8 -8
  72. package/src/__tests__/execute.test.ts +124 -122
  73. package/src/__tests__/{layer.test.ts → gate.test.ts} +26 -26
  74. package/src/__tests__/{dispatch.test.ts → run.test.ts} +39 -39
  75. package/src/__tests__/service-config.test.ts +41 -37
  76. package/src/__tests__/service.test.ts +71 -71
  77. package/src/__tests__/{event.test.ts → signal.test.ts} +15 -15
  78. package/src/__tests__/topo.test.ts +54 -54
  79. package/src/__tests__/trail-permit.test.ts +4 -4
  80. package/src/__tests__/trail.test.ts +58 -58
  81. package/src/__tests__/type-utils.test.ts +3 -3
  82. package/src/__tests__/validate-topo.test.ts +38 -38
  83. package/src/context.ts +5 -4
  84. package/src/derive.ts +8 -8
  85. package/src/event.ts +11 -73
  86. package/src/execute.ts +56 -40
  87. package/src/{layer.ts → gate.ts} +13 -13
  88. package/src/index.ts +24 -22
  89. package/src/{service-config.ts → provision-config.ts} +124 -105
  90. package/src/provision.ts +148 -0
  91. package/src/{dispatch.ts → run.ts} +8 -8
  92. package/src/signal.ts +65 -0
  93. package/src/topo.ts +74 -52
  94. package/src/trail.ts +23 -22
  95. package/src/types.ts +11 -11
  96. package/src/validate-topo.ts +33 -33
  97. package/tsconfig.tsbuildinfo +1 -1
  98. 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 layers, and runs the
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 { composeLayers } from './layer.js';
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 { createServiceLookup } from './service.js';
13
- import { resolveServices } from './service-config.js';
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. `signal` override takes final precedence.
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.service ? seed : createTrailContext(seed);
31
- const withOverrides = options?.ctx
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 resolveServices(trail, baseCtx, options?.services, options?.configValues);
58
+ return await resolveProvisions(trail, baseCtx, options?.provisions, options?.configValues);
52
59
  };
53
- const runTrail = async (trail, input, ctx, layers) => {
54
- const impl = composeLayers([...layers], trail, trail.run);
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-layers-run pipeline.
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?.layers ?? []);
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);
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"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"}
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
@@ -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, FollowFn, BasePermit, PermitRequirement, ProgressCallback, ProgressEvent, Logger, ServiceLookup, } from './types.js';
5
- export { SURFACE_KEY } from './types.js';
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 { createServiceLookup, findDuplicateServiceId, isService, service, } from './service.js';
8
- export type { AnyService, Service, ServiceContext, ServiceOverrideMap, ServiceSpec, } from './service.js';
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 { composeLayers } from './layer.js';
20
- export type { Layer } from './layer.js';
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 { dispatch } from './dispatch.js';
26
- export type { DispatchOptions } from './dispatch.js';
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';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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 { SURFACE_KEY } from './types.js';
5
+ export { TRAILHEAD_KEY } from './types.js';
6
6
  // Context factory
7
7
  export { createTrailContext } from './context.js';
8
- // Service
9
- export { createServiceLookup, findDuplicateServiceId, isService, service, } from './service.js';
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
- // Event
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
- // Layer
20
- export { composeLayers } from './layer.js';
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
- // Dispatch
26
- export { dispatch } from './dispatch.js';
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,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,kBAAkB;AAClB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,UAAU;AACV,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,SAAS,EACT,OAAO,GACR,MAAM,cAAc,CAAC;AAStB,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAWnC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEpD,QAAQ;AACR,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,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,WAAW;AACX,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,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"}
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 { Trail } from './trail.js';
2
- import type { Implementation } from './types.js';
3
- /** A composable middleware that wraps trail implementations */
4
- export interface Layer {
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 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
@@ -1 +1 @@
1
- {"version":3,"file":"layer.d.ts","sourceRoot":"","sources":["../src/layer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD,+DAA+D;AAC/D,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE1C,oEAAoE;IACpE,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,aAAa,GAAI,CAAC,EAAE,CAAC,EAChC,QAAQ,SAAS,KAAK,EAAE,EACxB,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAClB,gBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,KACnC,cAAc,CAAC,CAAC,EAAE,CAAC,CAUrB,CAAC"}
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
- // Composition
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":"AAmBA,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,MAAwB,EACxB,KAAkB,EAClB,cAAoC,EACd,EAAE;IACxB,mDAAmD;IACnD,IAAI,MAAM,GAAG,cAAc,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
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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"}