@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.
Files changed (67) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/_cjs/services/QueueMaker/memQueue.cjs +4 -1
  3. package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
  4. package/_cjs/services/QueueMaker/sbqueue.cjs +4 -1
  5. package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
  6. package/_cjs/services/RepositoryBase.cjs +1 -1
  7. package/_cjs/services/RepositoryBase.cjs.map +1 -1
  8. package/_cjs/services/Store/Cosmos.cjs +2 -5
  9. package/_cjs/services/Store/Cosmos.cjs.map +1 -1
  10. package/_cjs/services/Store/Memory.cjs +1 -1
  11. package/_cjs/services/Store/Memory.cjs.map +1 -1
  12. package/_cjs/services/Store/filterApi/query.cjs +0 -167
  13. package/_cjs/services/Store/filterApi/query.cjs.map +1 -1
  14. package/_cjs/services/Store/service.cjs.map +1 -1
  15. package/_cjs/services/Store/utils.cjs +1 -1
  16. package/_cjs/services/Store/utils.cjs.map +1 -1
  17. package/_cjs/services/query/dsl.cjs +1 -1
  18. package/_cjs/services/query/dsl.cjs.map +1 -1
  19. package/_cjs/services/query/new-kid-interpreter.cjs +14 -10
  20. package/_cjs/services/query/new-kid-interpreter.cjs.map +1 -1
  21. package/dist/services/QueueMaker/memQueue.d.ts.map +1 -1
  22. package/dist/services/QueueMaker/memQueue.js +5 -2
  23. package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -1
  24. package/dist/services/QueueMaker/sbqueue.js +5 -2
  25. package/dist/services/RepositoryBase.d.ts +2 -2
  26. package/dist/services/RepositoryBase.d.ts.map +1 -1
  27. package/dist/services/RepositoryBase.js +2 -2
  28. package/dist/services/Store/Cosmos.js +3 -3
  29. package/dist/services/Store/Memory.js +2 -2
  30. package/dist/services/Store/filterApi/query.d.ts +3 -44
  31. package/dist/services/Store/filterApi/query.d.ts.map +1 -1
  32. package/dist/services/Store/filterApi/query.js +2 -136
  33. package/dist/services/Store/service.d.ts +3 -4
  34. package/dist/services/Store/service.d.ts.map +1 -1
  35. package/dist/services/Store/service.js +1 -1
  36. package/dist/services/Store/utils.d.ts +1 -1
  37. package/dist/services/Store/utils.d.ts.map +1 -1
  38. package/dist/services/Store/utils.js +2 -2
  39. package/dist/services/query/dsl.d.ts +22 -3
  40. package/dist/services/query/dsl.d.ts.map +1 -1
  41. package/dist/services/query/dsl.js +2 -2
  42. package/dist/services/query/new-kid-interpreter.d.ts +2 -2
  43. package/dist/services/query/new-kid-interpreter.d.ts.map +1 -1
  44. package/dist/services/query/new-kid-interpreter.js +13 -11
  45. package/package.json +2 -12
  46. package/src/services/QueueMaker/memQueue.ts +6 -1
  47. package/src/services/QueueMaker/sbqueue.ts +4 -1
  48. package/src/services/RepositoryBase.ts +1 -7
  49. package/src/services/Store/Cosmos.ts +2 -2
  50. package/src/services/Store/Memory.ts +3 -3
  51. package/src/services/Store/filterApi/query.ts +22 -231
  52. package/src/services/Store/service.ts +3 -4
  53. package/src/services/Store/utils.ts +2 -2
  54. package/src/services/query/dsl.ts +191 -16
  55. package/src/services/query/new-kid-interpreter.ts +16 -13
  56. package/test/query.test.ts +2 -5
  57. package/_cjs/services/Store/filterApi/proxy.cjs +0 -40
  58. package/_cjs/services/Store/filterApi/proxy.cjs.map +0 -1
  59. package/dist/services/Store/filterApi/proxy.d.ts +0 -41
  60. package/dist/services/Store/filterApi/proxy.d.ts.map +0 -1
  61. package/dist/services/Store/filterApi/proxy.js +0 -41
  62. package/src/services/Store/filterApi/proxy.ts +0 -109
  63. package/test/filterApi.test.ts +0 -268
  64. package/vitest.config.ts.timestamp-1711656440838-19c636fe320df.mjs +0 -0
  65. package/vitest.config.ts.timestamp-1711724061890-6ecedb0a07fdd.mjs +0 -0
  66. package/vitest.config.ts.timestamp-1711743489537-da8d9e5f66c9f.mjs +0 -0
  67. package/vitest.config.ts.timestamp-1711744615239-dcf257a844e01.mjs +0 -37
