@minnowdb/core 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. package/README.md +4 -2
  2. package/dist/block-format/block.d.ts +32 -13
  3. package/dist/block-format/block.js +179 -55
  4. package/dist/block-format/checksum.d.ts +2 -1
  5. package/dist/block-format/checksum.js +5 -2
  6. package/dist/block-format/codecs.d.ts +7 -2
  7. package/dist/block-format/codecs.js +53 -12
  8. package/dist/block-format/column.d.ts +3 -2
  9. package/dist/block-format/column.js +96 -30
  10. package/dist/block-format/index.d.ts +2 -2
  11. package/dist/block-format/index.js +2 -2
  12. package/dist/block-format/physical.d.ts +8 -2
  13. package/dist/block-format/physical.js +14 -6
  14. package/dist/block-format/types.d.ts +7 -3
  15. package/dist/block-format/types.js +0 -1
  16. package/dist/block-format/unicode.d.ts +11 -0
  17. package/dist/block-format/unicode.js +46 -0
  18. package/dist/date-value.d.ts +15 -0
  19. package/dist/date-value.js +64 -0
  20. package/dist/engine/artifact-cache.d.ts +0 -1
  21. package/dist/engine/artifact-cache.js +0 -1
  22. package/dist/engine/batch.d.ts +5 -2
  23. package/dist/engine/batch.js +0 -1
  24. package/dist/engine/buffered-writer.d.ts +2 -1
  25. package/dist/engine/buffered-writer.js +34 -9
  26. package/dist/engine/cache-limits.d.ts +25 -0
  27. package/dist/engine/cache-limits.js +25 -0
  28. package/dist/engine/catalog.d.ts +5 -6
  29. package/dist/engine/catalog.js +5 -5
  30. package/dist/engine/client.d.ts +27 -7
  31. package/dist/engine/client.js +197 -31
  32. package/dist/engine/database.d.ts +161 -38
  33. package/dist/engine/database.js +4320 -1523
  34. package/dist/engine/defaults.d.ts +0 -1
  35. package/dist/engine/defaults.js +2 -4
  36. package/dist/engine/errors.d.ts +19 -1
  37. package/dist/engine/errors.js +32 -2
  38. package/dist/engine/fts.d.ts +0 -6
  39. package/dist/engine/fts.js +39 -14
  40. package/dist/engine/group-index.d.ts +0 -1
  41. package/dist/engine/group-index.js +6 -11
  42. package/dist/engine/index.d.ts +16 -11
  43. package/dist/engine/index.js +12 -10
  44. package/dist/engine/join-index.d.ts +0 -1
  45. package/dist/engine/join-index.js +2 -2
  46. package/dist/engine/keyed-live.d.ts +57 -0
  47. package/dist/engine/keyed-live.js +226 -0
  48. package/dist/engine/live-api.d.ts +4 -0
  49. package/dist/engine/live-api.js +4 -0
  50. package/dist/engine/live.d.ts +43 -26
  51. package/dist/engine/live.js +499 -129
  52. package/dist/engine/memory.d.ts +2 -1
  53. package/dist/engine/memory.js +3 -2
  54. package/dist/engine/optimizer.d.ts +0 -1
  55. package/dist/engine/optimizer.js +4 -4
  56. package/dist/engine/query-api.d.ts +3 -0
  57. package/dist/engine/query-api.js +3 -0
  58. package/dist/engine/query-cache.d.ts +0 -1
  59. package/dist/engine/query-cache.js +4 -4
  60. package/dist/engine/query.d.ts +4 -7
  61. package/dist/engine/query.js +348 -155
  62. package/dist/engine/result-wire.d.ts +0 -1
  63. package/dist/engine/result-wire.js +2 -2
  64. package/dist/engine/schema-wire.d.ts +1 -2
  65. package/dist/engine/schema-wire.js +0 -1
  66. package/dist/engine/schema.d.ts +3 -8
  67. package/dist/engine/schema.js +41 -24
  68. package/dist/engine/sort-keys.d.ts +0 -1
  69. package/dist/engine/sort-keys.js +2 -2
  70. package/dist/engine/sql-domains.d.ts +6 -1
  71. package/dist/engine/sql-domains.js +209 -45
  72. package/dist/engine/sql-driver.d.ts +2 -2
  73. package/dist/engine/sql-driver.js +0 -1
  74. package/dist/engine/sql-json.d.ts +0 -1
  75. package/dist/engine/sql-json.js +53 -7
  76. package/dist/engine/sql-semantics.d.ts +8 -5
  77. package/dist/engine/sql-semantics.js +427 -65
  78. package/dist/engine/typed-live.d.ts +67 -0
  79. package/dist/engine/typed-live.js +349 -0
  80. package/dist/engine/vector.d.ts +7 -1
  81. package/dist/engine/vector.js +202 -58
  82. package/dist/engine/worker-host.d.ts +8 -2
  83. package/dist/engine/worker-host.js +616 -152
  84. package/dist/engine/worker.d.ts +0 -1
  85. package/dist/engine/worker.js +3 -3
  86. package/dist/engine/write-block-planner.d.ts +18 -0
  87. package/dist/engine/write-block-planner.js +112 -0
  88. package/dist/index.d.ts +0 -1
  89. package/dist/index.js +0 -1
  90. package/dist/plan/index.d.ts +0 -1
  91. package/dist/plan/index.js +0 -1
  92. package/dist/storage/index.d.ts +1 -1
  93. package/dist/storage/index.js +1 -1
  94. package/dist/storage/indexeddb.d.ts +74 -65
  95. package/dist/storage/indexeddb.js +12301 -2076
  96. package/dist/storage/memory.d.ts +56 -66
  97. package/dist/storage/memory.js +1004 -139
  98. package/dist/storage/opfs/files.d.ts +18 -7
  99. package/dist/storage/opfs/files.js +115 -28
  100. package/dist/storage/opfs/index.d.ts +1 -1
  101. package/dist/storage/opfs/index.js +1 -1
  102. package/dist/storage/opfs/leader.d.ts +403 -91
  103. package/dist/storage/opfs/leader.js +4306 -602
  104. package/dist/storage/opfs/rpc.d.ts +15 -3
  105. package/dist/storage/opfs/rpc.js +223 -2
  106. package/dist/storage/opfs/snapshot-ledger.d.ts +40 -0
  107. package/dist/storage/opfs/snapshot-ledger.js +281 -0
  108. package/dist/storage/opfs/store.d.ts +26 -121
  109. package/dist/storage/opfs/store.js +436 -388
  110. package/dist/storage/persistence.d.ts +37 -0
  111. package/dist/storage/persistence.js +78 -0
  112. package/dist/storage/snapshot-stream.d.ts +24 -0
  113. package/dist/storage/snapshot-stream.js +897 -0
  114. package/dist/storage/snapshot.d.ts +9 -99
  115. package/dist/storage/snapshot.js +33 -309
  116. package/dist/storage/toolkit/extents.d.ts +41 -7
  117. package/dist/storage/toolkit/extents.js +402 -39
  118. package/dist/storage/toolkit/index.d.ts +3 -4
  119. package/dist/storage/toolkit/index.js +27 -3
  120. package/dist/storage/toolkit/record-core.d.ts +174 -61
  121. package/dist/storage/toolkit/record-core.js +5401 -849
  122. package/dist/storage/toolkit/sync-file.d.ts +10 -1
  123. package/dist/storage/toolkit/sync-file.js +50 -2
  124. package/dist/storage/toolkit/wal.d.ts +23 -5
  125. package/dist/storage/toolkit/wal.js +89 -27
  126. package/dist/storage/toolkit/wire.d.ts +4 -6
  127. package/dist/storage/toolkit/wire.js +80 -25
  128. package/dist/storage/types.d.ts +1271 -218
  129. package/dist/storage/types.js +1471 -138
  130. package/dist/testing/block-store-conformance.d.ts +0 -1
  131. package/dist/testing/block-store-conformance.js +877 -138
  132. package/dist/testing/index.d.ts +42 -31
  133. package/dist/testing/index.js +100 -68
  134. package/dist/testing/opfs-shim.d.ts +13 -3
  135. package/dist/testing/opfs-shim.js +40 -6
  136. package/dist/testing/simulator.d.ts +0 -1
  137. package/dist/testing/simulator.js +43 -12
  138. package/dist/testing/sqllogictest.d.ts +0 -1
  139. package/dist/testing/sqllogictest.js +0 -1
  140. package/dist/transactions/index.d.ts +81 -20
  141. package/dist/transactions/index.js +1050 -268
  142. package/dist/worker-protocol/index.d.ts +3 -2
  143. package/dist/worker-protocol/index.js +2 -5
  144. package/package.json +49 -1
  145. package/dist/block-format/block.d.ts.map +0 -1
  146. package/dist/block-format/block.js.map +0 -1
  147. package/dist/block-format/checksum.d.ts.map +0 -1
  148. package/dist/block-format/checksum.js.map +0 -1
  149. package/dist/block-format/codecs.d.ts.map +0 -1
  150. package/dist/block-format/codecs.js.map +0 -1
  151. package/dist/block-format/column.d.ts.map +0 -1
  152. package/dist/block-format/column.js.map +0 -1
  153. package/dist/block-format/index.d.ts.map +0 -1
  154. package/dist/block-format/index.js.map +0 -1
  155. package/dist/block-format/physical.d.ts.map +0 -1
  156. package/dist/block-format/physical.js.map +0 -1
  157. package/dist/block-format/types.d.ts.map +0 -1
  158. package/dist/block-format/types.js.map +0 -1
  159. package/dist/engine/artifact-cache.d.ts.map +0 -1
  160. package/dist/engine/artifact-cache.js.map +0 -1
  161. package/dist/engine/batch.d.ts.map +0 -1
  162. package/dist/engine/batch.js.map +0 -1
  163. package/dist/engine/buffered-writer.d.ts.map +0 -1
  164. package/dist/engine/buffered-writer.js.map +0 -1
  165. package/dist/engine/catalog.d.ts.map +0 -1
  166. package/dist/engine/catalog.js.map +0 -1
  167. package/dist/engine/client.d.ts.map +0 -1
  168. package/dist/engine/client.js.map +0 -1
  169. package/dist/engine/coordinator.d.ts +0 -17
  170. package/dist/engine/coordinator.d.ts.map +0 -1
  171. package/dist/engine/coordinator.js +0 -60
  172. package/dist/engine/coordinator.js.map +0 -1
  173. package/dist/engine/database.d.ts.map +0 -1
  174. package/dist/engine/database.js.map +0 -1
  175. package/dist/engine/defaults.d.ts.map +0 -1
  176. package/dist/engine/defaults.js.map +0 -1
  177. package/dist/engine/errors.d.ts.map +0 -1
  178. package/dist/engine/errors.js.map +0 -1
  179. package/dist/engine/fts.d.ts.map +0 -1
  180. package/dist/engine/fts.js.map +0 -1
  181. package/dist/engine/group-index.d.ts.map +0 -1
  182. package/dist/engine/group-index.js.map +0 -1
  183. package/dist/engine/index.d.ts.map +0 -1
  184. package/dist/engine/index.js.map +0 -1
  185. package/dist/engine/join-index.d.ts.map +0 -1
  186. package/dist/engine/join-index.js.map +0 -1
  187. package/dist/engine/live.d.ts.map +0 -1
  188. package/dist/engine/live.js.map +0 -1
  189. package/dist/engine/memory.d.ts.map +0 -1
  190. package/dist/engine/memory.js.map +0 -1
  191. package/dist/engine/optimizer.d.ts.map +0 -1
  192. package/dist/engine/optimizer.js.map +0 -1
  193. package/dist/engine/query-cache.d.ts.map +0 -1
  194. package/dist/engine/query-cache.js.map +0 -1
  195. package/dist/engine/query.d.ts.map +0 -1
  196. package/dist/engine/query.js.map +0 -1
  197. package/dist/engine/result-wire.d.ts.map +0 -1
  198. package/dist/engine/result-wire.js.map +0 -1
  199. package/dist/engine/schema-wire.d.ts.map +0 -1
  200. package/dist/engine/schema-wire.js.map +0 -1
  201. package/dist/engine/schema.d.ts.map +0 -1
  202. package/dist/engine/schema.js.map +0 -1
  203. package/dist/engine/sort-keys.d.ts.map +0 -1
  204. package/dist/engine/sort-keys.js.map +0 -1
  205. package/dist/engine/sql-domains.d.ts.map +0 -1
  206. package/dist/engine/sql-domains.js.map +0 -1
  207. package/dist/engine/sql-driver.d.ts.map +0 -1
  208. package/dist/engine/sql-driver.js.map +0 -1
  209. package/dist/engine/sql-json.d.ts.map +0 -1
  210. package/dist/engine/sql-json.js.map +0 -1
  211. package/dist/engine/sql-semantics.d.ts.map +0 -1
  212. package/dist/engine/sql-semantics.js.map +0 -1
  213. package/dist/engine/vector.d.ts.map +0 -1
  214. package/dist/engine/vector.js.map +0 -1
  215. package/dist/engine/worker-host.d.ts.map +0 -1
  216. package/dist/engine/worker-host.js.map +0 -1
  217. package/dist/engine/worker.d.ts.map +0 -1
  218. package/dist/engine/worker.js.map +0 -1
  219. package/dist/index.d.ts.map +0 -1
  220. package/dist/index.js.map +0 -1
  221. package/dist/plan/index.d.ts.map +0 -1
  222. package/dist/plan/index.js.map +0 -1
  223. package/dist/storage/fixture-shape.d.ts +0 -42
  224. package/dist/storage/fixture-shape.d.ts.map +0 -1
  225. package/dist/storage/fixture-shape.js +0 -146
  226. package/dist/storage/fixture-shape.js.map +0 -1
  227. package/dist/storage/index.d.ts.map +0 -1
  228. package/dist/storage/index.js.map +0 -1
  229. package/dist/storage/indexeddb.d.ts.map +0 -1
  230. package/dist/storage/indexeddb.js.map +0 -1
  231. package/dist/storage/memory.d.ts.map +0 -1
  232. package/dist/storage/memory.js.map +0 -1
  233. package/dist/storage/opfs/files.d.ts.map +0 -1
  234. package/dist/storage/opfs/files.js.map +0 -1
  235. package/dist/storage/opfs/index.d.ts.map +0 -1
  236. package/dist/storage/opfs/index.js.map +0 -1
  237. package/dist/storage/opfs/leader.d.ts.map +0 -1
  238. package/dist/storage/opfs/leader.js.map +0 -1
  239. package/dist/storage/opfs/rpc.d.ts.map +0 -1
  240. package/dist/storage/opfs/rpc.js.map +0 -1
  241. package/dist/storage/opfs/store.d.ts.map +0 -1
  242. package/dist/storage/opfs/store.js.map +0 -1
  243. package/dist/storage/snapshot.d.ts.map +0 -1
  244. package/dist/storage/snapshot.js.map +0 -1
  245. package/dist/storage/toolkit/extents.d.ts.map +0 -1
  246. package/dist/storage/toolkit/extents.js.map +0 -1
  247. package/dist/storage/toolkit/index.d.ts.map +0 -1
  248. package/dist/storage/toolkit/index.js.map +0 -1
  249. package/dist/storage/toolkit/record-core.d.ts.map +0 -1
  250. package/dist/storage/toolkit/record-core.js.map +0 -1
  251. package/dist/storage/toolkit/sync-file.d.ts.map +0 -1
  252. package/dist/storage/toolkit/sync-file.js.map +0 -1
  253. package/dist/storage/toolkit/wal.d.ts.map +0 -1
  254. package/dist/storage/toolkit/wal.js.map +0 -1
  255. package/dist/storage/toolkit/wire.d.ts.map +0 -1
  256. package/dist/storage/toolkit/wire.js.map +0 -1
  257. package/dist/storage/types.d.ts.map +0 -1
  258. package/dist/storage/types.js.map +0 -1
  259. package/dist/testing/block-store-conformance.d.ts.map +0 -1
  260. package/dist/testing/block-store-conformance.js.map +0 -1
  261. package/dist/testing/index.d.ts.map +0 -1
  262. package/dist/testing/index.js.map +0 -1
  263. package/dist/testing/opfs-shim.d.ts.map +0 -1
  264. package/dist/testing/opfs-shim.js.map +0 -1
  265. package/dist/testing/seeds.d.ts +0 -11
  266. package/dist/testing/seeds.d.ts.map +0 -1
  267. package/dist/testing/seeds.js +0 -50
  268. package/dist/testing/seeds.js.map +0 -1
  269. package/dist/testing/simulator.d.ts.map +0 -1
  270. package/dist/testing/simulator.js.map +0 -1
  271. package/dist/testing/sqllogictest.d.ts.map +0 -1
  272. package/dist/testing/sqllogictest.js.map +0 -1
  273. package/dist/transactions/index.d.ts.map +0 -1
  274. package/dist/transactions/index.js.map +0 -1
  275. package/dist/worker-protocol/index.d.ts.map +0 -1
  276. package/dist/worker-protocol/index.js.map +0 -1
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=worker.d.ts.map
@@ -4,11 +4,11 @@
4
4
  * module worker at it and connect a MinnowDatabaseClient — the client's init frame carries the
