@arkiv-network/sdk 0.7.0-dev.1 → 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 +22 -60
  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 +676 -375
  62. package/dist/index.d.cts +247 -208
  63. package/dist/index.d.cts.map +1 -1
  64. package/dist/index.d.ts +247 -208
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +626 -368
  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 -150
  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 -138
  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 +3 -3
  87. package/dist/types/index.d.cts +7 -2
  88. package/dist/types/index.d.ts +7 -2
  89. package/dist/types/index.js +3 -3
  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 +2 -2
  103. package/src/actions/wallet/createEntity.ts +99 -24
  104. package/src/actions/wallet/extendEntity.ts +37 -13
  105. package/src/actions/wallet/mutateEntities.test.ts +76 -0
  106. package/src/actions/wallet/mutateEntities.ts +19 -21
  107. package/src/actions/wallet/patchEntity.ts +90 -0
  108. package/src/attr/attributes.test.ts +120 -0
  109. package/src/attr/attributes.ts +190 -0
  110. package/src/attr/codec.test.ts +162 -0
  111. package/src/attr/codec.ts +220 -0
  112. package/src/attr/decimal.ts +86 -0
  113. package/src/attr/errors.ts +145 -0
  114. package/src/attr/index.ts +50 -0
  115. package/src/attr/names.ts +106 -0
  116. package/src/attr/types.ts +150 -0
  117. package/src/attr/values.test.ts +271 -0
  118. package/src/attr/values.ts +502 -0
  119. package/src/chains/cheesecake.ts +22 -0
  120. package/src/chains/index.ts +1 -2
  121. package/src/clients/createPublicClient.test.ts +3 -5
  122. package/src/clients/createPublicClient.ts +5 -4
  123. package/src/clients/createWalletClient.test.ts +2 -2
  124. package/src/clients/createWalletClient.ts +13 -7
  125. package/src/clients/decorators/arkivPublic.ts +160 -139
  126. package/src/clients/decorators/arkivWallet.ts +86 -94
  127. package/src/entity/create.test.ts +184 -0
  128. package/src/entity/errors.ts +38 -0
  129. package/src/entity/events.ts +16 -0
  130. package/src/entity/expiry.test.ts +195 -0
  131. package/src/entity/expiry.ts +181 -0
  132. package/src/entity/flags.ts +65 -0
  133. package/src/entity/index.ts +14 -0
  134. package/src/entity/key.ts +68 -0
  135. package/src/entity/operations.ts +134 -0
  136. package/src/entity/params.ts +15 -0
  137. package/src/errors.ts +26 -49
  138. package/src/index.ts +6 -0
  139. package/src/query/engine.ts +59 -139
  140. package/src/query/errors.ts +151 -0
  141. package/src/query/expression.test.ts +286 -0
  142. package/src/query/expression.ts +493 -0
  143. package/src/query/index.ts +40 -4
  144. package/src/query/injection.test.ts +151 -0
  145. package/src/query/queryBuilder.test.ts +322 -637
  146. package/src/query/queryBuilder.ts +126 -359
  147. package/src/query/queryResult.ts +54 -51
  148. package/src/query/selection.test.ts +48 -98
  149. package/src/query/selection.ts +77 -65
  150. package/src/types/entity.test.ts +44 -155
  151. package/src/types/entity.ts +60 -52
  152. package/src/types/events.ts +59 -16
  153. package/src/types/index.ts +20 -17
  154. package/src/types/rpcSchema.ts +69 -37
  155. package/src/utils/arkivTransactions.test.ts +600 -155
  156. package/src/utils/arkivTransactions.ts +181 -190
  157. package/src/utils/chains.test.ts +21 -24
  158. package/src/utils/compression.ts +1 -1
  159. package/src/utils/entities.test.ts +62 -0
  160. package/src/utils/entities.ts +109 -37
  161. package/src/utils/expirationTime.ts +114 -10
  162. package/src/utils/logger.ts +2 -2
  163. package/src/utils/revert.test.ts +99 -0
  164. package/src/utils/revert.ts +145 -0
  165. package/dist/chains-BifaY04V.cjs +0 -108
  166. package/dist/chains-CrtkVbBh.js +0 -86
  167. package/dist/chains-CrtkVbBh.js.map +0 -1
  168. package/dist/consts-Bz0LZQZY.js +0 -7
  169. package/dist/consts-Bz0LZQZY.js.map +0 -1
  170. package/dist/consts-CxT1-RXU.cjs +0 -18
  171. package/dist/entity-BhSXaB23.cjs +0 -81
  172. package/dist/entity-CN41IOrq.d.cts +0 -401
  173. package/dist/entity-CN41IOrq.d.cts.map +0 -1
  174. package/dist/entity-DGfVyB-a.js +0 -71
  175. package/dist/entity-DGfVyB-a.js.map +0 -1
  176. package/dist/entity-NnEVlePN.d.ts +0 -401
  177. package/dist/entity-NnEVlePN.d.ts.map +0 -1
  178. package/dist/index-ClkpS6s_.d.ts +0 -481
  179. package/dist/index-ClkpS6s_.d.ts.map +0 -1
  180. package/dist/index-w4qop0Pe.d.cts +0 -481
  181. package/dist/index-w4qop0Pe.d.cts.map +0 -1
  182. package/dist/payload-BpNUPOnY.js +0 -13
  183. package/dist/payload-BpNUPOnY.js.map +0 -1
  184. package/dist/payload-C2KHOUoj.d.ts +0 -6
  185. package/dist/payload-C2KHOUoj.d.ts.map +0 -1
  186. package/dist/payload-CJN8fTvX.d.cts +0 -6
  187. package/dist/payload-CJN8fTvX.d.cts.map +0 -1
  188. package/dist/payload-D8YLKcJj.cjs +0 -23
  189. package/dist/query/index.js.map +0 -1
  190. package/dist/queryBuilder-BE_XhLLa.js +0 -735
  191. package/dist/queryBuilder-BE_XhLLa.js.map +0 -1
  192. package/dist/queryBuilder-J37buGCi.cjs +0 -865
  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 -93
  198. package/src/actions/wallet/updateEntity.ts +0 -59
  199. package/src/chains/braga.ts +0 -26
  200. package/src/chains/kaolin.ts +0 -29
  201. package/src/query/engine.test.ts +0 -571
  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 -213
  206. package/src/types/attributes.ts +0 -28
  207. package/src/utils/validation.test.ts +0 -106
  208. package/src/utils/validation.ts +0 -80
  209. /package/dist/{types-Ci4BRClw.js → types-Bx1EKe0v.js} +0 -0
  210. /package/dist/{types-a8gm_IaQ.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
- }