@rotorsoft/act 0.29.0 → 0.30.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 +1 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/@types/act-builder.d.ts +3 -3
- package/dist/@types/act-builder.d.ts.map +1 -1
- package/dist/@types/act.d.ts +14 -11
- package/dist/@types/act.d.ts.map +1 -1
- package/dist/@types/merge.d.ts +0 -1
- package/dist/@types/merge.d.ts.map +1 -1
- package/dist/@types/projection-builder.d.ts +1 -4
- package/dist/@types/projection-builder.d.ts.map +1 -1
- package/dist/@types/slice-builder.d.ts +1 -2
- package/dist/@types/slice-builder.d.ts.map +1 -1
- package/dist/index.cjs +29 -34
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +29 -34
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1033,24 +1033,22 @@ var Act = class {
|
|
|
1033
1033
|
* }
|
|
1034
1034
|
* ```
|
|
1035
1035
|
*
|
|
1036
|
-
* @example Reaction triggering another action
|
|
1036
|
+
* @example Reaction triggering another action (reactingTo auto-injected)
|
|
1037
1037
|
* ```typescript
|
|
1038
1038
|
* const app = act()
|
|
1039
1039
|
* .withState(Order)
|
|
1040
1040
|
* .withState(Inventory)
|
|
1041
1041
|
* .on("OrderPlaced")
|
|
1042
|
-
* .do(async (event,
|
|
1043
|
-
* //
|
|
1044
|
-
*
|
|
1042
|
+
* .do(async function reduceInventory(event, _stream, app) {
|
|
1043
|
+
* // Inside reaction handlers, reactingTo is auto-injected when omitted.
|
|
1044
|
+
* // The triggering event is used by default, maintaining the correlation chain.
|
|
1045
|
+
* await app.do(
|
|
1045
1046
|
* "reduceStock",
|
|
1046
|
-
* {
|
|
1047
|
-
*
|
|
1048
|
-
* actor: event.meta.causation.action.actor
|
|
1049
|
-
* },
|
|
1050
|
-
* { amount: event.data.items.length },
|
|
1051
|
-
* event // Pass event for correlation tracking
|
|
1047
|
+
* { stream: "inventory-1", actor: { id: "sys", name: "system" } },
|
|
1048
|
+
* { amount: event.data.items.length }
|
|
1052
1049
|
* );
|
|
1053
|
-
*
|
|
1050
|
+
* // To use a different correlation, pass reactingTo explicitly:
|
|
1051
|
+
* // await app.do("reduceStock", target, payload, customEvent);
|
|
1054
1052
|
* })
|
|
1055
1053
|
* .to("inventory-1")
|
|
1056
1054
|
* .build();
|
|
@@ -1186,6 +1184,11 @@ var Act = class {
|
|
|
1186
1184
|
* This is called by the main `drain` loop after fetching new events.
|
|
1187
1185
|
* It handles reactions, supporting retries, blocking, and error handling.
|
|
1188
1186
|
*
|
|
1187
|
+
* Each handler receives a scoped `IAct` proxy that auto-injects the
|
|
1188
|
+
* triggering event as `reactingTo` when `do()` is called without it,
|
|
1189
|
+
* maintaining correlation chains by default (#587). Handlers can still
|
|
1190
|
+
* pass an explicit `reactingTo` to override this behavior.
|
|
1191
|
+
*
|
|
1189
1192
|
* @internal
|
|
1190
1193
|
* @param lease The lease to handle
|
|
1191
1194
|
* @param payloads The reactions to handle
|
|
@@ -1196,10 +1199,24 @@ var Act = class {
|
|
|
1196
1199
|
const stream = lease.stream;
|
|
1197
1200
|
let at = payloads.at(0).event.id, handled = 0;
|
|
1198
1201
|
lease.retry > 0 && logger3.warn(`Retrying ${stream}@${at} (${lease.retry}).`);
|
|
1202
|
+
const doAction = this.do.bind(this);
|
|
1203
|
+
const scopedApp = {
|
|
1204
|
+
do: doAction,
|
|
1205
|
+
load: this.load.bind(this),
|
|
1206
|
+
query: this.query.bind(this),
|
|
1207
|
+
query_array: this.query_array.bind(this)
|
|
1208
|
+
};
|
|
1199
1209
|
for (const payload of payloads) {
|
|
1200
1210
|
const { event, handler, options } = payload;
|
|
1211
|
+
scopedApp.do = (action2, target, payload2, reactingTo, skipValidation) => doAction(
|
|
1212
|
+
action2,
|
|
1213
|
+
target,
|
|
1214
|
+
payload2,
|
|
1215
|
+
reactingTo ?? event,
|
|
1216
|
+
skipValidation
|
|
1217
|
+
);
|
|
1201
1218
|
try {
|
|
1202
|
-
await handler(event, stream,
|
|
1219
|
+
await handler(event, stream, scopedApp);
|
|
1203
1220
|
at = event.id;
|
|
1204
1221
|
handled++;
|
|
1205
1222
|
} catch (error) {
|
|
@@ -1955,7 +1972,6 @@ var _this_ = ({ stream }) => ({
|
|
|
1955
1972
|
source: stream,
|
|
1956
1973
|
target: stream
|
|
1957
1974
|
});
|
|
1958
|
-
var _void_ = () => void 0;
|
|
1959
1975
|
|
|
1960
1976
|
// src/act-builder.ts
|
|
1961
1977
|
function act(states = /* @__PURE__ */ new Map(), registry = {
|
|
@@ -2033,13 +2049,6 @@ function act(states = /* @__PURE__ */ new Map(), registry = {
|
|
|
2033
2049
|
resolver: typeof resolver === "string" ? { target: resolver } : resolver
|
|
2034
2050
|
});
|
|
2035
2051
|
return builder;
|
|
2036
|
-
},
|
|
2037
|
-
void() {
|
|
2038
|
-
registry.events[event].reactions.set(handler.name, {
|
|
2039
|
-
...reaction,
|
|
2040
|
-
resolver: _void_
|
|
2041
|
-
});
|
|
2042
|
-
return builder;
|
|
2043
2052
|
}
|
|
2044
2053
|
};
|
|
2045
2054
|
}
|
|
@@ -2102,13 +2111,6 @@ function _projection(target, events) {
|
|
|
2102
2111
|
resolver: typeof resolver === "string" ? { target: resolver } : resolver
|
|
2103
2112
|
});
|
|
2104
2113
|
return nextBuilder;
|
|
2105
|
-
},
|
|
2106
|
-
void() {
|
|
2107
|
-
register.reactions.set(handler.name, {
|
|
2108
|
-
...reaction,
|
|
2109
|
-
resolver: _void_
|
|
2110
|
-
});
|
|
2111
|
-
return nextBuilder;
|
|
2112
2114
|
}
|
|
2113
2115
|
};
|
|
2114
2116
|
}
|
|
@@ -2184,13 +2186,6 @@ function slice(states = /* @__PURE__ */ new Map(), actions = {}, events = {}, pr
|
|
|
2184
2186
|
resolver: typeof resolver === "string" ? { target: resolver } : resolver
|
|
2185
2187
|
});
|
|
2186
2188
|
return builder;
|
|
2187
|
-
},
|
|
2188
|
-
void() {
|
|
2189
|
-
events[event].reactions.set(handler.name, {
|
|
2190
|
-
...reaction,
|
|
2191
|
-
resolver: _void_
|
|
2192
|
-
});
|
|
2193
|
-
return builder;
|
|
2194
2189
|
}
|
|
2195
2190
|
};
|
|
2196
2191
|
}
|