@cnstra/core 1.4.0 → 1.5.2

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.
package/README.md CHANGED
@@ -9,16 +9,18 @@ You explicitly start a run with `cns.stimulate(...)`; CNStra then performs a **d
9
9
 
10
10
  > **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
11
 
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.
12
+ **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.
13
+
14
+ 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
15
 
14
16
  ## 💡 Why CNStra
15
17
 
16
- We follow the ERG approach (Event → Reaction → Graph), not a raw Flux/event-bus.
18
+ 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
19
 
18
20
  - **Deterministic routing**: signals are delivered along an explicit neuron graph, not broadcast to whoever “happens to listen”.
19
21
  - **Readable, reliable flows**: each step is local and typed; branches are explicit, so debugging feels like reading a storyboard, not a log stream.
20
22
  - **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”.
23
+ - **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
24
  - **Safer than ad‑hoc events**: no hidden global listeners, no accidental fan‑out; every continuation must be returned explicitly.
23
25
 
24
26
  ## 🏗️ Core Model
@@ -265,12 +267,12 @@ await cns.stimulate(signal, {
265
267
  });
266
268
  ```
267
269
 
268
- ### `allowType?: (collateralId: string) => boolean`
269
- Filter which collateral types can be processed.
270
+ ### `allowName?: (collateralName: string) => boolean`
271
+ Filter which collateral names can be processed.
270
272
 
271
273
  ```typescript
272
274
  await cns.stimulate(signal, {
273
- allowType: (type) => type.startsWith('user:') // Only process user-related signals
275
+ allowName: (name) => name.startsWith('user:') // Only process user-related signals
274
276
  });
275
277
  ```
276
278
 
@@ -446,7 +448,7 @@ const cns = new CNS([validator, handler]);
446
448
 
447
449
  ### Event Sourcing
448
450
  ```typescript
449
- const eventReceived = collateral<{ type: string; data: any }>('event:received');
451
+ const eventReceived = collateral<{ name: string; data: any }>('event:received');
450
452
  const eventStored = collateral<{ eventId: string }>('event:stored');
451
453
  const stateUpdated = collateral<{ aggregateId: string }>('state:updated');
452
454
 
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,7 +60,7 @@ 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;
63
+ addResponseListener(listener: <TInputPayload, TOutputPayload>(response: TCNSStimulationResponse<TCollateralName, TInputPayload, TOutputPayload>) => void): () => void;
59
64
  wrapOnResponse<T>(local?: (response: T) => void): (response: T) => void;
60
65
  protected runWithNeuronConcurrency(neuron: TNeuron, fn: () => (() => void) | Promise<() => void>): Promise<void>;
61
66
  private buildIndexes;
@@ -95,8 +100,11 @@ 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
+ getSubscribers(collateralName: TCollateralName): TCNSSubscriber<TNeuron, TDendrite>[];
108
+ stimulate<TInputPayload extends TOutputPayload, TOutputPayload>(signal: TCNSSignal<TCollateralName, TInputPayload>, options?: TCNSStimulationOptions<TCollateralName, TInputPayload, TOutputPayload>): void;
101
109
  }
102
110
  //# 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
1
  import { TCNSStimulationQueueItem } from './types/TCNSStimulationQueueItem';
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: TCNSStimulationQueueItem<TCollateralName, TNeuronName, TNeuron, TDendrite>) => (() => 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: TCNSStimulationQueueItem<TCollateralName, TNeuronName, TNeuron, TDendrite>): void;
23
23
  get length(): number;
24
24
  getActiveOperationsCount(): number;
25
25
  }
@@ -5,9 +5,9 @@ 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
+ 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
9
  private readonly cns;
10
- readonly options?: TCNSStimulationOptions<TCollateralType, TInputPayload, TOutputPayload> | undefined;
10
+ readonly options?: TCNSStimulationOptions<TCollateralName, TInputPayload, TOutputPayload> | undefined;
11
11
  private readonly ctx;
12
12
  private readonly queue;
13
13
  private readonly nueronVisitMap?;
@@ -18,7 +18,7 @@ export declare class CNSStimulation<TCollateralType extends string, TNeuronName
18
18
  */
19
19
  private readonly activeSccCounts;
20
20
  readonly id: string;