5
5
  * store descriptor and options, so this entry needs no configuration of its own:
6
6
  *
7
- * new Worker(new URL("@minnowdb/core/worker", import.meta.url), { type: "module" })
7
+ * // db-worker.ts: import "@minnowdb/core/worker";
8
+ * new Worker(new URL("./db-worker.ts", import.meta.url), { type: "module" })
8
9
  *
9
10
  * For non-cloneable construction options (custom store, `now`, `createId`), write your own entry
10
- * and call exposeDatabase() instead.
11
+ * and import `exposeDatabase()` from `@minnowdb/core/worker-host` instead.
11
12
  */
12
13
  import { attachDatabaseWorker } from "./worker-host.js";
13
14
  attachDatabaseWorker(self);
14
- //# sourceMappingURL=worker.js.map
@@ -0,0 +1,18 @@
1
+ import { type LogicalType } from "../block-format/index.js";
2
+ export interface WriteColumnValues {
3
+ readonly type: LogicalType;
4
+ readonly values: readonly unknown[];
5
+ readonly stringByteLengths?: readonly number[];
6
+ }
7
+ export interface WriteBlockRange {
8
+ readonly start: number;
9
+ readonly end: number;
10
+ }
11
+ /**
12
+ * Plans aligned row groups for every column in one segment. The row-wise accumulator visits each
13
+ * string value once, plus at most one overflow recheck at a block boundary, so a late wide column
14
+ * cannot make its siblings rescan the rest of the batch for every output block.
15
+ */
16
+ export declare function planAlignedWriteBlockRanges(columns: readonly WriteColumnValues[], rowCount: number, maximumRows: number, targetBytes: number, measureString?: (value: string) => number): WriteBlockRange[];
17
+ /** Conservative first estimate used by both physical compaction planners. */
18
+ export declare function estimateCompactionRowsPerOutput(targetBlockBytes: number, maximumEncodedBytesPerRow: number): number;
@@ -0,0 +1,112 @@
1
+ import { MAX_BLOCK_ROW_COUNT, physicalColumnByteLength, wellFormedUtf8ByteLength, } from "../block-format/index.js";
2
+ /**
3
+ * Plans aligned row groups for every column in one segment. The row-wise accumulator visits each
4
+ * string value once, plus at most one overflow recheck at a block boundary, so a late wide column
5
+ * cannot make its siblings rescan the rest of the batch for every output block.
6
+ */
7
+ export function planAlignedWriteBlockRanges(columns, rowCount, maximumRows, targetBytes, measureString = wellFormedUtf8ByteLength) {
8
+ if (rowCount === 0)
9
+ return [];
10
+ if (!Number.isSafeInteger(maximumRows) || maximumRows <= 0 || maximumRows > MAX_BLOCK_ROW_COUNT) {
11
+ throw new RangeError("Maximum rows per write block exceeds the format limit");
12
+ }
13
+ for (const column of columns) {
14
+ if (column.values.length !== rowCount) {
15
+ throw new RangeError("Column lengths must match while planning write blocks");
16
+ }
17
+ }
18
+ let maximumRowsPerRange = maximumRows;
19
+ const stringColumns = [];
20
+ for (const column of columns) {
21
+ if (column.type === "string")
22
+ stringColumns.push(column);
23
+ else {
24
+ maximumRowsPerRange = Math.min(maximumRowsPerRange, maximumFixedWidthRows(column.type, maximumRows, targetBytes));
25
+ }
26
+ }
27
+ const ranges = [];
28
+ if (stringColumns.length === 0) {
29
+ // Fixed-width sizes depend only on row count. Do not add a value-reading pass to numeric and
30
+ // boolean writes: calculate the cap once and emit the arithmetic ranges directly.
31
+ for (let start = 0; start < rowCount; start += maximumRowsPerRange) {
32
+ ranges.push({ start, end: Math.min(rowCount, start + maximumRowsPerRange) });
33
+ }
34
+ return ranges;
35
+ }
36
+ for (let start = 0; start < rowCount;) {
37
+ const rowLimit = Math.min(rowCount, start + maximumRowsPerRange);
38
+ const stringContentBytes = new Array(stringColumns.length).fill(0);
39
+ let end = start;
40
+ for (let row = start; row < rowLimit; row += 1) {
41
+ const count = row - start + 1;
42
+ let fitsTarget = true;
43
+ for (let columnIndex = 0; columnIndex < stringColumns.length; columnIndex += 1) {
44
+ const column = stringColumns[columnIndex];
45
+ if (column === undefined)
46
+ continue;
47
+ let contentBytes = stringContentBytes[columnIndex] ?? 0;
48
+ const value = column.values[row];
49
+ if (value !== null) {
50
+ if (typeof value !== "string") {
51
+ throw new TypeError("String column contains a non-string");
52
+ }
53
+ contentBytes += column.stringByteLengths?.[row] ?? measureString(value);
54
+ stringContentBytes[columnIndex] = contentBytes;
55
+ }
56
+ if (physicalColumnBytesUnchecked("string", count, contentBytes) > targetBytes) {
57
+ fitsTarget = false;
58
+ }
59
+ }
60
+ if (!fitsTarget && count > 1)
61
+ break;
62
+ if (!fitsTarget) {
63
+ // The target is soft for one wide row, but the format ceiling is always hard. Validate
64
+ // every string column's exact one-row size before allowing that row to make progress.
65
+ for (let columnIndex = 0; columnIndex < stringColumns.length; columnIndex += 1) {
66
+ physicalColumnByteLength("string", 1, stringContentBytes[columnIndex] ?? 0);
67
+ }
68
+ }
69
+ end = row + 1;
70
+ if (!fitsTarget)
71
+ break;
72
+ }
73
+ if (end <= start)
74
+ throw new Error("Write block planner made no progress");
75
+ ranges.push({ start, end });
76
+ start = end;
77
+ }
78
+ return ranges;
79
+ }
80
+ function maximumFixedWidthRows(type, maximumRows, targetBytes) {
81
+ if (physicalColumnBytesUnchecked(type, maximumRows, 0) <= targetBytes)
82
+ return maximumRows;
83
+ if (physicalColumnBytesUnchecked(type, 1, 0) > targetBytes)
84
+ return 1;
85
+ let low = 1;
86
+ let high = maximumRows;
87
+ while (low < high) {
88
+ const middle = Math.ceil((low + high) / 2);
89
+ if (physicalColumnBytesUnchecked(type, middle, 0) <= targetBytes)
90
+ low = middle;
91
+ else
92
+ high = middle - 1;
93
+ }
94
+ return low;
95
+ }
96
+ /** Conservative first estimate used by both physical compaction planners. */
97
+ export function estimateCompactionRowsPerOutput(targetBlockBytes, maximumEncodedBytesPerRow) {
98
+ return Math.max(1, Math.min(MAX_BLOCK_ROW_COUNT, Math.floor(targetBlockBytes / maximumEncodedBytesPerRow)));
99
+ }
100
+ /** Exact physical size without applying the 64 MiB hard limit during range search. */
101
+ function physicalColumnBytesUnchecked(type, rowCount, stringContentBytes) {
102
+ const validityBytes = Math.ceil(rowCount / 8);
103
+ switch (type) {
104
+ case "boolean":
105
+ return validityBytes * 2;
106
+ case "number":
107
+ case "datetime":
108
+ return validityBytes + rowCount * 8;
109
+ case "string":
110
+ return validityBytes + (rowCount + 1) * 4 + stringContentBytes;
111
+ }
112
+ }
package/dist/index.d.ts CHANGED
@@ -1,2 +1 @@
1
1
  export * from "./engine/index.js";
