@ontrails/core 1.0.0-beta.0 → 1.0.0-beta.10

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 (84) hide show
  1. package/.turbo/turbo-lint.log +1 -1
  2. package/CHANGELOG.md +109 -0
  3. package/README.md +101 -131
  4. package/dist/derive.d.ts +1 -1
  5. package/dist/derive.d.ts.map +1 -1
  6. package/dist/derive.js +4 -1
  7. package/dist/derive.js.map +1 -1
  8. package/dist/dispatch.d.ts +27 -0
  9. package/dist/dispatch.d.ts.map +1 -0
  10. package/dist/dispatch.js +34 -0
  11. package/dist/dispatch.js.map +1 -0
  12. package/dist/event.d.ts +2 -2
  13. package/dist/event.d.ts.map +1 -1
  14. package/dist/event.js +1 -1
  15. package/dist/event.js.map +1 -1
  16. package/dist/execute.d.ts +30 -0
  17. package/dist/execute.d.ts.map +1 -0
  18. package/dist/execute.js +64 -0
  19. package/dist/execute.js.map +1 -0
  20. package/dist/index.d.ts +10 -6
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +7 -2
  23. package/dist/index.js.map +1 -1
  24. package/dist/patterns/status.d.ts +1 -1
  25. package/dist/result.d.ts +11 -11
  26. package/dist/result.d.ts.map +1 -1
  27. package/dist/result.js +15 -4
  28. package/dist/result.js.map +1 -1
  29. package/dist/serialization.d.ts.map +1 -1
  30. package/dist/serialization.js +45 -7
  31. package/dist/serialization.js.map +1 -1
  32. package/dist/topo.d.ts +4 -4
  33. package/dist/topo.d.ts.map +1 -1
  34. package/dist/topo.js +12 -16
  35. package/dist/topo.js.map +1 -1
  36. package/dist/trail.d.ts +16 -10
  37. package/dist/trail.d.ts.map +1 -1
  38. package/dist/trail.js +4 -2
  39. package/dist/trail.js.map +1 -1
  40. package/dist/type-utils.d.ts +24 -0
  41. package/dist/type-utils.d.ts.map +1 -0
  42. package/dist/type-utils.js +12 -0
  43. package/dist/type-utils.js.map +1 -0
  44. package/dist/types.d.ts +1 -2
  45. package/dist/types.d.ts.map +1 -1
  46. package/dist/validate-topo.d.ts +2 -2
  47. package/dist/validate-topo.d.ts.map +1 -1
  48. package/dist/validate-topo.js +59 -9
  49. package/dist/validate-topo.js.map +1 -1
  50. package/package.json +2 -2
  51. package/src/__tests__/context.test.ts +4 -5
  52. package/src/__tests__/derive.test.ts +44 -0
  53. package/src/__tests__/dispatch.test.ts +154 -0
  54. package/src/__tests__/event.test.ts +5 -5
  55. package/src/__tests__/execute.test.ts +208 -0
  56. package/src/__tests__/layer.test.ts +11 -111
  57. package/src/__tests__/serialization.test.ts +166 -1
  58. package/src/__tests__/topo.test.ts +101 -79
  59. package/src/__tests__/trail.test.ts +73 -35
  60. package/src/__tests__/type-utils.test.ts +90 -0
  61. package/src/__tests__/validate-topo.test.ts +97 -20
  62. package/src/derive.ts +12 -2
  63. package/src/dispatch.ts +54 -0
  64. package/src/event.ts +3 -3
  65. package/src/execute.ts +96 -0
  66. package/src/index.ts +22 -18
  67. package/src/result.ts +29 -15
  68. package/src/serialization.ts +56 -11
  69. package/src/topo.ts +18 -23
  70. package/src/trail.ts +24 -13
  71. package/src/type-utils.ts +45 -0
  72. package/src/types.ts +1 -3
  73. package/src/validate-topo.ts +70 -10
  74. package/tsconfig.tsbuildinfo +1 -1
  75. package/dist/hike.d.ts +0 -36
  76. package/dist/hike.d.ts.map +0 -1
  77. package/dist/hike.js +0 -20
  78. package/dist/hike.js.map +0 -1
  79. package/src/__tests__/hike.test.ts +0 -117
  80. package/src/__tests__/job.test.ts +0 -98
  81. package/src/adapters.ts +0 -68
  82. package/src/health.ts +0 -23
  83. package/src/hike.ts +0 -77
  84. package/src/job.ts +0 -20
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Centralized trail execution pipeline.
3
+ *
4
+ * Validates input, builds context, composes layers, and runs the
5
+ * implementation. Surfaces (CLI, MCP, HTTP) delegate here instead
6
+ * of reimplementing the pipeline.
7
+ */
8
+ import { composeLayers } from './layer.js';
9
+ import { createTrailContext } from './context.js';
10
+ import { InternalError } from './errors.js';
11
+ import { Result } from './result.js';
12
+ import { validateInput } from './validation.js';
13
+ // ---------------------------------------------------------------------------
14
+ // Context resolution
15
+ // ---------------------------------------------------------------------------
16
+ /**
17
+ * Build a TrailContext from options.
18
+ *
19
+ * Resolution order:
20
+ * 1. Factory (`createContext`) or `createTrailContext()` defaults.
21
+ * 2. Partial `ctx` overrides merged on top.
22
+ * 3. `signal` override takes final precedence.
23
+ */
24
+ const resolveContext = async (options) => {
25
+ const base = options?.createContext
26
+ ? await options.createContext()
27
+ : createTrailContext();
28
+ const withOverrides = options?.ctx
29
+ ? {
30
+ ...base,
31
+ ...options.ctx,
32
+ extensions: { ...base.extensions, ...options.ctx.extensions },
33
+ }
34
+ : base;
35
+ return options?.signal
36
+ ? { ...withOverrides, signal: options.signal }
37
+ : withOverrides;
38
+ };
39
+ // ---------------------------------------------------------------------------
40
+ // Pipeline
41
+ // ---------------------------------------------------------------------------
42
+ /**
43
+ * Execute a trail through the standard validate-context-layers-run pipeline.
44
+ *
45
+ * The function never throws -- unexpected exceptions are caught and
46
+ * returned as `Result.err(InternalError)`.
47
+ */
48
+ export const executeTrail = async (trail, rawInput, options) => {
49
+ try {
50
+ const validated = validateInput(trail.input, rawInput);
51
+ if (validated.isErr()) {
52
+ return validated;
53
+ }
54
+ const ctx = await resolveContext(options);
55
+ const layers = options?.layers ?? [];
56
+ const impl = composeLayers([...layers], trail, trail.run);
57
+ return await impl(validated.value, ctx);
58
+ }
59
+ catch (error) {
60
+ const message = error instanceof Error ? error.message : String(error);
61
+ return Result.err(new InternalError(message));
62
+ }
63
+ };
64
+ //# sourceMappingURL=execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAoBhD,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,cAAc,GAAG,KAAK,EAC1B,OAA6B,EACN,EAAE;IACzB,MAAM,IAAI,GAAG,OAAO,EAAE,aAAa;QACjC,CAAC,CAAC,MAAM,OAAO,CAAC,aAAa,EAAE;QAC/B,CAAC,CAAC,kBAAkB,EAAE,CAAC;IACzB,MAAM,aAAa,GAAG,OAAO,EAAE,GAAG;QAChC,CAAC,CAAC;YACE,GAAG,IAAI;YACP,GAAG,OAAO,CAAC,GAAG;YACd,UAAU,EAAE,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE;SAC9D;QACH,CAAC,CAAC,IAAI,CAAC;IACT,OAAO,OAAO,EAAE,MAAM;QACpB,CAAC,CAAC,EAAE,GAAG,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;QAC9C,CAAC,CAAC,aAAa,CAAC;AACpB,CAAC,CAAC;AAEF,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,KAAe,EACf,QAAiB,EACjB,OAA6B,EACI,EAAE;IACnC,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvD,IAAI,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;YACtB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1D,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,CAAC;AACH,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
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, FollowFn, ProgressCallback, ProgressEvent, Logger, Surface, } from './types.js';
4
+ export type { Implementation, TrailContext, FollowFn, ProgressCallback, ProgressEvent, Logger, } from './types.js';
5
5
  export { createTrailContext } from './context.js';
