@minnowdb/core 0.3.0 → 0.4.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.
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 +4326 -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 +4318 -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,6 +1,356 @@
1
- import { type BeginTransactionInput, type BeginTransactionResult, type BlockWrite, type CatalogProbe, type CommitTransactionInput, type CompactionJobRecord, type CompactionJobRecordUpdate, type CreateGarbageCollectionJobInput, 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 TriggerRecord, type WriteTransactionInput } from "../types.js";
2
- import { type DatabaseSnapshot, type SnapshotLoadProgress } from "../snapshot.js";
1
+ import { type BeginTransactionInput, type BeginTransactionResult, type CloseSnapshotExportInput, type CancelSnapshotImportInput, type InterruptedSnapshotImportAbortResult, type AbortTransactionIfExpiredInput, type AdoptAbortedSegmentInput, type RenewTransactionInput, type CommitTransactionInput, type CompactionJobRecord, type CompactionJobRecordUpdate, type CreateGarbageCollectionJobInput, type UpdateGarbageCollectionPlanningInput, type DropTableColumnInput, type DropTableInput, type FtsCandidates, type FtsPostingQuery, type FtsPosting, type GarbageCollectionJobRecord, type GarbageCollectionStepResult, type LeaseRecord, type MoveLeaseInput, type ManifestSummary, type ManifestBlockPage, type ListManifestBlockPageInput, type ListRetiredManifestBlockPageInput, type RollbackTransactionArtifactsInput, type RenewLeaseInput, type RenewTempOwnerInput, type RunGarbageCollectionStepInput, type SegmentRecord, type StageTransactionArtifactsInput, type StoragePage, type StorageIntegrityMode, type StorageIntegrityReport, type StorageStats, type CatalogMutationOptions, type TableRecord, type TableRecordUpdate, type TempOwnerRecord, type TempRunPage, type TransactionRecord, type TransactionRecordUpdate, type WriteTransactionInput, type BeginUniqueKeyBuildInput, type RenewUniqueKeyBuildInput, type AppendUniqueKeyBuildChunkInput, type FinishUniqueKeyBuildInput, type AbortUniqueKeyBuildInput, type BeginPostingBuildInput, type RenewPostingBuildInput, type AppendPostingBuildChunkInput, type FinishPostingBuildInput, type AbortPostingBuildInput, type BeginSnapshotFrameExportInput, type BeginSnapshotFrameImportInput, type ReadSnapshotExportFrameInput, type RenewSnapshotFrameImportInput, type AppendSnapshotImportFramesInput, type FinishSnapshotFrameImportInput, type SnapshotFrame, type SnapshotFrameExportSession, type SnapshotFrameImportSession, type SnapshotFrameKind, type SnapshotFrameStreamHeader } from "../types.js";
3
2
  import { OpfsTree } from "./files.js";
