@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/service.d.ts CHANGED
@@ -1,31 +1,31 @@
1
1
  import type { Result } from './result.js';
2
- import type { ServiceLookup, TrailContext } from './types.js';
2
+ import type { ProvisionLookup, TrailContext } from './types.js';
3
3
  import type { z } from 'zod';
4
4
  /**
5
- * Stable process-scoped fields available when constructing a service.
5
+ * Stable process-scoped fields available when constructing a provision.
6
6
  *
7
- * Services are app-level singletons, so they intentionally do not receive the
8
- * full per-request TrailContext. When a service declares a `config` schema,
7
+ * Provisions are app-level singletons, so they intentionally do not receive
8
+ * the full per-request TrailContext. When a provision declares a `config` schema,
9
9
  * the validated config is passed as `svc.config`.
10
10
  */
11
- export type ServiceContext<C = unknown> = Pick<TrailContext, 'cwd' | 'env' | 'workspaceRoot'> & {
11
+ export type ProvisionContext<C = unknown> = Pick<TrailContext, 'cwd' | 'env' | 'workspaceRoot'> & {
12
12
  readonly config: C;
13
13
  };
14
14
  /**
15
- * Everything needed to describe a service before a factory is introduced.
15
+ * Everything needed to describe a provision before a factory is introduced.
16
16
  *
17
17
  * When `config` is a Zod schema, the `create` callback receives
18
- * `ServiceContext<C>` with the validated config value.
18
+ * `ProvisionContext<C>` with the validated config value.
19
19
  */
20
- export interface ServiceSpec<T, C = unknown> {
21
- /** Create the service instance from stable process-scoped context. */
22
- readonly create: (svc: ServiceContext<C>) => Result<T, Error> | Promise<Result<T, Error>>;
20
+ export interface ProvisionSpec<T, C = unknown> {
21
+ /** Create the provision instance from stable process-scoped context. */
22
+ readonly create: (svc: ProvisionContext<C>) => Result<T, Error> | Promise<Result<T, Error>>;
23
23
  /** Config schema — when present, config is validated and passed to `create`. */
24
24
  readonly config?: z.ZodType<C> | undefined;
25
25
  /** Optional cleanup performed when the hosting surface shuts down. */
26
- readonly dispose?: ((service: T) => void | Promise<void>) | undefined;
26
+ readonly dispose?: ((provision: T) => void | Promise<void>) | undefined;
27
27
  /** Optional operational readiness probe for introspection tooling. */
28
- readonly health?: ((service: T) => Result<unknown, Error> | Promise<Result<unknown, Error>>) | undefined;
28
+ readonly health?: ((provision: T) => Result<unknown, Error> | Promise<Result<unknown, Error>>) | undefined;
29
29
  /** Optional test factory used by higher-level helpers. */
30
30
  readonly mock?: (() => T | Promise<T>) | undefined;
31
31
  /** Human-readable description. */
@@ -33,43 +33,39 @@ export interface ServiceSpec<T, C = unknown> {
33
33
  /** Arbitrary metadata for tooling and filtering. */
34
34
  readonly metadata?: Readonly<Record<string, unknown>> | undefined;
35
35
  }
36
- /**
37
- * A typed service definition.
38
- *
39
- * TRL-73 introduces the structural contract only. The `service()` factory and
40
- * runtime helpers land in follow-up branches.
41
- */
42
- export interface Service<T> extends ServiceSpec<T> {
43
- readonly kind: 'service';
36
+ /** A typed provision definition. */
37
+ export interface Provision<T> extends ProvisionSpec<T> {
38
+ readonly kind: 'provision';
44
39
  readonly id: string;
45
- /** Read the resolved service instance from a trail context. */
40
+ /** Read the resolved provision instance from a trail context. */
46
41
  from(ctx: TrailContext): T;
47
42
  }
48
43
  /**
49
- * Existential type for heterogeneous service collections.
44
+ * Existential type for heterogeneous provision collections.
50
45
  *
51
- * `Service<T>` includes function parameters in `dispose`/`health`, so `unknown`
52
- * is too narrow for mixed service arrays. `any` is the correct existential here.
46
+ * `Provision<T>` includes function parameters in `dispose`/`health`, so
47
+ * `unknown` is too narrow for mixed provision arrays. `any` is the correct
48
+ * existential here.
53
49
  */
54
- export type AnyService = Service<any>;
55
- /** Explicit runtime overrides keyed by service ID. */
56
- export type ServiceOverrideMap = Readonly<Record<string, unknown>>;
57
- /** Create a `ctx.service(...)` accessor bound to a concrete context snapshot. */
58
- export declare const createServiceLookup: (getContext: () => Pick<TrailContext, "extensions">) => ServiceLookup;
50
+ export type AnyProvision = Provision<any>;
51
+ /** Explicit runtime overrides keyed by provision ID. */
52
+ export type ProvisionOverrideMap = Readonly<Record<string, unknown>>;
53
+ /** Create a `ctx.provision(...)` accessor bound to a concrete context snapshot. */
54
+ export declare const createProvisionLookup: (getContext: () => Pick<TrailContext, "extensions">) => ProvisionLookup;
59
55
  /**
60
- * Create a typed service definition.
56
+ * Create a typed provision definition.
61
57
  *
62
- * The service object is inert until a later execution branch resolves concrete
58
+ * The provision object is inert until a later execution branch resolves concrete
63
59
  * instances into TrailContext extensions.
64
60
  */
65
- export declare const service: <T>(id: string, spec: ServiceSpec<T>) => Service<T>;
66
- /** Narrow unknown values to service definitions during topo discovery. */
67
- export declare const isService: (value: unknown) => value is AnyService;
61
+ export declare const provision: <T>(id: string, spec: ProvisionSpec<T>) => Provision<T>;
62
+ /** Narrow unknown values to provision definitions during topo discovery. */
63
+ export declare const isProvision: (value: unknown) => value is AnyProvision;
68
64
  /**
69
- * Return the first duplicate service ID in a collection, if any.
65
+ * Return the first duplicate provision ID in a collection, if any.
70
66
  *
71
67
  * This supports later topo registration without each caller duplicating the
72
68
  * same scan logic.
73
69
  */
74
- export declare const findDuplicateServiceId: (services: readonly Pick<AnyService, "id">[]) => string | undefined;
70
+ export declare const findDuplicateProvisionId: (provisions: readonly Pick<AnyProvision, "id">[]) => string | undefined;
75
71
  //# sourceMappingURL=service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,CAC5C,YAAY,EACZ,KAAK,GAAG,KAAK,GAAG,eAAe,CAChC,GAAG;IACF,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;CACpB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO;IACzC,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,CACf,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,KACnB,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAClD,gFAAgF;IAChF,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAC3C,sEAAsE;IACtE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;IACtE,sEAAsE;IACtE,QAAQ,CAAC,MAAM,CAAC,EACZ,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,GAC1E,SAAS,CAAC;IACd,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACnD,kCAAkC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;CACnE;AAED;;;;;GAKG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;IAChD,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,IAAI,CAAC,GAAG,EAAE,YAAY,GAAG,CAAC,CAAC;CAC5B;AAED;;;;;GAKG;AAEH,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAEtC,sDAAsD;AACtD,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAmBnE,iFAAiF;AACjF,eAAO,MAAM,mBAAmB,GAC9B,YAAY,MAAM,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,KACjD,aAQkB,CAAC;AAEtB;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,IAAI,MAAM,EAAE,MAAM,WAAW,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CASnE,CAAC;AAEL,0EAA0E;AAC1E,eAAO,MAAM,SAAS,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,UAMnD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,UAAU,SAAS,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,KAC1C,MAAM,GAAG,SASX,CAAC"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,CAC9C,YAAY,EACZ,KAAK,GAAG,KAAK,GAAG,eAAe,CAChC,GAAG;IACF,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;CACpB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO;IAC3C,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,CACf,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,KACrB,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAClD,gFAAgF;IAChF,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAC3C,sEAAsE;IACtE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;IACxE,sEAAsE;IACtE,QAAQ,CAAC,MAAM,CAAC,EACZ,CAAC,CACC,SAAS,EAAE,CAAC,KACT,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,GAC9D,SAAS,CAAC;IACd,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACnD,kCAAkC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;CACnE;AAED,oCAAoC;AACpC,MAAM,WAAW,SAAS,CAAC,CAAC,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,IAAI,CAAC,GAAG,EAAE,YAAY,GAAG,CAAC,CAAC;CAC5B;AAED;;;;;;GAMG;AAEH,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAE1C,wDAAwD;AACxD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAqBrE,mFAAmF;AACnF,eAAO,MAAM,qBAAqB,GAChC,YAAY,MAAM,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,KACjD,eAQoB,CAAC;AAExB;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,EACzB,IAAI,MAAM,EACV,MAAM,aAAa,CAAC,CAAC,CAAC,KACrB,SAAS,CAAC,CAAC,CASV,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,YAMrD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GACnC,YAAY,SAAS,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,KAC9C,MAAM,GAAG,SASX,CAAC"}
package/dist/service.js CHANGED
@@ -1,51 +1,51 @@
1
1
  import { NotFoundError } from './errors.js';
2
- const getServiceId = (serviceOrId) => (typeof serviceOrId === 'string' ? serviceOrId : serviceOrId.id);
3
- const getServiceInstance = (ctx, serviceOrId) => {
4
- const id = getServiceId(serviceOrId);
2
+ const getProvisionId = (provisionOrId) => typeof provisionOrId === 'string' ? provisionOrId : provisionOrId.id;
3
+ const getProvisionInstance = (ctx, provisionOrId) => {
4
+ const id = getProvisionId(provisionOrId);
5
5
  return ctx.extensions?.[id];
6
6
  };
7
- const hasServiceInstance = (ctx, serviceOrId) => Object.hasOwn(ctx.extensions ?? {}, getServiceId(serviceOrId));
8
- /** Create a `ctx.service(...)` accessor bound to a concrete context snapshot. */
9
- export const createServiceLookup = (getContext) => ((serviceOrId) => {
10
- const id = getServiceId(serviceOrId);
7
+ const hasProvisionInstance = (ctx, provisionOrId) => Object.hasOwn(ctx.extensions ?? {}, getProvisionId(provisionOrId));
8
+ /** Create a `ctx.provision(...)` accessor bound to a concrete context snapshot. */
9
+ export const createProvisionLookup = (getContext) => ((provisionOrId) => {
10
+ const id = getProvisionId(provisionOrId);
11
11
  const ctx = getContext();
12
- if (!hasServiceInstance(ctx, id)) {
13
- throw new NotFoundError(`Service "${id}" not found in trail context`);
12
+ if (!hasProvisionInstance(ctx, id)) {
13
+ throw new NotFoundError(`Provision "${id}" not found in trail context`);
14
14
  }
15
- return getServiceInstance(ctx, id);
15
+ return getProvisionInstance(ctx, id);
16
16
  });
17
17
  /**
18
- * Create a typed service definition.
18
+ * Create a typed provision definition.
19
19
  *
20
- * The service object is inert until a later execution branch resolves concrete
20
+ * The provision object is inert until a later execution branch resolves concrete
21
21
  * instances into TrailContext extensions.
22
22
  */
23
- export const service = (id, spec) => Object.freeze({
23
+ export const provision = (id, spec) => Object.freeze({
24
24
  ...spec,
25
25
  from(ctx) {
26
- const lookup = ctx.service ?? createServiceLookup(() => ctx);
26
+ const lookup = ctx.provision ?? createProvisionLookup(() => ctx);
27
27
  return lookup(this);
28
28
  },
29
29
  id,
30
- kind: 'service',
30
+ kind: 'provision',
31
31
  });
32
- /** Narrow unknown values to service definitions during topo discovery. */
33
- export const isService = (value) => {
32
+ /** Narrow unknown values to provision definitions during topo discovery. */
33
+ export const isProvision = (value) => {
34
34
  if (typeof value !== 'object' || value === null) {
35
35
  return false;
36
36
  }
37
37
  const v = value;
38
- return v.kind === 'service' && typeof v.id === 'string';
38
+ return v.kind === 'provision' && typeof v.id === 'string';
39
39
  };
40
40
  /**
41
- * Return the first duplicate service ID in a collection, if any.
41
+ * Return the first duplicate provision ID in a collection, if any.
42
42
  *
43
43
  * This supports later topo registration without each caller duplicating the
44
44
  * same scan logic.
45
45
  */
46
- export const findDuplicateServiceId = (services) => {
46
+ export const findDuplicateProvisionId = (provisions) => {
47
47
  const seen = new Set();
48
- for (const candidate of services) {
48
+ for (const candidate of provisions) {
49
49
  if (seen.has(candidate.id)) {
50
50
  return candidate.id;
51
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAuE5C,MAAM,YAAY,GAAG,CACnB,WAA4C,EACpC,EAAE,CAAC,CAAC,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAE9E,MAAM,kBAAkB,GAAG,CACzB,GAAqC,EACrC,WAA4C,EACzC,EAAE;IACL,MAAM,EAAE,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IACrC,OAAO,GAAG,CAAC,UAAU,EAAE,CAAC,EAAE,CAAM,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACzB,GAAqC,EACrC,WAA4C,EACnC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;AAE7E,iFAAiF;AACjF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,UAAkD,EACnC,EAAE,CACjB,CAAC,CAAC,WAA4C,EAAE,EAAE;IAChD,MAAM,EAAE,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,aAAa,CAAC,YAAY,EAAE,8BAA8B,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,kBAAkB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC,CAAkB,CAAC;AAEtB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAI,EAAU,EAAE,IAAoB,EAAc,EAAE,CACzE,MAAM,CAAC,MAAM,CAAC;IACZ,GAAG,IAAI;IACP,IAAI,CAAC,GAAiB;QACpB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,IAAI,mBAAmB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,EAAE;IACF,IAAI,EAAE,SAAkB;CACzB,CAAC,CAAC;AAEL,0EAA0E;AAC1E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAc,EAAuB,EAAE;IAC/D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,CAAC,GAAG,KAAyC,CAAC;IACpD,OAAO,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;AAC1D,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,QAA2C,EACvB,EAAE;IACtB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAC,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAqE5C,MAAM,cAAc,GAAG,CACrB,aAAgD,EACxC,EAAE,CACV,OAAO,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC;AAEvE,MAAM,oBAAoB,GAAG,CAC3B,GAAqC,EACrC,aAAgD,EAC7C,EAAE;IACL,MAAM,EAAE,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;IACzC,OAAO,GAAG,CAAC,UAAU,EAAE,CAAC,EAAE,CAAM,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAC3B,GAAqC,EACrC,aAAgD,EACvC,EAAE,CACX,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;AAErE,mFAAmF;AACnF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,UAAkD,EACjC,EAAE,CACnB,CAAC,CAAC,aAAgD,EAAE,EAAE;IACpD,MAAM,EAAE,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,aAAa,CAAC,cAAc,EAAE,8BAA8B,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,oBAAoB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACvC,CAAC,CAAoB,CAAC;AAExB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,EAAU,EACV,IAAsB,EACR,EAAE,CAChB,MAAM,CAAC,MAAM,CAAC;IACZ,GAAG,IAAI;IACP,IAAI,CAAC,GAAiB;QACpB,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,IAAI,qBAAqB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,EAAE;IACF,IAAI,EAAE,WAAoB;CAC3B,CAAC,CAAC;AAEL,4EAA4E;AAC5E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAc,EAAyB,EAAE;IACnE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,CAAC,GAAG,KAAyC,CAAC;IACpD,OAAO,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;AAC5D,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,UAA+C,EAC3B,EAAE;IACtB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAC,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Signal — a named payload schema with optional provenance meta.
3
+ */
4
+ import type { z } from 'zod';
5
+ export interface SignalSpec<T> {
6
+ readonly payload: z.ZodType<T>;
7
+ readonly description?: string | undefined;
8
+ readonly meta?: Readonly<Record<string, unknown>> | undefined;
9
+ /** Trail IDs that produce this signal (e.g. the trails it originates from). */
10
+ readonly from?: readonly string[] | undefined;
11
+ }
12
+ export interface Signal<T> {
13
+ readonly id: string;
14
+ readonly kind: 'signal';
15
+ readonly payload: z.ZodType<T>;
16
+ readonly description?: string | undefined;
17
+ readonly meta?: Readonly<Record<string, unknown>> | undefined;
18
+ /** Trail IDs that produce this signal (e.g. the trails it originates from). */
19
+ readonly from?: readonly string[] | undefined;
20
+ }
21
+ /**
22
+ * Create a signal definition.
23
+ *
24
+ * A signal is a named payload schema describing something that happened.
25
+ * Returns a frozen object with `kind: "signal"` and all spec fields.
26
+ */
27
+ export declare function signal<T>(id: string, spec: SignalSpec<T>): Signal<T>;
28
+ export declare function signal<T>(spec: SignalSpec<T> & {
29
+ readonly id: string;
30
+ }): Signal<T>;
31
+ /** Existential type for heterogeneous signal collections */
32
+ export type AnySignal = Signal<unknown>;
33
+ //# sourceMappingURL=signal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../src/signal.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAM7B,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAC9D,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CAC/C;AAMD,MAAM,WAAW,MAAM,CAAC,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAC9D,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CAC/C;AAMD;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtE,wBAAgB,MAAM,CAAC,CAAC,EACtB,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC5C,MAAM,CAAC,CAAC,CAAC,CAAC;AAkBb,4DAA4D;AAC5D,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC"}
package/dist/signal.js ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Signal — a named payload schema with optional provenance meta.
3
+ */
4
+ export function signal(idOrSpec, maybeSpec) {
5
+ const resolvedId = typeof idOrSpec === 'string' ? idOrSpec : idOrSpec.id;
6
+ // oxlint-disable-next-line no-non-null-assertion -- overload guarantees maybeSpec when idOrSpec is string
7
+ const resolvedSpec = typeof idOrSpec === 'string' ? maybeSpec : idOrSpec;
8
+ return Object.freeze({
9
+ description: resolvedSpec.description,
10
+ from: resolvedSpec.from ? Object.freeze([...resolvedSpec.from]) : undefined,
11
+ id: resolvedId,
12
+ kind: 'signal',
13
+ meta: resolvedSpec.meta,
14
+ payload: resolvedSpec.payload,
15
+ });
16
+ }
17
+ //# sourceMappingURL=signal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal.js","sourceRoot":"","sources":["../src/signal.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4CH,MAAM,UAAU,MAAM,CACpB,QAA4D,EAC5D,SAAyB;IAEzB,MAAM,UAAU,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;IACzE,0GAA0G;IAC1G,MAAM,YAAY,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC1E,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,YAAY,CAAC,WAAW;QACrC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QAC3E,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,QAAiB;QACvB,IAAI,EAAE,YAAY,CAAC,IAAI;QACvB,OAAO,EAAE,YAAY,CAAC,OAAO;KAC9B,CAAC,CAAC;AACL,CAAC"}
package/dist/topo.d.ts CHANGED
@@ -1,25 +1,25 @@
1
1
  /**
2
2
  * Application entry point — scans module exports to build a topology graph.
3
3
  */
4
- import type { AnyEvent } from './event.js';
5
- import type { AnyService } from './service.js';
4
+ import type { AnySignal } from './event.js';
5
+ import type { AnyProvision } from './provision.js';
6
6
  import type { AnyTrail } from './trail.js';
7
7
  export interface Topo {
8
8
  readonly name: string;
9
9
  readonly trails: ReadonlyMap<string, AnyTrail>;
10
- readonly events: ReadonlyMap<string, AnyEvent>;
11
- readonly services: ReadonlyMap<string, AnyService>;
10
+ readonly signals: ReadonlyMap<string, AnySignal>;
11
+ readonly provisions: ReadonlyMap<string, AnyProvision>;
12
12
  readonly count: number;
13
- readonly serviceCount: number;
13
+ readonly provisionCount: number;
14
14
  get(id: string): AnyTrail | undefined;
15
- getService(id: string): AnyService | undefined;
15
+ getProvision(id: string): AnyProvision | undefined;
16
16
  has(id: string): boolean;
17
- hasService(id: string): boolean;
17
+ hasProvision(id: string): boolean;
18
18
  ids(): string[];
19
- serviceIds(): string[];
19
+ provisionIds(): string[];
20
20
  list(): AnyTrail[];
21
- listEvents(): AnyEvent[];
22
- listServices(): AnyService[];
21
+ listSignals(): AnySignal[];
22
+ listProvisions(): AnyProvision[];
23
23
  }
24
24
  export declare const topo: (name: string, ...modules: Record<string, unknown>[]) => Topo;
25
25
  //# sourceMappingURL=topo.d.ts.map
@@ -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,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,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,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC/C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,GAAG,IAAI,MAAM,EAAE,CAAC;IAChB,UAAU,IAAI,MAAM,EAAE,CAAC;IACvB,IAAI,IAAI,QAAQ,EAAE,CAAC;IACnB,UAAU,IAAI,QAAQ,EAAE,CAAC;IACzB,YAAY,IAAI,UAAU,EAAE,CAAC;CAC9B;AAsHD,eAAO,MAAM,IAAI,GACf,MAAM,MAAM,EACZ,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KACpC,IAUF,CAAC"}
1
+ {"version":3,"file":"topo.d.ts","sourceRoot":"","sources":["../src/topo.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,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,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACvD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;IACnD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,GAAG,IAAI,MAAM,EAAE,CAAC;IAChB,YAAY,IAAI,MAAM,EAAE,CAAC;IACzB,IAAI,IAAI,QAAQ,EAAE,CAAC;IACnB,WAAW,IAAI,SAAS,EAAE,CAAC;IAC3B,cAAc,IAAI,YAAY,EAAE,CAAC;CAClC;AA4ID,eAAO,MAAM,IAAI,GACf,MAAM,MAAM,EACZ,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KACpC,IAUF,CAAC"}
package/dist/topo.js CHANGED
@@ -2,31 +2,30 @@
2
2
  * Application entry point — scans module exports to build a topology graph.
3
3
  */
4
4
  import { ValidationError } from './errors.js';
5
- import { isService } from './service.js';
5
+ import { isProvision } from './provision.js';
6
6
  const isRegistrable = (value) => {
7
7
  if (typeof value !== 'object' || value === null) {
8
8
  return false;
9
9
  }
10
10
  const { kind } = value;
11
- return kind === 'trail' || kind === 'event';
11
+ return kind === 'trail' || kind === 'signal';
12
12
  };
13
13
  // ---------------------------------------------------------------------------
14
14
  // Topo implementation
15
15
  // ---------------------------------------------------------------------------
16
- const createTopo = (name, trails, events, services) => ({
16
+ const createTopo = (name, trails, signals, provisions) => ({
17
17
  count: trails.size,
18
- events,
19
18
  get(id) {
20
19
  return trails.get(id);
21
20
  },
22
- getService(id) {
23
- return services.get(id);
21
+ getProvision(id) {
22
+ return provisions.get(id);
24
23
  },
25
24
  has(id) {
26
25
  return trails.has(id);
27
26
  },
28
- hasService(id) {
29
- return services.has(id);
27
+ hasProvision(id) {
28
+ return provisions.has(id);
30
29
  },
31
30
  ids() {
32
31
  return [...trails.keys()];
@@ -34,38 +33,39 @@ const createTopo = (name, trails, events, services) => ({
34
33
  list() {
35
34
  return [...trails.values()];
36
35
  },
37
- listEvents() {
38
- return [...events.values()];
36
+ listProvisions() {
37
+ return [...provisions.values()];
39
38
  },
40
- listServices() {
41
- return [...services.values()];
39
+ listSignals() {
40
+ return [...signals.values()];
42
41
  },
43
42
  name,
44
- serviceCount: services.size,
45
- serviceIds() {
46
- return [...services.keys()];
43
+ provisionCount: provisions.size,
44
+ provisionIds() {
45
+ return [...provisions.keys()];
47
46
  },
48
- services,
47
+ provisions,
48
+ signals,
49
49
  trails,
50
50
  });
51
51
  // ---------------------------------------------------------------------------
52
52
  // topo()
53
53
  // ---------------------------------------------------------------------------
54
54
  /** Register a single registrable value into the appropriate map. */
55
- const register = (value, trails, events, services) => {
55
+ const register = (value, trails, signals, provisions) => {
56
56
  const { id } = value;
57
57
  const registrars = {
58
- event: () => {
59
- if (events.has(id)) {
60
- throw new ValidationError(`Duplicate event ID: "${id}"`);
58
+ provision: () => {
59
+ if (provisions.has(id)) {
60
+ throw new ValidationError(`Duplicate provision ID: "${id}"`);
61
61
  }
62
- events.set(id, value);
62
+ provisions.set(id, value);
63
63
  },
64
- service: () => {
65
- if (services.has(id)) {
66
- throw new ValidationError(`Duplicate service ID: "${id}"`);
64
+ signal: () => {
65
+ if (signals.has(id)) {
66
+ throw new ValidationError(`Duplicate signal ID: "${id}"`);
67
67
  }
68
- services.set(id, value);
68
+ signals.set(id, value);
69
69
  },
70
70
  trail: () => {
71
71
  if (trails.has(id)) {
@@ -76,24 +76,37 @@ const register = (value, trails, events, services) => {
76
76
  };
77
77
  registrars[value.kind]?.();
78
78
  };
79
- const registerModuleValues = (mod, trails, events, services) => {
79
+ const markUniqueObject = (value, seenValues) => {
80
+ if (typeof value !== 'object' || value === null) {
81
+ return true;
82
+ }
83
+ if (seenValues.has(value)) {
84
+ return false;
85
+ }
86
+ seenValues.add(value);
87
+ return true;
88
+ };
89
+ const registerModuleValue = (value, trails, signals, provisions) => {
90
+ if (isProvision(value) || isRegistrable(value)) {
91
+ register(value, trails, signals, provisions);
92
+ }
93
+ };
94
+ const registerModuleValues = (mod, trails, signals, provisions) => {
95
+ const seenValues = new WeakSet();
80
96
  for (const value of Object.values(mod)) {
81
- if (isService(value)) {
82
- register(value, trails, events, services);
97
+ if (!markUniqueObject(value, seenValues)) {
83
98
  continue;
84
99
  }
85
- if (isRegistrable(value)) {
86
- register(value, trails, events, services);
87
- }
100
+ registerModuleValue(value, trails, signals, provisions);
88
101
  }
89
102
  };
90
103
  export const topo = (name, ...modules) => {
91
104
  const trails = new Map();
92
- const events = new Map();
93
- const services = new Map();
105
+ const signals = new Map();
106
+ const provisions = new Map();
94
107
  for (const mod of modules) {
95
- registerModuleValues(mod, trails, events, services);
108
+ registerModuleValues(mod, trails, signals, provisions);
96
109
  }
97
- return createTopo(name, trails, events, services);
110
+ return createTopo(name, trails, signals, provisions);
98
111
  };
99
112
  //# 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":"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"}
package/dist/trail.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { z } from 'zod';
2
2
  import type { FieldOverride } from './derive.js';
3
3
  import type { Result } from './result.js';
4
- import type { AnyService } from './service.js';
4
+ import type { AnyProvision } from './provision.js';
5
5
  import type { Implementation, PermitRequirement, TrailContext } from './types.js';
6
6
  /**
7
7
  * A named example for documentation and testing.
@@ -29,7 +29,7 @@ export interface TrailSpec<I, O> {
29
29
  /** Zod schema for validating output (optional — some trails are fire-and-forget) */
30
30
  readonly output?: z.ZodType<O> | undefined;
31
31
  /** The pure function that does the work (sync or async authoring) */
32
- readonly run: Implementation<I, O>;
32
+ readonly blaze: Implementation<I, O>;
33
33
  /** Human-readable description */
34
34
  readonly description?: string | undefined;
35
35
  /** Named examples for docs and testing */
@@ -38,30 +38,30 @@ export interface TrailSpec<I, O> {
38
38
  readonly intent?: 'read' | 'write' | 'destroy' | undefined;
39
39
  /** Trail is idempotent (safe to retry) */
40
40
  readonly idempotent?: boolean | undefined;
41
- /** Arbitrary metadata for tooling and filtering */
42
- readonly metadata?: Readonly<Record<string, unknown>> | undefined;
41
+ /** Arbitrary meta for tooling and filtering */
42
+ readonly meta?: Readonly<Record<string, unknown>> | undefined;
43
43
  /** Named sets of downstream trail IDs that may be invoked */
44
44
  readonly detours?: Readonly<Record<string, readonly string[]>> | undefined;
45
45
  /** Per-field overrides for deriveFields() (labels, hints, options) */
46
46
  readonly fields?: Readonly<Record<string, FieldOverride>> | undefined;
47
- /** IDs of downstream trails this trail may invoke via ctx.follow() */
48
- readonly follow?: readonly string[] | undefined;
49
- /** Services this trail may access via service.from(ctx) */
50
- readonly services?: readonly AnyService[] | undefined;
47
+ /** IDs of downstream trails this trail may invoke via ctx.cross() */
48
+ readonly crosses?: readonly string[] | undefined;
49
+ /** Provisions this trail may access via provision.from(ctx) */
50
+ readonly provisions?: readonly AnyProvision[] | undefined;
51
51
  /** Auth requirement: scopes object, 'public', or omitted (undeclared) */
52
52
  readonly permit?: PermitRequirement | undefined;
53
53
  }
54
54
  /** Intent describes what a trail does to the world */
55
55
  export type Intent = 'read' | 'write' | 'destroy';
56
56
  /** A fully-defined trail — the unit of work in the Trails system */
57
- export interface Trail<I, O> extends Omit<TrailSpec<I, O>, 'run' | 'follow' | 'intent' | 'services'> {
57
+ export interface Trail<I, O> extends Omit<TrailSpec<I, O>, 'blaze' | 'crosses' | 'intent' | 'provisions'> {
58
58
  readonly kind: 'trail';
59
59
  readonly id: string;
60
- readonly run: Implementation<I, O>;
61
- /** IDs of downstream trails this trail may invoke via ctx.follow() (always present, default []) */
62
- readonly follow: readonly string[];
63
- /** Services this trail may access via service.from(ctx) (always present, default []) */
64
- readonly services: readonly AnyService[];
60
+ readonly blaze: Implementation<I, O>;
61
+ /** IDs of downstream trails this trail may invoke via ctx.cross() (always present, default []) */
62
+ readonly crosses: readonly string[];
63
+ /** Provisions this trail may access via provision.from(ctx) (always present, default []) */
64
+ readonly provisions: readonly AnyProvision[];
65
65
  /** What this trail does to the world (always present, default 'write') */
66
66
  readonly intent: Intent;
67
67
  }
@@ -76,14 +76,14 @@ export interface Trail<I, O> extends Omit<TrailSpec<I, O>, 'run' | 'follow' | 'i
76
76
  * // ID as first argument (recommended for human authoring)
77
77
  * const show = trail("entity.show", {
78
78
  * input: z.object({ name: z.string() }),
79
- * run: (input) => Result.ok(entity),
79
+ * blaze: (input) => Result.ok(entity),
80
80
  * });
81
81
  *
82
82
  * // Full spec object (for programmatic generation)
83
83
  * const show = trail({
84
84
  * id: "entity.show",
85
85
  * input: z.object({ name: z.string() }),
86
- * run: (input) => Result.ok(entity),
86
+ * blaze: (input) => Result.ok(entity),
87
87
  * });
88
88
  * ```
89
89
  */
@@ -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,15 +5,16 @@ 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 { run, follow: rawFollow, intent: rawIntent, services: rawServices, ...spec } = resolved.spec;
8
+ const { blaze, crosses: rawCrosses, intent: rawIntent, provisions: rawProvisions, ...spec } = resolved.spec;
9
+ const provisions = Object.freeze([...(rawProvisions ?? [])]);
9
10
  return Object.freeze({
10
11
  ...spec,
11
- follow: Object.freeze([...(rawFollow ?? [])]),
12
+ blaze: async (input, ctx) => await blaze(input, ctx),
13
+ crosses: Object.freeze([...(rawCrosses ?? [])]),
12
14
  id: resolved.id,
13
15
  intent: rawIntent ?? 'write',
14
16
  kind: 'trail',
15
- run: async (input, ctx) => await run(input, ctx),
16
- services: Object.freeze([...(rawServices ?? [])]),
17
+ provisions,
17
18
  });
18
19
  }
19
20
  //# sourceMappingURL=trail.js.map
package/dist/trail.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"trail.js","sourceRoot":"","sources":["../src/trail.ts"],"names":[],"mappings":"AA0HA,MAAM,UAAU,KAAK,CACnB,QAA8D,EAC9D,SAA2B;IAE3B,MAAM,QAAQ,GACZ,OAAO,QAAQ,KAAK,QAAQ;QAC1B,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;QACnC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAE1C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,EACJ,GAAG,EACH,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,WAAW,EACrB,GAAG,IAAI,EACR,GAAG,QAAQ,CAAC,IAAI,CAAC;IAElB,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,IAAI;QACP,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7C,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,MAAM,EAAE,SAAS,IAAI,OAAO;QAC5B,IAAI,EAAE,OAAgB;QACtB,GAAG,EAAE,KAAK,EAAE,KAAQ,EAAE,GAAiB,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;QACjE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;KAClD,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"trail.js","sourceRoot":"","sources":["../src/trail.ts"],"names":[],"mappings":"AA0HA,MAAM,UAAU,KAAK,CACnB,QAA8D,EAC9D,SAA2B;IAE3B,MAAM,QAAQ,GACZ,OAAO,QAAQ,KAAK,QAAQ;QAC1B,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;QACnC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAE1C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,EACJ,KAAK,EACL,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,aAAa,EACzB,GAAG,IAAI,EACR,GAAG,QAAQ,CAAC,IAAI,CAAC;IAClB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE7D,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,IAAI;QACP,KAAK,EAAE,KAAK,EAAE,KAAQ,EAAE,GAAiB,EAAE,EAAE,CAAC,MAAM,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;QACrE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/C,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,MAAM,EAAE,SAAS,IAAI,OAAO;QAC5B,IAAI,EAAE,OAAgB;QACtB,UAAU;KACX,CAAC,CAAC;AACL,CAAC"}