@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/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 is_avaliable() {
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.is_avaliable && (s.at < 0 || this._events.some(
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 || snapshot.event?.version;
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
- void cache().invalidate(stream);
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 || existing.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
- const name = handler.name || `${String(event)}_${registry.events[event].reactions.size}`;
1846
- registry.events[event].reactions.set(name, reaction);
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
- const name = handler.name || `${event}_${register.reactions.size}`;
1911
- register.reactions.set(name, reaction);
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
- const name = handler.name || `${String(event)}_${events[event].reactions.size}`;
1991
- events[event].reactions.set(name, reaction);
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
  });