@cnstra/core 1.5.2 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +103 -29
- package/dist/CNS.d.ts +5 -3
- package/dist/CNS.d.ts.map +1 -1
- package/dist/CNSFunctionalQueue.d.ts +3 -3
- package/dist/CNSFunctionalQueue.d.ts.map +1 -1
- package/dist/CNSStimulation.d.ts +10 -6
- package/dist/CNSStimulation.d.ts.map +1 -1
- package/dist/factory/index.d.ts +2 -0
- package/dist/factory/index.d.ts.map +1 -1
- package/dist/index.cjs +177 -39
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +177 -39
- package/dist/index.js.map +1 -1
- package/dist/interfaces/ICNS.d.ts +4 -2
- package/dist/interfaces/ICNS.d.ts.map +1 -1
- package/dist/types/TCNSDendrite.d.ts +1 -0
- package/dist/types/TCNSDendrite.d.ts.map +1 -1
- package/dist/types/TCNSNeuron.d.ts +2 -0
- package/dist/types/TCNSNeuron.d.ts.map +1 -1
- package/dist/types/TCNSNeuronResponseReturn.d.ts +1 -1
- package/dist/types/TCNSNeuronResponseReturn.d.ts.map +1 -1
- package/dist/types/TCNSSerializedSignal.d.ts +10 -0
- package/dist/types/TCNSSerializedSignal.d.ts.map +1 -0
- package/dist/types/TCNSSignal.d.ts +1 -2
- package/dist/types/TCNSSignal.d.ts.map +1 -1
- package/dist/types/TCNSStimulationOptions.d.ts +1 -1
- package/dist/types/TCNSStimulationOptions.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
**Graph-routed, type-safe orchestration for reactive apps — no global event bus.**
|
|
4
4
|
|
|
5
|
+
📚 **[Full Documentation](https://cnstra.org/)** | [Quick Start](https://cnstra.org/docs/core/quick-start) | [API Reference](https://cnstra.org/docs/core/api) | [Recipes](https://cnstra.org/docs/recipes/cancel)
|
|
6
|
+
|
|
5
7
|
## 🧠 What is CNStra?
|
|
6
8
|
|
|
7
9
|
**CNStra (Central Nervous System Orchestrator)** models your app as a **typed neuron graph**.
|
|
@@ -110,6 +112,12 @@ const myNeuron = neuron('my-neuron', {
|
|
|
110
112
|
|
|
111
113
|
Adds a dendrite (input receptor) to a neuron. Returns the neuron for chaining.
|
|
112
114
|
|
|
115
|
+
The `response` function can return:
|
|
116
|
+
- A single signal: `axon.output.createSignal(data)`
|
|
117
|
+
- An array of signals: `[axon.output1.createSignal(data1), axon.output2.createSignal(data2)]`
|
|
118
|
+
- A Promise of either
|
|
119
|
+
- `undefined`/`void` to end processing
|
|
120
|
+
|
|
113
121
|
```typescript
|
|
114
122
|
myNeuron
|
|
115
123
|
.dendrite({
|
|
@@ -119,6 +127,8 @@ myNeuron
|
|
|
119
127
|
if (ctx.abortSignal?.aborted) return; // graceful cancel
|
|
120
128
|
const prev = ctx.get();
|
|
121
129
|
ctx.set({ ...prev, handled: true });
|
|
130
|
+
|
|
131
|
+
// Return single signal or array of signals
|
|
122
132
|
return axon.output.createSignal(result);
|
|
123
133
|
}
|
|
124
134
|
});
|
|
@@ -189,20 +199,27 @@ const unsubscribe = cns.addResponseListener(r => {
|
|
|
189
199
|
|
|
190
200
|
#### `stimulate()` Method
|
|
191
201
|
```typescript
|
|
192
|
-
cns.stimulate(signal, options?)
|
|
202
|
+
cns.stimulate(signal | signal[], options?)
|
|
193
203
|
```
|
|
194
204
|
|
|
195
205
|
**Parameters:**
|
|
196
|
-
- `signal`: A signal created by `collateral.createSignal(payload)`
|
|
206
|
+
- `signal`: A signal or array of signals created by `collateral.createSignal(payload)`
|
|
197
207
|
- `options`: Optional stimulation configuration
|
|
198
208
|
|
|
199
209
|
**Returns:** `Promise<void>` that resolves when stimulation completes
|
|
200
210
|
|
|
201
211
|
**Example:**
|
|
202
212
|
```typescript
|
|
213
|
+
// Single signal
|
|
203
214
|
await cns.stimulate(
|
|
204
215
|
userCreated.createSignal({ id: '123', name: 'John' })
|
|
205
216
|
);
|
|
217
|
+
|
|
218
|
+
// Multiple signals at once
|
|
219
|
+
await cns.stimulate([
|
|
220
|
+
userCreated.createSignal({ id: '123', name: 'John' }),
|
|
221
|
+
userCreated.createSignal({ id: '456', name: 'Jane' })
|
|
222
|
+
]);
|
|
206
223
|
```
|
|
207
224
|
|
|
208
225
|
## ⚙️ Stimulation Options
|
|
@@ -340,33 +357,6 @@ await cns.stimulate(input.createSignal({ value: 5 }));
|
|
|
340
357
|
// Flows: input(5) → middle(10) → output("Final: 10")
|
|
341
358
|
```
|
|
342
359
|
|
|
343
|
-
### Fan-out Processing
|
|
344
|
-
|
|
345
|
-
```typescript
|
|
346
|
-
const trigger = collateral<{ data: string }>('trigger');
|
|
347
|
-
const branch1 = collateral<{ result: string }>('branch1');
|
|
348
|
-
const branch2 = collateral<{ result: string }>('branch2');
|
|
349
|
-
|
|
350
|
-
const processor1 = neuron('proc1', { branch1 }).dendrite({
|
|
351
|
-
collateral: trigger,
|
|
352
|
-
response: (payload, axon) => {
|
|
353
|
-
return axon.branch1.createSignal({ result: `A-${payload.data}` });
|
|
354
|
-
}
|
|
355
|
-
});
|
|
356
|
-
|
|
357
|
-
const processor2 = neuron('proc2', { branch2 }).dendrite({
|
|
358
|
-
collateral: trigger,
|
|
359
|
-
response: (payload, axon) => {
|
|
360
|
-
return axon.branch2.createSignal({ result: `B-${payload.data}` });
|
|
361
|
-
}
|
|
362
|
-
});
|
|
363
|
-
|
|
364
|
-
const cns = new CNS([processor1, processor2]);
|
|
365
|
-
|
|
366
|
-
await cns.stimulate(trigger.createSignal({ data: 'test' }));
|
|
367
|
-
// Flows: trigger("test") → [branch1("A-test"), branch2("B-test")]
|
|
368
|
-
```
|
|
369
|
-
|
|
370
360
|
### Context-Aware Processing
|
|
371
361
|
|
|
372
362
|
```typescript
|
|
@@ -395,6 +385,88 @@ await cns.stimulate(input.createSignal({ increment: 5 })); // count: 5
|
|
|
395
385
|
await cns.stimulate(input.createSignal({ increment: 3 })); // count: 8 (separate context)
|
|
396
386
|
```
|
|
397
387
|
|
|
388
|
+
### Multiple Signals (Fan-out Pattern)
|
|
389
|
+
|
|
390
|
+
Neurons can return arrays of signals for parallel processing:
|
|
391
|
+
|
|
392
|
+
```typescript
|
|
393
|
+
const orderPlaced = collateral<{ orderId: string; items: string[] }>('order:placed');
|
|
394
|
+
const updateInventory = collateral<{ orderId: string; item: string }>('update:inventory');
|
|
395
|
+
const sendEmail = collateral<{ orderId: string }>('send:email');
|
|
396
|
+
const logAudit = collateral<{ orderId: string }>('log:audit');
|
|
397
|
+
|
|
398
|
+
const orderProcessor = neuron('order-processor', {
|
|
399
|
+
updateInventory,
|
|
400
|
+
sendEmail,
|
|
401
|
+
logAudit
|
|
402
|
+
}).dendrite({
|
|
403
|
+
collateral: orderPlaced,
|
|
404
|
+
response: (payload, axon) => {
|
|
405
|
+
// Return array of signals - each will be processed independently
|
|
406
|
+
return [
|
|
407
|
+
// Create signal for each item
|
|
408
|
+
...payload.items.map(item =>
|
|
409
|
+
axon.updateInventory.createSignal({ orderId: payload.orderId, item })
|
|
410
|
+
),
|
|
411
|
+
// Also send confirmation email
|
|
412
|
+
axon.sendEmail.createSignal({ orderId: payload.orderId }),
|
|
413
|
+
// And log the action
|
|
414
|
+
axon.logAudit.createSignal({ orderId: payload.orderId })
|
|
415
|
+
];
|
|
416
|
+
}
|
|
417
|
+
});
|
|
418
|
+
|
|
419
|
+
// Downstream neurons process each signal independently
|
|
420
|
+
const inventoryService = neuron('inventory-service', {}).dendrite({
|
|
421
|
+
collateral: updateInventory,
|
|
422
|
+
response: (payload) => {
|
|
423
|
+
console.log(`Updating inventory for ${payload.item}`);
|
|
424
|
+
// Each item gets its own execution
|
|
425
|
+
}
|
|
426
|
+
});
|
|
427
|
+
|
|
428
|
+
const cns = new CNS([orderProcessor, inventoryService /* ... */]);
|
|
429
|
+
|
|
430
|
+
// Single order triggers multiple parallel operations
|
|
431
|
+
await cns.stimulate(
|
|
432
|
+
orderPlaced.createSignal({ orderId: 'ORD-001', items: ['A', 'B', 'C'] })
|
|
433
|
+
);
|
|
434
|
+
// Flows: orderPlaced → [inventory(A), inventory(B), inventory(C), email, audit]
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
**Conditional Arrays:**
|
|
438
|
+
```typescript
|
|
439
|
+
const validator = neuron('validator', { success, error, audit }).dendrite({
|
|
440
|
+
collateral: input,
|
|
441
|
+
response: (payload, axon) => {
|
|
442
|
+
const signals = [];
|
|
443
|
+
|
|
444
|
+
// Conditionally add signals
|
|
445
|
+
if (isValid(payload.data)) {
|
|
446
|
+
signals.push(axon.success.createSignal({ validated: payload.data }));
|
|
447
|
+
} else {
|
|
448
|
+
signals.push(axon.error.createSignal({ error: 'Invalid' }));
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
// Always audit
|
|
452
|
+
signals.push(axon.audit.createSignal({ attempted: true }));
|
|
453
|
+
|
|
454
|
+
return signals; // Return empty array to emit nothing
|
|
455
|
+
}
|
|
456
|
+
});
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
**Starting with Multiple Signals:**
|
|
460
|
+
```typescript
|
|
461
|
+
// Process multiple orders in parallel
|
|
462
|
+
await cns.stimulate([
|
|
463
|
+
orderPlaced.createSignal({ orderId: 'ORD-001', items: ['X'] }),
|
|
464
|
+
orderPlaced.createSignal({ orderId: 'ORD-002', items: ['Y', 'Z'] })
|
|
465
|
+
]);
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
See [Multiple Signals Recipe](https://cnstra.org/docs/recipes/multiple-signals) for more patterns and best practices.
|
|
469
|
+
|
|
398
470
|
## 🧠 Memory & Performance
|
|
399
471
|
|
|
400
472
|
### Memory-Efficient Design
|
|
@@ -415,6 +487,8 @@ await cns.stimulate(input.createSignal({ increment: 3 })); // count: 8 (separate
|
|
|
415
487
|
- Use synchronous responses when possible
|
|
416
488
|
- Set reasonable `maxNeuronHops` limits
|
|
417
489
|
- Implement proper error handling in `onResponse`
|
|
490
|
+
- Use array returns for genuine fan-out patterns, not just convenience
|
|
491
|
+
- Consider concurrency limits when returning many signals
|
|
418
492
|
|
|
419
493
|
## 🎯 Common Use Cases
|
|
420
494
|
|
package/dist/CNS.d.ts
CHANGED
|
@@ -60,8 +60,8 @@ export declare class CNS<TCollateralName extends string, TNeuronName extends str
|
|
|
60
60
|
* Throws aggregated error if violations are found.
|
|
61
61
|
*/
|
|
62
62
|
private validateUniqueIdentifiers;
|
|
63
|
-
addResponseListener(listener: <TInputPayload, TOutputPayload>(response: TCNSStimulationResponse<TCollateralName, TInputPayload, TOutputPayload>) => void): () => void;
|
|
64
|
-
wrapOnResponse<T>(local?: (response: T) => void): (response: T) => void
|
|
63
|
+
addResponseListener(listener: <TInputPayload, TOutputPayload>(response: TCNSStimulationResponse<TCollateralName, TInputPayload, TOutputPayload>) => void | Promise<void>): () => void;
|
|
64
|
+
wrapOnResponse<T>(local?: (response: T) => void | Promise<void>): (response: T) => void | Promise<void>;
|
|
65
65
|
protected runWithNeuronConcurrency(neuron: TNeuron, fn: () => (() => void) | Promise<() => void>): Promise<void>;
|
|
66
66
|
private buildIndexes;
|
|
67
67
|
/**
|
|
@@ -104,7 +104,9 @@ export declare class CNS<TCollateralName extends string, TNeuronName extends str
|
|
|
104
104
|
getDendrites(): TDendrite[];
|
|
105
105
|
getCollaterals(): CNSCollateral<TCollateralName, unknown>[];
|
|
106
106
|
getNeurons(): TNeuron[];
|
|
107
|
+
getCollateralByName<TName extends string = string>(collateralName: TName): CNSCollateral<TName, unknown> | undefined;
|
|
108
|
+
getNeuronByName<TName extends string = string>(neuronName: TName): TNeuron | undefined;
|
|
107
109
|
getSubscribers(collateralName: TCollateralName): TCNSSubscriber<TNeuron, TDendrite>[];
|
|
108
|
-
stimulate<TInputPayload extends TOutputPayload, TOutputPayload>(
|
|
110
|
+
stimulate<TInputPayload extends TOutputPayload, TOutputPayload>(signalOrSignals: TCNSSignal<TCollateralName, TInputPayload> | TCNSSignal<TCollateralName, TInputPayload>[], options?: TCNSStimulationOptions<TCollateralName, TInputPayload, TOutputPayload>): Promise<void>;
|
|
109
111
|
}
|
|
110
112
|
//# sourceMappingURL=CNS.d.ts.map
|
package/dist/CNS.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CNS.d.ts","sourceRoot":"","sources":["../src/CNS.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,qBAAa,GAAG,CACZ,eAAe,SAAS,MAAM,EAC9B,WAAW,SAAS,MAAM,EAC1B,OAAO,SAAS,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACrE,SAAS,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAC9D,YAAW,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"CNS.d.ts","sourceRoot":"","sources":["../src/CNS.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TCNSSerializedQueueItem } from './types/TCNSSerializedSignal';
|
|
2
2
|
import { TCNSNeuron } from './types/TCNSNeuron';
|
|
3
3
|
import { TCNSDendrite } from './types/TCNSDendrite';
|
|
4
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>> {
|
|
@@ -13,13 +13,13 @@ export declare class CNSFunctionalQueue<TCollateralName extends string, TNeuronN
|
|
|
13
13
|
protected activeOperations: number;
|
|
14
14
|
private pumping;
|
|
15
15
|
private needsPump;
|
|
16
|
-
constructor(processor: (item:
|
|
16
|
+
constructor(processor: (item: TCNSSerializedQueueItem<TCollateralName, TNeuronName>) => (() => void) | Promise<() => void>, concurrency?: number | undefined, abortSignal?: AbortSignal | undefined, initialCapacity?: number);
|
|
17
17
|
protected get canStartOperation(): boolean;
|
|
18
18
|
private resize;
|
|
19
19
|
private dequeue;
|
|
20
20
|
private enqueueItem;
|
|
21
21
|
protected pump(): void;
|
|
22
|
-
enqueue(x:
|
|
22
|
+
enqueue(x: TCNSSerializedQueueItem<TCollateralName, TNeuronName>): void;
|
|
23
23
|
get length(): number;
|
|
24
24
|
getActiveOperationsCount(): number;
|
|
25
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CNSFunctionalQueue.d.ts","sourceRoot":"","sources":["../src/CNSFunctionalQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"CNSFunctionalQueue.d.ts","sourceRoot":"","sources":["../src/CNSFunctionalQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,qBAAa,kBAAkB,CAC3B,eAAe,SAAS,MAAM,EAC9B,WAAW,SAAS,MAAM,EAC1B,OAAO,SAAS,UAAU,CACtB,GAAG,EACH,WAAW,EACX,eAAe,EACf,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,CACN,EACD,SAAS,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAcxD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAG1B,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM;IACvC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW;IAhBhD,OAAO,CAAC,KAAK,CAA+D;IAC5E,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,QAAQ,CAAM;IACtB,SAAS,CAAC,gBAAgB,SAAK;IAG/B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;gBAGL,SAAS,EAAE,CACxB,IAAI,EAAE,uBAAuB,CAAC,eAAe,EAAE,WAAW,CAAC,KAC1D,CAAC,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,EACpB,WAAW,CAAC,EAAE,MAAM,YAAA,EACpB,WAAW,CAAC,EAAE,WAAW,YAAA,EAC5C,eAAe,CAAC,EAAE,MAAM;IAQ5B,SAAS,KAAK,iBAAiB,IAAI,OAAO,CAGzC;IAED,OAAO,CAAC,MAAM;IAgBd,OAAO,CAAC,OAAO;IAaf,OAAO,CAAC,WAAW;IAYnB,SAAS,CAAC,IAAI;IAwDd,OAAO,CAAC,CAAC,EAAE,uBAAuB,CAAC,eAAe,EAAE,WAAW,CAAC;IAOhE,IAAI,MAAM,WAET;IAED,wBAAwB;CAG3B"}
|
package/dist/CNSStimulation.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ 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
|
+
import { TCNSSerializedQueueItem } from './types/TCNSSerializedSignal';
|
|
8
9
|
export declare class CNSStimulation<TCollateralName extends string, TNeuronName extends string, TNeuron extends TCNSNeuron<any, TNeuronName, TCollateralName, any, any, any, any>, TDendrite extends TCNSDendrite<any, any, any, any, any, any>, TInputPayload, TOutputPayload> {
|
|
9
10
|
private readonly cns;
|
|
10
11
|
readonly options?: TCNSStimulationOptions<TCollateralName, TInputPayload, TOutputPayload> | undefined;
|
|
@@ -13,12 +14,18 @@ export declare class CNSStimulation<TCollateralName extends string, TNeuronName
|
|
|
13
14
|
private readonly nueronVisitMap?;
|
|
14
15
|
private readonly instanceNeuronQueue;
|
|
15
16
|
private scheduledCount;
|
|
17
|
+
private completed;
|
|
18
|
+
private resolveCompleted;
|
|
19
|
+
private rejectCompleted;
|
|
20
|
+
private isCompleted;
|
|
16
21
|
/**
|
|
17
22
|
* Track active SCCs: SCC index -> count of active neurons in that SCC
|
|
18
23
|
*/
|
|
19
24
|
private readonly activeSccCounts;
|
|
20
25
|
readonly id: string;
|
|
21
26
|
constructor(cns: ICNS<TNeuron, TDendrite>, instanceNeuronQueue: CNSInstanceNeuronQueue<TNeuron>, options?: TCNSStimulationOptions<TCollateralName, TInputPayload, TOutputPayload> | undefined);
|
|
27
|
+
private tryResolveCompleted;
|
|
28
|
+
waitUntilComplete(): Promise<void>;
|
|
22
29
|
protected get concurrencyEnabled(): boolean;
|
|
23
30
|
protected get autoCleanupContextsEnabled(): boolean;
|
|
24
31
|
/**
|
|
@@ -42,13 +49,10 @@ export declare class CNSStimulation<TCollateralName extends string, TNeuronName
|
|
|
42
49
|
*/
|
|
43
50
|
protected canNeuronBeGuaranteedDone(neuronId: TNeuronName): boolean;
|
|
44
51
|
protected cleanupCtxIfNeeded(neuron: TNeuron): void;
|
|
45
|
-
protected createSubscriberQueueItem(subscriber: TCNSSubscriber<TNeuron, TDendrite>, inputSignal?: TCNSSignal<TCollateralName, any>):
|
|
46
|
-
neuronId: TNeuronName;
|
|
47
|
-
subscriber: TCNSSubscriber<TNeuron, TDendrite>;
|
|
48
|
-
inputSignal: TCNSSignal<TCollateralName, any> | undefined;
|
|
49
|
-
};
|
|
52
|
+
protected createSubscriberQueueItem(subscriber: TCNSSubscriber<TNeuron, TDendrite>, inputSignal?: TCNSSignal<TCollateralName, any>): TCNSSerializedQueueItem<TCollateralName, TNeuronName>;
|
|
50
53
|
private processQueueItem;
|
|
54
|
+
protected processResponseOrResponses(inputSignal?: TCNSSignal<TCollateralName, TInputPayload>, outputSignalOrSignals?: TCNSSignal<TCollateralName, TOutputPayload> | TCNSSignal<TCollateralName, TOutputPayload>[], error?: any): void;
|
|
51
55
|
protected processResponse(inputSignal?: TCNSSignal<TCollateralName, TInputPayload>, outputSignal?: TCNSSignal<TCollateralName, TOutputPayload>, error?: any): void;
|
|
52
|
-
responseToSignal(
|
|
56
|
+
responseToSignal(signalOrSignals: TCNSSignal<TCollateralName, TOutputPayload> | TCNSSignal<TCollateralName, TOutputPayload>[]): void;
|
|
53
57
|
}
|
|
54
58
|
//# sourceMappingURL=CNSStimulation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CNSStimulation.d.ts","sourceRoot":"","sources":["../src/CNSStimulation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
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
|
@@ -8,8 +8,10 @@ type InterNeuronAPI<TContextValue, TNameType extends string, TReceiverCollateral
|
|
|
8
8
|
name: TNameType;
|
|
9
9
|
axon: TAxonType;
|
|
10
10
|
concurrency?: number;
|
|
11
|
+
maxDuration?: number;
|
|
11
12
|
dendrites: TCNSDendrite<TContextValue, string, unknown, TReceiverCollateralName, TReceiverAxonCollateralPayload, TAxonType>[];
|
|
12
13
|
setConcurrency: (n: number | undefined) => InterNeuronAPI<TContextValue, TNameType, TReceiverCollateralName, TReceiverAxonCollateralPayload, TAxonType>;
|
|
14
|
+
setMaxDuration: (ms: number | undefined) => InterNeuronAPI<TContextValue, TNameType, TReceiverCollateralName, TReceiverAxonCollateralPayload, TAxonType>;
|
|
13
15
|
bind: <TFollowAxon extends Record<string, CNSCollateral<any, any>>>(axon: TFollowAxon, dendrites: {
|
|
14
16
|
[K in keyof TFollowAxon]: TCNSDendrite<TContextValue, NameOf<TFollowAxon, K> & string, PayloadOf<TFollowAxon, K>, TReceiverCollateralName, TReceiverAxonCollateralPayload, TAxonType> | TCNSDendrite<TContextValue, NameOf<TFollowAxon, K> & string, PayloadOf<TFollowAxon, K>, TReceiverCollateralName, TReceiverAxonCollateralPayload, TAxonType>['response'];
|
|
15
17
|
}) => InterNeuronAPI<TContextValue, TNameType, TReceiverCollateralName, TReceiverAxonCollateralPayload, TAxonType>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/factory/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/factory/index.ts"],"names":[],"mappings":"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"}
|