depa-actor 0.1.2 → 0.2.1

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 (96) hide show
  1. package/dist/addressing.d.ts +100 -0
  2. package/dist/addressing.d.ts.map +1 -0
  3. package/dist/addressing.js +409 -0
  4. package/dist/addressing.js.map +1 -0
  5. package/dist/core/ActorSystem.d.ts +1 -1
  6. package/dist/core/ActorSystem.d.ts.map +1 -1
  7. package/dist/dispatch/ActorDispatchAdapter.d.ts +75 -18
  8. package/dist/dispatch/ActorDispatchAdapter.d.ts.map +1 -1
  9. package/dist/dispatch/ActorDispatchAdapter.js +109 -24
  10. package/dist/dispatch/ActorDispatchAdapter.js.map +1 -1
  11. package/dist/execution/commandDeque.d.ts +121 -0
  12. package/dist/execution/commandDeque.d.ts.map +1 -0
  13. package/dist/execution/commandDeque.js +415 -0
  14. package/dist/execution/commandDeque.js.map +1 -0
  15. package/dist/execution/dispatcher.d.ts +72 -0
  16. package/dist/execution/dispatcher.d.ts.map +1 -0
  17. package/dist/execution/dispatcher.js +77 -0
  18. package/dist/execution/dispatcher.js.map +1 -0
  19. package/dist/execution/index.d.ts +7 -0
  20. package/dist/execution/index.d.ts.map +1 -0
  21. package/dist/execution/index.js +4 -0
  22. package/dist/execution/index.js.map +1 -0
  23. package/dist/execution/stack.d.ts +24 -0
  24. package/dist/execution/stack.d.ts.map +1 -0
  25. package/dist/execution/stack.js +84 -0
  26. package/dist/execution/stack.js.map +1 -0
  27. package/dist/index.d.ts +21 -15
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +15 -8
  30. package/dist/index.js.map +1 -1
  31. package/dist/orchestration/index.d.ts +8 -8
  32. package/dist/orchestration/index.d.ts.map +1 -1
  33. package/dist/orchestration/index.js +6 -6
  34. package/dist/orchestration/index.js.map +1 -1
  35. package/dist/orchestration/presets/aiAgent.d.ts +2 -2
  36. package/dist/orchestration/presets/aiAgent.d.ts.map +1 -1
  37. package/dist/orchestration/recovery.d.ts +2 -2
  38. package/dist/orchestration/recovery.d.ts.map +1 -1
  39. package/dist/orchestration/reducer.d.ts +2 -2
  40. package/dist/orchestration/reducer.d.ts.map +1 -1
  41. package/dist/orchestration/reducer.js +2 -2
  42. package/dist/orchestration/reducer.js.map +1 -1
  43. package/dist/orchestration/runtimeAdapter.d.ts +3 -3
  44. package/dist/orchestration/runtimeAdapter.d.ts.map +1 -1
  45. package/dist/orchestration/scheduler.d.ts +2 -2
  46. package/dist/orchestration/scheduler.d.ts.map +1 -1
  47. package/dist/orchestration/types.d.ts +1 -1
  48. package/dist/orchestration/types.d.ts.map +1 -1
  49. package/dist/pipeline/ActorPipeline.d.ts +36 -9
  50. package/dist/pipeline/ActorPipeline.d.ts.map +1 -1
  51. package/dist/pipeline/ActorPipeline.js +26 -16
  52. package/dist/pipeline/ActorPipeline.js.map +1 -1
  53. package/dist/runtime/ActorRuntime.d.ts +2 -2
  54. package/dist/runtime/ActorRuntime.d.ts.map +1 -1
  55. package/dist/runtime/ActorRuntime.js +1 -1
  56. package/dist/runtime/ActorRuntime.js.map +1 -1
  57. package/dist-cjs/addressing.cjs +424 -0
  58. package/dist-cjs/core/ActorSystem.cjs +172 -0
  59. package/dist-cjs/core/types.cjs +10 -0
  60. package/dist-cjs/dispatch/ActorDispatchAdapter.cjs +125 -0
  61. package/dist-cjs/execution/commandDeque.cjs +430 -0
  62. package/dist-cjs/execution/dispatcher.cjs +79 -0
  63. package/dist-cjs/execution/index.cjs +24 -0
  64. package/dist-cjs/execution/stack.cjs +88 -0
  65. package/dist-cjs/index.cjs +77 -0
  66. package/dist-cjs/orchestration/index.cjs +19 -0
  67. package/dist-cjs/orchestration/presets/aiAgent.cjs +40 -0
  68. package/dist-cjs/orchestration/recovery.cjs +112 -0
  69. package/dist-cjs/orchestration/reducer.cjs +276 -0
  70. package/dist-cjs/orchestration/runtimeAdapter.cjs +14 -0
  71. package/dist-cjs/orchestration/scheduler.cjs +86 -0
  72. package/dist-cjs/orchestration/types.cjs +14 -0
  73. package/dist-cjs/package.json +3 -0
  74. package/dist-cjs/pipeline/ActorPipeline.cjs +44 -0
  75. package/dist-cjs/runtime/ActorRuntime.cjs +77 -0
  76. package/dist-cjs/runtime/completion.cjs +75 -0
  77. package/dist-cjs/runtime/indexing.cjs +34 -0
  78. package/dist-cjs/runtime/snapshot.cjs +14 -0
  79. package/package.json +9 -4
  80. package/src/addressing.ts +756 -0
  81. package/src/core/ActorSystem.ts +1 -1
  82. package/src/dispatch/ActorDispatchAdapter.ts +219 -48
  83. package/src/execution/commandDeque.ts +656 -0
  84. package/src/execution/dispatcher.ts +188 -0
  85. package/src/execution/index.ts +58 -0
  86. package/src/execution/stack.ts +130 -0
  87. package/src/index.ts +121 -16
  88. package/src/orchestration/index.ts +8 -8
  89. package/src/orchestration/presets/aiAgent.ts +2 -2
  90. package/src/orchestration/recovery.ts +2 -2
  91. package/src/orchestration/reducer.ts +3 -3
  92. package/src/orchestration/runtimeAdapter.ts +3 -3
  93. package/src/orchestration/scheduler.ts +2 -2
  94. package/src/orchestration/types.ts +1 -1
  95. package/src/pipeline/ActorPipeline.ts +104 -58
  96. package/src/runtime/ActorRuntime.ts +2 -2
