@cnstra/core 1.4.0 → 1.6.0

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 (37) hide show
  1. package/README.md +112 -36
  2. package/dist/CNS.d.ts +18 -8
  3. package/dist/CNS.d.ts.map +1 -1
  4. package/dist/CNSCollateral.d.ts +5 -5
  5. package/dist/CNSFunctionalQueue.d.ts +4 -4
  6. package/dist/CNSFunctionalQueue.d.ts.map +1 -1
  7. package/dist/CNSStimulation.d.ts +14 -10
  8. package/dist/CNSStimulation.d.ts.map +1 -1
  9. package/dist/factory/index.d.ts +14 -10
  10. package/dist/factory/index.d.ts.map +1 -1
  11. package/dist/index.cjs +214 -76
  12. package/dist/index.cjs.map +1 -1
  13. package/dist/index.d.ts +4 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +214 -77
  16. package/dist/index.js.map +1 -1
  17. package/dist/interfaces/ICNS.d.ts +11 -3
  18. package/dist/interfaces/ICNS.d.ts.map +1 -1
  19. package/dist/interfaces/ICNSCollateral.d.ts +3 -3
  20. package/dist/types/TCNSAxon.d.ts +2 -2
  21. package/dist/types/TCNSDendrite.d.ts +6 -4
  22. package/dist/types/TCNSDendrite.d.ts.map +1 -1
  23. package/dist/types/TCNSLocalContextValueStore.d.ts +1 -0
  24. package/dist/types/TCNSLocalContextValueStore.d.ts.map +1 -1
  25. package/dist/types/TCNSNeuron.d.ts +4 -2
  26. package/dist/types/TCNSNeuron.d.ts.map +1 -1
  27. package/dist/types/TCNSNeuronResponseReturn.d.ts +1 -1
  28. package/dist/types/TCNSNeuronResponseReturn.d.ts.map +1 -1
  29. package/dist/types/TCNSSerializedSignal.d.ts +10 -0
  30. package/dist/types/TCNSSerializedSignal.d.ts.map +1 -0
  31. package/dist/types/TCNSSignal.d.ts +2 -3
  32. package/dist/types/TCNSSignal.d.ts.map +1 -1
  33. package/dist/types/TCNSStimulationOptions.d.ts +3 -3
  34. package/dist/types/TCNSStimulationOptions.d.ts.map +1 -1
  35. package/dist/types/TCNSStimulationQueueItem.d.ts +2 -2
  36. package/dist/types/TCNSStimulationResponse.d.ts +3 -3
  37. package/package.json +1 -1
package/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  **Graph-routed, type-safe orchestration for reactive apps — no global event bus.**
4
4
 
