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