@effect-app/infra 0.63.1 → 0.65.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 (43) hide show
  1. package/.cache/effect/095519d034161945a8d2616a506d3e7f35a9b3d868814f44c747429c60fc4e7f.content +241 -0
  2. package/.cache/effect/095519d034161945a8d2616a506d3e7f35a9b3d868814f44c747429c60fc4e7f.hash +1 -0
  3. package/.cache/effect/1bfd92946b11da4292f2ed99dc0e322462b60559148f9524abc20e26f70779e1.content +86 -0
  4. package/.cache/effect/1bfd92946b11da4292f2ed99dc0e322462b60559148f9524abc20e26f70779e1.hash +1 -0
  5. package/.cache/effect/49c1bd9ec26e6df78b994d8df0bfe21b119803fa4aa46349bf4679fd0f1e7cda.content +47 -0
  6. package/.cache/effect/49c1bd9ec26e6df78b994d8df0bfe21b119803fa4aa46349bf4679fd0f1e7cda.hash +1 -0
  7. package/.cache/effect/58d4ccde8bd2db7829706db5bebd01b99900ee83f0f6a8413b53d17cbd69f510.content +70 -0
  8. package/.cache/effect/58d4ccde8bd2db7829706db5bebd01b99900ee83f0f6a8413b53d17cbd69f510.hash +1 -0
  9. package/.cache/effect/72a5a16a6b62b63cd71719c833091128207d7e6c823cb32293549b3dd58c451b.content +170 -0
  10. package/.cache/effect/72a5a16a6b62b63cd71719c833091128207d7e6c823cb32293549b3dd58c451b.hash +1 -0
  11. package/.cache/effect/7a9c33db6aedaf00093a132c1d4e48e9d043cef05e932b8a37da24d44e224248.content +57 -0
  12. package/.cache/effect/7a9c33db6aedaf00093a132c1d4e48e9d043cef05e932b8a37da24d44e224248.hash +1 -0
  13. package/.cache/effect/c67d971634d2dc8118b40452b61c9a51620c35809be4a89982476aa80701d852.content +11 -0
  14. package/.cache/effect/c67d971634d2dc8118b40452b61c9a51620c35809be4a89982476aa80701d852.hash +1 -0
  15. package/.cache/effect/f38adf43700dab905456a534a0690eaf882cff2cd576c731f23d6d14a3c3d659.content +360 -0
  16. package/.cache/effect/f38adf43700dab905456a534a0690eaf882cff2cd576c731f23d6d14a3c3d659.hash +1 -0
  17. package/CHANGELOG.md +20 -0
  18. package/_cjs/filter.cjs +25 -52
  19. package/_cjs/filter.cjs.map +1 -1
  20. package/_cjs/services/Store/Cosmos.cjs +36 -2
  21. package/_cjs/services/Store/Cosmos.cjs.map +1 -1
  22. package/_cjs/services/Store/codeFilter.test.cjs +6 -0
  23. package/_cjs/services/Store/codeFilter.test.cjs.map +1 -1
  24. package/_cjs/services/Store/service.cjs.map +1 -1
  25. package/_cjs/services/Store/utils.cjs +59 -5
  26. package/_cjs/services/Store/utils.cjs.map +1 -1
  27. package/_src/filter.ts +20 -46
  28. package/_src/services/Store/Cosmos.ts +43 -21
  29. package/_src/services/Store/codeFilter.test.ts +54 -0
  30. package/_src/services/Store/service.ts +1 -0
  31. package/_src/services/Store/utils.ts +64 -42
  32. package/dist/filter.d.ts +9 -13
  33. package/dist/filter.d.ts.map +1 -1
  34. package/dist/filter.js +22 -38
  35. package/dist/services/Repository.d.ts +14 -14
  36. package/dist/services/Store/Cosmos.d.ts.map +1 -1
  37. package/dist/services/Store/Cosmos.js +41 -21
  38. package/dist/services/Store/service.d.ts +4 -0
  39. package/dist/services/Store/service.d.ts.map +1 -1
  40. package/dist/services/Store/service.js +1 -1
  41. package/dist/services/Store/utils.d.ts.map +1 -1
  42. package/dist/services/Store/utils.js +65 -39
  43. package/package.json +5 -5