@@ -1,268 +0,0 @@
1
- import { describe, expect, it } from "vitest"
2
- import { codeFilter3 } from "../src/services/Store/codeFilter.js"
3
- import { buildWhereCosmosQuery3 } from "../src/services/Store/Cosmos/query.js"
4
- import { print, QueryBuilder } from "../src/services/Store/filterApi/query.js"
5
-
6
- const MyEntity = {
7
- query: QueryBuilder
8
- .make<MyEntity>()
9
- }
10
-
11
- const removeWhitespace = (a: string) => a.replaceAll(/\s+/g, " ").replaceAll(/^\s+/g, "").replaceAll(/\s+$/g, "")
12
-
13
- interface MyEntity {
14
- id: string
15
- name: string
16
- bio: string | null
17
- isActive: boolean
18
- state: { _tag: "a"; val: number } | { _tag: "b"; val: string } | { _tag: "c"; noVal: boolean }
19
- roles: readonly string[]
20
- tag: "a" | "b" | "c"
21
- age?: number
22
- something: {
23
- id: number
24
- name: string
25
- } | null
26
- }
27
-
28
- describe("works", () => {
29
- const f = MyEntity.query((where, f) =>
30
- where(f.something.id.eq(1))
31
- .and(() =>
32
- where(f.something.name.startsWith("a")) // or would we do "like", "a%"?
33
- .or(f.tag.in("a", "b"))
34
- .or(() =>
35
- where(f.name.neq("Alfredo"))
36
- .and(f.tag("c"))
37
- )
38
- )
39
- // .and(f.state._tag("a"))
40
- .and("state._tag", "a")
41
- .and(f.isActive(true))
42
- .and(f.age.gte(12))
43
- )
44
-
45
- const s = f.build()
46
- console.log(JSON.stringify(s, undefined, 2))
47
- it("print", () =>
48
- expect(print(s)).toBe(
49
- `something.id eq 1 AND (
50
- something.name startsWith a OR tag in a OR (
51
- name neq Alfredo AND tag eq c
52
- )
53
- ) AND state._tag eq a AND isActive eq true AND age gte 12`
54
- ))
55
- const values: MyEntity[] = [{
56
- id: "1",
57
- name: "Patrick",
58
- bio: "something",
59
- age: 13,
60
- isActive: true,
61
- state: { _tag: "a", val: 1 },
62
- roles: ["admin"],
63
- tag: "c",
64
- something: { id: 1, name: "abc" }
65
- }, {
66
- id: "1",
67
- name: "Patrick",
68
- bio: "something",
69
- age: 11,
70
- isActive: true,
71
- state: { _tag: "b", val: "2" },
72
- roles: ["admin"],
73
- tag: "a",
74
- something: { id: 1, name: "abc" }
75
- }]
76
-
77
- it("print codef", () => {
78
- expect(values.filter(codeFilter3(s))).toStrictEqual([values[0]])
79
- })
80
-
81
- it("codeFilter1", () => {
82
- expect(values.filter(codeFilter3(s))).toStrictEqual([values[0]])
83
- })
84
- it("codeFilter2", () => {
85
- expect(values.filter(
86
- codeFilter3(
87
- MyEntity
88
- .query((where, f) =>
89
- where(f.something.id.eq(0))
90
- .and(() =>
91
- where(f.something.name.startsWith("a"))
92
- .or(f.tag.in("a", "b"))
93
- )
94
- )
95
- .build()
96
- )
97
- ))
98
- .toStrictEqual([])
99
-
100
- expect(values.filter(
101
- codeFilter3(
102
- MyEntity
103
- .query((where, f) => where(f.something.id.eq(0)))
104
- .build()
105
- )
106
- ))
107
- .toStrictEqual([])
108
-
109
- expect(values.filter(
110
- codeFilter3(
111
- MyEntity
112
- .query((where, f) => where(f.something.id.eq(1)))
113
- .build()
114
- )
115
- ))
116
- .toStrictEqual(values)
117
-
118
- expect(values.filter(
119
- codeFilter3(
120
- MyEntity
121
- .query((where, f) => where(f.age.eq(11)))
122
- .build()
123
- )
124
- ))
125
- .toStrictEqual([values[1]])
126
- })
127
-
128
- it("cosmos", () => {
129
- const r = buildWhereCosmosQuery3(s, "MyEntity", "marker", { tag: "some" })
130
- expect(removeWhitespace(r.query)).toBe(removeWhitespace(`
131
- SELECT f
132
- FROM MyEntity f
133
- WHERE f.id != @id AND f.something.id = @v0 AND (
134
- STARTSWITH(f.something.name, @v1, true) OR ARRAY_CONTAINS(@v2, (f.tag ?? "some")) OR (
135
- f.name <> @v3 AND (f.tag ?? "some") = @v4
136
- )
137
- ) AND f.state._tag = @v5 AND f.isActive = @v6 AND f.age >= @v7`))
138
- expect(r.parameters).toEqual([
139
- {
140
- "name": "@id",
141
- "value": "marker"
142
- },
143
- {
144
- "name": "@v0",
145
- "value": 1
146
- },
147
- {
148
- "name": "@v1",
149
- "value": "a"
150
- },
151
- {
152
- "name": "@v2",
153
- "value": "a"
154
- },
155
- {
156
- "name": "@v3",
157
- "value": "Alfredo"
158
- },
159
- {
160
- "name": "@v4",
161
- "value": "c"
162
- },
163
- {
164
- "name": "@v5",
165
- "value": "a"
166
- },
167
- {
168
- "name": "@v6",
169
- "value": true
170
- },
171
- {
172
- "name": "@v7",
173
- "value": 12
174
- }
175
- ])
176
- })
177
- })
178
-
179
- // ref https://stackoverflow.com/questions/1241142/sql-logic-operator-precedence-and-and-or
180
- describe("root-or", () => {
181
- const f = MyEntity.query((where, f) =>
182
- where(() =>
183
- where(f.something.id(1))
184
- .and(() =>
185
- where(f.something.name.startsWith("a")) // or would we do "like", "a%"?
186
- .or(f.tag.in("a", "b"))
187
- .or(() =>
188
- where(f.name.neq("Alfredo"))
189
- .and(f.tag("c"))
190
- )
191
- )
192
- .and(f.bio.contains("abc"))
193
- .and(f.isActive(true))
194
- .and(f.age.gte(12))
195
- )
196
- .or(f.name.startsWith("C"))
197
- )
198
-
199
- const s = f.build()
200
- console.log(JSON.stringify(s, undefined, 2))
201
-
202
- it("print", () => {
203
- expect(print(s)).toBe(
204
- `(
205
- something.id eq 1 AND (
206
- something.name startsWith a OR tag in a OR (
207
- name neq Alfredo AND tag eq c
208
- )
209
- ) AND bio contains abc AND isActive eq true AND age gte 12
210
- ) OR name startsWith C`
211
- )
212
- })
213
- it("cosmos", () => {
214
- const r = buildWhereCosmosQuery3(s, "MyEntity", "marker", { tag: "some" })
215
- expect(removeWhitespace(r.query)).toBe(removeWhitespace(` SELECT f
216
- FROM MyEntity f
217
-
218
- WHERE f.id != @id AND (
219
- f.something.id = @v0 AND (
220
- STARTSWITH(f.something.name, @v1, true) OR ARRAY_CONTAINS(@v2, (f.tag ?? "some")) OR (
221
- f.name <> @v3 AND (f.tag ?? "some") = @v4
222
- )
223
- ) AND CONTAINS(f.bio, @v5, true) AND f.isActive = @v6 AND f.age >= @v7
224
- ) OR STARTSWITH(f.name, @v8, true) `))
225
- expect(r.parameters).toEqual([
226
- {
227
- "name": "@id",
228
- "value": "marker"
229
- },
230
- {
231
- "name": "@v0",
232
- "value": 1
233
- },
234
- {
235
- "name": "@v1",
236
- "value": "a"
237
- },
238
- {
239
- "name": "@v2",
240
- "value": "a"
241
- },
242
- {
243
- "name": "@v3",
244
- "value": "Alfredo"
245
- },
246
- {
247
- "name": "@v4",
248
- "value": "c"
249
- },
250
- {
251
- "name": "@v5",
252
- "value": "abc"
253
- },
254
- {
255
- "name": "@v6",
256
- "value": true
257
- },
258
- {
259
- "name": "@v7",
260
- "value": 12
261
- },
262
- {
263
- "name": "@v8",
264
- "value": "C"
265
- }
266
- ])
267
- })
268
- })
@@ -1,37 +0,0 @@
1
- // packages/infra/vitest.config.ts
2
- import { defineConfig } from "file:///Users/patrickroza/pj/effect-app/libs/node_modules/.pnpm/vite@5.2.6_@types+node@20.11.30/node_modules/vite/dist/node/index.js";
3
-
4
- // vite.config.base.ts
5
- import path from "path";
6
- import fs from "fs";
7
- var __vite_injected_original_dirname = "/Users/patrickroza/pj/effect-app/libs";
8
- function makeConfig(dirName) {
9
- const prefix = path.resolve(__vite_injected_original_dirname, "packages");
10
- const packages = fs.readdirSync(prefix).map((f) => prefix + "/" + f).filter((f) => fs.lstatSync(f).isDirectory());
11
- const cfg = {
12
- // eslint-disable-next-line @typescript-eslint/no-var-requires
13
- //plugins: [autoImport],
14
- test: {
15
- include: ["./test/**/*.test.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
16
- reporters: "verbose",
17
- globals: true
18
- },
19
- resolve: {
20
- alias: packages.reduce((acc, cur) => {
21
- acc[JSON.parse(fs.readFileSync(cur + "/package.json", "utf-8")).name] = path.resolve(cur, cur.endsWith("core") ? "dist" : "src");
22
- return acc;
23
- }, {})
24
- // "@effect-app/core/Prelude": path.join(__dirname, "packages/core/src/Prelude.code.ts")
25
- }
26
- };
27
- console.log(cfg);
28
- return cfg;
29
- }
30
-
31
- // packages/infra/vitest.config.ts
32
- var __vite_injected_original_dirname2 = "/Users/patrickroza/pj/effect-app/libs/packages/infra";
33
- var vitest_config_default = defineConfig(makeConfig(__vite_injected_original_dirname2));
34
- export {
35
- vitest_config_default as default
36
- };
37
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsicGFja2FnZXMvaW5mcmEvdml0ZXN0LmNvbmZpZy50cyIsICJ2aXRlLmNvbmZpZy5iYXNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy9wYWNrYWdlcy9pbmZyYVwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy9wYWNrYWdlcy9pbmZyYS92aXRlc3QuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvcGFja2FnZXMvaW5mcmEvdml0ZXN0LmNvbmZpZy50c1wiOy8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidml0ZXN0XCIgLz5cbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJ2aXRlXCJcbmltcG9ydCBtYWtlQ29uZmlnIGZyb20gXCIuLi8uLi92aXRlLmNvbmZpZy5iYXNlXCJcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKG1ha2VDb25maWcoX19kaXJuYW1lKSlcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlic1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy92aXRlLmNvbmZpZy5iYXNlLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvdml0ZS5jb25maWcuYmFzZS50c1wiOy8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidml0ZXN0XCIgLz5cbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBmcyBmcm9tIFwiZnNcIlxuaW1wb3J0IEF1dG9JbXBvcnQgZnJvbSBcInVucGx1Z2luLWF1dG8taW1wb3J0L3ZpdGVcIlxuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcInZpdGVzdC9jb25maWdcIlxuXG4vLyBjb25zdCBhdXRvSW1wb3J0ID0gQXV0b0ltcG9ydCh7XG4vLyAgIGR0czogXCIuL3Rlc3QvYXV0by1pbXBvcnRzLmQudHNcIixcbi8vICAgLy8gaW5jbHVkZTogW1xuLy8gICAvLyAgIC9cXC50ZXN0XFwuW3RqXXN4PyQvIC8vIC50cywgLnRzeCwgLmpzLCAuanN4XG4vLyAgIC8vIF0sXG4vLyAgIGltcG9ydHM6IFtcbi8vICAgICBcInZpdGVzdFwiXG4vLyAgIF1cbi8vIH0pXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VDb25maWcoZGlyTmFtZT86IHN0cmluZykge1xuICBjb25zdCBwcmVmaXggPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBcInBhY2thZ2VzXCIpXG4gIGNvbnN0IHBhY2thZ2VzID0gZnMucmVhZGRpclN5bmMocHJlZml4KS5tYXAoZiA9PiBwcmVmaXggKyBcIi9cIiArIGYpLmZpbHRlcihmID0+IGZzLmxzdGF0U3luYyhmKS5pc0RpcmVjdG9yeSgpIClcbiAgY29uc3QgY2ZnID0ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgLy9wbHVnaW5zOiBbYXV0b0ltcG9ydF0sXG4gICAgdGVzdDoge1xuICAgICAgaW5jbHVkZTogIFtcIi4vdGVzdC8qKi8qLnRlc3Que2pzLG1qcyxjanMsdHMsbXRzLGN0cyxqc3gsdHN4fVwiXSxcbiAgICAgIHJlcG9ydGVyczogXCJ2ZXJib3NlXCIsXG4gICAgICBnbG9iYWxzOiB0cnVlXG4gICAgfSxcbiAgICByZXNvbHZlOiB7XG4gICAgICBhbGlhczogcGFja2FnZXMucmVkdWNlKChhY2MsIGN1cikgPT4geyAvLyB3b3JrYXJvdW5kIGZvciAvUHJlbHVkZSBpc3N1ZVxuICAgICAgYWNjW0pTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGN1ciArIFwiL3BhY2thZ2UuanNvblwiLCBcInV0Zi04XCIpKS5uYW1lXSA9IHBhdGgucmVzb2x2ZShjdXIsIGN1ci5lbmRzV2l0aChcImNvcmVcIikgPyBcImRpc3RcIiA6IFwic3JjXCIpXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSwgeyB9KSAvLyBcIkBlZmZlY3QtYXBwL2NvcmUvUHJlbHVkZVwiOiBwYXRoLmpvaW4oX19kaXJuYW1lLCBcInBhY2thZ2VzL2NvcmUvc3JjL1ByZWx1ZGUuY29kZS50c1wiKVxuICB9XG4gIH1cbiAgY29uc29sZS5sb2coY2ZnKVxuICByZXR1cm4gY2ZnXG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQ0EsU0FBUyxvQkFBb0I7OztBQ0E3QixPQUFPLFVBQVU7QUFDakIsT0FBTyxRQUFRO0FBRmYsSUFBTSxtQ0FBbUM7QUFnQjFCLFNBQVIsV0FBNEIsU0FBa0I7QUFDbkQsUUFBTSxTQUFTLEtBQUssUUFBUSxrQ0FBVyxVQUFVO0FBQ2pELFFBQU0sV0FBVyxHQUFHLFlBQVksTUFBTSxFQUFFLElBQUksT0FBSyxTQUFTLE1BQU0sQ0FBQyxFQUFFLE9BQU8sT0FBSyxHQUFHLFVBQVUsQ0FBQyxFQUFFLFlBQVksQ0FBRTtBQUM3RyxRQUFNLE1BQU07QUFBQTtBQUFBO0FBQUEsSUFHVixNQUFNO0FBQUEsTUFDSixTQUFVLENBQUMsa0RBQWtEO0FBQUEsTUFDN0QsV0FBVztBQUFBLE1BQ1gsU0FBUztBQUFBLElBQ1g7QUFBQSxJQUNBLFNBQVM7QUFBQSxNQUNQLE9BQU8sU0FBUyxPQUFPLENBQUMsS0FBSyxRQUFRO0FBQ3JDLFlBQUksS0FBSyxNQUFNLEdBQUcsYUFBYSxNQUFNLGlCQUFpQixPQUFPLENBQUMsRUFBRSxJQUFJLElBQUksS0FBSyxRQUFRLEtBQUssSUFBSSxTQUFTLE1BQU0sSUFBSSxTQUFTLEtBQUs7QUFDL0gsZUFBTztBQUFBLE1BQ1QsR0FBRyxDQUFFLENBQUM7QUFBQTtBQUFBLElBQ1I7QUFBQSxFQUNBO0FBQ0EsVUFBUSxJQUFJLEdBQUc7QUFDZixTQUFPO0FBQ1Q7OztBRHBDQSxJQUFNQSxvQ0FBbUM7QUFJekMsSUFBTyx3QkFBUSxhQUFhLFdBQVdDLGlDQUFTLENBQUM7IiwKICAibmFtZXMiOiBbIl9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lIiwgIl9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lIl0KfQo=