3
+ import { type Placement } from "../toolkit/extents.js";
4
+ /** A failed checkpoint may defer compaction, but the recovery log itself stays bounded. */
5
+ export declare const MAX_OPFS_WAL_BYTES: number;
6
+ export declare const MAX_OPFS_CHECKPOINT_BYTES: number;
7
+ /** Failed physical reclamation cannot permit byte-growing work forever. */
8
+ export declare const MAX_OPFS_CLEANUP_DEBT_BYTES: number;
9
+ interface IdPlacement {
10
+ id: string;
11
+ placement: Placement;
12
+ }
13
+ interface BlockRelocation {
14
+ id: string;
15
+ from: Placement;
16
+ placement: Placement;
17
+ }
18
+ interface FtsChunkRelocation {
19
+ key: string;
20
+ ordinal: number;
21
+ from: Placement;
22
+ placement: Placement;
23
+ }
24
+ interface FtsBuildChunkRelocation extends FtsChunkRelocation {
25
+ buildId: string;
26
+ }
27
+ interface FtsBasePointer {
28
+ coversVersion: number;
29
+ totalTokens: number;
30
+ chunks: Placement[];
31
+ chunkBounds: Array<{
32
+ first: string;
33
+ last: string;
34
+ }>;
35
+ }
36
+ interface TempPageLedgerRecord {
37
+ ownerId: string;
38
+ runId: string;
39
+ pageIndex: number;
40
+ length: number;
41
+ }
42
+ interface SnapshotFrameExportState {
43
+ sessionId: string;
44
+ ownerId: string;
45
+ createdAt: string;
46
+ expiresAt: string;
47
+ leaseRevision: number;
48
+ manifestVersion: number;
49
+ header: SnapshotFrameStreamHeader;
50
+ ledgerId: string;
51
+ ledgerLength: number;
52
+ metadataFrameCount: number;
53
+ nextSequence: number;
54
+ metadataOffset: number;
55
+ blockCursor: string | null;
56
+ lastSequence: number | null;
57
+ lastMetadataOffset: number | null;
58
+ lastBlockId: string | null;
59
+ }
60
+ interface SnapshotFrameObservedState {
61
+ frameCount: number;
62
+ itemCount: number;
63
+ storedBytes: number;
64
+ }
65
+ interface SnapshotFrameImportState {
66
+ identity: string;
67
+ ownerId: string;
68
+ version: number;
69
+ createdAt: string;
70
+ expiresAt: string;
71
+ header: SnapshotFrameStreamHeader;
72
+ ledgerId: string;
73
+ ledgerLength: number;
74
+ nextSequence: number;
75
+ stagedBytes: number;
76
+ blockCount: number;
77
+ blockBytes: number;
78
+ checksum: number;
79
+ currentKindIndex: number;
80
+ observed: Record<SnapshotFrameKind, SnapshotFrameObservedState>;
81
+ lastBatchStartSequence: number | null;
82
+ lastBatchOffset: number | null;
83
+ lastBatchFrameCount: number;
84
+ completedReplay: boolean;
85
+ }
86
+ type WalEntryBody = {
87
+ op: "relocatePayloads";
88
+ blocks: BlockRelocation[];
89
+ ftsChunks: FtsChunkRelocation[];
90
+ ftsBuildChunks: FtsBuildChunkRelocation[];
91
+ } | {
92
+ op: "addTable";
93
+ record: TableRecord;
94
+ expectedCatalogEpoch: number | null;
95
+ } | {
96
+ op: "updateTable";
97
+ id: string;
98
+ expectedRevision: number;
99
+ update: TableRecordUpdate;
100
+ } | {
101
+ op: "removeTable";
102
+ id: string;
103
+ expectedRevision: number;
104
+ expectedCatalogEpoch: number | null;
105
+ } | {
106
+ op: "dropTable";
107
+ input: DropTableInput;
108
+ } | {
109
+ op: "dropTableColumn";
110
+ input: DropTableColumnInput;
111
+ } | {
112
+ op: "removeFtsColumn";
113
+ tableId: string;
114
+ columnId: string;
115
+ } | {
116
+ op: "removeAbortedSegment";
117
+ id: string;
118
+ expectedTransactionId: string;
119
+ } | {
120
+ op: "adoptAbortedSegment";
121
+ input: AdoptAbortedSegmentInput;
122
+ } | {
123
+ op: "reserveRowIds";
124
+ tableId: string;
125
+ count: number;
126
+ } | {
127
+ op: "beginUniqueKeyBuild";
128
+ input: BeginUniqueKeyBuildInput;
129
+ } | {
130
+ op: "renewUniqueKeyBuild";
131
+ input: RenewUniqueKeyBuildInput;
132
+ } | {
133
+ op: "appendUniqueKeyBuildChunk";
134
+ input: AppendUniqueKeyBuildChunkInput;
135
+ } | {
136
+ op: "finishUniqueKeyBuild";
137
+ input: FinishUniqueKeyBuildInput;
138
+ } | {
139
+ op: "abortUniqueKeyBuild";
140
+ input: AbortUniqueKeyBuildInput;
141
+ } | {
142
+ op: "reserveAutoIncrement";
143
+ tableId: string;
144
+ columnId: string;
145
+ count: number;
146
+ atLeast?: bigint;
147
+ } | {
148
+ op: "beginTransaction";
149
+ input: BeginTransactionInput;
150
+ } | {
151
+ op: "createTransaction";
152
+ record: TransactionRecord;
153
+ } | {
154
+ op: "renewTransaction";
155
+ input: RenewTransactionInput;
156
+ } | {
157
+ op: "abortTransactionIfExpired";
158
+ input: AbortTransactionIfExpiredInput;
159
+ } | {
160
+ op: "updateTransaction";
161
+ id: string;
162
+ expectedRevision: number;
163
+ update: TransactionRecordUpdate;
164
+ } | {
165
+ op: "stageTransactionArtifacts";
166
+ transactionId: string;
167
+ expectedRevision: number;
168
+ blocks: IdPlacement[];
169
+ segments: SegmentRecord[];
170
+ updatedAt: string;
171
+ } | {
172
+ op: "rollbackTransactionArtifacts";
173
+ input: RollbackTransactionArtifactsInput;
174
+ } | {
175
+ op: "commitTransaction";
176
+ input: CommitTransactionInput;
177
+ } | {
178
+ op: "writeTransaction";
179
+ input: Omit<WriteTransactionInput, "blocks">;
180
+ blocks: IdPlacement[];
181
+ } | {
182
+ op: "createLease";
183
+ record: LeaseRecord;
184
+ } | {
185
+ op: "renewLease";
186
+ input: RenewLeaseInput;
187
+ } | {
188
+ op: "moveLease";
189
+ input: MoveLeaseInput;
190
+ } | {
191
+ op: "removeLeaseIfExpired";
192
+ id: string;
193
+ expectedRevision: number;
194
+ expiresAtCutoff: string;
195
+ } | {
196
+ op: "removeLease";
197
+ input: {
198
+ id: string;
199
+ ownerId: string;
200
+ };
201
+ } | {
202
+ op: "createCompactionJob";
203
+ record: CompactionJobRecord;
204
+ } | {
205
+ op: "updateCompactionJob";
206
+ id: string;
207
+ expectedRevision: number;
208
+ update: CompactionJobRecordUpdate;
209
+ } | {
210
+ op: "cancelCompactionJob";
211
+ id: string;
212
+ expectedRevision: number;
213
+ cancelledAt: string;
214
+ } | {
215
+ op: "removeCompactionJob";
216
+ id: string;
217
+ } | {
218
+ op: "createGarbageCollectionJob";
219
+ input: CreateGarbageCollectionJobInput;
220
+ } | {
221
+ op: "updateGarbageCollectionPlanning";
222
+ input: UpdateGarbageCollectionPlanningInput;
223
+ } | {
224
+ op: "garbageCollectionStep";
225
+ effect: {
226
+ job: GarbageCollectionJobRecord;
227
+ prunedManifestVersions: number[];
228
+ reclaimedSegmentIds: string[];
229
+ reclaimedBlockIds: string[];
230
+ reclaimedTransactionIds: string[];
231
+ updatedAt: string;
232
+ };
233
+ } | {
234
+ op: "removeGarbageCollectionJob";
235
+ id: string;
236
+ } | {
237
+ op: "removePrunedManifestRecords";
238
+ maxItems: number;
239
+ } | {
240
+ op: "createTempOwner";
241
+ record: TempOwnerRecord;
242
+ } | {
243
+ op: "renewTempOwner";
244
+ input: RenewTempOwnerInput;
245
+ } | {
246
+ op: "removeTempOwnerIfExpired";
247
+ ownerId: string;
248
+ expiresAtCutoff: string;
249
+ } | {
250
+ op: "removeTempOwner";
251
+ ownerId: string;
252
+ } | {
253
+ op: "reserveTempRunPages";
254
+ pages: TempPageLedgerRecord[];
255
+ } | {
256
+ op: "restoreTempRunPages";
257
+ pages: Array<Omit<TempPageLedgerRecord, "length"> & {
258
+ length: number | null;
259
+ }>;
260
+ } | {
261
+ op: "removeTempRun";
262
+ ownerId: string;
263
+ runId: string;
264
+ } | {
265
+ op: "writeFtsBase";
266
+ tableId: string;
267
+ columnId: string;
268
+ pointer: FtsBasePointer;
269
+ } | {
270
+ op: "beginFtsBaseBuild";
271
+ input: BeginPostingBuildInput;
272
+ } | {
273
+ op: "renewFtsBaseBuild";
274
+ input: RenewPostingBuildInput;
275
+ } | {
276
+ op: "writeFtsBaseBuildChunk";
277
+ input: Omit<AppendPostingBuildChunkInput, "chunk">;
278
+ placement: Placement;
279
+ bounds: {
280
+ first: string;
281
+ last: string;
282
+ };
283
+ totalTokens: number;
284
+ retainedEntries: number;
285
+ } | {
286
+ op: "finishFtsBaseBuild";
287
+ input: FinishPostingBuildInput;
288
+ } | {
289
+ op: "abortFtsBaseBuild";
290
+ input: AbortPostingBuildInput;
291
+ } | {
292
+ op: "beginSnapshotFrameExport";
293
+ state: SnapshotFrameExportState;
294
+ } | {
295
+ op: "advanceSnapshotFrameExport";
296
+ input: ReadSnapshotExportFrameInput;
297
+ expectedLeaseRevision: number;
298
+ next: Pick<SnapshotFrameExportState, "nextSequence" | "metadataOffset" | "blockCursor" | "lastSequence" | "lastMetadataOffset" | "lastBlockId">;
299
+ } | {
300
+ op: "closeSnapshotFrameExport";
301
+ input: CloseSnapshotExportInput;
302
+ } | {
303
+ op: "beginSnapshotFrameImport";
304
+ state: SnapshotFrameImportState;
305
+ } | {
306
+ op: "renewSnapshotFrameImport";
307
+ input: RenewSnapshotFrameImportInput;
308
+ } | {
309
+ op: "appendSnapshotImportFrames";
310
+ input: RenewSnapshotFrameImportInput;
311
+ state: Omit<SnapshotFrameImportState, "header">;
312
+ blockPlacements: IdPlacement[];
313
+ replay: boolean;
314
+ } | {
315
+ op: "finishSnapshotFrameImport";
316
+ input: FinishSnapshotFrameImportInput;
317
+ } | {
318
+ op: "cancelSnapshotFrameImport";
319
+ input: CancelSnapshotImportInput;
320
+ };
321
+ declare const CORE_READ_METHODS: readonly ["getTempOwner", "getTable", "getTableByName", "listTables", "getSegment", "listSegmentPage", "listTableSegmentPage", "getExistingUniqueKeys", "getUniqueKeyBuild", "getCurrentManifestVersion", "getCatalogProbe", "getCurrentManifest", "getManifest", "listManifestPage", "listManifestBlockPage", "listRetiredManifestBlockPage", "getTransaction", "getTransactions", "listTransactionPage", "getLease", "listLeases", "listExpiredLeasePage", "getCompactionJob", "listCompactionJobs", "listCompactionJobPage", "getGarbageCollectionJob", "listGarbageCollectionJobs", "listGarbageCollectionJobPage"];
322
+ type CoreReadMethod = (typeof CORE_READ_METHODS)[number];
323
+ declare const LOGGED_BODY_BUILDERS: {
324
+ readonly createTempOwner: ([record]: unknown[]) => WalEntryBody;
325
+ readonly renewTempOwner: ([input]: unknown[]) => WalEntryBody;
326
+ readonly removeAbortedSegment: ([id, expectedTransactionId]: unknown[]) => WalEntryBody;
327
+ readonly adoptAbortedSegment: ([input]: unknown[]) => WalEntryBody;
328
+ readonly reserveRowIds: ([tableId, count]: unknown[]) => WalEntryBody;
329
+ readonly beginUniqueKeyBuild: ([input]: unknown[]) => WalEntryBody;
330
+ readonly renewUniqueKeyBuild: ([input]: unknown[]) => WalEntryBody;
331
+ readonly appendUniqueKeyBuildChunk: ([input]: unknown[]) => WalEntryBody;
332
+ readonly finishUniqueKeyBuild: ([input]: unknown[]) => WalEntryBody;
333
+ readonly abortUniqueKeyBuild: ([input]: unknown[]) => WalEntryBody;
334
+ readonly reserveAutoIncrement: ([tableId, columnId, count, atLeast]: unknown[]) => WalEntryBody;
335
+ readonly createTransaction: ([record]: unknown[]) => WalEntryBody;
336
+ readonly renewTransaction: ([input]: unknown[]) => WalEntryBody;
337
+ readonly abortTransactionIfExpired: ([input]: unknown[]) => WalEntryBody;
338
+ readonly updateTransaction: ([id, expectedRevision, update]: unknown[]) => WalEntryBody;
339
+ readonly commitTransaction: ([input]: unknown[]) => WalEntryBody;
340
+ readonly createLease: ([record]: unknown[]) => WalEntryBody;
341
+ readonly renewLease: ([input]: unknown[]) => WalEntryBody;
342
+ readonly moveLease: ([input]: unknown[]) => WalEntryBody;
343
+ readonly removeLeaseIfExpired: ([id, expectedRevision, expiresAtCutoff]: unknown[]) => WalEntryBody;
344
+ readonly removeLease: ([input]: unknown[]) => WalEntryBody;
345
+ readonly createCompactionJob: ([record]: unknown[]) => WalEntryBody;
346
+ readonly updateCompactionJob: ([id, expectedRevision, update]: unknown[]) => WalEntryBody;
347
+ readonly cancelCompactionJob: ([id, expectedRevision, cancelledAt]: unknown[]) => WalEntryBody;
348
+ readonly createGarbageCollectionJob: ([input]: unknown[]) => WalEntryBody;
349
+ readonly updateGarbageCollectionPlanning: ([input]: unknown[]) => WalEntryBody;
350
+ readonly removeGarbageCollectionJob: ([id]: unknown[]) => WalEntryBody;
351
+ readonly removePrunedManifestRecords: ([maxItems]: unknown[]) => WalEntryBody;
352
+ };
353
+ type LoggedMethod = keyof typeof LOGGED_BODY_BUILDERS;
4
354
  /**
5
355
  * The leader: the one instance holding the database's write-ahead log handle, and with it
6
356
  * every other handle — checkpoint slots, the tail extent, a small cache of sealed extents.
@@ -26,127 +376,89 @@ export declare class OpfsLeader {
26
376
  wal: FileSystemSyncAccessHandle;
27
377
  slotA: FileSystemSyncAccessHandle;
28
378
  slotB: FileSystemSyncAccessHandle;
29
- }, checkpointEntries?: number): Promise<OpfsLeader>;
30
- /** Fully synchronous: dump, write the older slot, flush it, then and only then reset. */
379
+ }, checkpointEntries?: number, cleanupLimitBytes?: number): Promise<OpfsLeader>;
380
+ /**
381
+ * Fully synchronous: publish the same generation to both slots, flush each, then reset.
382
+ * Therefore corruption of either post-success copy cannot expose an older database.
383
+ */
31
384
  checkpointNow(): void;
