@rotorsoft/act 0.6.0 → 0.6.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.
@@ -1 +1 @@
1
- {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/ports.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEpE;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS,4BAA6B,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAElD;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,uCAajB,CAAC;AAEH;;;;;;;;;GASG;AACH,KAAK,QAAQ,CAAC,IAAI,SAAS,UAAU,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;AAElE,wBAAgB,IAAI,CAAC,IAAI,SAAS,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,IACnD,UAAU,IAAI,KAAG,IAAI,CAQvC;AAGD,wBAAsB,cAAc,CAAC,IAAI,GAAE,QAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa3E;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CACrB,QAAQ,CAAC,EAAE,QAAQ,GAClB,CAAC,IAAI,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAGpC;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,iBAAiB,CAAC;AAEzC;;;;;;;;GAQG;AACH,eAAO,MAAM,KAAK,wCAEhB,CAAC"}
1
+ {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/ports.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAO,EACP,KAAK,EACN,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS,4BAA6B,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAElD;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,uCAajB,CAAC;AAEH;;;;;;;;;GASG;AACH,KAAK,QAAQ,CAAC,IAAI,SAAS,UAAU,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;AAElE,wBAAgB,IAAI,CAAC,IAAI,SAAS,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,IACnD,UAAU,IAAI,KAAG,IAAI,CAQvC;AAGD,wBAAsB,cAAc,CAAC,IAAI,GAAE,QAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa3E;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CACrB,QAAQ,CAAC,EAAE,QAAQ,GAClB,CAAC,IAAI,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAGpC;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,iBAAiB,CAAC;AAEzC;;;;;;;;GAQG;AACH,eAAO,MAAM,KAAK,wCAEhB,CAAC;AAEH;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG;IAChD,OAAO,EAAE,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACxD,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;IACtC,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;CAC7D,CAkDA"}
@@ -48,11 +48,12 @@ export interface Store extends Disposable {
48
48
  */
49
49
  query: <E extends Schemas>(callback: (event: Committed<E, keyof E>) => void, query?: Query) => Promise<number>;
50
50
  /**
51
- * Polls the store for unblocked streams needing processing, ordered by lease watermark ascending.
51
+ * Polls the store for unblocked streams needing processing, ordered by lease watermark.
52
52
  * @param limit - Maximum number of streams to poll.
53
+ * @param descending - Whether to poll streams in descending order (aka poll the most advanced first).
53
54
  * @returns The polled streams.
54
55
  */
55
- poll: (limit: number) => Promise<Poll[]>;
56
+ poll: (limit: number, descending?: boolean) => Promise<Poll[]>;
56
57
  /**
57
58
  * Lease streams for processing (e.g., for distributed consumers).
58
59
  * @param leases - Lease requests for streams, including end-of-lease watermark, lease holder, and source stream.
@@ -1 +1 @@
1
- {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../../src/types/ports.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,OAAO,EACP,KAAK,EACL,OAAO,EACR,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAEjD;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,KAAM,SAAQ,UAAU;IACvC;;OAEG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B;;;;;;;;OAQG;IACH,MAAM,EAAE,CAAC,CAAC,SAAS,OAAO,EACxB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,EAC3B,IAAI,EAAE,SAAS,EACf,eAAe,CAAC,EAAE,MAAM,KACrB,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAEtC;;;;;OAKG;IACH,KAAK,EAAE,CAAC,CAAC,SAAS,OAAO,EACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,IAAI,EAChD,KAAK,CAAC,EAAE,KAAK,KACV,OAAO,CAAC,MAAM,CAAC,CAAC;IAErB;;;;OAIG;IACH,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAEzC;;;;;OAKG;IACH,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAE7D;;;OAGG;IACH,GAAG,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAE3C;;;;OAIG;IACH,KAAK,EAAE,CACL,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,KACrC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CAChD"}
1
+ {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../../src/types/ports.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,OAAO,EACP,KAAK,EACL,OAAO,EACR,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAEjD;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,KAAM,SAAQ,UAAU;IACvC;;OAEG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B;;;;;;;;OAQG;IACH,MAAM,EAAE,CAAC,CAAC,SAAS,OAAO,EACxB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,EAC3B,IAAI,EAAE,SAAS,EACf,eAAe,CAAC,EAAE,MAAM,KACrB,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAEtC;;;;;OAKG;IACH,KAAK,EAAE,CAAC,CAAC,SAAS,OAAO,EACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,IAAI,EAChD,KAAK,CAAC,EAAE,KAAK,KACV,OAAO,CAAC,MAAM,CAAC,CAAC;IAErB;;;;;OAKG;IACH,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAE/D;;;;;OAKG;IACH,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAE7D;;;OAGG;IACH,GAAG,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAE3C;;;;OAIG;IACH,KAAK,EAAE,CACL,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,KACrC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CAChD"}
@@ -75,14 +75,17 @@ export type Poll = {
75
75
  readonly at: number;
76
76
  };
77
77
  /**
78
- * Options for fetching events from the store.
78
+ * Options for draining events from the store.
79
79
  * @property streamLimit - Maximum number of streams to fetch.
80
80
  * @property eventLimit - Maximum number of events to fetch per stream.
81
+ * @property leaseMillis - Maximum lease duration (in milliseconds).
82
+ * @property descending - Whether to fetch streams in descending order (aka fetch the most advanced first).
81
83
  */
82
- export type FetchOptions = {
84
+ export type DrainOptions = {
83
85
  readonly streamLimit?: number;
84
86
  readonly eventLimit?: number;
85
87
  readonly leaseMillis?: number;
88
+ readonly descending?: boolean;
86
89
  };
87
90
  /**
88
91
  * Result of fetching events from the store for processing.
@@ -1 +1 @@
1
- {"version":3,"file":"reaction.d.ts","sourceRoot":"","sources":["../../../src/types/reaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reaction.d.ts","sourceRoot":"","sources":["../../../src/types/reaction.ts"],"names":[],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -48,6 +48,7 @@ __export(index_exports, {
48
48
  ValidationError: () => ValidationError,
49
49
  ZodEmpty: () => ZodEmpty,
50
50
  act: () => act,
51
+ build_tracer: () => build_tracer,
51
52
  config: () => config,
52
53
  dispose: () => dispose,
53
54
  disposeAndExit: () => disposeAndExit,
@@ -431,11 +432,12 @@ var InMemoryStore = class {
431
432
  /**
432
433
  * Polls the store for unblocked streams needing processing, ordered by lease watermark ascending.
433
434
  * @param limit - Maximum number of streams to poll.
435
+ * @param descending - Whether to poll streams in descending order (aka poll the most advanced first).
434
436
  * @returns The polled streams.
435
437
  */
436
- async poll(limit) {
438
+ async poll(limit, descending = false) {
437
439
  await sleep();
438
- return [...this._streams.values()].filter((s) => s.is_avaliable).sort((a, b) => a.at - b.at).slice(0, limit).map(({ stream, source, at }) => ({ stream, source, at }));
440
+ return [...this._streams.values()].filter((s) => s.is_avaliable).sort((a, b) => descending ? b.at - a.at : a.at - b.at).slice(0, limit).map(({ stream, source, at }) => ({ stream, source, at }));
439
441
  }
440
442
  /**
441
443
  * Lease streams for processing (e.g., for distributed consumers).
@@ -519,6 +521,62 @@ var SNAP_EVENT = "__snapshot__";
519
521
  var store = port(function store2(adapter) {
520
522
  return adapter || new InMemoryStore();
521
523
  });
524
+ function build_tracer(logLevel2) {
525
+ if (logLevel2 === "trace") {
526
+ return {
527
+ fetched: (fetched) => {
528
+ const data = Object.fromEntries(
529
+ fetched.map(({ stream, source, events }) => {
530
+ const key = source ? `${stream}<-${source}` : stream;
531
+ const value = Object.fromEntries(
532
+ events.map(({ id, stream: stream2, name }) => [id, { [stream2]: name }])
533
+ );
534
+ return [key, value];
535
+ })
536
+ );
537
+ logger.trace(data, "\u26A1\uFE0F fetch");
538
+ },
539
+ correlated: (leases) => {
540
+ const data = leases.map(({ stream }) => stream).join(" ");
541
+ logger.trace(`\u26A1\uFE0F correlate ${data}`);
542
+ },
543
+ leased: (leases) => {
544
+ const data = Object.fromEntries(
545
+ leases.map(({ stream, at, retry }) => [stream, { at, retry }])
546
+ );
547
+ logger.trace(data, "\u26A1\uFE0F lease");
548
+ },
549
+ acked: (leases) => {
550
+ const data = Object.fromEntries(
551
+ leases.map(({ stream, at, retry }) => [stream, { at, retry }])
552
+ );
553
+ logger.trace(data, "\u26A1\uFE0F ack");
554
+ },
555
+ blocked: (leases) => {
556
+ const data = Object.fromEntries(
557
+ leases.map(({ stream, at, retry, error }) => [
558
+ stream,
559
+ { at, retry, error }
560
+ ])
561
+ );
562
+ logger.trace(data, "\u26A1\uFE0F block");
563
+ }
564
+ };
565
+ } else {
566
+ return {
567
+ fetched: () => {
568
+ },
569
+ correlated: () => {
570
+ },
571
+ leased: () => {
572
+ },
573
+ acked: () => {
574
+ },
575
+ blocked: () => {
576
+ }
577
+ };
578
+ }
579
+ }
522
580
 
523
581
  // src/signals.ts
524
582
  process.once("SIGINT", async (arg) => {
@@ -657,40 +715,7 @@ async function action(me, action2, target, payload, reactingTo, skipValidation =
657
715
  }
658
716
 
659
717
  // src/act.ts
660
- function traceFetch(fetch) {
661
- const data = Object.fromEntries(
662
- fetch.map(({ stream, source, events }) => {
663
- const key = source ? `${stream}<-${source}` : stream;
664
- const value = Object.fromEntries(
665
- events.map(({ id, stream: stream2, name }) => [id, { [stream2]: name }])
666
- );
667
- return [key, value];
668
- })
669
- );
670
- logger.trace(data, "\u26A1\uFE0F fetch");
671
- }
672
- function traceCorrelated(leases) {
673
- const data = leases.map(({ stream }) => stream).join(" ");
674
- logger.trace(`\u26A1\uFE0F correlate ${data}`);
675
- }
676
- function traceLeased(leases) {
677
- const data = Object.fromEntries(
678
- leases.map(({ stream, at, retry }) => [stream, { at, retry }])
679
- );
680
- logger.trace(data, "\u26A1\uFE0F lease");
681
- }
682
- function traceAcked(leases) {
683
- const data = Object.fromEntries(
684
- leases.map(({ stream, at, retry }) => [stream, { at, retry }])
685
- );
686
- logger.trace(data, "\u26A1\uFE0F ack");
687
- }
688
- function traceBlocked(leases) {
689
- const data = Object.fromEntries(
690
- leases.map(({ stream, at, retry, error }) => [stream, { at, retry, error }])
691
- );
692
- logger.trace(data, "\u26A1\uFE0F block");
693
- }
718
+ var tracer = build_tracer(config().logLevel);
694
719
  var Act = class {
695
720
  /**
696
721
  * Create a new Act orchestrator.
@@ -834,24 +859,6 @@ var Act = class {
834
859
  }
835
860
  return { lease, at };
836
861
  }
837
- /**
838
- * Fetches new events from store according to the fetch options.
839
- * @param options - Fetch options.
840
- * @returns Fetched streams with next events to process.
841
- */
842
- async fetch({ streamLimit = 10, eventLimit = 10 }) {
843
- const polled = await store().poll(streamLimit);
844
- return Promise.all(
845
- polled.map(async ({ stream, source, at }) => {
846
- const events = await this.query_array({
847
- stream: source,
848
- after: at,
849
- limit: eventLimit
850
- });
851
- return { stream, source, events };
852
- })
853
- );
854
- }
855
862
  /**
856
863
  * Drains and processes events from the store, triggering reactions and updating state.
857
864
  *
@@ -865,14 +872,25 @@ var Act = class {
865
872
  async drain({
866
873
  streamLimit = 10,
867
874
  eventLimit = 10,
868
- leaseMillis = 1e4
875
+ leaseMillis = 1e4,
876
+ descending = false
869
877
  } = {}) {
870
878
  if (!this._drain_locked) {
871
879
  try {
872
880
  this._drain_locked = true;
873
- const fetch = await this.fetch({ streamLimit, eventLimit });
874
- fetch.length && traceFetch(fetch);
875
- const [last_at, count] = fetch.reduce(
881
+ const polled = await store().poll(streamLimit, descending);
882
+ const fetched = await Promise.all(
883
+ polled.map(async ({ stream, source, at }) => {
884
+ const events = await this.query_array({
885
+ stream: source,
886
+ after: at,
887
+ limit: eventLimit
888
+ });
889
+ return { stream, source, events };
890
+ })
891
+ );
892
+ fetched.length && tracer.fetched(fetched);
893
+ const [last_at, count] = fetched.reduce(
876
894
  ([last_at2, count2], { events }) => [
877
895
  Math.max(last_at2, events.at(-1)?.id || 0),
878
896
  count2 + events.length
@@ -881,7 +899,7 @@ var Act = class {
881
899
  );
882
900
  if (count > 0) {
883
901
  const leases = /* @__PURE__ */ new Map();
884
- fetch.forEach(({ stream, events }) => {
902
+ fetched.forEach(({ stream, events }) => {
885
903
  const payloads = events.flatMap((event) => {
886
904
  const register = this.registry.events[event.name];
887
905
  if (!register) return [];
@@ -911,7 +929,7 @@ var Act = class {
911
929
  leaseMillis
912
930
  );
913
931
  if (leased.length) {
914
- traceLeased(leased);
932
+ tracer.leased(leased);
915
933
  const handled = await Promise.all(
916
934
  leased.map(
917
935
  (lease) => this.handle(lease, leases.get(lease.stream).payloads)
@@ -921,14 +939,14 @@ var Act = class {
921
939
  handled.filter(({ error }) => !error).map(({ at, lease }) => ({ ...lease, at }))
922
940
  );
923
941
  if (acked.length) {
924
- traceAcked(acked);
942
+ tracer.acked(acked);
925
943
  this.emit("acked", acked);
926
944
  }
927
945
  const blocked = await store().block(
928
946
  handled.filter(({ block }) => block).map(({ lease, error }) => ({ ...lease, error }))
929
947
  );
930
948
  if (blocked.length) {
931
- traceBlocked(blocked);
949
+ tracer.blocked(blocked);
932
950
  this.emit("blocked", blocked);
933
951
  }
934
952
  return { leased, acked, blocked };
@@ -972,7 +990,7 @@ var Act = class {
972
990
  payloads
973
991
  }));
974
992
  const leased = await store().lease(leases, 0);
975
- leased.length && traceCorrelated(leased);
993
+ leased.length && tracer.correlated(leased);
976
994
  return { leased, last_id };
977
995
  }
978
996
  return { leased: [], last_id };
@@ -1173,6 +1191,7 @@ function action_builder(state2) {
1173
1191
  ValidationError,
1174
1192
  ZodEmpty,
1175
1193
  act,
1194
+ build_tracer,
1176
1195
  config,
1177
1196
  dispose,
1178
1197
  disposeAndExit,