6
6
  export { trail } from './trail.js';
7
- export type { AnyTrail, Trail, TrailSpec, TrailExample } from './trail.js';
8
- export { hike } from './hike.js';
9
- export type { AnyHike, Hike, HikeSpec } from './hike.js';
7
+ export type { AnyTrail, Intent, Trail, TrailSpec, TrailExample, } from './trail.js';
8
+ export type { TrailInput, TrailOutput, TrailResult } from './type-utils.js';
9
+ export { inputOf, outputOf } from './type-utils.js';
10
10
  export { event } from './event.js';
11
11
  export type { AnyEvent, Event, EventSpec } from './event.js';
12
12
  export { topo } from './topo.js';
@@ -15,10 +15,12 @@ export { validateTopo } from './validate-topo.js';
15
15
  export type { TopoIssue } from './validate-topo.js';
16
16
  export { composeLayers } from './layer.js';
17
17
  export type { Layer } from './layer.js';
18
- export type { HealthStatus, HealthResult } from './health.js';
19
- export type { IndexAdapter, StorageAdapter, CacheAdapter, SearchOptions, SearchResult, StorageOptions, } from './adapters.js';
20
18
  export { deriveFields } from './derive.js';
21
19
  export type { Field, FieldOverride } from './derive.js';
20
+ export { executeTrail } from './execute.js';
21
+ export type { ExecuteTrailOptions } from './execute.js';
22
+ export { dispatch } from './dispatch.js';
23
+ export type { DispatchOptions } from './dispatch.js';
22
24
  export { validateInput, validateOutput, formatZodIssues, zodToJsonSchema, } from './validation.js';
