@peerbit/document-interface 6.0.7-a9206a8 → 6.0.7-cccc078
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/src/index.d.ts +0 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +0 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/query.d.ts +2 -127
- package/dist/src/query.d.ts.map +1 -1
- package/dist/src/query.js +9 -367
- package/dist/src/query.js.map +1 -1
- package/dist/src/store.d.ts +1 -2
- package/dist/src/store.d.ts.map +1 -1
- package/dist/src/store.js +1 -1
- package/dist/src/store.js.map +1 -1
- package/package.json +7 -5
- package/src/index.ts +0 -3
- package/src/query.ts +11 -319
- package/src/store.ts +1 -3
- package/dist/src/id.d.ts +0 -47
- package/dist/src/id.d.ts.map +0 -1
- package/dist/src/id.js +0 -217
- package/dist/src/id.js.map +0 -1
- package/dist/src/index-engine.d.ts +0 -45
- package/dist/src/index-engine.d.ts.map +0 -1
- package/dist/src/index-engine.js +0 -5
- package/dist/src/index-engine.js.map +0 -1
- package/dist/src/utils.d.ts +0 -10
- package/dist/src/utils.d.ts.map +0 -1
- package/dist/src/utils.js +0 -51
- package/dist/src/utils.js.map +0 -1
- package/src/id.ts +0 -209
- package/src/index-engine.ts +0 -57
- package/src/utils.ts +0 -65
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { PublicSignKey } from "@peerbit/crypto";
|
|
2
|
-
import { CloseIteratorRequest, CollectNextRequest, Context, SearchRequest } from "./query.js";
|
|
3
|
-
import { IdKey, type IdPrimitive } from "./id.js";
|
|
4
|
-
import { type Constructor } from "@dao-xyz/borsh";
|
|
5
|
-
export interface IndexedResult {
|
|
6
|
-
id: IdKey;
|
|
7
|
-
indexed: Record<string, any>;
|
|
8
|
-
context: Context;
|
|
9
|
-
}
|
|
10
|
-
export interface IndexedResults {
|
|
11
|
-
results: IndexedResult[];
|
|
12
|
-
kept: number;
|
|
13
|
-
}
|
|
14
|
-
export interface IndexedValue<T = Record<string, any>> {
|
|
15
|
-
id: IdKey;
|
|
16
|
-
indexed: T;
|
|
17
|
-
context: Context;
|
|
18
|
-
size: number;
|
|
19
|
-
}
|
|
20
|
-
export type NestedProperties<T> = {
|
|
21
|
-
match: (obj: any) => obj is T;
|
|
22
|
-
query: (nested: T, query: SearchRequest) => Promise<Record<string, any>[]>;
|
|
23
|
-
};
|
|
24
|
-
export type IndexEngineInitProperties<N> = {
|
|
25
|
-
indexBy: string | string[];
|
|
26
|
-
nested?: NestedProperties<N>;
|
|
27
|
-
maxBatchSize: number;
|
|
28
|
-
schema?: Constructor<any>;
|
|
29
|
-
};
|
|
30
|
-
export interface IndexEngine<N = any> {
|
|
31
|
-
init(properties: IndexEngineInitProperties<N>): Promise<void> | void;
|
|
32
|
-
start?(): Promise<void> | void;
|
|
33
|
-
stop?(): Promise<void> | void;
|
|
34
|
-
get(id: IdKey): Promise<IndexedResult | undefined> | IndexedResult | undefined;
|
|
35
|
-
put(value: IndexedValue): Promise<void> | void;
|
|
36
|
-
del(id: IdKey): Promise<void> | void;
|
|
37
|
-
query(query: SearchRequest, from: PublicSignKey): Promise<IndexedResults>;
|
|
38
|
-
next(query: CollectNextRequest, from: PublicSignKey): Promise<IndexedResults>;
|
|
39
|
-
close(query: CloseIteratorRequest, from: PublicSignKey): Promise<void> | void;
|
|
40
|
-
iterator(): IterableIterator<[IdPrimitive, IndexedValue]>;
|
|
41
|
-
getSize(): number | Promise<number>;
|
|
42
|
-
getPending(cursorId: string): number | undefined;
|
|
43
|
-
get cursorCount(): number;
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=index-engine.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-engine.d.ts","sourceRoot":"","sources":["../../src/index-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACN,oBAAoB,EACpB,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,WAAW,aAAa;IAC7B,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACpD,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;IACjC,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;IAC9B,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;CAC3E,CAAC;AAEF,MAAM,MAAM,yBAAyB,CAAC,CAAC,IAAI;IAC1C,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;CAC1B,CAAC;AAEF,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG;IACnC,IAAI,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACrE,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9B,GAAG,CACF,EAAE,EAAE,KAAK,GACP,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,GAAG,aAAa,GAAG,SAAS,CAAC;IAClE,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/C,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACrC,KAAK,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1E,IAAI,CAAC,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC9E,KAAK,CAAC,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9E,QAAQ,IAAI,gBAAgB,CAAC,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAC1D,OAAO,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACjD,IAAI,WAAW,IAAI,MAAM,CAAC;CAC1B"}
|
package/dist/src/index-engine.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-engine.js","sourceRoot":"","sources":["../../src/index-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACN,oBAAoB,EACpB,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,EAAoB,MAAM,SAAS,CAAC;AAClD,OAAO,EAAoB,MAAM,gBAAgB,CAAC"}
|
package/dist/src/utils.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Context, Sort } from "./query.js";
|
|
2
|
-
export declare const stringArraysEquals: (a: string[] | string, b: string[] | string) => boolean;
|
|
3
|
-
export declare const resolvedSort: <Q extends {
|
|
4
|
-
indexed: Record<string, any>;
|
|
5
|
-
context: Context;
|
|
6
|
-
}>(arr: Q[], sorts: Sort[]) => Promise<Q[]>;
|
|
7
|
-
export declare const extractSortCompare: (a: Record<string, any>, b: Record<string, any>, sorts: Sort[]) => number;
|
|
8
|
-
export declare const sortCompare: (av: any, bv: any) => number;
|
|
9
|
-
export declare const extractFieldValue: <T>(doc: any, path: string[]) => T;
|
|
10
|
-
//# sourceMappingURL=utils.d.ts.map
|
package/dist/src/utils.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAiB,MAAM,YAAY,CAAC;AAE1D,eAAO,MAAM,kBAAkB,MAC3B,MAAM,EAAE,GAAG,MAAM,KACjB,MAAM,EAAE,GAAG,MAAM,YAWpB,CAAC;AAEF,eAAO,MAAM,YAAY;aACH,OAAO,MAAM,EAAE,GAAG,CAAC;aAAW,OAAO;QAErD,CAAC,EAAE,SACD,IAAI,EAAE,iBAIb,CAAC;AAEF,eAAO,MAAM,kBAAkB,MAC3B,OAAO,MAAM,EAAE,GAAG,CAAC,KACnB,OAAO,MAAM,EAAE,GAAG,CAAC,SACf,IAAI,EAAE,WAeb,CAAC;AAEF,eAAO,MAAM,WAAW,OAAQ,GAAG,MAAM,GAAG,WAU3C,CAAC;AAEF,eAAO,MAAM,iBAAiB,WAAY,GAAG,QAAQ,MAAM,EAAE,KAAG,CAK/D,CAAC"}
|
package/dist/src/utils.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { Context, Sort, SortDirection } from "./query.js";
|
|
2
|
-
export const stringArraysEquals = (a, b) => {
|
|
3
|
-
if (a.length !== b.length) {
|
|
4
|
-
return false;
|
|
5
|
-
}
|
|
6
|
-
for (let i = 0; i < a.length; i++) {
|
|
7
|
-
if (a[i] !== b[i]) {
|
|
8
|
-
return false;
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
return true;
|
|
12
|
-
};
|
|
13
|
-
export const resolvedSort = async (arr, sorts) => {
|
|
14
|
-
arr.sort((a, b) => extractSortCompare(a.indexed, b.indexed, sorts));
|
|
15
|
-
return arr;
|
|
16
|
-
};
|
|
17
|
-
export const extractSortCompare = (a, b, sorts) => {
|
|
18
|
-
for (const sort of sorts) {
|
|
19
|
-
const av = extractFieldValue(a, sort.key);
|
|
20
|
-
const bv = extractFieldValue(b, sort.key);
|
|
21
|
-
const cmp = sortCompare(av, bv);
|
|
22
|
-
if (cmp != 0) {
|
|
23
|
-
if (sort.direction === SortDirection.ASC) {
|
|
24
|
-
return cmp;
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
return -cmp;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return 0;
|
|
32
|
-
};
|
|
33
|
-
export const sortCompare = (av, bv) => {
|
|
34
|
-
if (typeof av === "string" && typeof bv === "string") {
|
|
35
|
-
return av.localeCompare(bv);
|
|
36
|
-
}
|
|
37
|
-
if (av < bv) {
|
|
38
|
-
return -1;
|
|
39
|
-
}
|
|
40
|
-
else if (av > bv) {
|
|
41
|
-
return 1;
|
|
42
|
-
}
|
|
43
|
-
return 0;
|
|
44
|
-
};
|
|
45
|
-
export const extractFieldValue = (doc, path) => {
|
|
46
|
-
for (let i = 0; i < path.length; i++) {
|
|
47
|
-
doc = doc[path[i]];
|
|
48
|
-
}
|
|
49
|
-
return doc;
|
|
50
|
-
};
|
|
51
|
-
//# sourceMappingURL=utils.js.map
|
package/dist/src/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE1D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CACjC,CAAoB,EACpB,CAAoB,EACnB,EAAE;IACH,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACd,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACnB,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAGhC,GAAQ,EACR,KAAa,EACZ,EAAE;IACH,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IACpE,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CACjC,CAAsB,EACtB,CAAsB,EACtB,KAAa,EACZ,EAAE;IACH,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,EAAE,GAAG,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAChC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACd,IAAI,IAAI,CAAC,SAAS,KAAK,aAAa,CAAC,GAAG,EAAE,CAAC;gBAC1C,OAAO,GAAG,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,GAAG,CAAC;YACb,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,CAAC,CAAC;AACV,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAO,EAAE,EAAO,EAAE,EAAE;IAC/C,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;QACtD,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;QACb,OAAO,CAAC,CAAC,CAAC;IACX,CAAC;SAAM,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC;IACV,CAAC;IACD,OAAO,CAAC,CAAC;AACV,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAI,GAAQ,EAAE,IAAc,EAAK,EAAE;IACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC"}
|
package/src/id.ts
DELETED
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
import { field, variant } from "@dao-xyz/borsh";
|
|
2
|
-
import { toBase64 } from "@peerbit/crypto";
|
|
3
|
-
import {
|
|
4
|
-
decodeUint8Array,
|
|
5
|
-
encodeUint8Array,
|
|
6
|
-
encodingLength
|
|
7
|
-
} from "uint8-varint";
|
|
8
|
-
|
|
9
|
-
export abstract class PrimitiveValue { }
|
|
10
|
-
|
|
11
|
-
@variant(0)
|
|
12
|
-
export class StringValue extends PrimitiveValue {
|
|
13
|
-
@field({ type: "string" })
|
|
14
|
-
string: string;
|
|
15
|
-
|
|
16
|
-
constructor(string: string) {
|
|
17
|
-
super();
|
|
18
|
-
this.string = string;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
@variant(1)
|
|
23
|
-
export abstract class NumberValue extends PrimitiveValue {
|
|
24
|
-
abstract get value(): number | bigint;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
@variant(0)
|
|
28
|
-
export abstract class IntegerValue extends NumberValue { }
|
|
29
|
-
|
|
30
|
-
@variant(0)
|
|
31
|
-
export class UnsignedIntegerValue extends IntegerValue {
|
|
32
|
-
@field({ type: "u32" })
|
|
33
|
-
number: number;
|
|
34
|
-
|
|
35
|
-
constructor(number: number) {
|
|
36
|
-
super();
|
|
37
|
-
if (
|
|
38
|
-
Number.isInteger(number) === false ||
|
|
39
|
-
number > 4294967295 ||
|
|
40
|
-
number < 0
|
|
41
|
-
) {
|
|
42
|
-
throw new Error("Number is not u32");
|
|
43
|
-
}
|
|
44
|
-
this.number = number;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
get value() {
|
|
48
|
-
return this.number;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
@variant(1)
|
|
53
|
-
export class BigUnsignedIntegerValue extends IntegerValue {
|
|
54
|
-
@field({ type: "u64" })
|
|
55
|
-
number: bigint;
|
|
56
|
-
|
|
57
|
-
constructor(number: bigint) {
|
|
58
|
-
super();
|
|
59
|
-
if (number > 18446744073709551615n || number < 0) {
|
|
60
|
-
throw new Error("Number is not u32");
|
|
61
|
-
}
|
|
62
|
-
this.number = number;
|
|
63
|
-
}
|
|
64
|
-
get value() {
|
|
65
|
-
return this.number;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export type IdPrimitive = string | number | bigint;
|
|
70
|
-
|
|
71
|
-
export abstract class IdKey {
|
|
72
|
-
abstract get key(): string | bigint | number | Uint8Array;
|
|
73
|
-
abstract get primitive(): IdPrimitive;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
@variant(0)
|
|
77
|
-
export class StringKey extends IdKey {
|
|
78
|
-
@field({ type: "string" })
|
|
79
|
-
key: string;
|
|
80
|
-
|
|
81
|
-
constructor(key: string) {
|
|
82
|
-
super();
|
|
83
|
-
this.key = key;
|
|
84
|
-
}
|
|
85
|
-
get primitive() {
|
|
86
|
-
return this.key;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
@variant(1)
|
|
91
|
-
export class Uint8ArrayKey extends IdKey {
|
|
92
|
-
@field({ type: Uint8Array })
|
|
93
|
-
key: Uint8Array;
|
|
94
|
-
|
|
95
|
-
constructor(key: Uint8Array) {
|
|
96
|
-
super();
|
|
97
|
-
this.key = key;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
private _keyString: string;
|
|
101
|
-
get primitive(): string {
|
|
102
|
-
return this._keyString || (this._keyString = toBase64(this.key));
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
const varint53 = {
|
|
107
|
-
deserialize: (reader: any) => {
|
|
108
|
-
const number = decodeUint8Array(reader._buf, reader._offset);
|
|
109
|
-
const len = encodingLength(number);
|
|
110
|
-
reader._offset += len;
|
|
111
|
-
return number;
|
|
112
|
-
},
|
|
113
|
-
serialize: (value: any, writer: any) => {
|
|
114
|
-
const offset = writer.totalSize;
|
|
115
|
-
writer["_writes"] = writer["_writes"].next = () =>
|
|
116
|
-
encodeUint8Array(value, writer["_buf"], offset);
|
|
117
|
-
writer.totalSize += encodingLength(value);
|
|
118
|
-
}
|
|
119
|
-
};
|
|
120
|
-
@variant(2)
|
|
121
|
-
export class IntegerKey extends IdKey {
|
|
122
|
-
@field(varint53) // max value is 2^53 - 1 (9007199254740991)
|
|
123
|
-
key: number;
|
|
124
|
-
|
|
125
|
-
constructor(key: number) {
|
|
126
|
-
super();
|
|
127
|
-
this.key = key;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
get primitive() {
|
|
131
|
-
return this.key;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
export type Ideable = string | number | bigint | Uint8Array;
|
|
136
|
-
|
|
137
|
-
const idKeyTypes = new Set(["string", "number", "bigint"]);
|
|
138
|
-
|
|
139
|
-
export const toId = (obj: Ideable): IdKey => {
|
|
140
|
-
if (typeof obj === "string") {
|
|
141
|
-
return new StringKey(obj);
|
|
142
|
-
}
|
|
143
|
-
if (typeof obj === "number") {
|
|
144
|
-
return new IntegerKey(obj);
|
|
145
|
-
}
|
|
146
|
-
if (typeof obj === "bigint") {
|
|
147
|
-
if (obj <= Number.MAX_SAFE_INTEGER && obj >= 0) {
|
|
148
|
-
return new IntegerKey(Number(obj));
|
|
149
|
-
}
|
|
150
|
-
throw new Error(
|
|
151
|
-
"BigInt is not less than 2^53. Max value is 9007199254740991"
|
|
152
|
-
);
|
|
153
|
-
}
|
|
154
|
-
if (obj instanceof Uint8Array) {
|
|
155
|
-
return new Uint8ArrayKey(obj);
|
|
156
|
-
}
|
|
157
|
-
throw new Error(
|
|
158
|
-
"Unexpected index key: " +
|
|
159
|
-
typeof obj +
|
|
160
|
-
", expected: string, number, bigint or Uint8Array"
|
|
161
|
-
);
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
export const toIdeable = (key: IdKey | Ideable): string | number | bigint => {
|
|
165
|
-
if (key instanceof IdKey) {
|
|
166
|
-
return key.primitive;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
if (typeof key === "string") {
|
|
170
|
-
return key;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
if (typeof key === "number") {
|
|
174
|
-
return key;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
if (typeof key === "bigint") {
|
|
178
|
-
return key;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
if (key instanceof Uint8Array) {
|
|
182
|
-
return toBase64(key);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
throw new Error("Unexpected index key: " + typeof key);
|
|
186
|
-
};
|
|
187
|
-
|
|
188
|
-
export const checkId = (obj: Ideable) => {
|
|
189
|
-
if (obj == null) {
|
|
190
|
-
throw new Error(
|
|
191
|
-
`The provided key value is null or undefined, expecting string, number, bigint, or Uint8array`
|
|
192
|
-
);
|
|
193
|
-
}
|
|
194
|
-
const type = typeof obj;
|
|
195
|
-
|
|
196
|
-
if (type === "number") {
|
|
197
|
-
if (Number.isInteger(obj) === false) {
|
|
198
|
-
throw new Error(`The provided key number value is not an integer`);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
if (idKeyTypes.has(type) || obj instanceof Uint8Array) {
|
|
203
|
-
return;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
throw new Error(
|
|
207
|
-
`Key is not ${[...idKeyTypes]}, provided key value type: ${typeof obj}`
|
|
208
|
-
);
|
|
209
|
-
};
|
package/src/index-engine.ts
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { PublicSignKey } from "@peerbit/crypto";
|
|
2
|
-
import {
|
|
3
|
-
CloseIteratorRequest,
|
|
4
|
-
CollectNextRequest,
|
|
5
|
-
Context,
|
|
6
|
-
SearchRequest
|
|
7
|
-
} from "./query.js";
|
|
8
|
-
import { IdKey, type IdPrimitive } from "./id.js";
|
|
9
|
-
import { type Constructor } from "@dao-xyz/borsh";
|
|
10
|
-
|
|
11
|
-
export interface IndexedResult {
|
|
12
|
-
id: IdKey;
|
|
13
|
-
indexed: Record<string, any>;
|
|
14
|
-
context: Context;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export interface IndexedResults {
|
|
18
|
-
results: IndexedResult[];
|
|
19
|
-
kept: number;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export interface IndexedValue<T = Record<string, any>> {
|
|
23
|
-
id: IdKey;
|
|
24
|
-
indexed: T;
|
|
25
|
-
context: Context;
|
|
26
|
-
size: number;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export type NestedProperties<T> = {
|
|
30
|
-
match: (obj: any) => obj is T;
|
|
31
|
-
query: (nested: T, query: SearchRequest) => Promise<Record<string, any>[]>;
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export type IndexEngineInitProperties<N> = {
|
|
35
|
-
indexBy: string | string[];
|
|
36
|
-
nested?: NestedProperties<N>;
|
|
37
|
-
maxBatchSize: number;
|
|
38
|
-
schema?: Constructor<any>;
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
export interface IndexEngine<N = any> {
|
|
42
|
-
init(properties: IndexEngineInitProperties<N>): Promise<void> | void;
|
|
43
|
-
start?(): Promise<void> | void;
|
|
44
|
-
stop?(): Promise<void> | void;
|
|
45
|
-
get(
|
|
46
|
-
id: IdKey
|
|
47
|
-
): Promise<IndexedResult | undefined> | IndexedResult | undefined;
|
|
48
|
-
put(value: IndexedValue): Promise<void> | void;
|
|
49
|
-
del(id: IdKey): Promise<void> | void;
|
|
50
|
-
query(query: SearchRequest, from: PublicSignKey): Promise<IndexedResults>;
|
|
51
|
-
next(query: CollectNextRequest, from: PublicSignKey): Promise<IndexedResults>;
|
|
52
|
-
close(query: CloseIteratorRequest, from: PublicSignKey): Promise<void> | void;
|
|
53
|
-
iterator(): IterableIterator<[IdPrimitive, IndexedValue]>;
|
|
54
|
-
getSize(): number | Promise<number>;
|
|
55
|
-
getPending(cursorId: string): number | undefined;
|
|
56
|
-
get cursorCount(): number;
|
|
57
|
-
}
|
package/src/utils.ts
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { Context, Sort, SortDirection } from "./query.js";
|
|
2
|
-
|
|
3
|
-
export const stringArraysEquals = (
|
|
4
|
-
a: string[] | string,
|
|
5
|
-
b: string[] | string
|
|
6
|
-
) => {
|
|
7
|
-
if (a.length !== b.length) {
|
|
8
|
-
return false;
|
|
9
|
-
}
|
|
10
|
-
for (let i = 0; i < a.length; i++) {
|
|
11
|
-
if (a[i] !== b[i]) {
|
|
12
|
-
return false;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
return true;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export const resolvedSort = async <
|
|
19
|
-
Q extends { indexed: Record<string, any>; context: Context }
|
|
20
|
-
>(
|
|
21
|
-
arr: Q[],
|
|
22
|
-
sorts: Sort[]
|
|
23
|
-
) => {
|
|
24
|
-
arr.sort((a, b) => extractSortCompare(a.indexed, b.indexed, sorts));
|
|
25
|
-
return arr;
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
export const extractSortCompare = (
|
|
29
|
-
a: Record<string, any>,
|
|
30
|
-
b: Record<string, any>,
|
|
31
|
-
sorts: Sort[]
|
|
32
|
-
) => {
|
|
33
|
-
for (const sort of sorts) {
|
|
34
|
-
const av = extractFieldValue(a, sort.key);
|
|
35
|
-
const bv = extractFieldValue(b, sort.key);
|
|
36
|
-
const cmp = sortCompare(av, bv);
|
|
37
|
-
if (cmp != 0) {
|
|
38
|
-
if (sort.direction === SortDirection.ASC) {
|
|
39
|
-
return cmp;
|
|
40
|
-
} else {
|
|
41
|
-
return -cmp;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return 0;
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
export const sortCompare = (av: any, bv: any) => {
|
|
49
|
-
if (typeof av === "string" && typeof bv === "string") {
|
|
50
|
-
return av.localeCompare(bv);
|
|
51
|
-
}
|
|
52
|
-
if (av < bv) {
|
|
53
|
-
return -1;
|
|
54
|
-
} else if (av > bv) {
|
|
55
|
-
return 1;
|
|
56
|
-
}
|
|
57
|
-
return 0;
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
export const extractFieldValue = <T>(doc: any, path: string[]): T => {
|
|
61
|
-
for (let i = 0; i < path.length; i++) {
|
|
62
|
-
doc = doc[path[i]];
|
|
63
|
-
}
|
|
64
|
-
return doc;
|
|
65
|
-
};
|