@effect-app/infra 4.0.0-beta.214 → 4.0.0-beta.215
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 +7 -0
- package/dist/Store/Memory.d.ts.map +1 -1
- package/dist/Store/Memory.js +6 -2
- package/package.json +2 -2
- package/src/Store/Memory.ts +5 -1
- package/test/dist/rawQuery.test.d.ts.map +1 -1
- package/test/query.test.ts +333 -0
- package/test/rawQuery.test.ts +223 -1
package/CHANGELOG.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Memory.d.ts","sourceRoot":"","sources":["../../src/Store/Memory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAS,OAAO,EAAE,MAAM,EAAyF,MAAM,YAAY,CAAA;AAC1I,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAIrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAI3D,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,oBAAoB,EAAE,KAAK,KAAK,EAAE,KAAK,WAAW,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAGnH,yEAAyE;AACzE,wBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,CAE/C;
|
|
1
|
+
{"version":3,"file":"Memory.d.ts","sourceRoot":"","sources":["../../src/Store/Memory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAS,OAAO,EAAE,MAAM,EAAyF,MAAM,YAAY,CAAA;AAC1I,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAIrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAI3D,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,oBAAoB,EAAE,KAAK,KAAK,EAAE,KAAK,WAAW,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAGnH,yEAAyE;AACzE,wBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,CAE/C;AAuFD,wBAAgB,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,OAEjF,CAAC,EAAE,KAAG,wCAAG,CAkEtB;;AAGD,qBAAa,OAAQ,SAAQ,YAAkF;CAAG;AAmBlH,wBAAgB,kBAAkB,CAAC,KAAK,SAAS,MAAM,OAAO,EAAE,OAAO,SAAS,WAAW,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAC/G,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC7C,cAAc,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,6EAiLlC;AAED,eAAO,MAAM,eAAe;IAC1B,IAAI,GAA8B,KAAK,SAAS,MAAM,OAAO,EAAE,OAAO,SAAS,WAAW,EAAE,CAAC,EAAE,CAAC;CAsDhG,CAAA;AAEF,eAAO,MAAM,eAAe,wDAA2D,CAAA"}
|
package/dist/Store/Memory.js
CHANGED
|
@@ -45,7 +45,11 @@ const computeProjectionValue = (row, computed) => {
|
|
|
45
45
|
return emptyValueFor(computed._tag);
|
|
46
46
|
}
|
|
47
47
|
const filter = stripRelationFilterPaths(computed.filter, computed.path);
|
|
48
|
-
|
|
48
|
+
// empty filter = unconditional match (codeFilter3_ uses eval on a built
|
|
49
|
+
// string and chokes on `( )`, so short-circuit before invoking it).
|
|
50
|
+
const matches = filter.length === 0
|
|
51
|
+
? (_value) => true
|
|
52
|
+
: (value) => codeFilter3_(filter, value);
|
|
49
53
|
switch (computed._tag) {
|
|
50
54
|
case "relation-count":
|
|
51
55
|
return relation.reduce((acc, value) => matches(value) ? acc + 1 : acc, 0);
|
|
@@ -307,4 +311,4 @@ export const makeMemoryStore = () => ({
|
|
|
307
311
|
})
|
|
308
312
|
});
|
|
309
313
|
export const MemoryStoreLive = StoreMaker.toLayer(Effect.sync(() => makeMemoryStore()));
|
|
310
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1N0b3JlL01lbW9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBOEIsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzFJLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFJMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUN2QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzFELE9BQU8sRUFBNEUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ25ILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFM0MseUVBQXlFO0FBQ3pFLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBUSxFQUFFLElBQVk7SUFDeEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVEsRUFBRSxHQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtBQUMvRixDQUFDO0FBRUQsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEtBQThCLEVBQUUsWUFBb0IsRUFBMkIsRUFBRTtJQUNqSCxNQUFNLE1BQU0s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
|
|
314
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1N0b3JlL01lbW9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBOEIsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzFJLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFJMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUN2QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzFELE9BQU8sRUFBNEUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ25ILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFM0MseUVBQXlFO0FBQ3pFLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBUSxFQUFFLElBQVk7SUFDeEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVEsRUFBRSxHQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtBQUMvRixDQUFDO0FBRUQsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEtBQThCLEVBQUUsWUFBb0IsRUFBMkIsRUFBRTtJQUNqSCxNQUFNLE1BQU0sR0FBRyxHQUFHLFlBQVksTUFBTSxDQUFBO0lBQ3BDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ3pCLE1BQU0sSUFBSSxLQUFLO1FBQ2IsQ0FBQyxDQUFDO1lBQ0EsR0FBRyxLQUFLO1lBQ1IsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJO1NBQ25GO1FBQ0QsQ0FBQyxDQUFDO1lBQ0EsR0FBRyxLQUFLO1lBQ1IsTUFBTSxFQUFFLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDO1NBQzdELENBQ0osQ0FBQTtBQUNILENBQUMsQ0FBQTtBQUVELE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBMkMsRUFBRSxFQUFFO0lBQ3BFLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDWixLQUFLLGdCQUFnQixDQUFDO1FBQ3RCLEtBQUsseUJBQXlCLENBQUM7UUFDL0IsS0FBSyxjQUFjO1lBQ2pCLE9BQU8sQ0FBQyxDQUFBO1FBQ1YsS0FBSyxjQUFjO1lBQ2pCLE9BQU8sS0FBSyxDQUFBO1FBQ2QsS0FBSyxnQkFBZ0I7WUFDbkIsT0FBTyxJQUFJLENBQUE7UUFDYixLQUFLLGtCQUFrQjtZQUNyQixPQUFPLEVBQWUsQ0FBQTtRQUN4QjtZQUNFLE9BQU8saUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDakMsQ0FBQztBQUNILENBQUMsQ0FBQTtBQUVELE1BQU0sc0JBQXNCLEdBQUcsQ0FDN0IsR0FBZ0IsRUFDaEIsUUFBd0MsRUFDeEMsRUFBRTtJQUNGLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDN0IsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3JDLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN2RSx3RUFBd0U7SUFDeEUsb0VBQW9FO0lBQ3BFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQyxNQUFlLEVBQUUsRUFBRSxDQUFDLElBQUk7UUFDM0IsQ0FBQyxDQUFDLENBQUMsS0FBYyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ25ELFFBQVEsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLEtBQUssZ0JBQWdCO1lBQ25CLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ25GLEtBQUssY0FBYztZQUNqQixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDL0IsS0FBSyxnQkFBZ0I7WUFDbkIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ2hDLEtBQUsseUJBQXlCLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBVyxDQUFBO1lBQy9CLEtBQUssTUFBTSxLQUFLLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzdCLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQztvQkFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7WUFDMUQsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQTtRQUNsQixDQUFDO1FBQ0QsS0FBSyxjQUFjO1lBQ2pCLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7b0JBQUUsT0FBTyxHQUFHLENBQUE7Z0JBQy9CLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUNwQyxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDM0QsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ1AsS0FBSyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sR0FBRyxHQUFjLEVBQUUsQ0FBQTtZQUN6QixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7WUFDL0QsS0FBSyxNQUFNLEtBQUssSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7b0JBQUUsU0FBUTtnQkFDN0IsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBQ3BDLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ1QsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFBRSxTQUFRO29CQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUNiLENBQUM7Z0JBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNiLENBQUM7WUFDRCxPQUFPLEdBQUcsQ0FBQTtRQUNaLENBQUM7UUFDRDtZQUNFLE9BQU8saUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDdEMsQ0FBQztBQUNILENBQUMsQ0FBQTtBQUVELE1BQU0sVUFBVSxTQUFTLENBQW1ELENBQW1CO0lBRTdGLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBTyxFQUFFO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBTSxFQUFPLEVBQUU7WUFDN0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQTtZQUNwQixJQUFJLENBQUMsR0FBRztnQkFBRSxPQUFPLENBQVEsQ0FBQTtZQUN6QixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDakIsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJLENBQzFCLEdBQUcsRUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDM0csQ0FBQTtnQkFDRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUF3RCxFQUFFLENBQzdGLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLFNBQVMsSUFBSSxLQUFLLENBQ2xFLENBQUE7Z0JBQ0QsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFHeEMsRUFBRSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLFVBQVUsSUFBSSxLQUFLLENBQUMsQ0FBQTtnQkFDeEUsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBQzlCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDekIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFrQixDQUFDLENBQUMsQ0FBQTtnQkFDNUUsQ0FBQyxDQUFDLENBQUE7Z0JBQ0YsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUM3QixDQUFDO29CQUFDLENBQTZCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLHNCQUFzQixDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7Z0JBQ3hGLENBQUMsQ0FBQyxDQUFBO2dCQUNGLE9BQU8sQ0FBTSxDQUFBO1lBQ2YsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUE7UUFDRCxNQUFNLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFBO1FBQ3BCLE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUE7UUFDdEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQzNELENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNWLEtBQUssQ0FBQyxJQUFJLENBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDM0IscURBQXFEO1lBQ3JELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQTtZQUN2QyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUE7WUFDdkMsSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sQ0FBQyxDQUFBO1lBQ1YsQ0FBQztZQUNELElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQy9CLENBQUM7WUFDRCxPQUFPLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDL0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxDQUFBO1FBQ0osSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDeEIsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDcEMsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sTUFBTSxDQUNYLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM5RSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFDdEIsTUFBTSxDQUFDLFNBQVMsQ0FDZCxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQ1QsQ0FDRixDQUNGLENBQUE7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN6RSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ3pCLENBQUM7UUFDRCxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QixDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDMUIsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2xCLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVELE1BQU0sU0FBUyxHQUFzQixpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUNqRSxNQUFNLE9BQU8sT0FBUSxTQUFRLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsWUFBWSxFQUFFLEdBQXNCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztDQUFHO0FBRWxILFNBQVMsUUFBUSxDQUFDLENBQXVCLEVBQUUsYUFBbUI7SUFDNUQsT0FBTyxXQUFXO1NBQ2YsUUFBUSxDQUFDLFdBQVcsQ0FBQztTQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUN4QixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FDcEIsQ0FBQyxDQUFDLE1BQU0sRUFDUixTQUFTLEVBQ1QsQ0FBQyxDQUNGO1FBQ0QsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUM5QyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUMxRCxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7UUFDWixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7S0FDZixDQUFDLENBQUMsQ0FBQTtBQUNQLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLFNBQWlCLEVBQ2pCLEtBQVksRUFDWixTQUFpQixFQUNqQixJQUE2QyxFQUM3QyxjQUFpQztJQUdqQyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ3pCLE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUM1QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNuRCxNQUFNLGFBQWEsR0FBRyxjQUFjLElBQUksRUFBRSxDQUFBO1FBRTFDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLGFBQWEsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFVLENBQUMsQ0FBQyxDQUFBO1FBQ2hILE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQWtDLEtBQUssQ0FBQyxDQUFBO1FBQ3BFLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbkMsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNyQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBRTVELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUVsRCxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWdDLEVBQUUsRUFBRSxDQUNwRCxNQUFNO2FBQ0gsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ25HLElBQUksQ0FDSCxNQUFNO2FBQ0gsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDYixHQUFHO2FBQ0EsR0FBRyxDQUFDLEtBQUssQ0FBQzthQUNWLElBQUksQ0FDSCxNQUFNO2FBQ0gsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDVCxNQUFNLEdBQUcsR0FBRyxDQUE0QixDQUFBO1lBQ3hDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDMUMsT0FBTyxHQUFHLENBQUE7UUFDWixDQUFDLENBQUMsRUFDSixNQUFNO2FBQ0gsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUNyQyxDQUNKLEVBQ0gsTUFBTTthQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLFVBQVUsQ0FDWCxDQUFBO1FBRUwsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUE0QyxFQUFFLEVBQUUsQ0FDbkUsR0FBRzthQUNBLEdBQUcsQ0FBQyxLQUFLLENBQUM7YUFDVixJQUFJLENBQ0gsTUFBTTthQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1QsT0FBTyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM5RCxDQUFDLENBQUMsRUFDSixNQUFNO2FBQ0gsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUNyQzthQUNBLElBQUksQ0FDSCxVQUFVLENBQ1gsQ0FBQTtRQUNMLE1BQU0sQ0FBQyxHQUEwQjtZQUMvQixhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUk7WUFFaEMsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDbEIsR0FBRztpQkFDQSxJQUFJO1lBQ0gsb0RBQW9EO1lBQ3BELE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUN4QixVQUFVLENBQUM7Z0JBQ1QsU0FBUyxFQUFFLFVBQVU7Z0JBQ3JCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixVQUFVLEVBQUUsU0FBUztnQkFDckIsU0FBUztnQkFDVCxNQUFNLEVBQUUsU0FBUzthQUNsQixDQUFDLENBQ0g7WUFFTCxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQ3ZCLFNBQVMsRUFBRSxLQUFLO2dCQUNoQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLFNBQVM7Z0JBQ1QsTUFBTSxFQUFFLFNBQVM7YUFDbEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FDWCxHQUFHO2lCQUNBLEdBQUcsQ0FBQyxLQUFLLENBQUM7aUJBQ1YsSUFBSSxDQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQ2xELFVBQVUsQ0FBQztnQkFDVCxTQUFTLEVBQUUsTUFBTTtnQkFDakIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixTQUFTO2dCQUNULE1BQU0sRUFBRSxTQUFTO2dCQUNqQixLQUFLLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBYSxFQUFFO2FBQzFDLENBQUMsQ0FDSDtZQUNMLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ1osR0FBRztpQkFDQSxJQUFJLENBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEVBQzVDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3hCLFVBQVUsQ0FBQztnQkFDVCxTQUFTLEVBQUUsUUFBUTtnQkFDbkIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixTQUFTO2dCQUNULE1BQU0sRUFBRSxTQUFTO2FBQ2xCLENBQUMsQ0FDSDtZQUNMLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ1QsQ0FBQztpQkFDRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNkLElBQUksQ0FDSCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUMxRCxNQUFNO2lCQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ1QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQ2pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2pELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQ3pDLENBQ0YsRUFDSCxVQUFVLEVBQ1YsVUFBVSxDQUFDO2dCQUNULFNBQVMsRUFBRSxLQUFLO2dCQUNoQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLFNBQVM7Z0JBQ1QsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLEtBQUssRUFBRSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFZLEVBQUU7YUFDaEQsQ0FBQyxDQUNIO1lBQ0wsV0FBVyxFQUFFLENBQUMsS0FBNEMsRUFBRSxFQUFFLENBQzVELElBQUksQ0FDRixNQUFNO2lCQUNILElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7Z0JBQ2xCLHNCQUFzQjtpQkFDckIsSUFBSSxDQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLCtDQUErQyxDQUFDLEVBQ2xHLE1BQU0sQ0FBQyxLQUFLLEVBQ1osTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFDM0IsVUFBVSxDQUFDO2dCQUNULFNBQVMsRUFBRSxhQUFhO2dCQUN4QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLFNBQVM7Z0JBQ1QsTUFBTSxFQUFFLFNBQVM7YUFDbEIsQ0FBQyxDQUNILENBQ0o7WUFDSCxRQUFRLEVBQUUsQ0FBQyxLQUE2QixFQUFFLEVBQUUsQ0FDMUMsSUFBSSxDQUNGLE1BQU07aUJBQ0gsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztnQkFDbEIsc0JBQXNCO2lCQUNyQixJQUFJLENBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsNENBQTRDLENBQUMsRUFDL0YsTUFBTSxDQUFDLEtBQUssRUFDWixNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUN4QixVQUFVLENBQUM7Z0JBQ1QsU0FBUyxFQUFFLFVBQVU7Z0JBQ3JCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixVQUFVLEVBQUUsU0FBUztnQkFDckIsU0FBUztnQkFDVCxNQUFNLEVBQUUsU0FBUzthQUNsQixDQUFDLENBQ0gsQ0FDSjtZQUNILE9BQU8sRUFBRSxJQUFJLENBQ1gsUUFBUSxFQUNSLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDaEIsU0FBUyxFQUFFLFNBQVM7Z0JBQ3BCLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixVQUFVLEVBQUUsU0FBUztnQkFDckIsU0FBUztnQkFDVCxNQUFNLEVBQUUsU0FBUzthQUNsQixDQUFDLENBQUMsQ0FDTjtTQUNGLENBQUE7UUFDRCxPQUFPLENBQUMsQ0FBQTtJQUNWLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLElBQUksRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUMvQixTQUFpQixFQUNqQixLQUFZLEVBQ1osSUFBNkMsRUFDN0MsTUFBNkI7UUFFN0IsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQ3ZDLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUNULElBQUksRUFDSixNQUFNLEVBQUUsYUFBYSxDQUN0QixDQUFBO1FBQ0QsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBSyxDQUFBO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzlDLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUErQixDQUFBO1FBQ3pELE1BQU0sTUFBTSxHQUFHLENBQUMsRUFBVSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUM1QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ1QsR0FBRyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQzdCLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1lBQ3pCLENBQUM7WUFDRCxPQUFPLEdBQUcsQ0FBQTtRQUNaLENBQUMsQ0FBQTtRQUNELE1BQU0sV0FBVyxHQUFHLENBQUMsU0FBaUIsRUFBRSxFQUFFLENBQ3hDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDbkQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUNuQyxJQUFJLEtBQUs7Z0JBQUUsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3ZDLElBQUksTUFBTSxFQUFFLGNBQWMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDaEUsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLFNBQVMsZUFBZSxDQUFDLENBQUE7WUFDeEQsQ0FBQztZQUNELE9BQU8sa0JBQWtCLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUM7aUJBQ2hGLElBQUksQ0FDSCxNQUFNLENBQUMsS0FBSyxFQUNaLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQ25CLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUN2RSxDQUFBO1FBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNMLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxFQUFFLGNBQWM7WUFDdEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbEYsTUFBTSxDQUFDLEdBQTBCO1lBQy9CLGFBQWEsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3hFLEdBQUcsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUMzQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUMzRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNuRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUN2RSxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNqRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUMzRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUN6RSxXQUFXLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztTQUNsRixDQUFBO1FBQ0QsT0FBTyxDQUFDLENBQUE7SUFDVixDQUFDLENBQUM7Q0FDSCxDQUFDLENBQUE7QUFFRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQSJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.215",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"proper-lockfile": "^4.1.2",
|
|
14
14
|
"pure-rand": "8.4.0",
|
|
15
15
|
"query-string": "^9.3.1",
|
|
16
|
-
"effect-app": "4.0.0-beta.
|
|
16
|
+
"effect-app": "4.0.0-beta.215"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@azure/cosmos": "^4.9.3",
|
package/src/Store/Memory.ts
CHANGED
|
@@ -58,7 +58,11 @@ const computeProjectionValue = (
|
|
|
58
58
|
return emptyValueFor(computed._tag)
|
|
59
59
|
}
|
|
60
60
|
const filter = stripRelationFilterPaths(computed.filter, computed.path)
|
|
61
|
-
|
|
61
|
+
// empty filter = unconditional match (codeFilter3_ uses eval on a built
|
|
62
|
+
// string and chokes on `( )`, so short-circuit before invoking it).
|
|
63
|
+
const matches = filter.length === 0
|
|
64
|
+
? (_value: unknown) => true
|
|
65
|
+
: (value: unknown) => codeFilter3_(filter, value)
|
|
62
66
|
switch (computed._tag) {
|
|
63
67
|
case "relation-count":
|
|
64
68
|
return relation.reduce<number>((acc, value) => matches(value) ? acc + 1 : acc, 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rawQuery.test.d.ts","sourceRoot":"","sources":["../rawQuery.test.ts"],"names":[],"mappings":"AACA,OAAO,EAA+C,cAAc,
|
|
1
|
+
{"version":3,"file":"rawQuery.test.d.ts","sourceRoot":"","sources":["../rawQuery.test.ts"],"names":[],"mappings":"AACA,OAAO,EAA+C,cAAc,EAA2C,MAAM,YAAY,CAAA;AASjI,eAAO,MAAM,EAAE,6CAWb,CAAA"}
|
package/test/query.test.ts
CHANGED
|
@@ -1433,3 +1433,336 @@ it("refine union with nested union", () =>
|
|
|
1433
1433
|
>()
|
|
1434
1434
|
})
|
|
1435
1435
|
.pipe(Effect.provide(TestStoreLive), setupRequestContextFromCurrent(), Effect.runPromise))
|
|
1436
|
+
|
|
1437
|
+
// ---------------------------------------------------------------------------
|
|
1438
|
+
// memFilter: computed projection execution (in-memory) and code filter coverage
|
|
1439
|
+
// ---------------------------------------------------------------------------
|
|
1440
|
+
|
|
1441
|
+
const computedBaseSchema = S.Struct({
|
|
1442
|
+
id: S.String,
|
|
1443
|
+
status: S.Literals(["active", "archived"]),
|
|
1444
|
+
items: S.Array(S.Struct({
|
|
1445
|
+
id: S.String,
|
|
1446
|
+
tag: S.Literals(["a", "b", "c"]),
|
|
1447
|
+
qty: S.Finite,
|
|
1448
|
+
note: S.String
|
|
1449
|
+
}))
|
|
1450
|
+
})
|
|
1451
|
+
type ComputedBase = S.Codec.Encoded<typeof computedBaseSchema>
|
|
1452
|
+
|
|
1453
|
+
const computedRows: ComputedBase[] = [
|
|
1454
|
+
{
|
|
1455
|
+
id: "r1",
|
|
1456
|
+
status: "active",
|
|
1457
|
+
items: [
|
|
1458
|
+
{ id: "i1", tag: "a", qty: 10, note: "alpha" },
|
|
1459
|
+
{ id: "i2", tag: "a", qty: 20, note: "alpha" },
|
|
1460
|
+
{ id: "i3", tag: "b", qty: 5, note: "beta" }
|
|
1461
|
+
]
|
|
1462
|
+
},
|
|
1463
|
+
{ id: "r2", status: "active", items: [] },
|
|
1464
|
+
{
|
|
1465
|
+
id: "r3",
|
|
1466
|
+
status: "archived",
|
|
1467
|
+
items: [
|
|
1468
|
+
{ id: "i4", tag: "b", qty: 7, note: "gamma" },
|
|
1469
|
+
{ id: "i5", tag: "b", qty: 7, note: "gamma" },
|
|
1470
|
+
{ id: "i6", tag: "c", qty: 3, note: "delta" }
|
|
1471
|
+
]
|
|
1472
|
+
}
|
|
1473
|
+
]
|
|
1474
|
+
|
|
1475
|
+
it("memFilter: relation-count with filter", () => {
|
|
1476
|
+
const q = make<ComputedBase>().pipe(
|
|
1477
|
+
projectComputed(
|
|
1478
|
+
S.Struct({ id: S.String, aCount: S.NonNegativeInt }),
|
|
1479
|
+
computed({
|
|
1480
|
+
aCount: relation<ComputedBase>("items").count(where("tag", "a"))
|
|
1481
|
+
})
|
|
1482
|
+
)
|
|
1483
|
+
)
|
|
1484
|
+
expect(memFilter(toFilter(q, computedBaseSchema))(computedRows)).toEqual([
|
|
1485
|
+
{ id: "r1", aCount: 2 },
|
|
1486
|
+
{ id: "r2", aCount: 0 },
|
|
1487
|
+
{ id: "r3", aCount: 0 }
|
|
1488
|
+
])
|
|
1489
|
+
})
|
|
1490
|
+
|
|
1491
|
+
it("memFilter: relation-any / every with filter", () => {
|
|
1492
|
+
const q = make<ComputedBase>().pipe(
|
|
1493
|
+
projectComputed(
|
|
1494
|
+
S.Struct({
|
|
1495
|
+
id: S.String,
|
|
1496
|
+
hasA: S.Boolean,
|
|
1497
|
+
allB: S.Boolean
|
|
1498
|
+
}),
|
|
1499
|
+
computed({
|
|
1500
|
+
hasA: relation<ComputedBase>("items").any(where("tag", "a")),
|
|
1501
|
+
allB: relation<ComputedBase>("items").every(where("tag", "b"))
|
|
1502
|
+
})
|
|
1503
|
+
)
|
|
1504
|
+
)
|
|
1505
|
+
expect(memFilter(toFilter(q, computedBaseSchema))(computedRows)).toEqual([
|
|
1506
|
+
{ id: "r1", hasA: true, allB: false },
|
|
1507
|
+
// empty array: any → false, every → true (JS Array.every on [] is true)
|
|
1508
|
+
{ id: "r2", hasA: false, allB: true },
|
|
1509
|
+
{ id: "r3", hasA: false, allB: false }
|
|
1510
|
+
])
|
|
1511
|
+
})
|
|
1512
|
+
|
|
1513
|
+
it("memFilter: relation-distinct-count with filter", () => {
|
|
1514
|
+
const q = make<ComputedBase>().pipe(
|
|
1515
|
+
projectComputed(
|
|
1516
|
+
S.Struct({ id: S.String, distinctNotes: S.NonNegativeInt }),
|
|
1517
|
+
computed({
|
|
1518
|
+
distinctNotes: relation<ComputedBase>("items").distinctCount("note", where("tag", "neq", "c"))
|
|
1519
|
+
})
|
|
1520
|
+
)
|
|
1521
|
+
)
|
|
1522
|
+
expect(memFilter(toFilter(q, computedBaseSchema))(computedRows)).toEqual([
|
|
1523
|
+
{ id: "r1", distinctNotes: 2 }, // alpha, beta
|
|
1524
|
+
{ id: "r2", distinctNotes: 0 },
|
|
1525
|
+
{ id: "r3", distinctNotes: 1 } // gamma (delta filtered out)
|
|
1526
|
+
])
|
|
1527
|
+
})
|
|
1528
|
+
|
|
1529
|
+
it("memFilter: relation-sum with filter", () => {
|
|
1530
|
+
const q = make<ComputedBase>().pipe(
|
|
1531
|
+
projectComputed(
|
|
1532
|
+
S.Struct({ id: S.String, totalQty: S.Finite }),
|
|
1533
|
+
computed({
|
|
1534
|
+
totalQty: relation<ComputedBase>("items").sum("qty", where("tag", "neq", "c"))
|
|
1535
|
+
})
|
|
1536
|
+
)
|
|
1537
|
+
)
|
|
1538
|
+
expect(memFilter(toFilter(q, computedBaseSchema))(computedRows)).toEqual([
|
|
1539
|
+
{ id: "r1", totalQty: 35 },
|
|
1540
|
+
{ id: "r2", totalQty: 0 },
|
|
1541
|
+
{ id: "r3", totalQty: 14 }
|
|
1542
|
+
])
|
|
1543
|
+
})
|
|
1544
|
+
|
|
1545
|
+
it("memFilter: relation-collect / collectDistinct with filter", () => {
|
|
1546
|
+
const q = make<ComputedBase>().pipe(
|
|
1547
|
+
projectComputed(
|
|
1548
|
+
S.Struct({
|
|
1549
|
+
id: S.String,
|
|
1550
|
+
notes: S.Array(S.String),
|
|
1551
|
+
distinctNotes: S.Array(S.String)
|
|
1552
|
+
}),
|
|
1553
|
+
computed({
|
|
1554
|
+
notes: relation<ComputedBase>("items").collect("note", where("tag", "neq", "c")),
|
|
1555
|
+
distinctNotes: relation<ComputedBase>("items").collectDistinct("note", where("tag", "neq", "c"))
|
|
1556
|
+
})
|
|
1557
|
+
)
|
|
1558
|
+
)
|
|
1559
|
+
expect(memFilter(toFilter(q, computedBaseSchema))(computedRows)).toEqual([
|
|
1560
|
+
{ id: "r1", notes: ["alpha", "alpha", "beta"], distinctNotes: ["alpha", "beta"] },
|
|
1561
|
+
{ id: "r2", notes: [], distinctNotes: [] },
|
|
1562
|
+
{ id: "r3", notes: ["gamma", "gamma"], distinctNotes: ["gamma"] }
|
|
1563
|
+
])
|
|
1564
|
+
})
|
|
1565
|
+
|
|
1566
|
+
it("memFilter: computed projection with multi-statement relation filter", () => {
|
|
1567
|
+
const q = make<ComputedBase>().pipe(
|
|
1568
|
+
projectComputed(
|
|
1569
|
+
S.Struct({ id: S.String, hits: S.NonNegativeInt }),
|
|
1570
|
+
computed({
|
|
1571
|
+
hits: relation<ComputedBase>("items").count(
|
|
1572
|
+
flow(
|
|
1573
|
+
where("tag", "a"),
|
|
1574
|
+
and("qty", "gt", 10)
|
|
1575
|
+
)
|
|
1576
|
+
)
|
|
1577
|
+
})
|
|
1578
|
+
)
|
|
1579
|
+
)
|
|
1580
|
+
expect(memFilter(toFilter(q, computedBaseSchema))(computedRows)).toEqual([
|
|
1581
|
+
{ id: "r1", hits: 1 }, // only i2 (a, qty 20)
|
|
1582
|
+
{ id: "r2", hits: 0 },
|
|
1583
|
+
{ id: "r3", hits: 0 }
|
|
1584
|
+
])
|
|
1585
|
+
})
|
|
1586
|
+
|
|
1587
|
+
it("memFilter: computed projection combined with root where filter", () => {
|
|
1588
|
+
const q = make<ComputedBase>().pipe(
|
|
1589
|
+
where("id", "neq", "r3"),
|
|
1590
|
+
projectComputed(
|
|
1591
|
+
S.Struct({ id: S.String, totalQty: S.Finite }),
|
|
1592
|
+
computed({
|
|
1593
|
+
totalQty: relation<ComputedBase>("items").sum("qty", where("tag", "neq", "c"))
|
|
1594
|
+
})
|
|
1595
|
+
)
|
|
1596
|
+
)
|
|
1597
|
+
expect(memFilter(toFilter(q, computedBaseSchema))(computedRows)).toEqual([
|
|
1598
|
+
{ id: "r1", totalQty: 35 },
|
|
1599
|
+
{ id: "r2", totalQty: 0 }
|
|
1600
|
+
])
|
|
1601
|
+
})
|
|
1602
|
+
|
|
1603
|
+
it("memFilter: computed projection with order/limit/skip applied to base rows", () => {
|
|
1604
|
+
const q = make<ComputedBase>().pipe(
|
|
1605
|
+
order("id", "DESC"),
|
|
1606
|
+
page({ skip: 1, take: 1 }),
|
|
1607
|
+
projectComputed(
|
|
1608
|
+
S.Struct({ id: S.String, total: S.NonNegativeInt }),
|
|
1609
|
+
computed({
|
|
1610
|
+
total: relation<ComputedBase>("items").count(where("qty", "gte", 0))
|
|
1611
|
+
})
|
|
1612
|
+
)
|
|
1613
|
+
)
|
|
1614
|
+
expect(memFilter(toFilter(q, computedBaseSchema))(computedRows)).toEqual([
|
|
1615
|
+
{ id: "r2", total: 0 }
|
|
1616
|
+
])
|
|
1617
|
+
})
|
|
1618
|
+
|
|
1619
|
+
it("memFilter: computed projection - relation missing on row returns empty value", () => {
|
|
1620
|
+
const partial: ComputedBase[] = [
|
|
1621
|
+
{ id: "x1" } as ComputedBase,
|
|
1622
|
+
{ id: "x2", status: "active", items: undefined as unknown as ComputedBase["items"] }
|
|
1623
|
+
]
|
|
1624
|
+
const q = make<ComputedBase>().pipe(
|
|
1625
|
+
projectComputed(
|
|
1626
|
+
S.Struct({
|
|
1627
|
+
id: S.String,
|
|
1628
|
+
c: S.NonNegativeInt,
|
|
1629
|
+
s: S.Finite,
|
|
1630
|
+
any_: S.Boolean,
|
|
1631
|
+
every_: S.Boolean,
|
|
1632
|
+
coll: S.Array(S.String)
|
|
1633
|
+
}),
|
|
1634
|
+
computed({
|
|
1635
|
+
c: relation<ComputedBase>("items").count(where("tag", "a")),
|
|
1636
|
+
s: relation<ComputedBase>("items").sum("qty", where("tag", "a")),
|
|
1637
|
+
any_: relation<ComputedBase>("items").any(where("tag", "a")),
|
|
1638
|
+
every_: relation<ComputedBase>("items").every(where("tag", "a")),
|
|
1639
|
+
coll: relation<ComputedBase>("items").collect("note", where("tag", "a"))
|
|
1640
|
+
})
|
|
1641
|
+
)
|
|
1642
|
+
)
|
|
1643
|
+
expect(memFilter(toFilter(q, computedBaseSchema))(partial)).toEqual([
|
|
1644
|
+
{ id: "x1", c: 0, s: 0, any_: false, every_: true, coll: [] },
|
|
1645
|
+
{ id: "x2", c: 0, s: 0, any_: false, every_: true, coll: [] }
|
|
1646
|
+
])
|
|
1647
|
+
})
|
|
1648
|
+
|
|
1649
|
+
it("memFilter: rejects extra computed keys not in projection schema", () => {
|
|
1650
|
+
const q = make<ComputedBase>().pipe(
|
|
1651
|
+
projectComputed(
|
|
1652
|
+
S.Struct({ id: S.String }),
|
|
1653
|
+
computed({
|
|
1654
|
+
bogus: relation<ComputedBase>("items").count(where("tag", "a"))
|
|
1655
|
+
})
|
|
1656
|
+
)
|
|
1657
|
+
)
|
|
1658
|
+
expect(() => toFilter(q, computedBaseSchema)).toThrowError(
|
|
1659
|
+
"Computed projection keys must exist in projection schema"
|
|
1660
|
+
)
|
|
1661
|
+
})
|
|
1662
|
+
|
|
1663
|
+
// ---------------------------------------------------------------------------
|
|
1664
|
+
// memFilter: code filter (where/and/or/scopes) execution coverage
|
|
1665
|
+
// ---------------------------------------------------------------------------
|
|
1666
|
+
|
|
1667
|
+
type CFRow = {
|
|
1668
|
+
readonly id: string
|
|
1669
|
+
readonly tag: "x" | "y" | "z"
|
|
1670
|
+
readonly qty: number
|
|
1671
|
+
readonly desc: string
|
|
1672
|
+
readonly tags: ReadonlyArray<string>
|
|
1673
|
+
readonly nested: { readonly kind: "k1" | "k2"; readonly v: number }
|
|
1674
|
+
}
|
|
1675
|
+
|
|
1676
|
+
const cfRows: CFRow[] = [
|
|
1677
|
+
{ id: "1", tag: "x", qty: 10, desc: "Hello World", tags: ["red", "green"], nested: { kind: "k1", v: 1 } },
|
|
1678
|
+
{ id: "2", tag: "y", qty: 20, desc: "Goodbye", tags: ["blue"], nested: { kind: "k2", v: 5 } },
|
|
1679
|
+
{ id: "3", tag: "z", qty: 0, desc: "Hello again", tags: ["red", "blue", "green"], nested: { kind: "k1", v: 9 } },
|
|
1680
|
+
{ id: "4", tag: "y", qty: 30, desc: "World cup", tags: [], nested: { kind: "k2", v: 0 } }
|
|
1681
|
+
]
|
|
1682
|
+
|
|
1683
|
+
const runCF = (q: any) =>
|
|
1684
|
+
(memFilter(toFilter(q))(cfRows) as unknown as readonly CFRow[]).map((_) => _.id)
|
|
1685
|
+
|
|
1686
|
+
it("codeFilter: where + and chain", () => {
|
|
1687
|
+
const q = make<CFRow>().pipe(
|
|
1688
|
+
where("tag", "y"),
|
|
1689
|
+
and("qty", "gt", 25)
|
|
1690
|
+
)
|
|
1691
|
+
expect(runCF(q)).toEqual(["4"])
|
|
1692
|
+
})
|
|
1693
|
+
|
|
1694
|
+
it("codeFilter: where + or chain", () => {
|
|
1695
|
+
const q = make<CFRow>().pipe(
|
|
1696
|
+
where("tag", "x"),
|
|
1697
|
+
or("tag", "z")
|
|
1698
|
+
)
|
|
1699
|
+
expect(runCF(q).sort()).toEqual(["1", "3"])
|
|
1700
|
+
})
|
|
1701
|
+
|
|
1702
|
+
it("codeFilter: nested scope precedence (a AND (b OR c))", () => {
|
|
1703
|
+
const q = make<CFRow>().pipe(
|
|
1704
|
+
where("tag", "y"),
|
|
1705
|
+
and(
|
|
1706
|
+
where("qty", "gt", 25),
|
|
1707
|
+
or("desc", "contains", "good")
|
|
1708
|
+
)
|
|
1709
|
+
)
|
|
1710
|
+
// tag=y AND (qty>25 OR desc contains "good") → row 2 (Goodbye) and row 4 (qty 30)
|
|
1711
|
+
expect(runCF(q).sort()).toEqual(["2", "4"])
|
|
1712
|
+
})
|
|
1713
|
+
|
|
1714
|
+
it("codeFilter: contains/startsWith/endsWith are case-insensitive", () => {
|
|
1715
|
+
expect(runCF(make<CFRow>().pipe(where("desc", "contains", "WORLD"))).sort()).toEqual(["1", "4"])
|
|
1716
|
+
expect(runCF(make<CFRow>().pipe(where("desc", "startsWith", "hello"))).sort()).toEqual(["1", "3"])
|
|
1717
|
+
expect(runCF(make<CFRow>().pipe(where("desc", "endsWith", "AGAIN")))).toEqual(["3"])
|
|
1718
|
+
})
|
|
1719
|
+
|
|
1720
|
+
it("codeFilter: array includes / includes-any / includes-all", () => {
|
|
1721
|
+
expect(runCF(make<CFRow>().pipe(where("tags", "includes", "red"))).sort()).toEqual(["1", "3"])
|
|
1722
|
+
expect(runCF(make<CFRow>().pipe(where("tags", "includes-any", ["blue", "green"]))).sort()).toEqual([
|
|
1723
|
+
"1",
|
|
1724
|
+
"2",
|
|
1725
|
+
"3"
|
|
1726
|
+
])
|
|
1727
|
+
expect(runCF(make<CFRow>().pipe(where("tags", "includes-all", ["red", "blue"])))).toEqual(["3"])
|
|
1728
|
+
})
|
|
1729
|
+
|
|
1730
|
+
it("codeFilter: in / notIn", () => {
|
|
1731
|
+
expect(runCF(make<CFRow>().pipe(where("tag", "in", ["x", "z"]))).sort()).toEqual(["1", "3"])
|
|
1732
|
+
expect(runCF(make<CFRow>().pipe(where("tag", "notIn", ["x", "z"]))).sort()).toEqual(["2", "4"])
|
|
1733
|
+
})
|
|
1734
|
+
|
|
1735
|
+
it("codeFilter: gt / gte / lt / lte / neq", () => {
|
|
1736
|
+
expect(runCF(make<CFRow>().pipe(where("qty", "gt", 10))).sort()).toEqual(["2", "4"])
|
|
1737
|
+
expect(runCF(make<CFRow>().pipe(where("qty", "gte", 10))).sort()).toEqual(["1", "2", "4"])
|
|
1738
|
+
expect(runCF(make<CFRow>().pipe(where("qty", "lt", 10)))).toEqual(["3"])
|
|
1739
|
+
expect(runCF(make<CFRow>().pipe(where("qty", "lte", 10))).sort()).toEqual(["1", "3"])
|
|
1740
|
+
expect(runCF(make<CFRow>().pipe(where("qty", "neq", 0))).sort()).toEqual(["1", "2", "4"])
|
|
1741
|
+
})
|
|
1742
|
+
|
|
1743
|
+
it("codeFilter: nested path access through dot notation", () => {
|
|
1744
|
+
expect(runCF(make<CFRow>().pipe(where("nested.kind", "k1"))).sort()).toEqual(["1", "3"])
|
|
1745
|
+
expect(
|
|
1746
|
+
runCF(
|
|
1747
|
+
make<CFRow>().pipe(
|
|
1748
|
+
where("nested.kind", "k2"),
|
|
1749
|
+
and("nested.v", "gt", 0)
|
|
1750
|
+
)
|
|
1751
|
+
)
|
|
1752
|
+
)
|
|
1753
|
+
.toEqual(["2"])
|
|
1754
|
+
})
|
|
1755
|
+
|
|
1756
|
+
it("codeFilter: array length predicates", () => {
|
|
1757
|
+
expect(runCF(make<CFRow>().pipe(where("tags.length", 0)))).toEqual(["4"])
|
|
1758
|
+
expect(runCF(make<CFRow>().pipe(where("tags.length", "gte", 2))).sort()).toEqual(["1", "3"])
|
|
1759
|
+
})
|
|
1760
|
+
|
|
1761
|
+
it("codeFilter: order + skip + limit applied after filter", () => {
|
|
1762
|
+
const q = make<CFRow>().pipe(
|
|
1763
|
+
where("tag", "neq", "z"),
|
|
1764
|
+
order("qty", "DESC"),
|
|
1765
|
+
page({ skip: 1, take: 2 })
|
|
1766
|
+
)
|
|
1767
|
+
expect(runCF(q)).toEqual(["2", "1"])
|
|
1768
|
+
})
|
package/test/rawQuery.test.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it } from "@effect/vitest"
|
|
2
|
-
import { Array, Config, Context, Effect, flow, Layer, ManagedRuntime, Redacted, References, Result, S } from "effect-app"
|
|
2
|
+
import { Array, Config, Context, Effect, flow, Layer, ManagedRuntime, Redacted, References, Result, S, Struct } from "effect-app"
|
|
3
3
|
import { LogLevels } from "effect-app/utils"
|
|
4
4
|
import { setupRequestContextFromCurrent } from "../src/api/setupRequest.js"
|
|
5
5
|
import { and, computed, or, project, projectComputed, relation, where, whereEvery, whereSome } from "../src/Model/query.js"
|
|
@@ -408,6 +408,228 @@ describe("computed projections", () => {
|
|
|
408
408
|
))
|
|
409
409
|
*/
|
|
410
410
|
|
|
411
|
+
// Mimic scanner MultiPick/EasyLife AllPickList shape:
|
|
412
|
+
// - parent has tagged-state with `at` timestamp
|
|
413
|
+
// - items is NonEmptyArray with state._tag + articleId/articleGTIN
|
|
414
|
+
// - controller filters `state.at gte X` and `state._tag neq closed`
|
|
415
|
+
// then projectComputed with: count, any(initial/picking/packed),
|
|
416
|
+
// every(picked/packed), collectDistinct(articleId)
|
|
417
|
+
const itemStateSchema = S.Union([
|
|
418
|
+
S.TaggedStruct("initial", { at: S.String }),
|
|
419
|
+
S.TaggedStruct("picking", { at: S.String }),
|
|
420
|
+
S.TaggedStruct("picked", { at: S.String }),
|
|
421
|
+
S.TaggedStruct("packed", { at: S.String })
|
|
422
|
+
])
|
|
423
|
+
|
|
424
|
+
class ArticleLineItem extends S.Class<ArticleLineItem>("ArticleLineItem")({
|
|
425
|
+
articleId: S.String,
|
|
426
|
+
articleGTIN: S.String,
|
|
427
|
+
state: itemStateSchema
|
|
428
|
+
}) {}
|
|
429
|
+
|
|
430
|
+
const stOrderState = S.Union([
|
|
431
|
+
S.TaggedStruct("initial", { at: S.String }),
|
|
432
|
+
S.TaggedStruct("packed", { at: S.String }),
|
|
433
|
+
S.TaggedStruct("closed", { at: S.String })
|
|
434
|
+
])
|
|
435
|
+
|
|
436
|
+
class Order extends S.Class<Order>("Order")({
|
|
437
|
+
id: S.String,
|
|
438
|
+
state: stOrderState,
|
|
439
|
+
items: S.NonEmptyArray(ArticleLineItem)
|
|
440
|
+
}) {}
|
|
441
|
+
|
|
442
|
+
const orderItems = [
|
|
443
|
+
new Order({
|
|
444
|
+
id: "o-open-1",
|
|
445
|
+
state: { _tag: "initial", at: "2026-05-08T08:00:00Z" },
|
|
446
|
+
items: [
|
|
447
|
+
new ArticleLineItem({
|
|
448
|
+
articleId: "A1",
|
|
449
|
+
articleGTIN: "G1",
|
|
450
|
+
state: { _tag: "picking", at: "2026-05-08T08:01:00Z" }
|
|
451
|
+
}),
|
|
452
|
+
new ArticleLineItem({
|
|
453
|
+
articleId: "A1",
|
|
454
|
+
articleGTIN: "G1",
|
|
455
|
+
state: { _tag: "picked", at: "2026-05-08T08:02:00Z" }
|
|
456
|
+
}),
|
|
457
|
+
new ArticleLineItem({
|
|
458
|
+
articleId: "A2",
|
|
459
|
+
articleGTIN: "G2",
|
|
460
|
+
state: { _tag: "initial", at: "2026-05-08T08:00:00Z" }
|
|
461
|
+
})
|
|
462
|
+
]
|
|
463
|
+
}),
|
|
464
|
+
new Order({
|
|
465
|
+
id: "o-allpicked-2",
|
|
466
|
+
state: { _tag: "packed", at: "2026-05-07T10:00:00Z" },
|
|
467
|
+
items: [
|
|
468
|
+
new ArticleLineItem({
|
|
469
|
+
articleId: "B1",
|
|
470
|
+
articleGTIN: "GB1",
|
|
471
|
+
state: { _tag: "picked", at: "2026-05-07T09:50:00Z" }
|
|
472
|
+
}),
|
|
473
|
+
new ArticleLineItem({
|
|
474
|
+
articleId: "B2",
|
|
475
|
+
articleGTIN: "GB2",
|
|
476
|
+
state: { _tag: "picked", at: "2026-05-07T09:55:00Z" }
|
|
477
|
+
})
|
|
478
|
+
]
|
|
479
|
+
}),
|
|
480
|
+
new Order({
|
|
481
|
+
id: "o-closed-3",
|
|
482
|
+
state: { _tag: "closed", at: "2026-05-04T10:00:00Z" },
|
|
483
|
+
items: [
|
|
484
|
+
new ArticleLineItem({
|
|
485
|
+
articleId: "C1",
|
|
486
|
+
articleGTIN: "GC1",
|
|
487
|
+
state: { _tag: "packed", at: "2026-05-04T09:00:00Z" }
|
|
488
|
+
})
|
|
489
|
+
]
|
|
490
|
+
})
|
|
491
|
+
]
|
|
492
|
+
|
|
493
|
+
// @effect-diagnostics-next-line missingEffectServiceDependency:off
|
|
494
|
+
class OrderRepo extends Context.Service<OrderRepo>()(
|
|
495
|
+
"OrderRepo",
|
|
496
|
+
{
|
|
497
|
+
make: Effect.gen(function*() {
|
|
498
|
+
const partitionKey = "orders-" + new Date().getTime()
|
|
499
|
+
return yield* makeRepo("Order", Order, { config: { partitionValue: () => partitionKey } })
|
|
500
|
+
})
|
|
501
|
+
}
|
|
502
|
+
) {
|
|
503
|
+
static readonly layer = Layer
|
|
504
|
+
.effect(
|
|
505
|
+
OrderRepo,
|
|
506
|
+
Effect.gen(function*() {
|
|
507
|
+
const partitionKey = "orders-" + new Date().getTime()
|
|
508
|
+
const repo = OrderRepo.of(
|
|
509
|
+
yield* makeRepo("Order", Order, {
|
|
510
|
+
config: { partitionValue: () => partitionKey }
|
|
511
|
+
})
|
|
512
|
+
)
|
|
513
|
+
yield* repo.saveAndPublish(orderItems).pipe(setupRequestContextFromCurrent("init"))
|
|
514
|
+
return repo
|
|
515
|
+
})
|
|
516
|
+
)
|
|
517
|
+
static readonly Test = this
|
|
518
|
+
.layer
|
|
519
|
+
.pipe(Layer.provide(Layer.merge(MemoryStoreLive, RepositoryRegistryLive)))
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
describe("scanner-style AllPickList computed projections", () => {
|
|
523
|
+
const test = Effect
|
|
524
|
+
.gen(function*() {
|
|
525
|
+
const repo = yield* OrderRepo
|
|
526
|
+
type OrderEnc = S.Codec.Encoded<typeof Order>
|
|
527
|
+
|
|
528
|
+
const projection = S.Struct({
|
|
529
|
+
id: S.String,
|
|
530
|
+
state: stOrderState,
|
|
531
|
+
articleCount: S.NonNegativeInt,
|
|
532
|
+
hasInitialItem: S.Boolean,
|
|
533
|
+
hasPickingItem: S.Boolean,
|
|
534
|
+
hasPackedItem: S.Boolean,
|
|
535
|
+
allItemsPicked: S.Boolean,
|
|
536
|
+
allItemsPacked: S.Boolean,
|
|
537
|
+
articleIds: S.Array(S.String)
|
|
538
|
+
})
|
|
539
|
+
|
|
540
|
+
const result = yield* repo.query(
|
|
541
|
+
where("state.at", "gte", "2026-05-05T00:00:00Z"),
|
|
542
|
+
and("state._tag", "neq", "closed"),
|
|
543
|
+
projectComputed(
|
|
544
|
+
projection,
|
|
545
|
+
computed({
|
|
546
|
+
articleCount: relation<OrderEnc>("items").count(),
|
|
547
|
+
hasInitialItem: relation<OrderEnc>("items").any(where("state._tag", "initial")),
|
|
548
|
+
hasPickingItem: relation<OrderEnc>("items").any(where("state._tag", "picking")),
|
|
549
|
+
hasPackedItem: relation<OrderEnc>("items").any(where("state._tag", "packed")),
|
|
550
|
+
allItemsPicked: relation<OrderEnc>("items").every(where("state._tag", "picked")),
|
|
551
|
+
allItemsPacked: relation<OrderEnc>("items").every(where("state._tag", "packed")),
|
|
552
|
+
articleIds: relation<OrderEnc>("items").collectDistinct("articleId")
|
|
553
|
+
})
|
|
554
|
+
)
|
|
555
|
+
)
|
|
556
|
+
|
|
557
|
+
const byId = Object.fromEntries(result.map((r) => [r.id, r]))
|
|
558
|
+
|
|
559
|
+
expect(Object.keys(byId).sort()).toEqual(["o-allpicked-2", "o-open-1"])
|
|
560
|
+
|
|
561
|
+
const open = byId["o-open-1"]!
|
|
562
|
+
expect(open.articleCount).toBe(3)
|
|
563
|
+
expect(open.hasInitialItem).toBe(true)
|
|
564
|
+
expect(open.hasPickingItem).toBe(true)
|
|
565
|
+
expect(open.hasPackedItem).toBe(false)
|
|
566
|
+
expect(open.allItemsPicked).toBe(false)
|
|
567
|
+
expect(open.allItemsPacked).toBe(false)
|
|
568
|
+
expect([...open.articleIds].sort()).toEqual(["A1", "A2"])
|
|
569
|
+
|
|
570
|
+
const allp = byId["o-allpicked-2"]!
|
|
571
|
+
expect(allp.articleCount).toBe(2)
|
|
572
|
+
expect(allp.hasInitialItem).toBe(false)
|
|
573
|
+
expect(allp.hasPickingItem).toBe(false)
|
|
574
|
+
expect(allp.hasPackedItem).toBe(false)
|
|
575
|
+
expect(allp.allItemsPicked).toBe(true)
|
|
576
|
+
expect(allp.allItemsPacked).toBe(false)
|
|
577
|
+
expect([...allp.articleIds].sort()).toEqual(["B1", "B2"])
|
|
578
|
+
})
|
|
579
|
+
.pipe(setupRequestContextFromCurrent())
|
|
580
|
+
|
|
581
|
+
it("works well in Memory", () =>
|
|
582
|
+
test.pipe(Effect.provide(OrderRepo.Test), rt.runPromise))
|
|
583
|
+
})
|
|
584
|
+
|
|
585
|
+
// Same but mimics the FULL controller projection: includes `items` array
|
|
586
|
+
// (NonEmptyArray) alongside the computed scalars. This tests the
|
|
587
|
+
// memory-side select pipeline that combines subKeys (items) with
|
|
588
|
+
// computedKeys in one Project node.
|
|
589
|
+
describe("scanner-style AllPickList — items + computed combined", () => {
|
|
590
|
+
const test = Effect
|
|
591
|
+
.gen(function*() {
|
|
592
|
+
const repo = yield* OrderRepo
|
|
593
|
+
type OrderEnc = S.Codec.Encoded<typeof Order>
|
|
594
|
+
|
|
595
|
+
const projection = S.Struct({
|
|
596
|
+
id: S.String,
|
|
597
|
+
items: S.NonEmptyArray(ArticleLineItem.mapFields(Struct.pick(["articleId", "articleGTIN"]))),
|
|
598
|
+
articleCount: S.NonNegativeInt,
|
|
599
|
+
allItemsPicked: S.Boolean,
|
|
600
|
+
articleIds: S.Array(S.String)
|
|
601
|
+
})
|
|
602
|
+
|
|
603
|
+
const result = yield* repo.query(
|
|
604
|
+
where("state.at", "gte", "2026-05-05T00:00:00Z"),
|
|
605
|
+
and("state._tag", "neq", "closed"),
|
|
606
|
+
projectComputed(
|
|
607
|
+
projection,
|
|
608
|
+
computed({
|
|
609
|
+
articleCount: relation<OrderEnc>("items").count(),
|
|
610
|
+
allItemsPicked: relation<OrderEnc>("items").every(where("state._tag", "picked")),
|
|
611
|
+
articleIds: relation<OrderEnc>("items").collectDistinct("articleId")
|
|
612
|
+
})
|
|
613
|
+
)
|
|
614
|
+
)
|
|
615
|
+
|
|
616
|
+
expect(result.length).toBe(2)
|
|
617
|
+
const byId = Object.fromEntries(result.map((r) => [r.id, r]))
|
|
618
|
+
const open = byId["o-open-1"]!
|
|
619
|
+
expect(open.items.length).toBe(3)
|
|
620
|
+
expect(open.items[0]).toHaveProperty("articleId")
|
|
621
|
+
expect(open.items[0]).toHaveProperty("articleGTIN")
|
|
622
|
+
expect(open.allItemsPicked).toBe(false)
|
|
623
|
+
const allp = byId["o-allpicked-2"]!
|
|
624
|
+
expect(allp.items.length).toBe(2)
|
|
625
|
+
expect(allp.allItemsPicked).toBe(true)
|
|
626
|
+
})
|
|
627
|
+
.pipe(setupRequestContextFromCurrent())
|
|
628
|
+
|
|
629
|
+
it("works well in Memory", () =>
|
|
630
|
+
test.pipe(Effect.provide(OrderRepo.Test), rt.runPromise))
|
|
631
|
+
})
|
|
632
|
+
|
|
411
633
|
describe("removeByIds", () => {
|
|
412
634
|
const test = Effect
|
|
413
635
|
.gen(function*() {
|