@rotorsoft/act 0.6.1 → 0.6.2
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.d.ts +2 -8
- package/dist/@types/act.d.ts.map +1 -1
- package/dist/@types/adapters/InMemoryStore.d.ts +18 -6
- package/dist/@types/adapters/InMemoryStore.d.ts.map +1 -1
- package/dist/@types/types/ports.d.ts +3 -3
- package/dist/@types/types/ports.d.ts.map +1 -1
- package/dist/@types/types/reaction.d.ts +28 -13
- package/dist/@types/types/reaction.d.ts.map +1 -1
- package/dist/@types/types/registry.d.ts +9 -0
- package/dist/@types/types/registry.d.ts.map +1 -1
- package/dist/index.cjs +128 -117
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +128 -117
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InMemoryStore.d.ts","sourceRoot":"","sources":["../../../src/adapters/InMemoryStore.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,KAAK,EACL,OAAO,EACP,KAAK,EACL,OAAO,EACP,KAAK,EACN,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"InMemoryStore.d.ts","sourceRoot":"","sources":["../../../src/adapters/InMemoryStore.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,KAAK,EACL,OAAO,EACP,KAAK,EACL,OAAO,EACP,KAAK,EACN,MAAM,mBAAmB,CAAC;AAgG3B;;;;;;;;;;;;GAYG;AACH,qBAAa,aAAc,YAAW,KAAK;IAEzC,OAAO,CAAC,OAAO,CAA2C;IAE1D,OAAO,CAAC,QAAQ,CAA0C;IAE1D;;;OAGG;IACG,OAAO;IAKb;;;OAGG;IACG,IAAI;IAIV;;;OAGG;IACG,IAAI;IAMV,OAAO,CAAC,QAAQ;IAUhB;;;;;OAKG;IACG,KAAK,CAAC,CAAC,SAAS,OAAO,EAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,IAAI,EAChD,KAAK,CAAC,EAAE,KAAK;IAiCf;;;;;;;;OAQG;IACG,MAAM,CAAC,CAAC,SAAS,OAAO,EAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,EAC3B,IAAI,EAAE,SAAS,EACf,eAAe,CAAC,EAAE,MAAM;IAiC1B;;;;;OAKG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;;;IAe3C;;;;;OAKG;IACG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM;IAa3C;;;OAGG;IACG,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE;;;;;;;IAOzB;;;;OAIG;IACG,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;;;;;;;;CAMrD"}
|
|
@@ -49,11 +49,11 @@ export interface Store extends Disposable {
|
|
|
49
49
|
query: <E extends Schemas>(callback: (event: Committed<E, keyof E>) => void, query?: Query) => Promise<number>;
|
|
50
50
|
/**
|
|
51
51
|
* Polls the store for unblocked streams needing processing, ordered by lease watermark.
|
|
52
|
-
* @param
|
|
53
|
-
* @param
|
|
52
|
+
* @param lagging - Max number of streams to poll in ascending order.
|
|
53
|
+
* @param leading - Max number of streams to poll in descending order.
|
|
54
54
|
* @returns The polled streams.
|
|
55
55
|
*/
|
|
56
|
-
poll: (
|
|
56
|
+
poll: (lagging: number, leading: number) => Promise<Poll[]>;
|
|
57
57
|
/**
|
|
58
58
|
* Lease streams for processing (e.g., for distributed consumers).
|
|
59
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;;;;;OAKG;IACH,IAAI,EAAE,CAAC,
|
|
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,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAE5D;;;;;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"}
|
|
@@ -74,29 +74,18 @@ export type Poll = {
|
|
|
74
74
|
readonly source?: string;
|
|
75
75
|
readonly at: number;
|
|
76
76
|
};
|
|
77
|
-
/**
|
|
78
|
-
* Options for draining events from the store.
|
|
79
|
-
* @property streamLimit - Maximum number of streams to fetch.
|
|
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).
|
|
83
|
-
*/
|
|
84
|
-
export type DrainOptions = {
|
|
85
|
-
readonly streamLimit?: number;
|
|
86
|
-
readonly eventLimit?: number;
|
|
87
|
-
readonly leaseMillis?: number;
|
|
88
|
-
readonly descending?: boolean;
|
|
89
|
-
};
|
|
90
77
|
/**
|
|
91
78
|
* Result of fetching events from the store for processing.
|
|
92
79
|
* @template E - Event schemas.
|
|
93
80
|
* @property stream - The stream name
|
|
94
81
|
* @property source - The source stream(s) (name or RegExp), or undefined when sourcing from all streams.
|
|
82
|
+
* @property at - The last event sequence number processed by the stream.
|
|
95
83
|
* @property events - The list of next committed events to be processed by the stream.
|
|
96
84
|
*/
|
|
97
85
|
export type Fetch<E extends Schemas> = Array<{
|
|
98
86
|
readonly stream: string;
|
|
99
87
|
readonly source?: string;
|
|
88
|
+
readonly at: number;
|
|
100
89
|
readonly events: Committed<E, keyof E>[];
|
|
101
90
|
}>;
|
|
102
91
|
/**
|
|
@@ -114,4 +103,30 @@ export type Lease = {
|
|
|
114
103
|
readonly by: string;
|
|
115
104
|
readonly retry: number;
|
|
116
105
|
};
|
|
106
|
+
/**
|
|
107
|
+
* Options for draining events from the store.
|
|
108
|
+
* @property streamLimit - Maximum number of streams to fetch.
|
|
109
|
+
* @property eventLimit - Maximum number of events to fetch per stream.
|
|
110
|
+
* @property leaseMillis - Maximum lease duration (in milliseconds).
|
|
111
|
+
*/
|
|
112
|
+
export type DrainOptions = {
|
|
113
|
+
readonly streamLimit?: number;
|
|
114
|
+
readonly eventLimit?: number;
|
|
115
|
+
readonly leaseMillis?: number;
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* Drain results
|
|
119
|
+
* @property fetched - The fetched events.
|
|
120
|
+
* @property leased - The leased events.
|
|
121
|
+
* @property acked - The acked events.
|
|
122
|
+
* @property blocked - The blocked events.
|
|
123
|
+
*/
|
|
124
|
+
export type Drain<E extends Schemas> = {
|
|
125
|
+
readonly fetched: Fetch<E>;
|
|
126
|
+
readonly leased: Lease[];
|
|
127
|
+
readonly acked: Lease[];
|
|
128
|
+
readonly blocked: Array<Lease & {
|
|
129
|
+
error: string;
|
|
130
|
+
}>;
|
|
131
|
+
};
|
|
117
132
|
//# sourceMappingURL=reaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reaction.d.ts","sourceRoot":"","sources":["../../../src/types/reaction.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAExE;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,CAClE,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EACtB,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,MAAM,CAAC,IAC7D;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACnC,CAAC,CACC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KACnB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAAC;AAE1D;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI;IACrE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;CACnC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG;IAC7D,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,IAAI,GAAG;IACjB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"reaction.d.ts","sourceRoot":"","sources":["../../../src/types/reaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,4 +53,13 @@ export type AsCommitted<R, K extends keyof R> = R[K] extends {
|
|
|
53
53
|
readonly name: K;
|
|
54
54
|
readonly data: z.infer<S>;
|
|
55
55
|
} & CommittedMeta : never;
|
|
56
|
+
/**
|
|
57
|
+
* Utility type to map commited events from zod schema maps.
|
|
58
|
+
* @template E - Event map.
|
|
59
|
+
* @template K - Event name.
|
|
60
|
+
*/
|
|
61
|
+
export type CommittedOf<E, K extends keyof E> = E[K] extends z.ZodType ? {
|
|
62
|
+
readonly name: K;
|
|
63
|
+
readonly data: z.infer<E[K]>;
|
|
64
|
+
} & CommittedMeta : never;
|
|
56
65
|
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/types/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI;IACpE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CACxC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,OAAO,IAAI;KAC5C,CAAC,IAAI,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;CACxC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CAAE,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,MAAM,QAAQ,CAClB,CAAC,SAAS,cAAc,CAAC,CAAC,CAAC,EAC3B,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,OAAO,IACf;IACF,QAAQ,CAAC,OAAO,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;KAAE,CAAC;IACxD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;CACnC,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;IAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC5E;IACE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;CAC3B,GAAG,aAAa,GACjB,KAAK,CAAC"}
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/types/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI;IACpE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CACxC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,OAAO,IAAI;KAC5C,CAAC,IAAI,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;CACxC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CAAE,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,MAAM,QAAQ,CAClB,CAAC,SAAS,cAAc,CAAC,CAAC,CAAC,EAC3B,CAAC,SAAS,OAAO,EACjB,CAAC,SAAS,OAAO,IACf;IACF,QAAQ,CAAC,OAAO,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;KAAE,CAAC;IACxD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;CACnC,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;IAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC5E;IACE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;CAC3B,GAAG,aAAa,GACjB,KAAK,CAAC;AAEV;;;;GAIG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,GAClE;IACE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9B,GAAG,aAAa,GACjB,KAAK,CAAC"}
|
package/dist/index.cjs
CHANGED
|
@@ -262,21 +262,21 @@ async function sleep(ms) {
|
|
|
262
262
|
|
|
263
263
|
// src/adapters/InMemoryStore.ts
|
|
264
264
|
var InMemoryStream = class {
|
|
265
|
-
stream;
|
|
266
|
-
source;
|
|
267
|
-
at = -1;
|
|
268
|
-
retry = -1;
|
|
269
|
-
blocked = false;
|
|
270
|
-
error = "";
|
|
271
|
-
leased_at = void 0;
|
|
272
|
-
leased_by = void 0;
|
|
273
|
-
leased_until = void 0;
|
|
274
265
|
constructor(stream, source) {
|
|
275
266
|
this.stream = stream;
|
|
276
267
|
this.source = source;
|
|
277
268
|
}
|
|
269
|
+
_at = -1;
|
|
270
|
+
_retry = -1;
|
|
271
|
+
_blocked = false;
|
|
272
|
+
_error = "";
|
|
273
|
+
_leased_by = void 0;
|
|
274
|
+
_leased_until = void 0;
|
|
278
275
|
get is_avaliable() {
|
|
279
|
-
return !this.
|
|
276
|
+
return !this._blocked && (!this._leased_until || this._leased_until <= /* @__PURE__ */ new Date());
|
|
277
|
+
}
|
|
278
|
+
get at() {
|
|
279
|
+
return this._at;
|
|
280
280
|
}
|
|
281
281
|
/**
|
|
282
282
|
* Attempt to lease this stream for processing.
|
|
@@ -286,17 +286,18 @@ var InMemoryStream = class {
|
|
|
286
286
|
* @returns The granted lease or undefined if blocked.
|
|
287
287
|
*/
|
|
288
288
|
lease(at, by, millis) {
|
|
289
|
-
if (this.is_avaliable
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
289
|
+
if (this.is_avaliable) {
|
|
290
|
+
if (millis > 0) {
|
|
291
|
+
this._leased_by = by;
|
|
292
|
+
this._leased_until = new Date(Date.now() + millis);
|
|
293
|
+
this._retry = this._retry + 1;
|
|
294
|
+
}
|
|
294
295
|
return {
|
|
295
296
|
stream: this.stream,
|
|
296
297
|
source: this.source,
|
|
297
298
|
at,
|
|
298
299
|
by,
|
|
299
|
-
retry: this.
|
|
300
|
+
retry: this._retry
|
|
300
301
|
};
|
|
301
302
|
}
|
|
302
303
|
}
|
|
@@ -306,27 +307,37 @@ var InMemoryStream = class {
|
|
|
306
307
|
* @param by - Lease holder that processed the watermark.
|
|
307
308
|
*/
|
|
308
309
|
ack(at, by) {
|
|
309
|
-
if (this.
|
|
310
|
-
this.
|
|
311
|
-
this.
|
|
312
|
-
this.
|
|
313
|
-
this.
|
|
314
|
-
|
|
315
|
-
|
|
310
|
+
if (this._leased_by === by) {
|
|
311
|
+
this._leased_by = void 0;
|
|
312
|
+
this._leased_until = void 0;
|
|
313
|
+
this._at = at;
|
|
314
|
+
this._retry = -1;
|
|
315
|
+
return {
|
|
316
|
+
stream: this.stream,
|
|
317
|
+
source: this.source,
|
|
318
|
+
at: this._at,
|
|
319
|
+
by,
|
|
320
|
+
retry: this._retry
|
|
321
|
+
};
|
|
316
322
|
}
|
|
317
|
-
return false;
|
|
318
323
|
}
|
|
319
324
|
/**
|
|
320
325
|
* Block a stream for processing after failing to process and reaching max retries with blocking enabled.
|
|
321
326
|
* @param error Blocked error message.
|
|
322
327
|
*/
|
|
323
328
|
block(by, error) {
|
|
324
|
-
if (this.
|
|
325
|
-
this.
|
|
326
|
-
this.
|
|
327
|
-
return
|
|
329
|
+
if (this._leased_by === by) {
|
|
330
|
+
this._blocked = true;
|
|
331
|
+
this._error = error;
|
|
332
|
+
return {
|
|
333
|
+
stream: this.stream,
|
|
334
|
+
source: this.source,
|
|
335
|
+
at: this._at,
|
|
336
|
+
by: this._leased_by,
|
|
337
|
+
retry: this._retry,
|
|
338
|
+
error: this._error
|
|
339
|
+
};
|
|
328
340
|
}
|
|
329
|
-
return false;
|
|
330
341
|
}
|
|
331
342
|
};
|
|
332
343
|
var InMemoryStore = class {
|
|
@@ -358,6 +369,15 @@ var InMemoryStore = class {
|
|
|
358
369
|
this._events.length = 0;
|
|
359
370
|
this._streams = /* @__PURE__ */ new Map();
|
|
360
371
|
}
|
|
372
|
+
in_query(query, e) {
|
|
373
|
+
if (query.stream && !RegExp(`^${query.stream}$`).test(e.stream))
|
|
374
|
+
return false;
|
|
375
|
+
if (query.names && !query.names.includes(e.name)) return false;
|
|
376
|
+
if (query.correlation && e.meta?.correlation !== query.correlation)
|
|
377
|
+
return false;
|
|
378
|
+
if (e.name === SNAP_EVENT && !query.with_snaps) return false;
|
|
379
|
+
return true;
|
|
380
|
+
}
|
|
361
381
|
/**
|
|
362
382
|
* Query events in the store, optionally filtered by query options.
|
|
363
383
|
* @param callback - Function to call for each event.
|
|
@@ -366,30 +386,32 @@ var InMemoryStore = class {
|
|
|
366
386
|
*/
|
|
367
387
|
async query(callback, query) {
|
|
368
388
|
await sleep();
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
389
|
+
let count = 0;
|
|
390
|
+
if (query?.backward) {
|
|
391
|
+
let i = (query?.before || this._events.length) - 1;
|
|
392
|
+
while (i >= 0) {
|
|
393
|
+
const e = this._events[i--];
|
|
394
|
+
if (query && !this.in_query(query, e)) continue;
|
|
395
|
+
if (query?.created_before && e.created >= query.created_before)
|
|
396
|
+
continue;
|
|
397
|
+
if (query.after && e.id <= query.after) break;
|
|
398
|
+
if (query.created_after && e.created <= query.created_after) break;
|
|
399
|
+
callback(e);
|
|
400
|
+
count++;
|
|
401
|
+
if (query?.limit && count >= query.limit) break;
|
|
402
|
+
}
|
|
403
|
+
} else {
|
|
404
|
+
let i = (query?.after ?? -1) + 1;
|
|
405
|
+
while (i < this._events.length) {
|
|
406
|
+
const e = this._events[i++];
|
|
407
|
+
if (query && !this.in_query(query, e)) continue;
|
|
408
|
+
if (query?.created_after && e.created <= query.created_after) continue;
|
|
409
|
+
if (query?.before && e.id >= query.before) break;
|
|
410
|
+
if (query?.created_before && e.created >= query.created_before) break;
|
|
411
|
+
callback(e);
|
|
412
|
+
count++;
|
|
413
|
+
if (query?.limit && count >= query.limit) break;
|
|
414
|
+
}
|
|
393
415
|
}
|
|
394
416
|
return count;
|
|
395
417
|
}
|
|
@@ -431,13 +453,15 @@ var InMemoryStore = class {
|
|
|
431
453
|
}
|
|
432
454
|
/**
|
|
433
455
|
* Polls the store for unblocked streams needing processing, ordered by lease watermark ascending.
|
|
434
|
-
* @param
|
|
435
|
-
* @param
|
|
456
|
+
* @param lagging - Max number of streams to poll in ascending order.
|
|
457
|
+
* @param leading - Max number of streams to poll in descending order.
|
|
436
458
|
* @returns The polled streams.
|
|
437
459
|
*/
|
|
438
|
-
async poll(
|
|
460
|
+
async poll(lagging, leading) {
|
|
439
461
|
await sleep();
|
|
440
|
-
|
|
462
|
+
const a = [...this._streams.values()].filter((s) => s.is_avaliable).sort((a2, b2) => a2.at - b2.at).slice(0, lagging).map(({ stream, source, at }) => ({ stream, source, at }));
|
|
463
|
+
const b = [...this._streams.values()].filter((s) => s.is_avaliable).sort((a2, b2) => b2.at - a2.at).slice(0, leading).map(({ stream, source, at }) => ({ stream, source, at }));
|
|
464
|
+
return [...a, ...b];
|
|
441
465
|
}
|
|
442
466
|
/**
|
|
443
467
|
* Lease streams for processing (e.g., for distributed consumers).
|
|
@@ -447,10 +471,11 @@ var InMemoryStore = class {
|
|
|
447
471
|
*/
|
|
448
472
|
async lease(leases, millis) {
|
|
449
473
|
await sleep();
|
|
450
|
-
return leases.map((
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
474
|
+
return leases.map((l) => {
|
|
475
|
+
if (!this._streams.has(l.stream)) {
|
|
476
|
+
this._streams.set(l.stream, new InMemoryStream(l.stream, l.source));
|
|
477
|
+
}
|
|
478
|
+
return this._streams.get(l.stream)?.lease(l.at, l.by, millis);
|
|
454
479
|
}).filter((l) => !!l);
|
|
455
480
|
}
|
|
456
481
|
/**
|
|
@@ -459,9 +484,7 @@ var InMemoryStore = class {
|
|
|
459
484
|
*/
|
|
460
485
|
async ack(leases) {
|
|
461
486
|
await sleep();
|
|
462
|
-
return leases.filter(
|
|
463
|
-
(lease) => this._streams.get(lease.stream)?.ack(lease.at, lease.by)
|
|
464
|
-
);
|
|
487
|
+
return leases.map((l) => this._streams.get(l.stream)?.ack(l.at, l.by)).filter((l) => !!l);
|
|
465
488
|
}
|
|
466
489
|
/**
|
|
467
490
|
* Block a stream for processing after failing to process and reaching max retries with blocking enabled.
|
|
@@ -470,9 +493,7 @@ var InMemoryStore = class {
|
|
|
470
493
|
*/
|
|
471
494
|
async block(leases) {
|
|
472
495
|
await sleep();
|
|
473
|
-
return leases.filter(
|
|
474
|
-
(lease) => this._streams.get(lease.stream)?.block(lease.by, lease.error)
|
|
475
|
-
);
|
|
496
|
+
return leases.map((l) => this._streams.get(l.stream)?.block(l.by, l.error)).filter((l) => !!l);
|
|
476
497
|
}
|
|
477
498
|
};
|
|
478
499
|
|
|
@@ -872,13 +893,14 @@ var Act = class {
|
|
|
872
893
|
async drain({
|
|
873
894
|
streamLimit = 10,
|
|
874
895
|
eventLimit = 10,
|
|
875
|
-
leaseMillis = 1e4
|
|
876
|
-
descending = false
|
|
896
|
+
leaseMillis = 1e4
|
|
877
897
|
} = {}) {
|
|
878
898
|
if (!this._drain_locked) {
|
|
879
899
|
try {
|
|
880
900
|
this._drain_locked = true;
|
|
881
|
-
const
|
|
901
|
+
const lagging = Math.ceil(streamLimit * 2 / 3);
|
|
902
|
+
const leading = streamLimit - lagging;
|
|
903
|
+
const polled = await store().poll(lagging, leading);
|
|
882
904
|
const fetched = await Promise.all(
|
|
883
905
|
polled.map(async ({ stream, source, at }) => {
|
|
884
906
|
const events = await this.query_array({
|
|
@@ -886,28 +908,21 @@ var Act = class {
|
|
|
886
908
|
after: at,
|
|
887
909
|
limit: eventLimit
|
|
888
910
|
});
|
|
889
|
-
return { stream, source, events };
|
|
911
|
+
return { stream, source, at, events };
|
|
890
912
|
})
|
|
891
913
|
);
|
|
892
|
-
fetched.length
|
|
893
|
-
|
|
894
|
-
([last_at2, count2], { events }) => [
|
|
895
|
-
Math.max(last_at2, events.at(-1)?.id || 0),
|
|
896
|
-
count2 + events.length
|
|
897
|
-
],
|
|
898
|
-
[0, 0]
|
|
899
|
-
);
|
|
900
|
-
if (count > 0) {
|
|
914
|
+
if (fetched.length) {
|
|
915
|
+
tracer.fetched(fetched);
|
|
901
916
|
const leases = /* @__PURE__ */ new Map();
|
|
917
|
+
const last_window_at = fetched.reduce(
|
|
918
|
+
(max, { at, events }) => Math.max(max, events.at(-1)?.id || at),
|
|
919
|
+
0
|
|
920
|
+
);
|
|
902
921
|
fetched.forEach(({ stream, events }) => {
|
|
903
922
|
const payloads = events.flatMap((event) => {
|
|
904
|
-
const register = this.registry.events[event.name];
|
|
905
|
-
if (!register) return [];
|
|
923
|
+
const register = this.registry.events[event.name] || [];
|
|
906
924
|
return [...register.reactions.values()].filter((reaction) => {
|
|
907
|
-
const resolved = typeof reaction.resolver === "function" ? (
|
|
908
|
-
// @ts-expect-error index by key
|
|
909
|
-
reaction.resolver(event)
|
|
910
|
-
) : reaction.resolver;
|
|
925
|
+
const resolved = typeof reaction.resolver === "function" ? reaction.resolver(event) : reaction.resolver;
|
|
911
926
|
return resolved && resolved.target === stream;
|
|
912
927
|
}).map((reaction) => ({ ...reaction, event }));
|
|
913
928
|
});
|
|
@@ -915,43 +930,39 @@ var Act = class {
|
|
|
915
930
|
lease: {
|
|
916
931
|
stream,
|
|
917
932
|
by: (0, import_crypto2.randomUUID)(),
|
|
918
|
-
at: events.at(-1)?.id ||
|
|
919
|
-
//
|
|
933
|
+
at: events.at(-1)?.id || last_window_at,
|
|
934
|
+
// ff when no matching events
|
|
920
935
|
retry: 0
|
|
921
936
|
},
|
|
922
937
|
// @ts-expect-error indexed by key
|
|
923
938
|
payloads
|
|
924
939
|
});
|
|
925
940
|
});
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
tracer.blocked(blocked);
|
|
950
|
-
this.emit("blocked", blocked);
|
|
951
|
-
}
|
|
952
|
-
return { leased, acked, blocked };
|
|
953
|
-
}
|
|
941
|
+
const leased = await store().lease(
|
|
942
|
+
[...leases.values()].map((l) => l.lease),
|
|
943
|
+
leaseMillis
|
|
944
|
+
);
|
|
945
|
+
tracer.leased(leased);
|
|
946
|
+
const handled = await Promise.all(
|
|
947
|
+
leased.map(
|
|
948
|
+
(lease) => this.handle(lease, leases.get(lease.stream).payloads)
|
|
949
|
+
)
|
|
950
|
+
);
|
|
951
|
+
const acked = await store().ack(
|
|
952
|
+
handled.filter(({ error }) => !error).map(({ at, lease }) => ({ ...lease, at }))
|
|
953
|
+
);
|
|
954
|
+
if (acked.length) {
|
|
955
|
+
tracer.acked(acked);
|
|
956
|
+
this.emit("acked", acked);
|
|
957
|
+
}
|
|
958
|
+
const blocked = await store().block(
|
|
959
|
+
handled.filter(({ block }) => block).map(({ lease, error }) => ({ ...lease, error }))
|
|
960
|
+
);
|
|
961
|
+
if (blocked.length) {
|
|
962
|
+
tracer.blocked(blocked);
|
|
963
|
+
this.emit("blocked", blocked);
|
|
954
964
|
}
|
|
965
|
+
return { fetched, leased, acked, blocked };
|
|
955
966
|
}
|
|
956
967
|
} catch (error) {
|
|
957
968
|
logger.error(error);
|
|
@@ -959,7 +970,7 @@ var Act = class {
|
|
|
959
970
|
this._drain_locked = false;
|
|
960
971
|
}
|
|
961
972
|
}
|
|
962
|
-
return { leased: [], acked: [], blocked: [] };
|
|
973
|
+
return { fetched: [], leased: [], acked: [], blocked: [] };
|
|
963
974
|
}
|
|
964
975
|
/**
|
|
965
976
|
* Correlates streams using reaction resolvers.
|