@@ -1,28 +1,85 @@
1
1
  /**
2
2
  * depa-actor — Dispatch Bridge
3
3
  *
4
- * Optional bridge to depa-processor DispatchEngine.
5
- * Only this file imports from depa-processor concepts.
6
- * No hard dependencyuses structural typing.
4
+ * Drives the depa-processor `DispatchEngine` (all 7 strategies) from the actor
5
+ * side. The envelope DispatchRequest adaptation and the actor `tag` overlay
6
+ * live HERE, in depa-actor the generic `DispatchEngine` / `DispatchStrategyConfig`
7
+ * stay free of any actor (`envelope` / `tag` / `ActorSelf`) knowledge.
8
+ *
9
+ * Two orthogonal axes:
10
+ * 1. `tag` — actor's first-level route (which mailbox). Selecting a handler by
11
+ * tag is the actor system's job (`ActorDef.handlers[tag]`); a dispatch handler
12
+ * built here is slotted UNDER a tag, so tag selection happens upstream.
13
+ * `tag` is NOT a DispatchStrategyType — it is an orthogonal overlay dimension.
14
+ * 2. `strategy` — one of the 7 `DispatchStrategyType` values, used as the
15
+ * second-level resolution within the selected tag.
16
+ */
17
+ import { DispatchStrategyConfig, DispatchStrategyType } from 'depa-processor';
18
+ import type { MailboxSchema, ActorSelf, ActorEnvelope, ActorHandler } from '../core/types.js';
19
+ /**
20
+ * A resolved actor sub-handler: receives `(self, envelope)` and performs side
21
+ * effects (write state / send messages). This is the `TResult = void | Promise<void>`
22
+ * shape the underlying DispatchEngine resolves to.
7
23
  */
8
- import type { MailboxSchema, ActorSelf, ActorEnvelope, ActorHandler } from '../core/types';
24
+ export type ActorRouteHandler<TRuntime, TSchema extends MailboxSchema, TState> = (self: ActorSelf<TRuntime, TSchema, TState>, envelope: ActorEnvelope<TSchema>) => void | Promise<void>;
9
25
  /**
10
- * A dispatch route maps a tag to a dispatch key and handler.
11
- * This is a structural interface no dependency on depa-processor.
26
+ * Maps an envelope to the dispatch coordinate consumed by the selected strategy.
27
+ * Defaults are provided per strategy; override to route by payload fields, etc.
12
28
  */
