@rotorsoft/act 0.26.0 → 0.27.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/dist/.tsbuildinfo +1 -1
- package/dist/@types/act-builder.d.ts.map +1 -1
- package/dist/@types/adapters/InMemoryStore.d.ts +7 -0
- package/dist/@types/adapters/InMemoryStore.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/@types/types/ports.d.ts +19 -0
- package/dist/@types/types/ports.d.ts.map +1 -1
- package/dist/index.cjs +59 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +59 -17
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -286,6 +286,25 @@ export interface Store extends Disposable {
|
|
|
286
286
|
}>) => Promise<Array<Lease & {
|
|
287
287
|
error: string;
|
|
288
288
|
}>>;
|
|
289
|
+
/**
|
|
290
|
+
* Resets watermarks for the given streams to -1, making them eligible
|
|
291
|
+
* for replay from the beginning. Also clears retry, blocked, error,
|
|
292
|
+
* and lease state so the streams can be claimed immediately.
|
|
293
|
+
*
|
|
294
|
+
* Used by `Act.rebuild()` to replay events through updated projections.
|
|
295
|
+
*
|
|
296
|
+
* @param streams - Stream names to reset
|
|
297
|
+
* @returns Count of streams that were actually reset
|
|
298
|
+
*
|
|
299
|
+
* @example
|
|
300
|
+
* ```typescript
|
|
301
|
+
* const count = await store().reset(["my-projection"]);
|
|
302
|
+
* console.log(`Reset ${count} streams for replay`);
|
|
303
|
+
* ```
|
|
304
|
+
*
|
|
305
|
+
* @see {@link Act.rebuild} for the high-level rebuild API
|
|
306
|
+
*/
|
|
307
|
+
reset: (streams: string[]) => Promise<number>;
|
|
289
308
|
}
|
|
290
309
|
/**
|
|
291
310
|
* A cached snapshot entry for a stream.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../../src/types/ports.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../../src/types/ports.ts"],"names":[],"mappings":"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"}
|
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() {
|
|
@@ -446,6 +446,17 @@ var InMemoryStream = class {
|
|
|
446
446
|
};
|
|
447
447
|
}
|
|
448
448
|
}
|
|
449
|
+
/**
|
|
450
|
+
* Reset this stream's watermark and state for replay.
|
|
451
|
+
*/
|
|
452
|
+
reset() {
|
|
453
|
+
this._at = -1;
|
|
454
|
+
this._retry = 0;
|
|
455
|
+
this._blocked = false;
|
|
456
|
+
this._error = "";
|
|
457
|
+
this._leased_by = void 0;
|
|
458
|
+
this._leased_until = void 0;
|
|
459
|
+
}
|
|
449
460
|
};
|
|
450
461
|
var InMemoryStore = class {
|
|
451
462
|
// stored events
|
|
@@ -573,7 +584,7 @@ var InMemoryStore = class {
|
|
|
573
584
|
async claim(lagging, leading, by, millis) {
|
|
574
585
|
await sleep();
|
|
575
586
|
const available = [...this._streams.values()].filter(
|
|
576
|
-
(s) => s.
|
|
587
|
+
(s) => s.is_available && (s.at < 0 || this._events.some(
|
|
577
588
|
(e) => e.id > s.at && e.name !== SNAP_EVENT && (!s.source || RegExp(s.source).test(e.stream))
|
|
578
589
|
))
|
|
579
590
|
);
|
|
@@ -636,6 +647,24 @@ var InMemoryStore = class {
|
|
|
636
647
|
await sleep();
|
|
637
648
|
return leases.map((l) => this._streams.get(l.stream)?.block(l, l.error)).filter((l) => !!l);
|
|
638
649
|
}
|
|
650
|
+
/**
|
|
651
|
+
* Reset watermarks for the given streams to -1, clearing retry, blocked,
|
|
652
|
+
* error, and lease state so they can be replayed from the beginning.
|
|
653
|
+
* @param streams - Stream names to reset.
|
|
654
|
+
* @returns Count of streams that were actually reset.
|
|
655
|
+
*/
|
|
656
|
+
async reset(streams) {
|
|
657
|
+
await sleep();
|
|
658
|
+
let count = 0;
|
|
659
|
+
for (const name of streams) {
|
|
660
|
+
const s = this._streams.get(name);
|
|
661
|
+
if (s) {
|
|
662
|
+
s.reset();
|
|
663
|
+
count++;
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
return count;
|
|
667
|
+
}
|
|
639
668
|
};
|
|
640
669
|
|
|
641
670
|
// src/ports.ts
|
|
@@ -817,7 +846,7 @@ async function action(me, action2, target, payload, reactingTo, skipValidation =
|
|
|
817
846
|
if (!stream) throw new Error("Missing target stream");
|
|
818
847
|
payload = skipValidation ? payload : validate(action2, payload, me.actions[action2]);
|
|
819
848
|
const snapshot = await load(me, stream);
|
|
820
|
-
const expected = expectedVersion
|
|
849
|
+
const expected = expectedVersion ?? snapshot.event?.version;
|
|
821
850
|
logger2.trace(
|
|
822
851
|
payload,
|
|
823
852
|
`\u{1F535} ${stream}.${action2}${typeof expected === "number" ? `.${expected}` : ""}`
|
|
@@ -876,7 +905,7 @@ async function action(me, action2, target, payload, reactingTo, skipValidation =
|
|
|
876
905
|
);
|
|
877
906
|
} catch (error) {
|
|
878
907
|
if (error.name === "ERR_CONCURRENCY") {
|
|
879
|
-
|
|
908
|
+
await cache().invalidate(stream);
|
|
880
909
|
}
|
|
881
910
|
throw error;
|
|
882
911
|
}
|
|
@@ -1727,7 +1756,11 @@ function registerState(state2, states, actions, events) {
|
|
|
1727
1756
|
patch: mergedPatch,
|
|
1728
1757
|
on: { ...existing.on, ...state2.on },
|
|
1729
1758
|
given: { ...existing.given, ...state2.given },
|
|
1730
|
-
snap: state2.snap
|
|
1759
|
+
snap: state2.snap && existing.snap && state2.snap !== existing.snap ? (() => {
|
|
1760
|
+
throw new Error(
|
|
1761
|
+
`Duplicate snap strategy for state "${state2.name}"`
|
|
1762
|
+
);
|
|
1763
|
+
})() : state2.snap || existing.snap
|
|
1731
1764
|
};
|
|
1732
1765
|
states.set(state2.name, merged);
|
|
1733
1766
|
for (const name of Object.keys(merged.actions)) {
|
|
@@ -1842,19 +1875,22 @@ function act(states = /* @__PURE__ */ new Map(), registry = {
|
|
|
1842
1875
|
maxRetries: options?.maxRetries ?? 3
|
|
1843
1876
|
}
|
|
1844
1877
|
};
|
|
1845
|
-
|
|
1846
|
-
|
|
1878
|
+
if (!handler.name)
|
|
1879
|
+
throw new Error(
|
|
1880
|
+
`Reaction handler for "${String(event)}" must be a named function`
|
|
1881
|
+
);
|
|
1882
|
+
registry.events[event].reactions.set(handler.name, reaction);
|
|
1847
1883
|
return {
|
|
1848
1884
|
...builder,
|
|
1849
1885
|
to(resolver) {
|
|
1850
|
-
registry.events[event].reactions.set(name, {
|
|
1886
|
+
registry.events[event].reactions.set(handler.name, {
|
|
1851
1887
|
...reaction,
|
|
1852
1888
|
resolver: typeof resolver === "string" ? { target: resolver } : resolver
|
|
1853
1889
|
});
|
|
1854
1890
|
return builder;
|
|
1855
1891
|
},
|
|
1856
1892
|
void() {
|
|
1857
|
-
registry.events[event].reactions.set(name, {
|
|
1893
|
+
registry.events[event].reactions.set(handler.name, {
|
|
1858
1894
|
...reaction,
|
|
1859
1895
|
resolver: _void_
|
|
1860
1896
|
});
|
|
@@ -1907,20 +1943,23 @@ function _projection(target, events) {
|
|
|
1907
1943
|
}
|
|
1908
1944
|
};
|
|
1909
1945
|
const register = events[event];
|
|
1910
|
-
|
|
1911
|
-
|
|
1946
|
+
if (!handler.name)
|
|
1947
|
+
throw new Error(
|
|
1948
|
+
`Projection handler for "${event}" must be a named function`
|
|
1949
|
+
);
|
|
1950
|
+
register.reactions.set(handler.name, reaction);
|
|
1912
1951
|
const nextBuilder = _projection(target, events);
|
|
1913
1952
|
return {
|
|
1914
1953
|
...nextBuilder,
|
|
1915
1954
|
to(resolver) {
|
|
1916
|
-
register.reactions.set(name, {
|
|
1955
|
+
register.reactions.set(handler.name, {
|
|
1917
1956
|
...reaction,
|
|
1918
1957
|
resolver: typeof resolver === "string" ? { target: resolver } : resolver
|
|
1919
1958
|
});
|
|
1920
1959
|
return nextBuilder;
|
|
1921
1960
|
},
|
|
1922
1961
|
void() {
|
|
1923
|
-
register.reactions.set(name, {
|
|
1962
|
+
register.reactions.set(handler.name, {
|
|
1924
1963
|
...reaction,
|
|
1925
1964
|
resolver: _void_
|
|
1926
1965
|
});
|
|
@@ -1987,19 +2026,22 @@ function slice(states = /* @__PURE__ */ new Map(), actions = {}, events = {}, pr
|
|
|
1987
2026
|
maxRetries: options?.maxRetries ?? 3
|
|
1988
2027
|
}
|
|
1989
2028
|
};
|
|
1990
|
-
|
|
1991
|
-
|
|
2029
|
+
if (!handler.name)
|
|
2030
|
+
throw new Error(
|
|
2031
|
+
`Reaction handler for "${String(event)}" must be a named function`
|
|
2032
|
+
);
|
|
2033
|
+
events[event].reactions.set(handler.name, reaction);
|
|
1992
2034
|
return {
|
|
1993
2035
|
...builder,
|
|
1994
2036
|
to(resolver) {
|
|
1995
|
-
events[event].reactions.set(name, {
|
|
2037
|
+
events[event].reactions.set(handler.name, {
|
|
1996
2038
|
...reaction,
|
|
1997
2039
|
resolver: typeof resolver === "string" ? { target: resolver } : resolver
|
|
1998
2040
|
});
|
|
1999
2041
|
return builder;
|
|
2000
2042
|
},
|
|
2001
2043
|
void() {
|
|
2002
|
-
events[event].reactions.set(name, {
|
|
2044
|
+
events[event].reactions.set(handler.name, {
|
|
2003
2045
|
...reaction,
|
|
2004
2046
|
resolver: _void_
|
|
2005
2047
|
});
|