2
- //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,2 +1 @@
1
1
  export * from "./engine/index.js";
2
- //# sourceMappingURL=index.js.map
@@ -14,4 +14,3 @@
14
14
  export { assembleSelectBlock, compoundSelectBlock, derivedTableSource, hasAggregate, splitCondition, validateLimit, validateOffset, type AggregateName, type CompiledQuery, type CompiledStatement, type Expression, type JoinPlan, type Predicate, type PredicateOperator, type QueryResult, type QueryRow, type QueryValue, type SelectItem, type SetOperator, type TableSource, type WindowFunctionName, } from "../engine/query.js";
15
15
  export { optimizePlan, renderPlan } from "../engine/optimizer.js";
16
16
  export { validateFtsQuery } from "../engine/fts.js";
17
- //# sourceMappingURL=index.d.ts.map
@@ -14,4 +14,3 @@
14
14
  export { assembleSelectBlock, compoundSelectBlock, derivedTableSource, hasAggregate, splitCondition, validateLimit, validateOffset, } from "../engine/query.js";
15
15
  export { optimizePlan, renderPlan } from "../engine/optimizer.js";
16
16
  export { validateFtsQuery } from "../engine/fts.js";
17
- //# sourceMappingURL=index.js.map
@@ -13,6 +13,6 @@
13
13
  export * from "./indexeddb.js";
