@peerbit/indexer-interface 3.0.5 → 3.0.6

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.
@@ -51,6 +51,17 @@ export type IndexIterator<T extends Record<string, any>, S extends Shape | undef
51
51
  done: () => boolean | undefined;
52
52
  pending: () => MaybePromise<number>;
53
53
  close: () => MaybePromise<void>;
54
+ /**
55
+ * Mark results claimed or enqueued by a higher-level live-update path as
56
+ * consumed by this iterator.
57
+ *
58
+ * Mutable iterators can implement this hook to keep subsequent pages and
59
+ * pending counts from returning those same ids again. Callers must only mark
60
+ * ids once another delivery path owns them (for example, after enqueueing a
61
+ * local result or successfully sending a remote push). Snapshot iterators may
62
+ * omit this hook.
63
+ */
64
+ markYielded?: (ids: Iterable<IdKey>) => MaybePromise<void>;
54
65
  };
55
66
  /**
56
67
  * Public data APIs require an open index and should throw NotStartedError after
@@ -1 +1 @@
1
- {"version":3,"file":"index-engine.d.ts","sourceRoot":"","sources":["../../src/index-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index-engine.d.ts","sourceRoot":"","sources":["../../src/index-engine.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index-engine.js","sourceRoot":"","sources":["../../src/index-engine.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,MAAM,SAAS,CAAC;AA+HrC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAI/B,GAAG,SAAgC,EACb,EAAE;IACxB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC;IACzC,IAAI,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,KAAK,EAAE,KAAa,EAAE,EAAE;QACpC,IAAI,GAAG,GAA8C,EAAE,CAAC;QACxD,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;YAChD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YAElB,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBACpB,CAAC,EAAE,CAAC;gBACJ,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;oBAC3B,MAAM;gBACP,CAAC;gBACD,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC;YAED,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM;YACP,CAAC;QACF,CAAC;QAED,OAAO,GAAG,CAAC;IACZ,CAAC,CAAC;IACF,OAAO;QACN,IAAI;QACJ,IAAI;QACJ,KAAK,EAAE,KAAK,IAAI,EAAE;YACjB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAClC,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;YACxB,CAAC;QACF,CAAC;QACD,GAAG,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,OAAO,GAAG,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChB,KAAK,MAAM,OAAO,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,CAAC;YACF,CAAC;YACD,OAAO,OAAO,CAAC;QAChB,CAAC;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YACnB,IAAI,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAC/C,CAAC;YACF,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC;KACD,CAAC;AACH,CAAC,CAAC;AAaF;;;;;;;;;;;;;;;;;;;;;gIAqBgI"}
1
+ {"version":3,"file":"index-engine.js","sourceRoot":"","sources":["../../src/index-engine.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,MAAM,SAAS,CAAC;AA0IrC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAI/B,GAAG,SAAgC,EACb,EAAE;IACxB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC;IACzC,IAAI,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,KAAK,EAAE,KAAa,EAAE,EAAE;QACpC,IAAI,GAAG,GAA8C,EAAE,CAAC;QACxD,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;YAChD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YAElB,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBACpB,CAAC,EAAE,CAAC;gBACJ,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;oBAC3B,MAAM;gBACP,CAAC;gBACD,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC;YAED,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM;YACP,CAAC;QACF,CAAC;QAED,OAAO,GAAG,CAAC;IACZ,CAAC,CAAC;IACF,OAAO;QACN,IAAI;QACJ,IAAI;QACJ,KAAK,EAAE,KAAK,IAAI,EAAE;YACjB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAClC,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;YACxB,CAAC;QACF,CAAC;QACD,GAAG,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,OAAO,GAAG,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChB,KAAK,MAAM,OAAO,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,CAAC;YACF,CAAC;YACD,OAAO,OAAO,CAAC;QAChB,CAAC;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YACnB,IAAI,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAC/C,CAAC;YACF,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC;KACD,CAAC;AACH,CAAC,CAAC;AAaF;;;;;;;;;;;;;;;;;;;;;gIAqBgI"}
@@ -1,7 +1,26 @@
1
1
  import { type AbstractType, type CustomField, type SimpleField } from "@dao-xyz/borsh";
2
+ import { type IdKey } from "./id.js";
2
3
  import { type Sort } from "./query.js";
4
+ /**
5
+ * Break sort ties by the document primary-key id using the id's NATURAL TYPED
6
+ * order, so equal-sort-key results order identically to the default sqlite3
7
+ * backend (which scans its primary-key index):
8
+ * - integer ids (number/bigint) compare NUMERICALLY (sqlite INTEGER: 2 < 10)
9
+ * - byte ids (Uint8Array) compare by raw memcmp (sqlite BLOB)
10
+ * - string ids compare as UTF-8 bytes (sqlite TEXT / BINARY
11
+ * collation) — deliberately NOT localeCompare,
12
+ * whose locale-aware order diverges from sqlite.
13
+ * A single index only ever holds one id kind; the kind-rank fallback is a
14
+ * defensive tie-breaker for mixed kinds. Returns a negative/zero/positive number
15
+ * suitable for Array.prototype.sort. Callers reverse the result when the primary
16
+ * (last) sort field is DESC so ties follow the scan direction.
17
+ */
18
+ export declare const compareIds: (a: IdKey, b: IdKey) => number;
3
19
  export declare const stringArraysEquals: (a: string[] | string, b: string[] | string) => boolean;
