@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.
- package/README.md +29 -16
- package/dist/attr/index.cjs +34 -0
- package/dist/attr/index.d.cts +2 -0
- package/dist/attr/index.d.ts +2 -0
- package/dist/attr/index.js +3 -0
- package/dist/attr-BDZ-APg5.js +809 -0
- package/dist/attr-BDZ-APg5.js.map +1 -0
- package/dist/attr-BvxHN99W.cjs +1029 -0
- package/dist/chains/index.cjs +2 -3
- package/dist/chains/index.d.cts +22 -60
- package/dist/chains/index.d.cts.map +1 -1
- package/dist/chains/index.d.ts +22 -60
- package/dist/chains/index.d.ts.map +1 -1
- package/dist/chains/index.js +2 -2
- package/dist/chains-BJrZs6sG.js +57 -0
- package/dist/chains-BJrZs6sG.js.map +1 -0
- package/dist/chains-BYRTTipa.cjs +73 -0
- package/dist/changeOwnership-B7bEgla4.d.cts +509 -0
- package/dist/changeOwnership-B7bEgla4.d.cts.map +1 -0
- package/dist/changeOwnership-DwgtdSFc.d.ts +509 -0
- package/dist/changeOwnership-DwgtdSFc.d.ts.map +1 -0
- package/dist/entity/index.cjs +19 -0
- package/dist/entity/index.d.cts +4 -0
- package/dist/entity/index.d.ts +4 -0
- package/dist/entity/index.js +6 -0
- package/dist/entity-B0t6sN7F.cjs +71 -0
- package/dist/entity-BIp_df9u.js +67 -0
- package/dist/entity-BIp_df9u.js.map +1 -0
- package/dist/entity-CFhbAv0R.js +70 -0
- package/dist/entity-CFhbAv0R.js.map +1 -0
- package/dist/entity-wfBnZd91.cjs +98 -0
- package/dist/errors-D-eJkGVc.cjs +56 -0
- package/dist/errors-DGB8AgT2.js +33 -0
- package/dist/errors-DGB8AgT2.js.map +1 -0
- package/dist/expiry-BUYIXTGb.cjs +135 -0
- package/dist/expiry-BxOlvVWC.d.ts +79 -0
- package/dist/expiry-BxOlvVWC.d.ts.map +1 -0
- package/dist/expiry-DGRzrSan.js +95 -0
- package/dist/expiry-DGRzrSan.js.map +1 -0
- package/dist/expiry-DRV29F1r.d.cts +79 -0
- package/dist/expiry-DRV29F1r.d.cts.map +1 -0
- package/dist/flags-0Vl5rrHq.d.cts +41 -0
- package/dist/flags-0Vl5rrHq.d.cts.map +1 -0
- package/dist/flags-Ct8k0gpB.cjs +43 -0
- package/dist/flags-ZtlvOIIk.js +33 -0
- package/dist/flags-ZtlvOIIk.js.map +1 -0
- package/dist/flags-wmcMoAnN.d.ts +41 -0
- package/dist/flags-wmcMoAnN.d.ts.map +1 -0
- package/dist/index-Cgw1u5aY.d.cts +278 -0
- package/dist/index-Cgw1u5aY.d.cts.map +1 -0
- package/dist/index-ClgIuxJ8.d.ts +159 -0
- package/dist/index-ClgIuxJ8.d.ts.map +1 -0
- package/dist/index-D0CmtiWT.d.cts +159 -0
- package/dist/index-D0CmtiWT.d.cts.map +1 -0
- package/dist/index-D8LZt-3J.d.cts +417 -0
- package/dist/index-D8LZt-3J.d.cts.map +1 -0
- package/dist/index-DVYFaXNV.d.ts +417 -0
- package/dist/index-DVYFaXNV.d.ts.map +1 -0
- package/dist/index-VCqgn29D.d.ts +278 -0
- package/dist/index-VCqgn29D.d.ts.map +1 -0
- package/dist/index.cjs +676 -375
- package/dist/index.d.cts +247 -208
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +247 -208
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +626 -368
- package/dist/index.js.map +1 -1
- package/dist/payload-Bnw1hrvb.cjs +83 -0
- package/dist/payload-CIxSn_DW.js +67 -0
- package/dist/payload-CIxSn_DW.js.map +1 -0
- package/dist/payload-Dgx3PQeK.d.ts +94 -0
- package/dist/payload-Dgx3PQeK.d.ts.map +1 -0
- package/dist/payload-P0nWyjLg.d.cts +94 -0
- package/dist/payload-P0nWyjLg.d.cts.map +1 -0
- package/dist/query/index.cjs +24 -150
- package/dist/query/index.d.cts +5 -3
- package/dist/query/index.d.ts +5 -3
- package/dist/query/index.js +6 -138
- package/dist/queryBuilder-BXDvX1K_.cjs +1123 -0
- package/dist/queryBuilder-CbLL4pG5.js +963 -0
- package/dist/queryBuilder-CbLL4pG5.js.map +1 -0
- package/dist/selection-BvK6yX0g.d.cts +433 -0
- package/dist/selection-BvK6yX0g.d.cts.map +1 -0
- package/dist/selection-fpmI3ADQ.d.ts +433 -0
- package/dist/selection-fpmI3ADQ.d.ts.map +1 -0
- package/dist/types/index.cjs +3 -3
- package/dist/types/index.d.cts +7 -2
- package/dist/types/index.d.ts +7 -2
- package/dist/types/index.js +3 -3
- package/dist/utils/index.cjs +4 -17
- package/dist/utils/index.d.cts +3 -17
- package/dist/utils/index.d.ts +3 -17
- package/dist/utils/index.js +4 -18
- package/package.json +26 -5
- package/src/actions/public/getEntity.ts +27 -43
- package/src/actions/public/getEntityNonce.ts +30 -0
- package/src/actions/public/predictEntityKeys.test.ts +143 -0
- package/src/actions/public/predictEntityKeys.ts +138 -0
- package/src/actions/public/query.ts +33 -69
- package/src/actions/public/watchEntityEvents.test.ts +414 -0
- package/src/actions/public/watchEntityEvents.ts +225 -0
- package/src/actions/wallet/changeOwnership.ts +2 -2
- package/src/actions/wallet/createEntity.ts +99 -24
- package/src/actions/wallet/extendEntity.ts +37 -13
- package/src/actions/wallet/mutateEntities.test.ts +76 -0
- package/src/actions/wallet/mutateEntities.ts +19 -21
- package/src/actions/wallet/patchEntity.ts +90 -0
- package/src/attr/attributes.test.ts +120 -0
- package/src/attr/attributes.ts +190 -0
- package/src/attr/codec.test.ts +162 -0
- package/src/attr/codec.ts +220 -0
- package/src/attr/decimal.ts +86 -0
- package/src/attr/errors.ts +145 -0
- package/src/attr/index.ts +50 -0
- package/src/attr/names.ts +106 -0
- package/src/attr/types.ts +150 -0
- package/src/attr/values.test.ts +271 -0
- package/src/attr/values.ts +502 -0
- package/src/chains/cheesecake.ts +22 -0
- package/src/chains/index.ts +1 -2
- package/src/clients/createPublicClient.test.ts +3 -5
- package/src/clients/createPublicClient.ts +5 -4
- package/src/clients/createWalletClient.test.ts +2 -2
- package/src/clients/createWalletClient.ts +13 -7
- package/src/clients/decorators/arkivPublic.ts +160 -139
- package/src/clients/decorators/arkivWallet.ts +86 -94
- package/src/entity/create.test.ts +184 -0
- package/src/entity/errors.ts +38 -0
- package/src/entity/events.ts +16 -0
- package/src/entity/expiry.test.ts +195 -0
- package/src/entity/expiry.ts +181 -0
- package/src/entity/flags.ts +65 -0
- package/src/entity/index.ts +14 -0
- package/src/entity/key.ts +68 -0
- package/src/entity/operations.ts +134 -0
- package/src/entity/params.ts +15 -0
- package/src/errors.ts +26 -49
- package/src/index.ts +6 -0
- package/src/query/engine.ts +59 -139
- package/src/query/errors.ts +151 -0
- package/src/query/expression.test.ts +286 -0
- package/src/query/expression.ts +493 -0
- package/src/query/index.ts +40 -4
- package/src/query/injection.test.ts +151 -0
- package/src/query/queryBuilder.test.ts +322 -637
- package/src/query/queryBuilder.ts +126 -359
- package/src/query/queryResult.ts +54 -51
- package/src/query/selection.test.ts +48 -98
- package/src/query/selection.ts +77 -65
- package/src/types/entity.test.ts +44 -155
- package/src/types/entity.ts +60 -52
- package/src/types/events.ts +59 -16
- package/src/types/index.ts +20 -17
- package/src/types/rpcSchema.ts +69 -37
- package/src/utils/arkivTransactions.test.ts +600 -155
- package/src/utils/arkivTransactions.ts +181 -190
- package/src/utils/chains.test.ts +21 -24
- package/src/utils/compression.ts +1 -1
- package/src/utils/entities.test.ts +62 -0
- package/src/utils/entities.ts +109 -37
- package/src/utils/expirationTime.ts +114 -10
- package/src/utils/logger.ts +2 -2
- package/src/utils/revert.test.ts +99 -0
- package/src/utils/revert.ts +145 -0
- package/dist/chains-BifaY04V.cjs +0 -108
- package/dist/chains-CrtkVbBh.js +0 -86
- package/dist/chains-CrtkVbBh.js.map +0 -1
- package/dist/consts-Bz0LZQZY.js +0 -7
- package/dist/consts-Bz0LZQZY.js.map +0 -1
- package/dist/consts-CxT1-RXU.cjs +0 -18
- package/dist/entity-BhSXaB23.cjs +0 -81
- package/dist/entity-CN41IOrq.d.cts +0 -401
- package/dist/entity-CN41IOrq.d.cts.map +0 -1
- package/dist/entity-DGfVyB-a.js +0 -71
- package/dist/entity-DGfVyB-a.js.map +0 -1
- package/dist/entity-NnEVlePN.d.ts +0 -401
- package/dist/entity-NnEVlePN.d.ts.map +0 -1
- package/dist/index-ClkpS6s_.d.ts +0 -481
- package/dist/index-ClkpS6s_.d.ts.map +0 -1
- package/dist/index-w4qop0Pe.d.cts +0 -481
- package/dist/index-w4qop0Pe.d.cts.map +0 -1
- package/dist/payload-BpNUPOnY.js +0 -13
- package/dist/payload-BpNUPOnY.js.map +0 -1
- package/dist/payload-C2KHOUoj.d.ts +0 -6
- package/dist/payload-C2KHOUoj.d.ts.map +0 -1
- package/dist/payload-CJN8fTvX.d.cts +0 -6
- package/dist/payload-CJN8fTvX.d.cts.map +0 -1
- package/dist/payload-D8YLKcJj.cjs +0 -23
- package/dist/query/index.js.map +0 -1
- package/dist/queryBuilder-BE_XhLLa.js +0 -735
- package/dist/queryBuilder-BE_XhLLa.js.map +0 -1
- package/dist/queryBuilder-J37buGCi.cjs +0 -865
- package/dist/utils/index.d.cts.map +0 -1
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js.map +0 -1
- package/src/actions/public/buildQuery.ts +0 -10
- package/src/actions/public/subscribeEntityEvents.ts +0 -93
- package/src/actions/wallet/updateEntity.ts +0 -59
- package/src/chains/braga.ts +0 -26
- package/src/chains/kaolin.ts +0 -29
- package/src/query/engine.test.ts +0 -571
- package/src/query/predicate.test.ts +0 -461
- package/src/query/predicate.ts +0 -144
- package/src/query/queryResult.test.ts +0 -270
- package/src/query/selectQueryBuilder.test.ts +0 -213
- package/src/types/attributes.ts +0 -28
- package/src/utils/validation.test.ts +0 -106
- package/src/utils/validation.ts +0 -80
- /package/dist/{types-Ci4BRClw.js → types-Bx1EKe0v.js} +0 -0
- /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
|
-
})
|
package/src/query/predicate.ts
DELETED
|
@@ -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
|
-
}
|