@rotorsoft/act 0.26.0 → 0.26.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/act-builder.d.ts.map +1 -1
- package/dist/@types/merge.d.ts.map +1 -1
- package/dist/@types/projection-builder.d.ts.map +1 -1
- package/dist/@types/slice-builder.d.ts.map +1 -1
- package/dist/index.cjs +30 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +30 -17
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -309,7 +309,7 @@ var InMemoryStream = class {
|
|
|
309
309
|
_error = "";
|
|
310
310
|
_leased_by = void 0;
|
|
311
311
|
_leased_until = void 0;
|
|
312
|
-
get
|
|
312
|
+
get is_available() {
|
|
313
313
|
return !this._blocked && (!this._leased_until || this._leased_until <= /* @__PURE__ */ new Date());
|
|
314
314
|
}
|
|
315
315
|
get at() {
|
|
@@ -503,7 +503,7 @@ var InMemoryStore = class {
|
|
|
503
503
|
async claim(lagging, leading, by, millis) {
|
|
504
504
|
await sleep();
|
|
505
505
|
const available = [...this._streams.values()].filter(
|
|
506
|
-
(s) => s.
|
|
506
|
+
(s) => s.is_available && (s.at < 0 || this._events.some(
|
|
507
507
|
(e) => e.id > s.at && e.name !== SNAP_EVENT && (!s.source || RegExp(s.source).test(e.stream))
|
|
508
508
|
))
|
|
509
509
|
);
|
|
@@ -747,7 +747,7 @@ async function action(me, action2, target, payload, reactingTo, skipValidation =
|
|
|
747
747
|
if (!stream) throw new Error("Missing target stream");
|
|
748
748
|
payload = skipValidation ? payload : validate(action2, payload, me.actions[action2]);
|
|
749
749
|
const snapshot = await load(me, stream);
|
|
750
|
-
const expected = expectedVersion
|
|
750
|
+
const expected = expectedVersion ?? snapshot.event?.version;
|
|
751
751
|
logger2.trace(
|
|
752
752
|
payload,
|
|
753
753
|
`\u{1F535} ${stream}.${action2}${typeof expected === "number" ? `.${expected}` : ""}`
|
|
@@ -806,7 +806,7 @@ async function action(me, action2, target, payload, reactingTo, skipValidation =
|
|
|
806
806
|
);
|
|
807
807
|
} catch (error) {
|
|
808
808
|
if (error.name === "ERR_CONCURRENCY") {
|
|
809
|
-
|
|
809
|
+
await cache().invalidate(stream);
|
|
810
810
|
}
|
|
811
811
|
throw error;
|
|
812
812
|
}
|
|
@@ -1657,7 +1657,11 @@ function registerState(state2, states, actions, events) {
|
|
|
1657
1657
|
patch: mergedPatch,
|
|
1658
1658
|
on: { ...existing.on, ...state2.on },
|
|
1659
1659
|
given: { ...existing.given, ...state2.given },
|
|
1660
|
-
snap: state2.snap
|
|
1660
|
+
snap: state2.snap && existing.snap && state2.snap !== existing.snap ? (() => {
|
|
1661
|
+
throw new Error(
|
|
1662
|
+
`Duplicate snap strategy for state "${state2.name}"`
|
|
1663
|
+
);
|
|
1664
|
+
})() : state2.snap || existing.snap
|
|
1661
1665
|
};
|
|
1662
1666
|
states.set(state2.name, merged);
|
|
1663
1667
|
for (const name of Object.keys(merged.actions)) {
|
|
@@ -1772,19 +1776,22 @@ function act(states = /* @__PURE__ */ new Map(), registry = {
|
|
|
1772
1776
|
maxRetries: options?.maxRetries ?? 3
|
|
1773
1777
|
}
|
|
1774
1778
|
};
|
|
1775
|
-
|
|
1776
|
-
|
|
1779
|
+
if (!handler.name)
|
|
1780
|
+
throw new Error(
|
|
1781
|
+
`Reaction handler for "${String(event)}" must be a named function`
|
|
1782
|
+
);
|
|
1783
|
+
registry.events[event].reactions.set(handler.name, reaction);
|
|
1777
1784
|
return {
|
|
1778
1785
|
...builder,
|
|
1779
1786
|
to(resolver) {
|
|
1780
|
-
registry.events[event].reactions.set(name, {
|
|
1787
|
+
registry.events[event].reactions.set(handler.name, {
|
|
1781
1788
|
...reaction,
|
|
1782
1789
|
resolver: typeof resolver === "string" ? { target: resolver } : resolver
|
|
1783
1790
|
});
|
|
1784
1791
|
return builder;
|
|
1785
1792
|
},
|
|
1786
1793
|
void() {
|
|
1787
|
-
registry.events[event].reactions.set(name, {
|
|
1794
|
+
registry.events[event].reactions.set(handler.name, {
|
|
1788
1795
|
...reaction,
|
|
1789
1796
|
resolver: _void_
|
|
1790
1797
|
});
|
|
@@ -1837,20 +1844,23 @@ function _projection(target, events) {
|
|
|
1837
1844
|
}
|
|
1838
1845
|
};
|
|
1839
1846
|
const register = events[event];
|
|
1840
|
-
|
|
1841
|
-
|
|
1847
|
+
if (!handler.name)
|
|
1848
|
+
throw new Error(
|
|
1849
|
+
`Projection handler for "${event}" must be a named function`
|
|
1850
|
+
);
|
|
1851
|
+
register.reactions.set(handler.name, reaction);
|
|
1842
1852
|
const nextBuilder = _projection(target, events);
|
|
1843
1853
|
return {
|
|
1844
1854
|
...nextBuilder,
|
|
1845
1855
|
to(resolver) {
|
|
1846
|
-
register.reactions.set(name, {
|
|
1856
|
+
register.reactions.set(handler.name, {
|
|
1847
1857
|
...reaction,
|
|
1848
1858
|
resolver: typeof resolver === "string" ? { target: resolver } : resolver
|
|
1849
1859
|
});
|
|
1850
1860
|
return nextBuilder;
|
|
1851
1861
|
},
|
|
1852
1862
|
void() {
|
|
1853
|
-
register.reactions.set(name, {
|
|
1863
|
+
register.reactions.set(handler.name, {
|
|
1854
1864
|
...reaction,
|
|
1855
1865
|
resolver: _void_
|
|
1856
1866
|
});
|
|
@@ -1917,19 +1927,22 @@ function slice(states = /* @__PURE__ */ new Map(), actions = {}, events = {}, pr
|
|
|
1917
1927
|
maxRetries: options?.maxRetries ?? 3
|
|
1918
1928
|
}
|
|
1919
1929
|
};
|
|
1920
|
-
|
|
1921
|
-
|
|
1930
|
+
if (!handler.name)
|
|
1931
|
+
throw new Error(
|
|
1932
|
+
`Reaction handler for "${String(event)}" must be a named function`
|
|
1933
|
+
);
|
|
1934
|
+
events[event].reactions.set(handler.name, reaction);
|
|
1922
1935
|
return {
|
|
1923
1936
|
...builder,
|
|
1924
1937
|
to(resolver) {
|
|
1925
|
-
events[event].reactions.set(name, {
|
|
1938
|
+
events[event].reactions.set(handler.name, {
|
|
1926
1939
|
...reaction,
|
|
1927
1940
|
resolver: typeof resolver === "string" ? { target: resolver } : resolver
|
|
1928
1941
|
});
|
|
1929
1942
|
return builder;
|
|
1930
1943
|
},
|
|
1931
1944
|
void() {
|
|
1932
|
-
events[event].reactions.set(name, {
|
|
1945
|
+
events[event].reactions.set(handler.name, {
|
|
1933
1946
|
...reaction,
|
|
1934
1947
|
resolver: _void_
|
|
1935
1948
|
});
|