23
25
  export { serializeError, deserializeError } from './serialization.js';
24
26
  export type { SerializedError } from './serialization.js';
@@ -28,6 +30,8 @@ export { brand, unbrand, uuid, email, nonEmptyString, positiveInt, shortId, hash
28
30
  export type { Branded, UUID, Email, NonEmptyString, PositiveInt, } from './branded.js';
29
31
  export { securePath, isPathSafe, resolveSafePath } from './path-security.js';
30
32
  export { findWorkspaceRoot, isInsideWorkspace, getRelativePath, } from './workspace.js';
33
+ export { createBlobRef, isBlobRef } from './blob-ref.js';
34
+ export type { BlobRef } from './blob-ref.js';
31
35
  export { isDefined, isNonEmptyString, isPlainObject, hasProperty, assertNever, } from './guards.js';
32
36
  export { chunk, dedupe, groupBy, sortBy, isNonEmptyArray, } from './collections.js';
33
37
  export type { NonEmptyArray, DeepPartial, Prettify, AtLeastOne, } from './collections.js';
@@ -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,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,MAAM,EACN,OAAO,GACR,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG3E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGzD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,YAAY,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGxC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG9D,YAAY,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,cAAc,GACf,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGxD,OAAO,EACL,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EACL,KAAK,EACL,WAAW,EACX,WAAW,EACX,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAKpD,OAAO,EACL,KAAK,EACL,OAAO,EACP,IAAI,EACJ,KAAK,EACL,cAAc,EACd,WAAW,EACX,OAAO,EACP,MAAM,GACP,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,OAAO,EACP,IAAI,EACJ,KAAK,EACL,cAAc,EACd,WAAW,GACZ,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG7E,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,KAAK,EACL,MAAM,EACN,OAAO,EACP,MAAM,EACN,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,aAAa,EACb,WAAW,EACX,QAAQ,EACR,UAAU,GACX,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -6,8 +6,7 @@ export { TrailsError, ValidationError, AmbiguousError, AssertionError, NotFoundE
6
6
  export { createTrailContext } from './context.js';
7
7
  // Trail
8
8
  export { trail } from './trail.js';
9
- // Hike
10
- export { hike } from './hike.js';
9
+ export { inputOf, outputOf } from './type-utils.js';
11
10
  // Event
12
11
  export { event } from './event.js';
13
12
  // Topo
@@ -18,6 +17,10 @@ export { validateTopo } from './validate-topo.js';
18
17
  export { composeLayers } from './layer.js';
19
18
  // Derive
20
19
  export { deriveFields } from './derive.js';
20
+ // Execute
21
+ export { executeTrail } from './execute.js';
22
+ // Dispatch
23
+ export { dispatch } from './dispatch.js';
21
24
  // Validation
22
25
  export { validateInput, validateOutput, formatZodIssues, zodToJsonSchema, } from './validation.js';
23
26
  // Serialization
@@ -31,6 +34,8 @@ export { brand, unbrand, uuid, email, nonEmptyString, positiveInt, shortId, hash
31
34
  export { securePath, isPathSafe, resolveSafePath } from './path-security.js';
32
35
  // Workspace
33
36
  export { findWorkspaceRoot, isInsideWorkspace, getRelativePath, } from './workspace.js';
37
+ // Blob
38
+ export { createBlobRef, isBlobRef } from './blob-ref.js';
34
39
  // Guards
35
40
  export { isDefined, isNonEmptyString, isPlainObject, hasProperty, assertNever, } from './guards.js';
36
41
  // Collections
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;AAcrB,kBAAkB;AAClB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,OAAO;AACP,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,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;AAgB3C,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,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,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;AAarB,kBAAkB;AAClB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,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"}
@@ -6,10 +6,10 @@ import { z } from 'zod';
6
6
  export declare const statusFields: () => z.ZodObject<{
7
7
  status: z.ZodEnum<{
8
8
  cancelled: "cancelled";
9
+ failed: "failed";
9
10
  pending: "pending";
10
11
  running: "running";
11
12
  completed: "completed";
12
- failed: "failed";
13
13
  }>;
14
14
  }, z.core.$strip>;
15
15
  //# sourceMappingURL=status.d.ts.map
package/dist/result.d.ts CHANGED
@@ -6,7 +6,7 @@ declare class Ok<T, E> {
6
6
  readonly value: T;
7
7
  constructor(value: T);
8
8
  isOk(): this is Ok<T, E>;
9
- isErr(): this is Err<T, E>;
9
+ isErr(): this is Err<E>;
10
10
  map<U>(fn: (value: T) => U): Result<U, E>;
11
11
  flatMap<U, F = E>(fn: (value: T) => Result<U, F>): Result<U, E | F>;
12
12
  mapErr<F>(_fn: (error: E) => F): Result<T, F>;
@@ -17,25 +17,25 @@ declare class Ok<T, E> {
17
17
  unwrap(): T;
18
18
  unwrapOr(_fallback: T): T;
19
19
  }
20
- declare class Err<T, E> {
20
+ declare class Err<E> {
21
21
  readonly error: E;
22
22
  constructor(error: E);
23
- isOk(): this is Ok<T, E>;
24
- isErr(): this is Err<T, E>;
25
- map<U>(_fn: (value: T) => U): Result<U, E>;
26
- flatMap<U, F = E>(_fn: (value: T) => Result<U, F>): Result<U, E | F>;
27
- mapErr<F>(fn: (error: E) => F): Result<T, F>;
23
+ isOk(): this is Ok<never, E>;
24
+ isErr(): this is Err<E>;
25
+ map<U>(_fn: (value: never) => U): Result<U, E>;
26
+ flatMap<U, F = E>(_fn: (value: never) => Result<U, F>): Result<U, E | F>;
27
+ mapErr<F>(fn: (error: E) => F): Result<never, F>;
28
28
  match<U>(handlers: {
29
- ok: (value: T) => U;
29
+ ok: (value: never) => U;
30
30
  err: (error: E) => U;
31
31
  }): U;
32
32
  unwrap(): never;
33
- unwrapOr(fallback: T): T;
33
+ unwrapOr<T>(fallback: T): T;
34
34
  }
35
- export type Result<T, E = Error> = Ok<T, E> | Err<T, E>;
35
+ export type Result<T, E = Error> = Ok<T, E> | Err<E>;
36
36
  export declare const Result: {
37
37
  readonly combine: <T, E>(results: readonly Result<T, E>[]) => Result<T[], E>;
38
- readonly err: <E>(error: E) => Result<never, E>;
38
+ readonly err: <E>(error: E) => Err<E>;
39
39
  /**
40
40
  * Wrap a fetch call in a Result, mapping failures to TrailsError subclasses.
41
41
  *
@@ -1 +1 @@
1
- {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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"}
package/dist/result.js CHANGED
@@ -118,13 +118,24 @@ export const Result = {
118
118
  */
119
119
  toJson(value) {
120
120
  try {
121
- const seen = new WeakSet();
122
- const json = JSON.stringify(value, (_key, val) => {
121
+ // Track the current ancestor chain, not every object ever visited.
122
+ // This allows shared references in a DAG while still detecting cycles.
123
+ const stack = [];
124
+ const keys = [];
125
+ const json = JSON.stringify(value, function json(key, val) {
126
+ if (stack.length > 0) {
127
+ // `this` is the object that contains `key`. Trim the stack back
128
+ // to `this` so we only track the current ancestor path.
129
+ const thisIndex = stack.lastIndexOf(this);
130
+ stack.splice(thisIndex + 1);
131
+ keys.splice(thisIndex);
132
+ }
123
133
  if (typeof val === 'object' && val !== null) {
124
- if (seen.has(val)) {
134
+ if (stack.includes(val)) {
125
135
  return '[Circular]';
126
136
  }
127
- seen.add(val);
137
+ stack.push(val);
138
+ keys.push(key);
128
139
  }
129
140
  return val;
130
141
  });
@@ -1 +1 @@
1
- {"version":3,"file":"result.js","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EACL,eAAe,EAOf,aAAa,EAId,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAMrC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AA4DD,2DAA2D;AAC3D,eAAO,MAAM,cAAc,GAAI,OAAO,KAAK,KAAG,eAmB7C,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,GAAI,MAAM,eAAe,KAAG,WAcxD,CAAC;AAMF,mEAAmE;AACnE,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,OAAO,EAAE,eAAe,CAWvE,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,aAAa,GACxB,OAAO,OAAO,KACb,MAAM,CAAC,MAAM,EAAE,aAAa,CA2B9B,CAAC"}
1
+ {"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EACL,eAAe,EAUf,aAAa,EAId,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAMrC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAqFD,2DAA2D;AAC3D,eAAO,MAAM,cAAc,GAAI,OAAO,KAAK,KAAG,eAmB7C,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,GAAI,MAAM,eAAe,KAAG,WAkBxD,CAAC;AAMF,mEAAmE;AACnE,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,OAAO,EAAE,eAAe,CAWvE,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,aAAa,GACxB,OAAO,OAAO,KACb,MAAM,CAAC,MAAM,EAAE,aAAa,CAwC9B,CAAC"}
@@ -4,7 +4,7 @@
4
4
  * Safe JSON parsing/stringifying and error serialization/deserialization
5
5
  * for transport across process boundaries.
6
6
  */
7
- import { ValidationError, NotFoundError, ConflictError, PermissionError, TimeoutError, RateLimitError, NetworkError, InternalError, AuthError, CancelledError, isTrailsError, } from './errors.js';
7
+ import { ValidationError, AmbiguousError, AssertionError, NotFoundError, AlreadyExistsError, ConflictError, PermissionError, TimeoutError, RateLimitError, NetworkError, InternalError, AuthError, CancelledError, isTrailsError, } from './errors.js';
8
8
  import { Result } from './result.js';
9
9
  // ---------------------------------------------------------------------------
10
10
  // Internal helpers (defined before usage)
@@ -41,6 +41,30 @@ const createErrorByCategory = (category, message, context, retryAfter) => {
41
41
  const factory = errorFactories[category] ?? errorFactories.internal;
42
42
  return factory(message, opts, retryAfter);
43
43
  };
44
+ /** Map error class names to their constructors for precise round-tripping. */
45
+ const errorConstructorsByName = {
46
+ AlreadyExistsError: (msg, opts) => new AlreadyExistsError(msg, opts),
47
+ AmbiguousError: (msg, opts) => new AmbiguousError(msg, opts),
48
+ AssertionError: (msg, opts) => new AssertionError(msg, opts),
49
+ AuthError: (msg, opts) => new AuthError(msg, opts),
50
+ CancelledError: (msg, opts) => new CancelledError(msg, opts),
51
+ ConflictError: (msg, opts) => new ConflictError(msg, opts),
52
+ InternalError: (msg, opts) => new InternalError(msg, opts),
53
+ NetworkError: (msg, opts) => new NetworkError(msg, opts),
54
+ NotFoundError: (msg, opts) => new NotFoundError(msg, opts),
55
+ PermissionError: (msg, opts) => new PermissionError(msg, opts),
56
+ RateLimitError: (msg, opts, retryAfter) => {
57
+ const rlOpts = {
58
+ ...opts,
59
+ };
60
+ if (retryAfter !== undefined) {
61
+ rlOpts.retryAfter = retryAfter;
62
+ }
63
+ return new RateLimitError(msg, rlOpts);
64
+ },
65
+ TimeoutError: (msg, opts) => new TimeoutError(msg, opts),
66
+ ValidationError: (msg, opts) => new ValidationError(msg, opts),
67
+ };
44
68
  // ---------------------------------------------------------------------------
45
69
  // Error serialization
46
70
  // ---------------------------------------------------------------------------
@@ -64,8 +88,11 @@ export const serializeError = (error) => {
64
88
  };
65
89
  /** Reconstruct a TrailsError from serialized data. */
66
90
  export const deserializeError = (data) => {
67
- const category = data.category ?? 'internal';
68
- const error = createErrorByCategory(category, data.message, data.context, data.retryAfter);
91
+ const opts = buildOpts(data.context);
92
+ const nameFactory = errorConstructorsByName[data.name];
93
+ const error = nameFactory
94
+ ? nameFactory(data.message, opts, data.retryAfter)
95
+ : createErrorByCategory(data.category ?? 'internal', data.message, data.context, data.retryAfter);
69
96
  if (data.stack) {
70
97
  error.stack = data.stack;
71
98
  }
@@ -89,13 +116,24 @@ export const safeParse = (json) => {
89
116
  /** Stringify a value, returning a Result. Handles circular references. */
90
117
  export const safeStringify = (value) => {
91
118
  try {
92
- const seen = new WeakSet();
93
- const json = JSON.stringify(value, (_key, val) => {
119
+ // Track the current ancestor chain, not every object ever visited.
120
+ // This allows shared references in a DAG while still detecting cycles.
121
+ const stack = [];
122
+ const keys = [];
123
+ const json = JSON.stringify(value, function json(key, val) {
124
+ if (stack.length > 0) {
125
+ // `this` is the object that contains `key`. Trim the stack back
126
+ // to `this` so we only track the current ancestor path.
127
+ const thisIndex = stack.lastIndexOf(this);
128
+ stack.splice(thisIndex + 1);
129
+ keys.splice(thisIndex);
130
+ }
94
131
  if (typeof val === 'object' && val !== null) {
95
- if (seen.has(val)) {
132
+ if (stack.includes(val)) {
96
133
  return '[Circular]';
97
134
  }
98
- seen.add(val);
135
+ stack.push(val);
136
+ keys.push(key);
99
137
  }
100
138
  return val;
101
139
  });
@@ -1 +1 @@
1
- {"version":3,"file":"serialization.js","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serialization.js","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"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"}
package/dist/topo.d.ts CHANGED
@@ -2,16 +2,16 @@
2
2
  * Application entry point — scans module exports to build a topology graph.
3
3
  */
4
4
  import type { AnyEvent } from './event.js';
5
- import type { AnyHike } from './hike.js';
6
5
  import type { AnyTrail } from './trail.js';
7
6
  export interface Topo {
8
7
  readonly name: string;
9
8
  readonly trails: ReadonlyMap<string, AnyTrail>;
10
- readonly hikes: ReadonlyMap<string, AnyHike>;
11
9
  readonly events: ReadonlyMap<string, AnyEvent>;
12
- get(id: string): AnyTrail | AnyHike | undefined;
10
+ readonly count: number;
11
+ get(id: string): AnyTrail | undefined;
13
12
  has(id: string): boolean;
14
- list(): (AnyTrail | AnyHike)[];
13
+ ids(): string[];
14
+ list(): AnyTrail[];
15
15
  listEvents(): AnyEvent[];
16
16
  }
17
17
  export declare const topo: (name: string, ...modules: Record<string, unknown>[]) => Topo;
@@ -1 +1 @@
1
- {"version":3,"file":"topo.d.ts","sourceRoot":"","sources":["../src/topo.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAM3C,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IAChD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,IAAI,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC;IAC/B,UAAU,IAAI,QAAQ,EAAE,CAAC;CAC1B;AAmFD,eAAO,MAAM,IAAI,GACf,MAAM,MAAM,EACZ,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KACpC,IAcF,CAAC"}
1
+ {"version":3,"file":"topo.d.ts","sourceRoot":"","sources":["../src/topo.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAM3C,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,GAAG,IAAI,MAAM,EAAE,CAAC;IAChB,IAAI,IAAI,QAAQ,EAAE,CAAC;IACnB,UAAU,IAAI,QAAQ,EAAE,CAAC;CAC1B;AA+ED,eAAO,MAAM,IAAI,GACf,MAAM,MAAM,EACZ,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KACpC,IAaF,CAAC"}
package/dist/topo.js CHANGED
@@ -7,22 +7,25 @@ const isRegistrable = (value) => {
7
7
  return false;
8
8
  }
9
9
  const { kind } = value;
10
- return kind === 'trail' || kind === 'hike' || kind === 'event';
10
+ return kind === 'trail' || kind === 'event';
11
11
  };
12
12
  // ---------------------------------------------------------------------------
13
13
  // Topo implementation
14
14
  // ---------------------------------------------------------------------------
15
- const createTopo = (name, trails, hikes, events) => ({
15
+ const createTopo = (name, trails, events) => ({
16
+ count: trails.size,
16
17
  events,
17
18
  get(id) {
18
- return trails.get(id) ?? hikes.get(id);
19
+ return trails.get(id);
19
20
  },
20
21
  has(id) {
21
- return trails.has(id) || hikes.has(id);
22
+ return trails.has(id);
23
+ },
24
+ ids() {
25
+ return [...trails.keys()];
22
26
  },
23
- hikes,
24
27
  list() {
25
- return [...trails.values(), ...hikes.values()];
28
+ return [...trails.values()];
26
29
  },
27
30
  listEvents() {
28
31
  return [...events.values()];
@@ -34,7 +37,7 @@ const createTopo = (name, trails, hikes, events) => ({
34
37
  // topo()
35
38
  // ---------------------------------------------------------------------------
36
39
  /** Register a single registrable value into the appropriate map. */
37
- const register = (value, trails, hikes, events) => {
40
+ const register = (value, trails, events) => {
38
41
  const { id } = value;
39
42
  const registrars = {
40
43
  event: () => {
@@ -43,12 +46,6 @@ const register = (value, trails, hikes, events) => {
43
46
  }
44
47
  events.set(id, value);
45
48
  },
46
- hike: () => {
47
- if (hikes.has(id)) {
48
- throw new ValidationError(`Duplicate hike ID: "${id}"`);
49
- }
50
- hikes.set(id, value);
51
- },
52
49
  trail: () => {
53
50
  if (trails.has(id)) {
54
51
  throw new ValidationError(`Duplicate trail ID: "${id}"`);
@@ -60,15 +57,14 @@ const register = (value, trails, hikes, events) => {
60
57
  };
61
58
  export const topo = (name, ...modules) => {
62
59
  const trails = new Map();
63
- const hikes = new Map();
64
60
  const events = new Map();
65
61
  for (const mod of modules) {
66
62
  for (const value of Object.values(mod)) {
67
63
  if (isRegistrable(value)) {
68
- register(value, trails, hikes, events);
64
+ register(value, trails, events);
69
65
  }
70
66
  }
71
67
  }
72
- return createTopo(name, trails, hikes, events);
68
+ return createTopo(name, trails, events);
73
69
  };
74
70
  //# sourceMappingURL=topo.js.map
package/dist/topo.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"topo.js","sourceRoot":"","sources":["../src/topo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"topo.js","sourceRoot":"","sources":["../src/topo.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA0B9C,MAAM,aAAa,GAAG,CAAC,KAAc,EAAwB,EAAE;IAC7D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,KAAgC,CAAC;IAClD,OAAO,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,CAAC;AAC9C,CAAC,CAAC;AAEF,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E,MAAM,UAAU,GAAG,CACjB,IAAY,EACZ,MAAqC,EACrC,MAAqC,EAC/B,EAAE,CAAC,CAAC;IACV,KAAK,EAAE,MAAM,CAAC,IAAI;IAClB,MAAM;IACN,GAAG,CAAC,EAAU;QACZ,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IACD,GAAG,CAAC,EAAU;QACZ,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,GAAG;QACD,OAAO,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,UAAU;QACR,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI;IAEJ,MAAM;CACP,CAAC,CAAC;AAEH,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E,oEAAoE;AACpE,MAAM,QAAQ,GAAG,CACf,KAAkB,EAClB,MAA6B,EAC7B,MAA6B,EACvB,EAAE;IACR,MAAM,EAAE,EAAE,EAAE,GAAG,KAAuB,CAAC;IACvC,MAAM,UAAU,GAA+B;QAC7C,KAAK,EAAE,GAAG,EAAE;YACV,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACnB,MAAM,IAAI,eAAe,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAiB,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,EAAE,GAAG,EAAE;YACV,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACnB,MAAM,IAAI,eAAe,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAiB,CAAC,CAAC;QACpC,CAAC;KACF,CAAC;IACF,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,IAAY,EACZ,GAAG,OAAkC,EAC/B,EAAE;IACR,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE3C,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC,CAAC"}
package/dist/trail.d.ts CHANGED
@@ -28,29 +28,35 @@ export interface TrailSpec<I, O> {
28
28
  /** Zod schema for validating output (optional — some trails are fire-and-forget) */
29
29
  readonly output?: z.ZodType<O> | undefined;
30
30
  /** The pure function that does the work (sync or async authoring) */
31
- readonly implementation: Implementation<I, O>;
31
+ readonly run: Implementation<I, O>;
32
32
  /** Human-readable description */
33
33
  readonly description?: string | undefined;
34
34
  /** Named examples for docs and testing */
35
35
  readonly examples?: readonly TrailExample<I, O>[] | undefined;
36
- /** Trail is read-only (no side effects) */
37
- readonly readOnly?: boolean | undefined;
38
- /** Trail is destructive (deletes or overwrites data) */
39
- readonly destructive?: boolean | undefined;
36
+ /** What this trail does to the world: read, write (default), or destroy */
37
+ readonly intent?: 'read' | 'write' | 'destroy' | undefined;
40
38
  /** Trail is idempotent (safe to retry) */
41
39
  readonly idempotent?: boolean | undefined;
42
40
  /** Arbitrary metadata for tooling and filtering */
43
- readonly markers?: Readonly<Record<string, unknown>> | undefined;
41
+ readonly metadata?: Readonly<Record<string, unknown>> | undefined;
44
42
  /** Named sets of downstream trail IDs that may be invoked */
45
43
  readonly detours?: Readonly<Record<string, readonly string[]>> | undefined;
46
44
  /** Per-field overrides for deriveFields() (labels, hints, options) */
47
45
  readonly fields?: Readonly<Record<string, FieldOverride>> | undefined;
46
+ /** IDs of downstream trails this trail may invoke via ctx.follow() */
47
+ readonly follow?: readonly string[] | undefined;
48
48
  }
49
+ /** Intent describes what a trail does to the world */
50
+ export type Intent = 'read' | 'write' | 'destroy';
49
51
  /** A fully-defined trail — the unit of work in the Trails system */
50
- export interface Trail<I, O> extends Omit<TrailSpec<I, O>, 'implementation'> {
52
+ export interface Trail<I, O> extends Omit<TrailSpec<I, O>, 'run' | 'follow' | 'intent'> {
51
53
  readonly kind: 'trail';
52
54
  readonly id: string;
53
- readonly implementation: Implementation<I, O>;
55
+ readonly run: Implementation<I, O>;
56
+ /** IDs of downstream trails this trail may invoke via ctx.follow() (always present, default []) */
57
+ readonly follow: readonly string[];
58
+ /** What this trail does to the world (always present, default 'write') */
59
+ readonly intent: Intent;
54
60
  }
55
61
  /**
56
62
  * Create a trail definition.
@@ -63,14 +69,14 @@ export interface Trail<I, O> extends Omit<TrailSpec<I, O>, 'implementation'> {
63
69
  * // ID as first argument (recommended for human authoring)
64
70
  * const show = trail("entity.show", {
65
71
  * input: z.object({ name: z.string() }),
66
- * implementation: (input) => Result.ok(entity),
72
+ * run: (input) => Result.ok(entity),
67
73
  * });
68
74
  *
69
75
  * // Full spec object (for programmatic generation)
70
76
  * const show = trail({
71
77
  * id: "entity.show",
72
78
  * input: z.object({ name: z.string() }),
73
- * implementation: (input) => Result.ok(entity),
79
+ * run: (input) => Result.ok(entity),
74
80
  * });
75
81
  * ```
76
82
  */
@@ -1 +1 @@
1
- {"version":3,"file":"trail.d.ts","sourceRoot":"","sources":["../src/trail.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trail.d.ts","sourceRoot":"","sources":["../src/trail.ts"],"names":[],"mappings":"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"}
package/dist/trail.js CHANGED
@@ -5,12 +5,14 @@ export function trail(idOrSpec, maybeSpec) {
5
5
  if (!resolved.spec) {
6
6
  throw new TypeError('trail() requires a spec when an id is provided');
7
7
  }
8
- const { implementation, ...spec } = resolved.spec;
8
+ const { run, follow: rawFollow, intent: rawIntent, ...spec } = resolved.spec;
9
9
  return Object.freeze({
10
10
  ...spec,
11
+ follow: Object.freeze([...(rawFollow ?? [])]),
11
12
  id: resolved.id,
12
- implementation: async (input, ctx) => await implementation(input, ctx),
13
+ intent: rawIntent ?? 'write',
13
14
  kind: 'trail',
15
+ run: async (input, ctx) => await run(input, ctx),
14
16
  });
15
17
  }
16
18
  //# sourceMappingURL=trail.js.map