21
- constructor(cns: ICNS<TNeuron, TDendrite>, instanceNeuronQueue: CNSInstanceNeuronQueue<TNeuron>, options?: TCNSStimulationOptions<TCollateralType, TInputPayload, TOutputPayload> | undefined);
21
+ constructor(cns: ICNS<TNeuron, TDendrite>, instanceNeuronQueue: CNSInstanceNeuronQueue<TNeuron>, options?: TCNSStimulationOptions<TCollateralName, TInputPayload, TOutputPayload> | undefined);
22
22
  protected get concurrencyEnabled(): boolean;
23
23
  protected get autoCleanupContextsEnabled(): boolean;
24
24
  /**
@@ -42,13 +42,13 @@ export declare class CNSStimulation<TCollateralType extends string, TNeuronName
42
42
  */
43
43
  protected canNeuronBeGuaranteedDone(neuronId: TNeuronName): boolean;
44
44
  protected cleanupCtxIfNeeded(neuron: TNeuron): void;
45
- protected createSubscriberQueueItem(subscriber: TCNSSubscriber<TNeuron, TDendrite>, inputSignal?: TCNSSignal<TCollateralType, any>): {
45
+ protected createSubscriberQueueItem(subscriber: TCNSSubscriber<TNeuron, TDendrite>, inputSignal?: TCNSSignal<TCollateralName, any>): {
46
46
  neuronId: TNeuronName;
47
47
  subscriber: TCNSSubscriber<TNeuron, TDendrite>;
48
- inputSignal: TCNSSignal<TCollateralType, any> | undefined;
48
+ inputSignal: TCNSSignal<TCollateralName, any> | undefined;
49
49
  };
50
50
  private processQueueItem;
51
- protected processResponse(inputSignal?: TCNSSignal<TCollateralType, TInputPayload>, outputSignal?: TCNSSignal<TCollateralType, TOutputPayload>, error?: any): void;
52
- responseToSignal(signal: TCNSSignal<TCollateralType, TOutputPayload>): void;
51
+ protected processResponse(inputSignal?: TCNSSignal<TCollateralName, TInputPayload>, outputSignal?: TCNSSignal<TCollateralName, TOutputPayload>, error?: any): void;
52
+ responseToSignal(signal: TCNSSignal<TCollateralName, TOutputPayload>): void;
53
53
  }
54
54
  //# 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":"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;IAqExB,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;IAqDA,gBAAgB,CACnB,MAAM,EAAE,UAAU,CAAC,eAAe,EAAE,cAAc,CAAC,GACpD,IAAI;CAWV"}
@@ -1,21 +1,23 @@
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
+ dendrites: TCNSDendrite<TContextValue, string, unknown, TReceiverCollateralName, TReceiverAxonCollateralPayload, TAxonType>[];
12
+ setConcurrency: (n: number | undefined) => InterNeuronAPI<TContextValue, TNameType, TReceiverCollateralName, TReceiverAxonCollateralPayload, TAxonType>;
13
+ bind: <TFollowAxon extends Record<string, CNSCollateral<any, any>>>(axon: TFollowAxon, dendrites: {
14
+ [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'];
15
+ }) => InterNeuronAPI<TContextValue, TNameType, TReceiverCollateralName, TReceiverAxonCollateralPayload, TAxonType>;
16
+ dendrite: <TSenderExactCollateralName extends string, TSenderExactAxonCollateralPayload>(s: TCNSDendrite<TContextValue, TSenderExactCollateralName, TSenderExactAxonCollateralPayload, TReceiverCollateralName, TReceiverAxonCollateralPayload, TAxonType>) => InterNeuronAPI<TContextValue, TNameType, TReceiverCollateralName, TReceiverAxonCollateralPayload, TAxonType>;
15
17
  };
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>;
18
+ 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
19
  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>;
20
+ 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
21
  };
20
22
  export {};
21
23
  //# 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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"}