4
- export declare const extractSortCompare: (a: Record<string, any>, b: Record<string, any>, sorts: Sort[], aliases?: Map<string, string>) => number;
20
+ export declare const extractSortCompare: (a: Record<string, any>, b: Record<string, any>, sorts: Sort[], aliases?: Map<string, string>, ids?: {
21
+ a: IdKey;
22
+ b: IdKey;
23
+ }) => number;
5
24
  export declare const sortCompare: (av: any, bv: any) => number;
6
25
  export declare const extractFieldValue: <T>(doc: any, path: string[], aliases?: Map<string, string>) => T;
7
26
  export declare function id(properties: SimpleField | CustomField<any>): (targetOrValue: any, nameOrContext: any) => any;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,WAAW,EAGhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,IAAI,EAAiB,MAAM,YAAY,CAAC;AAEtD,eAAO,MAAM,kBAAkB,GAC9B,GAAG,MAAM,EAAE,GAAG,MAAM,EACpB,GAAG,MAAM,EAAE,GAAG,MAAM,YAWpB,CAAC;AAaF,eAAO,MAAM,kBAAkB,GAC9B,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtB,OAAO,IAAI,EAAE,EACb,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,WAe7B,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,IAAI,GAAG,EAAE,IAAI,GAAG,WAU3C,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,CAAC,EAClC,KAAK,GAAG,EACR,MAAM,MAAM,EAAE,EACd,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAC3B,CAKF,CAAC;AAkCF,wBAAgB,EAAE,CAAC,UAAU,EAAE,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,IAEpD,eAAe,GAAG,EAAE,eAAe,GAAG,SAe9C;AAkBD,eAAO,MAAM,aAAa,GACzB,OAAO,YAAY,CAAC,GAAG,CAAC,KACtB,MAAM,EAAE,GAAG,SAwBb,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,WAAW,EAGhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,IAAI,EAAiB,MAAM,YAAY,CAAC;AAwBtD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU,GAAI,GAAG,KAAK,EAAE,GAAG,KAAK,KAAG,MAuB/C,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC9B,GAAG,MAAM,EAAE,GAAG,MAAM,EACpB,GAAG,MAAM,EAAE,GAAG,MAAM,YAWpB,CAAC;AAaF,eAAO,MAAM,kBAAkB,GAC9B,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtB,OAAO,IAAI,EAAE,EACb,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,MAAM;IAAE,CAAC,EAAE,KAAK,CAAC;IAAC,CAAC,EAAE,KAAK,CAAA;CAAE,WA6B5B,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,IAAI,GAAG,EAAE,IAAI,GAAG,WAU3C,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,CAAC,EAClC,KAAK,GAAG,EACR,MAAM,MAAM,EAAE,EACd,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAC3B,CAKF,CAAC;AAkCF,wBAAgB,EAAE,CAAC,UAAU,EAAE,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,IAEpD,eAAe,GAAG,EAAE,eAAe,GAAG,SAe9C;AAkBD,eAAO,MAAM,aAAa,GACzB,OAAO,YAAY,CAAC,GAAG,CAAC,KACtB,MAAM,EAAE,GAAG,SAwBb,CAAC"}
package/dist/src/utils.js CHANGED
@@ -1,5 +1,58 @@
1
1
  import { field, getSchema, } from "@dao-xyz/borsh";
2
+ import {} from "./id.js";
2
3
  import { SortDirection } from "./query.js";