32
- addBlock(id: string, bytes: Uint8Array): Promise<void>;
33
- addBlocks(blocks: readonly BlockWrite[]): Promise<void>;
34
385
  getBlock(id: string): Promise<Uint8Array | undefined>;
35
386
  getBlocks(ids: readonly string[]): Promise<Array<Uint8Array | undefined>>;
36
- removeBlock(id: string): Promise<void>;
37
- listBlockIds(): Promise<string[]>;
387
+ readManifestBlock(version: number | null, id: string): Promise<Uint8Array | undefined>;
388
+ hasManifestBlocks(version: number | null, ids: readonly string[]): Promise<boolean[]>;
389
+ listManifestBlockPage(input: ListManifestBlockPageInput): Promise<ManifestBlockPage>;
390
+ listRetiredManifestBlockPage(input: ListRetiredManifestBlockPageInput): Promise<ManifestBlockPage>;
38
391
  putTempRunPage(page: TempRunPage): Promise<void>;
392
+ putTempRunPages(pages: readonly TempRunPage[]): Promise<void>;
39
393
  getTempRunPage(ownerId: string, runId: string, pageIndex: number): Promise<Uint8Array | undefined>;
40
394
  removeTempRun(ownerId: string, runId: string): Promise<void>;
41
395
  removeTempOwner(ownerId: string): Promise<void>;
