@arkiv-network/sdk 0.7.0 → 0.8.0-dev.1

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 (210) hide show
  1. package/README.md +29 -16
  2. package/dist/attr/index.cjs +34 -0
  3. package/dist/attr/index.d.cts +2 -0
  4. package/dist/attr/index.d.ts +2 -0
  5. package/dist/attr/index.js +3 -0
  6. package/dist/attr-BDZ-APg5.js +809 -0
  7. package/dist/attr-BDZ-APg5.js.map +1 -0
  8. package/dist/attr-BvxHN99W.cjs +1029 -0
  9. package/dist/chains/index.cjs +2 -3
  10. package/dist/chains/index.d.cts +39 -77
  11. package/dist/chains/index.d.cts.map +1 -1
  12. package/dist/chains/index.d.ts +22 -60
  13. package/dist/chains/index.d.ts.map +1 -1
  14. package/dist/chains/index.js +2 -2
  15. package/dist/chains-BJrZs6sG.js +57 -0
  16. package/dist/chains-BJrZs6sG.js.map +1 -0
  17. package/dist/chains-BYRTTipa.cjs +73 -0
  18. package/dist/changeOwnership-B7bEgla4.d.cts +509 -0
  19. package/dist/changeOwnership-B7bEgla4.d.cts.map +1 -0
  20. package/dist/changeOwnership-DwgtdSFc.d.ts +509 -0
  21. package/dist/changeOwnership-DwgtdSFc.d.ts.map +1 -0
  22. package/dist/entity/index.cjs +19 -0
  23. package/dist/entity/index.d.cts +4 -0
  24. package/dist/entity/index.d.ts +4 -0
  25. package/dist/entity/index.js +6 -0
  26. package/dist/entity-B0t6sN7F.cjs +71 -0
  27. package/dist/entity-BIp_df9u.js +67 -0
  28. package/dist/entity-BIp_df9u.js.map +1 -0
  29. package/dist/entity-CFhbAv0R.js +70 -0
  30. package/dist/entity-CFhbAv0R.js.map +1 -0
  31. package/dist/entity-wfBnZd91.cjs +98 -0
  32. package/dist/errors-D-eJkGVc.cjs +56 -0
  33. package/dist/errors-DGB8AgT2.js +33 -0
  34. package/dist/errors-DGB8AgT2.js.map +1 -0
  35. package/dist/expiry-BUYIXTGb.cjs +135 -0
  36. package/dist/expiry-BxOlvVWC.d.ts +79 -0
  37. package/dist/expiry-BxOlvVWC.d.ts.map +1 -0
  38. package/dist/expiry-DGRzrSan.js +95 -0
  39. package/dist/expiry-DGRzrSan.js.map +1 -0
  40. package/dist/expiry-DRV29F1r.d.cts +79 -0
  41. package/dist/expiry-DRV29F1r.d.cts.map +1 -0
  42. package/dist/flags-0Vl5rrHq.d.cts +41 -0
  43. package/dist/flags-0Vl5rrHq.d.cts.map +1 -0
  44. package/dist/flags-Ct8k0gpB.cjs +43 -0
  45. package/dist/flags-ZtlvOIIk.js +33 -0
  46. package/dist/flags-ZtlvOIIk.js.map +1 -0
  47. package/dist/flags-wmcMoAnN.d.ts +41 -0
  48. package/dist/flags-wmcMoAnN.d.ts.map +1 -0
  49. package/dist/index-Cgw1u5aY.d.cts +278 -0
  50. package/dist/index-Cgw1u5aY.d.cts.map +1 -0
  51. package/dist/index-ClgIuxJ8.d.ts +159 -0
  52. package/dist/index-ClgIuxJ8.d.ts.map +1 -0
  53. package/dist/index-D0CmtiWT.d.cts +159 -0
  54. package/dist/index-D0CmtiWT.d.cts.map +1 -0
  55. package/dist/index-D8LZt-3J.d.cts +417 -0
  56. package/dist/index-D8LZt-3J.d.cts.map +1 -0
  57. package/dist/index-DVYFaXNV.d.ts +417 -0
  58. package/dist/index-DVYFaXNV.d.ts.map +1 -0
  59. package/dist/index-VCqgn29D.d.ts +278 -0
  60. package/dist/index-VCqgn29D.d.ts.map +1 -0
  61. package/dist/index.cjs +675 -357
  62. package/dist/index.d.cts +251 -203
  63. package/dist/index.d.cts.map +1 -1
  64. package/dist/index.d.ts +251 -203
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +626 -355
  67. package/dist/index.js.map +1 -1
  68. package/dist/payload-Bnw1hrvb.cjs +83 -0
  69. package/dist/payload-CIxSn_DW.js +67 -0
  70. package/dist/payload-CIxSn_DW.js.map +1 -0
  71. package/dist/payload-Dgx3PQeK.d.ts +94 -0
  72. package/dist/payload-Dgx3PQeK.d.ts.map +1 -0
  73. package/dist/payload-P0nWyjLg.d.cts +94 -0
  74. package/dist/payload-P0nWyjLg.d.cts.map +1 -0
  75. package/dist/query/index.cjs +24 -149
  76. package/dist/query/index.d.cts +5 -3
  77. package/dist/query/index.d.ts +5 -3
  78. package/dist/query/index.js +6 -137
  79. package/dist/queryBuilder-BXDvX1K_.cjs +1123 -0
  80. package/dist/queryBuilder-CbLL4pG5.js +963 -0
  81. package/dist/queryBuilder-CbLL4pG5.js.map +1 -0
  82. package/dist/selection-BvK6yX0g.d.cts +433 -0
  83. package/dist/selection-BvK6yX0g.d.cts.map +1 -0
  84. package/dist/selection-fpmI3ADQ.d.ts +433 -0
  85. package/dist/selection-fpmI3ADQ.d.ts.map +1 -0
  86. package/dist/types/index.cjs +4 -1
  87. package/dist/types/index.d.cts +7 -2
  88. package/dist/types/index.d.ts +7 -2
  89. package/dist/types/index.js +4 -1
  90. package/dist/utils/index.cjs +4 -17
  91. package/dist/utils/index.d.cts +3 -17
  92. package/dist/utils/index.d.ts +3 -17
  93. package/dist/utils/index.js +4 -18
  94. package/package.json +26 -5
  95. package/src/actions/public/getEntity.ts +27 -43
  96. package/src/actions/public/getEntityNonce.ts +30 -0
  97. package/src/actions/public/predictEntityKeys.test.ts +143 -0
  98. package/src/actions/public/predictEntityKeys.ts +138 -0
  99. package/src/actions/public/query.ts +33 -69
  100. package/src/actions/public/watchEntityEvents.test.ts +414 -0
  101. package/src/actions/public/watchEntityEvents.ts +225 -0
  102. package/src/actions/wallet/changeOwnership.ts +8 -8
  103. package/src/actions/wallet/createEntity.ts +104 -26
  104. package/src/actions/wallet/deleteEntity.ts +2 -3
  105. package/src/actions/wallet/extendEntity.ts +39 -16
  106. package/src/actions/wallet/mutateEntities.test.ts +76 -0
  107. package/src/actions/wallet/mutateEntities.ts +29 -74
  108. package/src/actions/wallet/patchEntity.ts +90 -0
  109. package/src/attr/attributes.test.ts +120 -0
  110. package/src/attr/attributes.ts +190 -0
  111. package/src/attr/codec.test.ts +162 -0
  112. package/src/attr/codec.ts +220 -0
  113. package/src/attr/decimal.ts +86 -0
  114. package/src/attr/errors.ts +145 -0
  115. package/src/attr/index.ts +50 -0
  116. package/src/attr/names.ts +106 -0
  117. package/src/attr/types.ts +150 -0
  118. package/src/attr/values.test.ts +271 -0
  119. package/src/attr/values.ts +502 -0
  120. package/src/chains/cheesecake.ts +22 -0
  121. package/src/chains/index.ts +1 -2
  122. package/src/clients/createPublicClient.test.ts +3 -5
  123. package/src/clients/createPublicClient.ts +5 -4
  124. package/src/clients/createWalletClient.test.ts +2 -2
  125. package/src/clients/createWalletClient.ts +13 -7
  126. package/src/clients/decorators/arkivPublic.ts +160 -139
  127. package/src/clients/decorators/arkivWallet.ts +91 -95
  128. package/src/consts.ts +2 -1
  129. package/src/entity/create.test.ts +184 -0
  130. package/src/entity/errors.ts +38 -0
  131. package/src/entity/events.ts +16 -0
  132. package/src/entity/expiry.test.ts +195 -0
  133. package/src/entity/expiry.ts +181 -0
  134. package/src/entity/flags.ts +65 -0
  135. package/src/entity/index.ts +14 -0
  136. package/src/entity/key.ts +68 -0
  137. package/src/entity/operations.ts +134 -0
  138. package/src/entity/params.ts +15 -0
  139. package/src/errors.ts +33 -28
  140. package/src/index.ts +6 -0
  141. package/src/query/engine.ts +59 -134
  142. package/src/query/errors.ts +151 -0
  143. package/src/query/expression.test.ts +286 -0
  144. package/src/query/expression.ts +493 -0
  145. package/src/query/index.ts +40 -4
  146. package/src/query/injection.test.ts +151 -0
  147. package/src/query/queryBuilder.test.ts +322 -637
  148. package/src/query/queryBuilder.ts +126 -359
  149. package/src/query/queryResult.ts +54 -51
  150. package/src/query/selection.test.ts +48 -98
  151. package/src/query/selection.ts +77 -65
  152. package/src/types/entity.test.ts +44 -155
  153. package/src/types/entity.ts +62 -44
  154. package/src/types/events.ts +64 -23
  155. package/src/types/index.ts +20 -16
  156. package/src/types/rpcSchema.ts +70 -33
  157. package/src/utils/arkivTransactions.test.ts +681 -38
  158. package/src/utils/arkivTransactions.ts +249 -104
  159. package/src/utils/chains.test.ts +21 -24
  160. package/src/utils/compression.ts +1 -1
  161. package/src/utils/entities.test.ts +62 -0
  162. package/src/utils/entities.ts +111 -29
  163. package/src/utils/expirationTime.ts +114 -10
  164. package/src/utils/logger.ts +2 -2
  165. package/src/utils/payload.ts +4 -2
  166. package/src/utils/revert.test.ts +99 -0
  167. package/src/utils/revert.ts +145 -0
  168. package/dist/chains-BifaY04V.cjs +0 -108
  169. package/dist/chains-CrtkVbBh.js +0 -86
  170. package/dist/chains-CrtkVbBh.js.map +0 -1
  171. package/dist/consts-AUoL-v42.cjs +0 -18
  172. package/dist/consts-BV4PR-de.js +0 -7
  173. package/dist/consts-BV4PR-de.js.map +0 -1
  174. package/dist/entity-B6g_EPm1.d.cts +0 -382
  175. package/dist/entity-B6g_EPm1.d.cts.map +0 -1
  176. package/dist/entity-qoLMAuuk.d.ts +0 -382
  177. package/dist/entity-qoLMAuuk.d.ts.map +0 -1
  178. package/dist/index-DdspxNAA.d.ts +0 -481
  179. package/dist/index-DdspxNAA.d.ts.map +0 -1
  180. package/dist/index-Ds9dwqb5.d.cts +0 -481
  181. package/dist/index-Ds9dwqb5.d.cts.map +0 -1
  182. package/dist/payload-B2kFJyah.d.ts +0 -6
  183. package/dist/payload-B2kFJyah.d.ts.map +0 -1
  184. package/dist/payload-CJN8fTvX.d.cts +0 -6
  185. package/dist/payload-CJN8fTvX.d.cts.map +0 -1
  186. package/dist/payload-Claf2jUO.js +0 -13
  187. package/dist/payload-Claf2jUO.js.map +0 -1
  188. package/dist/payload-DpA5PA-w.cjs +0 -23
  189. package/dist/query/index.js.map +0 -1
  190. package/dist/queryBuilder-D2uwP9jI.js +0 -704
  191. package/dist/queryBuilder-D2uwP9jI.js.map +0 -1
  192. package/dist/queryBuilder-UW2MCaX4.cjs +0 -792
  193. package/dist/utils/index.d.cts.map +0 -1
  194. package/dist/utils/index.d.ts.map +0 -1
  195. package/dist/utils/index.js.map +0 -1
  196. package/src/actions/public/buildQuery.ts +0 -10
  197. package/src/actions/public/subscribeEntityEvents.ts +0 -119
  198. package/src/actions/wallet/updateEntity.ts +0 -60
  199. package/src/chains/braga.ts +0 -26
  200. package/src/chains/kaolin.ts +0 -29
  201. package/src/query/engine.test.ts +0 -526
  202. package/src/query/predicate.test.ts +0 -461
  203. package/src/query/predicate.ts +0 -144
  204. package/src/query/queryResult.test.ts +0 -270
  205. package/src/query/selectQueryBuilder.test.ts +0 -210
  206. package/src/types/attributes.ts +0 -16
  207. package/src/utils/validation.test.ts +0 -60
  208. package/src/utils/validation.ts +0 -32
  209. /package/dist/{types-H-TSmRpm.js → types-Bx1EKe0v.js} +0 -0
  210. /package/dist/{types-o3zWarRp.cjs → types-CKPddlfS.cjs} +0 -0
