@cnstra/core 2.3.0 → 2.5.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.
- package/README.md +28 -6
- package/dist/CNS.d.ts +29 -1
- package/dist/CNS.d.ts.map +1 -1
- package/dist/CNSStimulation.d.ts +33 -1
- package/dist/CNSStimulation.d.ts.map +1 -1
- package/dist/factory/index.d.ts +94 -67
- package/dist/factory/index.d.ts.map +1 -1
- package/dist/index.cjs +241 -48
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +239 -49
- package/dist/index.js.map +1 -1
- package/dist/interfaces/ICNS.d.ts +7 -0
- package/dist/interfaces/ICNS.d.ts.map +1 -1
- package/dist/types/TCNSDendrite.d.ts +3 -8
- package/dist/types/TCNSDendrite.d.ts.map +1 -1
- package/dist/types/TCNSHandlerContext.d.ts +24 -0
- package/dist/types/TCNSHandlerContext.d.ts.map +1 -0
- package/dist/types/TCNSNeuron.d.ts +1 -1
- package/dist/types/TCNSNeuron.d.ts.map +1 -1
- package/dist/types/TCNSStimulationDrain.d.ts +37 -0
- package/dist/types/TCNSStimulationDrain.d.ts.map +1 -0
- package/dist/types/TCNSStimulationOptions.d.ts +18 -0
- package/dist/types/TCNSStimulationOptions.d.ts.map +1 -1
- package/dist/types/TCNSStimulationResponse.d.ts +40 -0
- package/dist/types/TCNSStimulationResponse.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,18 +1,28 @@
|
|
|
1
1
|
# @cnstra/core
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**Orchestration engine for TypeScript — deterministic, embeddable, in-memory.**
|
|
4
4
|
|
|
5
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)
|
|
6
6
|
|
|
7
7
|
## What is CNStra?
|
|
8
8
|
|
|
9
|
-
**CNStra (Central Nervous System Orchestrator)
|
|
9
|
+
**CNStra** (Central Nervous System Orchestrator) models your app's control flow as a graph of **neurons** wired together by **typed signals**. You orchestrate work by wiring the graph — not by standing up an event bus.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Instead of an event bus that broadcasts to whoever happens to be listening, CNStra keeps the flow explicit. You start a run with `cns.stimulate(signal)`, and it walks the graph deterministically — one hop at a time, `collateral → dendrite → returned signal` — until nothing is left to fire. A neuron receives a signal on one of its dendrites, does its work, and returns the next signal; that returned signal **is** the edge to the next neuron. No hidden subscribers, no fan-out you can't trace.
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
- **
|
|
13
|
+
Four primitives:
|
|
14
|
+
|
|
15
|
+
- **Collateral** — a typed channel; a signal is a payload sent on one.
|
|
16
|
+
- **Neuron** — a unit of logic with one or more dendrites.
|
|
17
|
+
- **Dendrite** — a handler that reacts to a collateral and returns the next signal.
|
|
18
|
+
- **Signal** — what actually flows through a run.
|
|
19
|
+
|
|
20
|
+
Because traversal is deterministic and hop-bounded, a run is reproducible and easy to reason about — which is what makes CNStra a good fit for:
|
|
21
|
+
|
|
22
|
+
- **Jobs & workers**, **webhooks & integrations**, **ETL / pipelines**
|
|
23
|
+
- **Retries, timeouts, cancellation**, and **saga-style compensations**
|
|
24
|
+
|
|
25
|
+
Zero dependencies. No pub/sub. In-memory.
|
|
16
26
|
|
|
17
27
|
👉 **[Read the full documentation →](https://cnstra.org/)**
|
|
18
28
|
|
|
@@ -94,6 +104,18 @@ export const registry = createPersistRegistry({ deckNeuron, cardNeuron });
|
|
|
94
104
|
// explicit collateral names: { 'deck-neuron': { neuron: deckNeuron, collaterals: { deckCreated: 'deck-created' } } }
|
|
95
105
|
```
|
|
96
106
|
|
|
107
|
+
**CNS + registry from one map:** if you're going to build both, `createCNS` lists the
|
|
108
|
+
neuron set once and returns both — they derive from the same map, so the names can never
|
|
109
|
+
drift from the runtime graph. Accepts the same explicit-name syntax as `createPersistRegistry`.
|
|
110
|
+
|
|
111
|
+
```ts
|
|
112
|
+
import { createCNS } from '@cnstra/core';
|
|
113
|
+
|
|
114
|
+
const { cns, registry } = createCNS({ deckNeuron, cardNeuron });
|
|
115
|
+
// `cns` is the runtime engine; `registry` carries the names for devtools/mcp/persistence.
|
|
116
|
+
// Don't need naming/persistence? Just use `new CNS([deckNeuron, cardNeuron])` directly.
|
|
117
|
+
```
|
|
118
|
+
|
|
97
119
|
## Documentation
|
|
98
120
|
|
|
99
121
|
- **[Quick Start Guide](https://cnstra.org/docs/core/quick-start)** — Get up and running in minutes
|
package/dist/CNS.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { CNSStimulation } from './CNSStimulation';
|
|
|
6
6
|
import { TCNSSignal } from './types/TCNSSignal';
|
|
7
7
|
import { CNSInstanceNeuronQueue } from './CNSInstanceNeuronQueue';
|
|
8
8
|
import { TCNSStimulationResponse } from './types/TCNSStimulationResponse';
|
|
9
|
+
import { TCNSStimulationDrain } from './types/TCNSStimulationDrain';
|
|
9
10
|
import { TCNSNeuronActivationTask } from './types/TCNSNeuronActivationTask';
|
|
10
11
|
import { CNSNetwork } from './CNSNetwork';
|
|
11
12
|
import { ICNS } from './interfaces/ICNS';
|
|
@@ -26,8 +27,35 @@ export declare class CNS<TNeuron extends TCNSNeuron<any, any>, TDendrite extends
|
|
|
26
27
|
* Global response listeners applied to every stimulation.
|
|
27
28
|
*/
|
|
28
29
|
private readonly globalResponseListeners;
|
|
29
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Global batch-boundary listeners applied to every stimulation.
|
|
32
|
+
*/
|
|
33
|
+
private readonly globalDrainListeners;
|
|
34
|
+
/**
|
|
35
|
+
* Shared, app/organism-wide value handed to every dendrite as `ctx.global`.
|
|
36
|
+
* Stored untyped (the type is baked into neurons via `neuronFactory().withGlobal<T>()`);
|
|
37
|
+
* CNS is just a passthrough carrier, so injecting it here never touches the hot path.
|
|
38
|
+
*/
|
|
39
|
+
readonly global?: unknown;
|
|
40
|
+
constructor(neurons: TNeuron[], options?: TCNSOptions | undefined, global?: unknown);
|
|
30
41
|
addResponseListener(listener: (response: TCNSStimulationResponse) => void | Promise<void>): () => void;
|
|
42
|
+
/**
|
|
43
|
+
* Register a listener called once at the end of every synchronous turn of
|
|
44
|
+
* every stimulation - see {@link TCNSStimulationDrain}. This is how an
|
|
45
|
+
* integration (a state manager, an in-memory database) installs a single
|
|
46
|
+
* commit point for the whole organism instead of passing `onDrain` per call.
|
|
47
|
+
*
|
|
48
|
+
* Returns an unsubscribe function.
|
|
49
|
+
*/
|
|
50
|
+
addDrainListener(listener: (drain: TCNSStimulationDrain) => void): () => void;
|
|
51
|
+
/**
|
|
52
|
+
* Fan a drain out to the local and global listeners, or return undefined when
|
|
53
|
+
* there are none so the stimulation can skip the boundary check entirely.
|
|
54
|
+
*
|
|
55
|
+
* Listener errors are isolated: a drain is a notification, and one broken
|
|
56
|
+
* flush must not stop the others or derail the stimulation that triggered it.
|
|
57
|
+
*/
|
|
58
|
+
private wrapOnDrain;
|
|
31
59
|
private wrapOnResponse;
|
|
32
60
|
stimulate(signalOrSignals: TCNSSignal<CNSCollateral<unknown>> | TCNSSignal<CNSCollateral<unknown>>[], options?: TCNSStimulationOptions<TCNSStimulationResponse>): CNSStimulation<TNeuron, TDendrite>;
|
|
33
61
|
/**
|
package/dist/CNS.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CNS.d.ts","sourceRoot":"","sources":["../src/CNS.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,qBAAa,GAAG,CACZ,OAAO,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EACpC,SAAS,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAC7E,YAAW,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"CNS.d.ts","sourceRoot":"","sources":["../src/CNS.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,qBAAa,GAAG,CACZ,OAAO,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EACpC,SAAS,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAC7E,YAAW,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;IAoC7B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE;aACrB,OAAO,CAAC,EAAE,WAAW;IAnCzC;;OAEG;IACH,SAAgB,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAExD;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,mBAAmB,kCACI;IAE1C;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAEjC;IAEP;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAE9B;IAEP;;;;OAIG;IACH,SAAgB,MAAM,CAAC,EAAE,OAAO,CAAC;gBAGV,OAAO,EAAE,OAAO,EAAE,EACrB,OAAO,CAAC,EAAE,WAAW,YAAA,EACrC,MAAM,CAAC,EAAE,OAAO;IAMb,mBAAmB,CACtB,QAAQ,EAAE,CAAC,QAAQ,EAAE,uBAAuB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACtE,MAAM,IAAI;IAWb;;;;;;;OAOG;IACI,gBAAgB,CACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,GAChD,MAAM,IAAI;IAWb;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IAsBnB,OAAO,CAAC,cAAc;IAmDf,SAAS,CACZ,eAAe,EACT,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAClC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,EAC1C,OAAO,CAAC,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,GAC1D,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC;IAarC;;OAEG;IACI,QAAQ,CACX,KAAK,EAAE,wBAAwB,CAAC,OAAO,CAAC,EAAE,EAC1C,OAAO,CAAC,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,GAC1D,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC;CAYxC"}
|
package/dist/CNSStimulation.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { TCNSNeuronActivationTask } from './types/TCNSNeuronActivationTask';
|
|
|
9
9
|
import { CNS } from './CNS';
|
|
10
10
|
import { TCNSNeuronActivationTaskFailure } from './types/TCNSNeuronActivationTaskFailure';
|
|
11
11
|
import { TCNSStimulationResponse } from './types/TCNSStimulationResponse';
|
|
12
|
+
import { TCNSStimulationDrain } from './types/TCNSStimulationDrain';
|
|
12
13
|
import { CNSCollateral } from './CNSCollateral';
|
|
13
14
|
export declare class CNSStimulation<TNeuron extends TCNSNeuron<any, any>, TDendrite extends TCNSDendrite<any, any, any> = TCNSDendrite<any, any, any>> {
|
|
14
15
|
readonly cns: CNS<TNeuron, TDendrite>;
|
|
@@ -23,9 +24,11 @@ export declare class CNSStimulation<TNeuron extends TCNSNeuron<any, any>, TDendr
|
|
|
23
24
|
private activeTasks?;
|
|
24
25
|
private pumping;
|
|
25
26
|
private needsPump;
|
|
27
|
+
private turnDepth;
|
|
26
28
|
private readonly neuronVisitMap?;
|
|
27
29
|
private readonly instanceNeuronQueue;
|
|
28
30
|
private scheduledCount;
|
|
31
|
+
private reservedActivations;
|
|
29
32
|
private pendingTasks?;
|
|
30
33
|
private failedTasks?;
|
|
31
34
|
private completed?;
|
|
@@ -40,12 +43,18 @@ export declare class CNSStimulation<TNeuron extends TCNSNeuron<any, any>, TDendr
|
|
|
40
43
|
* undefined when there is neither a local nor any global listener.
|
|
41
44
|
*/
|
|
42
45
|
private readonly onResponse?;
|
|
46
|
+
/**
|
|
47
|
+
* The (already wrapped) drain listener, or undefined when there is neither a
|
|
48
|
+
* local nor any global one. When undefined, endTurn() bails immediately, so a
|
|
49
|
+
* stimulation with no drain listener pays only the turn depth counter.
|
|
50
|
+
*/
|
|
51
|
+
private readonly onDrain?;
|
|
43
52
|
/**
|
|
44
53
|
* Track active SCCs: SCC index -> count of active neurons in that SCC.
|
|
45
54
|
* Only allocated when context auto-cleanup is enabled.
|
|
46
55
|
*/
|
|
47
56
|
private readonly activeSccCounts?;
|
|
48
|
-
constructor(cns: CNS<TNeuron, TDendrite>, instanceNeuronQueue: CNSInstanceNeuronQueue<TNeuron>, options?: TCNSStimulationOptions<TCNSStimulationResponse> | undefined, onResponse?: (response: TCNSStimulationResponse) => void | Promise<void
|
|
57
|
+
constructor(cns: CNS<TNeuron, TDendrite>, instanceNeuronQueue: CNSInstanceNeuronQueue<TNeuron>, options?: TCNSStimulationOptions<TCNSStimulationResponse> | undefined, onResponse?: (response: TCNSStimulationResponse) => void | Promise<void>, onDrain?: (drain: TCNSStimulationDrain) => void);
|
|
49
58
|
private pushFailedTask;
|
|
50
59
|
private finalizeResolve;
|
|
51
60
|
private finalizeReject;
|
|
@@ -59,6 +68,29 @@ export declare class CNSStimulation<TNeuron extends TCNSNeuron<any, any>, TDendr
|
|
|
59
68
|
private qEnqueue;
|
|
60
69
|
private qGetQueuedTasks;
|
|
61
70
|
private pump;
|
|
71
|
+
/**
|
|
72
|
+
* Open a synchronous turn. Turns nest: a drain is announced only when the
|
|
73
|
+
* outermost one closes, so an enqueue that happens while the pump is already
|
|
74
|
+
* running does not produce its own boundary.
|
|
75
|
+
*/
|
|
76
|
+
private beginTurn;
|
|
77
|
+
/**
|
|
78
|
+
* Close a synchronous turn and, if it was the outermost and nothing more can
|
|
79
|
+
* run without yielding to the event loop, announce the drain.
|
|
80
|
+
*
|
|
81
|
+
* This is the only place the synchronous frontier is observable. A response
|
|
82
|
+
* cannot serve the purpose: responses are emitted when an activation
|
|
83
|
+
* *finishes*, but a turn just as often ends when one *starts* and returns a
|
|
84
|
+
* promise - at which point there is nothing left to emit a response from.
|
|
85
|
+
*/
|
|
86
|
+
private endTurn;
|
|
87
|
+
/**
|
|
88
|
+
* Activations that exist (or are reserved) but whose dendrite body has not
|
|
89
|
+
* been invoked yet: sitting in the ring buffer, created and held in
|
|
90
|
+
* pendingTasks, or reserved by an array fan-out mid-dispatch. Subscribers
|
|
91
|
+
* parked behind an async onResponse land here too - their body has not run.
|
|
92
|
+
*/
|
|
93
|
+
private get pendingActivations();
|
|
62
94
|
private tryResolveCompleted;
|
|
63
95
|
waitUntilComplete(): Promise<void>;
|
|
64
96
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CNSStimulation.d.ts","sourceRoot":"","sources":["../src/CNSStimulation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACvF,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;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,OAAO,EAAE,+BAA+B,EAAE,MAAM,yCAAyC,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"CNSStimulation.d.ts","sourceRoot":"","sources":["../src/CNSStimulation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACvF,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;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,OAAO,EAAE,+BAA+B,EAAE,MAAM,yCAAyC,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAsEhD,qBAAa,cAAc,CACvB,OAAO,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EACpC,SAAS,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;aA2EvD,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC;aAE5B,OAAO,CAAC,EAAE,sBAAsB,CAAC,uBAAuB,CAAC;IAxE7E,OAAO,CAAC,QAAQ,CAAC,CAA8B;IAM/C,OAAO,CAAC,MAAM,CAAC,CAAuD;IACtE,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,gBAAgB,CAAK;IAG7B,OAAO,CAAC,WAAW,CAAC,CAAyC;IAE7D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAG1B,OAAO,CAAC,SAAS,CAAK;IAEtB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAuB;IACvD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAkC;IACtE,OAAO,CAAC,cAAc,CAAK;IAO3B,OAAO,CAAC,mBAAmB,CAAK;IAGhC,OAAO,CAAC,YAAY,CAAC,CAAyC;IAE9D,OAAO,CAAC,WAAW,CAAC,CAAkD;IAItE,OAAO,CAAC,SAAS,CAAC,CAAgB;IAClC,OAAO,CAAC,gBAAgB,CAAC,CAAa;IACtC,OAAO,CAAC,eAAe,CAAC,CAAmB;IAC3C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,eAAe,CAAoB;IAE3C;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAEF;IAE1B;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAwC;IAEjE;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAsB;gBAGnC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,EAC5C,mBAAmB,EAAE,sBAAsB,CAAC,OAAO,CAAC,EACpC,OAAO,CAAC,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,YAAA,EACzE,UAAU,CAAC,EAAE,CACT,QAAQ,EAAE,uBAAuB,KAChC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI;IAkBnD,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,cAAc;IAMtB,kEAAkE;IAClE,OAAO,KAAK,GAAG,GAEd;IAID,OAAO,KAAK,iBAAiB,GAM5B;IAED,OAAO,CAAC,OAAO;IAiBf,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,YAAY;IAWpB,uEAAuE;IACvE,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,IAAI;IAuEZ;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAIjB;;;;;;;;OAQG;IACH,OAAO,CAAC,OAAO;IAsBf;;;;;OAKG;IACH,OAAO,KAAK,kBAAkB,GAE7B;IAED,OAAO,CAAC,mBAAmB;IAgDpB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBzC;;OAEG;IACI,qBAAqB,IAAI,wBAAwB,CAAC,OAAO,CAAC,EAAE;IASnE;;OAEG;IACI,cAAc,IAAI,KAAK,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAIxE;;OAEG;IACI,UAAU,IAAI,2BAA2B;IAIhD;;OAEG;IACI,YAAY,CACf,KAAK,EAAE,wBAAwB,CAAC,OAAO,CAAC,EAAE,GAC3C,IAAI;IAYP,SAAS,KAAK,kBAAkB,IAAI,OAAO,CAK1C;IAED,SAAS,KAAK,0BAA0B,IAAI,OAAO,CAElD;IAED;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAMjD;;OAEG;IACH,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAMnD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,SAAS,CAAC,yBAAyB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO;IAS7D,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAUnD,SAAS,CAAC,yBAAyB,CAC/B,UAAU,EAAE,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,EAC9C,WAAW,CAAC,EAAE,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IA6BpD,OAAO,CAAC,qBAAqB;IAqE7B,OAAO,CAAC,UAAU;IAgJlB,SAAS,CAAC,0BAA0B,CAChC,OAAO,EAAE,OAAO,GAAG,SAAS,EAC5B,WAAW,CAAC,EAAE,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAChD,qBAAqB,CAAC,EAChB,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAClC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,EAC1C,KAAK,CAAC,EAAE,GAAG,GACZ,IAAI;IA6CP,SAAS,CAAC,eAAe,CACrB,OAAO,EAAE,OAAO,GAAG,SAAS,EAC5B,WAAW,CAAC,EAAE,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAChD,YAAY,CAAC,EAAE,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EACjD,KAAK,CAAC,EAAE,GAAG,GACZ,IAAI;IAqJA,gBAAgB,CACnB,eAAe,EACT,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAClC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,GAC3C,IAAI;CA0BV"}
|
package/dist/factory/index.d.ts
CHANGED
|
@@ -1,109 +1,106 @@
|
|
|
1
|
+
import { CNS } from '../CNS';
|
|
1
2
|
import { CNSCollateral } from '../CNSCollateral';
|
|
2
3
|
import { CNSPersistOptionsRegistry } from '../CNSPersistOptionsRegistry';
|
|
3
4
|
import { TCNSAxon } from '../types/TCNSAxon';
|
|
5
|
+
import { TCNSOptions } from '../types/TCNSOptions';
|
|
4
6
|
import { TCNSDendrite } from '../types/TCNSDendrite';
|
|
5
|
-
import {
|
|
7
|
+
import { TCNSHandlerContext } from '../types/TCNSHandlerContext';
|
|
6
8
|
import { TNCNeuronResponseReturn } from '../types/TCNSNeuronResponseReturn';
|
|
7
9
|
import { TCNSNeuron } from '../types/TCNSNeuron';
|
|
8
|
-
import { ICNS } from '../interfaces/ICNS';
|
|
9
10
|
import { TCNSModality } from '../types/TCNSModality';
|
|
10
11
|
import { TCNSAfferentPath } from '../types/TCNSAfferentPath';
|
|
11
12
|
export declare const collateral: <TPayload = undefined>() => CNSCollateral<TPayload>;
|
|
12
13
|
type CollateralPayloadUnion<TCollaterals extends readonly CNSCollateral<unknown>[]> = {
|
|
13
14
|
[K in keyof TCollaterals]: TCollaterals[K] extends CNSCollateral<infer P> ? P : never;
|
|
14
15
|
}[number];
|
|
15
|
-
type InterNeuronAPI<TContextValue, TAxonType extends TCNSAxon = TCNSAxon> = {
|
|
16
|
+
type InterNeuronAPI<TContextValue, TAxonType extends TCNSAxon = TCNSAxon, TGlobal = unknown> = {
|
|
16
17
|
axon: TAxonType;
|
|
17
18
|
concurrency?: number;
|
|
18
19
|
maxDuration?: number;
|
|
19
|
-
dendrites: TCNSDendrite<TContextValue, CNSCollateral<unknown>, TAxonType>[];
|
|
20
|
-
setConcurrency: (n: number | undefined) => InterNeuronAPI<TContextValue, TAxonType>;
|
|
21
|
-
setMaxDuration: (ms: number | undefined) => InterNeuronAPI<TContextValue, TAxonType>;
|
|
20
|
+
dendrites: TCNSDendrite<TContextValue, CNSCollateral<unknown>, TAxonType, TGlobal>[];
|
|
21
|
+
setConcurrency: (n: number | undefined) => InterNeuronAPI<TContextValue, TAxonType, TGlobal>;
|
|
22
|
+
setMaxDuration: (ms: number | undefined) => InterNeuronAPI<TContextValue, TAxonType, TGlobal>;
|
|
22
23
|
bind: <TFollowAxon extends Record<string, CNSCollateral<unknown>>>(axon: TFollowAxon, dendrites: {
|
|
23
|
-
[K in keyof TFollowAxon]: TCNSDendrite<TContextValue, TFollowAxon[K], TAxonType> | TCNSDendrite<TContextValue, TFollowAxon[K], TAxonType>['response'];
|
|
24
|
-
}) => InterNeuronAPI<TContextValue, TAxonType>;
|
|
24
|
+
[K in keyof TFollowAxon]: TCNSDendrite<TContextValue, TFollowAxon[K], TAxonType, TGlobal> | TCNSDendrite<TContextValue, TFollowAxon[K], TAxonType, TGlobal>['response'];
|
|
25
|
+
}) => InterNeuronAPI<TContextValue, TAxonType, TGlobal>;
|
|
25
26
|
dendrite: {
|
|
26
27
|
<TSenderCollateral extends CNSCollateral<unknown>>(s: {
|
|
27
28
|
collateral: TSenderCollateral;
|
|
28
|
-
response: (payload: TSenderCollateral extends CNSCollateral<infer P> ? P : never, axon: TAxonType, ctx:
|
|
29
|
-
|
|
30
|
-
cns?: ICNS<any, any>;
|
|
31
|
-
stimulation?: any;
|
|
32
|
-
}) => TNCNeuronResponseReturn<TAxonType>;
|
|
33
|
-
}): InterNeuronAPI<TContextValue, TAxonType>;
|
|
29
|
+
response: (payload: TSenderCollateral extends CNSCollateral<infer P> ? P : never, axon: TAxonType, ctx: TCNSHandlerContext<TContextValue, TGlobal>) => TNCNeuronResponseReturn<TAxonType>;
|
|
30
|
+
}): InterNeuronAPI<TContextValue, TAxonType, TGlobal>;
|
|
34
31
|
<TCollaterals extends readonly [
|
|
35
32
|
CNSCollateral<unknown>,
|
|
36
33
|
...CNSCollateral<unknown>[]
|
|
37
34
|
]>(s: {
|
|
38
35
|
collateral: TCollaterals;
|
|
39
|
-
response: (payload: CollateralPayloadUnion<TCollaterals>, axon: TAxonType, ctx:
|
|
40
|
-
|
|
41
|
-
cns?: ICNS<any, any>;
|
|
42
|
-
stimulation?: any;
|
|
43
|
-
}) => TNCNeuronResponseReturn<TAxonType>;
|
|
44
|
-
}): InterNeuronAPI<TContextValue, TAxonType>;
|
|
36
|
+
response: (payload: CollateralPayloadUnion<TCollaterals>, axon: TAxonType, ctx: TCNSHandlerContext<TContextValue, TGlobal>) => TNCNeuronResponseReturn<TAxonType>;
|
|
37
|
+
}): InterNeuronAPI<TContextValue, TAxonType, TGlobal>;
|
|
45
38
|
<TPayloadUnion>(s: {
|
|
46
39
|
collateral: CNSCollateral<unknown>[];
|
|
47
|
-
response: (payload: TPayloadUnion, axon: TAxonType, ctx:
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
stimulation?: any;
|
|
51
|
-
}) => TNCNeuronResponseReturn<TAxonType>;
|
|
52
|
-
}): InterNeuronAPI<TContextValue, TAxonType>;
|
|
53
|
-
(s: TCNSDendrite<TContextValue, CNSCollateral<unknown>, TAxonType>): InterNeuronAPI<TContextValue, TAxonType>;
|
|
40
|
+
response: (payload: TPayloadUnion, axon: TAxonType, ctx: TCNSHandlerContext<TContextValue, TGlobal>) => TNCNeuronResponseReturn<TAxonType>;
|
|
41
|
+
}): InterNeuronAPI<TContextValue, TAxonType, TGlobal>;
|
|
42
|
+
(s: TCNSDendrite<TContextValue, CNSCollateral<unknown>, TAxonType, TGlobal>): InterNeuronAPI<TContextValue, TAxonType, TGlobal>;
|
|
54
43
|
};
|
|
55
44
|
modalityDendrite: {
|
|
56
45
|
<TSenderCollateral extends CNSCollateral<unknown>, TResult>(s: {
|
|
57
46
|
collateral: TSenderCollateral;
|
|
58
47
|
modality: TCNSModality;
|
|
59
|
-
afferentPaths?: Map<TCNSAfferentPath, (payload: TSenderCollateral extends CNSCollateral<infer P> ? P : never, axon: TAxonType, ctx:
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}) => TResult | Promise<TResult>>;
|
|
64
|
-
default?: (payload: TSenderCollateral extends CNSCollateral<infer P> ? P : never, axon: TAxonType, ctx: TCNSLocalContextValueStore<TContextValue> & {
|
|
65
|
-
abortSignal?: AbortSignal;
|
|
66
|
-
cns?: ICNS<any, any>;
|
|
67
|
-
stimulation?: any;
|
|
68
|
-
}) => TResult | Promise<TResult>;
|
|
69
|
-
output: (result: TResult, axon: TAxonType, ctx: TCNSLocalContextValueStore<TContextValue> & {
|
|
70
|
-
abortSignal?: AbortSignal;
|
|
71
|
-
cns?: ICNS<any, any>;
|
|
72
|
-
stimulation?: any;
|
|
73
|
-
}) => TNCNeuronResponseReturn<TAxonType>;
|
|
74
|
-
}): InterNeuronAPI<TContextValue, TAxonType>;
|
|
48
|
+
afferentPaths?: Map<TCNSAfferentPath, (payload: TSenderCollateral extends CNSCollateral<infer P> ? P : never, axon: TAxonType, ctx: TCNSHandlerContext<TContextValue, TGlobal>) => TResult | Promise<TResult>>;
|
|
49
|
+
default?: (payload: TSenderCollateral extends CNSCollateral<infer P> ? P : never, axon: TAxonType, ctx: TCNSHandlerContext<TContextValue, TGlobal>) => TResult | Promise<TResult>;
|
|
50
|
+
output: (result: TResult, axon: TAxonType, ctx: TCNSHandlerContext<TContextValue, TGlobal>) => TNCNeuronResponseReturn<TAxonType>;
|
|
51
|
+
}): InterNeuronAPI<TContextValue, TAxonType, TGlobal>;
|
|
75
52
|
<TSenderCollateral extends CNSCollateral<unknown>, TResult>(s: {
|
|
76
53
|
collateral: TSenderCollateral;
|
|
77
54
|
modalities: Array<{
|
|
78
55
|
modality: TCNSModality;
|
|
79
|
-
afferentPaths?: Map<TCNSAfferentPath, (payload: TSenderCollateral extends CNSCollateral<infer P> ? P : never, axon: TAxonType, ctx:
|
|
80
|
-
|
|
81
|
-
cns?: ICNS<any, any>;
|
|
82
|
-
stimulation?: any;
|
|
83
|
-
}) => TResult | Promise<TResult>>;
|
|
84
|
-
default?: (payload: TSenderCollateral extends CNSCollateral<infer P> ? P : never, axon: TAxonType, ctx: TCNSLocalContextValueStore<TContextValue> & {
|
|
85
|
-
abortSignal?: AbortSignal;
|
|
86
|
-
cns?: ICNS<any, any>;
|
|
87
|
-
stimulation?: any;
|
|
88
|
-
}) => TResult | Promise<TResult>;
|
|
56
|
+
afferentPaths?: Map<TCNSAfferentPath, (payload: TSenderCollateral extends CNSCollateral<infer P> ? P : never, axon: TAxonType, ctx: TCNSHandlerContext<TContextValue, TGlobal>) => TResult | Promise<TResult>>;
|
|
57
|
+
default?: (payload: TSenderCollateral extends CNSCollateral<infer P> ? P : never, axon: TAxonType, ctx: TCNSHandlerContext<TContextValue, TGlobal>) => TResult | Promise<TResult>;
|
|
89
58
|
}>;
|
|
90
|
-
default?: (payload: TSenderCollateral extends CNSCollateral<infer P> ? P : never, axon: TAxonType, ctx:
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
stimulation?: any;
|
|
94
|
-
}) => TResult | Promise<TResult>;
|
|
95
|
-
output: (result: TResult, axon: TAxonType, ctx: TCNSLocalContextValueStore<TContextValue> & {
|
|
96
|
-
abortSignal?: AbortSignal;
|
|
97
|
-
cns?: ICNS<any, any>;
|
|
98
|
-
stimulation?: any;
|
|
99
|
-
}) => TNCNeuronResponseReturn<TAxonType>;
|
|
100
|
-
}): InterNeuronAPI<TContextValue, TAxonType>;
|
|
59
|
+
default?: (payload: TSenderCollateral extends CNSCollateral<infer P> ? P : never, axon: TAxonType, ctx: TCNSHandlerContext<TContextValue, TGlobal>) => TResult | Promise<TResult>;
|
|
60
|
+
output: (result: TResult, axon: TAxonType, ctx: TCNSHandlerContext<TContextValue, TGlobal>) => TNCNeuronResponseReturn<TAxonType>;
|
|
61
|
+
}): InterNeuronAPI<TContextValue, TAxonType, TGlobal>;
|
|
101
62
|
};
|
|
102
63
|
};
|
|
103
|
-
export declare const neuron: <TContextValue, TProvidedAxon extends Record<string, CNSCollateral<unknown
|
|
104
|
-
|
|
105
|
-
|
|
64
|
+
export declare const neuron: <TContextValue, TProvidedAxon extends Record<string, CNSCollateral<unknown>>, TGlobal = unknown>(axon: TProvidedAxon) => InterNeuronAPI<TContextValue, TCNSAxon<TProvidedAxon>, TGlobal>;
|
|
65
|
+
/**
|
|
66
|
+
* A composable neuron factory. Each `.withX<T>()` returns a *new typed view* of
|
|
67
|
+
* the same underlying builder (the layers are type-only — zero runtime cost, no
|
|
68
|
+
* per-activation overhead), so you bake your ctx additions once and reuse them
|
|
69
|
+
* everywhere. Layers compose in any order and never touch the handler signature.
|
|
70
|
+
*
|
|
71
|
+
* `TExt` is the accumulated ctx extension: each layer *intersects* its own fields
|
|
72
|
+
* into it, so a base factory (`TExt = unknown`) hands neurons the plain ctx bag —
|
|
73
|
+
* nothing is forced onto anyone who didn't ask for it. `withGlobal<T>()` is the
|
|
74
|
+
* built-in layer; make `T` an object to carry as much as you want (store, clock,
|
|
75
|
+
* logger, …) through the single runtime channel wired at `createCNS`/`new CNS`.
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* // src/neurons/factory.ts — ctx shape baked once
|
|
79
|
+
* type TGlobal = { store: Store; now(): number; newId(): string };
|
|
80
|
+
* export const { neuron } = neuronFactory().withGlobal<TGlobal>().withCtx<TCtx>();
|
|
81
|
+
*
|
|
82
|
+
* // any neuron file — plain value, reaches deps via ctx.global
|
|
83
|
+
* export const taskNeuron = neuron({ taskCreated }).bind({ createTask }, {
|
|
84
|
+
* createTask: ({ title }, axon, { global }) =>
|
|
85
|
+
* axon.taskCreated.createSignal({ id: global.newId(), title, at: global.now() }),
|
|
86
|
+
* });
|
|
87
|
+
*/
|
|
88
|
+
export type TNeuronFactory<TContextValue, TExt = unknown> = {
|
|
89
|
+
/** Bake the per-stimulation, per-neuron context value type (`ctx.get()/set()`). */
|
|
90
|
+
withCtx: <T>() => TNeuronFactory<T, TExt>;
|
|
91
|
+
/** Add `{ global: T }` to ctx; the value is injected once at `createCNS`/`new CNS`. */
|
|
92
|
+
withGlobal: <T>() => TNeuronFactory<TContextValue, TExt & {
|
|
93
|
+
global: T;
|
|
94
|
+
}>;
|
|
95
|
+
neuron: <TProvidedAxon extends Record<string, CNSCollateral<unknown>>>(axon: TProvidedAxon) => InterNeuronAPI<TContextValue, TCNSAxon<TProvidedAxon>, TExt>;
|
|
106
96
|
};
|
|
97
|
+
export declare const neuronFactory: <TContextValue = undefined, TExt = unknown>() => TNeuronFactory<TContextValue, TExt>;
|
|
98
|
+
/** Sugar: `neuronFactory().withCtx<T>()`. Still exposes `.neuron`, so existing usage is unchanged. */
|
|
99
|
+
export declare const withCtx: <TContextValue>() => TNeuronFactory<TContextValue>;
|
|
100
|
+
/** Sugar: `neuronFactory().withGlobal<T>()`. */
|
|
101
|
+
export declare const withGlobal: <T>() => TNeuronFactory<undefined, {
|
|
102
|
+
global: T;
|
|
103
|
+
}>;
|
|
107
104
|
export declare const afferentPath: (parentAfferentPath?: TCNSAfferentPath) => TCNSAfferentPath;
|
|
108
105
|
export declare const modality: (afferentPaths: Record<string | number, TCNSAfferentPath>) => TCNSModality;
|
|
109
106
|
type CNSRegistryValue<N extends TCNSNeuron<any, any>> = N | (N extends TCNSNeuron<any, infer TAxon> ? {
|
|
@@ -129,5 +126,35 @@ type CNSRegistryValue<N extends TCNSNeuron<any, any>> = N | (N extends TCNSNeuro
|
|
|
129
126
|
* });
|
|
130
127
|
*/
|
|
131
128
|
export declare const createPersistRegistry: <TMap extends Record<string, TCNSNeuron<any, any>>>(namedNeurons: { [K in keyof TMap]: CNSRegistryValue<TMap[K]>; }) => CNSPersistOptionsRegistry;
|
|
129
|
+
/**
|
|
130
|
+
* Creates a CNS and its CNSPersistOptionsRegistry from a single plain object of
|
|
131
|
+
* named neurons, so the neuron set is listed exactly once.
|
|
132
|
+
*
|
|
133
|
+
* `cns` is the runtime engine; `registry` carries the names used by devtools,
|
|
134
|
+
* mcp and persistence. Both derive from the same map, so they can never drift.
|
|
135
|
+
* If you don't need naming/persistence, just use `new CNS([...])` directly —
|
|
136
|
+
* this factory is purely additive.
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* const { cns, registry } = createCNS({
|
|
140
|
+
* task: createTaskNeuron(store),
|
|
141
|
+
* comment: createCommentNeuron(store),
|
|
142
|
+
* });
|
|
143
|
+
*
|
|
144
|
+
* // Explicit names / collateral names work exactly like createPersistRegistry:
|
|
145
|
+
* const { cns, registry } = createCNS({
|
|
146
|
+
* 'task-neuron': { neuron: taskNeuron, collaterals: { taskCreated: 'task-created' } },
|
|
147
|
+
* });
|
|
148
|
+
*
|
|
149
|
+
* // Inject the shared `global` once — it surfaces as `ctx.global` in every neuron
|
|
150
|
+
* // (type it once via `neuronFactory().withGlobal<T>()`). Swappable per instance:
|
|
151
|
+
* const { cns } = createCNS(map, { global: { store, now, newId } });
|
|
152
|
+
*/
|
|
153
|
+
export declare const createCNS: <TMap extends Record<string, TCNSNeuron<any, any>>, TGlobal = undefined>(namedNeurons: { [K in keyof TMap]: CNSRegistryValue<TMap[K]>; }, options?: TCNSOptions & {
|
|
154
|
+
global?: TGlobal;
|
|
155
|
+
}) => {
|
|
156
|
+
cns: CNS<TCNSNeuron<any, any>>;
|
|
157
|
+
registry: CNSPersistOptionsRegistry;
|
|
158
|
+
};
|
|
132
159
|
export {};
|
|
133
160
|
//# 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,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/factory/index.ts"],"names":[],"mappings":"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"}
|