42
- createTempOwner(record: TempOwnerRecord): Promise<void>;
43
- getTempOwner(ownerId: string): Promise<TempOwnerRecord | undefined>;
44
- renewTempOwner(ownerId: string, expectedRevision: number, expiresAt: string): Promise<TempOwnerRecord>;
396
+ removeCompactionJob(id: string): Promise<boolean>;
397
+ /** @internal Shared implementation installed for direct RecordCore reads below. */
398
+ _readCoreGenerated(method: CoreReadMethod, args: unknown[]): Promise<unknown>;
399
+ /** @internal Shared implementation installed for ordinary one-frame mutations below. */
400
+ _loggedGenerated(method: LoggedMethod, args: unknown[]): Promise<unknown>;
45
401
  removeTempOwnerIfExpired(ownerId: string, expiresAtCutoff: string): Promise<boolean>;
46
402
  listTempOwnerIdsPage(afterOwnerId: string | null, limit: number): Promise<StoragePage<string, string>>;
47
- getTable(id: string): Promise<TableRecord | undefined>;
48
- getTableByName(name: string): Promise<TableRecord | undefined>;
49
- listTables(): Promise<TableRecord[]>;
50
- getSegment(id: string): Promise<SegmentRecord | undefined>;
51
- listSegments(tableId?: string): Promise<SegmentRecord[]>;
52
- listSegmentPage(afterId: string | null, limit: number): Promise<StoragePage<SegmentRecord, string>>;
53
- getExistingUniqueKeys(tableId: string, keyTokens: readonly string[]): Promise<string[]>;
54
- getCurrentManifestVersion(): Promise<number | null>;
55
- getCatalogProbe(): Promise<CatalogProbe>;
56
- getQueryCatalogState(tableNames: readonly string[]): Promise<QueryCatalogState>;
57
- getCurrentManifest(): Promise<Manifest | undefined>;
58
- getManifest(version: number): Promise<Manifest | undefined>;
59
- listManifests(): Promise<Manifest[]>;
60
- listManifestPage(afterVersion: number | null, limit: number): Promise<StoragePage<Manifest, number>>;
61
- getTransaction(id: string): Promise<TransactionRecord | undefined>;
62
- getTransactions(ids: readonly string[]): Promise<Array<TransactionRecord | undefined>>;
63
- listTransactions(): Promise<TransactionRecord[]>;
64
- listTransactionPage(afterId: string | null, limit: number): Promise<StoragePage<TransactionRecord, string>>;
65
- getLease(id: string): Promise<LeaseRecord | undefined>;
66
- listLeases(): Promise<LeaseRecord[]>;
67
- getCompactionJob(id: string): Promise<CompactionJobRecord | undefined>;
68
- listCompactionJobs(tableId?: string): Promise<CompactionJobRecord[]>;
69
- listCompactionJobPage(afterId: string | null, limit: number): Promise<StoragePage<CompactionJobRecord, string>>;
70
- getGarbageCollectionJob(id: string): Promise<GarbageCollectionJobRecord | undefined>;
71
- listGarbageCollectionJobs(): Promise<GarbageCollectionJobRecord[]>;
72
- addTable(record: TableRecord): Promise<void>;
73
- updateTable(id: string, expectedRevision: number, update: {
74
- columns?: TableColumnRecord[];
75
- ftsColumns?: Record<string, FtsColumnIndexRecord> | null;
76
- secondaryIndexes?: Record<string, SecondaryIndexRecord> | null;
77
- expectedManifestVersion?: {
78
- value: number | null;
79
- };
80
- uniqueKeySeed?: {
81
- namespaceId: string;
82
- keyTokens: readonly string[];
83
- };
84
- triggers?: TriggerRecord[] | null;
85
- }): Promise<TableRecord>;
86
- removeTable(id: string, expectedRevision: number): Promise<void>;
403
+ listExpiredTempOwnerPage(expiresAtCutoff: string, afterCursor: string | null, limit: number): Promise<StoragePage<string, string>>;
404
+ addTable(record: TableRecord, options?: CatalogMutationOptions): Promise<void>;
405
+ updateTable(id: string, expectedRevision: number, update: TableRecordUpdate): Promise<TableRecord>;
406
+ removeTable(id: string, expectedRevision: number, options?: CatalogMutationOptions): Promise<void>;
407
+ dropTable(input: DropTableInput): Promise<ManifestSummary>;
408
+ dropTableColumn(input: DropTableColumnInput): Promise<ManifestSummary>;
87
409
  removeFtsColumn(tableId: string, columnId: string): Promise<void>;
