Skip to content

Commit debdd07

Browse files
feat: add server-side filtering on readAll operation.
Co-authored-by: Andrew Ovens <107420510+aovens-quantifi@users.noreply.github.com>
1 parent feab350 commit debdd07

File tree

4 files changed

+90
-2
lines changed

4 files changed

+90
-2
lines changed

packages/db-client/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
},
4747
"dependencies": {
4848
"@grpc/grpc-js": "^1.12.4",
49-
"@kurrent/bridge": "^0.1.0",
49+
"@kurrent/bridge": "^0.1.1",
5050
"@types/debug": "^4.1.12",
5151
"@types/google-protobuf": "^3.15.12",
5252
"@types/node": "^22.10.2",

packages/db-client/src/streams/readAll.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import type {
33
ReadPosition,
44
Direction,
55
AllStreamResolvedEvent,
6+
Filter,
67
} from "../types";
78
import { FORWARDS, START } from "../constants";
89
import { Client } from "../Client";
@@ -34,6 +35,10 @@ export interface ReadAllOptions extends BaseOptions {
3435
* @defaultValue FORWARDS
3536
*/
3637
direction?: Direction;
38+
/**
39+
* Filters events or streams based upon a predicate.
40+
*/
41+
filter?: Filter;
3742
}
3843

3944
declare module "../Client" {
@@ -66,6 +71,7 @@ Client.prototype.readAll = function (
6671
direction,
6772
requiresLeader: baseOptions.requiresLeader ?? true,
6873
credentials: baseOptions.credentials,
74+
filter: baseOptions.filter,
6975
};
7076

7177
let stream;

packages/test/src/streams/readAll.test.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
AllStreamBinaryRecordedEvent,
88
LinkEvent,
99
KurrentDBClient,
10+
streamNameFilter,
1011
} from "@kurrent/kurrentdb-client";
1112

1213
describe("readAll", () => {
@@ -45,6 +46,27 @@ describe("readAll", () => {
4546
expect(notSystemStreams[0]).toBe(STREAM_NAME_A);
4647
});
4748

49+
test("with filter", async () => {
50+
let count = 0;
51+
const notSystemStreams = [];
52+
53+
for await (const { event } of client.readAll({
54+
filter: streamNameFilter({
55+
prefixes: [STREAM_NAME_A],
56+
}),
57+
})) {
58+
count++;
59+
60+
if (event && !event.streamId.startsWith("$")) {
61+
notSystemStreams.push(event.streamId);
62+
}
63+
}
64+
65+
expect(count).toEqual(4);
66+
expect(notSystemStreams.length).toEqual(4);
67+
expect(Array.from(new Set(notSystemStreams))).toEqual([STREAM_NAME_A]);
68+
});
69+
4870
test("from position", async () => {
4971
let eventToExtract!: AllStreamResolvedEvent;
5072

yarn.lock

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1048,34 +1048,69 @@ __metadata:
10481048
languageName: node
10491049
linkType: hard
10501050

1051+
"@kurrent/bridge-darwin-arm64@npm:0.1.1":
1052+
version: 0.1.1
1053+
resolution: "@kurrent/bridge-darwin-arm64@npm:0.1.1"
1054+
conditions: os=darwin & cpu=arm64
1055+
languageName: node
1056+
linkType: hard
1057+
10511058
"@kurrent/bridge-darwin-x64@npm:0.1.0":
10521059
version: 0.1.0
10531060
resolution: "@kurrent/bridge-darwin-x64@npm:0.1.0"
10541061
conditions: os=darwin & cpu=x64
10551062
languageName: node
10561063
linkType: hard
10571064

1065+
"@kurrent/bridge-darwin-x64@npm:0.1.1":
1066+
version: 0.1.1
1067+
resolution: "@kurrent/bridge-darwin-x64@npm:0.1.1"
1068+
conditions: os=darwin & cpu=x64
1069+
languageName: node
1070+
linkType: hard
1071+
10581072
"@kurrent/bridge-linux-arm64-gnu@npm:0.1.0":
10591073
version: 0.1.0
10601074
resolution: "@kurrent/bridge-linux-arm64-gnu@npm:0.1.0"
10611075
conditions: os=linux & cpu=arm64
10621076
languageName: node
10631077
linkType: hard
10641078

1079+
"@kurrent/bridge-linux-arm64-gnu@npm:0.1.1":
1080+
version: 0.1.1
1081+
resolution: "@kurrent/bridge-linux-arm64-gnu@npm:0.1.1"
1082+
conditions: os=linux & cpu=arm64
1083+
languageName: node
1084+
linkType: hard
1085+
10651086
"@kurrent/bridge-linux-x64-gnu@npm:0.1.0":
10661087
version: 0.1.0
10671088
resolution: "@kurrent/bridge-linux-x64-gnu@npm:0.1.0"
10681089
conditions: os=linux & cpu=x64
10691090
languageName: node
10701091
linkType: hard
10711092

1093+
"@kurrent/bridge-linux-x64-gnu@npm:0.1.1":
1094+
version: 0.1.1
1095+
resolution: "@kurrent/bridge-linux-x64-gnu@npm:0.1.1"
1096+
conditions: os=linux & cpu=x64
1097+
languageName: node
1098+
linkType: hard
1099+
10721100
"@kurrent/bridge-win32-x64-msvc@npm:0.1.0":
10731101
version: 0.1.0
10741102
resolution: "@kurrent/bridge-win32-x64-msvc@npm:0.1.0"
10751103
conditions: os=win32 & cpu=x64
10761104
languageName: node
10771105
linkType: hard
10781106

1107+
"@kurrent/bridge-win32-x64-msvc@npm:0.1.1":
1108+
version: 0.1.1
1109+
resolution: "@kurrent/bridge-win32-x64-msvc@npm:0.1.1"
1110+
conditions: os=win32 & cpu=x64
1111+
languageName: node
1112+
linkType: hard
1113+
10791114
"@kurrent/bridge@npm:^0.1.0":
10801115
version: 0.1.0
10811116
resolution: "@kurrent/bridge@npm:0.1.0"
@@ -1101,12 +1136,37 @@ __metadata:
11011136
languageName: node
11021137
linkType: hard
11031138

1139+
"@kurrent/bridge@npm:^0.1.1":
1140+
version: 0.1.1
1141+
resolution: "@kurrent/bridge@npm:0.1.1"
1142+
dependencies:
1143+
"@kurrent/bridge-darwin-arm64": "npm:0.1.1"
1144+
"@kurrent/bridge-darwin-x64": "npm:0.1.1"
1145+
"@kurrent/bridge-linux-arm64-gnu": "npm:0.1.1"
1146+
"@kurrent/bridge-linux-x64-gnu": "npm:0.1.1"
1147+
"@kurrent/bridge-win32-x64-msvc": "npm:0.1.1"
1148+
"@neon-rs/load": "npm:^0.1.82"
1149+
dependenciesMeta:
1150+
"@kurrent/bridge-darwin-arm64":
1151+
optional: true
1152+
"@kurrent/bridge-darwin-x64":
1153+
optional: true
1154+
"@kurrent/bridge-linux-arm64-gnu":
1155+
optional: true
1156+
"@kurrent/bridge-linux-x64-gnu":
1157+
optional: true
1158+
"@kurrent/bridge-win32-x64-msvc":
1159+
optional: true
1160+
checksum: 10c0/4a4e20d1b57b52634cb984d8fa42ec8cc1082a0858a9159e14688b31944e3116fcc0678e6ef637ecc1448c9db6b396d14d17c51eb34ae6e1467b916884cad92a
1161+
languageName: node
1162+
linkType: hard
1163+
11041164
"@kurrent/kurrentdb-client@workspace:^, @kurrent/kurrentdb-client@workspace:packages/db-client":
11051165
version: 0.0.0-use.local
11061166
resolution: "@kurrent/kurrentdb-client@workspace:packages/db-client"
11071167
dependencies:
11081168
"@grpc/grpc-js": "npm:^1.12.4"
1109-
"@kurrent/bridge": "npm:^0.1.0"
1169+
"@kurrent/bridge": "npm:^0.1.1"
11101170
"@types/debug": "npm:^4.1.12"
11111171
"@types/google-protobuf": "npm:^3.15.12"
11121172
"@types/node": "npm:^22.10.2"

0 commit comments

Comments
 (0)