@@ -1,461 +0,0 @@
1
- import { describe, expect, test } from "bun:test"
2
- import { and, eq, gt, gte, lt, lte, neq, not, or, type Predicate } from "./predicate"
3
-
4
- describe("Predicate Factory Functions", () => {
5
- describe("eq()", () => {
6
- test("creates equality predicate with string value", () => {
7
- const result = eq("name", "john")
8
-
9
- expect(result).toEqual({
10
- type: "eq",
11
- key: "name",
12
- value: "john",
13
- })
14
- })
15
-
16
- test("creates equality predicate with numeric value", () => {
17
- const result = eq("age", 25)
18
-
19
- expect(result).toEqual({
20
- type: "eq",
21
- key: "age",
22
- value: 25,
23
- })
24
- })
25
-
26
- test("creates equality predicate with zero", () => {
27
- const result = eq("count", 0)
28
-
29
- expect(result).toEqual({
30
- type: "eq",
31
- key: "count",
32
- value: 0,
33
- })
34
- })
35
-
36
- test("creates equality predicate with empty string", () => {
37
- const result = eq("name", "")
38
-
39
- expect(result).toEqual({
40
- type: "eq",
41
- key: "name",
42
- value: "",
43
- })
44
- })
45
- })
46
-
47
- describe("neq()", () => {
48
- test("creates not equal predicate with string value", () => {
49
- const result = neq("status", "inactive")
50
-
51
- expect(result).toEqual({
52
- type: "neq",
53
- key: "status",
54
- value: "inactive",
55
- })
56
- })
57
-
58
- test("creates not equal predicate with numeric value", () => {
59
- const result = neq("count", 0)
60
-
61
- expect(result).toEqual({
62
- type: "neq",
63
- key: "count",
64
- value: 0,
65
- })
66
- })
67
- })
68
-
69
- describe("gt()", () => {
70
- test("creates greater than predicate with numeric value", () => {
71
- const result = gt("age", 18)
72
-
73
- expect(result).toEqual({
74
- type: "gt",
75
- key: "age",
76
- value: 18,
77
- })
78
- })
79
-
80
- test("creates greater than predicate with negative number", () => {
81
- const result = gt("balance", -100)
82
-
83
- expect(result).toEqual({
84
- type: "gt",
85
- key: "balance",
86
- value: -100,
87
- })
88
- })
89
-
90
- test("creates greater than predicate with string value", () => {
91
- const result = gt("name", "abc")
92
-
93
- expect(result).toEqual({
94
- type: "gt",
95
- key: "name",
96
- value: "abc",
97
- })
98
- })
99
- })
100
-
101
- describe("gte()", () => {
102
- test("creates greater than or equal predicate with numeric value", () => {
103
- const result = gte("age", 18)
104
-
105
- expect(result).toEqual({
106
- type: "gte",
107
- key: "age",
108
- value: 18,
109
- })
110
- })
111
-
112
- test("creates greater than or equal predicate with negative number", () => {
113
- const result = gte("temperature", -10)
114
-
115
- expect(result).toEqual({
116
- type: "gte",
117
- key: "temperature",
118
- value: -10,
119
- })
120
- })
121
-
122
- test("creates greater than or equal predicate with string value", () => {
123
- const result = gte("version", "1.0.0")
124
-
125
- expect(result).toEqual({
126
- type: "gte",
127
- key: "version",
128
- value: "1.0.0",
129
- })
130
- })
131
- })
132
-
133
- describe("lt()", () => {
134
- test("creates less than predicate with numeric value", () => {
135
- const result = lt("age", 65)
136
-
137
- expect(result).toEqual({
138
- type: "lt",
139
- key: "age",
140
- value: 65,
141
- })
142
- })
143
-
144
- test("creates less than predicate with string value", () => {
145
- const result = lt("priority", "high")
146
-
147
- expect(result).toEqual({
148
- type: "lt",
149
- key: "priority",
150
- value: "high",
151
- })
152
- })
153
- })
154
-
155
- describe("lte()", () => {
156
- test("creates less than or equal predicate with numeric value", () => {
157
- const result = lte("score", 100)
158
-
159
- expect(result).toEqual({
160
- type: "lte",
161
- key: "score",
162
- value: 100,
163
- })
164
- })
165
-
166
- test("creates less than or equal predicate with string value", () => {
167
- const result = lte("date", "2023-12-31")
168
-
169
- expect(result).toEqual({
170
- type: "lte",
171
- key: "date",
172
- value: "2023-12-31",
173
- })
174
- })
175
- })
176
-
177
- describe("not()", () => {
178
- test("creates not predicate", () => {
179
- const result = not("deleted")
180
-
181
- expect(result).toEqual({
182
- type: "not",
183
- key: "deleted",
184
- value: "",
185
- })
186
- })
187
-
188
- test("creates not predicate with different key", () => {
189
- const result = not("archived")
190
-
191
- expect(result).toEqual({
192
- type: "not",
193
- key: "archived",
194
- value: "",
195
- })
196
- })
197
- })
198
-
199
- describe("or()", () => {
200
- test("creates or predicate with two simple predicates", () => {
201
- const predicates = [eq("type", "admin"), eq("type", "moderator")]
202
- const result = or(predicates)
203
-
204
- expect(result).toEqual({
205
- type: "or",
206
- predicates: [
207
- { type: "eq", key: "type", value: "admin" },
208
- { type: "eq", key: "type", value: "moderator" },
209
- ],
210
- })
211
- })
212
-
213
- test("creates or predicate with mixed predicate types", () => {
214
- const predicates = [eq("status", "active"), gte("score", 100), neq("role", "guest")]
215
- const result = or(predicates)
216
-
217
- expect(result).toEqual({
218
- type: "or",
219
- predicates: [
220
- { type: "eq", key: "status", value: "active" },
221
- { type: "gte", key: "score", value: 100 },
222
- { type: "neq", key: "role", value: "guest" },
223
- ],
224
- })
225
- })
226
-
227
- test("creates or predicate with single predicate", () => {
228
- const predicates = [eq("enabled", 1)]
229
- const result = or(predicates)
230
-
231
- expect(result).toEqual({
232
- type: "or",
233
- predicates: [{ type: "eq", key: "enabled", value: 1 }],
234
- })
235
- })
236
-
237
- test("creates or predicate with empty array", () => {
238
- const predicates: Predicate[] = []
239
- const result = or(predicates)
240
-
241
- expect(result).toEqual({
242
- type: "or",
243
- predicates: [],
244
- })
245
- })
246
-
247
- test("creates or predicate from varargs", () => {
248
- const result = or(eq("type", "admin"), eq("type", "moderator"))
249
-
250
- expect(result).toEqual({
251
- type: "or",
252
- predicates: [
253
- { type: "eq", key: "type", value: "admin" },
254
- { type: "eq", key: "type", value: "moderator" },
255
- ],
256
- })
257
- })
258
-
259
- test("creates or predicate with no arguments", () => {
260
- const result = or()
261
-
262
- expect(result).toEqual({
263
- type: "or",
264
- predicates: [],
265
- })
266
- })
267
-
268
- test("creates or predicate with nested and", () => {
269
- const nestedAnd = and([eq("verified", 1), gte("age", 18)])
270
- const predicates = [eq("status", "premium"), nestedAnd]
271
- const result = or(predicates)
272
-
273
- expect(result).toEqual({
274
- type: "or",
275
- predicates: [
276
- { type: "eq", key: "status", value: "premium" },
277
- {
278
- type: "and",
279
- predicates: [
280
- { type: "eq", key: "verified", value: 1 },
281
- { type: "gte", key: "age", value: 18 },
282
- ],
283
- },
284
- ],
285
- })
286
- })
287
- })
288
-
289
- describe("and()", () => {
290
- test("creates and predicate with two simple predicates", () => {
291
- const predicates = [eq("status", "active"), eq("verified", 1)]
292
- const result = and(predicates)
293
-
294
- expect(result).toEqual({
295
- type: "and",
296
- predicates: [
297
- { type: "eq", key: "status", value: "active" },
298
- { type: "eq", key: "verified", value: 1 },
299
- ],
300
- })
301
- })
302
-
303
- test("creates and predicate with mixed predicate types", () => {
304
- const predicates = [eq("active", 1), gte("age", 18), lt("age", 65), neq("role", "guest")]
305
- const result = and(predicates)
306
-
307
- expect(result).toEqual({
308
- type: "and",
309
- predicates: [
310
- { type: "eq", key: "active", value: 1 },
311
- { type: "gte", key: "age", value: 18 },
312
- { type: "lt", key: "age", value: 65 },
313
- { type: "neq", key: "role", value: "guest" },
314
- ],
315
- })
316
- })
317
-
318
- test("creates and predicate with single predicate", () => {
319
- const predicates = [eq("enabled", 1)]
320
- const result = and(predicates)
321
-
322
- expect(result).toEqual({
323
- type: "and",
324
- predicates: [{ type: "eq", key: "enabled", value: 1 }],
325
- })
326
- })
327
-
328
- test("creates and predicate with empty array", () => {
329
- const predicates: Predicate[] = []
330
- const result = and(predicates)
331
-
332
- expect(result).toEqual({
333
- type: "and",
334
- predicates: [],
335
- })
336
- })
337
-
338
- test("creates and predicate from varargs", () => {
339
- const result = and(eq("status", "active"), gte("age", 18), not("deleted"))
340
-
341
- expect(result).toEqual({
342
- type: "and",
343
- predicates: [
344
- { type: "eq", key: "status", value: "active" },
345
- { type: "gte", key: "age", value: 18 },
346
- { type: "not", key: "deleted", value: "" },
347
- ],
348
- })
349
- })
350
-
351
- test("creates and predicate with no arguments", () => {
352
- const result = and()
353
-
354
- expect(result).toEqual({
355
- type: "and",
356
- predicates: [],
357
- })
358
- })
359
-
360
- test("creates and predicate with nested or", () => {
361
- const nestedOr = or([eq("type", "admin"), eq("type", "moderator")])
362
- const predicates = [eq("active", 1), nestedOr]
363
- const result = and(predicates)
364
-
365
- expect(result).toEqual({
366
- type: "and",
367
- predicates: [
368
- { type: "eq", key: "active", value: 1 },
369
- {
370
- type: "or",
371
- predicates: [
372
- { type: "eq", key: "type", value: "admin" },
373
- { type: "eq", key: "type", value: "moderator" },
374
- ],
375
- },
376
- ],
377
- })
378
- })
379
- })
380
-
381
- describe("Complex Nested Predicates", () => {
382
- test("creates deeply nested predicate structure", () => {
383
- const innerOr = or([eq("role", "admin"), eq("role", "moderator")])
384
- const innerAnd = and([eq("verified", 1), gte("reputation", 1000)])
385
- const outerOr = or([innerAnd, innerOr])
386
- const result = and([eq("active", 1), outerOr, neq("banned", 1)])
387
-
388
- expect(result).toEqual({
389
- type: "and",
390
- predicates: [
391
- { type: "eq", key: "active", value: 1 },
392
- {
393
- type: "or",
394
- predicates: [
395
- {
396
- type: "and",
397
- predicates: [
398
- { type: "eq", key: "verified", value: 1 },
399
- { type: "gte", key: "reputation", value: 1000 },
400
- ],
401
- },
402
- {
403
- type: "or",
404
- predicates: [
405
- { type: "eq", key: "role", value: "admin" },
406
- { type: "eq", key: "role", value: "moderator" },
407
- ],
408
- },
409
- ],
410
- },
411
- { type: "neq", key: "banned", value: 1 },
412
- ],
413
- })
414
- })
415
-
416
- test("creates predicate with multiple comparison types", () => {
417
- const result = and([
418
- gte("age", 18),
419
- lt("age", 65),
420
- lte("score", 100),
421
- neq("status", "suspended"),
422
- not("deleted"),
423
- ])
424
-
425
- expect(result).toEqual({
426
- type: "and",
427
- predicates: [
428
- { type: "gte", key: "age", value: 18 },
429
- { type: "lt", key: "age", value: 65 },
430
- { type: "lte", key: "score", value: 100 },
431
- { type: "neq", key: "status", value: "suspended" },
432
- { type: "not", key: "deleted", value: "" },
433
- ],
434
- })
435
- })
436
- })
437
-
438
- describe("Type Safety", () => {
439
- test("predicates maintain correct type information", () => {
440
- const stringPred = eq("name", "test")
441
- const numPred = eq("count", 42)
442
- const orPred = or([stringPred, numPred])
443
- const andPred = and([stringPred, numPred])
444
-
445
- // Type assertions to ensure TypeScript types are correct
446
- expect(stringPred.type).toBe("eq")
447
- expect(numPred.type).toBe("eq")
448
- expect(orPred.type).toBe("or")
449
- expect(andPred.type).toBe("and")
450
-
451
- // Verify container predicates have predicates array
452
- if (orPred.type === "or" || orPred.type === "and") {
453
- expect(Array.isArray(orPred.predicates)).toBe(true)
454
- }
455
-
456
- if (andPred.type === "or" || andPred.type === "and") {
457
- expect(Array.isArray(andPred.predicates)).toBe(true)
458
- }
459
- })
460
- })
461
- })
@@ -1,144 +0,0 @@
1
- export type PredicateType = "eq" | "neq" | "gt" | "gte" | "lt" | "lte" | "not"
2
- export type PredicateContainerType = "or" | "and"
3
-
4
- export type Predicate =
5
- | {
6
- type: PredicateType
7
- key: string
8
- value: string | number
9
- }
10
- | {
11
- type: PredicateContainerType
12
- predicates: Predicate[]
13
- }
14
-
15
- /**
16
- * Creates an OR predicate
17
- * @param predicates - The predicates to combine, either as a single array or as separate arguments
18
- * @returns The OR predicate
19
- *
20
- * @example
21
- * const result = or(eq("name", "John"), eq("age", 30))
22
- * // or equivalently: or([eq("name", "John"), eq("age", 30)])
23
- * // result = { type: "or", predicates: [eq("name", "John"), eq("age", 30)] }
24
- *
25
- */
26
- export function or(predicates: Predicate[]): Predicate
27
- export function or(...predicates: Predicate[]): Predicate
28
- export function or(...predicates: (Predicate | Predicate[])[]): Predicate {
29
- return { type: "or", predicates: predicates.flat() }
30
- }
31
-
32
- /**
33
- * Creates an AND predicate
34
- * @param predicates - The predicates to combine, either as a single array or as separate arguments
35
- * @returns The AND predicate
36
- *
37
- * @example
38
- * const result = and(eq("name", "John"), eq("age", 30))
39
- * // or equivalently: and([eq("name", "John"), eq("age", 30)])
40
- * // result = { type: "and", predicates: [eq("name", "John"), eq("age", 30)] }
41
- *
42
- */
43
- export function and(predicates: Predicate[]): Predicate
44
- export function and(...predicates: Predicate[]): Predicate
45
- export function and(...predicates: (Predicate | Predicate[])[]): Predicate {
46
- return { type: "and", predicates: predicates.flat() }
47
- }
48
-
49
- /**
50
- * Creates an equality predicate
51
- * @param key - The key to compare
52
- * @param value - The value to compare
53
- * @returns The equality predicate
54
- *
55
- * @example
56
- * const predicate = eq("name", "John")
57
- * // result = { type: "eq", key: "name", value: "John" }
58
- */
59
- export function eq(key: string, value: string | number): Predicate {
60
- return { type: "eq", key, value }
61
- }
62
-
63
- /**
64
- * Creates a not equal predicate
65
- * @param key - The key to compare
66
- * @param value - The value to compare
67
- * @returns The not equal predicate
68
- *
69
- * @example
70
- * const predicate = neq("name", "John")
71
- * // result = { type: "neq", key: "name", value: "John" }
72
- */
73
- export function neq(key: string, value: string | number): Predicate {
74
- return { type: "neq", key, value }
75
- }
76
-
77
- /**
78
- * Creates a greater than predicate
79
- * @param key - The key to compare
80
- * @param value - The value to compare
81
- * @returns The greater than predicate
82
- *
83
- * @example
84
- * const predicate = gt("name", "John")
85
- * // result = { type: "gt", key: "name", value: "John" }
86
- */
87
- export function gt(key: string, value: string | number): Predicate {
88
- return { type: "gt", key, value }
89
- }
90
-
91
- /**
92
- * Creates a greater than or equal predicate
93
- * @param key - The key to compare
94
- * @param value - The value to compare
95
- * @returns The greater than or equal predicate
96
- *
97
- * @example
98
- * const predicate = gte("name", "John")
99
- * // result = { type: "gte", key: "name", value: "John" }
100
- */
101
- export function gte(key: string, value: string | number): Predicate {
102
- return { type: "gte", key, value }
103
- }
104
-
105
- /**
106
- * Creates a less than predicate
107
- * @param key - The key to compare
108
- * @param value - The value to compare
109
- * @returns The less than predicate
110
- *
111
- * @example
112
- * const predicate = lt("name", "John")
113
- * // result = { type: "lt", key: "name", value: "John" }
114
- */
115
- export function lt(key: string, value: string | number): Predicate {
116
- return { type: "lt", key, value }
117
- }
118
-
119
- /**
120
- * Creates a less than or equal predicate
121
- * @param key - The key to compare
122
- * @param value - The value to compare
123
- * @returns The less than or equal predicate
124
- *
125
- * @example
126
- * const predicate = lte("name", "John")
127
- * // result = { type: "lte", key: "name", value: "John" }
128
- */
129
- export function lte(key: string, value: string | number): Predicate {
130
- return { type: "lte", key, value }
131
- }
132
-
133
- /**
134
- * Creates a not predicate
135
- * @param key - The key to compare
136
- * @returns The not predicate
137
- *
138
- * @example
139
- * const predicate = not("name")
140
- * // result = { type: "not", key: "name", value: "" }
141
- */
142
- export function not(key: string): Predicate {
143
- return { type: "not", key, value: "" }
144
- }