@@ -0,0 +1,170 @@
1
+ import * as tsplus_module_1 from "@effect-app/prelude/_ext/misc";
2
+ import * as tsplus_module_2 from "@effect/data/Option";
3
+ import * as tsplus_module_3 from "@effect/io/Effect";
4
+ import * as tsplus_module_4 from "@effect-app/core/Option";
5
+ import * as tsplus_module_5 from "@effect/data/ReadonlyArray";
6
+ import { get } from "@effect-app/prelude/utils";
7
+ import { OptimisticConcurrencyException } from "../../errors.js";
8
+ import objectHash from "object-hash";
9
+ export const makeETag = ({ _etag, ...e }) => ({
10
+ ...e,
11
+ _etag: objectHash(e)
12
+ });
13
+ export const makeUpdateETag = (name) => (e, current) => tsplus_module_3.gen(function* ($) {
14
+ if (e._etag) {
15
+ yield* $(tsplus_module_1.encaseMaybeInEffect_(current, () => new OptimisticConcurrencyException(name, e.id, "", e._etag)));
16
+ }
17
+ if (tsplus_module_2.isSome(current) && current.value._etag !== e._etag) {
18
+ return yield* $(tsplus_module_3.fail(new OptimisticConcurrencyException(name, current.value.id, current.value._etag, e._etag)));
19
+ }
20
+ const newE = makeETag(e);
21
+ return newE;
22
+ });
23
+ export function codeFilter(filter) {
24
+ return (x) => filter.type === "startsWith"
25
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
+ ? lowercaseIfString(x[filter.by]).startsWith(filter.value.toLowerCase())
27
+ ? tsplus_module_2.some(x)
28
+ : tsplus_module_4.none
29
+ : filter.type === "endsWith"
30
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
31
+ ? lowercaseIfString(x[filter.by]).endsWith(filter.value.toLowerCase())
32
+ ? tsplus_module_2.some(x)
33
+ : tsplus_module_4.none
34
+ : filter.type === "contains"
35
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
36
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
37
+ ? lowercaseIfString(x[filter.by]).includes(filter.value.toLowerCase())
38
+ ? tsplus_module_2.some(x)
39
+ : tsplus_module_4.none
40
+ : filter.type === "join_find"
41
+ ? filter.keys.some((k) => {
42
+ const value = get(x, k);
43
+ // we mimic the behavior of cosmosdb; if the shape in db does not match what we're looking for, we imagine false hit
44
+ return (value
45
+ && value.some((v) => compareCaseInsensitive(v[filter.valueKey], filter.value)));
46
+ })
47
+ ? tsplus_module_2.some(x)
48
+ : tsplus_module_4.none
49
+ // TODO: support mixed or/and
50
+ : filter.mode === "or"
51
+ ? filter
52
+ .where
53
+ .some((p) => {
54
+ const k = get(x, p.key);
55
+ switch (p.t) {
56
+ case "in":
57
+ return p.value.includes(k);
58
+ case "not-in":
59
+ return !p.value.includes(k);
60
+ case "lt":
61
+ return ltCaseInsensitive(k, p.value);
62
+ case "lte":
63
+ return lteCaseInsensitive(k, p.value);
64
+ case "gt":
65
+ return gtCaseInsensitive(k, p.value);
66
+ case "gte":
67
+ return gteCaseInsensitive(k, p.value);
68
+ case "contains":
69
+ return k.toLowerCase().includes(p.value.toLowerCase());
70
+ case "ends-with":
71
+ return k.toLowerCase().endsWith(p.value.toLowerCase());
72
+ case "starts-with":
73
+ return k.toLowerCase().startsWith(p.value.toLowerCase());
74
+ case "not-eq":
75
+ return !compareCaseInsensitive(k, p.value);
76
+ case "eq":
77
+ case undefined:
78
+ return compareCaseInsensitive(k, p.value);
79
+ }
80
+ })
81
+ ? tsplus_module_2.some(x)
82
+ : tsplus_module_4.none
83
+ : filter
84
+ .where
85
+ .every((p) => {
86
+ const k = get(x, p.key);
87
+ switch (p.t) {
88
+ case "in":
89
+ return p.value.includes(k);
90
+ case "not-in":
91
+ return !p.value.includes(k);
92
+ case "lt":
93
+ return ltCaseInsensitive(k, p.value);
94
+ case "lte":
95
+ return lteCaseInsensitive(k, p.value);
96
+ case "gt":
97
+ return gtCaseInsensitive(k, p.value);
98
+ case "gte":
99
+ return gteCaseInsensitive(k, p.value);
100
+ case "contains":
101
+ return k.toLowerCase().includes(p.value.toLowerCase());
102
+ case "ends-with":
103
+ return k.toLowerCase().endsWith(p.value.toLowerCase());
104
+ case "starts-with":
105
+ return k.toLowerCase().startsWith(p.value.toLowerCase());
106
+ case "not-eq":
107
+ return p.key.includes(".-1.")
108
+ ? get(x, p.key.split(".-1.")[0])
109
+ // TODO: or vs and
110
+ .every((_) => !compareCaseInsensitive(get(_, p.key.split(".-1.")[1]), p.value))
111
+ : !compareCaseInsensitive(k, p.value);
112
+ case "eq":
113
+ case undefined:
114
+ return p.key.includes(".-1.")
115
+ ? get(x, p.key.split(".-1.")[0])
116
+ // TODO: or vs and
117
+ .some((_) => compareCaseInsensitive(get(_, p.key.split(".-1.")[1]), p.value))
118
+ : compareCaseInsensitive(k, p.value);
119
+ }
120
+ })
121
+ ? tsplus_module_2.some(x)
122
+ : tsplus_module_4.none;
123
+ }
124
+ export function codeFilterJoinSelect(filter) {
125
+ return (x) => tsplus_module_5.filterMap(filter
126
+ .keys, (k) => {
127
+ const value = get(x, k);
128
+ // we mimic the behavior of cosmosdb; if the shape in db does not match what we're looking for, we imagine false hit
129
+ return value
130
+ ? tsplus_module_2.some(tsplus_module_5.filterMap(value, (v) =>
131
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
132
+ compareCaseInsensitive(v[filter.valueKey], filter.value)
133
+ ? tsplus_module_2.some({ ...v, _rootId: x.id })
134
+ : tsplus_module_4.none))
135
+ : tsplus_module_4.none;
136
+ })
137
+ .flatMap((_) => _);
138
+ }
139
+ function lowercaseIfString(val) {
140
+ if (typeof val === "string") {
141
+ return val.toLowerCase();
142
+ }
143
+ return val;
144
+ }
145
+ function compareCaseInsensitive(valA, valB) {
146
+ return typeof valB === "string" && typeof valA === "string"
147
+ ? valA.toLowerCase() === valB.toLowerCase()
148
+ : valA === valB;
149
+ }
150
+ function ltCaseInsensitive(valA, valB) {
151
+ return typeof valB === "string" && typeof valA === "string"
152
+ ? valA.toLowerCase() < valB.toLowerCase()
153
+ : valA < valB;
154
+ }
155
+ function lteCaseInsensitive(valA, valB) {
156
+ return typeof valB === "string" && typeof valA === "string"
157
+ ? valA.toLowerCase() <= valB.toLowerCase()
158
+ : valA <= valB;
159
+ }
160
+ function gtCaseInsensitive(valA, valB) {
161
+ return typeof valB === "string" && typeof valA === "string"
162
+ ? valA.toLowerCase() > valB.toLowerCase()
163
+ : valA > valB;
164
+ }
165
+ function gteCaseInsensitive(valA, valB) {
166
+ return typeof valB === "string" && typeof valA === "string"
167
+ ? valA.toLowerCase() >= valB.toLowerCase()
168
+ : valA >= valB;
169
+ }
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL3NlcnZpY2VzL1N0b3JlL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBRS9DLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBSWhFLE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQTtBQUVwQyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FDdEIsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUssRUFDZixFQUFFLENBQ0wsQ0FBQztJQUNDLEdBQUcsQ0FBQztJQUNKLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0NBQ3JCLENBQVEsQ0FBQTtBQUNYLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FDekIsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLENBQXdELENBQUksRUFBRSxPQUFrQixFQUFFLEVBQUUsQ0FDcEcsb0JBQVcsUUFBUSxDQUFDLEVBQUMsQ0FBQztJQUNwQixJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7UUFDWCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ04scUNBQUEsT0FBTyxFQUNXLEdBQUcsRUFBRSxDQUFDLElBQUksOEJBQThCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUNyRixDQUFBO0tBQ0Y7SUFDRCxJQUFJLHVCQUFBLE9BQU8sQ0FBUyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUU7UUFDdkQsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ2IscUJBQVksSUFBSSw4QkFBOEIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLEtB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QUFDLFdBQVcsRUFBRTtRQUN6QyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtBQUNqQixDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxJQUFzQixFQUFFLElBQXNCO0lBQ3hFLE9BQU8sT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7UUFDekQsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1FBQzFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFBO0FBQ2xCLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLElBQXNCLEVBQUUsSUFBc0I7SUFDdkUsT0FBTyxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtRQUN6RCxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUU7UUFDekMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7QUFDakIsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsSUFBc0IsRUFBRSxJQUFzQjtJQUN4RSxPQUFPLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1FBQ3pELENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtRQUMxQyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQTtBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0IH0gZnJvbSBcIkBlZmZlY3QtYXBwL3ByZWx1ZGUvdXRpbHNcIlxuXG5pbXBvcnQgeyBPcHRpbWlzdGljQ29uY3VycmVuY3lFeGNlcHRpb24gfSBmcm9tIFwiLi4vLi4vZXJyb3JzLmpzXCJcblxuaW1wb3J0IHR5cGUgeyBGaWx0ZXIsIEZpbHRlckpvaW5TZWxlY3QsIFBlcnNpc3RlbmNlTW9kZWxUeXBlLCBTdXBwb3J0ZWRWYWx1ZXMyIH0gZnJvbSBcIi4vc2VydmljZS5qc1wiXG5cbmltcG9ydCBvYmplY3RIYXNoIGZyb20gXCJvYmplY3QtaGFzaFwiXG5cbmV4cG9ydCBjb25zdCBtYWtlRVRhZyA9IDxFIGV4dGVuZHMgUGVyc2lzdGVuY2VNb2RlbFR5cGU8SWQ+LCBJZCBleHRlbmRzIHN0cmluZz4oXG4gIHsgX2V0YWcsIC4uLmUgfTogRVxuKTogRSA9PlxuICAoe1xuICAgIC4uLmUsXG4gICAgX2V0YWc6IG9iamVjdEhhc2goZSlcbiAgfSkgYXMgYW55XG5leHBvcnQgY29uc3QgbWFrZVVwZGF0ZUVUYWcgPVxuICAobmFtZTogc3RyaW5nKSA9PiA8RSBleHRlbmRzIFBlcnNpc3RlbmNlTW9kZWxUeXBlPElkPiwgSWQgZXh0ZW5kcyBzdHJpbmc+KGU6IEUsIGN1cnJlbnQ6IE9wdGlvbjxFPikgPT5cbiAgICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKigkKSB7XG4gICAgICBpZiAoZS5fZXRhZykge1xuICAgICAgICB5aWVsZCogJChcbiAgICAgICAgICBjdXJyZW50XG4gICAgICAgICAgICAuZW5jYXNlSW5FZmZlY3QoKCkgPT4gbmV3IE9wdGltaXN0aWNDb25jdXJyZW5jeUV4Y2VwdGlvbihuYW1lLCBlLmlkLCBcIlwiLCBlLl9ldGFnKSlcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnQuaXNTb21lKCkgJiYgY3VycmVudC52YWx1ZS5fZXRhZyAhPT0gZS5fZXRhZykge1xuICAgICAgICByZXR1cm4geWllbGQqICQoXG4gICAgICAgICAgRWZmZWN0LmZhaWwobmV3IE9wdGltaXN0aWNDb25jdXJyZW5jeUV4Y2VwdGlvbihuYW1lLCBjdXJyZW50LnZhbHVlLmlkLCBjdXJyZW50LnZhbHVlLl9ldGFnLCBlLl9ldGFnKSlcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgY29uc3QgbmV3RSA9IG1ha2VFVGFnKGUpXG4gICAgICByZXR1cm4gbmV3RVxuICAgIH0pXG5cbmV4cG9ydCBmdW5jdGlvbiBjb2RlRmlsdGVyPEUgZXh0ZW5kcyB7IGlkOiBzdHJpbmcgfSwgTkUgZXh0ZW5kcyBFPihmaWx0ZXI6IEZpbHRlcjxORT4pIHtcbiAgcmV0dXJuICh4OiBFKSA9PlxuICAgIGZpbHRlci50eXBlID09PSBcInN0YXJ0c1dpdGhcIlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgID8gbG93ZXJjYXNlSWZTdHJpbmcoKHggYXMgYW55KVtmaWx0ZXIuYnldKS5zdGFydHNXaXRoKGZpbHRlci52YWx1ZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICA/IE9wdGlvbih4IGFzIHVua25vd24gYXMgTkUpXG4gICAgICAgIDogT3B0aW9uLm5vbmVcbiAgICAgIDogZmlsdGVyLnR5cGUgPT09IFwiZW5kc1dpdGhcIlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgID8gbG93ZXJjYXNlSWZTdHJpbmcoKHggYXMgYW55KVtmaWx0ZXIuYnldKS5lbmRzV2l0aChmaWx0ZXIudmFsdWUudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgPyBPcHRpb24oeCBhcyB1bmtub3duIGFzIE5FKVxuICAgICAgICA6IE9wdGlvbi5ub25lXG4gICAgICA6IGZpbHRlci50eXBlID09PSBcImNvbnRhaW5zXCJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsXG4gICAgICA/IGxvd2VyY2FzZUlmU3RyaW5nKCh4IGFzIGFueSlbZmlsdGVyLmJ5XSkuaW5jbHVkZXMoZmlsdGVyLnZhbHVlLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgID8gT3B0aW9uKHggYXMgdW5rbm93biBhcyBORSlcbiAgICAgICAgOiBPcHRpb24ubm9uZVxuICAgICAgOiBmaWx0ZXIudHlwZSA9PT0gXCJqb2luX2ZpbmRcIlxuICAgICAgPyBmaWx0ZXIua2V5cy5zb21lKChrKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXQoeCwgaykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXVxuICAgICAgICAgIC8vIHdlIG1pbWljIHRoZSBiZWhhdmlvciBvZiBjb3Ntb3NkYjsgaWYgdGhlIHNoYXBlIGluIGRiIGRvZXMgbm90IG1hdGNoIHdoYXQgd2UncmUgbG9va2luZyBmb3IsIHdlIGltYWdpbmUgZmFsc2UgaGl0XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAmJiB2YWx1ZS5zb21lKCh2KSA9PiBjb21wYXJlQ2FzZUluc2Vuc2l0aXZlKHZbZmlsdGVyLnZhbHVlS2V5XSwgZmlsdGVyLnZhbHVlKSlcbiAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICAgID8gT3B0aW9uKHggYXMgdW5rbm93biBhcyBORSlcbiAgICAgICAgOiBPcHRpb24ubm9uZVxuICAgICAgLy8gVE9ETzogc3VwcG9ydCBtaXhlZCBvci9hbmRcbiAgICAgIDogZmlsdGVyLm1vZGUgPT09IFwib3JcIlxuICAgICAgPyBmaWx0ZXJcbiAgICAgICAgICAud2hlcmVcbiAgICAgICAgICAuc29tZSgocCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgayA9IGdldCh4LCBwLmtleSlcbiAgICAgICAgICAgIHN3aXRjaCAocC50KSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJpblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBwLnZhbHVlLmluY2x1ZGVzKGspXG4gICAgICAgICAgICAgIGNhc2UgXCJub3QtaW5cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gIXAudmFsdWUuaW5jbHVkZXMoaylcbiAgICAgICAgICAgICAgY2FzZSBcImx0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGx0Q2FzZUluc2Vuc2l0aXZlKGssIHAudmFsdWUpXG4gICAgICAgICAgICAgIGNhc2UgXCJsdGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbHRlQ2FzZUluc2Vuc2l0aXZlKGssIHAudmFsdWUpXG4gICAgICAgICAgICAgIGNhc2UgXCJndFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBndENhc2VJbnNlbnNpdGl2ZShrLCBwLnZhbHVlKVxuICAgICAgICAgICAgICBjYXNlIFwiZ3RlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGd0ZUNhc2VJbnNlbnNpdGl2ZShrLCBwLnZhbHVlKVxuICAgICAgICAgICAgICBjYXNlIFwiY29udGFpbnNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gKGsgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKChwLnZhbHVlIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgY2FzZSBcImVuZHMtd2l0aFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAoayBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoKHAudmFsdWUgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgICBjYXNlIFwic3RhcnRzLXdpdGhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gKGsgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoKHAudmFsdWUgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgICBjYXNlIFwibm90LWVxXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuICFjb21wYXJlQ2FzZUluc2Vuc2l0aXZlKGssIHAudmFsdWUpXG4gICAgICAgICAgICAgIGNhc2UgXCJlcVwiOlxuICAgICAgICAgICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZUNhc2VJbnNlbnNpdGl2ZShrLCBwLnZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgID8gT3B0aW9uKHggYXMgdW5rbm93biBhcyBORSlcbiAgICAgICAgOiBPcHRpb24ubm9uZVxuICAgICAgOiBmaWx0ZXJcbiAgICAgICAgICAud2hlcmVcbiAgICAgICAgICAuZXZlcnkoKHApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGsgPSBnZXQoeCwgcC5rZXkpXG4gICAgICAgICAgICBzd2l0Y2ggKHAudCkge1xuICAgICAgICAgICAgICBjYXNlIFwiaW5cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcC52YWx1ZS5pbmNsdWRlcyhrKVxuICAgICAgICAgICAgICBjYXNlIFwibm90LWluXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuICFwLnZhbHVlLmluY2x1ZGVzKGspXG4gICAgICAgICAgICAgIGNhc2UgXCJsdFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBsdENhc2VJbnNlbnNpdGl2ZShrLCBwLnZhbHVlKVxuICAgICAgICAgICAgICBjYXNlIFwibHRlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGx0ZUNhc2VJbnNlbnNpdGl2ZShrLCBwLnZhbHVlKVxuICAgICAgICAgICAgICBjYXNlIFwiZ3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZ3RDYXNlSW5zZW5zaXRpdmUoaywgcC52YWx1ZSlcbiAgICAgICAgICAgICAgY2FzZSBcImd0ZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBndGVDYXNlSW5zZW5zaXRpdmUoaywgcC52YWx1ZSlcbiAgICAgICAgICAgICAgY2FzZSBcImNvbnRhaW5zXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChrIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygocC52YWx1ZSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICAgIGNhc2UgXCJlbmRzLXdpdGhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gKGsgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKChwLnZhbHVlIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgY2FzZSBcInN0YXJ0cy13aXRoXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChrIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKChwLnZhbHVlIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgY2FzZSBcIm5vdC1lcVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBwLmtleS5pbmNsdWRlcyhcIi4tMS5cIilcbiAgICAgICAgICAgICAgICAgID8gKGdldCh4LCBwLmtleS5zcGxpdChcIi4tMS5cIilbMF0pIGFzIGFueVtdKVxuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBvciB2cyBhbmRcbiAgICAgICAgICAgICAgICAgICAgLmV2ZXJ5KChfKSA9PiAhY29tcGFyZUNhc2VJbnNlbnNpdGl2ZShnZXQoXywgcC5rZXkuc3BsaXQoXCIuLTEuXCIpWzFdISksIHAudmFsdWUpKVxuICAgICAgICAgICAgICAgICAgOiAhY29tcGFyZUNhc2VJbnNlbnNpdGl2ZShrLCBwLnZhbHVlKVxuICAgICAgICAgICAgICBjYXNlIFwiZXFcIjpcbiAgICAgICAgICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHAua2V5LmluY2x1ZGVzKFwiLi0xLlwiKVxuICAgICAgICAgICAgICAgICAgPyAoZ2V0KHgsIHAua2V5LnNwbGl0KFwiLi0xLlwiKVswXSkgYXMgYW55W10pXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IG9yIHZzIGFuZFxuICAgICAgICAgICAgICAgICAgICAuc29tZSgoXykgPT4gY29tcGFyZUNhc2VJbnNlbnNpdGl2ZShnZXQoXywgcC5rZXkuc3BsaXQoXCIuLTEuXCIpWzFdISksIHAudmFsdWUpKVxuICAgICAgICAgICAgICAgICAgOiBjb21wYXJlQ2FzZUluc2Vuc2l0aXZlKGssIHAudmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgID8gT3B0aW9uKHggYXMgdW5rbm93biBhcyBORSlcbiAgICAgIDogT3B0aW9uLm5vbmVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvZGVGaWx0ZXJKb2luU2VsZWN0PEUgZXh0ZW5kcyB7IGlkOiBzdHJpbmcgfSwgTkU+KFxuICBmaWx0ZXI6IEZpbHRlckpvaW5TZWxlY3Rcbikge1xuICByZXR1cm4gKHg6IEUpID0+XG4gICAgZmlsdGVyXG4gICAgICAua2V5c1xuICAgICAgLmZpbHRlck1hcCgoaykgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGdldCh4LCBrKVxuICAgICAgICAvLyB3ZSBtaW1pYyB0aGUgYmVoYXZpb3Igb2YgY29zbW9zZGI7IGlmIHRoZSBzaGFwZSBpbiBkYiBkb2VzIG5vdCBtYXRjaCB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9yLCB3ZSBpbWFnaW5lIGZhbHNlIGhpdFxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICA/IE9wdGlvbihcbiAgICAgICAgICAgICh2YWx1ZSBhcyByZWFkb25seSBORVtdKS5maWx0ZXJNYXAoKHYpID0+XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICAgIGNvbXBhcmVDYXNlSW5zZW5zaXRpdmUoKHYgYXMgYW55KVtmaWx0ZXIudmFsdWVLZXldLCBmaWx0ZXIudmFsdWUpXG4gICAgICAgICAgICAgICAgPyBPcHRpb24oeyAuLi52LCBfcm9vdElkOiB4LmlkIH0pXG4gICAgICAgICAgICAgICAgOiBPcHRpb24ubm9uZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICA6IE9wdGlvbi5ub25lXG4gICAgICB9KVxuICAgICAgLmZsYXRNYXAoKF8pID0+IF8pXG59XG5cbmZ1bmN0aW9uIGxvd2VyY2FzZUlmU3RyaW5nPFQ+KHZhbDogVCkge1xuICBpZiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB2YWwudG9Mb3dlckNhc2UoKVxuICB9XG4gIHJldHVybiB2YWxcbn1cblxuZnVuY3Rpb24gY29tcGFyZUNhc2VJbnNlbnNpdGl2ZSh2YWxBOiB1bmtub3duLCB2YWxCOiB1bmtub3duKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsQiA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgdmFsQSA9PT0gXCJzdHJpbmdcIlxuICAgID8gdmFsQS50b0xvd2VyQ2FzZSgpID09PSB2YWxCLnRvTG93ZXJDYXNlKClcbiAgICA6IHZhbEEgPT09IHZhbEJcbn1cblxuZnVuY3Rpb24gbHRDYXNlSW5zZW5zaXRpdmUodmFsQTogU3VwcG9ydGVkVmFsdWVzMiwgdmFsQjogU3VwcG9ydGVkVmFsdWVzMikge1xuICByZXR1cm4gdHlwZW9mIHZhbEIgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHZhbEEgPT09IFwic3RyaW5nXCJcbiAgICA/IHZhbEEudG9Mb3dlckNhc2UoKSA8IHZhbEIudG9Mb3dlckNhc2UoKVxuICAgIDogdmFsQSA8IHZhbEJcbn1cblxuZnVuY3Rpb24gbHRlQ2FzZUluc2Vuc2l0aXZlKHZhbEE6IFN1cHBvcnRlZFZhbHVlczIsIHZhbEI6IFN1cHBvcnRlZFZhbHVlczIpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWxCID09PSBcInN0cmluZ1wiICYmIHR5cGVvZiB2YWxBID09PSBcInN0cmluZ1wiXG4gICAgPyB2YWxBLnRvTG93ZXJDYXNlKCkgPD0gdmFsQi50b0xvd2VyQ2FzZSgpXG4gICAgOiB2YWxBIDw9IHZhbEJcbn1cblxuZnVuY3Rpb24gZ3RDYXNlSW5zZW5zaXRpdmUodmFsQTogU3VwcG9ydGVkVmFsdWVzMiwgdmFsQjogU3VwcG9ydGVkVmFsdWVzMikge1xuICByZXR1cm4gdHlwZW9mIHZhbEIgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHZhbEEgPT09IFwic3RyaW5nXCJcbiAgICA/IHZhbEEudG9Mb3dlckNhc2UoKSA+IHZhbEIudG9Mb3dlckNhc2UoKVxuICAgIDogdmFsQSA+IHZhbEJcbn1cblxuZnVuY3Rpb24gZ3RlQ2FzZUluc2Vuc2l0aXZlKHZhbEE6IFN1cHBvcnRlZFZhbHVlczIsIHZhbEI6IFN1cHBvcnRlZFZhbHVlczIpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWxCID09PSBcInN0cmluZ1wiICYmIHR5cGVvZiB2YWxBID09PSBcInN0cmluZ1wiXG4gICAgPyB2YWxBLnRvTG93ZXJDYXNlKCkgPj0gdmFsQi50b0xvd2VyQ2FzZSgpXG4gICAgOiB2YWxBID49IHZhbEJcbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ 84a172eae432ab308b0da7a1450443906102c34d10c90afdf2a73f756cf96a30
@@ -0,0 +1,57 @@
1
+ import * as tsplus_module_1 from "@effect-app/infra/filter";
2
+ import { makeFilters } from "../../filter.js";
3
+ import { buildWhereCosmosQuery } from "./Cosmos.js";
4
+ const f_ = makeFilters();
5
+ export function makeSomethingFilter_(filter) {
6
+ return filter(f_);
7
+ }
8
+ export function somethingsWhere(makeWhere, mode) {
9
+ return makeSomethingFilter_((f) => {
10
+ const m = makeWhere ? makeWhere(f) : [];
11
+ return ({
12
+ mode,
13
+ where: (Array.isArray(m) ? m : [m])
14
+ });
15
+ });
16
+ }
17
+ test("works", () => {
18
+ expect(buildWhereCosmosQuery(somethingsWhere((_) => _("b", (_) => "b2")), "Somethings", "importedMarkerId", undefined, 10))
19
+ .toEqual({
20
+ "parameters": [
21
+ {
22
+ "name": "@id",
23
+ "value": "importedMarkerId"
24
+ },
25
+ {
26
+ "name": "@v0",
27
+ "value": "b2"
28
+ }
29
+ ],
30
+ "query": `
31
+ SELECT f
32
+ FROM Somethings AS f
33
+
34
+ WHERE f.id != @id AND LOWER(f.b) = LOWER(@v0)
35
+ OFFSET 0 LIMIT 10`
36
+ });
37
+ expect(buildWhereCosmosQuery(somethingsWhere((_) => _("d.-1.a", (_) => tsplus_module_1.$isnt(_, "a2"))), "Somethings", "importedMarkerId", undefined, 10))
38
+ .toEqual({
39
+ "parameters": [
40
+ {
41
+ "name": "@id",
42
+ "value": "importedMarkerId"
43
+ },
44
+ {
45
+ "name": "@v0",
46
+ "value": "a2"
47
+ }
48
+ ],
49
+ "query": `
50
+ SELECT f
51
+ FROM Somethings AS f
52
+ JOIN d IN f.d
53
+ WHERE f.id != @id AND LOWER(d.a) <> LOWER(@v0)
54
+ OFFSET 0 LIMIT 10`
55
+ });
56
+ });
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29zbW9zLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL3NlcnZpY2VzL1N0b3JlL0Nvc21vcy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRW5ELE1BQU0sRUFBRSxHQUFHLFdBQVcsRUFBYSxDQUFBO0FBR25DLE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxNQUFxRDtJQUN4RixPQUFPLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUNuQixDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsU0FFZ0MsRUFDaEMsSUFBbUI7SUFFbkIsT0FBTyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ2hDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDdkMsT0FBTyxDQUFDO1lBQ04sSUFBSTtZQUNKLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQW1DLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWlDO1NBQ3RHLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQWVELElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO0lBQ2pCLE1BQU0sQ0FBQyxxQkFBcUIsQ0FDMUIsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUMzQyxZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLFNBQVMsRUFDVCxFQUFFLENBQ0gsQ0FBQztTQUNDLE9BQU8sQ0FBQztRQUNQLFlBQVksRUFBRTtZQUNaO2dCQUNFLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE9BQU8sRUFBRSxrQkFBa0I7YUFDNUI7WUFDRDtnQkFDRSxNQUFNLEVBQUUsS0FBSztnQkFDYixPQUFPLEVBQUUsSUFBSTthQUNkO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7Ozs7O3NCQUtPO0tBQ2pCLENBQUMsQ0FBQTtJQUVKLE1BQU0sQ0FBQyxxQkFBcUIsQ0FDMUIsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxzQkFBQSxDQUFDLEVBQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUN6RCxZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLFNBQVMsRUFDVCxFQUFFLENBQ0gsQ0FBQztTQUNDLE9BQU8sQ0FBQztRQUNQLFlBQVksRUFBRTtZQUNaO2dCQUNFLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE9BQU8sRUFBRSxrQkFBa0I7YUFDNUI7WUFDRDtnQkFDRSxNQUFNLEVBQUUsS0FBSztnQkFDYixPQUFPLEVBQUUsSUFBSTthQUNkO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7Ozs7O3NCQUtPO0tBQ2pCLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTdG9yZVdoZXJlRmlsdGVyLCBXaGVyZSB9IGZyb20gXCJAZWZmZWN0LWFwcC9pbmZyYS9zZXJ2aWNlcy9TdG9yZVwiXG5pbXBvcnQgeyBtYWtlRmlsdGVycyB9IGZyb20gXCIuLi8uLi9maWx0ZXIuanNcIlxuaW1wb3J0IHsgYnVpbGRXaGVyZUNvc21vc1F1ZXJ5IH0gZnJvbSBcIi4vQ29zbW9zLmpzXCJcblxuY29uc3QgZl8gPSBtYWtlRmlsdGVyczxTb21ldGhpbmc+KClcbmV4cG9ydCB0eXBlIFNvbWV0aGluZ1doZXJlRmlsdGVyID0gdHlwZW9mIGZfXG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlU29tZXRoaW5nRmlsdGVyXyhmaWx0ZXI6IChmOiBTb21ldGhpbmdXaGVyZUZpbHRlcikgPT4gU3RvcmVXaGVyZUZpbHRlcikge1xuICByZXR1cm4gZmlsdGVyKGZfKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZXRoaW5nc1doZXJlKFxuICBtYWtlV2hlcmU6IChcbiAgICBmOiBTb21ldGhpbmdXaGVyZUZpbHRlclxuICApID0+IFdoZXJlIHwgW1doZXJlLCAuLi5XaGVyZVtdXSxcbiAgbW9kZT86IFwib3JcIiB8IFwiYW5kXCJcbikge1xuICByZXR1cm4gbWFrZVNvbWV0aGluZ0ZpbHRlcl8oKGYpID0+IHtcbiAgICBjb25zdCBtID0gbWFrZVdoZXJlID8gbWFrZVdoZXJlKGYpIDogW11cbiAgICByZXR1cm4gKHtcbiAgICAgIG1vZGUsXG4gICAgICB3aGVyZTogKEFycmF5LmlzQXJyYXkobSkgPyBtIGFzIHVua25vd24gYXMgW1doZXJlLCAuLi5XaGVyZVtdXSA6IFttXSkgYXMgcmVhZG9ubHkgW1doZXJlLCAuLi5XaGVyZVtdXVxuICAgIH0pXG4gIH0pXG59XG5cbnR5cGUgU29tZXRoaW5nRWxzZSA9IHtcbiAgYTogc3RyaW5nXG4gIGI6IG51bWJlclxufVxuXG50eXBlIFNvbWV0aGluZyA9IHtcbiAgYTogbnVtYmVyXG4gIGlkOiBzdHJpbmdcbiAgYjogc3RyaW5nXG4gIGM6IHJlYWRvbmx5IHN0cmluZ1tdXG4gIGQ6IHJlYWRvbmx5IFNvbWV0aGluZ0Vsc2VbXVxufVxuXG50ZXN0KFwid29ya3NcIiwgKCkgPT4ge1xuICBleHBlY3QoYnVpbGRXaGVyZUNvc21vc1F1ZXJ5KFxuICAgIHNvbWV0aGluZ3NXaGVyZSgoXykgPT4gXyhcImJcIiwgKF8pID0+IFwiYjJcIikpLFxuICAgIFwiU29tZXRoaW5nc1wiLFxuICAgIFwiaW1wb3J0ZWRNYXJrZXJJZFwiLFxuICAgIHVuZGVmaW5lZCxcbiAgICAxMFxuICApKVxuICAgIC50b0VxdWFsKHtcbiAgICAgIFwicGFyYW1ldGVyc1wiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBcIm5hbWVcIjogXCJAaWRcIixcbiAgICAgICAgICBcInZhbHVlXCI6IFwiaW1wb3J0ZWRNYXJrZXJJZFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIm5hbWVcIjogXCJAdjBcIixcbiAgICAgICAgICBcInZhbHVlXCI6IFwiYjJcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgXCJxdWVyeVwiOiBgXG4gICAgU0VMRUNUIGZcbiAgICBGUk9NIFNvbWV0aGluZ3MgQVMgZlxuICAgIFxuICAgIFdIRVJFIGYuaWQgIT0gQGlkIEFORCBMT1dFUihmLmIpID0gTE9XRVIoQHYwKVxuICAgIE9GRlNFVCAwIExJTUlUIDEwYFxuICAgIH0pXG5cbiAgZXhwZWN0KGJ1aWxkV2hlcmVDb3Ntb3NRdWVyeShcbiAgICBzb21ldGhpbmdzV2hlcmUoKF8pID0+IF8oXCJkLi0xLmFcIiwgKF8pID0+IF8uJGlzbnQoXCJhMlwiKSkpLFxuICAgIFwiU29tZXRoaW5nc1wiLFxuICAgIFwiaW1wb3J0ZWRNYXJrZXJJZFwiLFxuICAgIHVuZGVmaW5lZCxcbiAgICAxMFxuICApKVxuICAgIC50b0VxdWFsKHtcbiAgICAgIFwicGFyYW1ldGVyc1wiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBcIm5hbWVcIjogXCJAaWRcIixcbiAgICAgICAgICBcInZhbHVlXCI6IFwiaW1wb3J0ZWRNYXJrZXJJZFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIm5hbWVcIjogXCJAdjBcIixcbiAgICAgICAgICBcInZhbHVlXCI6IFwiYTJcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgXCJxdWVyeVwiOiBgXG4gICAgU0VMRUNUIGZcbiAgICBGUk9NIFNvbWV0aGluZ3MgQVMgZlxuICAgIEpPSU4gZCBJTiBmLmRcbiAgICBXSEVSRSBmLmlkICE9IEBpZCBBTkQgTE9XRVIoZC5hKSA8PiBMT1dFUihAdjApXG4gICAgT0ZGU0VUIDAgTElNSVQgMTBgXG4gICAgfSlcbn0pXG4iXX0=
@@ -0,0 +1 @@
1
+ 4e41249ba004a7c0dc89e9306f2fcedc66585f6a43cff02e094f0d73d723bf8d
@@ -0,0 +1,11 @@
1
+ import * as tsplus_module_1 from "@effect-app/prelude/utils";
2
+ import * as tsplus_module_2 from "@effect/io/Effect";
3
+ import * as tsplus_module_3 from "@effect/data/Debug";
4
+ /**
5
+ * @tsplus fluent effect/io/Effect instrument
6
+ */
7
+ export function instr(self, name, properties) {
8
+ return tsplus_module_3.untraced(() => tsplus_module_2.logSpan(tsplus_module_2.tap(self, () => tsplus_module_2.logAnnotate(tsplus_module_2.logDebug(`instrumented`), "properties", tsplus_module_1.RecordPretty(tsplus_module_1.object$((properties || {}))))), name));
9
+ // trackMetric(name, time, properties))
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL19zcmMvaW5zdHJ1bWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7R0FFRztBQUNILE1BQU0sVUFBVSxLQUFLLENBQVUsSUFBcUIsRUFBRSxJQUFZLEVBQUUsVUFBbUM7SUFDckcsT0FBTyx5QkFBZSxHQUFHLEVBQUUsQ0FDekIsd0JBQUEsb0JBQUEsSUFBSSxFQUNHLEdBQUcsRUFBRSxDQUFDLDRCQUFBLHlCQUFnQixjQUFjLENBQUMsRUFBYSxZQUFZLHVEQUFFLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxHQUFXLENBQUMsRUFDMUYsSUFBSSxDQUFDLENBQ2pCLENBQUE7SUFDRCx1Q0FBdUM7QUFDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHRzcGx1cyBmbHVlbnQgZWZmZWN0L2lvL0VmZmVjdCBpbnN0cnVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnN0cjxSLCBFLCBBPihzZWxmOiBFZmZlY3Q8UiwgRSwgQT4sIG5hbWU6IHN0cmluZywgcHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcbiAgcmV0dXJuIERlYnVnLnVudHJhY2VkKCgpID0+XG4gICAgc2VsZlxuICAgICAgLnRhcCgoKSA9PiBFZmZlY3QubG9nRGVidWcoYGluc3RydW1lbnRlZGApLmxvZ0Fubm90YXRlKFwicHJvcGVydGllc1wiLCAocHJvcGVydGllcyB8fCB7fSkuJCQucHJldHR5KSlcbiAgICAgIC5sb2dTcGFuKG5hbWUpXG4gIClcbiAgLy8gdHJhY2tNZXRyaWMobmFtZSwgdGltZSwgcHJvcGVydGllcykpXG59XG4iXX0=
@@ -0,0 +1 @@
1
+ 0958fd132e2c918acec7e021223aec95701d820ac3efbcb7b6f5c96200d7c3ad