@rotorsoft/act 1.31.0 → 1.31.1
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/dist/.tsbuildinfo +1 -1
- package/dist/@types/internal/event-sourcing.d.ts.map +1 -1
- package/dist/@types/internal/reacting.d.ts +17 -0
- package/dist/@types/internal/reacting.d.ts.map +1 -0
- package/dist/@types/internal/reactions.d.ts +6 -7
- package/dist/@types/internal/reactions.d.ts.map +1 -1
- package/dist/index.cjs +16 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +16 -9
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-sourcing.d.ts","sourceRoot":"","sources":["../../../src/internal/event-sourcing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,KAAK,KAAK,EAAS,MAAM,sBAAsB,CAAC;AAOzD,OAAO,KAAK,EACV,SAAS,EAET,SAAS,EAGT,WAAW,EACX,UAAU,EACV,WAAW,EACX,UAAU,EACV,MAAM,EACN,OAAO,EACP,QAAQ,EACR,KAAK,EACL,MAAM,EACP,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"event-sourcing.d.ts","sourceRoot":"","sources":["../../../src/internal/event-sourcing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module reacting
|
|
3
|
+
* @category Internal
|
|
4
|
+
*
|
|
5
|
+
* Ambient triggering-event context for reaction handlers (#1541).
|
|
6
|
+
*
|
|
7
|
+
* `build_handle` installs it around each lease; `action()` resolves it as
|
|
8
|
+
* `reactingTo` when the caller didn't pass one, so a handler that dispatches
|
|
9
|
+
* through a captured `app` still threads the chain.
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
14
|
+
import type { Committed, Schemas } from "../types/index.js";
|
|
15
|
+
/** The event currently being reacted to. Internal — not re-exported. */
|
|
16
|
+
export declare const reacting: AsyncLocalStorage<Committed<Schemas, string>>;
|
|
17
|
+
//# sourceMappingURL=reacting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reacting.d.ts","sourceRoot":"","sources":["../../../src/internal/reacting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5D,wEAAwE;AACxE,eAAO,MAAM,QAAQ,+CAAsD,CAAC"}
|
|
@@ -5,9 +5,8 @@
|
|
|
5
5
|
* Reaction dispatch — what runs inside the drain pipeline once `run_drain_cycle`
|
|
6
6
|
* has fetched events for a leased stream. Two shapes:
|
|
7
7
|
*
|
|
8
|
-
* - per-event `handle`: walks payloads sequentially,
|
|
9
|
-
*
|
|
10
|
-
* through manually
|
|
8
|
+
* - per-event `handle`: walks payloads sequentially, installing the triggering
|
|
9
|
+
* event as ambient reaction context so `action()` threads `reactingTo`
|
|
11
10
|
* - bulk `handle_batch`: hands every event for a static-target projection to
|
|
12
11
|
* a single batch callback, enabling one-transaction replays
|
|
13
12
|
*
|
|
@@ -36,10 +35,10 @@ export type ReactionDeps<TEvents extends Schemas, TActions extends Schemas, TAct
|
|
|
36
35
|
/**
|
|
37
36
|
* Builds the per-event reaction dispatcher passed to `run_drain_cycle`.
|
|
38
37
|
*
|
|
39
|
-
* The
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
38
|
+
* The triggering event is installed as ambient context around each handler
|
|
39
|
+
* call, so `action()` resolves it as `reactingTo` (#587, #1541). Ambient
|
|
40
|
+
* rather than bound to the `IAct` argument, so a handler that dispatches
|
|
41
|
+
* through a captured `app` inherits the chain too.
|
|
43
42
|
*
|
|
44
43
|
* @internal
|
|
45
44
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactions.d.ts","sourceRoot":"","sources":["../../../src/internal/reactions.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"reactions.d.ts","sourceRoot":"","sources":["../../../src/internal/reactions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,KAAK,KAAK,EAGV,KAAK,IAAI,EAET,KAAK,MAAM,EAIX,KAAK,OAAO,EACb,MAAM,mBAAmB,CAAC;AAK3B,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAG1E;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,CACtB,OAAO,SAAS,OAAO,EACvB,QAAQ,SAAS,OAAO,EACxB,MAAM,SAAS,KAAK,GAAG,KAAK,IAC1B;IACF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;IACzD,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7D,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;IAC/D,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;IAC3E,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;CAClE,CAAC;AAoDF;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,OAAO,SAAS,OAAO,EACvB,QAAQ,SAAS,OAAO,EACxB,MAAM,SAAS,KAAK,GAAG,KAAK,EAC5B,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAqGhE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,SAAS,OAAO,EACxD,MAAM,EAAE,MAAM,GACb,WAAW,CAAC,OAAO,CAAC,CA6BtB"}
|
package/dist/index.cjs
CHANGED
|
@@ -3765,6 +3765,10 @@ function compute_backoff_delay(retry, opts) {
|
|
|
3765
3765
|
return Math.max(0, Math.floor(delay));
|
|
3766
3766
|
}
|
|
3767
3767
|
|
|
3768
|
+
// src/internal/reacting.ts
|
|
3769
|
+
var import_node_async_hooks2 = require("async_hooks");
|
|
3770
|
+
var reacting = new import_node_async_hooks2.AsyncLocalStorage();
|
|
3771
|
+
|
|
3768
3772
|
// src/internal/event-sourcing.ts
|
|
3769
3773
|
var bare_patch = (_me, state2, partial) => (0, import_act_patch.patch)(state2, partial);
|
|
3770
3774
|
var validating_patch = (me, state2, partial, event) => {
|
|
@@ -4022,7 +4026,7 @@ async function load(me, target, callback, patch_fn = bare_patch) {
|
|
|
4022
4026
|
async function action(me, action2, target, payload, options, patch_fn = bare_patch) {
|
|
4023
4027
|
const { stream, expectedVersion, actor } = target;
|
|
4024
4028
|
if (!stream) throw new Error("Missing target stream");
|
|
4025
|
-
const reactingTo = options?.reactingTo;
|
|
4029
|
+
const reactingTo = options?.reactingTo ?? reacting.getStore();
|
|
4026
4030
|
const correlator = options?.correlator ?? default_correlator;
|
|
4027
4031
|
const validated = validate(action2, payload, me.actions[action2]);
|
|
4028
4032
|
const opts = me.options?.[action2];
|
|
@@ -4089,11 +4093,15 @@ async function action(me, action2, target, payload, options, patch_fn = bare_pat
|
|
|
4089
4093
|
stream,
|
|
4090
4094
|
emitted,
|
|
4091
4095
|
meta,
|
|
4092
|
-
// Reactions skip
|
|
4096
|
+
// Reactions skip the INFERRED guard: they always append against the
|
|
4093
4097
|
// current head. Stream leasing already serializes concurrent reactions,
|
|
4094
4098
|
// and forcing version checks here would turn ordinary catch-up into
|
|
4095
|
-
// spurious retries.
|
|
4096
|
-
|
|
4099
|
+
// spurious retries. An expectedVersion the caller passed explicitly is
|
|
4100
|
+
// still honored — dropping a guard the caller asked for is silent data
|
|
4101
|
+
// loss, and the reaction context can reach further than the handler
|
|
4102
|
+
// (detached timers, settle cycles) where the caller never intended a
|
|
4103
|
+
// reaction's semantics at all.
|
|
4104
|
+
reactingTo ? expectedVersion : expected
|
|
4097
4105
|
);
|
|
4098
4106
|
} catch (error) {
|
|
4099
4107
|
if (error instanceof ConcurrencyError) {
|
|
@@ -4719,12 +4727,11 @@ function build_handle(deps) {
|
|
|
4719
4727
|
for (let i = 0; i < payloads.length; i++) {
|
|
4720
4728
|
const payload = payloads[i];
|
|
4721
4729
|
const { event, handler } = payload;
|
|
4722
|
-
scoped_app.do = (action2, target, action_payload, options) => bound_do(action2, target, action_payload, {
|
|
4723
|
-
...options,
|
|
4724
|
-
reactingTo: options?.reactingTo ?? event
|
|
4725
|
-
});
|
|
4726
4730
|
try {
|
|
4727
|
-
await
|
|
4731
|
+
await reacting.run(
|
|
4732
|
+
event,
|
|
4733
|
+
() => handler(event, stream, scoped_app)
|
|
4734
|
+
);
|
|
4728
4735
|
if (last_index_of.get(event.id) === i) {
|
|
4729
4736
|
at = event.id;
|
|
4730
4737
|
handled++;
|