88
- addSegment(record: SegmentRecord): Promise<void>;
89
- removeSegment(id: string): Promise<void>;
90
- reserveRowIds(tableId: string, count: number): Promise<RowIdRange>;
91
- reserveAutoIncrement(tableId: string, columnId: string, count: number, atLeast?: bigint): Promise<RowIdRange>;
92
- publishManifest(input: PublishManifestInput): Promise<Manifest>;
93
410
  beginTransaction(input: BeginTransactionInput): Promise<BeginTransactionResult>;
94
- createTransaction(record: TransactionRecord): Promise<void>;
95
- updateTransaction(id: string, expectedRevision: number, update: TransactionRecordUpdate): Promise<TransactionRecord>;
96
411
  stageTransactionArtifacts(input: StageTransactionArtifactsInput): Promise<TransactionRecord>;
97
- commitTransaction(input: CommitTransactionInput): Promise<ManifestSummary>;
412
+ rollbackTransactionArtifacts(input: RollbackTransactionArtifactsInput): Promise<TransactionRecord>;
98
413
  writeTransaction(input: WriteTransactionInput): Promise<ManifestSummary>;
99
- createLease(record: LeaseRecord): Promise<void>;
100
- renewLease(id: string, expectedRevision: number, expiresAt: string): Promise<LeaseRecord>;
101
- moveLease(id: string, expectedRevision: number, manifestVersion: number | null, expiresAt: string): Promise<LeaseRecord>;
102
- removeLeaseIfExpired(id: string, expectedRevision: number, expiresAtCutoff: string): Promise<boolean>;
103
- removeLease(id: string): Promise<void>;
104
- createCompactionJob(record: CompactionJobRecord): Promise<void>;
105
- updateCompactionJob(id: string, expectedRevision: number, update: CompactionJobRecordUpdate): Promise<CompactionJobRecord>;
106
- cancelCompactionJob(id: string, expectedRevision: number, cancelledAt: string): Promise<CompactionJobRecord>;
107
- removeCompactionJob(id: string): Promise<void>;
108
- createGarbageCollectionJob(input: CreateGarbageCollectionJobInput): Promise<GarbageCollectionJobRecord>;
109
414
  runGarbageCollectionStep(input: RunGarbageCollectionStepInput): Promise<GarbageCollectionStepResult>;