14
14
  export * from "./memory.js";
15
15
  export * from "./opfs/index.js";
16
+ export * from "./persistence.js";
16
17
  export * from "./snapshot.js";
17
18
  export * from "./types.js";
18
- //# sourceMappingURL=index.d.ts.map
@@ -13,6 +13,6 @@
13
13
  export * from "./indexeddb.js";
14
14
  export * from "./memory.js";
15
15
  export * from "./opfs/index.js";
16
+ export * from "./persistence.js";
16
17
  export * from "./snapshot.js";
17
18
  export * from "./types.js";
18
- //# sourceMappingURL=index.js.map
@@ -1,5 +1,4 @@
1
- import { type BeginTransactionInput, type BeginTransactionResult, type CommitTransactionInput, type CompactionJobRecord, type CompactionJobRecordUpdate, type CreateGarbageCollectionJobInput, type BlockStore, type BlockWrite, type CatalogProbe, type TriggerRecord, type FtsCandidates, type FtsColumnIndexRecord, type FtsPostingQuery, type FtsPosting, type GarbageCollectionJobRecord, type GarbageCollectionStepResult, type LeaseRecord, type Manifest, type ManifestSummary, type PublishManifestInput, type QueryCatalogState, type RowIdRange, type RunGarbageCollectionStepInput, type SegmentRecord, type StageTransactionArtifactsInput, type StoragePage, type TableColumnRecord, type TableRecord, type SecondaryIndexRecord, type TempOwnerRecord, type TempRunPage, type TransactionRecord, type TransactionRecordUpdate, type WriteTransactionInput } from "./types.js";
2
- import { type DatabaseSnapshot, type SnapshotLoadProgress } from "./snapshot.js";
1
+ import { type AbortTransactionIfExpiredInput, type AdoptAbortedSegmentInput, type BeginTransactionInput, type BeginTransactionResult, type BeginSnapshotFrameExportInput, type BeginSnapshotFrameImportInput, type BeginPostingBuildInput, type RenewPostingBuildInput, type AppendPostingBuildChunkInput, type FinishPostingBuildInput, type AbortPostingBuildInput, type ReadSnapshotExportFrameInput, type SnapshotFrameExportSession, type SnapshotFrameImportSession, type RenewSnapshotFrameImportInput, type AppendSnapshotImportFramesInput, type FinishSnapshotFrameImportInput, type SnapshotFrame, type CloseSnapshotExportInput, type CancelSnapshotImportInput, type CommitTransactionInput, type DropTableColumnInput, type DropTableInput, type CompactionJobRecord, type CompactionJobRecordUpdate, type CreateGarbageCollectionJobInput, type BlockStore, type CatalogProbe, type CatalogMutationOptions, type UniqueKeyBuildRecord, type BeginUniqueKeyBuildInput, type AppendUniqueKeyBuildChunkInput, type FinishUniqueKeyBuildInput, type RenewUniqueKeyBuildInput, type AbortUniqueKeyBuildInput, type FtsCandidates, type FtsPostingQuery, type FtsPosting, type GarbageCollectionJobRecord, type GarbageCollectionStepResult, type LeaseRecord, type Manifest, type ListManifestBlockPageInput, type ListRetiredManifestBlockPageInput, type ManifestBlockPage, type ManifestSummary, type RenewTransactionInput, type RenewLeaseInput, type MoveLeaseInput, type RowIdRange, type RollbackTransactionArtifactsInput, type InterruptedSnapshotImport, type InterruptedSnapshotImportAbortResult, type StorageIntegrityReport, type StorageStats, type RunGarbageCollectionStepInput, type UpdateGarbageCollectionPlanningInput, type SegmentRecord, type QueryCatalogState, type StageTransactionArtifactsInput, type StoragePage, type TableRecord, type TableRecordUpdate, type TempOwnerRecord, type RenewTempOwnerInput, type TempRunPage, type TransactionRecord, type TransactionRecordUpdate, type WriteTransactionInput } from "./types.js";
3
2
  export interface IndexedDbBlockStoreOptions {
4
3
  name: string;
5
4
  durability?: IDBTransactionDurability;
@@ -13,14 +12,15 @@ export interface IndexedDbBlockStoreOptions {
13
12
  }
14
13
  export declare class IndexedDbBlockStore implements BlockStore {
15
14
  #private;
15
+ readonly liveQueryChannelName: string;
16
16
  private constructor();
17
17
  static open(options: IndexedDbBlockStoreOptions): Promise<IndexedDbBlockStore>;
18
- addBlock(id: string, bytes: Uint8Array): Promise<void>;
19
- addBlocks(blocks: readonly BlockWrite[]): Promise<void>;
20
18
  getBlock(id: string): Promise<Uint8Array | undefined>;
21
19
  getBlocks(ids: readonly string[]): Promise<Array<Uint8Array | undefined>>;
22
- removeBlock(id: string): Promise<void>;
23
- listBlockIds(): Promise<string[]>;
20
+ readManifestBlock(version: number | null, id: string): Promise<Uint8Array | undefined>;
21
+ hasManifestBlocks(version: number | null, ids: readonly string[]): Promise<boolean[]>;
22
+ listManifestBlockPage(input: ListManifestBlockPageInput): Promise<ManifestBlockPage>;
23
+ listRetiredManifestBlockPage(input: ListRetiredManifestBlockPageInput): Promise<ManifestBlockPage>;
24
24
  putTempRunPage(page: TempRunPage): Promise<void>;
25
25
  putTempRunPages(pages: readonly TempRunPage[]): Promise<void>;
26
26
  getTempRunPage(ownerId: string, runId: string, pageIndex: number): Promise<Uint8Array | undefined>;
@@ -28,47 +28,42 @@ export declare class IndexedDbBlockStore implements BlockStore {
28
28
  removeTempOwner(ownerId: string): Promise<void>;
29
29
  createTempOwner(record: TempOwnerRecord): Promise<void>;
30
30
  getTempOwner(ownerId: string): Promise<TempOwnerRecord | undefined>;
31
- renewTempOwner(ownerId: string, expectedRevision: number, expiresAt: string): Promise<TempOwnerRecord>;
31
+ renewTempOwner(input: RenewTempOwnerInput): Promise<TempOwnerRecord>;
32
32
  removeTempOwnerIfExpired(ownerId: string, expiresAtCutoff: string): Promise<boolean>;
33
33
  listTempOwnerIdsPage(afterOwnerId: string | null, limit: number): Promise<StoragePage<string, string>>;
34
- addTable(record: TableRecord): Promise<void>;
34
+ listExpiredTempOwnerPage(expiresAtCutoff: string, afterCursor: string | null, limit: number): Promise<StoragePage<string, string>>;
35
+ addTable(record: TableRecord, options?: CatalogMutationOptions): Promise<void>;
35
36
  getTable(id: string): Promise<TableRecord | undefined>;
36
- updateTable(id: string, expectedRevision: number, update: {
37
- columns?: TableColumnRecord[];
38
- ftsColumns?: Record<string, FtsColumnIndexRecord> | null;
39
- secondaryIndexes?: Record<string, SecondaryIndexRecord> | null;
40
- expectedManifestVersion?: {
41
- value: number | null;
42
- };
43
- uniqueKeySeed?: {
44
- namespaceId: string;
45
- keyTokens: readonly string[];
46
- };
47
- triggers?: TriggerRecord[] | null;
48
- }): Promise<TableRecord>;
49
- removeTable(id: string, expectedRevision: number): Promise<void>;
37
+ updateTable(id: string, expectedRevision: number, update: TableRecordUpdate): Promise<TableRecord>;
38
+ beginUniqueKeyBuild(input: BeginUniqueKeyBuildInput): Promise<UniqueKeyBuildRecord>;
39
+ getUniqueKeyBuild(buildId: string): Promise<UniqueKeyBuildRecord | undefined>;
40
+ renewUniqueKeyBuild(input: RenewUniqueKeyBuildInput): Promise<UniqueKeyBuildRecord>;
41
+ appendUniqueKeyBuildChunk(input: AppendUniqueKeyBuildChunkInput): Promise<UniqueKeyBuildRecord>;
42
+ finishUniqueKeyBuild(input: FinishUniqueKeyBuildInput): Promise<TableRecord>;
43
+ abortUniqueKeyBuild(input: AbortUniqueKeyBuildInput): Promise<boolean>;
44
+ removeTable(id: string, expectedRevision: number, options?: CatalogMutationOptions): Promise<void>;
45
+ dropTable(input: DropTableInput): Promise<ManifestSummary>;
46
+ dropTableColumn(input: DropTableColumnInput): Promise<ManifestSummary>;
50
47
  writeFtsBase(tableId: string, columnId: string, input: {
51
48
  coversVersion: number;
52
49
  chunks: FtsPosting[][];
53
50
  totalTokens: number;
54
51
  }): Promise<void>;
55
- beginFtsBaseBuild(tableId: string, columnId: string, buildId: string): Promise<void>;
56
- writeFtsBaseBuildChunk(tableId: string, columnId: string, buildId: string, ordinal: number, chunk: FtsPosting[]): Promise<void>;
57
- finishFtsBaseBuild(tableId: string, columnId: string, buildId: string, input: {
58
- coversVersion: number;
59
- chunkCount: number;
60
- totalTokens: number;
61
- }): Promise<void>;
62
- abortFtsBaseBuild(tableId: string, columnId: string, buildId: string): Promise<void>;
52
+ beginFtsBaseBuild(input: BeginPostingBuildInput): Promise<void>;
53
+ renewFtsBaseBuild(input: RenewPostingBuildInput): Promise<void>;
54
+ writeFtsBaseBuildChunk(input: AppendPostingBuildChunkInput): Promise<void>;
55
+ finishFtsBaseBuild(input: FinishPostingBuildInput): Promise<void>;
56
+ abortFtsBaseBuild(input: AbortPostingBuildInput): Promise<void>;
63
57
  removeFtsColumn(tableId: string, columnId: string): Promise<void>;
64
- readFtsCandidates(tableId: string, columnId: string, terms: readonly FtsPostingQuery[], upToVersion: number): Promise<FtsCandidates & {
58
+ readFtsCandidates(tableId: string, columnId: string, terms: readonly FtsPostingQuery[], upToVersion: number, maxRowIds?: number): Promise<FtsCandidates & {
65
59
  deltaChunkCount: number;
66
60
  totalTokens: number;
67
61
  coversVersion: number;
68
62
  hasBase: boolean;
69
63
  }>;
70
- readFtsPostings(tableId: string, columnId: string, upToVersion: number): Promise<{
64
+ readFtsPostings(tableId: string, columnId: string, upToVersion: number, maxRowIds?: number, maxRetainedBytes?: number): Promise<{
71
65
  postings: FtsPosting[];
66
+ overflow: boolean;
72
67
  deltaChunkCount: number;
73
68
  coversVersion: number;
74
69
  hasBase: boolean;
@@ -83,14 +78,17 @@ export declare class IndexedDbBlockStore implements BlockStore {
83
78
  */
84
79
  getTableByName(name: string): Promise<TableRecord | undefined>;
85
80
  listTables(): Promise<TableRecord[]>;
86
- addSegment(record: SegmentRecord): Promise<void>;
87
81
  getSegment(id: string): Promise<SegmentRecord | undefined>;
88
- listSegments(tableId?: string): Promise<SegmentRecord[]>;
89
82
  listSegmentPage(afterId: string | null, limit: number): Promise<{
90
83
  records: SegmentRecord[];
91
84
  nextCursor: string | null;
92
85
  }>;
93
- removeSegment(id: string): Promise<void>;
86
+ listTableSegmentPage(tableId: string, afterId: string | null, limit: number): Promise<{
87
+ records: SegmentRecord[];
88
+ nextCursor: string | null;
89
+ }>;
90
+ removeAbortedSegment(segmentId: string, expectedTransactionId: string): Promise<boolean>;
91
+ adoptAbortedSegment(input: AdoptAbortedSegmentInput): Promise<TransactionRecord>;
94
92
  reserveRowIds(tableId: string, count: number): Promise<RowIdRange>;
95
93
  reserveAutoIncrement(tableId: string, columnId: string, count: number, atLeast?: bigint): Promise<RowIdRange>;
96
94
  getExistingUniqueKeys(tableId: string, keyTokens: readonly string[]): Promise<string[]>;
@@ -104,35 +102,42 @@ export declare class IndexedDbBlockStore implements BlockStore {
104
102
  * events, so an abort surfaces as a rejection here instead of hanging.
105
103
  */
106
104
  getCatalogProbe(): Promise<CatalogProbe>;
107
- getQueryCatalogState(tableNames: readonly string[]): Promise<QueryCatalogState>;
105
+ getQueryCatalogState(names: readonly string[]): Promise<QueryCatalogState>;
108
106
  getCurrentManifest(): Promise<Manifest | undefined>;
109
107
  getManifest(version: number): Promise<Manifest | undefined>;
110
- listManifests(): Promise<Manifest[]>;
111
108
  listManifestPage(afterVersion: number | null, limit: number): Promise<{
112
- records: Manifest[];
109
+ records: ManifestSummary[];
113
110
  nextCursor: number | null;
114
111
  }>;
115
- publishManifest(input: PublishManifestInput): Promise<Manifest>;
116
112
  beginTransaction(input: BeginTransactionInput): Promise<BeginTransactionResult>;
117
113
  createTransaction(record: TransactionRecord): Promise<void>;
118
114
  getTransaction(id: string): Promise<TransactionRecord | undefined>;
119
115
  getTransactions(ids: readonly string[]): Promise<Array<TransactionRecord | undefined>>;
120
- listTransactions(): Promise<TransactionRecord[]>;
121
116
  listTransactionPage(afterId: string | null, limit: number): Promise<{
122
117
  records: TransactionRecord[];
123
118
  nextCursor: string | null;
124
119
  }>;
125
120
  updateTransaction(id: string, expectedRevision: number, update: TransactionRecordUpdate): Promise<TransactionRecord>;
121
+ renewTransaction(input: RenewTransactionInput): Promise<boolean>;
122
+ abortTransactionIfExpired(input: AbortTransactionIfExpiredInput): Promise<TransactionRecord | undefined>;
126
123
  stageTransactionArtifacts(input: StageTransactionArtifactsInput): Promise<TransactionRecord>;
124
+ rollbackTransactionArtifacts(input: RollbackTransactionArtifactsInput): Promise<TransactionRecord>;
127
125
  commitTransaction(input: CommitTransactionInput): Promise<ManifestSummary>;
128
126
  writeTransaction(input: WriteTransactionInput): Promise<ManifestSummary>;
129
127
  createLease(record: LeaseRecord): Promise<void>;
130
128
  getLease(id: string): Promise<LeaseRecord | undefined>;
131
129
  listLeases(): Promise<LeaseRecord[]>;
132
- renewLease(id: string, expectedRevision: number, expiresAt: string): Promise<LeaseRecord>;
133
- moveLease(id: string, expectedRevision: number, manifestVersion: number | null, expiresAt: string): Promise<LeaseRecord>;
130
+ listExpiredLeasePage(expiresAtCutoff: string, afterCursor: string | null, limit: number): Promise<{
131
+ records: LeaseRecord[];
132
+ nextCursor: string | null;
133
+ }>;
134
+ renewLease(input: RenewLeaseInput): Promise<LeaseRecord>;
135
+ moveLease(input: MoveLeaseInput): Promise<LeaseRecord>;
134
136
  removeLeaseIfExpired(id: string, expectedRevision: number, expiresAtCutoff: string): Promise<boolean>;
135
- removeLease(id: string): Promise<void>;
137
+ removeLease(input: {
138
+ id: string;
139
+ ownerId: string;
140
+ }): Promise<boolean>;
136
141
  createCompactionJob(record: CompactionJobRecord): Promise<void>;
137
142
  getCompactionJob(id: string): Promise<CompactionJobRecord | undefined>;
138
143
  listCompactionJobs(tableId?: string): Promise<CompactionJobRecord[]>;
@@ -142,33 +147,36 @@ export declare class IndexedDbBlockStore implements BlockStore {
142
147
  }>;
143
148
  updateCompactionJob(id: string, expectedRevision: number, update: CompactionJobRecordUpdate): Promise<CompactionJobRecord>;
144
149
  cancelCompactionJob(id: string, expectedRevision: number, cancelledAt: string): Promise<CompactionJobRecord>;
145
- removeCompactionJob(id: string): Promise<void>;
150
+ removeCompactionJob(id: string): Promise<boolean>;
146
151
  createGarbageCollectionJob(input: CreateGarbageCollectionJobInput): Promise<GarbageCollectionJobRecord>;
152
+ updateGarbageCollectionPlanning(input: UpdateGarbageCollectionPlanningInput): Promise<GarbageCollectionJobRecord>;
147
153
  getGarbageCollectionJob(id: string): Promise<GarbageCollectionJobRecord | undefined>;
148
154
  listGarbageCollectionJobs(): Promise<GarbageCollectionJobRecord[]>;
155
+ listGarbageCollectionJobPage(afterId: string | null, limit: number): Promise<{
156
+ records: GarbageCollectionJobRecord[];
157
+ nextCursor: string | null;
158
+ }>;
149
159
  runGarbageCollectionStep(input: RunGarbageCollectionStepInput): Promise<GarbageCollectionStepResult>;
150
- removePrunedManifestRecords(): Promise<number>;
160
+ removePrunedManifestRecords(maxItems: number): Promise<number>;
151
161
  removeGarbageCollectionJob(id: string): Promise<void>;
152
162
  getLogicalStorageBytes(): Promise<number>;
153
- /**
154
- * Copies the current version out as a portable snapshot. See `./snapshot.ts` for what a
155
- * snapshot carries and what it deliberately leaves behind.
156
- *
157
- * This reads across several transactions rather than one, so a concurrent commit could move
158
- * the version underneath it. Hold a `backup` lease (see `../transactions/index.ts`) around
159
- * the call when that is possible; the offline generators that produce published datasets are
160
- * the only writer in their process and do not need one.
161
- */
162
- exportSnapshot(): Promise<DatabaseSnapshot>;
163
- /**
164
- * Loads a snapshot into this store, which must be empty. Block payloads go in batched
165
- * transactions so a large dataset does not build one enormous write, and the current-version
166
- * pointer is written last: until it lands, an interrupted load leaves a store that still reads
167
- * as empty rather than as half a database.
168
- */
169
- importSnapshot(snapshot: DatabaseSnapshot, options?: {
170
- onProgress?: (progress: SnapshotLoadProgress) => void;
171
- }): Promise<void>;
163
+ inspectInterruptedImport(): Promise<InterruptedSnapshotImport | null>;
164
+ abortInterruptedImport(identity: string): Promise<InterruptedSnapshotImportAbortResult>;
165
+ getStorageStats(): Promise<StorageStats>;
166
+ checkIntegrity(options?: {
167
+ mode?: "metadata" | "full";
168
+ maxIssues?: number;
169
+ }): Promise<StorageIntegrityReport>;
170
+ /** Captures one immutable, framed view and its durable GC pin without reading payload bytes. */
171
+ beginSnapshotFrameExport(input: BeginSnapshotFrameExportInput): Promise<SnapshotFrameExportSession>;
172
+ /** Reads one frozen metadata page or one live-at-version payload and renews the pin atomically. */
173
+ readSnapshotExportFrame(input: ReadSnapshotExportFrameInput): Promise<SnapshotFrame | undefined>;
174
+ closeSnapshotFrameExport(input: CloseSnapshotExportInput): Promise<boolean>;
175
+ beginSnapshotFrameImport(input: BeginSnapshotFrameImportInput): Promise<SnapshotFrameImportSession>;
176
+ renewSnapshotFrameImport(input: RenewSnapshotFrameImportInput): Promise<SnapshotFrameImportSession>;
177
+ appendSnapshotImportFrames(input: AppendSnapshotImportFramesInput): Promise<SnapshotFrameImportSession>;
178
+ finishSnapshotFrameImport(input: FinishSnapshotFrameImportInput): Promise<void>;
179
+ cancelSnapshotFrameImport(input: CancelSnapshotImportInput): Promise<InterruptedSnapshotImportAbortResult>;
172
180
  close(): void;
173
181
  /** Test-only counters that make the adapter's retained-state bounds regression-testable. */
174
182
  _residentStateForTests(): {
@@ -177,6 +185,7 @@ export declare class IndexedDbBlockStore implements BlockStore {
177
185
  uniqueKeyCacheBytes: number;
178
186
  uniqueKeyCacheLimitBytes: number;
179
187
  manifestCacheBlockIds: number;
188
+ snapshotPeakRetainedItems: number;
189
+ snapshotPeakRetainedBytes: number;
180
190
  };
181
191
  }
182
- //# sourceMappingURL=indexeddb.d.ts.map