@arkiv-network/sdk 0.3.2-dev.0 → 0.3.2-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/dist/chains/index.d.ts +25 -25
- package/dist/{entity-OY78HYxA.d.cts → entity-DvQtQL8v.d.ts} +7 -1
- package/dist/entity-DvQtQL8v.d.ts.map +1 -0
- package/dist/{entity-o4fwHXKf.d.ts → entity-jTQZmEAd.d.cts} +7 -1
- package/dist/entity-jTQZmEAd.d.cts.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/query/index.cjs +1 -1
- package/dist/query/index.d.cts +2 -2
- package/dist/query/index.d.ts +2 -2
- package/dist/query/index.js +1 -1
- package/dist/{queryBuilder-CboWSREN.d.ts → queryBuilder-BBtwhH0G.d.ts} +17 -2
- package/dist/{queryBuilder-CboWSREN.d.ts.map → queryBuilder-BBtwhH0G.d.ts.map} +1 -1
- package/dist/{queryBuilder-n9ocnT4P.cjs → queryBuilder-D-bqHg3w.cjs} +29 -2
- package/dist/{queryBuilder-BueP5de6.js → queryBuilder-D22Tamry.js} +30 -3
- package/dist/queryBuilder-D22Tamry.js.map +1 -0
- package/dist/{queryBuilder-Bm1zGqKA.d.cts → queryBuilder-DkhyyeFr.d.cts} +17 -2
- package/dist/{queryBuilder-Bm1zGqKA.d.cts.map → queryBuilder-DkhyyeFr.d.cts.map} +1 -1
- package/dist/types/index.d.cts +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/utils/index.d.cts.map +1 -1
- package/package.json +1 -1
- package/src/query/engine.test.ts +69 -0
- package/src/query/engine.ts +8 -3
- package/src/query/queryBuilder.test.ts +34 -0
- package/src/query/queryBuilder.ts +33 -0
- package/src/types/rpcSchema.ts +7 -0
- package/dist/entity-OY78HYxA.d.cts.map +0 -1
- package/dist/entity-o4fwHXKf.d.ts.map +0 -1
- package/dist/queryBuilder-BueP5de6.js.map +0 -1
package/dist/chains/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as viem0 from "viem";
|
|
2
2
|
|
|
3
3
|
//#region src/chains/kaolin.d.ts
|
|
4
4
|
declare const kaolin: {
|
|
@@ -11,13 +11,13 @@ declare const kaolin: {
|
|
|
11
11
|
};
|
|
12
12
|
blockTime?: number | undefined | undefined;
|
|
13
13
|
contracts?: {
|
|
14
|
-
[x: string]:
|
|
15
|
-
[sourceId: number]:
|
|
14
|
+
[x: string]: viem0.ChainContract | {
|
|
15
|
+
[sourceId: number]: viem0.ChainContract | undefined;
|
|
16
16
|
} | undefined;
|
|
17
|
-
ensRegistry?:
|
|
18
|
-
ensUniversalResolver?:
|
|
19
|
-
multicall3?:
|
|
20
|
-
erc6492Verifier?:
|
|
17
|
+
ensRegistry?: viem0.ChainContract | undefined;
|
|
18
|
+
ensUniversalResolver?: viem0.ChainContract | undefined;
|
|
19
|
+
multicall3?: viem0.ChainContract | undefined;
|
|
20
|
+
erc6492Verifier?: viem0.ChainContract | undefined;
|
|
21
21
|
} | undefined;
|
|
22
22
|
ensTlds?: readonly string[] | undefined;
|
|
23
23
|
id: 60138453025;
|
|
@@ -37,9 +37,9 @@ declare const kaolin: {
|
|
|
37
37
|
sourceId?: number | undefined | undefined;
|
|
38
38
|
testnet: true;
|
|
39
39
|
custom?: Record<string, unknown> | undefined;
|
|
40
|
-
fees?:
|
|
40
|
+
fees?: viem0.ChainFees<undefined> | undefined;
|
|
41
41
|
formatters?: undefined;
|
|
42
|
-
serializers?:
|
|
42
|
+
serializers?: viem0.ChainSerializers<undefined, viem0.TransactionSerializable> | undefined;
|
|
43
43
|
readonly network: "kaolin";
|
|
44
44
|
};
|
|
45
45
|
//#endregion
|
|
@@ -59,13 +59,13 @@ declare const localhost: {
|
|
|
59
59
|
} | undefined | undefined;
|
|
60
60
|
blockTime?: number | undefined | undefined;
|
|
61
61
|
contracts?: {
|
|
62
|
-
[x: string]:
|
|
63
|
-
[sourceId: number]:
|
|
62
|
+
[x: string]: viem0.ChainContract | {
|
|
63
|
+
[sourceId: number]: viem0.ChainContract | undefined;
|
|
64
64
|
} | undefined;
|
|
65
|
-
ensRegistry?:
|
|
66
|
-
ensUniversalResolver?:
|
|
67
|
-
multicall3?:
|
|
68
|
-
erc6492Verifier?:
|
|
65
|
+
ensRegistry?: viem0.ChainContract | undefined;
|
|
66
|
+
ensUniversalResolver?: viem0.ChainContract | undefined;
|
|
67
|
+
multicall3?: viem0.ChainContract | undefined;
|
|
68
|
+
erc6492Verifier?: viem0.ChainContract | undefined;
|
|
69
69
|
} | undefined;
|
|
70
70
|
ensTlds?: readonly string[] | undefined;
|
|
71
71
|
id: 1337;
|
|
@@ -84,9 +84,9 @@ declare const localhost: {
|
|
|
84
84
|
sourceId?: number | undefined | undefined;
|
|
85
85
|
testnet?: boolean | undefined | undefined;
|
|
86
86
|
custom?: Record<string, unknown> | undefined;
|
|
87
|
-
fees?:
|
|
87
|
+
fees?: viem0.ChainFees<undefined> | undefined;
|
|
88
88
|
formatters?: undefined;
|
|
89
|
-
serializers?:
|
|
89
|
+
serializers?: viem0.ChainSerializers<undefined, viem0.TransactionSerializable> | undefined;
|
|
90
90
|
};
|
|
91
91
|
//#endregion
|
|
92
92
|
//#region src/chains/marketplace.d.ts
|
|
@@ -100,13 +100,13 @@ declare const marketplace: {
|
|
|
100
100
|
};
|
|
101
101
|
blockTime?: number | undefined | undefined;
|
|
102
102
|
contracts?: {
|
|
103
|
-
[x: string]:
|
|
104
|
-
[sourceId: number]:
|
|
103
|
+
[x: string]: viem0.ChainContract | {
|
|
104
|
+
[sourceId: number]: viem0.ChainContract | undefined;
|
|
105
105
|
} | undefined;
|
|
106
|
-
ensRegistry?:
|
|
107
|
-
ensUniversalResolver?:
|
|
108
|
-
multicall3?:
|
|
109
|
-
erc6492Verifier?:
|
|
106
|
+
ensRegistry?: viem0.ChainContract | undefined;
|
|
107
|
+
ensUniversalResolver?: viem0.ChainContract | undefined;
|
|
108
|
+
multicall3?: viem0.ChainContract | undefined;
|
|
109
|
+
erc6492Verifier?: viem0.ChainContract | undefined;
|
|
110
110
|
} | undefined;
|
|
111
111
|
ensTlds?: readonly string[] | undefined;
|
|
112
112
|
id: 60138453027;
|
|
@@ -126,9 +126,9 @@ declare const marketplace: {
|
|
|
126
126
|
sourceId?: number | undefined | undefined;
|
|
127
127
|
testnet: true;
|
|
128
128
|
custom?: Record<string, unknown> | undefined;
|
|
129
|
-
fees?:
|
|
129
|
+
fees?: viem0.ChainFees<undefined> | undefined;
|
|
130
130
|
formatters?: undefined;
|
|
131
|
-
serializers?:
|
|
131
|
+
serializers?: viem0.ChainSerializers<undefined, viem0.TransactionSerializable> | undefined;
|
|
132
132
|
readonly network: "marketplace";
|
|
133
133
|
};
|
|
134
134
|
//#endregion
|
|
@@ -19,9 +19,15 @@ type RpcEntity = {
|
|
|
19
19
|
value: number;
|
|
20
20
|
}];
|
|
21
21
|
};
|
|
22
|
+
type RpcOrderByAttribute = {
|
|
23
|
+
name: string;
|
|
24
|
+
type: "string" | "numeric";
|
|
25
|
+
desc: boolean;
|
|
26
|
+
};
|
|
22
27
|
type RpcQueryOptions = {
|
|
23
28
|
atBlock?: number;
|
|
24
29
|
includeData?: RpcIncludeData;
|
|
30
|
+
orderBy?: RpcOrderByAttribute[];
|
|
25
31
|
resultsPerPage?: number;
|
|
26
32
|
cursor?: string;
|
|
27
33
|
};
|
|
@@ -237,4 +243,4 @@ declare class Entity {
|
|
|
237
243
|
}
|
|
238
244
|
//#endregion
|
|
239
245
|
export { ArkivRpcSchema as _, MutateEntitiesReturnType as a, RpcQueryOptions as b, ExtendEntityParameters as c, DeleteEntityReturnType as d, CreateEntityParameters as f, ArkivClient as g, ChangeOwnershipReturnType as h, MutateEntitiesParameters as i, ExtendEntityReturnType as l, ChangeOwnershipParameters as m, TxParams as n, UpdateEntityParameters as o, CreateEntityReturnType as p, Attribute as r, UpdateEntityReturnType as s, Entity as t, DeleteEntityParameters as u, RpcEntity as v, MimeType as x, RpcIncludeData as y };
|
|
240
|
-
//# sourceMappingURL=entity-
|
|
246
|
+
//# sourceMappingURL=entity-DvQtQL8v.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-DvQtQL8v.d.ts","names":[],"sources":["../src/types/mimeTypes.ts","../src/types/rpcSchema.ts","../src/clients/baseClient.ts","../src/actions/wallet/changeOwnership.ts","../src/actions/wallet/createEntity.ts","../src/actions/wallet/deleteEntity.ts","../src/actions/wallet/extendEntity.ts","../src/actions/wallet/updateEntity.ts","../src/actions/wallet/mutateEntities.ts","../src/types/attributes.ts","../src/types/txParams.ts","../src/types/entity.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -19,9 +19,15 @@ type RpcEntity = {
|
|
|
19
19
|
value: number;
|
|
20
20
|
}];
|
|
21
21
|
};
|
|
22
|
+
type RpcOrderByAttribute = {
|
|
23
|
+
name: string;
|
|
24
|
+
type: "string" | "numeric";
|
|
25
|
+
desc: boolean;
|
|
26
|
+
};
|
|
22
27
|
type RpcQueryOptions = {
|
|
23
28
|
atBlock?: number;
|
|
24
29
|
includeData?: RpcIncludeData;
|
|
30
|
+
orderBy?: RpcOrderByAttribute[];
|
|
25
31
|
resultsPerPage?: number;
|
|
26
32
|
cursor?: string;
|
|
27
33
|
};
|
|
@@ -237,4 +243,4 @@ declare class Entity {
|
|
|
237
243
|
}
|
|
238
244
|
//#endregion
|
|
239
245
|
export { ArkivRpcSchema as _, MutateEntitiesReturnType as a, RpcQueryOptions as b, ExtendEntityParameters as c, DeleteEntityReturnType as d, CreateEntityParameters as f, ArkivClient as g, ChangeOwnershipReturnType as h, MutateEntitiesParameters as i, ExtendEntityReturnType as l, ChangeOwnershipParameters as m, TxParams as n, UpdateEntityParameters as o, CreateEntityReturnType as p, Attribute as r, UpdateEntityReturnType as s, Entity as t, DeleteEntityParameters as u, RpcEntity as v, MimeType as x, RpcIncludeData as y };
|
|
240
|
-
//# sourceMappingURL=entity-
|
|
246
|
+
//# sourceMappingURL=entity-jTQZmEAd.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-jTQZmEAd.d.cts","names":[],"sources":["../src/types/mimeTypes.ts","../src/types/rpcSchema.ts","../src/clients/baseClient.ts","../src/actions/wallet/changeOwnership.ts","../src/actions/wallet/createEntity.ts","../src/actions/wallet/deleteEntity.ts","../src/actions/wallet/extendEntity.ts","../src/actions/wallet/updateEntity.ts","../src/actions/wallet/mutateEntities.ts","../src/types/attributes.ts","../src/types/txParams.ts","../src/types/entity.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { _ as ArkivRpcSchema, a as MutateEntitiesReturnType, b as RpcQueryOptions, c as ExtendEntityParameters, d as DeleteEntityReturnType, f as CreateEntityParameters, g as ArkivClient, h as ChangeOwnershipReturnType, i as MutateEntitiesParameters, l as ExtendEntityReturnType, m as ChangeOwnershipParameters, n as TxParams, o as UpdateEntityParameters, p as CreateEntityReturnType, r as Attribute, s as UpdateEntityReturnType, t as Entity, u as DeleteEntityParameters, v as RpcEntity, x as MimeType, y as RpcIncludeData } from "./entity-
|
|
2
|
-
import { t as QueryBuilder } from "./queryBuilder-
|
|
1
|
+
import { _ as ArkivRpcSchema, a as MutateEntitiesReturnType, b as RpcQueryOptions, c as ExtendEntityParameters, d as DeleteEntityReturnType, f as CreateEntityParameters, g as ArkivClient, h as ChangeOwnershipReturnType, i as MutateEntitiesParameters, l as ExtendEntityReturnType, m as ChangeOwnershipParameters, n as TxParams, o as UpdateEntityParameters, p as CreateEntityReturnType, r as Attribute, s as UpdateEntityReturnType, t as Entity, u as DeleteEntityParameters, v as RpcEntity, x as MimeType, y as RpcIncludeData } from "./entity-jTQZmEAd.cjs";
|
|
2
|
+
import { t as QueryBuilder } from "./queryBuilder-DkhyyeFr.cjs";
|
|
3
3
|
import { Account, Account as Account$1, Address, Address as Address$1, Chain, Chain as Chain$1, Client, Hex, Hex as Hex$1, ParseAccount, Prettify, PublicActions, PublicClientConfig, PublicClientConfig as PublicClientConfig$1, RpcSchema, RpcSchema as RpcSchema$1, Transport, Transport as Transport$1, WalletActions, WalletClientConfig, http, toBytes, toHex, toRlp, webSocket } from "viem";
|
|
4
4
|
|
|
5
5
|
//#region src/types/events.d.ts
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { _ as ArkivRpcSchema, a as MutateEntitiesReturnType, b as RpcQueryOptions, c as ExtendEntityParameters, d as DeleteEntityReturnType, f as CreateEntityParameters, g as ArkivClient, h as ChangeOwnershipReturnType, i as MutateEntitiesParameters, l as ExtendEntityReturnType, m as ChangeOwnershipParameters, n as TxParams, o as UpdateEntityParameters, p as CreateEntityReturnType, r as Attribute, s as UpdateEntityReturnType, t as Entity, u as DeleteEntityParameters, v as RpcEntity, x as MimeType, y as RpcIncludeData } from "./entity-
|
|
2
|
-
import { t as QueryBuilder } from "./queryBuilder-
|
|
1
|
+
import { _ as ArkivRpcSchema, a as MutateEntitiesReturnType, b as RpcQueryOptions, c as ExtendEntityParameters, d as DeleteEntityReturnType, f as CreateEntityParameters, g as ArkivClient, h as ChangeOwnershipReturnType, i as MutateEntitiesParameters, l as ExtendEntityReturnType, m as ChangeOwnershipParameters, n as TxParams, o as UpdateEntityParameters, p as CreateEntityReturnType, r as Attribute, s as UpdateEntityReturnType, t as Entity, u as DeleteEntityParameters, v as RpcEntity, x as MimeType, y as RpcIncludeData } from "./entity-DvQtQL8v.js";
|
|
2
|
+
import { t as QueryBuilder } from "./queryBuilder-BBtwhH0G.js";
|
|
3
3
|
import { Account, Account as Account$1, Address, Address as Address$1, Chain, Chain as Chain$1, Client, Hex, Hex as Hex$1, ParseAccount, Prettify, PublicActions, PublicClientConfig, PublicClientConfig as PublicClientConfig$1, RpcSchema, RpcSchema as RpcSchema$1, Transport, Transport as Transport$1, WalletActions, WalletClientConfig, http, toBytes, toHex, toRlp, webSocket } from "viem";
|
|
4
4
|
|
|
5
5
|
//#region src/types/events.d.ts
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as NoEntityFoundError, r as entityFromRpcResult, t as QueryBuilder } from "./queryBuilder-
|
|
1
|
+
import { a as NoEntityFoundError, r as entityFromRpcResult, t as QueryBuilder } from "./queryBuilder-D22Tamry.js";
|
|
2
2
|
import { n as BLOCK_TIME, t as ARKIV_ADDRESS } from "./consts-CHtLBwGd.js";
|
|
3
3
|
import { createClient, decodeEventLog, http, parseAbi, publicActions, toBytes, toBytes as toBytes$1, toHex, toHex as toHex$1, toRlp, toRlp as toRlp$1, walletActions, webSocket } from "viem";
|
|
4
4
|
|
package/dist/query/index.cjs
CHANGED
package/dist/query/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "../entity-
|
|
2
|
-
import { a as PredicateType, c as gt, d as lte, f as neq, i as PredicateContainerType, l as gte, m as or, n as QueryResult, o as and, p as not, r as Predicate, s as eq, t as QueryBuilder, u as lt } from "../queryBuilder-
|
|
1
|
+
import "../entity-jTQZmEAd.cjs";
|
|
2
|
+
import { a as PredicateType, c as gt, d as lte, f as neq, i as PredicateContainerType, l as gte, m as or, n as QueryResult, o as and, p as not, r as Predicate, s as eq, t as QueryBuilder, u as lt } from "../queryBuilder-DkhyyeFr.cjs";
|
|
3
3
|
|
|
4
4
|
//#region src/query/errors.d.ts
|
|
5
5
|
declare class NoMoreResultsError extends Error {
|
package/dist/query/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "../entity-
|
|
2
|
-
import { a as PredicateType, c as gt, d as lte, f as neq, i as PredicateContainerType, l as gte, m as or, n as QueryResult, o as and, p as not, r as Predicate, s as eq, t as QueryBuilder, u as lt } from "../queryBuilder-
|
|
1
|
+
import "../entity-DvQtQL8v.js";
|
|
2
|
+
import { a as PredicateType, c as gt, d as lte, f as neq, i as PredicateContainerType, l as gte, m as or, n as QueryResult, o as and, p as not, r as Predicate, s as eq, t as QueryBuilder, u as lt } from "../queryBuilder-BBtwhH0G.js";
|
|
3
3
|
|
|
4
4
|
//#region src/query/errors.d.ts
|
|
5
5
|
declare class NoMoreResultsError extends Error {
|
package/dist/query/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as NoEntityFoundError, i as NoCursorOrLimitError, n as QueryResult, o as NoMoreResultsError, s as OffsetCannotBeLessThanZeroError, t as QueryBuilder } from "../queryBuilder-
|
|
1
|
+
import { a as NoEntityFoundError, i as NoCursorOrLimitError, n as QueryResult, o as NoMoreResultsError, s as OffsetCannotBeLessThanZeroError, t as QueryBuilder } from "../queryBuilder-D22Tamry.js";
|
|
2
2
|
|
|
3
3
|
//#region src/query/predicate.ts
|
|
4
4
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { g as ArkivClient, t as Entity } from "./entity-
|
|
1
|
+
import { g as ArkivClient, t as Entity } from "./entity-DvQtQL8v.js";
|
|
2
2
|
import { Hex } from "viem";
|
|
3
3
|
|
|
4
4
|
//#region src/query/predicate.d.ts
|
|
@@ -138,6 +138,7 @@ declare class QueryResult {
|
|
|
138
138
|
declare class QueryBuilder {
|
|
139
139
|
private _client;
|
|
140
140
|
private _ownedBy;
|
|
141
|
+
private _orderBy;
|
|
141
142
|
private _validAtBlock;
|
|
142
143
|
private _withAttributes;
|
|
143
144
|
private _withMetadata;
|
|
@@ -156,6 +157,20 @@ declare class QueryBuilder {
|
|
|
156
157
|
* builder.ownedBy("0x1234567890123456789012345678901234567890")
|
|
157
158
|
*/
|
|
158
159
|
ownedBy(ownedBy: Hex): this;
|
|
160
|
+
/**
|
|
161
|
+
* Sets the orderBy for the query.
|
|
162
|
+
* It can be called multiple times to order by multiple attributes.
|
|
163
|
+
* The order of the attributes is important. The first attribute is the primary order by attribute.
|
|
164
|
+
* @param attributeName - The name of the attribute to order by
|
|
165
|
+
* @param attributeType - The type of the attribute to order by (string or number)
|
|
166
|
+
* @param descending - The boolean value to set the order by descending
|
|
167
|
+
* @returns The QueryBuilder instance
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* const builder = new QueryBuilder(client)
|
|
171
|
+
* builder.orderBy("name", "string", true)
|
|
172
|
+
*/
|
|
173
|
+
orderBy(attributeName: string, attributeType: "string" | "number", descending?: boolean | undefined): this;
|
|
159
174
|
/**
|
|
160
175
|
* Sets the withAttributes flag which will return the attributes for the entities if true
|
|
161
176
|
* @param withAttributes - The boolean value to set
|
|
@@ -258,4 +273,4 @@ declare class QueryBuilder {
|
|
|
258
273
|
}
|
|
259
274
|
//#endregion
|
|
260
275
|
export { PredicateType as a, gt as c, lte as d, neq as f, PredicateContainerType as i, gte as l, or as m, QueryResult as n, and as o, not as p, Predicate as r, eq as s, QueryBuilder as t, lt as u };
|
|
261
|
-
//# sourceMappingURL=queryBuilder-
|
|
276
|
+
//# sourceMappingURL=queryBuilder-BBtwhH0G.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryBuilder-
|
|
1
|
+
{"version":3,"file":"queryBuilder-BBtwhH0G.d.ts","names":[],"sources":["../src/query/predicate.ts","../src/query/queryResult.ts","../src/query/queryBuilder.ts"],"sourcesContent":[],"mappings":";;;;KAAY,aAAA;KACA,sBAAA;KAEA,SAAA;QAEA;EALA,GAAA,EAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAAA,MAAA;AAEZ,CAAA,GAAY;EAEA,IAAA,EAKA,sBALA;EAKA,UAAA,EACM,SADN,EAAA;CACM;;AAclB;AAeA;AAcA;AAcA;AAcA;AAcA;AAcA;AAcA;AAaA;;iBAhHgB,EAAA,aAAe,cAAc;;ACrB7C;;;;;;;;;;ACUa,iBF0BG,GAAA,CE1BS,UAAA,EF0BO,SE1BP,EAAA,CAAA,EF0BqB,SE1BrB;;;;;;;;;;;iBFwCT,EAAA,uCAAyC;;;;;;;;;;;iBAczC,GAAA,uCAA0C;;;;;;;;;;;iBAc1C,EAAA,uCAAyC;;;;;;;;;;;iBAczC,GAAA,uCAA0C;;;;;;;;;;;iBAc1C,EAAA,uCAAyC;;;;;;;;;;;iBAczC,GAAA,uCAA0C;;;;;;;;;;iBAa1C,GAAA,eAAkB;;;cCrIrB,WAAA;YACD;EDLA,QAAA,eAAa;EACb,QAAA,OAAA;EAEA,QAAA,MAAS;EAET,QAAA,aAAA;EAKA,QAAA,aAAA;EACM,IAAA,YAAA,CAAA,CAAA,ECEI,YDFJ;EAAS,IAAA,MAAA,CAAA,CAAA,EAAA,MAAA,GAAA,SAAA;EAcX,WAAE,CAAA,QAAa,ECHjB,MDG+B,EAAA,EAAA,YAAS,ECFpC,YDEoC,EAAA,MAAA,EAAA,MAAA,GAAA,SAAA,EAAA,KAAA,EAAA,MAAA,GAAA,SAAA,EAAA,YAAA,EAAA,MAAA,GAAA,SAAA;EAetC,IAAA,CAAA,CAAG,ECJP,ODIO,CAAA,IAAa,CAAA;EAchB,WAAE,CAAA,CAAA,EAAA,OAAuC;AAczD;;;AApEA;AACA;AAEA;;;;AAQ2B,cEGd,YAAA,CFHc;EAcX,QAAE,OAAA;EAeF,QAAG,QAAA;EAcH,QAAE,QAAA;EAcF,QAAG,aAAuC;EAc1C,QAAE,eAAuC;EAczC,QAAG,aAAuC;EAc1C,QAAE,YAAuC;EAczC,QAAG,MAAA;EAaH,QAAG,OAAA;;sBE/GG;;ADtBtB;;;;;;;;mBCoCmB;;AA1BnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAiKoB,cAAc;;;;;;;;;;;WAmBrB,QAAA;;;;;;;;;;WAgCA"}
|
|
@@ -82,8 +82,8 @@ function processPredicates(predicates) {
|
|
|
82
82
|
}).join(" && ");
|
|
83
83
|
}
|
|
84
84
|
async function processQuery(client, queryParams) {
|
|
85
|
-
const { predicates, limit, cursor, ownedBy, validAtBlock, withAttributes, withMetadata, withPayload } = queryParams;
|
|
86
|
-
console.debug(`Processing query with params: predicates: ${predicates}, cursor: ${cursor}, limit: ${limit}, ownedBy: ${ownedBy}, validAtBlock: ${validAtBlock}, withAttributes: ${withAttributes}, withMetadata: ${withMetadata}, withPayload: ${withPayload}`);
|
|
85
|
+
const { predicates, limit, cursor, ownedBy, orderBy, validAtBlock, withAttributes, withMetadata, withPayload } = queryParams;
|
|
86
|
+
console.debug(`Processing query with params: predicates: ${JSON.stringify(predicates)}, cursor: ${cursor}, limit: ${limit}, ownedBy: ${ownedBy}, orderBy: ${JSON.stringify(orderBy)}, validAtBlock: ${validAtBlock}, withAttributes: ${withAttributes}, withMetadata: ${withMetadata}, withPayload: ${withPayload}`);
|
|
87
87
|
let query = processPredicates(predicates);
|
|
88
88
|
if (ownedBy) query += ` && $owner=${ownedBy}`;
|
|
89
89
|
query = query.trim();
|
|
@@ -99,9 +99,11 @@ async function processQuery(client, queryParams) {
|
|
|
99
99
|
if (validAtBlock !== void 0) queryOptions.atBlock = Number(validAtBlock);
|
|
100
100
|
if (limit !== void 0) queryOptions.resultsPerPage = limit;
|
|
101
101
|
if (cursor !== void 0) queryOptions.cursor = cursor;
|
|
102
|
+
if (orderBy !== void 0) queryOptions.orderBy = orderBy;
|
|
102
103
|
console.debug(`Built query to send: ${query}, queryOptions: ${JSON.stringify({
|
|
103
104
|
includeData: queryOptions.includeData,
|
|
104
105
|
atBlock: queryOptions.atBlock?.toString(),
|
|
106
|
+
orderBy: queryOptions.orderBy,
|
|
105
107
|
resultsPerPage: queryOptions.resultsPerPage,
|
|
106
108
|
cursor: queryOptions.cursor
|
|
107
109
|
})}`);
|
|
@@ -163,6 +165,7 @@ var QueryResult = class {
|
|
|
163
165
|
var QueryBuilder = class {
|
|
164
166
|
_client;
|
|
165
167
|
_ownedBy;
|
|
168
|
+
_orderBy;
|
|
166
169
|
_validAtBlock;
|
|
167
170
|
_withAttributes;
|
|
168
171
|
_withMetadata;
|
|
@@ -188,6 +191,28 @@ var QueryBuilder = class {
|
|
|
188
191
|
return this;
|
|
189
192
|
}
|
|
190
193
|
/**
|
|
194
|
+
* Sets the orderBy for the query.
|
|
195
|
+
* It can be called multiple times to order by multiple attributes.
|
|
196
|
+
* The order of the attributes is important. The first attribute is the primary order by attribute.
|
|
197
|
+
* @param attributeName - The name of the attribute to order by
|
|
198
|
+
* @param attributeType - The type of the attribute to order by (string or number)
|
|
199
|
+
* @param descending - The boolean value to set the order by descending
|
|
200
|
+
* @returns The QueryBuilder instance
|
|
201
|
+
*
|
|
202
|
+
* @example
|
|
203
|
+
* const builder = new QueryBuilder(client)
|
|
204
|
+
* builder.orderBy("name", "string", true)
|
|
205
|
+
*/
|
|
206
|
+
orderBy(attributeName, attributeType, descending = void 0) {
|
|
207
|
+
if (!this._orderBy) this._orderBy = [];
|
|
208
|
+
this._orderBy.push({
|
|
209
|
+
name: attributeName,
|
|
210
|
+
type: attributeType === "number" ? "numeric" : attributeType,
|
|
211
|
+
desc: !!descending
|
|
212
|
+
});
|
|
213
|
+
return this;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
191
216
|
* Sets the withAttributes flag which will return the attributes for the entities if true
|
|
192
217
|
* @param withAttributes - The boolean value to set
|
|
193
218
|
* @returns The QueryBuilder instance
|
|
@@ -303,6 +328,7 @@ var QueryBuilder = class {
|
|
|
303
328
|
limit: this._limit,
|
|
304
329
|
cursor: this._cursor,
|
|
305
330
|
ownedBy: this._ownedBy,
|
|
331
|
+
orderBy: this._orderBy,
|
|
306
332
|
validAtBlock: this._validAtBlock,
|
|
307
333
|
withAttributes: this._withAttributes,
|
|
308
334
|
withMetadata: this._withMetadata,
|
|
@@ -328,6 +354,7 @@ var QueryBuilder = class {
|
|
|
328
354
|
limit: this._limit,
|
|
329
355
|
cursor: this._cursor,
|
|
330
356
|
ownedBy: this._ownedBy,
|
|
357
|
+
orderBy: void 0,
|
|
331
358
|
validAtBlock: this._validAtBlock,
|
|
332
359
|
withAttributes: false,
|
|
333
360
|
withMetadata: false,
|
|
@@ -82,8 +82,8 @@ function processPredicates(predicates) {
|
|
|
82
82
|
}).join(" && ");
|
|
83
83
|
}
|
|
84
84
|
async function processQuery(client, queryParams) {
|
|
85
|
-
const { predicates, limit, cursor, ownedBy, validAtBlock, withAttributes, withMetadata, withPayload } = queryParams;
|
|
86
|
-
console.debug(`Processing query with params: predicates: ${predicates}, cursor: ${cursor}, limit: ${limit}, ownedBy: ${ownedBy}, validAtBlock: ${validAtBlock}, withAttributes: ${withAttributes}, withMetadata: ${withMetadata}, withPayload: ${withPayload}`);
|
|
85
|
+
const { predicates, limit, cursor, ownedBy, orderBy, validAtBlock, withAttributes, withMetadata, withPayload } = queryParams;
|
|
86
|
+
console.debug(`Processing query with params: predicates: ${JSON.stringify(predicates)}, cursor: ${cursor}, limit: ${limit}, ownedBy: ${ownedBy}, orderBy: ${JSON.stringify(orderBy)}, validAtBlock: ${validAtBlock}, withAttributes: ${withAttributes}, withMetadata: ${withMetadata}, withPayload: ${withPayload}`);
|
|
87
87
|
let query = processPredicates(predicates);
|
|
88
88
|
if (ownedBy) query += ` && $owner=${ownedBy}`;
|
|
89
89
|
query = query.trim();
|
|
@@ -99,9 +99,11 @@ async function processQuery(client, queryParams) {
|
|
|
99
99
|
if (validAtBlock !== void 0) queryOptions.atBlock = Number(validAtBlock);
|
|
100
100
|
if (limit !== void 0) queryOptions.resultsPerPage = limit;
|
|
101
101
|
if (cursor !== void 0) queryOptions.cursor = cursor;
|
|
102
|
+
if (orderBy !== void 0) queryOptions.orderBy = orderBy;
|
|
102
103
|
console.debug(`Built query to send: ${query}, queryOptions: ${JSON.stringify({
|
|
103
104
|
includeData: queryOptions.includeData,
|
|
104
105
|
atBlock: queryOptions.atBlock?.toString(),
|
|
106
|
+
orderBy: queryOptions.orderBy,
|
|
105
107
|
resultsPerPage: queryOptions.resultsPerPage,
|
|
106
108
|
cursor: queryOptions.cursor
|
|
107
109
|
})}`);
|
|
@@ -163,6 +165,7 @@ var QueryResult = class {
|
|
|
163
165
|
var QueryBuilder = class {
|
|
164
166
|
_client;
|
|
165
167
|
_ownedBy;
|
|
168
|
+
_orderBy;
|
|
166
169
|
_validAtBlock;
|
|
167
170
|
_withAttributes;
|
|
168
171
|
_withMetadata;
|
|
@@ -188,6 +191,28 @@ var QueryBuilder = class {
|
|
|
188
191
|
return this;
|
|
189
192
|
}
|
|
190
193
|
/**
|
|
194
|
+
* Sets the orderBy for the query.
|
|
195
|
+
* It can be called multiple times to order by multiple attributes.
|
|
196
|
+
* The order of the attributes is important. The first attribute is the primary order by attribute.
|
|
197
|
+
* @param attributeName - The name of the attribute to order by
|
|
198
|
+
* @param attributeType - The type of the attribute to order by (string or number)
|
|
199
|
+
* @param descending - The boolean value to set the order by descending
|
|
200
|
+
* @returns The QueryBuilder instance
|
|
201
|
+
*
|
|
202
|
+
* @example
|
|
203
|
+
* const builder = new QueryBuilder(client)
|
|
204
|
+
* builder.orderBy("name", "string", true)
|
|
205
|
+
*/
|
|
206
|
+
orderBy(attributeName, attributeType, descending = void 0) {
|
|
207
|
+
if (!this._orderBy) this._orderBy = [];
|
|
208
|
+
this._orderBy.push({
|
|
209
|
+
name: attributeName,
|
|
210
|
+
type: attributeType === "number" ? "numeric" : attributeType,
|
|
211
|
+
desc: !!descending
|
|
212
|
+
});
|
|
213
|
+
return this;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
191
216
|
* Sets the withAttributes flag which will return the attributes for the entities if true
|
|
192
217
|
* @param withAttributes - The boolean value to set
|
|
193
218
|
* @returns The QueryBuilder instance
|
|
@@ -303,6 +328,7 @@ var QueryBuilder = class {
|
|
|
303
328
|
limit: this._limit,
|
|
304
329
|
cursor: this._cursor,
|
|
305
330
|
ownedBy: this._ownedBy,
|
|
331
|
+
orderBy: this._orderBy,
|
|
306
332
|
validAtBlock: this._validAtBlock,
|
|
307
333
|
withAttributes: this._withAttributes,
|
|
308
334
|
withMetadata: this._withMetadata,
|
|
@@ -328,6 +354,7 @@ var QueryBuilder = class {
|
|
|
328
354
|
limit: this._limit,
|
|
329
355
|
cursor: this._cursor,
|
|
330
356
|
ownedBy: this._ownedBy,
|
|
357
|
+
orderBy: void 0,
|
|
331
358
|
validAtBlock: this._validAtBlock,
|
|
332
359
|
withAttributes: false,
|
|
333
360
|
withMetadata: false,
|
|
@@ -338,4 +365,4 @@ var QueryBuilder = class {
|
|
|
338
365
|
|
|
339
366
|
//#endregion
|
|
340
367
|
export { NoEntityFoundError as a, NoCursorOrLimitError as i, QueryResult as n, NoMoreResultsError as o, entityFromRpcResult as r, OffsetCannotBeLessThanZeroError as s, QueryBuilder as t };
|
|
341
|
-
//# sourceMappingURL=queryBuilder-
|
|
368
|
+
//# sourceMappingURL=queryBuilder-D22Tamry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryBuilder-D22Tamry.js","names":["predicate","queryOptions: RpcQueryOptions"],"sources":["../src/query/errors.ts","../src/types/entity.ts","../src/utils/entities.ts","../src/query/engine.ts","../src/query/queryResult.ts","../src/query/queryBuilder.ts"],"sourcesContent":["export class NoMoreResultsError extends Error {\n constructor() {\n super(\"No more results\")\n }\n}\n\nexport class NoCursorOrLimitError extends Error {\n constructor() {\n super(\"Cursor and limit must be defined to fetch next\")\n }\n}\n\nexport class OffsetCannotBeLessThanZeroError extends Error {\n constructor() {\n super(\"Offset cannot be less than 0\")\n }\n}\n\nexport class NoEntityFoundError extends Error {\n constructor() {\n super(\"No entity found\")\n }\n}\n","import { bytesToString, type Hex } from \"viem\"\nimport type { MimeType } from \"../types\"\nimport type { Attribute } from \"./attributes\"\n\nexport class Entity {\n key: Hex\n owner: Hex\n expiresAtBlock: bigint\n payload: Uint8Array\n attributes: Attribute[]\n contentType: MimeType\n\n constructor(\n key: Hex,\n contentType: MimeType,\n owner: Hex,\n expiresAtBlock: bigint,\n payload: Uint8Array,\n attributes: Attribute[],\n ) {\n this.key = key\n this.owner = owner\n this.expiresAtBlock = expiresAtBlock\n this.payload = payload\n this.attributes = attributes\n this.contentType = contentType\n }\n\n toText(): string {\n return bytesToString(this.payload)\n }\n\n toJson(): any {\n return JSON.parse(bytesToString(this.payload))\n }\n}\n","import { toBytes } from \"viem\"\nimport { Entity } from \"../types/entity\"\nimport type { RpcEntity } from \"../types/rpcSchema\"\n\nexport async function entityFromRpcResult(rpcEntity: RpcEntity) {\n return new Entity(\n rpcEntity.key,\n rpcEntity.contentType,\n rpcEntity.owner,\n rpcEntity.expiresAt,\n toBytes(rpcEntity.value),\n [\n ...(rpcEntity.stringAttributes ?? []).map(({ key, value }) => ({\n key,\n value,\n })),\n ...(rpcEntity.numericAttributes ?? []).map(({ key, value }) => ({\n key,\n value: Number(value),\n })),\n ],\n )\n}\n","import type { Hex } from \"viem\"\nimport type { ArkivClient } from \"../clients/baseClient\"\nimport type { RpcOrderByAttribute, RpcQueryOptions } from \"../types/rpcSchema\"\nimport type { Predicate } from \"./predicate\"\n\nfunction processPredicates(predicates: Predicate[]): string {\n const processValue = (value: string | number) => {\n if (typeof value === \"string\") {\n return `\"${value}\"`\n }\n return value\n }\n return predicates\n .map((predicate) => {\n switch (predicate.type) {\n case \"eq\":\n return `${predicate.key} = ${processValue(predicate.value)}`\n case \"neq\":\n return `${predicate.key} != ${processValue(predicate.value)}`\n case \"gt\":\n return `${predicate.key} > ${processValue(predicate.value)}`\n case \"gte\":\n return `${predicate.key} >= ${processValue(predicate.value)}`\n case \"lt\":\n return `${predicate.key} < ${processValue(predicate.value)}`\n case \"lte\":\n return `${predicate.key} <= ${processValue(predicate.value)}`\n case \"not\":\n return `!${predicate.key}`\n case \"or\":\n return `(${predicate.predicates.map((predicate) => processPredicates([predicate])).join(\" || \")})`\n case \"and\":\n return `(${predicate.predicates.map((predicate) => processPredicates([predicate])).join(\" && \")})`\n default:\n return \"\"\n }\n })\n .join(\" && \")\n}\n\nexport async function processQuery(\n client: ArkivClient,\n queryParams: {\n predicates: Predicate[]\n limit: number | undefined\n cursor: string | undefined\n ownedBy: Hex | undefined\n orderBy: RpcOrderByAttribute[] | undefined\n validAtBlock?: bigint | undefined\n withAttributes?: boolean | undefined\n withMetadata?: boolean | undefined\n withPayload?: boolean | undefined\n },\n) {\n const {\n predicates,\n limit,\n cursor,\n ownedBy,\n orderBy,\n validAtBlock,\n withAttributes,\n withMetadata,\n withPayload,\n } = queryParams\n\n console.debug(\n `Processing query with params: predicates: ${JSON.stringify(predicates)}, cursor: ${cursor}, limit: ${limit}, ownedBy: ${ownedBy}, orderBy: ${JSON.stringify(orderBy)}, validAtBlock: ${validAtBlock}, withAttributes: ${withAttributes}, withMetadata: ${withMetadata}, withPayload: ${withPayload}`,\n )\n\n let query = processPredicates(predicates)\n if (ownedBy) {\n query += ` && $owner=${ownedBy}`\n }\n\n // remove leading and trailing spaces and leading &&\n query = query.trim()\n if (query.startsWith(\"&& \")) {\n query = query.slice(3)\n }\n\n const queryOptions: RpcQueryOptions = {\n includeData: {\n key: true,\n attributes: withAttributes ?? false,\n payload: withPayload ?? false,\n contentType: withMetadata ?? false,\n expiration: withMetadata ?? false,\n owner: withMetadata ?? false,\n },\n }\n\n if (validAtBlock !== undefined) {\n queryOptions.atBlock = Number(validAtBlock)\n }\n if (limit !== undefined) {\n queryOptions.resultsPerPage = limit\n }\n if (cursor !== undefined) {\n queryOptions.cursor = cursor\n }\n if (orderBy !== undefined) {\n queryOptions.orderBy = orderBy\n }\n\n console.debug(\n `Built query to send: ${query}, queryOptions: ${JSON.stringify({ includeData: queryOptions.includeData, atBlock: queryOptions.atBlock?.toString(), orderBy: queryOptions.orderBy, resultsPerPage: queryOptions.resultsPerPage, cursor: queryOptions.cursor })}`,\n )\n\n const result = await client.request({\n method: \"arkiv_query\",\n params: [query, queryOptions],\n })\n console.debug(\"Raw result from query: \", result)\n\n return result\n}\n","import type { Entity } from \"../types/entity\"\nimport { NoCursorOrLimitError, NoMoreResultsError } from \"./errors\"\nimport type { QueryBuilder } from \"./queryBuilder\"\n\nexport class QueryResult {\n entities: Entity[]\n private _endOfIteration: boolean\n private _cursor: string | undefined\n private _limit: number | undefined\n private _validAtBlock: bigint | undefined\n private _queryBuilder: QueryBuilder\n\n // Public getters for internal state\n get queryBuilder(): QueryBuilder {\n return this._queryBuilder\n }\n\n get cursor(): string | undefined {\n return this._cursor\n }\n\n constructor(\n entities: Entity[],\n queryBuilder: QueryBuilder,\n cursor: string | undefined,\n limit: number | undefined,\n validAtBlock: bigint | undefined,\n ) {\n this.entities = entities\n this._queryBuilder = queryBuilder\n this._endOfIteration = !limit || entities.length < limit\n this._cursor = cursor\n this._limit = limit\n this._validAtBlock = validAtBlock\n }\n\n async next() {\n if (this._cursor === undefined || this._limit === undefined) {\n throw new NoCursorOrLimitError()\n }\n if (this._endOfIteration) {\n throw new NoMoreResultsError()\n }\n this._queryBuilder.cursor(this._cursor)\n const result = await this._queryBuilder.fetch()\n this.entities = result.entities\n // Update the query builder reference\n this._queryBuilder = result.queryBuilder\n // Check if we've reached the end (no more cursor or we got fewer entities than limit)\n this._endOfIteration = !result.cursor || result.entities.length < this._limit\n // Update the cursor\n this._cursor = result.cursor\n\n // TODO check current block height and if it is not too old\n console.debug(\"Current block height for next page: \", this._validAtBlock)\n }\n\n hasNextPage() {\n return !this._endOfIteration\n }\n}\n","import type { Hex } from \"viem\"\nimport type { ArkivClient } from \"../clients/baseClient\"\nimport type { RpcOrderByAttribute } from \"../types/rpcSchema\"\nimport { entityFromRpcResult } from \"../utils/entities\"\nimport { processQuery } from \"./engine\"\nimport type { Predicate } from \"./predicate\"\nimport { QueryResult } from \"./queryResult\"\n\n/**\n * QueryBuilder is a helper class to build queries to the Arkiv DBChains.\n * It can be used to fetch entities from the Arkiv DBChains. It follows the Builder pattern allowing chaining of methods.\n * @param client - The Arkiv client\n * @returns The QueryBuilder instance {@link QueryBuilder}\n */\nexport class QueryBuilder {\n private _client: ArkivClient\n private _ownedBy: Hex | undefined\n private _orderBy: RpcOrderByAttribute[] | undefined\n private _validAtBlock: bigint | undefined\n private _withAttributes: boolean | undefined\n private _withMetadata: boolean | undefined\n private _withPayload: boolean | undefined\n private _limit: number | undefined\n private _cursor: string | undefined\n private _predicates: Predicate[]\n\n constructor(client: ArkivClient) {\n this._client = client\n this._predicates = []\n }\n\n /**\n * Sets the ownedBy filter\n * @param ownedBy - The address of the owner\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.ownedBy(\"0x1234567890123456789012345678901234567890\")\n */\n ownedBy(ownedBy: Hex) {\n this._ownedBy = ownedBy\n return this\n }\n\n /**\n * Sets the orderBy for the query.\n * It can be called multiple times to order by multiple attributes.\n * The order of the attributes is important. The first attribute is the primary order by attribute.\n * @param attributeName - The name of the attribute to order by\n * @param attributeType - The type of the attribute to order by (string or number)\n * @param descending - The boolean value to set the order by descending\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.orderBy(\"name\", \"string\", true)\n */\n orderBy(\n attributeName: string,\n attributeType: \"string\" | \"number\",\n descending: boolean | undefined = undefined,\n ) {\n if (!this._orderBy) {\n this._orderBy = []\n }\n this._orderBy.push({\n name: attributeName,\n type: attributeType === \"number\" ? \"numeric\" : attributeType,\n desc: !!descending,\n } as RpcOrderByAttribute)\n return this\n }\n\n /**\n * Sets the withAttributes flag which will return the attributes for the entities if true\n * @param withAttributes - The boolean value to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.withAttributes(true)\n */\n withAttributes(withAttributes: boolean = true) {\n this._withAttributes = withAttributes\n return this\n }\n\n /**\n * Sets the withMetadata flag which will return the metadata (like owner, expiredAt, etc.) for the entities if true\n * @param withMetadata - The boolean value to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.withMetadata(true)\n */\n withMetadata(withMetadata: boolean = true) {\n this._withMetadata = withMetadata\n return this\n }\n\n /**\n * Sets the withPayload flag which will return the payload for the entities if true\n * @param withPayload - The boolean value to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.withPayload(true)\n */\n withPayload(withPayload: boolean = true) {\n this._withPayload = withPayload\n return this\n }\n\n /**\n * Sets the limit for the query\n * @param limit - The number of entities to return\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.limit(10)\n */\n limit(limit: number) {\n this._limit = limit\n return this\n }\n\n /**\n * Sets the cursor for the query - it is advances setting which rather shouldn't be used manually but it is provided from query result if limit is used (pagination).\n * @param cursor - The cursor to set which tells to RPC Query server where to start or continue the query.\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.offset(10)\n */\n cursor(cursor: string) {\n this._cursor = cursor\n return this\n }\n\n /**\n * Sets the validAtBlock for the query which tells at which block height the state we are intested.\n * If not set, the latest block is used.\n * @param validAtBlock - The block number to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.validAtBlock(10000)\n */\n validAtBlock(validAtBlock: bigint) {\n this._validAtBlock = validAtBlock\n return this\n }\n\n /**\n * Sets the predicates for the query limiting the results. It can be a single predicate or an array of predicates combined with 'and'.\n * Predicates can be nested using 'or' and 'and' predicates.\n * @param predicates - The predicates to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.where(eq(\"name\", \"John\"))\n * builder.where([eq(\"name\", \"John\"), eq(\"age\", 30)])\n * builder.where([eq(\"name\", \"John\"), or([eq(\"age\", 30), eq(\"age\", 31)])])\n * builder.where([eq(\"name\", \"John\"), and([eq(\"age\", 30), eq(\"age\", 31)])])\n * builder.where([eq(\"name\", \"John\"), or([eq(\"age\", 30), and([eq(\"age\", 31), eq(\"age\", 32)])])])\n * builder.where([eq(\"name\", \"John\"), and([eq(\"age\", 30), or([eq(\"age\", 31), eq(\"age\", 32)])])])\n * builder.where([eq(\"name\", \"John\"), and([eq(\"age\", 30), or([eq(\"age\", 31), and([eq(\"age\", 32), eq(\"age\", 33)])])])])\n */\n where(predicates: Predicate[] | Predicate) {\n if (Array.isArray(predicates)) {\n this._predicates.push(...predicates)\n } else {\n this._predicates.push(predicates)\n }\n return this\n }\n\n /**\n * Fetches the entities from the query. Re\n * It will return a QueryResult instance which can be used to fetch the next and previous pages.\n * @returns The QueryResult instance {@link QueryResult}\n *\n * @example\n * const builder = new QueryBuilder(client)\n * const result = await builder.where(eq(\"name\", \"John\")).fetch()\n * // result = { entities: [Entity, Entity, Entity], next: async () => QueryResult, previous: async () => QueryResult }\n */\n async fetch() {\n const queryResult = await processQuery(this._client, {\n predicates: this._predicates,\n limit: this._limit,\n cursor: this._cursor,\n ownedBy: this._ownedBy,\n orderBy: this._orderBy,\n validAtBlock: this._validAtBlock,\n withAttributes: this._withAttributes,\n withMetadata: this._withMetadata,\n withPayload: this._withPayload,\n })\n\n const entities = await Promise.all(\n queryResult.data.map((entity) => entityFromRpcResult(entity)),\n )\n\n this.cursor(queryResult.cursor)\n this.validAtBlock(queryResult.blockNumber)\n\n return new QueryResult(entities, this, this._cursor, this._limit, this._validAtBlock)\n }\n\n /**\n * Counts the entities from the query.\n * @returns The number of entities\n *\n * @example\n * const builder = new QueryBuilder(client)\n * const result = await builder.where(eq(\"name\", \"John\")).count()\n * // result = 10\n */\n async count() {\n const queryResult = await processQuery(this._client, {\n predicates: this._predicates,\n limit: this._limit,\n cursor: this._cursor,\n ownedBy: this._ownedBy,\n orderBy: undefined,\n validAtBlock: this._validAtBlock,\n withAttributes: false,\n withMetadata: false,\n withPayload: false,\n })\n\n return queryResult.data.length ?? 0\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { g as ArkivClient, t as Entity } from "./entity-
|
|
1
|
+
import { g as ArkivClient, t as Entity } from "./entity-jTQZmEAd.cjs";
|
|
2
2
|
import { Hex } from "viem";
|
|
3
3
|
|
|
4
4
|
//#region src/query/predicate.d.ts
|
|
@@ -138,6 +138,7 @@ declare class QueryResult {
|
|
|
138
138
|
declare class QueryBuilder {
|
|
139
139
|
private _client;
|
|
140
140
|
private _ownedBy;
|
|
141
|
+
private _orderBy;
|
|
141
142
|
private _validAtBlock;
|
|
142
143
|
private _withAttributes;
|
|
143
144
|
private _withMetadata;
|
|
@@ -156,6 +157,20 @@ declare class QueryBuilder {
|
|
|
156
157
|
* builder.ownedBy("0x1234567890123456789012345678901234567890")
|
|
157
158
|
*/
|
|
158
159
|
ownedBy(ownedBy: Hex): this;
|
|
160
|
+
/**
|
|
161
|
+
* Sets the orderBy for the query.
|
|
162
|
+
* It can be called multiple times to order by multiple attributes.
|
|
163
|
+
* The order of the attributes is important. The first attribute is the primary order by attribute.
|
|
164
|
+
* @param attributeName - The name of the attribute to order by
|
|
165
|
+
* @param attributeType - The type of the attribute to order by (string or number)
|
|
166
|
+
* @param descending - The boolean value to set the order by descending
|
|
167
|
+
* @returns The QueryBuilder instance
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* const builder = new QueryBuilder(client)
|
|
171
|
+
* builder.orderBy("name", "string", true)
|
|
172
|
+
*/
|
|
173
|
+
orderBy(attributeName: string, attributeType: "string" | "number", descending?: boolean | undefined): this;
|
|
159
174
|
/**
|
|
160
175
|
* Sets the withAttributes flag which will return the attributes for the entities if true
|
|
161
176
|
* @param withAttributes - The boolean value to set
|
|
@@ -258,4 +273,4 @@ declare class QueryBuilder {
|
|
|
258
273
|
}
|
|
259
274
|
//#endregion
|
|
260
275
|
export { PredicateType as a, gt as c, lte as d, neq as f, PredicateContainerType as i, gte as l, or as m, QueryResult as n, and as o, not as p, Predicate as r, eq as s, QueryBuilder as t, lt as u };
|
|
261
|
-
//# sourceMappingURL=queryBuilder-
|
|
276
|
+
//# sourceMappingURL=queryBuilder-DkhyyeFr.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryBuilder-
|
|
1
|
+
{"version":3,"file":"queryBuilder-DkhyyeFr.d.cts","names":[],"sources":["../src/query/predicate.ts","../src/query/queryResult.ts","../src/query/queryBuilder.ts"],"sourcesContent":[],"mappings":";;;;KAAY,aAAA;KACA,sBAAA;KAEA,SAAA;QAEA;EALA,GAAA,EAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAAA,MAAA;AAEZ,CAAA,GAAY;EAEA,IAAA,EAKA,sBALA;EAKA,UAAA,EACM,SADN,EAAA;CACM;;AAclB;AAeA;AAcA;AAcA;AAcA;AAcA;AAcA;AAcA;AAaA;;iBAhHgB,EAAA,aAAe,cAAc;;ACrB7C;;;;;;;;;;ACUa,iBF0BG,GAAA,CE1BS,UAAA,EF0BO,SE1BP,EAAA,CAAA,EF0BqB,SE1BrB;;;;;;;;;;;iBFwCT,EAAA,uCAAyC;;;;;;;;;;;iBAczC,GAAA,uCAA0C;;;;;;;;;;;iBAc1C,EAAA,uCAAyC;;;;;;;;;;;iBAczC,GAAA,uCAA0C;;;;;;;;;;;iBAc1C,EAAA,uCAAyC;;;;;;;;;;;iBAczC,GAAA,uCAA0C;;;;;;;;;;iBAa1C,GAAA,eAAkB;;;cCrIrB,WAAA;YACD;EDLA,QAAA,eAAa;EACb,QAAA,OAAA;EAEA,QAAA,MAAS;EAET,QAAA,aAAA;EAKA,QAAA,aAAA;EACM,IAAA,YAAA,CAAA,CAAA,ECEI,YDFJ;EAAS,IAAA,MAAA,CAAA,CAAA,EAAA,MAAA,GAAA,SAAA;EAcX,WAAE,CAAA,QAAa,ECHjB,MDG+B,EAAA,EAAA,YAAS,ECFpC,YDEoC,EAAA,MAAA,EAAA,MAAA,GAAA,SAAA,EAAA,KAAA,EAAA,MAAA,GAAA,SAAA,EAAA,YAAA,EAAA,MAAA,GAAA,SAAA;EAetC,IAAA,CAAA,CAAG,ECJP,ODIO,CAAA,IAAa,CAAA;EAchB,WAAE,CAAA,CAAA,EAAA,OAAuC;AAczD;;;AApEA;AACA;AAEA;;;;AAQ2B,cEGd,YAAA,CFHc;EAcX,QAAE,OAAA;EAeF,QAAG,QAAA;EAcH,QAAE,QAAA;EAcF,QAAG,aAAuC;EAc1C,QAAE,eAAuC;EAczC,QAAG,aAAuC;EAc1C,QAAE,YAAuC;EAczC,QAAG,MAAA;EAaH,QAAG,OAAA;;sBE/GG;;ADtBtB;;;;;;;;mBCoCmB;;AA1BnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAiKoB,cAAc;;;;;;;;;;;WAmBrB,QAAA;;;;;;;;;;WAgCA"}
|
package/dist/types/index.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _ as ArkivRpcSchema, a as MutateEntitiesReturnType, b as RpcQueryOptions, c as ExtendEntityParameters, d as DeleteEntityReturnType, f as CreateEntityParameters, h as ChangeOwnershipReturnType, i as MutateEntitiesParameters, l as ExtendEntityReturnType, m as ChangeOwnershipParameters, n as TxParams, o as UpdateEntityParameters, p as CreateEntityReturnType, r as Attribute, s as UpdateEntityReturnType, t as Entity, u as DeleteEntityParameters, v as RpcEntity, x as MimeType, y as RpcIncludeData } from "../entity-
|
|
1
|
+
import { _ as ArkivRpcSchema, a as MutateEntitiesReturnType, b as RpcQueryOptions, c as ExtendEntityParameters, d as DeleteEntityReturnType, f as CreateEntityParameters, h as ChangeOwnershipReturnType, i as MutateEntitiesParameters, l as ExtendEntityReturnType, m as ChangeOwnershipParameters, n as TxParams, o as UpdateEntityParameters, p as CreateEntityReturnType, r as Attribute, s as UpdateEntityReturnType, t as Entity, u as DeleteEntityParameters, v as RpcEntity, x as MimeType, y as RpcIncludeData } from "../entity-jTQZmEAd.cjs";
|
|
2
2
|
export { ArkivRpcSchema, Attribute, ChangeOwnershipParameters, ChangeOwnershipReturnType, CreateEntityParameters, CreateEntityReturnType, DeleteEntityParameters, DeleteEntityReturnType, Entity, ExtendEntityParameters, ExtendEntityReturnType, MimeType, MutateEntitiesParameters, MutateEntitiesReturnType, RpcEntity, RpcIncludeData, RpcQueryOptions, TxParams, UpdateEntityParameters, UpdateEntityReturnType };
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _ as ArkivRpcSchema, a as MutateEntitiesReturnType, b as RpcQueryOptions, c as ExtendEntityParameters, d as DeleteEntityReturnType, f as CreateEntityParameters, h as ChangeOwnershipReturnType, i as MutateEntitiesParameters, l as ExtendEntityReturnType, m as ChangeOwnershipParameters, n as TxParams, o as UpdateEntityParameters, p as CreateEntityReturnType, r as Attribute, s as UpdateEntityReturnType, t as Entity, u as DeleteEntityParameters, v as RpcEntity, x as MimeType, y as RpcIncludeData } from "../entity-
|
|
1
|
+
import { _ as ArkivRpcSchema, a as MutateEntitiesReturnType, b as RpcQueryOptions, c as ExtendEntityParameters, d as DeleteEntityReturnType, f as CreateEntityParameters, h as ChangeOwnershipReturnType, i as MutateEntitiesParameters, l as ExtendEntityReturnType, m as ChangeOwnershipParameters, n as TxParams, o as UpdateEntityParameters, p as CreateEntityReturnType, r as Attribute, s as UpdateEntityReturnType, t as Entity, u as DeleteEntityParameters, v as RpcEntity, x as MimeType, y as RpcIncludeData } from "../entity-DvQtQL8v.js";
|
|
2
2
|
export { ArkivRpcSchema, Attribute, ChangeOwnershipParameters, ChangeOwnershipReturnType, CreateEntityParameters, CreateEntityReturnType, DeleteEntityParameters, DeleteEntityReturnType, Entity, ExtendEntityParameters, ExtendEntityReturnType, MimeType, MutateEntitiesParameters, MutateEntitiesReturnType, RpcEntity, RpcIncludeData, RpcQueryOptions, TxParams, UpdateEntityParameters, UpdateEntityReturnType };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/utils/expirationTime.ts","../../src/utils/payload.ts"],"sourcesContent":[],"mappings":";;;cAEa;;;EAAA,SAAA,EAAA,CAAA,KAUZ,EAAA,MAAA,EAAA,GADkB,MAAI;;;;ECTP,SAAA,EAAA,CAAA,KAAa,EAAA,MAAA,
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/utils/expirationTime.ts","../../src/utils/payload.ts"],"sourcesContent":[],"mappings":";;;cAEa;;;EAAA,SAAA,EAAA,CAAA,KAUZ,EAAA,MAAA,EAAA,GADkB,MAAI;;;;ECTP,SAAA,EAAA,CAAA,KAAa,EAAA,MAAA,EAAA,GAAgB,MAAA;EAI7B,UAAA,EAAA,CAAA,MAAe,EAAA,MAAA,EAAA,GAAgB,MAAA;mBDK5B;;;;iBCTH,aAAA,gBAA6B;iBAI7B,eAAA,gBAA+B"}
|
package/package.json
CHANGED
package/src/query/engine.test.ts
CHANGED
|
@@ -15,6 +15,7 @@ describe("processQuery tests", () => {
|
|
|
15
15
|
limit: undefined,
|
|
16
16
|
cursor: undefined,
|
|
17
17
|
ownedBy: undefined,
|
|
18
|
+
orderBy: undefined,
|
|
18
19
|
validAtBlock: undefined,
|
|
19
20
|
withAttributes: undefined,
|
|
20
21
|
withMetadata: undefined,
|
|
@@ -53,6 +54,7 @@ describe("processQuery tests", () => {
|
|
|
53
54
|
limit: undefined,
|
|
54
55
|
cursor: undefined,
|
|
55
56
|
ownedBy: undefined,
|
|
57
|
+
orderBy: undefined,
|
|
56
58
|
validAtBlock: undefined,
|
|
57
59
|
withAttributes: undefined,
|
|
58
60
|
withMetadata: undefined,
|
|
@@ -92,6 +94,7 @@ describe("processQuery tests", () => {
|
|
|
92
94
|
limit: undefined,
|
|
93
95
|
cursor: undefined,
|
|
94
96
|
ownedBy: undefined,
|
|
97
|
+
orderBy: undefined,
|
|
95
98
|
validAtBlock: undefined,
|
|
96
99
|
withAttributes: undefined,
|
|
97
100
|
withMetadata: undefined,
|
|
@@ -131,6 +134,7 @@ describe("processQuery tests", () => {
|
|
|
131
134
|
limit: undefined,
|
|
132
135
|
cursor: undefined,
|
|
133
136
|
ownedBy: undefined,
|
|
137
|
+
orderBy: undefined,
|
|
134
138
|
validAtBlock: undefined,
|
|
135
139
|
withAttributes: undefined,
|
|
136
140
|
withMetadata: undefined,
|
|
@@ -176,6 +180,7 @@ describe("processQuery tests", () => {
|
|
|
176
180
|
limit: undefined,
|
|
177
181
|
cursor: undefined,
|
|
178
182
|
ownedBy: undefined,
|
|
183
|
+
orderBy: undefined,
|
|
179
184
|
validAtBlock: undefined,
|
|
180
185
|
withAttributes: undefined,
|
|
181
186
|
withMetadata: undefined,
|
|
@@ -203,6 +208,7 @@ describe("processQuery tests", () => {
|
|
|
203
208
|
const predicates = [{ type: "eq" as const, key: "key", value: "value" }]
|
|
204
209
|
await processQuery(client, {
|
|
205
210
|
predicates,
|
|
211
|
+
orderBy: undefined,
|
|
206
212
|
limit: undefined,
|
|
207
213
|
cursor: undefined,
|
|
208
214
|
ownedBy: "0x123",
|
|
@@ -232,6 +238,7 @@ describe("processQuery tests", () => {
|
|
|
232
238
|
predicates,
|
|
233
239
|
limit: undefined,
|
|
234
240
|
cursor: undefined,
|
|
241
|
+
orderBy: undefined,
|
|
235
242
|
validAtBlock: undefined,
|
|
236
243
|
withAttributes: undefined,
|
|
237
244
|
withMetadata: undefined,
|
|
@@ -256,12 +263,74 @@ describe("processQuery tests", () => {
|
|
|
256
263
|
})
|
|
257
264
|
})
|
|
258
265
|
|
|
266
|
+
it("should process simple predicates with orderBy", async () => {
|
|
267
|
+
const predicates = [{ type: "eq" as const, key: "key", value: "value" }]
|
|
268
|
+
await processQuery(client, {
|
|
269
|
+
predicates,
|
|
270
|
+
orderBy: [{ name: "key", type: "string", descending: true }],
|
|
271
|
+
limit: undefined,
|
|
272
|
+
cursor: undefined,
|
|
273
|
+
ownedBy: undefined,
|
|
274
|
+
})
|
|
275
|
+
|
|
276
|
+
expect(client.request).lastCalledWith({
|
|
277
|
+
method: "arkiv_query",
|
|
278
|
+
params: [
|
|
279
|
+
`key = "value"`,
|
|
280
|
+
{
|
|
281
|
+
orderBy: [{ name: "key", type: "string", descending: true }],
|
|
282
|
+
includeData: {
|
|
283
|
+
key: true,
|
|
284
|
+
attributes: false,
|
|
285
|
+
contentType: false,
|
|
286
|
+
payload: false,
|
|
287
|
+
expiration: false,
|
|
288
|
+
owner: false,
|
|
289
|
+
},
|
|
290
|
+
},
|
|
291
|
+
],
|
|
292
|
+
})
|
|
293
|
+
})
|
|
294
|
+
|
|
295
|
+
it("should process only orderBy", async () => {
|
|
296
|
+
const predicates = [] as Predicate[]
|
|
297
|
+
await processQuery(client, {
|
|
298
|
+
predicates,
|
|
299
|
+
limit: undefined,
|
|
300
|
+
cursor: undefined,
|
|
301
|
+
ownedBy: undefined,
|
|
302
|
+
orderBy: [{ name: "key", type: "string", descending: true }],
|
|
303
|
+
validAtBlock: undefined,
|
|
304
|
+
withAttributes: undefined,
|
|
305
|
+
withMetadata: undefined,
|
|
306
|
+
})
|
|
307
|
+
|
|
308
|
+
expect(client.request).lastCalledWith({
|
|
309
|
+
method: "arkiv_query",
|
|
310
|
+
params: [
|
|
311
|
+
"",
|
|
312
|
+
{
|
|
313
|
+
orderBy: [{ name: "key", type: "string", descending: true }],
|
|
314
|
+
includeData: {
|
|
315
|
+
key: true,
|
|
316
|
+
attributes: false,
|
|
317
|
+
contentType: false,
|
|
318
|
+
payload: false,
|
|
319
|
+
expiration: false,
|
|
320
|
+
owner: false,
|
|
321
|
+
},
|
|
322
|
+
},
|
|
323
|
+
],
|
|
324
|
+
})
|
|
325
|
+
})
|
|
326
|
+
|
|
259
327
|
it("should process simple predicate with validAtBlock and paging", async () => {
|
|
260
328
|
const predicates = [{ type: "eq" as const, key: "key", value: "value" }]
|
|
261
329
|
await processQuery(client, {
|
|
262
330
|
predicates,
|
|
263
331
|
limit: 10,
|
|
264
332
|
cursor: undefined,
|
|
333
|
+
orderBy: undefined,
|
|
265
334
|
validAtBlock: 123n,
|
|
266
335
|
ownedBy: "0x123",
|
|
267
336
|
})
|
package/src/query/engine.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Hex } from "viem"
|
|
2
2
|
import type { ArkivClient } from "../clients/baseClient"
|
|
3
|
-
import type { RpcQueryOptions } from "../types/rpcSchema"
|
|
3
|
+
import type { RpcOrderByAttribute, RpcQueryOptions } from "../types/rpcSchema"
|
|
4
4
|
import type { Predicate } from "./predicate"
|
|
5
5
|
|
|
6
6
|
function processPredicates(predicates: Predicate[]): string {
|
|
@@ -45,6 +45,7 @@ export async function processQuery(
|
|
|
45
45
|
limit: number | undefined
|
|
46
46
|
cursor: string | undefined
|
|
47
47
|
ownedBy: Hex | undefined
|
|
48
|
+
orderBy: RpcOrderByAttribute[] | undefined
|
|
48
49
|
validAtBlock?: bigint | undefined
|
|
49
50
|
withAttributes?: boolean | undefined
|
|
50
51
|
withMetadata?: boolean | undefined
|
|
@@ -56,6 +57,7 @@ export async function processQuery(
|
|
|
56
57
|
limit,
|
|
57
58
|
cursor,
|
|
58
59
|
ownedBy,
|
|
60
|
+
orderBy,
|
|
59
61
|
validAtBlock,
|
|
60
62
|
withAttributes,
|
|
61
63
|
withMetadata,
|
|
@@ -63,7 +65,7 @@ export async function processQuery(
|
|
|
63
65
|
} = queryParams
|
|
64
66
|
|
|
65
67
|
console.debug(
|
|
66
|
-
`Processing query with params: predicates: ${predicates}, cursor: ${cursor}, limit: ${limit}, ownedBy: ${ownedBy}, validAtBlock: ${validAtBlock}, withAttributes: ${withAttributes}, withMetadata: ${withMetadata}, withPayload: ${withPayload}`,
|
|
68
|
+
`Processing query with params: predicates: ${JSON.stringify(predicates)}, cursor: ${cursor}, limit: ${limit}, ownedBy: ${ownedBy}, orderBy: ${JSON.stringify(orderBy)}, validAtBlock: ${validAtBlock}, withAttributes: ${withAttributes}, withMetadata: ${withMetadata}, withPayload: ${withPayload}`,
|
|
67
69
|
)
|
|
68
70
|
|
|
69
71
|
let query = processPredicates(predicates)
|
|
@@ -97,9 +99,12 @@ export async function processQuery(
|
|
|
97
99
|
if (cursor !== undefined) {
|
|
98
100
|
queryOptions.cursor = cursor
|
|
99
101
|
}
|
|
102
|
+
if (orderBy !== undefined) {
|
|
103
|
+
queryOptions.orderBy = orderBy
|
|
104
|
+
}
|
|
100
105
|
|
|
101
106
|
console.debug(
|
|
102
|
-
`Built query to send: ${query}, queryOptions: ${JSON.stringify({ includeData: queryOptions.includeData, atBlock: queryOptions.atBlock?.toString(), resultsPerPage: queryOptions.resultsPerPage, cursor: queryOptions.cursor })}`,
|
|
107
|
+
`Built query to send: ${query}, queryOptions: ${JSON.stringify({ includeData: queryOptions.includeData, atBlock: queryOptions.atBlock?.toString(), orderBy: queryOptions.orderBy, resultsPerPage: queryOptions.resultsPerPage, cursor: queryOptions.cursor })}`,
|
|
103
108
|
)
|
|
104
109
|
|
|
105
110
|
const result = await client.request({
|
|
@@ -46,6 +46,7 @@ describe("QueryBuilder", () => {
|
|
|
46
46
|
limit: undefined,
|
|
47
47
|
offset: undefined,
|
|
48
48
|
ownedBy: undefined,
|
|
49
|
+
orderBy: undefined,
|
|
49
50
|
validBeforeBlock: undefined,
|
|
50
51
|
withAttributes: undefined,
|
|
51
52
|
withMetadata: undefined,
|
|
@@ -67,6 +68,7 @@ describe("QueryBuilder", () => {
|
|
|
67
68
|
limit: undefined,
|
|
68
69
|
offset: undefined,
|
|
69
70
|
ownedBy: undefined,
|
|
71
|
+
orderBy: undefined,
|
|
70
72
|
validBeforeBlock: undefined,
|
|
71
73
|
withAttributes: undefined,
|
|
72
74
|
withMetadata: undefined,
|
|
@@ -96,6 +98,7 @@ describe("QueryBuilder", () => {
|
|
|
96
98
|
limit: undefined,
|
|
97
99
|
offset: undefined,
|
|
98
100
|
ownedBy: undefined,
|
|
101
|
+
orderBy: undefined,
|
|
99
102
|
validBeforeBlock: undefined,
|
|
100
103
|
withAttributes: undefined,
|
|
101
104
|
withMetadata: undefined,
|
|
@@ -117,6 +120,7 @@ describe("QueryBuilder", () => {
|
|
|
117
120
|
limit: undefined,
|
|
118
121
|
offset: undefined,
|
|
119
122
|
ownedBy: undefined,
|
|
123
|
+
orderBy: undefined,
|
|
120
124
|
validBeforeBlock: undefined,
|
|
121
125
|
withAttributes: undefined,
|
|
122
126
|
withMetadata: undefined,
|
|
@@ -141,6 +145,7 @@ describe("QueryBuilder", () => {
|
|
|
141
145
|
limit: undefined,
|
|
142
146
|
offset: undefined,
|
|
143
147
|
ownedBy: undefined,
|
|
148
|
+
orderBy: undefined,
|
|
144
149
|
validBeforeBlock: undefined,
|
|
145
150
|
withAttributes: undefined,
|
|
146
151
|
withMetadata: undefined,
|
|
@@ -164,6 +169,7 @@ describe("QueryBuilder", () => {
|
|
|
164
169
|
limit: undefined,
|
|
165
170
|
offset: undefined,
|
|
166
171
|
ownedBy: owner,
|
|
172
|
+
orderBy: undefined,
|
|
167
173
|
validBeforeBlock: undefined,
|
|
168
174
|
withAttributes: undefined,
|
|
169
175
|
withMetadata: undefined,
|
|
@@ -171,6 +177,27 @@ describe("QueryBuilder", () => {
|
|
|
171
177
|
})
|
|
172
178
|
})
|
|
173
179
|
|
|
180
|
+
test("orderBy() sets orderBy", async () => {
|
|
181
|
+
mockProcessQuery.mockResolvedValue({
|
|
182
|
+
data: [],
|
|
183
|
+
})
|
|
184
|
+
|
|
185
|
+
const builder = new QueryBuilder(mockClient)
|
|
186
|
+
await builder.orderBy("name", "string", true).fetch()
|
|
187
|
+
|
|
188
|
+
expect(mockProcessQuery).toHaveBeenCalledWith(mockClient, {
|
|
189
|
+
predicates: [],
|
|
190
|
+
limit: undefined,
|
|
191
|
+
offset: undefined,
|
|
192
|
+
ownedBy: undefined,
|
|
193
|
+
orderBy: [{ name: "name", type: "string", desc: true }],
|
|
194
|
+
validAtBlock: undefined,
|
|
195
|
+
withAttributes: undefined,
|
|
196
|
+
withMetadata: undefined,
|
|
197
|
+
withPayload: undefined,
|
|
198
|
+
})
|
|
199
|
+
})
|
|
200
|
+
|
|
174
201
|
test("limit() sets limit", async () => {
|
|
175
202
|
mockProcessQuery.mockResolvedValue({
|
|
176
203
|
data: [],
|
|
@@ -184,6 +211,7 @@ describe("QueryBuilder", () => {
|
|
|
184
211
|
limit: 10,
|
|
185
212
|
offset: undefined,
|
|
186
213
|
ownedBy: undefined,
|
|
214
|
+
orderBy: undefined,
|
|
187
215
|
validBeforeBlock: undefined,
|
|
188
216
|
withAttributes: undefined,
|
|
189
217
|
withMetadata: undefined,
|
|
@@ -204,6 +232,7 @@ describe("QueryBuilder", () => {
|
|
|
204
232
|
limit: undefined,
|
|
205
233
|
cursor: "0xABC123",
|
|
206
234
|
ownedBy: undefined,
|
|
235
|
+
orderBy: undefined,
|
|
207
236
|
validAtBlock: undefined,
|
|
208
237
|
withAttributes: undefined,
|
|
209
238
|
withMetadata: undefined,
|
|
@@ -224,6 +253,7 @@ describe("QueryBuilder", () => {
|
|
|
224
253
|
limit: undefined,
|
|
225
254
|
offset: undefined,
|
|
226
255
|
ownedBy: undefined,
|
|
256
|
+
orderBy: undefined,
|
|
227
257
|
validBeforeBlock: undefined,
|
|
228
258
|
withAttributes: true,
|
|
229
259
|
withMetadata: undefined,
|
|
@@ -244,6 +274,7 @@ describe("QueryBuilder", () => {
|
|
|
244
274
|
limit: undefined,
|
|
245
275
|
cursor: undefined,
|
|
246
276
|
ownedBy: undefined,
|
|
277
|
+
orderBy: undefined,
|
|
247
278
|
validBeforeBlock: undefined,
|
|
248
279
|
withAttributes: false,
|
|
249
280
|
withMetadata: undefined,
|
|
@@ -264,6 +295,7 @@ describe("QueryBuilder", () => {
|
|
|
264
295
|
limit: undefined,
|
|
265
296
|
cursor: undefined,
|
|
266
297
|
ownedBy: undefined,
|
|
298
|
+
orderBy: undefined,
|
|
267
299
|
validAtBlock: undefined,
|
|
268
300
|
withAttributes: undefined,
|
|
269
301
|
withMetadata: true,
|
|
@@ -284,6 +316,7 @@ describe("QueryBuilder", () => {
|
|
|
284
316
|
limit: undefined,
|
|
285
317
|
cursor: undefined,
|
|
286
318
|
ownedBy: undefined,
|
|
319
|
+
orderBy: undefined,
|
|
287
320
|
validAtBlock: undefined,
|
|
288
321
|
withAttributes: undefined,
|
|
289
322
|
withMetadata: false,
|
|
@@ -304,6 +337,7 @@ describe("QueryBuilder", () => {
|
|
|
304
337
|
limit: undefined,
|
|
305
338
|
cursor: undefined,
|
|
306
339
|
ownedBy: undefined,
|
|
340
|
+
orderBy: undefined,
|
|
307
341
|
validAtBlock: undefined,
|
|
308
342
|
withAttributes: undefined,
|
|
309
343
|
withMetadata: undefined,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Hex } from "viem"
|
|
2
2
|
import type { ArkivClient } from "../clients/baseClient"
|
|
3
|
+
import type { RpcOrderByAttribute } from "../types/rpcSchema"
|
|
3
4
|
import { entityFromRpcResult } from "../utils/entities"
|
|
4
5
|
import { processQuery } from "./engine"
|
|
5
6
|
import type { Predicate } from "./predicate"
|
|
@@ -14,6 +15,7 @@ import { QueryResult } from "./queryResult"
|
|
|
14
15
|
export class QueryBuilder {
|
|
15
16
|
private _client: ArkivClient
|
|
16
17
|
private _ownedBy: Hex | undefined
|
|
18
|
+
private _orderBy: RpcOrderByAttribute[] | undefined
|
|
17
19
|
private _validAtBlock: bigint | undefined
|
|
18
20
|
private _withAttributes: boolean | undefined
|
|
19
21
|
private _withMetadata: boolean | undefined
|
|
@@ -41,6 +43,35 @@ export class QueryBuilder {
|
|
|
41
43
|
return this
|
|
42
44
|
}
|
|
43
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Sets the orderBy for the query.
|
|
48
|
+
* It can be called multiple times to order by multiple attributes.
|
|
49
|
+
* The order of the attributes is important. The first attribute is the primary order by attribute.
|
|
50
|
+
* @param attributeName - The name of the attribute to order by
|
|
51
|
+
* @param attributeType - The type of the attribute to order by (string or number)
|
|
52
|
+
* @param descending - The boolean value to set the order by descending
|
|
53
|
+
* @returns The QueryBuilder instance
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* const builder = new QueryBuilder(client)
|
|
57
|
+
* builder.orderBy("name", "string", true)
|
|
58
|
+
*/
|
|
59
|
+
orderBy(
|
|
60
|
+
attributeName: string,
|
|
61
|
+
attributeType: "string" | "number",
|
|
62
|
+
descending: boolean | undefined = undefined,
|
|
63
|
+
) {
|
|
64
|
+
if (!this._orderBy) {
|
|
65
|
+
this._orderBy = []
|
|
66
|
+
}
|
|
67
|
+
this._orderBy.push({
|
|
68
|
+
name: attributeName,
|
|
69
|
+
type: attributeType === "number" ? "numeric" : attributeType,
|
|
70
|
+
desc: !!descending,
|
|
71
|
+
} as RpcOrderByAttribute)
|
|
72
|
+
return this
|
|
73
|
+
}
|
|
74
|
+
|
|
44
75
|
/**
|
|
45
76
|
* Sets the withAttributes flag which will return the attributes for the entities if true
|
|
46
77
|
* @param withAttributes - The boolean value to set
|
|
@@ -167,6 +198,7 @@ export class QueryBuilder {
|
|
|
167
198
|
limit: this._limit,
|
|
168
199
|
cursor: this._cursor,
|
|
169
200
|
ownedBy: this._ownedBy,
|
|
201
|
+
orderBy: this._orderBy,
|
|
170
202
|
validAtBlock: this._validAtBlock,
|
|
171
203
|
withAttributes: this._withAttributes,
|
|
172
204
|
withMetadata: this._withMetadata,
|
|
@@ -198,6 +230,7 @@ export class QueryBuilder {
|
|
|
198
230
|
limit: this._limit,
|
|
199
231
|
cursor: this._cursor,
|
|
200
232
|
ownedBy: this._ownedBy,
|
|
233
|
+
orderBy: undefined,
|
|
201
234
|
validAtBlock: this._validAtBlock,
|
|
202
235
|
withAttributes: false,
|
|
203
236
|
withMetadata: false,
|
package/src/types/rpcSchema.ts
CHANGED
|
@@ -11,9 +11,16 @@ export type RpcEntity = {
|
|
|
11
11
|
numericAttributes?: [{ key: string; value: number }]
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
+
export type RpcOrderByAttribute = {
|
|
15
|
+
name: string
|
|
16
|
+
type: "string" | "numeric"
|
|
17
|
+
desc: boolean
|
|
18
|
+
}
|
|
19
|
+
|
|
14
20
|
export type RpcQueryOptions = {
|
|
15
21
|
atBlock?: number
|
|
16
22
|
includeData?: RpcIncludeData
|
|
23
|
+
orderBy?: RpcOrderByAttribute[]
|
|
17
24
|
resultsPerPage?: number
|
|
18
25
|
cursor?: string
|
|
19
26
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entity-OY78HYxA.d.cts","names":[],"sources":["../src/types/mimeTypes.ts","../src/types/rpcSchema.ts","../src/clients/baseClient.ts","../src/actions/wallet/changeOwnership.ts","../src/actions/wallet/createEntity.ts","../src/actions/wallet/deleteEntity.ts","../src/actions/wallet/extendEntity.ts","../src/actions/wallet/updateEntity.ts","../src/actions/wallet/mutateEntities.ts","../src/types/attributes.ts","../src/types/txParams.ts","../src/types/entity.ts"],"sourcesContent":[],"mappings":";;;KAAY,QAAA;;;KCGA,SAAA;EDHA,GAAA,ECIL,GDJK;eCKG;;;EAFH,KAAA,EAKH,GALG;EACL,gBAAA,CAAA,EAAA,CAAA;IACQ,GAAA,EAAA,MAAA;IAGN,KAAA,EAAA,MAAA;EAAG,CAAA,CAAA;EAKA,iBAAA,CAAe,EAAA,CAAA;IAOf,GAAA,EAAA,MAAA;IASA,KAAA,EAAA,MAAc;EAGE,CAAA,CAAA;CAKoB;AAEnC,KA1BD,eAAA,GA0BC;EAAS,OAAA,CAAA,EAAA,MAAA;gBAxBN;;;ACZhB,CAAA;AACoB,KDgBR,cAAA,GChBQ;EAAY,GAAA,EAAA,OAAA;EAChB,UAAA,EAAA,OAAA;EAAoB,OAAA,EAAA,OAAA;EACT,WAAA,EAAA,OAAA;EAAsB,UAAA,EAAA,OAAA;EAC7B,KAAA,EAAA,OAAA;CAAwB;AACjC,KDqBC,cAAA,GCrBD,CAAW;EAAO,MAAA,EAAA,2BAAA;EAAkB,UAAA,CAAA,EAAA,CAAA,QAAA,EDwBnB,GCxBmB,CAAA;EAA3C,UAAA,EAAA,MAAA;AAAM,CAAA;;8CD6BsC;EE5BpC,UAAA,EAAA;IAUA,IAAA,EAAA,CFoBC,SEpBD,CAAA;;;;ACPA,CAAA,EACD;EACG,MAAA,EAAA,sBAAA;EACC,UAAA,CAAA,EAAA,EAAA;EAAQ,UAAA,EAAA;IASX,aAAA,EAAA,MAAsB;;;;ACftB,CAAA,EASA;;;;ACRA,CAAA,CAUZ;;;KJjBY,8BACQ,YAAY,yBAChB,oBAAoB,4CACT,sBAAsB,uCAC7B,wBAAwB,kBACxC,OAAO,WAAW,OAAO,kBAAkB;;;AFR/C;;;;ACGY,KEMA,yBAAA,GFNS;EACd,SAAA,EEMM,GFNN;EACQ,QAAA,EEMH,GFNG;CAGN;;AAKT;AAOA;AASA;;AAQgD,KElBpC,yBAAA,GFkBoC;EAEnC,SAAA,EEnBA,GFmBA;EAAS,MAAA,EAAA,MAAA;;;;ADvCtB;;;;ACGA;;;AAKS,KGIG,sBAAA,GHJH;EAAG,OAAA,EGKD,UHLC;EAKA,UAAA,EGCE,SHDa,EAAA;EAOf,WAAA,EGLG,QHKW;EASd,SAAA,EAAA,MAAc;CAGE;;;;;;KGRhB,sBAAA;EFrBA,SAAA,EEsBC,GFtBU;EACH,MAAA,EAAA,MAAA;CAAY;;;AFJhC;;;;ACGY,KIMA,sBAAA,GJNS;EACd,SAAA,EIMM,GJNN;CACQ;;;AAQf;AAOA;AASA;AAG4B,KIdhB,sBAAA,GJcgB;EAKoB,SAAA,EIlBnC,GJkBmC;EAEnC,MAAA,EAAA,MAAA;CAAS;;;ADvCtB;;;;ACGA;AACO,KKMK,sBAAA,GLNL;EACQ,SAAA,EKMF,GLNE;EAGN,SAAA,EAAA,MAAA;CAAG;AAKZ;AAOA;AASA;;;AAUa,KKnBD,sBAAA,GLmBC;EAAS,SAAA,EKlBT,GLkBS;;;;;ADvCtB;;;;ACGA;;;;AAKY,KMKA,sBAAA,GNLA;EAKA,SAAA,EMCC,GNDD;EAOA,OAAA,EMLD,UNKe;EASd,UAAA,EMbE,SNaY,EAAA;EAGE,WAAA,EMfb,QNea;EAKoB,SAAA,EAAA,MAAA;CAEnC;;;;;ACpCb;AACoB,KKsBR,sBAAA,GLtBQ;EAAY,SAAA,EKuBnB,GLvBmB;EAChB,MAAA,EAAA,MAAA;CAAoB;;;;;;;ADQpC;AAOA;AASA;AAG4B,KOfhB,wBAAA,GPegB;EAKoB,OAAA,CAAA,EOnBpC,sBPmBoC,EAAA;EAEnC,OAAA,CAAA,EOpBD,sBPoBC,EAAA;EAAS,OAAA,CAAA,EOnBV,sBPmBU,EAAA;eOlBP;qBACM;;ANnBrB;;;;;;;;;AAKW,KM6DC,wBAAA,GN7DD;EAAW,MAAA,EAAA,MAAA;EAAO,eAAA,EM+DV,GN/DU,EAAA;EAAkB,eAAA,EMgE5B,GNhE4B,EAAA;EAA3C,eAAA,EMiEe,GNjEf,EAAA;EAAM,gBAAA,EMkEU,GNlEV,EAAA;oBMmEU;;;;KC3ER,SAAA;;;ATAZ,CAAA;;;KUAY,QAAA;;;EVAA,QAAA,CAAA,EAAQ,MAAA;;;;ECGR,GAAA,CAAA,EAAA,MAAS;EACd,KAAA,CAAA,EAAA,MAAA;EACQ,YAAA,CAAA,EAAA,MAAA;EAGN,oBAAA,CAAA,EAAA,MAAA;EAAG,QAAA,CAAA,EAAA,KAAA;AAKZ,CAAA;;;ADbY,cWIC,MAAA,CXJO;OWKb;SACE;;EVHG,OAAA,EUKD,UVLU;EACd,UAAA,EUKO,SVLP,EAAA;EACQ,WAAA,EUKA,QVLA;EAGN,WAAA,CAAA,GAAA,EUKA,GVLA,EAAA,WAAA,EUMQ,QVNR,EAAA,KAAA,EUOE,GVPF,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EUSI,UVTJ,EAAA,UAAA,EUUO,SVVP,EAAA;EAAG,MAAA,CAAA,CAAA,EAAA,MAAA;EAKA,MAAA,CAAA,CAAA,EAAA,GAAA;AAOZ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entity-o4fwHXKf.d.ts","names":[],"sources":["../src/types/mimeTypes.ts","../src/types/rpcSchema.ts","../src/clients/baseClient.ts","../src/actions/wallet/changeOwnership.ts","../src/actions/wallet/createEntity.ts","../src/actions/wallet/deleteEntity.ts","../src/actions/wallet/extendEntity.ts","../src/actions/wallet/updateEntity.ts","../src/actions/wallet/mutateEntities.ts","../src/types/attributes.ts","../src/types/txParams.ts","../src/types/entity.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queryBuilder-BueP5de6.js","names":["predicate","queryOptions: RpcQueryOptions"],"sources":["../src/query/errors.ts","../src/types/entity.ts","../src/utils/entities.ts","../src/query/engine.ts","../src/query/queryResult.ts","../src/query/queryBuilder.ts"],"sourcesContent":["export class NoMoreResultsError extends Error {\n constructor() {\n super(\"No more results\")\n }\n}\n\nexport class NoCursorOrLimitError extends Error {\n constructor() {\n super(\"Cursor and limit must be defined to fetch next\")\n }\n}\n\nexport class OffsetCannotBeLessThanZeroError extends Error {\n constructor() {\n super(\"Offset cannot be less than 0\")\n }\n}\n\nexport class NoEntityFoundError extends Error {\n constructor() {\n super(\"No entity found\")\n }\n}\n","import { bytesToString, type Hex } from \"viem\"\nimport type { MimeType } from \"../types\"\nimport type { Attribute } from \"./attributes\"\n\nexport class Entity {\n key: Hex\n owner: Hex\n expiresAtBlock: bigint\n payload: Uint8Array\n attributes: Attribute[]\n contentType: MimeType\n\n constructor(\n key: Hex,\n contentType: MimeType,\n owner: Hex,\n expiresAtBlock: bigint,\n payload: Uint8Array,\n attributes: Attribute[],\n ) {\n this.key = key\n this.owner = owner\n this.expiresAtBlock = expiresAtBlock\n this.payload = payload\n this.attributes = attributes\n this.contentType = contentType\n }\n\n toText(): string {\n return bytesToString(this.payload)\n }\n\n toJson(): any {\n return JSON.parse(bytesToString(this.payload))\n }\n}\n","import { toBytes } from \"viem\"\nimport { Entity } from \"../types/entity\"\nimport type { RpcEntity } from \"../types/rpcSchema\"\n\nexport async function entityFromRpcResult(rpcEntity: RpcEntity) {\n return new Entity(\n rpcEntity.key,\n rpcEntity.contentType,\n rpcEntity.owner,\n rpcEntity.expiresAt,\n toBytes(rpcEntity.value),\n [\n ...(rpcEntity.stringAttributes ?? []).map(({ key, value }) => ({\n key,\n value,\n })),\n ...(rpcEntity.numericAttributes ?? []).map(({ key, value }) => ({\n key,\n value: Number(value),\n })),\n ],\n )\n}\n","import type { Hex } from \"viem\"\nimport type { ArkivClient } from \"../clients/baseClient\"\nimport type { RpcQueryOptions } from \"../types/rpcSchema\"\nimport type { Predicate } from \"./predicate\"\n\nfunction processPredicates(predicates: Predicate[]): string {\n const processValue = (value: string | number) => {\n if (typeof value === \"string\") {\n return `\"${value}\"`\n }\n return value\n }\n return predicates\n .map((predicate) => {\n switch (predicate.type) {\n case \"eq\":\n return `${predicate.key} = ${processValue(predicate.value)}`\n case \"neq\":\n return `${predicate.key} != ${processValue(predicate.value)}`\n case \"gt\":\n return `${predicate.key} > ${processValue(predicate.value)}`\n case \"gte\":\n return `${predicate.key} >= ${processValue(predicate.value)}`\n case \"lt\":\n return `${predicate.key} < ${processValue(predicate.value)}`\n case \"lte\":\n return `${predicate.key} <= ${processValue(predicate.value)}`\n case \"not\":\n return `!${predicate.key}`\n case \"or\":\n return `(${predicate.predicates.map((predicate) => processPredicates([predicate])).join(\" || \")})`\n case \"and\":\n return `(${predicate.predicates.map((predicate) => processPredicates([predicate])).join(\" && \")})`\n default:\n return \"\"\n }\n })\n .join(\" && \")\n}\n\nexport async function processQuery(\n client: ArkivClient,\n queryParams: {\n predicates: Predicate[]\n limit: number | undefined\n cursor: string | undefined\n ownedBy: Hex | undefined\n validAtBlock?: bigint | undefined\n withAttributes?: boolean | undefined\n withMetadata?: boolean | undefined\n withPayload?: boolean | undefined\n },\n) {\n const {\n predicates,\n limit,\n cursor,\n ownedBy,\n validAtBlock,\n withAttributes,\n withMetadata,\n withPayload,\n } = queryParams\n\n console.debug(\n `Processing query with params: predicates: ${predicates}, cursor: ${cursor}, limit: ${limit}, ownedBy: ${ownedBy}, validAtBlock: ${validAtBlock}, withAttributes: ${withAttributes}, withMetadata: ${withMetadata}, withPayload: ${withPayload}`,\n )\n\n let query = processPredicates(predicates)\n if (ownedBy) {\n query += ` && $owner=${ownedBy}`\n }\n\n // remove leading and trailing spaces and leading &&\n query = query.trim()\n if (query.startsWith(\"&& \")) {\n query = query.slice(3)\n }\n\n const queryOptions: RpcQueryOptions = {\n includeData: {\n key: true,\n attributes: withAttributes ?? false,\n payload: withPayload ?? false,\n contentType: withMetadata ?? false,\n expiration: withMetadata ?? false,\n owner: withMetadata ?? false,\n },\n }\n\n if (validAtBlock !== undefined) {\n queryOptions.atBlock = Number(validAtBlock)\n }\n if (limit !== undefined) {\n queryOptions.resultsPerPage = limit\n }\n if (cursor !== undefined) {\n queryOptions.cursor = cursor\n }\n\n console.debug(\n `Built query to send: ${query}, queryOptions: ${JSON.stringify({ includeData: queryOptions.includeData, atBlock: queryOptions.atBlock?.toString(), resultsPerPage: queryOptions.resultsPerPage, cursor: queryOptions.cursor })}`,\n )\n\n const result = await client.request({\n method: \"arkiv_query\",\n params: [query, queryOptions],\n })\n console.debug(\"Raw result from query: \", result)\n\n return result\n}\n","import type { Entity } from \"../types/entity\"\nimport { NoCursorOrLimitError, NoMoreResultsError } from \"./errors\"\nimport type { QueryBuilder } from \"./queryBuilder\"\n\nexport class QueryResult {\n entities: Entity[]\n private _endOfIteration: boolean\n private _cursor: string | undefined\n private _limit: number | undefined\n private _validAtBlock: bigint | undefined\n private _queryBuilder: QueryBuilder\n\n // Public getters for internal state\n get queryBuilder(): QueryBuilder {\n return this._queryBuilder\n }\n\n get cursor(): string | undefined {\n return this._cursor\n }\n\n constructor(\n entities: Entity[],\n queryBuilder: QueryBuilder,\n cursor: string | undefined,\n limit: number | undefined,\n validAtBlock: bigint | undefined,\n ) {\n this.entities = entities\n this._queryBuilder = queryBuilder\n this._endOfIteration = !limit || entities.length < limit\n this._cursor = cursor\n this._limit = limit\n this._validAtBlock = validAtBlock\n }\n\n async next() {\n if (this._cursor === undefined || this._limit === undefined) {\n throw new NoCursorOrLimitError()\n }\n if (this._endOfIteration) {\n throw new NoMoreResultsError()\n }\n this._queryBuilder.cursor(this._cursor)\n const result = await this._queryBuilder.fetch()\n this.entities = result.entities\n // Update the query builder reference\n this._queryBuilder = result.queryBuilder\n // Check if we've reached the end (no more cursor or we got fewer entities than limit)\n this._endOfIteration = !result.cursor || result.entities.length < this._limit\n // Update the cursor\n this._cursor = result.cursor\n\n // TODO check current block height and if it is not too old\n console.debug(\"Current block height for next page: \", this._validAtBlock)\n }\n\n hasNextPage() {\n return !this._endOfIteration\n }\n}\n","import type { Hex } from \"viem\"\nimport type { ArkivClient } from \"../clients/baseClient\"\nimport { entityFromRpcResult } from \"../utils/entities\"\nimport { processQuery } from \"./engine\"\nimport type { Predicate } from \"./predicate\"\nimport { QueryResult } from \"./queryResult\"\n\n/**\n * QueryBuilder is a helper class to build queries to the Arkiv DBChains.\n * It can be used to fetch entities from the Arkiv DBChains. It follows the Builder pattern allowing chaining of methods.\n * @param client - The Arkiv client\n * @returns The QueryBuilder instance {@link QueryBuilder}\n */\nexport class QueryBuilder {\n private _client: ArkivClient\n private _ownedBy: Hex | undefined\n private _validAtBlock: bigint | undefined\n private _withAttributes: boolean | undefined\n private _withMetadata: boolean | undefined\n private _withPayload: boolean | undefined\n private _limit: number | undefined\n private _cursor: string | undefined\n private _predicates: Predicate[]\n\n constructor(client: ArkivClient) {\n this._client = client\n this._predicates = []\n }\n\n /**\n * Sets the ownedBy filter\n * @param ownedBy - The address of the owner\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.ownedBy(\"0x1234567890123456789012345678901234567890\")\n */\n ownedBy(ownedBy: Hex) {\n this._ownedBy = ownedBy\n return this\n }\n\n /**\n * Sets the withAttributes flag which will return the attributes for the entities if true\n * @param withAttributes - The boolean value to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.withAttributes(true)\n */\n withAttributes(withAttributes: boolean = true) {\n this._withAttributes = withAttributes\n return this\n }\n\n /**\n * Sets the withMetadata flag which will return the metadata (like owner, expiredAt, etc.) for the entities if true\n * @param withMetadata - The boolean value to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.withMetadata(true)\n */\n withMetadata(withMetadata: boolean = true) {\n this._withMetadata = withMetadata\n return this\n }\n\n /**\n * Sets the withPayload flag which will return the payload for the entities if true\n * @param withPayload - The boolean value to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.withPayload(true)\n */\n withPayload(withPayload: boolean = true) {\n this._withPayload = withPayload\n return this\n }\n\n /**\n * Sets the limit for the query\n * @param limit - The number of entities to return\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.limit(10)\n */\n limit(limit: number) {\n this._limit = limit\n return this\n }\n\n /**\n * Sets the cursor for the query - it is advances setting which rather shouldn't be used manually but it is provided from query result if limit is used (pagination).\n * @param cursor - The cursor to set which tells to RPC Query server where to start or continue the query.\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.offset(10)\n */\n cursor(cursor: string) {\n this._cursor = cursor\n return this\n }\n\n /**\n * Sets the validAtBlock for the query which tells at which block height the state we are intested.\n * If not set, the latest block is used.\n * @param validAtBlock - The block number to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.validAtBlock(10000)\n */\n validAtBlock(validAtBlock: bigint) {\n this._validAtBlock = validAtBlock\n return this\n }\n\n /**\n * Sets the predicates for the query limiting the results. It can be a single predicate or an array of predicates combined with 'and'.\n * Predicates can be nested using 'or' and 'and' predicates.\n * @param predicates - The predicates to set\n * @returns The QueryBuilder instance\n *\n * @example\n * const builder = new QueryBuilder(client)\n * builder.where(eq(\"name\", \"John\"))\n * builder.where([eq(\"name\", \"John\"), eq(\"age\", 30)])\n * builder.where([eq(\"name\", \"John\"), or([eq(\"age\", 30), eq(\"age\", 31)])])\n * builder.where([eq(\"name\", \"John\"), and([eq(\"age\", 30), eq(\"age\", 31)])])\n * builder.where([eq(\"name\", \"John\"), or([eq(\"age\", 30), and([eq(\"age\", 31), eq(\"age\", 32)])])])\n * builder.where([eq(\"name\", \"John\"), and([eq(\"age\", 30), or([eq(\"age\", 31), eq(\"age\", 32)])])])\n * builder.where([eq(\"name\", \"John\"), and([eq(\"age\", 30), or([eq(\"age\", 31), and([eq(\"age\", 32), eq(\"age\", 33)])])])])\n */\n where(predicates: Predicate[] | Predicate) {\n if (Array.isArray(predicates)) {\n this._predicates.push(...predicates)\n } else {\n this._predicates.push(predicates)\n }\n return this\n }\n\n /**\n * Fetches the entities from the query. Re\n * It will return a QueryResult instance which can be used to fetch the next and previous pages.\n * @returns The QueryResult instance {@link QueryResult}\n *\n * @example\n * const builder = new QueryBuilder(client)\n * const result = await builder.where(eq(\"name\", \"John\")).fetch()\n * // result = { entities: [Entity, Entity, Entity], next: async () => QueryResult, previous: async () => QueryResult }\n */\n async fetch() {\n const queryResult = await processQuery(this._client, {\n predicates: this._predicates,\n limit: this._limit,\n cursor: this._cursor,\n ownedBy: this._ownedBy,\n validAtBlock: this._validAtBlock,\n withAttributes: this._withAttributes,\n withMetadata: this._withMetadata,\n withPayload: this._withPayload,\n })\n\n const entities = await Promise.all(\n queryResult.data.map((entity) => entityFromRpcResult(entity)),\n )\n\n this.cursor(queryResult.cursor)\n this.validAtBlock(queryResult.blockNumber)\n\n return new QueryResult(entities, this, this._cursor, this._limit, this._validAtBlock)\n }\n\n /**\n * Counts the entities from the query.\n * @returns The number of entities\n *\n * @example\n * const builder = new QueryBuilder(client)\n * const result = await builder.where(eq(\"name\", \"John\")).count()\n * // result = 10\n */\n async count() {\n const queryResult = await processQuery(this._client, {\n predicates: this._predicates,\n limit: this._limit,\n cursor: this._cursor,\n ownedBy: this._ownedBy,\n validAtBlock: this._validAtBlock,\n withAttributes: false,\n withMetadata: false,\n withPayload: false,\n })\n\n return queryResult.data.length ?? 0\n }\n}\n"],"mappings":"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"}
|