4
+ const idByteEncoder = new TextEncoder();
5
+ const compareBytes = (a, b) => {
6
+ const length = Math.min(a.length, b.length);
7
+ for (let i = 0; i < length; i++) {
8
+ if (a[i] !== b[i]) {
9
+ return a[i] < b[i] ? -1 : 1;
10
+ }
11
+ }
12
+ return a.length - b.length;
13
+ };
14
+ const idKindRank = (key) => {
15
+ if (typeof key === "number" || typeof key === "bigint") {
16
+ return 0;
17
+ }
18
+ if (key instanceof Uint8Array) {
19
+ return 1;
20
+ }
21
+ return 2;
22
+ };
23
+ /**
24
+ * Break sort ties by the document primary-key id using the id's NATURAL TYPED
25
+ * order, so equal-sort-key results order identically to the default sqlite3
26
+ * backend (which scans its primary-key index):
27
+ * - integer ids (number/bigint) compare NUMERICALLY (sqlite INTEGER: 2 < 10)
28
+ * - byte ids (Uint8Array) compare by raw memcmp (sqlite BLOB)
29
+ * - string ids compare as UTF-8 bytes (sqlite TEXT / BINARY
30
+ * collation) — deliberately NOT localeCompare,
31
+ * whose locale-aware order diverges from sqlite.
32
+ * A single index only ever holds one id kind; the kind-rank fallback is a
33
+ * defensive tie-breaker for mixed kinds. Returns a negative/zero/positive number
34
+ * suitable for Array.prototype.sort. Callers reverse the result when the primary
35
+ * (last) sort field is DESC so ties follow the scan direction.
36
+ */
37
+ export const compareIds = (a, b) => {
38
+ const ak = a.key;
39
+ const bk = b.key;
40
+ if ((typeof ak === "number" || typeof ak === "bigint") &&
41
+ (typeof bk === "number" || typeof bk === "bigint")) {
42
+ // Compare as bigint so a mixed number/bigint pair (u32 IntegerKey vs u64
43
+ // LargeIntegerKey) still orders by true numeric value.
44
+ const an = BigInt(ak);
45
+ const bn = BigInt(bk);
46
+ return an < bn ? -1 : an > bn ? 1 : 0;
47
+ }
48
+ if (ak instanceof Uint8Array && bk instanceof Uint8Array) {
49
+ return compareBytes(ak, bk);
50
+ }
51
+ if (typeof ak === "string" && typeof bk === "string") {
52
+ return compareBytes(idByteEncoder.encode(ak), idByteEncoder.encode(bk));
53
+ }
54
+ return idKindRank(ak) - idKindRank(bk);
55
+ };
3
56
  export const stringArraysEquals = (a, b) => {
4
57
  if (a.length !== b.length) {
5
58
  return false;
@@ -22,7 +75,7 @@ export const stringArraysEquals = (a, b) => {
22
75
  return arr;
23
76
  };
24
77
  */
25
- export const extractSortCompare = (a, b, sorts, aliases) => {
78
+ export const extractSortCompare = (a, b, sorts, aliases, ids) => {
26
79
  for (const sort of sorts) {
27
80
  const av = extractFieldValue(a, sort.key, aliases);
28
81
  const bv = extractFieldValue(b, sort.key, aliases);
@@ -36,6 +89,19 @@ export const extractSortCompare = (a, b, sorts, aliases) => {
36
89
  }
37
90
  }
38
91
  }
92
+ // All sort fields compared equal: break the tie deterministically by the
93
+ // document primary-key id in its natural typed order, so the result order is
94
+ // content-deterministic and matches the default sqlite3 backend instead of
95
+ // depending on insertion order. The default backend scans its primary-key
96
+ // index in the sort direction, so reverse the id order when the primary (last)
97
+ // sort field is DESC.
98
+ if (ids) {
99
+ const idCmp = compareIds(ids.a, ids.b);
100
+ if (idCmp !== 0) {
101
+ const primaryDirection = sorts.length > 0 ? sorts[sorts.length - 1].direction : SortDirection.ASC;
102
+ return primaryDirection === SortDirection.DESC ? -idCmp : idCmp;
103
+ }
104
+ }
39
105
  return 0;
40
106
  };
41
107
  export const sortCompare = (av, bv) => {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peerbit/indexer-interface",
3
- "version": "3.0.5",
3
+ "version": "3.0.6",
4
4
  "description": "Indexer store interface",
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -89,6 +89,17 @@ export type IndexIterator<
89
89
  done: () => boolean | undefined;
90
90
  pending: () => MaybePromise<number>;
91
91
  close: () => MaybePromise<void>;
92
+ /**
93
+ * Mark results claimed or enqueued by a higher-level live-update path as
94
+ * consumed by this iterator.
95
+ *
96
+ * Mutable iterators can implement this hook to keep subsequent pages and
97
+ * pending counts from returning those same ids again. Callers must only mark
98
+ * ids once another delivery path owns them (for example, after enqueueing a
99
+ * local result or successfully sending a remote push). Snapshot iterators may
100
+ * omit this hook.
101
+ */
102
+ markYielded?: (ids: Iterable<IdKey>) => MaybePromise<void>;
92
103
  };
93
104
 
94
105
  /**
package/src/utils.ts CHANGED
@@ -5,8 +5,70 @@ import {
5
5
  field,
6
6
  getSchema,
7
7
  } from "@dao-xyz/borsh";
8
+ import { type IdKey } from "./id.js";
8
9
  import { type Sort, SortDirection } from "./query.js";
9
10
 
11
+ const idByteEncoder = new TextEncoder();
12
+
13
+ const compareBytes = (a: Uint8Array, b: Uint8Array): number => {
14
+ const length = Math.min(a.length, b.length);
15
+ for (let i = 0; i < length; i++) {
16
+ if (a[i] !== b[i]) {
17
+ return a[i] < b[i] ? -1 : 1;
18
+ }
19
+ }
20
+ return a.length - b.length;
21
+ };
22
+
23
+ const idKindRank = (key: string | number | bigint | Uint8Array): number => {
24
+ if (typeof key === "number" || typeof key === "bigint") {
25
+ return 0;
26
+ }
27
+ if (key instanceof Uint8Array) {
28
+ return 1;
29
+ }
30
+ return 2;
31
+ };
32
+
33
+ /**
34
+ * Break sort ties by the document primary-key id using the id's NATURAL TYPED
35
+ * order, so equal-sort-key results order identically to the default sqlite3
36
+ * backend (which scans its primary-key index):
37
+ * - integer ids (number/bigint) compare NUMERICALLY (sqlite INTEGER: 2 < 10)
38
+ * - byte ids (Uint8Array) compare by raw memcmp (sqlite BLOB)
39
+ * - string ids compare as UTF-8 bytes (sqlite TEXT / BINARY
40
+ * collation) — deliberately NOT localeCompare,
41
+ * whose locale-aware order diverges from sqlite.
42
+ * A single index only ever holds one id kind; the kind-rank fallback is a
43
+ * defensive tie-breaker for mixed kinds. Returns a negative/zero/positive number
44
+ * suitable for Array.prototype.sort. Callers reverse the result when the primary
45
+ * (last) sort field is DESC so ties follow the scan direction.
46
+ */
47
+ export const compareIds = (a: IdKey, b: IdKey): number => {
48
+ const ak = a.key;
49
+ const bk = b.key;
50
+ if (
51
+ (typeof ak === "number" || typeof ak === "bigint") &&
52
+ (typeof bk === "number" || typeof bk === "bigint")
53
+ ) {
54
+ // Compare as bigint so a mixed number/bigint pair (u32 IntegerKey vs u64
55
+ // LargeIntegerKey) still orders by true numeric value.
56
+ const an = BigInt(ak);
57
+ const bn = BigInt(bk);
58
+ return an < bn ? -1 : an > bn ? 1 : 0;
59
+ }
60
+ if (ak instanceof Uint8Array && bk instanceof Uint8Array) {
61
+ return compareBytes(ak, bk);
62
+ }
63
+ if (typeof ak === "string" && typeof bk === "string") {
64
+ return compareBytes(
65
+ idByteEncoder.encode(ak),
66
+ idByteEncoder.encode(bk),
67
+ );
68
+ }
69
+ return idKindRank(ak) - idKindRank(bk);
70
+ };
71
+
10
72
  export const stringArraysEquals = (
11
73
  a: string[] | string,
12
74
  b: string[] | string,
@@ -38,6 +100,7 @@ export const extractSortCompare = (
38
100
  b: Record<string, any>,
39
101
  sorts: Sort[],
40
102
  aliases?: Map<string, string>,
103
+ ids?: { a: IdKey; b: IdKey },
41
104
  ) => {
42
105
  for (const sort of sorts) {
43
106
  const av = extractFieldValue(a, sort.key, aliases);
@@ -51,6 +114,20 @@ export const extractSortCompare = (
51
114
  }
52
115
  }
53
116
  }
117
+ // All sort fields compared equal: break the tie deterministically by the
118
+ // document primary-key id in its natural typed order, so the result order is
119
+ // content-deterministic and matches the default sqlite3 backend instead of
120
+ // depending on insertion order. The default backend scans its primary-key
121
+ // index in the sort direction, so reverse the id order when the primary (last)
122
+ // sort field is DESC.
123
+ if (ids) {
124
+ const idCmp = compareIds(ids.a, ids.b);
125
+ if (idCmp !== 0) {
126
+ const primaryDirection =
127
+ sorts.length > 0 ? sorts[sorts.length - 1].direction : SortDirection.ASC;
128
+ return primaryDirection === SortDirection.DESC ? -idCmp : idCmp;
129
+ }
130
+ }
54
131
  return 0;
55
132
  };
56
133