package/dist/index.cjs CHANGED
@@ -215,7 +215,7 @@ var CNSStimulation = class {
215
215
  if (this.options?.maxNeuronHops) {
216
216
  if (this.nueronVisitMap?.get(subscriber.neuron.name) ?? 0 >= this.options?.maxNeuronHops) {
217
217
  throw new Error(
218
- `Max neuron hops reached for neuron "${subscriber.neuron.name}" when trying to enqueue subscriber "${subscriber.dendrite.collateral.type}" in stimulation "${this.id}"`
218
+ `Max neuron hops reached for neuron "${subscriber.neuron.name}" when trying to enqueue subscriber "${subscriber.dendrite.collateral.name}" in stimulation "${this.id}"`
219
219
  );
220
220
  } else {
221
221
  this.nueronVisitMap?.set(
@@ -241,6 +241,7 @@ var CNSStimulation = class {
241
241
  {
242
242
  get: () => this.ctx.get(neuron2.name),
243
243
  set: (value) => this.ctx.set(neuron2.name, value),
244
+ delete: () => this.ctx.delete(neuron2.name),
244
245
  abortSignal: this.options?.abortSignal,
245
246
  cns: this.cns
246
247
  }
@@ -281,8 +282,8 @@ var CNSStimulation = class {
281
282
  }
282
283
  processResponse(inputSignal, outputSignal, error) {
283
284
  const collateral2 = outputSignal?.collateral;
284
- const ownerNeuron = collateral2 ? this.cns.getParentNeuronByCollateralId(collateral2.type) : void 0;
285
- const subscribers = collateral2 ? this.cns.getSubscribers(collateral2.type) : [];
285
+ const ownerNeuron = collateral2 ? this.cns.getParentNeuronByCollateralName(collateral2.name) : void 0;
286
+ const subscribers = collateral2 ? this.cns.getSubscribers(collateral2.name) : [];
286
287
  const subscriberQueueItems = [];
287
288
  if (collateral2 && !error) {
288
289
  if (ownerNeuron) {
@@ -300,6 +301,7 @@ var CNSStimulation = class {
300
301
  outputSignal,
301
302
  ctx: this.ctx,
302
303
  queueLength: this.queue.length + this.scheduledCount,
304
+ stimulationId: this.id,
303
305
  hops: this.options?.maxNeuronHops && ownerNeuron ? this.nueronVisitMap?.get(ownerNeuron.name) ?? 0 : void 0,
304
306
  error
305
307
  });
@@ -309,8 +311,8 @@ var CNSStimulation = class {
309
311
  }
310
312
  }
311
313
  responseToSignal(signal) {
312
- const ownerNeuron = this.cns.getParentNeuronByCollateralId(
313
- signal.collateral.type
314
+ const ownerNeuron = this.cns.getParentNeuronByCollateralName(
315
+ signal.collateral.name
314
316
  );
315
317
  if (ownerNeuron) {
316
318
  this.markNeuronActive(ownerNeuron.name);
@@ -462,11 +464,14 @@ var CNS = class {
462
464
  this.neurons = neurons;
463
465
  this.options = options;
464
466
  /**
465
- * Fast lookup: collateralId -> list of (neuron, dendrite) subscribers.
467
+ * Fast lookup: collateralName -> list of (neuron, dendrite) subscribers.
466
468
  * Built once at construction time.
467
469
  */
468
470
  this.subIndex = /* @__PURE__ */ new Map();
469
- this.parentNeuronByCollateralId = /* @__PURE__ */ new Map();
471
+ this.neuronIndex = /* @__PURE__ */ new Map();
472
+ this.dendriteIndex = /* @__PURE__ */ new Map();
473
+ this.collateralIndex = /* @__PURE__ */ new Map();
474
+ this.parentNeuronByCollateralName = /* @__PURE__ */ new Map();
470
475
  /**
471
476
  * Strongly Connected Components of the neuron graph.
472
477
  * Each component is a set of neuron IDs that can reach each other.
@@ -613,22 +618,28 @@ var CNS = class {
613
618
  }
614
619
  buildIndexes() {
615
620
  this.subIndex.clear();
616
- this.parentNeuronByCollateralId.clear();
621
+ this.parentNeuronByCollateralName.clear();
617
622
  for (const neuron2 of this.neurons) {
623
+ this.neuronIndex.set(neuron2.name, neuron2);
618
624
  for (const dendrite of neuron2.dendrites) {
619
- const key = dendrite.collateral.type;
625
+ const key = dendrite.collateral.name;
620
626
  const arr = this.subIndex.get(key) ?? [];
621
627
  arr.push({ neuron: neuron2, dendrite });
622
628
  this.subIndex.set(
623
629
  key,
624
630
  arr
625
631
  );
632
+ this.dendriteIndex.set(key, dendrite);
626
633
  }
627
634
  Object.values(neuron2.axon).forEach((collateral2) => {
628
- this.parentNeuronByCollateralId.set(
629
- collateral2.type,
635
+ this.parentNeuronByCollateralName.set(
636
+ collateral2.name,
630
637
  neuron2
631
638
  );
639
+ this.collateralIndex.set(
640
+ collateral2.name,
641
+ collateral2
642
+ );
632
643
  });
633
644
  }
634
645
  }
@@ -645,8 +656,8 @@ var CNS = class {
645
656
  const reachableNeurons = /* @__PURE__ */ new Set();
646
657
  for (const axonKey in neuron2.axon) {
647
658
  const collateral2 = neuron2.axon[axonKey];
648
- const collateralType = collateral2.type;
649
- const subscribers = this.subIndex.get(collateralType);
659
+ const collateralName = collateral2.name;
660
+ const subscribers = this.subIndex.get(collateralName);
650
661
  if (subscribers) {
651
662
  for (const { neuron: targetNeuron } of subscribers) {
652
663
  reachableNeurons.add(targetNeuron.name);
@@ -819,11 +830,20 @@ var CNS = class {
819
830
  }
820
831
  return true;
821
832
  }
822
- getParentNeuronByCollateralId(collateralType) {
823
- return this.parentNeuronByCollateralId.get(collateralType);
833
+ getParentNeuronByCollateralName(collateralName) {
834
+ return this.parentNeuronByCollateralName.get(collateralName);
835
+ }
836
+ getDendrites() {
837
+ return Array.from(this.dendriteIndex.values());
838
+ }
839
+ getCollaterals() {
840
+ return Array.from(this.collateralIndex.values());
841
+ }
842
+ getNeurons() {
843
+ return Array.from(this.neuronIndex.values());
824
844
  }
825
- getSubscribers(collateralType) {
826
- return this.subIndex.get(collateralType) ?? [];
845
+ getSubscribers(collateralName) {
846
+ return this.subIndex.get(collateralName) ?? [];
827
847
  }
828
848
  stimulate(signal, options) {
829
849
  const wrapped = this.wrapOnResponse(options?.onResponse);
@@ -837,8 +857,8 @@ var CNS = class {
837
857
 
838
858
  // src/CNSCollateral.ts
839
859
  var CNSCollateral = class {
840
- constructor(type) {
841
- this.type = type;
860
+ constructor(name) {
861
+ this.name = name;
842
862
  }
843
863
  createSignal(payload) {
844
864
  return { collateral: this, payload };
@@ -846,7 +866,7 @@ var CNSCollateral = class {
846
866
  };
847
867
 
848
868
  // src/factory/index.ts
849
- var collateral = (type) => new CNSCollateral(type);
869
+ var collateral = (name) => new CNSCollateral(name);
850
870
  var neuron = (name, axon) => {
851
871
  const dendrites = [];
852
872
  const api = {
@@ -885,30 +905,10 @@ var withCtx = () => ({
885
905
  return neuron(name, axon);
886
906
  }
887
907
  });
888
- var fa = {
889
- test1: new CNSCollateral("test1"),
890
- test2: new CNSCollateral("test2")
891
- };
892
- var fb = {
893
- test4: collateral("test4"),
894
- test5: collateral("test5")
895
- };
896
- withCtx().neuron("test", {
897
- test1: fa.test1,
898
- test2: fa.test2
899
- }).bind(fb, {
900
- test4: (payload, axon) => {
901
- const ok = payload.test44;
902
- return axon.test1.createSignal(ok);
903
- },
904
- test5: (payload, axon) => {
905
- const ok2 = payload.test44;
906
- return axon.test2.createSignal(ok2);
907
- }
908
- });
909
908
 
910
909
  exports.CNS = CNS;
911
910
  exports.CNSCollateral = CNSCollateral;
911
+ exports.CNSStimulationContextStore = CNSStimulationContextStore;
912
912
  exports.collateral = collateral;
913
913
  exports.neuron = neuron;
914
914
  exports.withCtx = withCtx;