5
+ 📚 **[Full Documentation](https://cnstra.org/)** | [Quick Start](https://cnstra.org/docs/core/quick-start) | [API Reference](https://cnstra.org/docs/core/api) | [Recipes](https://cnstra.org/docs/recipes/cancel)
6
+
5
7
  ## 🧠 What is CNStra?
6
8
 
7
9
  **CNStra (Central Nervous System Orchestrator)** models your app as a **typed neuron graph**.
@@ -9,16 +11,18 @@ You explicitly start a run with `cns.stimulate(...)`; CNStra then performs a **d
9
11
 
10
12
  > **Zero dependencies:** CNS has no third-party dependencies, making it suitable for any JavaScript/TypeScript environment - browsers, Node.js, serverless, edge functions, React Native, or embedded systems.
11
13
 
12
- > **Not pub/sub:** there are no ambient listeners or global `emit`. Only the **signal you return** from a dendrite continues the traversal; returning `null`/`undefined` ends that branch. Hop limits guard against cycles.
14
+ **No pub/sub:** there are no ambient listeners or global `emit`. Only the **signal you return** from a dendrite continues the traversal; returning `null`/`undefined` ends that branch. Hop limits guard against cycles.
15
+
16
+ We follow the **IERG approach — Inverted Explicit Reactive Graph**. You explicitly stimulate the graph; reactions are local and deterministic; no background listeners or buses exist.
13
17
 
14
18
  ## 💡 Why CNStra
15
19
 
16
- We follow the ERG approach (Event → Reaction → Graph), not a raw Flux/event-bus.
20
+ IERG is our inverted control flow: you start the run, we walk the reaction graph explicitly. This is not Flux and not an event bus.
17
21
 
18
22
  - **Deterministic routing**: signals are delivered along an explicit neuron graph, not broadcast to whoever “happens to listen”.
19
23
  - **Readable, reliable flows**: each step is local and typed; branches are explicit, so debugging feels like reading a storyboard, not a log stream.
20
24
  - **Backpressure & concurrency**: built‑in per‑stimulation and per‑neuron concurrency limits keep workloads controlled without custom plumbing.
21
- - **Saga‑grade orchestration**: ERG already models long‑running, multi‑step reactions with retries/cancellation hooks (abort), so you rarely need to hand‑roll “sagas”.
25
+ - **Saga‑grade orchestration**: IERG already models long‑running, multi‑step reactions with retries/cancellation hooks (abort), so you rarely need to hand‑roll “sagas”.
22
26
  - **Safer than ad‑hoc events**: no hidden global listeners, no accidental fan‑out; every continuation must be returned explicitly.
23
27
 
24
28
  ## 🏗️ Core Model
@@ -108,6 +112,12 @@ const myNeuron = neuron('my-neuron', {
108
112
 
109
113
  Adds a dendrite (input receptor) to a neuron. Returns the neuron for chaining.
110
114
 
115
+ The `response` function can return:
116
+ - A single signal: `axon.output.createSignal(data)`
117
+ - An array of signals: `[axon.output1.createSignal(data1), axon.output2.createSignal(data2)]`
118
+ - A Promise of either
119
+ - `undefined`/`void` to end processing
120
+
111
121
  ```typescript
112
122
  myNeuron
113
123
  .dendrite({
@@ -117,6 +127,8 @@ myNeuron
117
127
  if (ctx.abortSignal?.aborted) return; // graceful cancel
118
128
  const prev = ctx.get();
119
129
  ctx.set({ ...prev, handled: true });
130
+
131
+ // Return single signal or array of signals
120
132
  return axon.output.createSignal(result);
121
133
  }
122
134
  });
@@ -187,20 +199,27 @@ const unsubscribe = cns.addResponseListener(r => {
187
199
 
188
200
  #### `stimulate()` Method
189
201
  ```typescript
190
- cns.stimulate(signal, options?)
202
+ cns.stimulate(signal | signal[], options?)
191
203
  ```
192
204
 
193
205
  **Parameters:**
194
- - `signal`: A signal created by `collateral.createSignal(payload)`
206
+ - `signal`: A signal or array of signals created by `collateral.createSignal(payload)`
195
207
  - `options`: Optional stimulation configuration
196
208
 
197
209
  **Returns:** `Promise<void>` that resolves when stimulation completes
198
210
 
199
211
  **Example:**
200
212
  ```typescript
213
+ // Single signal
201
214
  await cns.stimulate(
202
215
  userCreated.createSignal({ id: '123', name: 'John' })
203
216
  );
217
+
218
+ // Multiple signals at once
219
+ await cns.stimulate([
220
+ userCreated.createSignal({ id: '123', name: 'John' }),
221
+ userCreated.createSignal({ id: '456', name: 'Jane' })
222
+ ]);
204
223
  ```
205
224
 
206
225
  ## ⚙️ Stimulation Options
@@ -265,12 +284,12 @@ await cns.stimulate(signal, {
265
284
  });
266
285
  ```
267
286
 
268
- ### `allowType?: (collateralId: string) => boolean`
269
- Filter which collateral types can be processed.
287
+ ### `allowName?: (collateralName: string) => boolean`
288
+ Filter which collateral names can be processed.
270
289
 
271
290
  ```typescript
272
291
  await cns.stimulate(signal, {
273
- allowType: (type) => type.startsWith('user:') // Only process user-related signals
292
+ allowName: (name) => name.startsWith('user:') // Only process user-related signals
274
293
  });
275
294
  ```
276
295
 
@@ -338,33 +357,6 @@ await cns.stimulate(input.createSignal({ value: 5 }));
338
357
  // Flows: input(5) → middle(10) → output("Final: 10")
339
358
  ```
340
359
 
341
- ### Fan-out Processing
342
-
343
- ```typescript
344
- const trigger = collateral<{ data: string }>('trigger');
345
- const branch1 = collateral<{ result: string }>('branch1');
346
- const branch2 = collateral<{ result: string }>('branch2');
347
-
348
- const processor1 = neuron('proc1', { branch1 }).dendrite({
349
- collateral: trigger,
350
- response: (payload, axon) => {
351
- return axon.branch1.createSignal({ result: `A-${payload.data}` });
352
- }
353
- });
354
-
355
- const processor2 = neuron('proc2', { branch2 }).dendrite({
356
- collateral: trigger,
357
- response: (payload, axon) => {
358
- return axon.branch2.createSignal({ result: `B-${payload.data}` });
359
- }
360
- });
361
-
362
- const cns = new CNS([processor1, processor2]);
363
-
364
- await cns.stimulate(trigger.createSignal({ data: 'test' }));
365
- // Flows: trigger("test") → [branch1("A-test"), branch2("B-test")]
366
- ```
367
-
368
360
  ### Context-Aware Processing
369
361
 
370
362
  ```typescript
@@ -393,6 +385,88 @@ await cns.stimulate(input.createSignal({ increment: 5 })); // count: 5
393
385
  await cns.stimulate(input.createSignal({ increment: 3 })); // count: 8 (separate context)
394
386
  ```
395
387
 
388
+ ### Multiple Signals (Fan-out Pattern)
389
+
390
+ Neurons can return arrays of signals for parallel processing:
391
+
392
+ ```typescript
393
+ const orderPlaced = collateral<{ orderId: string; items: string[] }>('order:placed');
394
+ const updateInventory = collateral<{ orderId: string; item: string }>('update:inventory');
395
+ const sendEmail = collateral<{ orderId: string }>('send:email');
396
+ const logAudit = collateral<{ orderId: string }>('log:audit');
397
+
398
+ const orderProcessor = neuron('order-processor', {
399
+ updateInventory,
400
+ sendEmail,
401
+ logAudit
402
+ }).dendrite({
403
+ collateral: orderPlaced,
404
+ response: (payload, axon) => {
405
+ // Return array of signals - each will be processed independently
406
+ return [
407
+ // Create signal for each item
408
+ ...payload.items.map(item =>
409
+ axon.updateInventory.createSignal({ orderId: payload.orderId, item })
410
+ ),
411
+ // Also send confirmation email
412
+ axon.sendEmail.createSignal({ orderId: payload.orderId }),
413
+ // And log the action
414
+ axon.logAudit.createSignal({ orderId: payload.orderId })
415
+ ];
416
+ }
417
+ });
418
+
419
+ // Downstream neurons process each signal independently
420
+ const inventoryService = neuron('inventory-service', {}).dendrite({
421
+ collateral: updateInventory,
422
+ response: (payload) => {
423
+ console.log(`Updating inventory for ${payload.item}`);
424
+ // Each item gets its own execution
425
+ }
426
+ });
427
+
428
+ const cns = new CNS([orderProcessor, inventoryService /* ... */]);
429
+
430
+ // Single order triggers multiple parallel operations
431
+ await cns.stimulate(
432
+ orderPlaced.createSignal({ orderId: 'ORD-001', items: ['A', 'B', 'C'] })
433
+ );
434
+ // Flows: orderPlaced → [inventory(A), inventory(B), inventory(C), email, audit]
435
+ ```
436
+
437
+ **Conditional Arrays:**
438
+ ```typescript
439
+ const validator = neuron('validator', { success, error, audit }).dendrite({
440
+ collateral: input,
441
+ response: (payload, axon) => {
442
+ const signals = [];
443
+
444
+ // Conditionally add signals
445
+ if (isValid(payload.data)) {
446
+ signals.push(axon.success.createSignal({ validated: payload.data }));
447
+ } else {
448
+ signals.push(axon.error.createSignal({ error: 'Invalid' }));
449
+ }
450
+
451
+ // Always audit
452
+ signals.push(axon.audit.createSignal({ attempted: true }));
453
+
454
+ return signals; // Return empty array to emit nothing
455
+ }
456
+ });
457
+ ```
458
+
459
+ **Starting with Multiple Signals:**
460
+ ```typescript
461
+ // Process multiple orders in parallel
462
+ await cns.stimulate([
463
+ orderPlaced.createSignal({ orderId: 'ORD-001', items: ['X'] }),
464
+ orderPlaced.createSignal({ orderId: 'ORD-002', items: ['Y', 'Z'] })
465
+ ]);
466
+ ```
467
+
468
+ See [Multiple Signals Recipe](https://cnstra.org/docs/recipes/multiple-signals) for more patterns and best practices.
469
+
396
470
  ## 🧠 Memory & Performance
397
471
 
398
472
  ### Memory-Efficient Design
@@ -413,6 +487,8 @@ await cns.stimulate(input.createSignal({ increment: 3 })); // count: 8 (separate
413
487
  - Use synchronous responses when possible
414
488
  - Set reasonable `maxNeuronHops` limits
415
489
  - Implement proper error handling in `onResponse`
490
+ - Use array returns for genuine fan-out patterns, not just convenience
491
+ - Consider concurrency limits when returning many signals
416
492
 
417
493
  ## 🎯 Common Use Cases
418
494
 
@@ -446,7 +522,7 @@ const cns = new CNS([validator, handler]);
446
522
 
447
523
  ### Event Sourcing
448
524
  ```typescript
449
- const eventReceived = collateral<{ type: string; data: any }>('event:received');
525
+ const eventReceived = collateral<{ name: string; data: any }>('event:received');
450
526
  const eventStored = collateral<{ eventId: string }>('event:stored');
451
527
  const stateUpdated = collateral<{ aggregateId: string }>('state:updated');
452
528
 
package/dist/CNS.d.ts CHANGED
@@ -4,17 +4,22 @@ import { ICNS } from './interfaces/ICNS';
4
4
  import { TCNSSubscriber } from './types/TCNSSubscriber';
5
5
  import { TCNSOptions } from './types/TCNSOptions';
6
6
  import { TCNSStimulationOptions } from './types/TCNSStimulationOptions';
7
+ import { CNSCollateral } from './CNSCollateral';
7
8
  import { TCNSSignal } from './types/TCNSSignal';
8
9
  import { CNSInstanceNeuronQueue } from './CNSInstanceNeuronQueue';
9
- export declare class CNS<TCollateralType extends string, TNeuronName extends string, TNeuron extends TCNSNeuron<any, TNeuronName, any, any, any, any, any>, TDendrite extends TCNSDendrite<any, any, any, any, any, any>> implements ICNS<TNeuron, TDendrite> {
10
+ import { TCNSStimulationResponse } from './types/TCNSStimulationResponse';
11
+ export declare class CNS<TCollateralName extends string, TNeuronName extends string, TNeuron extends TCNSNeuron<any, TNeuronName, any, any, any, any, any>, TDendrite extends TCNSDendrite<any, any, any, any, any, any>> implements ICNS<TNeuron, TDendrite> {
10
12
  protected readonly neurons: TNeuron[];
11
13
  readonly options?: TCNSOptions | undefined;
12
14
  /**
13
- * Fast lookup: collateralId -> list of (neuron, dendrite) subscribers.
15
+ * Fast lookup: collateralName -> list of (neuron, dendrite) subscribers.
14
16
  * Built once at construction time.
15
17
  */
16
18
  private subIndex;
17
- private parentNeuronByCollateralId;
19
+ private neuronIndex;
20
+ private dendriteIndex;
21
+ private collateralIndex;
22
+ private parentNeuronByCollateralName;
18
23
  /**
19
24
  * Strongly Connected Components of the neuron graph.
20
25
  * Each component is a set of neuron IDs that can reach each other.
@@ -55,8 +60,8 @@ export declare class CNS<TCollateralType extends string, TNeuronName extends str
55
60
  * Throws aggregated error if violations are found.
56
61
  */
57
62
  private validateUniqueIdentifiers;
58
- addResponseListener(listener: (response: any) => void): () => void;
59
- wrapOnResponse<T>(local?: (response: T) => void): (response: T) => void;
63
+ addResponseListener(listener: <TInputPayload, TOutputPayload>(response: TCNSStimulationResponse<TCollateralName, TInputPayload, TOutputPayload>) => void | Promise<void>): () => void;
64
+ wrapOnResponse<T>(local?: (response: T) => void | Promise<void>): (response: T) => void | Promise<void>;
60
65
  protected runWithNeuronConcurrency(neuron: TNeuron, fn: () => (() => void) | Promise<() => void>): Promise<void>;
61
66
  private buildIndexes;
62
67
  /**
@@ -95,8 +100,13 @@ export declare class CNS<TCollateralType extends string, TNeuronName extends str
95
100
  * This is the core logic for safe context cleanup.
96
101
  */
97
102
  canNeuronBeGuaranteedDone(neuronName: string, activeSccCounts: Map<number, number>): boolean;
98
- getParentNeuronByCollateralId(collateralType: TCollateralType): TNeuron | undefined;
99
- getSubscribers(collateralType: TCollateralType): TCNSSubscriber<TNeuron, TDendrite>[];
100
- stimulate<TInputPayload extends TOutputPayload, TOutputPayload>(signal: TCNSSignal<TCollateralType, TInputPayload>, options?: TCNSStimulationOptions<TCollateralType, TInputPayload, TOutputPayload>): void;
103
+ getParentNeuronByCollateralName(collateralName: TCollateralName): TNeuron | undefined;
104
+ getDendrites(): TDendrite[];
105
+ getCollaterals(): CNSCollateral<TCollateralName, unknown>[];
106
+ getNeurons(): TNeuron[];
107
+ getCollateralByName<TName extends string = string>(collateralName: TName): CNSCollateral<TName, unknown> | undefined;
108
+ getNeuronByName<TName extends string = string>(neuronName: TName): TNeuron | undefined;
109
+ getSubscribers(collateralName: TCollateralName): TCNSSubscriber<TNeuron, TDendrite>[];
110
+ stimulate<TInputPayload extends TOutputPayload, TOutputPayload>(signalOrSignals: TCNSSignal<TCollateralName, TInputPayload> | TCNSSignal<TCollateralName, TInputPayload>[], options?: TCNSStimulationOptions<TCollateralName, TInputPayload, TOutputPayload>): Promise<void>;
101
111
  }
102
112
  //# sourceMappingURL=CNS.d.ts.map
package/dist/CNS.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"CNS.d.ts","sourceRoot":"","sources":["../src/CNS.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CNS.d.ts","sourceRoot":"","sources":["../src/CNS.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { TCNSSignal } from './types/TCNSSignal';
2
2
  import { ICNSCollateral } from './interfaces/ICNSCollateral';
3
- export declare class CNSCollateral<TType extends string, TPayload> implements ICNSCollateral<TType, TPayload> {
4
- readonly type: TType;
5
- constructor(type: TType);
6
- createSignal(): TCNSSignal<TType, TPayload>;
7
- createSignal(payload: TPayload): TCNSSignal<TType, TPayload>;
3
+ export declare class CNSCollateral<TName extends string, TPayload> implements ICNSCollateral<TName, TPayload> {
4
+ readonly name: TName;
5
+ constructor(name: TName);
6
+ createSignal(): TCNSSignal<TName, TPayload>;
7
+ createSignal(payload: TPayload): TCNSSignal<TName, TPayload>;
8
8
  }
9
9
  //# sourceMappingURL=CNSCollateral.d.ts.map
@@ -1,7 +1,7 @@
1
- import { TCNSStimulationQueueItem } from './types/TCNSStimulationQueueItem';
1
+ import { TCNSSerializedQueueItem } from './types/TCNSSerializedSignal';
2
2
  import { TCNSNeuron } from './types/TCNSNeuron';
3
3
  import { TCNSDendrite } from './types/TCNSDendrite';
4
- export declare class CNSFunctionalQueue<TCollateralType extends string, TNeuronName extends string, TNeuron extends TCNSNeuron<any, TNeuronName, TCollateralType, any, any, any, any>, TDendrite extends TCNSDendrite<any, any, any, any, any, any>> {
4
+ export declare class CNSFunctionalQueue<TCollateralName extends string, TNeuronName extends string, TNeuron extends TCNSNeuron<any, TNeuronName, TCollateralName, any, any, any, any>, TDendrite extends TCNSDendrite<any, any, any, any, any, any>> {
5
5
  private readonly processor;
6
6
  protected readonly concurrency?: number | undefined;
7
7
  protected readonly abortSignal?: AbortSignal | undefined;
@@ -13,13 +13,13 @@ export declare class CNSFunctionalQueue<TCollateralType extends string, TNeuronN
13
13
  protected activeOperations: number;
14
14
  private pumping;
15
15
  private needsPump;
16
- constructor(processor: (item: TCNSStimulationQueueItem<TCollateralType, TNeuronName, TNeuron, TDendrite>) => (() => void) | Promise<() => void>, concurrency?: number | undefined, abortSignal?: AbortSignal | undefined, initialCapacity?: number);
16
+ constructor(processor: (item: TCNSSerializedQueueItem<TCollateralName, TNeuronName>) => (() => void) | Promise<() => void>, concurrency?: number | undefined, abortSignal?: AbortSignal | undefined, initialCapacity?: number);
17
17
  protected get canStartOperation(): boolean;
18
18
  private resize;
19
19
  private dequeue;
20
20
  private enqueueItem;
21
21
  protected pump(): void;
22
- enqueue(x: TCNSStimulationQueueItem<TCollateralType, TNeuronName, TNeuron, TDendrite>): void;
22
+ enqueue(x: TCNSSerializedQueueItem<TCollateralName, TNeuronName>): void;
23
23
  get length(): number;
24
24
  getActiveOperationsCount(): number;
25
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CNSFunctionalQueue.d.ts","sourceRoot":"","sources":["../src/CNSFunctionalQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,qBAAa,kBAAkB,CAC3B,eAAe,SAAS,MAAM,EAC9B,WAAW,SAAS,MAAM,EAC1B,OAAO,SAAS,UAAU,CACtB,GAAG,EACH,WAAW,EACX,eAAe,EACf,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,CACN,EACD,SAAS,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAmBxD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAQ1B,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM;IACvC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW;IA1BhD,OAAO,CAAC,KAAK,CAKJ;IACT,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,QAAQ,CAAM;IACtB,SAAS,CAAC,gBAAgB,SAAK;IAG/B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;gBAGL,SAAS,EAAE,CACxB,IAAI,EAAE,wBAAwB,CAC1B,eAAe,EACf,WAAW,EACX,OAAO,EACP,SAAS,CACZ,KACA,CAAC,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,EACpB,WAAW,CAAC,EAAE,MAAM,YAAA,EACpB,WAAW,CAAC,EAAE,WAAW,YAAA,EAC5C,eAAe,CAAC,EAAE,MAAM;IAQ5B,SAAS,KAAK,iBAAiB,IAAI,OAAO,CAGzC;IAED,OAAO,CAAC,MAAM;IAgBd,OAAO,CAAC,OAAO;IAkBf,OAAO,CAAC,WAAW;IAiBnB,SAAS,CAAC,IAAI;IAwDd,OAAO,CACH,CAAC,EAAE,wBAAwB,CACvB,eAAe,EACf,WAAW,EACX,OAAO,EACP,SAAS,CACZ;IAQL,IAAI,MAAM,WAET;IAED,wBAAwB;CAG3B"}
1
+ {"version":3,"file":"CNSFunctionalQueue.d.ts","sourceRoot":"","sources":["../src/CNSFunctionalQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,qBAAa,kBAAkB,CAC3B,eAAe,SAAS,MAAM,EAC9B,WAAW,SAAS,MAAM,EAC1B,OAAO,SAAS,UAAU,CACtB,GAAG,EACH,WAAW,EACX,eAAe,EACf,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,CACN,EACD,SAAS,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAcxD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAG1B,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM;IACvC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW;IAhBhD,OAAO,CAAC,KAAK,CAA+D;IAC5E,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,QAAQ,CAAM;IACtB,SAAS,CAAC,gBAAgB,SAAK;IAG/B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;gBAGL,SAAS,EAAE,CACxB,IAAI,EAAE,uBAAuB,CAAC,eAAe,EAAE,WAAW,CAAC,KAC1D,CAAC,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,EACpB,WAAW,CAAC,EAAE,MAAM,YAAA,EACpB,WAAW,CAAC,EAAE,WAAW,YAAA,EAC5C,eAAe,CAAC,EAAE,MAAM;IAQ5B,SAAS,KAAK,iBAAiB,IAAI,OAAO,CAGzC;IAED,OAAO,CAAC,MAAM;IAgBd,OAAO,CAAC,OAAO;IAaf,OAAO,CAAC,WAAW;IAYnB,SAAS,CAAC,IAAI;IAwDd,OAAO,CAAC,CAAC,EAAE,uBAAuB,CAAC,eAAe,EAAE,WAAW,CAAC;IAOhE,IAAI,MAAM,WAET;IAED,wBAAwB;CAG3B"}
@@ -5,20 +5,27 @@ import { TCNSDendrite } from './types/TCNSDendrite';
5
5
  import { TCNSSubscriber } from './types/TCNSSubscriber';
6
6
  import { CNSInstanceNeuronQueue } from './CNSInstanceNeuronQueue';
7
7
  import { TCNSSignal } from './types/TCNSSignal';
8
- export declare class CNSStimulation<TCollateralType extends string, TNeuronName extends string, TNeuron extends TCNSNeuron<any, TNeuronName, TCollateralType, any, any, any, any>, TDendrite extends TCNSDendrite<any, any, any, any, any, any>, TInputPayload, TOutputPayload> {
8
+ import { TCNSSerializedQueueItem } from './types/TCNSSerializedSignal';
9
+ export declare class CNSStimulation<TCollateralName extends string, TNeuronName extends string, TNeuron extends TCNSNeuron<any, TNeuronName, TCollateralName, any, any, any, any>, TDendrite extends TCNSDendrite<any, any, any, any, any, any>, TInputPayload, TOutputPayload> {
9
10
  private readonly cns;
10
- readonly options?: TCNSStimulationOptions<TCollateralType, TInputPayload, TOutputPayload> | undefined;
11
+ readonly options?: TCNSStimulationOptions<TCollateralName, TInputPayload, TOutputPayload> | undefined;
11
12
  private readonly ctx;
12
13
  private readonly queue;
13
14
  private readonly nueronVisitMap?;
14
15
  private readonly instanceNeuronQueue;
15
16
  private scheduledCount;
17
+ private completed;
18
+ private resolveCompleted;
19
+ private rejectCompleted;
20
+ private isCompleted;
16
21
  /**
17
22
  * Track active SCCs: SCC index -> count of active neurons in that SCC
18
23
  */
19
24
  private readonly activeSccCounts;
20
25
  readonly id: string;
21
- constructor(cns: ICNS<TNeuron, TDendrite>, instanceNeuronQueue: CNSInstanceNeuronQueue<TNeuron>, options?: TCNSStimulationOptions<TCollateralType, TInputPayload, TOutputPayload> | undefined);
26
+ constructor(cns: ICNS<TNeuron, TDendrite>, instanceNeuronQueue: CNSInstanceNeuronQueue<TNeuron>, options?: TCNSStimulationOptions<TCollateralName, TInputPayload, TOutputPayload> | undefined);
27
+ private tryResolveCompleted;
28
+ waitUntilComplete(): Promise<void>;
22
29
  protected get concurrencyEnabled(): boolean;
23
30
  protected get autoCleanupContextsEnabled(): boolean;
24
31
  /**
@@ -42,13 +49,10 @@ export declare class CNSStimulation<TCollateralType extends string, TNeuronName
42
49
  */
43
50
  protected canNeuronBeGuaranteedDone(neuronId: TNeuronName): boolean;
44
51
  protected cleanupCtxIfNeeded(neuron: TNeuron): void;
45
- protected createSubscriberQueueItem(subscriber: TCNSSubscriber<TNeuron, TDendrite>, inputSignal?: TCNSSignal<TCollateralType, any>): {
46
- neuronId: TNeuronName;
47
- subscriber: TCNSSubscriber<TNeuron, TDendrite>;
48
- inputSignal: TCNSSignal<TCollateralType, any> | undefined;
49
- };
52
+ protected createSubscriberQueueItem(subscriber: TCNSSubscriber<TNeuron, TDendrite>, inputSignal?: TCNSSignal<TCollateralName, any>): TCNSSerializedQueueItem<TCollateralName, TNeuronName>;
50
53
  private processQueueItem;
51
- protected processResponse(inputSignal?: TCNSSignal<TCollateralType, TInputPayload>, outputSignal?: TCNSSignal<TCollateralType, TOutputPayload>, error?: any): void;
52
- responseToSignal(signal: TCNSSignal<TCollateralType, TOutputPayload>): void;
54
+ protected processResponseOrResponses(inputSignal?: TCNSSignal<TCollateralName, TInputPayload>, outputSignalOrSignals?: TCNSSignal<TCollateralName, TOutputPayload> | TCNSSignal<TCollateralName, TOutputPayload>[], error?: any): void;
55
+ protected processResponse(inputSignal?: TCNSSignal<TCollateralName, TInputPayload>, outputSignal?: TCNSSignal<TCollateralName, TOutputPayload>, error?: any): void;
56
+ responseToSignal(signalOrSignals: TCNSSignal<TCollateralName, TOutputPayload> | TCNSSignal<TCollateralName, TOutputPayload>[]): void;
53
57
  }
54
58
  //# sourceMappingURL=CNSStimulation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CNSStimulation.d.ts","sourceRoot":"","sources":["../src/CNSStimulation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,qBAAa,cAAc,CACvB,eAAe,SAAS,MAAM,EAC9B,WAAW,SAAS,MAAM,EAC1B,OAAO,SAAS,UAAU,CACtB,GAAG,EACH,WAAW,EACX,eAAe,EACf,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,CACN,EACD,SAAS,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC5D,aAAa,EACb,cAAc;IAqBV,OAAO,CAAC,QAAQ,CAAC,GAAG;aAEJ,OAAO,CAAC,EAAE,sBAAsB,CAC5C,eAAe,EACf,aAAa,EACb,cAAc,CACjB;IAzBL,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA8B;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAKpB;IACF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAA2B;IAC3D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAkC;IACtE,OAAO,CAAC,cAAc,CAAK;IAE3B;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6B;IAE7D,SAAgB,EAAE,EAAE,MAAM,CAAC;gBAGN,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAC9C,mBAAmB,EAAE,sBAAsB,CAAC,OAAO,CAAC,EACpC,OAAO,CAAC,EAAE,sBAAsB,CAC5C,eAAe,EACf,aAAa,EACb,cAAc,CACjB,YAAA;IAoBL,SAAS,KAAK,kBAAkB,IAAI,OAAO,CAK1C;IAED,SAAS,KAAK,0BAA0B,IAAI,OAAO,CAElD;IAED;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAMvD;;OAEG;IACH,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAMzD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACH,SAAS,CAAC,yBAAyB,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO;IAQnE,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IASnD,SAAS,CAAC,yBAAyB,CAC/B,UAAU,EAAE,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,EAC9C,WAAW,CAAC,EAAE,UAAU,CAAC,eAAe,EAAE,GAAG,CAAC;;;;;IA2BlD,OAAO,CAAC,gBAAgB;IAoExB,SAAS,CAAC,eAAe,CACrB,WAAW,CAAC,EAAE,UAAU,CAAC,eAAe,EAAE,aAAa,CAAC,EACxD,YAAY,CAAC,EAAE,UAAU,CAAC,eAAe,EAAE,cAAc,CAAC,EAC1D,KAAK,CAAC,EAAE,GAAG,GACZ,IAAI;IAoDA,gBAAgB,CACnB,MAAM,EAAE,UAAU,CAAC,eAAe,EAAE,cAAc,CAAC,GACpD,IAAI;CAWV"}
1
+ {"version":3,"file":"CNSStimulation.d.ts","sourceRoot":"","sources":["../src/CNSStimulation.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,25 @@
1
1
  import { CNSCollateral } from '../CNSCollateral';
2
2
  import { TCNSAxon } from '../types/TCNSAxon';
3
3
  import { TCNSDendrite } from '../types/TCNSDendrite';
4
- export declare const collateral: <TPayload = undefined, TType extends string = string>(type: TType) => CNSCollateral<TType, TPayload>;
5
- type InterNeuronAPI<TContextValue, TNameType extends string, TReceiverCollateralType extends string, TReceiverAxonCollateralPayload, TAxonType extends TCNSAxon<TReceiverCollateralType, TReceiverAxonCollateralPayload>> = {
4
+ export declare const collateral: <TPayload = undefined, TName extends string = string>(name: TName) => CNSCollateral<TName, TPayload>;
5
+ type PayloadOf<TAxon, K extends keyof TAxon> = TAxon[K] extends CNSCollateral<any, infer P> ? P : never;
6
+ type NameOf<TAxon, K extends keyof TAxon> = TAxon[K] extends CNSCollateral<infer N, any> ? N : never;
7
+ type InterNeuronAPI<TContextValue, TNameType extends string, TReceiverCollateralName extends string, TReceiverAxonCollateralPayload, TAxonType extends TCNSAxon<TReceiverCollateralName, TReceiverAxonCollateralPayload>> = {
6
8
  name: TNameType;
7
9
  axon: TAxonType;
8
10
  concurrency?: number;
9
- dendrites: TCNSDendrite<TContextValue, string, unknown, TReceiverCollateralType, TReceiverAxonCollateralPayload, TAxonType>[];
10
- setConcurrency: (n: number | undefined) => InterNeuronAPI<TContextValue, TNameType, TReceiverCollateralType, TReceiverAxonCollateralPayload, TAxonType>;
11
- bind: <TFollowAxon extends TCNSAxon<string, any>>(axon: TFollowAxon, dendrites: {
12
- [K in keyof TFollowAxon]: TCNSDendrite<TContextValue, K & string, TFollowAxon extends TCNSAxon<any, infer P> ? P : never, TReceiverCollateralType, TReceiverAxonCollateralPayload, TAxonType> | TCNSDendrite<TContextValue, K & string, TFollowAxon extends TCNSAxon<any, infer P> ? P : never, TReceiverCollateralType, TReceiverAxonCollateralPayload, TAxonType>['response'];
13
- }) => InterNeuronAPI<TContextValue, TNameType, TReceiverCollateralType, TReceiverAxonCollateralPayload, TAxonType>;
14
- dendrite: <TSenderExactCollateralType extends string, TSenderExactAxonCollateralPayload>(s: TCNSDendrite<TContextValue, TSenderExactCollateralType, TSenderExactAxonCollateralPayload, TReceiverCollateralType, TReceiverAxonCollateralPayload, TAxonType>) => InterNeuronAPI<TContextValue, TNameType, TReceiverCollateralType, TReceiverAxonCollateralPayload, TAxonType>;
11
+ maxDuration?: number;
12
+ dendrites: TCNSDendrite<TContextValue, string, unknown, TReceiverCollateralName, TReceiverAxonCollateralPayload, TAxonType>[];
13
+ setConcurrency: (n: number | undefined) => InterNeuronAPI<TContextValue, TNameType, TReceiverCollateralName, TReceiverAxonCollateralPayload, TAxonType>;
14
+ setMaxDuration: (ms: number | undefined) => InterNeuronAPI<TContextValue, TNameType, TReceiverCollateralName, TReceiverAxonCollateralPayload, TAxonType>;
15
+ bind: <TFollowAxon extends Record<string, CNSCollateral<any, any>>>(axon: TFollowAxon, dendrites: {
16
+ [K in keyof TFollowAxon]: TCNSDendrite<TContextValue, NameOf<TFollowAxon, K> & string, PayloadOf<TFollowAxon, K>, TReceiverCollateralName, TReceiverAxonCollateralPayload, TAxonType> | TCNSDendrite<TContextValue, NameOf<TFollowAxon, K> & string, PayloadOf<TFollowAxon, K>, TReceiverCollateralName, TReceiverAxonCollateralPayload, TAxonType>['response'];
17
+ }) => InterNeuronAPI<TContextValue, TNameType, TReceiverCollateralName, TReceiverAxonCollateralPayload, TAxonType>;
18
+ dendrite: <TSenderExactCollateralName extends string, TSenderExactAxonCollateralPayload>(s: TCNSDendrite<TContextValue, TSenderExactCollateralName, TSenderExactAxonCollateralPayload, TReceiverCollateralName, TReceiverAxonCollateralPayload, TAxonType>) => InterNeuronAPI<TContextValue, TNameType, TReceiverCollateralName, TReceiverAxonCollateralPayload, TAxonType>;
15
19
  };
16
- export declare const neuron: <TContextValue, TNameType extends string, TReceiverCollateralType extends string, TReceiverAxonCollateralPayload, TAxonType extends TCNSAxon<TReceiverCollateralType, TReceiverAxonCollateralPayload>>(name: TNameType, axon: TAxonType) => InterNeuronAPI<TContextValue, TNameType, TReceiverCollateralType, TReceiverAxonCollateralPayload, TAxonType>;
20
+ export declare const neuron: <TContextValue, TNameType extends string, TProvidedAxon extends Record<string, CNSCollateral<any, any>>, TReceiverCollateralName extends keyof TProvidedAxon & string = keyof TProvidedAxon & string, TReceiverAxonCollateralPayload = TProvidedAxon[keyof TProvidedAxon] extends CNSCollateral<any, infer P> ? P : never>(name: TNameType, axon: TProvidedAxon) => InterNeuronAPI<TContextValue, TNameType, TReceiverCollateralName, TReceiverAxonCollateralPayload, TCNSAxon<TReceiverCollateralName, TReceiverAxonCollateralPayload>>;
17
21
  export declare const withCtx: <TContextValue>() => {
18
- neuron: <TNameType extends string, TReceiverCollateralType extends string, TReceiverAxonCollateralPayload, TAxonType extends TCNSAxon<TReceiverCollateralType, TReceiverAxonCollateralPayload>>(name: TNameType, axon: TAxonType) => InterNeuronAPI<TContextValue, TNameType, TReceiverCollateralType, TReceiverAxonCollateralPayload, TAxonType>;
22
+ neuron: <TNameType extends string, TProvidedAxon extends Record<string, CNSCollateral<any, any>>>(name: TNameType, axon: TProvidedAxon) => InterNeuronAPI<TContextValue, TNameType, keyof TProvidedAxon & string, TProvidedAxon[keyof TProvidedAxon] extends CNSCollateral<any, infer P> ? P : never, TCNSAxon<keyof TProvidedAxon & string, TProvidedAxon[keyof TProvidedAxon] extends CNSCollateral<any, infer P> ? P : never>>;
19
23
  };
20
24
  export {};
21
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/factory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,eAAO,MAAM,UAAU,GAAI,QAAQ,GAAG,SAAS,EAAE,KAAK,SAAS,MAAM,GAAG,MAAM,EAC1E,MAAM,KAAK,mCAC8B,CAAC;AAE9C,KAAK,cAAc,CACf,aAAa,EACb,SAAS,SAAS,MAAM,EACxB,uBAAuB,SAAS,MAAM,EACtC,8BAA8B,EAC9B,SAAS,SAAS,QAAQ,CACtB,uBAAuB,EACvB,8BAA8B,CACjC,IACD;IACA,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,YAAY,CACnB,aAAa,EACb,MAAM,EACN,OAAO,EACP,uBAAuB,EACvB,8BAA8B,EAC9B,SAAS,CACZ,EAAE,CAAC;IACJ,cAAc,EAAE,CACZ,CAAC,EAAE,MAAM,GAAG,SAAS,KACpB,cAAc,CACf,aAAa,EACb,SAAS,EACT,uBAAuB,EACvB,8BAA8B,EAC9B,SAAS,CACZ,CAAC;IACF,IAAI,EAAE,CAAC,WAAW,SAAS,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5C,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE;SACN,CAAC,IAAI,MAAM,WAAW,GACjB,YAAY,CACR,aAAa,EACb,CAAC,GAAG,MAAM,EACV,WAAW,SAAS,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,EACtD,uBAAuB,EACvB,8BAA8B,EAC9B,SAAS,CACZ,GACD,YAAY,CACR,aAAa,EACb,CAAC,GAAG,MAAM,EACV,WAAW,SAAS,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,EACtD,uBAAuB,EACvB,8BAA8B,EAC9B,SAAS,CACZ,CAAC,UAAU,CAAC;KACtB,KACA,cAAc,CACf,aAAa,EACb,SAAS,EACT,uBAAuB,EACvB,8BAA8B,EAC9B,SAAS,CACZ,CAAC;IACF,QAAQ,EAAE,CACN,0BAA0B,SAAS,MAAM,EACzC,iCAAiC,EAEjC,CAAC,EAAE,YAAY,CACX,aAAa,EACb,0BAA0B,EAC1B,iCAAiC,EACjC,uBAAuB,EACvB,8BAA8B,EAC9B,SAAS,CACZ,KACA,cAAc,CACf,aAAa,EACb,SAAS,EACT,uBAAuB,EACvB,8BAA8B,EAC9B,SAAS,CACZ,CAAC;CACL,CAAC;AAGF,eAAO,MAAM,MAAM,GACf,aAAa,EACb,SAAS,SAAS,MAAM,EACxB,uBAAuB,SAAS,MAAM,EACtC,8BAA8B,EAC9B,SAAS,SAAS,QAAQ,CACtB,uBAAuB,EACvB,8BAA8B,CACjC,EAED,MAAM,SAAS,EACf,MAAM,SAAS,KAChB,cAAc,CACb,aAAa,EACb,SAAS,EACT,uBAAuB,EACvB,8BAA8B,EAC9B,SAAS,CAmFZ,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,aAAa;aAE7B,SAAS,SAAS,MAAM,EACxB,uBAAuB,SAAS,MAAM,EACtC,8BAA8B,EAC9B,SAAS,SAAS,QAAQ,CACtB,uBAAuB,EACvB,8BAA8B,CACjC,QAEK,SAAS,QACT,SAAS;CAUrB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/factory/index.ts"],"names":[],"mappings":"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"}