@effect-app/infra 1.1.15 → 1.2.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/CHANGELOG.md +6 -0
- package/_cjs/services/QueueMaker/memQueue.cjs +4 -1
- package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
- package/_cjs/services/QueueMaker/sbqueue.cjs +4 -1
- package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
- package/_cjs/services/RepositoryBase.cjs +1 -1
- package/_cjs/services/RepositoryBase.cjs.map +1 -1
- package/_cjs/services/Store/Cosmos.cjs +2 -5
- package/_cjs/services/Store/Cosmos.cjs.map +1 -1
- package/_cjs/services/Store/Memory.cjs +1 -1
- package/_cjs/services/Store/Memory.cjs.map +1 -1
- package/_cjs/services/Store/filterApi/query.cjs +0 -167
- package/_cjs/services/Store/filterApi/query.cjs.map +1 -1
- package/_cjs/services/Store/service.cjs.map +1 -1
- package/_cjs/services/Store/utils.cjs +1 -1
- package/_cjs/services/Store/utils.cjs.map +1 -1
- package/_cjs/services/query/dsl.cjs +1 -1
- package/_cjs/services/query/dsl.cjs.map +1 -1
- package/_cjs/services/query/new-kid-interpreter.cjs +14 -10
- package/_cjs/services/query/new-kid-interpreter.cjs.map +1 -1
- package/dist/services/QueueMaker/memQueue.d.ts.map +1 -1
- package/dist/services/QueueMaker/memQueue.js +5 -2
- package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/services/QueueMaker/sbqueue.js +5 -2
- package/dist/services/RepositoryBase.d.ts +2 -2
- package/dist/services/RepositoryBase.d.ts.map +1 -1
- package/dist/services/RepositoryBase.js +2 -2
- package/dist/services/Store/Cosmos.js +3 -3
- package/dist/services/Store/Memory.js +2 -2
- package/dist/services/Store/filterApi/query.d.ts +3 -44
- package/dist/services/Store/filterApi/query.d.ts.map +1 -1
- package/dist/services/Store/filterApi/query.js +2 -136
- package/dist/services/Store/service.d.ts +3 -4
- package/dist/services/Store/service.d.ts.map +1 -1
- package/dist/services/Store/service.js +1 -1
- package/dist/services/Store/utils.d.ts +1 -1
- package/dist/services/Store/utils.d.ts.map +1 -1
- package/dist/services/Store/utils.js +2 -2
- package/dist/services/query/dsl.d.ts +22 -3
- package/dist/services/query/dsl.d.ts.map +1 -1
- package/dist/services/query/dsl.js +2 -2
- package/dist/services/query/new-kid-interpreter.d.ts +2 -2
- package/dist/services/query/new-kid-interpreter.d.ts.map +1 -1
- package/dist/services/query/new-kid-interpreter.js +13 -11
- package/package.json +2 -12
- package/src/services/QueueMaker/memQueue.ts +6 -1
- package/src/services/QueueMaker/sbqueue.ts +4 -1
- package/src/services/RepositoryBase.ts +1 -7
- package/src/services/Store/Cosmos.ts +2 -2
- package/src/services/Store/Memory.ts +3 -3
- package/src/services/Store/filterApi/query.ts +22 -231
- package/src/services/Store/service.ts +3 -4
- package/src/services/Store/utils.ts +2 -2
- package/src/services/query/dsl.ts +191 -16
- package/src/services/query/new-kid-interpreter.ts +16 -13
- package/test/query.test.ts +2 -5
- package/_cjs/services/Store/filterApi/proxy.cjs +0 -40
- package/_cjs/services/Store/filterApi/proxy.cjs.map +0 -1
- package/dist/services/Store/filterApi/proxy.d.ts +0 -41
- package/dist/services/Store/filterApi/proxy.d.ts.map +0 -1
- package/dist/services/Store/filterApi/proxy.js +0 -41
- package/src/services/Store/filterApi/proxy.ts +0 -109
- package/test/filterApi.test.ts +0 -268
- package/vitest.config.ts.timestamp-1711656440838-19c636fe320df.mjs +0 -0
- package/vitest.config.ts.timestamp-1711724061890-6ecedb0a07fdd.mjs +0 -0
- package/vitest.config.ts.timestamp-1711743489537-da8d9e5f66c9f.mjs +0 -0
- package/vitest.config.ts.timestamp-1711744615239-dcf257a844e01.mjs +0 -37
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { S } from "effect-app";
|
|
2
2
|
import type { FieldValues } from "../../filter/types.js";
|
|
3
3
|
import { type QAll } from "../query.js";
|
|
4
|
-
import type {
|
|
4
|
+
import type { FilterResult } from "../Store/filterApi/query.js";
|
|
5
5
|
export declare const toFilter: <TFieldValues extends FieldValues, A, R>(q: QAll<TFieldValues, A, R>) => {
|
|
6
6
|
limit: number;
|
|
7
7
|
skip: number;
|
|
@@ -16,6 +16,6 @@ export declare const toFilter: <TFieldValues extends FieldValues, A, R>(q: QAll<
|
|
|
16
16
|
}[]];
|
|
17
17
|
ttype: "one" | "many" | "count";
|
|
18
18
|
mode: "project" | "collect" | "transform";
|
|
19
|
-
filter:
|
|
19
|
+
filter: FilterResult[];
|
|
20
20
|
};
|
|
21
21
|
//# sourceMappingURL=new-kid-interpreter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new-kid-interpreter.d.ts","sourceRoot":"","sources":["../../../src/services/query/new-kid-interpreter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,CAAC,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,EAAgB,KAAK,IAAI,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"new-kid-interpreter.d.ts","sourceRoot":"","sources":["../../../src/services/query/new-kid-interpreter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,CAAC,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,EAAgB,KAAK,IAAI,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AA4H/D,eAAO,MAAM,QAAQ,8CAKhB,KAAK,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;;;;;;;mBA1HuB,KAAK,GAAG,MAAM;;;mBAAd,KAAK,GAAG,MAAM;;;;;CAqJjE,CAAA"}
|
|
@@ -35,12 +35,17 @@ const interpret = (_) => {
|
|
|
35
35
|
},
|
|
36
36
|
where: ({ current, operation }) => {
|
|
37
37
|
upd(interpret(current));
|
|
38
|
-
|
|
39
|
-
t: "where",
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
if (typeof operation === "function") {
|
|
39
|
+
data.filter.push({ t: "where-scope", result: interpret(operation(make())).filter });
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
data.filter.push({
|
|
43
|
+
t: "where",
|
|
44
|
+
path: operation[0],
|
|
45
|
+
op: operation.length === 2 ? "eq" : operation[1],
|
|
46
|
+
value: operation.length === 2 ? operation[1] : operation[2]
|
|
47
|
+
});
|
|
48
|
+
}
|
|
44
49
|
},
|
|
45
50
|
and: ({ current, operation }) => {
|
|
46
51
|
upd(interpret(current));
|
|
@@ -120,11 +125,8 @@ export const toFilter = (q) => {
|
|
|
120
125
|
ttype: a.ttype,
|
|
121
126
|
mode: a.mode ?? "transform",
|
|
122
127
|
filter: a.filter.length
|
|
123
|
-
?
|
|
124
|
-
type: "new-kid",
|
|
125
|
-
build: () => a.filter
|
|
126
|
-
}
|
|
128
|
+
? a.filter
|
|
127
129
|
: undefined
|
|
128
130
|
});
|
|
129
131
|
};
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWtpZC1pbnRlcnByZXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9xdWVyeS9uZXcta2lkLWludGVycHJldGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCw0REFBNEQ7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBR2pELE9BQU8sRUFBRSxJQUFJLEVBQXFCLE1BQU0sYUFBYSxDQUFBO0FBYXJELE1BQU0sU0FBUyxHQUFHLENBQWdFLENBQTJCLEVBQUUsRUFBRTtJQUMvRyxNQUFNLENBQUMsR0FBRyxDQUFvQixDQUFBO0lBRTlCLE1BQU0sSUFBSSxHQUFtQztRQUMzQyxNQUFNLEVBQUUsRUFBRTtRQUNWLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLEtBQUssRUFBRSxTQUFTO1FBQ2hCLElBQUksRUFBRSxTQUFTO1FBQ2YsS0FBSyxFQUFFLEVBQUU7UUFDVCxLQUFLLEVBQUUsU0FBUztRQUNoQixJQUFJLEVBQUUsU0FBUztLQUNoQixDQUFBO0lBRUQsTUFBTSxHQUFHLEdBQUcsQ0FDVixDQUFpQyxFQUNqQyxFQUFFO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDM0IsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUE7UUFDL0MsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFDNUMsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUE7UUFDL0MsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUE7UUFDbEQsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDOUMsQ0FBQyxDQUFBO0lBRUQsSUFBSSxDQUNGLENBQUMsRUFDRCxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2QsS0FBSyxFQUFFLEdBQUcsRUFBRTtZQUNWLDBCQUEwQjtRQUM1QixDQUFDO1FBQ0QsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtZQUNoQyxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7WUFDdkIsSUFBSSxPQUFPLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2QsRUFBRSxDQUFDLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FDbEUsQ0FBQTtZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZDtvQkFDRSxDQUFDLEVBQUUsT0FBTztvQkFDVixJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDbEIsRUFBRSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hELEtBQUssRUFBRSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2lCQUM1RCxDQUNGLENBQUE7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELEdBQUcsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7WUFDOUIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO1lBQ3ZCLElBQUksT0FBTyxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQ2hFLENBQUE7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2Q7b0JBQ0UsQ0FBQyxFQUFFLEtBQUs7b0JBQ1IsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xCLEVBQUUsRUFBRSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO29CQUNoRCxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztpQkFDNUQsQ0FDRixDQUFBO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO1lBQzdCLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtZQUN2QixJQUFJLE9BQU8sU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUMvRCxDQUFBO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkO29CQUNFLENBQUMsRUFBRSxJQUFJO29CQUNQLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO29CQUNsQixFQUFFLEVBQUUsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztvQkFDaEQsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7aUJBQzVELENBQ0YsQ0FBQTtZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsR0FBRyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO1lBQ25CLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtZQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQTtZQUNkLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ3BCLENBQUM7UUFDRCxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7WUFDckIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFBO1lBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQVEsQ0FBQTtRQUNqRCxDQUFDO1FBQ0QsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDdkMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFBO1FBQzVDLENBQUM7UUFDRCxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNWLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7WUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFBO1lBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQTtRQUNwQixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDYixHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO1lBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQTtZQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFDcEIsQ0FBQztLQUNGLENBQUMsQ0FDSCxDQUFBO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FLdEIsQ0FBMkIsRUFDM0IsRUFBRTtJQUNGLDZGQUE2RjtJQUM3RixNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDdEIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQTtJQUN2QixJQUFJLE1BQU0sR0FBMkIsRUFBRSxDQUFBO0lBQ3ZDLElBQUksTUFBTSxFQUFFLENBQUM7UUFDWCxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFBO1FBQ1osQ0FBQztRQUNELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBUSxDQUFBO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxjQUFjLENBQUM7UUFDcEIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO1FBQ2QsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO1FBQ1osTUFBTSxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELE1BQU07UUFDTixLQUFLLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSztRQUNkLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLFdBQVc7UUFDM0IsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTTtZQUNyQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07WUFDVixDQUFDLENBQUMsU0FBUztLQUNkLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQSJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
"proper-lockfile": "^4.1.2",
|
|
19
19
|
"pure-rand": "6.1.0",
|
|
20
20
|
"redlock": "^4.2.0",
|
|
21
|
+
"effect-app": "1.0.12",
|
|
21
22
|
"@effect-app/core": "1.0.6",
|
|
22
23
|
"@effect-app/infra-adapters": "1.0.16",
|
|
23
|
-
"effect-app": "1.0.12",
|
|
24
24
|
"@effect-app/schema": "1.0.10"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
@@ -554,16 +554,6 @@
|
|
|
554
554
|
"default": "./_cjs/services/Store/codeFilter.cjs"
|
|
555
555
|
}
|
|
556
556
|
},
|
|
557
|
-
"./services/Store/filterApi/proxy": {
|
|
558
|
-
"import": {
|
|
559
|
-
"types": "./dist/services/Store/filterApi/proxy.d.ts",
|
|
560
|
-
"default": "./dist/services/Store/filterApi/proxy.js"
|
|
561
|
-
},
|
|
562
|
-
"require": {
|
|
563
|
-
"types": "./dist/services/Store/filterApi/proxy.d.ts",
|
|
564
|
-
"default": "./_cjs/services/Store/filterApi/proxy.cjs"
|
|
565
|
-
}
|
|
566
|
-
},
|
|
567
557
|
"./services/Store/filterApi/query": {
|
|
568
558
|
"import": {
|
|
569
559
|
"types": "./dist/services/Store/filterApi/query.d.ts",
|
|
@@ -53,7 +53,12 @@ export function makeMemQueue<
|
|
|
53
53
|
), { discard: true })
|
|
54
54
|
)
|
|
55
55
|
})
|
|
56
|
-
.pipe(
|
|
56
|
+
.pipe(
|
|
57
|
+
Effect.withSpan("queue.publish: " + queueName, {
|
|
58
|
+
kind: "producer",
|
|
59
|
+
attributes: { "message_tags": messages.map((_) => _._tag) }
|
|
60
|
+
})
|
|
61
|
+
),
|
|
57
62
|
drain: <DrainE, DrainR>(
|
|
58
63
|
handleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>,
|
|
59
64
|
sessionId?: string
|
|
@@ -174,7 +174,10 @@ export function makeServiceBusQueue<
|
|
|
174
174
|
)
|
|
175
175
|
)
|
|
176
176
|
})
|
|
177
|
-
.pipe(Effect.withSpan("queue.publish: " + queueName, {
|
|
177
|
+
.pipe(Effect.withSpan("queue.publish: " + queueName, {
|
|
178
|
+
kind: "producer",
|
|
179
|
+
attributes: { "message_tags": messages.map((_) => _._tag) }
|
|
180
|
+
}))
|
|
178
181
|
} satisfies QueueBase<Evt, DrainEvt>
|
|
179
182
|
})
|
|
180
183
|
}
|
|
@@ -50,18 +50,12 @@ import { ContextMapContainer } from "./Store/ContextMapContainer.js"
|
|
|
50
50
|
export interface Mapped1<A, Encoded extends { id: string }, R> {
|
|
51
51
|
all: Effect<A[], ParseResult.ParseError, R>
|
|
52
52
|
save: (...xes: readonly A[]) => Effect<void, OptimisticConcurrencyException | ParseResult.ParseError, R>
|
|
53
|
-
// query: (
|
|
54
|
-
// b: (fn: QB.FilterTest<Encoded>, fields: QB.Filter<Encoded, never>) => QB.QueryBuilder<Encoded>
|
|
55
|
-
// ) => Effect<A[], ParseResult.ParseError, R>
|
|
56
53
|
find: (id: Encoded["id"]) => Effect<Option<A>, ParseResult.ParseError, R>
|
|
57
54
|
}
|
|
58
55
|
|
|
59
56
|
// TODO: auto use project, and select fields from the From side of schema only
|
|
60
57
|
export interface Mapped2<A, R> {
|
|
61
58
|
all: Effect<A[], ParseResult.ParseError, R>
|
|
62
|
-
// query: (
|
|
63
|
-
// b: (fn: QB.FilterTest<Encoded>, fields: QB.Filter<Encoded, never>) => QB.QueryBuilder<Encoded>
|
|
64
|
-
// ) => Effect<A[], ParseResult.ParseError, R>
|
|
65
59
|
}
|
|
66
60
|
|
|
67
61
|
export interface Mapped<Encoded extends { id: string }> {
|
|
@@ -585,7 +579,7 @@ export function makeRepo<
|
|
|
585
579
|
Effect.withSpan("Repository.query [effect-app/infra]", {
|
|
586
580
|
attributes: {
|
|
587
581
|
"repository.model_name": name,
|
|
588
|
-
query: { ...a, schema: a.schema ? "__SCHEMA__" : a.schema, filter: a.filter
|
|
582
|
+
query: { ...a, schema: a.schema ? "__SCHEMA__" : a.schema, filter: a.filter }
|
|
589
583
|
}
|
|
590
584
|
})
|
|
591
585
|
)
|
|
@@ -224,12 +224,12 @@ function makeCosmosStore({ prefix }: StorageConfig) {
|
|
|
224
224
|
) => {
|
|
225
225
|
const skip = f?.skip
|
|
226
226
|
const limit = f?.limit
|
|
227
|
-
const filter = f.filter
|
|
227
|
+
const filter = f.filter
|
|
228
228
|
type M = U extends undefined ? Encoded : Pick<Encoded, U>
|
|
229
229
|
return Effect
|
|
230
230
|
.sync(() =>
|
|
231
231
|
buildWhereCosmosQuery3(
|
|
232
|
-
filter
|
|
232
|
+
filter ?? [],
|
|
233
233
|
name,
|
|
234
234
|
importedMarkerId,
|
|
235
235
|
defaultValues,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
|
|
3
3
|
import { Array, Effect, FiberRef, flow, Option, Order, pipe, Ref, Struct } from "effect-app"
|
|
4
|
-
import type {
|
|
4
|
+
import type { NonEmptyReadonlyArray } from "effect-app"
|
|
5
5
|
import { get } from "effect-app/utils"
|
|
6
6
|
import type { RequestContext } from "../../RequestContext.js"
|
|
7
7
|
import type { FilterArgs, PersistenceModelType, Store, StoreConfig } from "./service.js"
|
|
@@ -66,7 +66,7 @@ function logQuery(f: FilterArgs<any, any>, defaultValues?: any) {
|
|
|
66
66
|
.logDebug("mem query")
|
|
67
67
|
.pipe(Effect.annotateLogs({
|
|
68
68
|
filter: JSON.stringify(
|
|
69
|
-
f.filter
|
|
69
|
+
f.filter,
|
|
70
70
|
undefined,
|
|
71
71
|
2
|
|
72
72
|
),
|
|
@@ -118,7 +118,7 @@ export function makeMemoryStoreInt<Id extends string, Encoded extends { id: Id }
|
|
|
118
118
|
)
|
|
119
119
|
),
|
|
120
120
|
Effect
|
|
121
|
-
.map((_) => _
|
|
121
|
+
.map((_) => _),
|
|
122
122
|
withPermit
|
|
123
123
|
)
|
|
124
124
|
const s: Store<Encoded, Id> = {
|
|
@@ -1,10 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
export type InOps =
|
|
2
|
+
| "in"
|
|
3
|
+
| "notIn"
|
|
4
|
+
|
|
5
|
+
export type OtherOps =
|
|
6
|
+
| "endsWith"
|
|
7
|
+
| "startsWith"
|
|
8
|
+
| "notEndsWith"
|
|
9
|
+
| "notStartsWith"
|
|
10
|
+
| "contains"
|
|
11
|
+
| "notContains"
|
|
12
|
+
| "includes"
|
|
13
|
+
| "notIncludes"
|
|
14
|
+
| "eq"
|
|
15
|
+
| "neq"
|
|
16
|
+
| "gt"
|
|
17
|
+
| "gte"
|
|
18
|
+
| "lt"
|
|
19
|
+
| "lte"
|
|
20
|
+
|
|
21
|
+
// TODO: includes | notIncludes
|
|
22
|
+
export type Ops = OtherOps | InOps
|
|
8
23
|
|
|
9
24
|
export type FilterScopes = {
|
|
10
25
|
t: "or-scope"
|
|
@@ -35,227 +50,3 @@ export type FilterResult =
|
|
|
35
50
|
t: "and"
|
|
36
51
|
} & FilterR
|
|
37
52
|
| FilterScopes
|
|
38
|
-
|
|
39
|
-
export const print = (state: readonly FilterResult[]) => {
|
|
40
|
-
let s = ""
|
|
41
|
-
let l = 0
|
|
42
|
-
const printN = (n: number) => {
|
|
43
|
-
return n === 0 ? "" : Array.range(1, n).map(() => " ").join("")
|
|
44
|
-
}
|
|
45
|
-
for (const e of state) {
|
|
46
|
-
switch (e.t) {
|
|
47
|
-
case "where":
|
|
48
|
-
s += `${e.path} ${e.op} ${e.value}`
|
|
49
|
-
break
|
|
50
|
-
case "or":
|
|
51
|
-
s += ` OR ${e.path} ${e.op} ${e.value}`
|
|
52
|
-
break
|
|
53
|
-
case "and":
|
|
54
|
-
s += ` AND ${e.path} ${e.op} ${e.value}`
|
|
55
|
-
break
|
|
56
|
-
case "or-scope": {
|
|
57
|
-
;++l
|
|
58
|
-
s += ` OR (\n${printN(l + 1)}${print(e.result)}\n${printN(l)})`
|
|
59
|
-
;--l
|
|
60
|
-
break
|
|
61
|
-
}
|
|
62
|
-
case "and-scope": {
|
|
63
|
-
;++l
|
|
64
|
-
s += ` AND (\n${printN(l + 1)}${print(e.result)}\n${printN(l)})`
|
|
65
|
-
;--l
|
|
66
|
-
|
|
67
|
-
break
|
|
68
|
-
}
|
|
69
|
-
case "where-scope": {
|
|
70
|
-
// ;++l
|
|
71
|
-
s += `(\n${printN(l + 1)}${print(e.result)}\n)`
|
|
72
|
-
// ;--l
|
|
73
|
-
break
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return s
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
export const makeFilter = <TFieldValues extends FieldValues>() => {
|
|
81
|
-
// const recursive = {}
|
|
82
|
-
// const and = Object.assign(() => {}, recursive)
|
|
83
|
-
// const or = Object.assign(() => {}, recursive)
|
|
84
|
-
// const where = Object.assign(() => {}, recursive)
|
|
85
|
-
// recursive.and = and
|
|
86
|
-
// recursive.or = or
|
|
87
|
-
// recursive.where = where
|
|
88
|
-
const state: FilterResult[] = []
|
|
89
|
-
let current = state
|
|
90
|
-
const where = (...args: any[]) => {
|
|
91
|
-
if (typeof args[0] === "function") {
|
|
92
|
-
const mine: any[] = []
|
|
93
|
-
const previous = current
|
|
94
|
-
current = mine
|
|
95
|
-
const r = args[0](all)
|
|
96
|
-
current = previous
|
|
97
|
-
current.push({ t: "where-scope", result: mine })
|
|
98
|
-
return r
|
|
99
|
-
}
|
|
100
|
-
if (args.length === 1) {
|
|
101
|
-
current.push({ t: "where", ...args[0] })
|
|
102
|
-
return all
|
|
103
|
-
}
|
|
104
|
-
current.push({
|
|
105
|
-
t: "where",
|
|
106
|
-
op: args.length === 2 ? "eq" : args[1],
|
|
107
|
-
path: args[0],
|
|
108
|
-
value: args[args.length - 1]
|
|
109
|
-
})
|
|
110
|
-
return all
|
|
111
|
-
}
|
|
112
|
-
const and = (...args: any[]) => {
|
|
113
|
-
if (typeof args[0] === "function") {
|
|
114
|
-
const mine: any[] = []
|
|
115
|
-
const previous = current
|
|
116
|
-
current = mine
|
|
117
|
-
const r = args[0](all)
|
|
118
|
-
current = previous
|
|
119
|
-
current.push({ t: "and-scope", result: mine })
|
|
120
|
-
return r
|
|
121
|
-
}
|
|
122
|
-
if (args.length === 1) {
|
|
123
|
-
current.push({ t: "and", ...args[0] })
|
|
124
|
-
return all
|
|
125
|
-
}
|
|
126
|
-
current.push({
|
|
127
|
-
t: "and",
|
|
128
|
-
op: args.length === 2 ? "eq" : args[1],
|
|
129
|
-
path: args[0],
|
|
130
|
-
value: args[args.length - 1]
|
|
131
|
-
})
|
|
132
|
-
return all
|
|
133
|
-
}
|
|
134
|
-
const or = (...args: any[]) => {
|
|
135
|
-
if (typeof args[0] === "function") {
|
|
136
|
-
const mine: any[] = []
|
|
137
|
-
const previous = current
|
|
138
|
-
current = mine
|
|
139
|
-
const r = args[0](all)
|
|
140
|
-
current = previous
|
|
141
|
-
current.push({ t: "or-scope", result: mine })
|
|
142
|
-
return r
|
|
143
|
-
}
|
|
144
|
-
if (args.length === 1) {
|
|
145
|
-
current.push({ t: "or", ...args[0] })
|
|
146
|
-
return all
|
|
147
|
-
}
|
|
148
|
-
current.push({ t: "or", op: args.length === 2 ? "eq" : args[1], path: args[0], value: args[args.length - 1] })
|
|
149
|
-
return all
|
|
150
|
-
}
|
|
151
|
-
const fields = makeProxy() as Filter<TFieldValues>
|
|
152
|
-
const all = Object.assign(where, {
|
|
153
|
-
type: "new-kid",
|
|
154
|
-
and,
|
|
155
|
-
or,
|
|
156
|
-
build() {
|
|
157
|
-
return state
|
|
158
|
-
}
|
|
159
|
-
})
|
|
160
|
-
return { all, fields }
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
/** @deprecated use Q */
|
|
164
|
-
export const QueryBuilder = {
|
|
165
|
-
/** @deprecated use Q */
|
|
166
|
-
make: <TFieldValues extends FieldValues>(): (
|
|
167
|
-
fn: (f: FilterTest<TFieldValues>, fields: Filter<TFieldValues>) => QueryBuilder<TFieldValues>
|
|
168
|
-
) => QueryBuilder<TFieldValues> => {
|
|
169
|
-
type F = ReturnType<typeof makeFilter<TFieldValues>>
|
|
170
|
-
return (
|
|
171
|
-
f: (
|
|
172
|
-
n: F["all"],
|
|
173
|
-
f: F["fields"]
|
|
174
|
-
) => QueryBuilder<TFieldValues>
|
|
175
|
-
) => {
|
|
176
|
-
const fil = makeFilter<TFieldValues>()
|
|
177
|
-
return f(fil.all, fil.fields)
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
export type Initial<TFieldValues extends FieldValues> = {
|
|
183
|
-
where: FilterTest<TFieldValues>
|
|
184
|
-
build(): FilterResult[]
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
export type Filts<TFieldValues extends FieldValues> = {
|
|
188
|
-
<
|
|
189
|
-
TFieldName extends FieldPath<TFieldValues>,
|
|
190
|
-
V extends FieldPathValue<TFieldValues, TFieldName>
|
|
191
|
-
>(
|
|
192
|
-
path: TFieldName,
|
|
193
|
-
value: V
|
|
194
|
-
): QueryBuilder<TFieldValues>
|
|
195
|
-
<
|
|
196
|
-
TFieldName extends FieldPath<TFieldValues>,
|
|
197
|
-
V extends FieldPathValue<TFieldValues, TFieldName>
|
|
198
|
-
>(
|
|
199
|
-
path: TFieldName,
|
|
200
|
-
op: "neq",
|
|
201
|
-
value: V
|
|
202
|
-
): QueryBuilder<TFieldValues>
|
|
203
|
-
<
|
|
204
|
-
TFieldName extends FieldPath<TFieldValues>,
|
|
205
|
-
V extends FieldPathValue<TFieldValues, TFieldName>
|
|
206
|
-
>(
|
|
207
|
-
path: TFieldName,
|
|
208
|
-
op: "gt" | "gte" | "lt" | "lte",
|
|
209
|
-
value: V // only numbers?
|
|
210
|
-
): QueryBuilder<TFieldValues>
|
|
211
|
-
<
|
|
212
|
-
TFieldName extends FieldPath<TFieldValues>,
|
|
213
|
-
V extends string
|
|
214
|
-
>(
|
|
215
|
-
path: TFieldName,
|
|
216
|
-
op: "startsWith" | "endsWith" | "contains" | "notContains" | "notStartsWith" | "notEndsWith",
|
|
217
|
-
value: V
|
|
218
|
-
): QueryBuilder<TFieldValues>
|
|
219
|
-
<
|
|
220
|
-
TFieldName extends FieldPath<TFieldValues>,
|
|
221
|
-
V extends FieldPathValue<TFieldValues, TFieldName>
|
|
222
|
-
>(
|
|
223
|
-
path: TFieldName,
|
|
224
|
-
op: "in" | "notIn",
|
|
225
|
-
value: readonly V[]
|
|
226
|
-
): QueryBuilder<TFieldValues>
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
// type Filter<TFieldValues extends FieldValues> = {
|
|
230
|
-
// (
|
|
231
|
-
// fb: (f: Filts<TFieldValues>) => QueryBuilder<TFieldValues>
|
|
232
|
-
// ): QueryBuilder<TFieldValues>
|
|
233
|
-
// } & Filts<TFieldValues>
|
|
234
|
-
|
|
235
|
-
export type FilterTest<TFieldValues extends FieldValues> = {
|
|
236
|
-
(
|
|
237
|
-
fb: (f: Filts<TFieldValues> & Initial<TFieldValues>) => QueryBuilder<TFieldValues>
|
|
238
|
-
): QueryBuilder<TFieldValues>
|
|
239
|
-
<
|
|
240
|
-
TFieldName extends FieldPath<TFieldValues>,
|
|
241
|
-
V extends FieldPathValue<TFieldValues, TFieldName>
|
|
242
|
-
>(f: {
|
|
243
|
-
path: TFieldName
|
|
244
|
-
op: Ops
|
|
245
|
-
value: V
|
|
246
|
-
}): QueryBuilder<TFieldValues>
|
|
247
|
-
} & Filts<TFieldValues>
|
|
248
|
-
// const not = <A extends string>(s: A) => `!${s}`
|
|
249
|
-
|
|
250
|
-
// type FilterGroup<TFieldValues extends FieldValues> = (
|
|
251
|
-
// fb: (f: QueryBuilder<TFieldValues>) => QueryBuilder<TFieldValues>
|
|
252
|
-
// ) => QueryBuilder<TFieldValues>
|
|
253
|
-
|
|
254
|
-
export interface QueryBuilder<TFieldValues extends FieldValues> {
|
|
255
|
-
type: "new-kid"
|
|
256
|
-
// TODO: as overloads?
|
|
257
|
-
and: FilterTest<TFieldValues>
|
|
258
|
-
or: FilterTest<TFieldValues>
|
|
259
|
-
build(): FilterResult[]
|
|
260
|
-
// where: <Filters extends Record<TFieldName extends FieldPath<TFieldValues>, V extends Value< FieldPathValue<TFieldValues, TFieldName>>>(filter: Filters) => QueryBuilder<TFieldValues>
|
|
261
|
-
}
|
|
@@ -3,8 +3,7 @@ import type { UniqueKey } from "@azure/cosmos"
|
|
|
3
3
|
import { Context, Effect } from "effect-app"
|
|
4
4
|
import type { NonEmptyReadonlyArray, Option, Secret } from "effect-app"
|
|
5
5
|
import type { OptimisticConcurrencyException } from "../../errors.js"
|
|
6
|
-
import type {
|
|
7
|
-
import type { QueryBuilder } from "./filterApi/query.js"
|
|
6
|
+
import type { FilterResult } from "./filterApi/query.js"
|
|
8
7
|
|
|
9
8
|
export type StoreConfig<E> = {
|
|
10
9
|
uniqueKeys?: UniqueKey[]
|
|
@@ -33,7 +32,7 @@ export type Where =
|
|
|
33
32
|
value: readonly (SupportedValues)[]
|
|
34
33
|
}
|
|
35
34
|
|
|
36
|
-
export type Filter
|
|
35
|
+
export type Filter = readonly FilterResult[]
|
|
37
36
|
|
|
38
37
|
export interface O<Encoded extends { id: string }> {
|
|
39
38
|
key: keyof Encoded
|
|
@@ -41,7 +40,7 @@ export interface O<Encoded extends { id: string }> {
|
|
|
41
40
|
}
|
|
42
41
|
|
|
43
42
|
export interface FilterArgs<Encoded extends { id: string }, U extends keyof Encoded = never> {
|
|
44
|
-
filter?: Filter
|
|
43
|
+
filter?: Filter | undefined
|
|
45
44
|
select?: NonEmptyReadonlyArray<U> | undefined
|
|
46
45
|
order?: NonEmptyReadonlyArray<O<Encoded>>
|
|
47
46
|
limit?: number | undefined
|
|
@@ -35,8 +35,8 @@ export const makeUpdateETag =
|
|
|
35
35
|
return newE
|
|
36
36
|
})
|
|
37
37
|
|
|
38
|
-
export function codeFilter<E extends { id: string }, NE extends E>(filter: Filter
|
|
39
|
-
return (x: E) => codeFilter3_(filter
|
|
38
|
+
export function codeFilter<E extends { id: string }, NE extends E>(filter: Filter) {
|
|
39
|
+
return (x: E) => codeFilter3_(filter, x) ? Option.some(x as unknown as NE) : Option.none()
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
export function lowercaseIfString<T>(val: T) {
|