13
- export interface DispatchRoute<TRuntime, TSchema extends MailboxSchema, TState> {
14
- /** Which tags this route handles */
15
- tags: (keyof TSchema & string)[];
16
- /** Resolve dispatch key from envelope */
17
- resolveKey: (envelope: ActorEnvelope<TSchema>) => string;
18
- /** Route table: dispatch key handler */
19
- routes: Record<string, (self: ActorSelf<TRuntime, TSchema, TState>, envelope: ActorEnvelope<TSchema>) => void | Promise<void>>;
20
- /** Fallback if no route matches */
21
- fallback?: (self: ActorSelf<TRuntime, TSchema, TState>, envelope: ActorEnvelope<TSchema>, key: string) => void | Promise<void>;
29
+ export interface DispatchKeyExtractors<TSchema extends MailboxSchema> {
30
+ /** ROUTE_KEY / ROUTE_KEY_TO_ENUM / COMMAND_TABLE — defaults to `envelope.tag`. */
31
+ routeKeyOf?: (envelope: ActorEnvelope<TSchema>) => string;
32
+ /** ENUM defaults to `envelope.tag`. */
33
+ enumOf?: (envelope: ActorEnvelope<TSchema>) => string | number;
34
+ /** CLASS / key-based strategies' input — defaults to `envelope.payload`. */
35
+ inputOf?: (envelope: ActorEnvelope<TSchema>) => unknown;
36
+ /** PATH / ACTION_PATH defaults to `envelope.tag`. */
37
+ pathOf?: (envelope: ActorEnvelope<TSchema>) => string;
38
+ /** ACTION_PATH action — defaults to `undefined`. */
39
+ actionOf?: (envelope: ActorEnvelope<TSchema>) => unknown;
22
40
  }
23
41
  /**
24
- * Creates an ActorHandler that routes envelopes through dispatch routes.
25
- * Falls back to `defaultHandler` for tags not covered by any route.
42
+ * Parameters for {@link createDispatchHandler}.
43
+ *
44
+ * `routes` is either:
45
+ * - a plain key → actor-sub-handler map (for the common key-based strategies
46
+ * CLASS-by-key is not applicable; use ROUTE_KEY / ENUM / COMMAND_TABLE), or
47
+ * - a fully-built `DispatchStrategyConfig<void | Promise<void>>` for advanced
48
+ * strategies (PATH / ACTION_PATH / CLASS / ROUTE_KEY_TO_ENUM) where the
49
+ * handler wiring is expressed in depa-processor terms.
50
+ *
51
+ * When a `DispatchStrategyConfig` is supplied, its handlers receive the raw
52
+ * dispatch `input` / `context` (already adapted from the envelope) and may
53
+ * close over `self` via the surrounding scope.
54
+ */
55
+ export interface CreateDispatchHandlerParams<TRuntime, TSchema extends MailboxSchema, TState> {
56
+ /** Which of the 7 strategies to use for second-level resolution. */
57
+ strategy: DispatchStrategyType;
58
+ /**
59
+ * Route table. For key-based strategies (ROUTE_KEY / ENUM / COMMAND_TABLE)
60
+ * pass a `Record<key, ActorRouteHandler>`. For advanced strategies, pass a
61
+ * prebuilt `DispatchStrategyConfig` whose `TResult = void | Promise<void>`.
62
+ */
63
+ routes: Record<string, ActorRouteHandler<TRuntime, TSchema, TState>> | DispatchStrategyConfig<void | Promise<void>>;
64
+ /** Optional fallback when the strategy does not resolve a handler. */
65
+ defaultHandler?: ActorHandler<TRuntime, TSchema, TState>;
66
+ /** Optional envelope → dispatch-coordinate extractors. */
67
+ extractors?: DispatchKeyExtractors<TSchema>;
68
+ }
69
+ /**
70
+ * Creates an ActorHandler that resolves an envelope to a sub-handler via one of
71
+ * the 7 depa-processor dispatch strategies (opt-in, per-handler — DX form C / B2).
72
+ *
73
+ * Object-param signature: `{ strategy, routes, defaultHandler?, extractors? }`.
74
+ *
75
+ * Composability:
76
+ * - slot the returned handler under a `tag` in `ActorDef.handlers` → `tag` overlay
77
+ * (first-level) + `strategy` (second-level), the two axes are orthogonal.
78
+ * - the resolved sub-handler may itself be a `createPipelineHandler(...)` result,
79
+ * so dispatch and pipeline nest freely.
80
+ *
81
+ * No declarative `ActorDef.dispatch` field and no global feature flag / enableXxx
82
+ * API exist — enabling rich dispatch is expressed purely by import + composition.
26
83
  */
27
- export declare function createDispatchHandler<TRuntime, TSchema extends MailboxSchema, TState>(routes: DispatchRoute<TRuntime, TSchema, TState>[], defaultHandler?: ActorHandler<TRuntime, TSchema, TState>): ActorHandler<TRuntime, TSchema, TState>;
84
+ export declare function createDispatchHandler<TRuntime, TSchema extends MailboxSchema, TState>(params: CreateDispatchHandlerParams<TRuntime, TSchema, TState>): ActorHandler<TRuntime, TSchema, TState>;
28
85
  //# sourceMappingURL=ActorDispatchAdapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActorDispatchAdapter.d.ts","sourceRoot":"","sources":["../../src/dispatch/ActorDispatchAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACb,YAAY,EACb,MAAM,eAAe,CAAC;AAIvB;;;GAGG;AACH,MAAM,WAAW,aAAa,CAC5B,QAAQ,EACR,OAAO,SAAS,aAAa,EAC7B,MAAM;IAEN,oCAAoC;IACpC,IAAI,EAAE,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC;IAEjC,yCAAyC;IACzC,UAAU,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC;IAEzD,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CACrB,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EAC1C,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,KAC7B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAE3B,mCAAmC;IACnC,QAAQ,CAAC,EAAE,CACT,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EAC1C,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAChC,GAAG,EAAE,MAAM,KACR,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAID;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EACR,OAAO,SAAS,aAAa,EAC7B,MAAM,EAEN,MAAM,EAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,EAClD,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,GACvD,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAwBzC"}
1
+ {"version":3,"file":"ActorDispatchAdapter.d.ts","sourceRoot":"","sources":["../../src/dispatch/ActorDispatchAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAEL,sBAAsB,EACtB,oBAAoB,EAQrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACb,YAAY,EACb,MAAM,kBAAkB,CAAC;AAI1B;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,CAC3B,QAAQ,EACR,OAAO,SAAS,aAAa,EAC7B,MAAM,IACJ,CACF,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,EAC1C,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,KAC7B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAI1B;;;GAGG;AACH,MAAM,WAAW,qBAAqB,CAAC,OAAO,SAAS,aAAa;IAClE,kFAAkF;IAClF,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC;IAC1D,yCAAyC;IACzC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,MAAM,GAAG,MAAM,CAAC;IAC/D,4EAA4E;IAC5E,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;IACxD,uDAAuD;IACvD,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC;IACtD,oDAAoD;IACpD,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;CAC1D;AAID;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,2BAA2B,CAC1C,QAAQ,EACR,OAAO,SAAS,aAAa,EAC7B,MAAM;IAEN,oEAAoE;IACpE,QAAQ,EAAE,oBAAoB,CAAC;IAE/B;;;;OAIG;IACH,MAAM,EACF,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,GAC5D,sBAAsB,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjD,sEAAsE;IACtE,cAAc,CAAC,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAEzD,0DAA0D;IAC1D,UAAU,CAAC,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAC;CAC7C;AAoGD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EACR,OAAO,SAAS,aAAa,EAC7B,MAAM,EAEN,MAAM,EAAE,2BAA2B,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,GAC7D,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAwBzC"}
@@ -1,36 +1,121 @@
1
1
  /**
2
2
  * depa-actor — Dispatch Bridge
3
3
  *
4
- * Optional bridge to depa-processor DispatchEngine.
5
- * Only this file imports from depa-processor concepts.
6
- * No hard dependencyuses structural typing.
4
+ * Drives the depa-processor `DispatchEngine` (all 7 strategies) from the actor
5
+ * side. The envelope DispatchRequest adaptation and the actor `tag` overlay
6
+ * live HERE, in depa-actor the generic `DispatchEngine` / `DispatchStrategyConfig`
7
+ * stay free of any actor (`envelope` / `tag` / `ActorSelf`) knowledge.
8
+ *
9
+ * Two orthogonal axes:
10
+ * 1. `tag` — actor's first-level route (which mailbox). Selecting a handler by
11
+ * tag is the actor system's job (`ActorDef.handlers[tag]`); a dispatch handler
12
+ * built here is slotted UNDER a tag, so tag selection happens upstream.
13
+ * `tag` is NOT a DispatchStrategyType — it is an orthogonal overlay dimension.
14
+ * 2. `strategy` — one of the 7 `DispatchStrategyType` values, used as the
15
+ * second-level resolution within the selected tag.
7
16
  */
8
- // ─── createDispatchHandler ───────────────────────────────────────────
17
+ import { DispatchEngine, DispatchStrategyConfig, DispatchStrategyType, createClassDispatchRequest, createRouteKeyDispatchRequest, createEnumDispatchRequest, createRouteKeyToEnumDispatchRequest, createCommandDispatchRequest, createPathDispatchRequest, createActionPathDispatchRequest, } from 'depa-processor';
18
+ // ─── Internal helpers ────────────────────────────────────────────────
19
+ function isStrategyConfig(routes) {
20
+ return routes instanceof DispatchStrategyConfig;
21
+ }
9
22
  /**
10
- * Creates an ActorHandler that routes envelopes through dispatch routes.
11
- * Falls back to `defaultHandler` for tags not covered by any route.
23
+ * Build a `DispatchStrategyConfig<void>` from a plain key handler map for the
24
+ * supported key-based strategies. The map values are pre-bound to `(self, envelope)`
25
+ * by capturing the current dispatch's `self` / `envelope` via a thunk.
12
26
  */
13
- export function createDispatchHandler(routes, defaultHandler) {
14
- // Build tag route index for O(1) lookup
15
- const tagIndex = new Map();
16
- for (const route of routes) {
17
- for (const tag of route.tags) {
18
- tagIndex.set(tag, route);
19
- }
27
+ function buildKeyBasedConfig(strategy, routes, self, envelope) {
28
+ const handlerMap = new Map();
29
+ for (const [key, handler] of Object.entries(routes)) {
30
+ handlerMap.set(key, () => handler(self, envelope));
31
+ }
32
+ switch (strategy) {
33
+ case DispatchStrategyType.ROUTE_KEY:
34
+ return DispatchStrategyConfig.forRouteKeyStrategy({
35
+ handlerMap: handlerMap,
36
+ });
37
+ case DispatchStrategyType.ENUM:
38
+ return DispatchStrategyConfig.forEnumStrategy({
39
+ handlerMap,
40
+ });
41
+ case DispatchStrategyType.COMMAND_TABLE:
42
+ return DispatchStrategyConfig.forCommandStrategy({
43
+ commandConverter: (command) => handlerMap.has(command) ? command : null,
44
+ handlerExtractor: (commandEnum) => handlerMap.get(commandEnum) ?? null,
45
+ });
46
+ default:
47
+ throw new Error(`createDispatchHandler: strategy ${strategy} requires a prebuilt ` +
48
+ `DispatchStrategyConfig in 'routes' (plain key→handler maps support ` +
49
+ `ROUTE_KEY / ENUM / COMMAND_TABLE only).`);
50
+ }
51
+ }
52
+ /** Build the strategy-appropriate DispatchRequest from the envelope. */
53
+ function buildRequest(strategy, envelope, extractors) {
54
+ const input = extractors?.inputOf ? extractors.inputOf(envelope) : envelope.payload;
55
+ const routeKey = extractors?.routeKeyOf
56
+ ? extractors.routeKeyOf(envelope)
57
+ : envelope.tag;
58
+ const path = extractors?.pathOf ? extractors.pathOf(envelope) : envelope.tag;
59
+ switch (strategy) {
60
+ case DispatchStrategyType.CLASS:
61
+ return createClassDispatchRequest(input);
62
+ case DispatchStrategyType.ROUTE_KEY:
63
+ return createRouteKeyDispatchRequest(routeKey, input, false);
64
+ case DispatchStrategyType.ENUM:
65
+ return createEnumDispatchRequest(extractors?.enumOf ? extractors.enumOf(envelope) : envelope.tag, input);
66
+ case DispatchStrategyType.ROUTE_KEY_TO_ENUM:
67
+ return createRouteKeyToEnumDispatchRequest(routeKey, input);
68
+ case DispatchStrategyType.COMMAND_TABLE:
69
+ return createCommandDispatchRequest(routeKey, input);
70
+ case DispatchStrategyType.PATH:
71
+ return createPathDispatchRequest({
72
+ runtime: undefined,
73
+ request: input,
74
+ path,
75
+ });
76
+ case DispatchStrategyType.ACTION_PATH:
77
+ return createActionPathDispatchRequest({
78
+ runtime: undefined,
79
+ request: input,
80
+ action: extractors?.actionOf ? extractors.actionOf(envelope) : undefined,
81
+ path,
82
+ });
83
+ default:
84
+ throw new Error(`createDispatchHandler: unknown strategy ${String(strategy)}`);
20
85
  }
86
+ }
87
+ // ─── createDispatchHandler ───────────────────────────────────────────
88
+ /**
89
+ * Creates an ActorHandler that resolves an envelope to a sub-handler via one of
90
+ * the 7 depa-processor dispatch strategies (opt-in, per-handler — DX form C / B2).
91
+ *
92
+ * Object-param signature: `{ strategy, routes, defaultHandler?, extractors? }`.
93
+ *
94
+ * Composability:
95
+ * - slot the returned handler under a `tag` in `ActorDef.handlers` → `tag` overlay
96
+ * (first-level) + `strategy` (second-level), the two axes are orthogonal.
97
+ * - the resolved sub-handler may itself be a `createPipelineHandler(...)` result,
98
+ * so dispatch and pipeline nest freely.
99
+ *
100
+ * No declarative `ActorDef.dispatch` field and no global feature flag / enableXxx
101
+ * API exist — enabling rich dispatch is expressed purely by import + composition.
102
+ */
103
+ export function createDispatchHandler(params) {
104
+ const { strategy, routes, defaultHandler, extractors } = params;
21
105
  return async (self, envelope) => {
22
- const route = tagIndex.get(envelope.tag);
23
- if (route) {
24
- const key = route.resolveKey(envelope);
25
- const handler = route.routes[key];
26
- if (handler) {
27
- await handler(self, envelope);
28
- }
29
- else if (route.fallback) {
30
- await route.fallback(self, envelope, key);
31
- }
106
+ const config = isStrategyConfig(routes)
107
+ ? routes
108
+ : buildKeyBasedConfig(strategy, routes, self, envelope);
109
+ const engine = new DispatchEngine();
110
+ engine.registerStrategy(config);
111
+ const request = buildRequest(strategy, envelope, extractors);
112
+ const result = await engine.dispatch(request);
113
+ if (result.isHandled()) {
114
+ // Await the sub-handler's (possibly async) side effect.
115
+ await result.getResult();
116
+ return;
32
117
  }
33
- else if (defaultHandler) {
118
+ if (defaultHandler) {
34
119
  await defaultHandler(self, envelope);
35
120
  }
36
121
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ActorDispatchAdapter.js","sourceRoot":"","sources":["../../src/dispatch/ActorDispatchAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAwCH,wEAAwE;AAExE;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAKnC,MAAkD,EAClD,cAAwD;IAExD,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoD,CAAC;IAC7E,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC7B,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEzC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAChC,CAAC;iBAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC1B,MAAM,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;aAAM,IAAI,cAAc,EAAE,CAAC;YAC1B,MAAM,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ActorDispatchAdapter.js","sourceRoot":"","sources":["../../src/dispatch/ActorDispatchAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ export type CommandDequeId = string;
2
+ export interface CommandDequeItem<TCommand> {
3
+ id: string;
4
+ command: TCommand;
5
+ insertedAt: number;
6
+ order: number;
7
+ }
8
+ export interface CommandDequeState<TCommand> {
9
+ id: CommandDequeId;
10
+ lane?: string;
11
+ priority: number;
12
+ items: CommandDequeItem<TCommand>[];
13
+ }
14
+ export interface CommandDequeGroupState<TCommand> {
15
+ deques: Record<CommandDequeId, CommandDequeState<TCommand>>;
16
+ sequence: number;
17
+ }
18
+ export interface CommandDequeOptions {
19
+ id?: CommandDequeId;
20
+ lane?: string;
21
+ priority?: number;
22
+ now?: () => number;
23
+ idFactory?: (args: {
24
+ sequence: number;
25
+ dequeId: CommandDequeId;
26
+ }) => string;
27
+ }
28
+ export interface PushCommandOptions {
29
+ id?: string;
30
+ insertedAt?: number;
31
+ }
32
+ export interface CommandDeque<TCommand> {
33
+ readonly id: CommandDequeId;
34
+ pushBack(command: TCommand, options?: PushCommandOptions): CommandDequeItem<TCommand>;
35
+ pushFront(command: TCommand, options?: PushCommandOptions): CommandDequeItem<TCommand>;
36
+ peekNext(): CommandDequeItem<TCommand> | undefined;
37
+ popNext(): CommandDequeItem<TCommand> | undefined;
38
+ peekFront(): CommandDequeItem<TCommand> | undefined;
39
+ peekBack(): CommandDequeItem<TCommand> | undefined;
40
+ popFront(): CommandDequeItem<TCommand> | undefined;
41
+ popBack(): CommandDequeItem<TCommand> | undefined;
42
+ listItems(): CommandDequeItem<TCommand>[];
43
+ getItem(id: string): CommandDequeItem<TCommand> | undefined;
44
+ nextAfter(itemId: string): CommandDequeItem<TCommand> | undefined;
45
+ prevBefore(itemId: string): CommandDequeItem<TCommand> | undefined;
46
+ drain(): CommandDequeItem<TCommand>[];
47
+ drainWhere(predicate: (item: CommandDequeItem<TCommand>) => boolean): CommandDequeItem<TCommand>[];
48
+ hasPending(): boolean;
49
+ snapshot(): CommandDequeState<TCommand>;
50
+ }
51
+ export interface CommandDequeSelection {
52
+ dequeId: CommandDequeId;
53
+ itemId: string;
54
+ }
55
+ export type CommandDequeSelector<TCommand, TRuntimeState> = (args: {
56
+ group: CommandDequeGroupState<TCommand>;
57
+ runtimeState: TRuntimeState;
58
+ }) => CommandDequeSelection | undefined;
59
+ export interface SelectedCommandDequeItem<TCommand> extends CommandDequeSelection {
60
+ deque: CommandDequeState<TCommand>;
61
+ item: CommandDequeItem<TCommand>;
62
+ }
63
+ export interface CommandDequeDefinition {
64
+ id: CommandDequeId;
65
+ lane?: string;
66
+ priority: number;
67
+ }
68
+ export interface CommandDequeGroupOptions<TCommand, TRuntimeState> {
69
+ deques?: CommandDequeDefinition[];
70
+ now?: () => number;
71
+ idFactory?: (args: {
72
+ sequence: number;
73
+ dequeId: CommandDequeId;
74
+ }) => string;
75
+ selector?: CommandDequeSelector<TCommand, TRuntimeState>;
76
+ }
77
+ export interface PushCommandToDequeOptions extends PushCommandOptions {
78
+ dequeId: CommandDequeId;
79
+ }
80
+ export interface CommandDequeGroup<TCommand, TRuntimeState = unknown> {
81
+ getDeque(dequeId: CommandDequeId): CommandDeque<TCommand>;
82
+ ensureDeque(definition: CommandDequeDefinition): CommandDeque<TCommand>;
83
+ pushBack(command: TCommand, options: PushCommandToDequeOptions): CommandDequeItem<TCommand>;
84
+ pushFront(command: TCommand, options: PushCommandToDequeOptions): CommandDequeItem<TCommand>;
85
+ selectNext(runtimeState: TRuntimeState, selector?: CommandDequeSelector<TCommand, TRuntimeState>): SelectedCommandDequeItem<TCommand> | undefined;
86
+ popSelected(selection: CommandDequeSelection): SelectedCommandDequeItem<TCommand> | undefined;
87
+ takeNext(runtimeState: TRuntimeState, selector?: CommandDequeSelector<TCommand, TRuntimeState>): SelectedCommandDequeItem<TCommand> | undefined;
88
+ drainDeque(dequeId: CommandDequeId): CommandDequeItem<TCommand>[];
89
+ drainWhereDeque(dequeId: CommandDequeId, predicate: (item: CommandDequeItem<TCommand>) => boolean): CommandDequeItem<TCommand>[];
90
+ listDequeIds(): CommandDequeId[];
91
+ snapshot(): CommandDequeGroupState<TCommand>;
92
+ }
93
+ export interface CommandDequeGroupMutationResult<TCommand> {
94
+ state: CommandDequeGroupState<TCommand>;
95
+ item?: CommandDequeItem<TCommand>;
96
+ items?: CommandDequeItem<TCommand>[];
97
+ selection?: SelectedCommandDequeItem<TCommand>;
98
+ }
99
+ export declare function defaultCommandDequeSelector<TCommand, TRuntimeState>({ group, }: {
100
+ group: CommandDequeGroupState<TCommand>;
101
+ runtimeState: TRuntimeState;
102
+ }): CommandDequeSelection | undefined;
103
+ export declare function createCommandDeque<TCommand>(options?: CommandDequeOptions, state?: CommandDequeState<TCommand>): CommandDeque<TCommand>;
104
+ export declare function createCommandDequeGroup<TCommand, TRuntimeState = unknown>(options?: CommandDequeGroupOptions<TCommand, TRuntimeState>, state?: CommandDequeGroupState<TCommand>): CommandDequeGroup<TCommand, TRuntimeState>;
105
+ export interface CommandDequeMutationResult<TCommand> {
106
+ state: CommandDequeState<TCommand>;
107
+ item?: CommandDequeItem<TCommand>;
108
+ items?: CommandDequeItem<TCommand>[];
109
+ }
110
+ export declare function pushBackCommand<TCommand>(state: CommandDequeState<TCommand>, command: TCommand, options?: CommandDequeOptions & PushCommandOptions): CommandDequeMutationResult<TCommand>;
111
+ export declare function pushFrontCommand<TCommand>(state: CommandDequeState<TCommand>, command: TCommand, options?: CommandDequeOptions & PushCommandOptions): CommandDequeMutationResult<TCommand>;
112
+ export declare function popNextCommand<TCommand>(state: CommandDequeState<TCommand>): CommandDequeMutationResult<TCommand>;
113
+ export declare function popFrontCommand<TCommand>(state: CommandDequeState<TCommand>): CommandDequeMutationResult<TCommand>;
114
+ export declare function popBackCommand<TCommand>(state: CommandDequeState<TCommand>): CommandDequeMutationResult<TCommand>;
115
+ export declare function pushBackCommandToGroup<TCommand, TRuntimeState = unknown>(state: CommandDequeGroupState<TCommand>, command: TCommand, options: CommandDequeGroupOptions<TCommand, TRuntimeState> & PushCommandToDequeOptions): CommandDequeGroupMutationResult<TCommand>;
116
+ export declare function pushFrontCommandToGroup<TCommand, TRuntimeState = unknown>(state: CommandDequeGroupState<TCommand>, command: TCommand, options: CommandDequeGroupOptions<TCommand, TRuntimeState> & PushCommandToDequeOptions): CommandDequeGroupMutationResult<TCommand>;
117
+ export declare function popSelectedCommandFromGroup<TCommand, TRuntimeState = unknown>(state: CommandDequeGroupState<TCommand>, selection: CommandDequeSelection, options?: CommandDequeGroupOptions<TCommand, TRuntimeState>): CommandDequeGroupMutationResult<TCommand>;
118
+ export declare function takeNextCommandFromGroup<TCommand, TRuntimeState = unknown>(state: CommandDequeGroupState<TCommand>, runtimeState: TRuntimeState, options?: CommandDequeGroupOptions<TCommand, TRuntimeState>): CommandDequeGroupMutationResult<TCommand>;
119
+ export declare function drainCommandDequeFromGroup<TCommand, TRuntimeState = unknown>(state: CommandDequeGroupState<TCommand>, dequeId: CommandDequeId, options?: CommandDequeGroupOptions<TCommand, TRuntimeState>): CommandDequeGroupMutationResult<TCommand>;
120
+ export declare function drainWhereCommandDequeFromGroup<TCommand, TRuntimeState = unknown>(state: CommandDequeGroupState<TCommand>, dequeId: CommandDequeId, predicate: (item: CommandDequeItem<TCommand>) => boolean, options?: CommandDequeGroupOptions<TCommand, TRuntimeState>): CommandDequeGroupMutationResult<TCommand>;
121
+ //# sourceMappingURL=commandDeque.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commandDeque.d.ts","sourceRoot":"","sources":["../../src/execution/commandDeque.ts"],"names":[],"mappings":"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"}