110
- removeGarbageCollectionJob(id: string): Promise<void>;
111
- removePrunedManifestRecords(): Promise<number>;
112
415
  writeFtsBase(tableId: string, columnId: string, input: {
113
416
  coversVersion: number;
114
417
  chunks: FtsPosting[][];
115
418
  totalTokens: number;
116
419
  }): Promise<void>;
117
- beginFtsBaseBuild(tableId: string, columnId: string, buildId: string): Promise<void>;
118
- writeFtsBaseBuildChunk(tableId: string, columnId: string, buildId: string, ordinal: number, chunk: FtsPosting[]): Promise<void>;
119
- finishFtsBaseBuild(tableId: string, columnId: string, buildId: string, input: {
120
- coversVersion: number;
121
- chunkCount: number;
122
- totalTokens: number;
123
- }): Promise<void>;
124
- abortFtsBaseBuild(tableId: string, columnId: string, buildId: string): Promise<void>;
125
- readFtsCandidates(tableId: string, columnId: string, terms: readonly FtsPostingQuery[], upToVersion: number): Promise<FtsCandidates & {
420
+ beginFtsBaseBuild(input: BeginPostingBuildInput): Promise<void>;
421
+ renewFtsBaseBuild(input: RenewPostingBuildInput): Promise<void>;
422
+ writeFtsBaseBuildChunk(input: AppendPostingBuildChunkInput): Promise<void>;
423
+ finishFtsBaseBuild(input: FinishPostingBuildInput): Promise<void>;
424
+ abortFtsBaseBuild(input: AbortPostingBuildInput): Promise<void>;
425
+ readFtsCandidates(tableId: string, columnId: string, terms: readonly FtsPostingQuery[], upToVersion: number, maxRowIds?: number): Promise<FtsCandidates & {
126
426
  deltaChunkCount: number;
127
427
  totalTokens: number;
128
428
  coversVersion: number;
129
429
  hasBase: boolean;
130
430
  }>;
131
- readFtsPostings(tableId: string, columnId: string, upToVersion: number): Promise<{
132
- postings: FtsPosting[];
431
+ readFtsPostings(tableId: string, columnId: string, upToVersion: number, maxRowIds?: number, maxRetainedBytes?: number): Promise<{
133
432
  deltaChunkCount: number;
134
433
  coversVersion: number;
135
434
  hasBase: boolean;
435
+ postings: FtsPosting[];
436
+ overflow: boolean;
136
437
  }>;
137
- /**
138
- * Consistent by construction: the export runs as one queue operation, so no commit or
139
- * garbage collection interleaves with it. Full-text bases export as rebuilds.
140
- */
141
- exportSnapshot(): Promise<DatabaseSnapshot>;
142
- importSnapshot(snapshot: DatabaseSnapshot, options?: {
143
- onProgress?: (progress: SnapshotLoadProgress) => void;
144
- }): Promise<void>;
438
+ beginSnapshotFrameExport(input: BeginSnapshotFrameExportInput): Promise<SnapshotFrameExportSession>;
439
+ readSnapshotExportFrame(input: ReadSnapshotExportFrameInput): Promise<SnapshotFrame | undefined>;
440
+ closeSnapshotFrameExport(input: CloseSnapshotExportInput): Promise<boolean>;
441
+ beginSnapshotFrameImport(input: BeginSnapshotFrameImportInput): Promise<SnapshotFrameImportSession>;
442
+ renewSnapshotFrameImport(input: RenewSnapshotFrameImportInput): Promise<SnapshotFrameImportSession>;
443
+ appendSnapshotImportFrames(input: AppendSnapshotImportFramesInput): Promise<SnapshotFrameImportSession>;
444
+ finishSnapshotFrameImport(input: FinishSnapshotFrameImportInput): Promise<void>;
445
+ cancelSnapshotFrameImport(input: CancelSnapshotImportInput): Promise<InterruptedSnapshotImportAbortResult>;
145
446
  /** Live payload bytes plus the control files — what this database logically occupies. */
146
447
  getLogicalStorageBytes(): Promise<number>;
448
+ getStorageStats(): Promise<StorageStats>;
449
+ checkIntegrity(options?: {
450
+ mode?: StorageIntegrityMode;
451
+ maxIssues?: number;
452
+ }): Promise<StorageIntegrityReport>;
147
453
  /** Graceful: flush, checkpoint (so the next leader's takeover is instant), release. */
148
454
  shutdown(): Promise<void>;
149
455
  /** Test-only: what tab death does — locks release, nothing is flushed or checkpointed. */
150
456
  crash(): void;
151
457
  }
152
- //# sourceMappingURL=leader.d.ts.map
458
+ /** @internal Exact pre-read aggregate limit, exported only for the no-allocation regression. */
459
+ export declare function assertBlockReadBatchByteLimit(placements: ReadonlyArray<{
460
+ length: number;
461
+ } | undefined>): void;
462
+ /** Conservative retained-heap model for one decoded postings chunk and its nested arrays. */
463
+ export declare function modeledFtsChunkBytes(chunk: readonly FtsPosting[]): number;
464
+ export {};