@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.cjs
CHANGED
|
@@ -379,7 +379,7 @@ var InMemoryStream = class {
|
|
|
379
379
|
_error = "";
|
|
380
380
|
_leased_by = void 0;
|
|
381
381
|
_leased_until = void 0;
|
|
382
|
-
get
|
|
382
|
+
get is_available() {
|
|
383
383
|
return !this._blocked && (!this._leased_until || this._leased_until <= /* @__PURE__ */ new Date());
|
|
384
384
|
}
|
|
385
385
|
get at() {
|
|
@@ -573,7 +573,7 @@ var InMemoryStore = class {
|
|
|
573
573
|
async claim(lagging, leading, by, millis) {
|
|
574
574
|
await sleep();
|
|
575
575
|
const available = [...this._streams.values()].filter(
|
|
576
|
-
(s) => s.
|
|
576
|
+
(s) => s.is_available && (s.at < 0 || this._events.some(
|
|
577
577
|
(e) => e.id > s.at && e.name !== SNAP_EVENT && (!s.source || RegExp(s.source).test(e.stream))
|
|
578
578
|
))
|
|
579
579
|
);
|
|
@@ -817,7 +817,7 @@ async function action(me, action2, target, payload, reactingTo, skipValidation =
|
|
|
817
817
|
if (!stream) throw new Error("Missing target stream");
|
|
818
818
|
payload = skipValidation ? payload : validate(action2, payload, me.actions[action2]);
|
|
819
819
|
const snapshot = await load(me, stream);
|
|
820
|
-
const expected = expectedVersion
|
|
820
|
+
const expected = expectedVersion ?? snapshot.event?.version;
|
|
821
821
|
logger2.trace(
|
|
822
822
|
payload,
|
|
823
823
|
`\u{1F535} ${stream}.${action2}${typeof expected === "number" ? `.${expected}` : ""}`
|
|
@@ -876,7 +876,7 @@ async function action(me, action2, target, payload, reactingTo, skipValidation =
|
|
|
876
876
|
);
|
|
877
877
|
} catch (error) {
|
|
878
878
|
if (error.name === "ERR_CONCURRENCY") {
|
|
879
|
-
|
|
879
|
+
await cache().invalidate(stream);
|
|
880
880
|
}
|
|
881
881
|
throw error;
|
|
882
882
|
}
|
|
@@ -1727,7 +1727,11 @@ function registerState(state2, states, actions, events) {
|
|
|
1727
1727
|
patch: mergedPatch,
|
|
1728
1728
|
on: { ...existing.on, ...state2.on },
|
|
1729
1729
|
given: { ...existing.given, ...state2.given },
|
|
1730
|
-
snap: state2.snap
|
|
1730
|
+
snap: state2.snap && existing.snap && state2.snap !== existing.snap ? (() => {
|
|
1731
|
+
throw new Error(
|
|
1732
|
+
`Duplicate snap strategy for state "${state2.name}"`
|
|
1733
|
+
);
|
|
1734
|
+
})() : state2.snap || existing.snap
|
|
1731
1735
|
};
|
|
1732
1736
|
states.set(state2.name, merged);
|
|
1733
1737
|
for (const name of Object.keys(merged.actions)) {
|
|
@@ -1842,19 +1846,22 @@ function act(states = /* @__PURE__ */ new Map(), registry = {
|
|
|
1842
1846
|
maxRetries: options?.maxRetries ?? 3
|
|
1843
1847
|
}
|
|
1844
1848
|
};
|
|
1845
|
-
|
|
1846
|
-
|
|
1849
|
+
if (!handler.name)
|
|
1850
|
+
throw new Error(
|
|
1851
|
+
`Reaction handler for "${String(event)}" must be a named function`
|
|
1852
|
+
);
|
|
1853
|
+
registry.events[event].reactions.set(handler.name, reaction);
|
|
1847
1854
|
return {
|
|
1848
1855
|
...builder,
|
|
1849
1856
|
to(resolver) {
|
|
1850
|
-
registry.events[event].reactions.set(name, {
|
|
1857
|
+
registry.events[event].reactions.set(handler.name, {
|
|
1851
1858
|
...reaction,
|
|
1852
1859
|
resolver: typeof resolver === "string" ? { target: resolver } : resolver
|
|
1853
1860
|
});
|
|
1854
1861
|
return builder;
|
|
1855
1862
|
},
|
|
1856
1863
|
void() {
|
|
1857
|
-
registry.events[event].reactions.set(name, {
|
|
1864
|
+
registry.events[event].reactions.set(handler.name, {
|
|
1858
1865
|
...reaction,
|
|
1859
1866
|
resolver: _void_
|
|
1860
1867
|
});
|
|
@@ -1907,20 +1914,23 @@ function _projection(target, events) {
|
|
|
1907
1914
|
}
|
|
1908
1915
|
};
|
|
1909
1916
|
const register = events[event];
|
|
1910
|
-
|
|
1911
|
-
|
|
1917
|
+
if (!handler.name)
|
|
1918
|
+
throw new Error(
|
|
1919
|
+
`Projection handler for "${event}" must be a named function`
|
|
1920
|
+
);
|
|
1921
|
+
register.reactions.set(handler.name, reaction);
|
|
1912
1922
|
const nextBuilder = _projection(target, events);
|
|
1913
1923
|
return {
|
|
1914
1924
|
...nextBuilder,
|
|
1915
1925
|
to(resolver) {
|
|
1916
|
-
register.reactions.set(name, {
|
|
1926
|
+
register.reactions.set(handler.name, {
|
|
1917
1927
|
...reaction,
|
|
1918
1928
|
resolver: typeof resolver === "string" ? { target: resolver } : resolver
|
|
1919
1929
|
});
|
|
1920
1930
|
return nextBuilder;
|
|
1921
1931
|
},
|
|
1922
1932
|
void() {
|
|
1923
|
-
register.reactions.set(name, {
|
|
1933
|
+
register.reactions.set(handler.name, {
|
|
1924
1934
|
...reaction,
|
|
1925
1935
|
resolver: _void_
|
|
1926
1936
|
});
|
|
@@ -1987,19 +1997,22 @@ function slice(states = /* @__PURE__ */ new Map(), actions = {}, events = {}, pr
|
|
|
1987
1997
|
maxRetries: options?.maxRetries ?? 3
|
|
1988
1998
|
}
|
|
1989
1999
|
};
|
|
1990
|
-
|
|
1991
|
-
|
|
2000
|
+
if (!handler.name)
|
|
2001
|
+
throw new Error(
|
|
2002
|
+
`Reaction handler for "${String(event)}" must be a named function`
|
|
2003
|
+
);
|
|
2004
|
+
events[event].reactions.set(handler.name, reaction);
|
|
1992
2005
|
return {
|
|
1993
2006
|
...builder,
|
|
1994
2007
|
to(resolver) {
|
|
1995
|
-
events[event].reactions.set(name, {
|
|
2008
|
+
events[event].reactions.set(handler.name, {
|
|
1996
2009
|
...reaction,
|
|
1997
2010
|
resolver: typeof resolver === "string" ? { target: resolver } : resolver
|
|
1998
2011
|
});
|
|
1999
2012
|
return builder;
|
|
2000
2013
|
},
|
|
2001
2014
|
void() {
|
|
2002
|
-
events[event].reactions.set(name, {
|
|
2015
|
+
events[event].reactions.set(handler.name, {
|
|
2003
2016
|
...reaction,
|
|
2004
2017
|
resolver: _void_
|
|
2005
2018
|
});
|