@cnstra/core 2.3.0 → 2.4.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 +7 -1
- package/dist/CNS.d.ts.map +1 -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 +29 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -7
- package/dist/index.js.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/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
|
@@ -26,7 +26,13 @@ export declare class CNS<TNeuron extends TCNSNeuron<any, any>, TDendrite extends
|
|
|
26
26
|
* Global response listeners applied to every stimulation.
|
|
27
27
|
*/
|
|
28
28
|
private readonly globalResponseListeners;
|
|
29
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Shared, app/organism-wide value handed to every dendrite as `ctx.global`.
|
|
31
|
+
* Stored untyped (the type is baked into neurons via `neuronFactory().withGlobal<T>()`);
|
|
32
|
+
* CNS is just a passthrough carrier, so injecting it here never touches the hot path.
|
|
33
|
+
*/
|
|
34
|
+
readonly global?: unknown;
|
|
35
|
+
constructor(neurons: TNeuron[], options?: TCNSOptions | undefined, global?: unknown);
|
|
30
36
|
addResponseListener(listener: (response: TCNSStimulationResponse) => void | Promise<void>): () => void;
|
|
31
37
|
private wrapOnResponse;
|
|
32
38
|
stimulate(signalOrSignals: TCNSSignal<CNSCollateral<unknown>> | TCNSSignal<CNSCollateral<unknown>>[], options?: TCNSStimulationOptions<TCNSStimulationResponse>): CNSStimulation<TNeuron, TDendrite>;
|
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,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;IA6B7B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE;aACrB,OAAO,CAAC,EAAE,WAAW;IA5BzC;;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;;;;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,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;IAYrC;;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;CAWxC"}
|
|
@@ -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":"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"}
|
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":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,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,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAG7D,eAAO,MAAM,UAAU,GAAI,QAAQ,GAAG,SAAS,8BACd,CAAC;AAKlC,KAAK,sBAAsB,CACvB,YAAY,SAAS,SAAS,aAAa,CAAC,OAAO,CAAC,EAAE,IACtD;KACC,CAAC,IAAI,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GACnE,CAAC,GACD,KAAK;CACd,CAAC,MAAM,CAAC,CAAC;AAEV,KAAK,cAAc,CACf,aAAa,EACb,SAAS,SAAS,QAAQ,GAAG,QAAQ,EACrC,OAAO,GAAG,OAAO,IACjB;IACA,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,YAAY,CACnB,aAAa,EACb,aAAa,CAAC,OAAO,CAAC,EACtB,SAAS,EACT,OAAO,CACV,EAAE,CAAC;IACJ,cAAc,EAAE,CACZ,CAAC,EAAE,MAAM,GAAG,SAAS,KACpB,cAAc,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACvD,cAAc,EAAE,CACZ,EAAE,EAAE,MAAM,GAAG,SAAS,KACrB,cAAc,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACvD,IAAI,EAAE,CAAC,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,EAC7D,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE;SACN,CAAC,IAAI,MAAM,WAAW,GACjB,YAAY,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,GAC/D,YAAY,CACR,aAAa,EACb,WAAW,CAAC,CAAC,CAAC,EACd,SAAS,EACT,OAAO,CACV,CAAC,UAAU,CAAC;KACtB,KACA,cAAc,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACvD,QAAQ,EAAE;QACN,CAAC,iBAAiB,SAAS,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YAClD,UAAU,EAAE,iBAAiB,CAAC;YAC9B,QAAQ,EAAE,CACN,OAAO,EAAE,iBAAiB,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GACnD,CAAC,GACD,KAAK,EACX,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,kBAAkB,CAAC,aAAa,EAAE,OAAO,CAAC,KAC9C,uBAAuB,CAAC,SAAS,CAAC,CAAC;SAC3C,GAAG,cAAc,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACtD,CACI,YAAY,SAAS,SAAS;YAC1B,aAAa,CAAC,OAAO,CAAC;YACtB,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE;SAC9B,EACH,CAAC,EAAE;YACD,UAAU,EAAE,YAAY,CAAC;YACzB,QAAQ,EAAE,CACN,OAAO,EAAE,sBAAsB,CAAC,YAAY,CAAC,EAC7C,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,kBAAkB,CAAC,aAAa,EAAE,OAAO,CAAC,KAC9C,uBAAuB,CAAC,SAAS,CAAC,CAAC;SAC3C,GAAG,cAAc,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC,aAAa,EAAE,CAAC,EAAE;YACf,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,QAAQ,EAAE,CACN,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,kBAAkB,CAAC,aAAa,EAAE,OAAO,CAAC,KAC9C,uBAAuB,CAAC,SAAS,CAAC,CAAC;SAC3C,GAAG,cAAc,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACtD,CACI,CAAC,EAAE,YAAY,CACX,aAAa,EACb,aAAa,CAAC,OAAO,CAAC,EACtB,SAAS,EACT,OAAO,CACV,GACF,cAAc,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;KACxD,CAAC;IACF,gBAAgB,EAAE;QACd,CAAC,iBAAiB,SAAS,aAAa,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;YAC3D,UAAU,EAAE,iBAAiB,CAAC;YAC9B,QAAQ,EAAE,YAAY,CAAC;YACvB,aAAa,CAAC,EAAE,GAAG,CACf,gBAAgB,EAChB,CACI,OAAO,EAAE,iBAAiB,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GACnD,CAAC,GACD,KAAK,EACX,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,kBAAkB,CAAC,aAAa,EAAE,OAAO,CAAC,KAC9C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAClC,CAAC;YACF,OAAO,CAAC,EAAE,CACN,OAAO,EAAE,iBAAiB,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GACnD,CAAC,GACD,KAAK,EACX,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,kBAAkB,CAAC,aAAa,EAAE,OAAO,CAAC,KAC9C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAChC,MAAM,EAAE,CACJ,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,kBAAkB,CAAC,aAAa,EAAE,OAAO,CAAC,KAC9C,uBAAuB,CAAC,SAAS,CAAC,CAAC;SAC3C,GAAG,cAAc,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC,iBAAiB,SAAS,aAAa,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;YAC3D,UAAU,EAAE,iBAAiB,CAAC;YAC9B,UAAU,EAAE,KAAK,CAAC;gBACd,QAAQ,EAAE,YAAY,CAAC;gBACvB,aAAa,CAAC,EAAE,GAAG,CACf,gBAAgB,EAChB,CACI,OAAO,EAAE,iBAAiB,SAAS,aAAa,CAC5C,MAAM,CAAC,CACV,GACK,CAAC,GACD,KAAK,EACX,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,kBAAkB,CAAC,aAAa,EAAE,OAAO,CAAC,KAC9C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAClC,CAAC;gBACF,OAAO,CAAC,EAAE,CACN,OAAO,EAAE,iBAAiB,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GACnD,CAAC,GACD,KAAK,EACX,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,kBAAkB,CAAC,aAAa,EAAE,OAAO,CAAC,KAC9C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;aACnC,CAAC,CAAC;YACH,OAAO,CAAC,EAAE,CACN,OAAO,EAAE,iBAAiB,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GACnD,CAAC,GACD,KAAK,EACX,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,kBAAkB,CAAC,aAAa,EAAE,OAAO,CAAC,KAC9C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAChC,MAAM,EAAE,CACJ,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,kBAAkB,CAAC,aAAa,EAAE,OAAO,CAAC,KAC9C,uBAAuB,CAAC,SAAS,CAAC,CAAC;SAC3C,GAAG,cAAc,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;KACzD,CAAC;CACL,CAAC;AAWF,eAAO,MAAM,MAAM,GACf,aAAa,EACb,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,EAC5D,OAAO,GAAG,OAAO,EAEjB,MAAM,aAAa,KACpB,cAAc,CAAC,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CA4MhE,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,MAAM,cAAc,CAAC,aAAa,EAAE,IAAI,GAAG,OAAO,IAAI;IACxD,mFAAmF;IACnF,OAAO,EAAE,CAAC,CAAC,OAAO,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC1C,uFAAuF;IACvF,UAAU,EAAE,CAAC,CAAC,OAAO,cAAc,CAAC,aAAa,EAAE,IAAI,GAAG;QAAE,MAAM,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IACzE,MAAM,EAAE,CAAC,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,EACjE,IAAI,EAAE,aAAa,KAClB,cAAc,CAAC,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,CAAC;CACrE,CAAC;AAEF,eAAO,MAAM,aAAa,GACtB,aAAa,GAAG,SAAS,EACzB,IAAI,GAAG,OAAO,OACb,cAAc,CAAC,aAAa,EAAE,IAAI,CAUtC,CAAC;AAEF,sGAAsG;AACtG,eAAO,MAAM,OAAO,GAAI,aAAa,OAAK,cAAc,CAAC,aAAa,CACpC,CAAC;AAEnC,gDAAgD;AAChD,eAAO,MAAM,UAAU,GAAI,CAAC,OAAK,cAAc,CAAC,SAAS,EAAE;IAAE,MAAM,EAAE,CAAC,CAAA;CAAE,CAC3B,CAAC;AAE9C,eAAO,MAAM,YAAY,GACrB,qBAAqB,gBAAgB,KACtC,gBAMF,CAAC;AAEF,eAAO,MAAM,QAAQ,GACjB,eAAe,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,gBAAgB,CAAC,KACzD,YAIF,CAAC;AAqBF,KAAK,gBAAgB,CAAC,CAAC,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,IAC9C,CAAC,GACD,CAAC,CAAC,SAAS,UAAU,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,GACnC;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,WAAW,CAAC,EAAE;SAAG,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,MAAM;KAAE,CAAA;CAAE,GAC5D,KAAK,CAAC,CAAC;AAEjB;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,qBAAqB,GAAI,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EACnF,cAAc,GAAG,CAAC,IAAI,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAE,KAC/D,yBAoBF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,SAAS,GAClB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EACjD,OAAO,GAAG,SAAS,EAEnB,cAAc,GAAG,CAAC,IAAI,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAE,EAC9D,UAAU,WAAW,GAAG;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,KAC7C;IACC,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/B,QAAQ,EAAE,yBAAyB,CAAC;CAUvC,CAAC"}
|
package/dist/index.cjs
CHANGED
|
@@ -33,6 +33,12 @@ var CNSDendriteContext = class {
|
|
|
33
33
|
this.abortSignal = abortSignal;
|
|
34
34
|
this.cns = cns;
|
|
35
35
|
}
|
|
36
|
+
// Prototype getter, not a constructor field: the per-activation allocation is
|
|
37
|
+
// unchanged (still 4 fields) and you only pay a single `cns.global` read on the
|
|
38
|
+
// dendrites that actually reach for it. Value getter, so `{ global }` destructuring is safe.
|
|
39
|
+
get global() {
|
|
40
|
+
return this.cns.global;
|
|
41
|
+
}
|
|
36
42
|
get() {
|
|
37
43
|
return this.stimulation.getContext().get(this.neuron);
|
|
38
44
|
}
|
|
@@ -944,7 +950,7 @@ var CNSNetwork = class {
|
|
|
944
950
|
|
|
945
951
|
// src/CNS.ts
|
|
946
952
|
var CNS = class {
|
|
947
|
-
constructor(neurons, options) {
|
|
953
|
+
constructor(neurons, options, global) {
|
|
948
954
|
this.neurons = neurons;
|
|
949
955
|
this.options = options;
|
|
950
956
|
/**
|
|
@@ -957,6 +963,7 @@ var CNS = class {
|
|
|
957
963
|
*/
|
|
958
964
|
this.globalResponseListeners = [];
|
|
959
965
|
this.network = new CNSNetwork(this.neurons);
|
|
966
|
+
this.global = global;
|
|
960
967
|
}
|
|
961
968
|
addResponseListener(listener) {
|
|
962
969
|
this.globalResponseListeners.push(listener);
|
|
@@ -1282,11 +1289,16 @@ var neuron = (axon) => {
|
|
|
1282
1289
|
};
|
|
1283
1290
|
return api;
|
|
1284
1291
|
};
|
|
1285
|
-
var
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1292
|
+
var neuronFactory = () => {
|
|
1293
|
+
const factory = {
|
|
1294
|
+
withCtx: () => factory,
|
|
1295
|
+
withGlobal: () => factory,
|
|
1296
|
+
neuron: (axon) => neuron(axon)
|
|
1297
|
+
};
|
|
1298
|
+
return factory;
|
|
1299
|
+
};
|
|
1300
|
+
var withCtx = () => neuronFactory();
|
|
1301
|
+
var withGlobal = () => neuronFactory();
|
|
1290
1302
|
var afferentPath = (parentAfferentPath) => {
|
|
1291
1303
|
return {
|
|
1292
1304
|
...parentAfferentPath !== void 0 && {
|
|
@@ -1315,6 +1327,14 @@ var createPersistRegistry = (namedNeurons) => {
|
|
|
1315
1327
|
}
|
|
1316
1328
|
return registry;
|
|
1317
1329
|
};
|
|
1330
|
+
var createCNS = (namedNeurons, options) => {
|
|
1331
|
+
const neurons = Object.values(namedNeurons).map(
|
|
1332
|
+
(entry) => entry && typeof entry === "object" && "neuron" in entry ? entry.neuron : entry
|
|
1333
|
+
);
|
|
1334
|
+
const cns = new CNS(neurons, options, options?.global);
|
|
1335
|
+
const registry = createPersistRegistry(namedNeurons);
|
|
1336
|
+
return { cns, registry };
|
|
1337
|
+
};
|
|
1318
1338
|
|
|
1319
1339
|
exports.CNS = CNS;
|
|
1320
1340
|
exports.CNSCollateral = CNSCollateral;
|
|
@@ -1323,9 +1343,12 @@ exports.CNSStimulationContextStore = CNSStimulationContextStore;
|
|
|
1323
1343
|
exports.CNSStimulationGate = CNSStimulationGate;
|
|
1324
1344
|
exports.afferentPath = afferentPath;
|
|
1325
1345
|
exports.collateral = collateral;
|
|
1346
|
+
exports.createCNS = createCNS;
|
|
1326
1347
|
exports.createPersistRegistry = createPersistRegistry;
|
|
1327
1348
|
exports.modality = modality;
|
|
1328
1349
|
exports.neuron = neuron;
|
|
1350
|
+
exports.neuronFactory = neuronFactory;
|
|
1329
1351
|
exports.withCtx = withCtx;
|
|
1352
|
+
exports.withGlobal = withGlobal;
|
|
1330
1353
|
//# sourceMappingURL=index.cjs.map
|
|
1331
1354
|
//# sourceMappingURL=index.cjs.map
|