@minnowdb/core 0.0.1 → 0.1.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 (218) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +27 -1
  3. package/dist/block-format/block.d.ts +46 -0
  4. package/dist/block-format/block.d.ts.map +1 -0
  5. package/dist/block-format/block.js +244 -0
  6. package/dist/block-format/block.js.map +1 -0
  7. package/dist/block-format/checksum.d.ts +7 -0
  8. package/dist/block-format/checksum.d.ts.map +1 -0
  9. package/dist/block-format/checksum.js +56 -0
  10. package/dist/block-format/checksum.js.map +1 -0
  11. package/dist/block-format/codecs.d.ts +24 -0
  12. package/dist/block-format/codecs.d.ts.map +1 -0
  13. package/dist/block-format/codecs.js +102 -0
  14. package/dist/block-format/codecs.js.map +1 -0
  15. package/dist/block-format/column.d.ts +8 -0
  16. package/dist/block-format/column.d.ts.map +1 -0
  17. package/dist/block-format/column.js +166 -0
  18. package/dist/block-format/column.js.map +1 -0
  19. package/dist/block-format/index.d.ts +7 -0
  20. package/dist/block-format/index.d.ts.map +1 -0
  21. package/dist/block-format/index.js +7 -0
  22. package/dist/block-format/index.js.map +1 -0
  23. package/dist/block-format/physical.d.ts +20 -0
  24. package/dist/block-format/physical.d.ts.map +1 -0
  25. package/dist/block-format/physical.js +439 -0
  26. package/dist/block-format/physical.js.map +1 -0
  27. package/dist/block-format/types.d.ts +93 -0
  28. package/dist/block-format/types.d.ts.map +1 -0
  29. package/dist/block-format/types.js +2 -0
  30. package/dist/block-format/types.js.map +1 -0
  31. package/dist/engine/artifact-cache.d.ts +22 -0
  32. package/dist/engine/artifact-cache.d.ts.map +1 -0
  33. package/dist/engine/artifact-cache.js +68 -0
  34. package/dist/engine/artifact-cache.js.map +1 -0
  35. package/dist/engine/batch.d.ts +28 -0
  36. package/dist/engine/batch.d.ts.map +1 -0
  37. package/dist/engine/batch.js +38 -0
  38. package/dist/engine/batch.js.map +1 -0
  39. package/dist/engine/buffered-writer.d.ts +43 -0
  40. package/dist/engine/buffered-writer.d.ts.map +1 -0
  41. package/dist/engine/buffered-writer.js +158 -0
  42. package/dist/engine/buffered-writer.js.map +1 -0
  43. package/dist/engine/catalog.d.ts +82 -0
  44. package/dist/engine/catalog.d.ts.map +1 -0
  45. package/dist/engine/catalog.js +47 -0
  46. package/dist/engine/catalog.js.map +1 -0
  47. package/dist/engine/client.d.ts +211 -0
  48. package/dist/engine/client.d.ts.map +1 -0
  49. package/dist/engine/client.js +538 -0
  50. package/dist/engine/client.js.map +1 -0
  51. package/dist/engine/coordinator.d.ts +17 -0
  52. package/dist/engine/coordinator.d.ts.map +1 -0
  53. package/dist/engine/coordinator.js +60 -0
  54. package/dist/engine/coordinator.js.map +1 -0
  55. package/dist/engine/database.d.ts +661 -0
  56. package/dist/engine/database.d.ts.map +1 -0
  57. package/dist/engine/database.js +10313 -0
  58. package/dist/engine/database.js.map +1 -0
  59. package/dist/engine/defaults.d.ts +33 -0
  60. package/dist/engine/defaults.d.ts.map +1 -0
  61. package/dist/engine/defaults.js +87 -0
  62. package/dist/engine/defaults.js.map +1 -0
  63. package/dist/engine/dsl/db.d.ts +137 -0
  64. package/dist/engine/dsl/db.d.ts.map +1 -0
  65. package/dist/engine/dsl/db.js +161 -0
  66. package/dist/engine/dsl/db.js.map +1 -0
  67. package/dist/engine/dsl/expression.d.ts +172 -0
  68. package/dist/engine/dsl/expression.d.ts.map +1 -0
  69. package/dist/engine/dsl/expression.js +397 -0
  70. package/dist/engine/dsl/expression.js.map +1 -0
  71. package/dist/engine/dsl/index.d.ts +8 -0
  72. package/dist/engine/dsl/index.d.ts.map +1 -0
  73. package/dist/engine/dsl/index.js +7 -0
  74. package/dist/engine/dsl/index.js.map +1 -0
  75. package/dist/engine/dsl/live-query.d.ts +45 -0
  76. package/dist/engine/dsl/live-query.d.ts.map +1 -0
  77. package/dist/engine/dsl/live-query.js +116 -0
  78. package/dist/engine/dsl/live-query.js.map +1 -0
  79. package/dist/engine/dsl/mutations.d.ts +123 -0
  80. package/dist/engine/dsl/mutations.d.ts.map +1 -0
  81. package/dist/engine/dsl/mutations.js +241 -0
  82. package/dist/engine/dsl/mutations.js.map +1 -0
  83. package/dist/engine/dsl/select-query-builder.d.ts +148 -0
  84. package/dist/engine/dsl/select-query-builder.d.ts.map +1 -0
  85. package/dist/engine/dsl/select-query-builder.js +377 -0
  86. package/dist/engine/dsl/select-query-builder.js.map +1 -0
  87. package/dist/engine/dsl/sql-tag.d.ts +46 -0
  88. package/dist/engine/dsl/sql-tag.d.ts.map +1 -0
  89. package/dist/engine/dsl/sql-tag.js +85 -0
  90. package/dist/engine/dsl/sql-tag.js.map +1 -0
  91. package/dist/engine/dsl/types.d.ts +133 -0
  92. package/dist/engine/dsl/types.d.ts.map +1 -0
  93. package/dist/engine/dsl/types.js +9 -0
  94. package/dist/engine/dsl/types.js.map +1 -0
  95. package/dist/engine/errors.d.ts +55 -0
  96. package/dist/engine/errors.d.ts.map +1 -0
  97. package/dist/engine/errors.js +81 -0
  98. package/dist/engine/errors.js.map +1 -0
  99. package/dist/engine/fts.d.ts +93 -0
  100. package/dist/engine/fts.d.ts.map +1 -0
  101. package/dist/engine/fts.js +273 -0
  102. package/dist/engine/fts.js.map +1 -0
  103. package/dist/engine/group-index.d.ts +32 -0
  104. package/dist/engine/group-index.d.ts.map +1 -0
  105. package/dist/engine/group-index.js +366 -0
  106. package/dist/engine/group-index.js.map +1 -0
  107. package/dist/engine/index.d.ts +13 -0
  108. package/dist/engine/index.d.ts.map +1 -0
  109. package/dist/engine/index.js +12 -0
  110. package/dist/engine/index.js.map +1 -0
  111. package/dist/engine/join-index.d.ts +12 -0
  112. package/dist/engine/join-index.d.ts.map +1 -0
  113. package/dist/engine/join-index.js +217 -0
  114. package/dist/engine/join-index.js.map +1 -0
  115. package/dist/engine/live.d.ts +86 -0
  116. package/dist/engine/live.d.ts.map +1 -0
  117. package/dist/engine/live.js +289 -0
  118. package/dist/engine/live.js.map +1 -0
  119. package/dist/engine/memory.d.ts +37 -0
  120. package/dist/engine/memory.d.ts.map +1 -0
  121. package/dist/engine/memory.js +119 -0
  122. package/dist/engine/memory.js.map +1 -0
  123. package/dist/engine/optimizer.d.ts +20 -0
  124. package/dist/engine/optimizer.d.ts.map +1 -0
  125. package/dist/engine/optimizer.js +1170 -0
  126. package/dist/engine/optimizer.js.map +1 -0
  127. package/dist/engine/query-cache.d.ts +10 -0
  128. package/dist/engine/query-cache.d.ts.map +1 -0
  129. package/dist/engine/query-cache.js +58 -0
  130. package/dist/engine/query-cache.js.map +1 -0
  131. package/dist/engine/query.d.ts +844 -0
  132. package/dist/engine/query.d.ts.map +1 -0
  133. package/dist/engine/query.js +7450 -0
  134. package/dist/engine/query.js.map +1 -0
  135. package/dist/engine/schema-wire.d.ts +92 -0
  136. package/dist/engine/schema-wire.d.ts.map +1 -0
  137. package/dist/engine/schema-wire.js +115 -0
  138. package/dist/engine/schema-wire.js.map +1 -0
  139. package/dist/engine/schema.d.ts +394 -0
  140. package/dist/engine/schema.d.ts.map +1 -0
  141. package/dist/engine/schema.js +709 -0
  142. package/dist/engine/schema.js.map +1 -0
  143. package/dist/engine/sort-keys.d.ts +36 -0
  144. package/dist/engine/sort-keys.d.ts.map +1 -0
  145. package/dist/engine/sort-keys.js +60 -0
  146. package/dist/engine/sort-keys.js.map +1 -0
  147. package/dist/engine/sql-json.d.ts +30 -0
  148. package/dist/engine/sql-json.d.ts.map +1 -0
  149. package/dist/engine/sql-json.js +120 -0
  150. package/dist/engine/sql-json.js.map +1 -0
  151. package/dist/engine/sql-semantics.d.ts +31 -0
  152. package/dist/engine/sql-semantics.d.ts.map +1 -0
  153. package/dist/engine/sql-semantics.js +121 -0
  154. package/dist/engine/sql-semantics.js.map +1 -0
  155. package/dist/engine/vector.d.ts +87 -0
  156. package/dist/engine/vector.d.ts.map +1 -0
  157. package/dist/engine/vector.js +4227 -0
  158. package/dist/engine/vector.js.map +1 -0
  159. package/dist/engine/worker-host.d.ts +48 -0
  160. package/dist/engine/worker-host.d.ts.map +1 -0
  161. package/dist/engine/worker-host.js +501 -0
  162. package/dist/engine/worker-host.js.map +1 -0
  163. package/dist/engine/worker.d.ts +2 -0
  164. package/dist/engine/worker.d.ts.map +1 -0
  165. package/dist/engine/worker.js +14 -0
  166. package/dist/engine/worker.js.map +1 -0
  167. package/dist/index.d.ts +2 -0
  168. package/dist/index.d.ts.map +1 -0
  169. package/dist/index.js +2 -0
  170. package/dist/index.js.map +1 -0
  171. package/dist/plan/index.d.ts +17 -0
  172. package/dist/plan/index.d.ts.map +1 -0
  173. package/dist/plan/index.js +17 -0
  174. package/dist/plan/index.js.map +1 -0
  175. package/dist/storage/fixture-shape.d.ts +42 -0
  176. package/dist/storage/fixture-shape.d.ts.map +1 -0
  177. package/dist/storage/fixture-shape.js +146 -0
  178. package/dist/storage/fixture-shape.js.map +1 -0
  179. package/dist/storage/index.d.ts +5 -0
  180. package/dist/storage/index.d.ts.map +1 -0
  181. package/dist/storage/index.js +5 -0
  182. package/dist/storage/index.js.map +1 -0
  183. package/dist/storage/indexeddb.d.ts +139 -0
  184. package/dist/storage/indexeddb.d.ts.map +1 -0
  185. package/dist/storage/indexeddb.js +3161 -0
  186. package/dist/storage/indexeddb.js.map +1 -0
  187. package/dist/storage/memory.d.ts +121 -0
  188. package/dist/storage/memory.d.ts.map +1 -0
  189. package/dist/storage/memory.js +1455 -0
  190. package/dist/storage/memory.js.map +1 -0
  191. package/dist/storage/snapshot.d.ts +108 -0
  192. package/dist/storage/snapshot.d.ts.map +1 -0
  193. package/dist/storage/snapshot.js +276 -0
  194. package/dist/storage/snapshot.js.map +1 -0
  195. package/dist/storage/types.d.ts +895 -0
  196. package/dist/storage/types.d.ts.map +1 -0
  197. package/dist/storage/types.js +1549 -0
  198. package/dist/storage/types.js.map +1 -0
  199. package/dist/testing/index.d.ts +76 -0
  200. package/dist/testing/index.d.ts.map +1 -0
  201. package/dist/testing/index.js +233 -0
  202. package/dist/testing/index.js.map +1 -0
  203. package/dist/testing/seeds.d.ts +11 -0
  204. package/dist/testing/seeds.d.ts.map +1 -0
  205. package/dist/testing/seeds.js +50 -0
  206. package/dist/testing/seeds.js.map +1 -0
  207. package/dist/transactions/index.d.ts +148 -0
  208. package/dist/transactions/index.d.ts.map +1 -0
  209. package/dist/transactions/index.js +662 -0
  210. package/dist/transactions/index.js.map +1 -0
  211. package/dist/worker-protocol/index.d.ts +84 -0
  212. package/dist/worker-protocol/index.d.ts.map +1 -0
  213. package/dist/worker-protocol/index.js +117 -0
  214. package/dist/worker-protocol/index.js.map +1 -0
  215. package/package.json +66 -16
  216. package/sql-feature-matrix.json +1275 -0
  217. package/index.d.ts +0 -1
  218. package/index.js +0 -1
@@ -0,0 +1,42 @@
1
+ /**
2
+ * The database every compatibility fixture holds, and the questions asked of it.
3
+ *
4
+ * Shared by the generator (scripts/write-format-fixture.mts) and the test that reads the
5
+ * fixtures back, so the two cannot drift: a fixture written today and a fixture written in two
6
+ * years describe the same database, and any difference in the answers is a difference in the
7
+ * engine rather than in what was asked.
8
+ *
9
+ * The shape is chosen to touch every part of the persisted format that a change could break,
10
+ * because a fixture only protects what it happens to contain:
11
+ *
12
+ * - every column type, and a nullable column of each that actually holds nulls
13
+ * - a low-cardinality string column, which encodes through the dictionary, alongside a
14
+ * high-cardinality one that cannot
15
+ * - a column of near-identical text, which compresses, beside random text that does not, so
16
+ * both codec paths appear in the blocks
17
+ * - enough rows to span several blocks per column, so multi-block columns and their zone maps
18
+ * are covered rather than a single degenerate block
19
+ * - a mutation history: updates and deletes leave delta segments, which are a different
20
+ * segment kind with a different block layout from a plain append
21
+ * - both a string and a numeric unique key, since key encoding differs between them
22
+ * - a table with no unique key at all, which stores no key column
23
+ *
24
+ * Adding to this shape is safe and welcome. Removing from it silently narrows what every future
25
+ * fixture proves, so treat a deletion here as a decision to stop protecting that surface.
26
+ */
27
+ import type { MinnowDatabase } from "../engine/database.js";
28
+ /**
29
+ * Builds the fixture database. The caller supplies the database so the generator and the test
30
+ * can each choose their own store; nothing here depends on which.
31
+ */
32
+ export declare function buildFixtureDatabase(database: MinnowDatabase): Promise<void>;
33
+ /**
34
+ * What every fixture is asked. Ordered so the answers are stable, and chosen to read each part
35
+ * of the shape above back out: every type, both codecs, the dictionary, the deltas, both key
36
+ * kinds, and the keyless table.
37
+ *
38
+ * Only ever append here. Changing an existing query changes the question every historical
39
+ * fixture is answering, and the recorded answer no longer means what it meant.
40
+ */
41
+ export declare const FIXTURE_QUERIES: readonly string[];
42
+ //# sourceMappingURL=fixture-shape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixture-shape.d.ts","sourceRoot":"","sources":["../../src/storage/fixture-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAkC5D;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFlF;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAoC5C,CAAC"}
@@ -0,0 +1,146 @@
1
+ /** Deterministic pseudo-randomness, so a regenerated fixture differs only when the format does. */
2
+ function mulberry32(seed) {
3
+ let state = seed >>> 0;
4
+ return () => {
5
+ state = (state + 0x6d2b79f5) >>> 0;
6
+ let mixed = state;
7
+ mixed = Math.imul(mixed ^ (mixed >>> 15), mixed | 1);
8
+ mixed ^= mixed + Math.imul(mixed ^ (mixed >>> 7), mixed | 61);
9
+ return ((mixed ^ (mixed >>> 14)) >>> 0) / 4294967296;
10
+ };
11
+ }
12
+ const REGIONS = ["west", "east", "north", "south"];
13
+ const LETTERS = "abcdefghijklmnopqrstuvwxyz";
14
+ /** Text with almost no entropy, which the compressing codec will take. */
15
+ function compressible(index) {
16
+ return `the quick brown fox jumps over the lazy dog ${String(index % 3)}`;
17
+ }
18
+ /** Text with high entropy, which it will not. */
19
+ function incompressible(random) {
20
+ let out = "";
21
+ for (let index = 0; index < 24; index += 1) {
22
+ out += LETTERS[Math.floor(random() * LETTERS.length)] ?? "a";
23
+ }
24
+ return out;
25
+ }
26
+ /** Rows enough to span several blocks at the small block size the generator uses. */
27
+ const ROWS = 400;
28
+ /**
29
+ * Builds the fixture database. The caller supplies the database so the generator and the test
30
+ * can each choose their own store; nothing here depends on which.
31
+ */
32
+ export async function buildFixtureDatabase(database) {
33
+ const random = mulberry32(0x0f1a7);
34
+ await database.createTable({
35
+ name: "records",
36
+ uniqueKey: "id",
37
+ columns: [
38
+ { name: "id", type: "number" },
39
+ { name: "region", type: "string" },
40
+ { name: "note", type: "string" },
41
+ { name: "noise", type: "string" },
42
+ { name: "amount", type: "number" },
43
+ { name: "active", type: "boolean" },
44
+ { name: "seen_at", type: "datetime" },
45
+ { name: "maybe_text", type: "string", nullable: true },
46
+ { name: "maybe_number", type: "number", nullable: true },
47
+ { name: "maybe_flag", type: "boolean", nullable: true },
48
+ { name: "maybe_time", type: "datetime", nullable: true },
49
+ ],
50
+ });
51
+ await database.insertBatch("records", Array.from({ length: ROWS }, (_, index) => ({
52
+ id: index + 1,
53
+ region: REGIONS[index % REGIONS.length] ?? "west",
54
+ note: compressible(index),
55
+ noise: incompressible(random),
56
+ // Quarters stay exact in doubles, so a rounding change shows up as a difference rather
57
+ // than as noise nobody can attribute.
58
+ amount: Math.floor(random() * 400) / 4,
59
+ active: index % 3 === 0,
60
+ seen_at: new Date(Date.UTC(2026, 0, 1 + (index % 28), index % 24, 0, 0)),
61
+ maybe_text: index % 5 === 0 ? null : `t${String(index)}`,
62
+ maybe_number: index % 7 === 0 ? null : index * 2,
63
+ maybe_flag: index % 11 === 0 ? null : index % 2 === 0,
64
+ maybe_time: index % 13 === 0 ? null : new Date(Date.UTC(2025, 5, 1 + (index % 27))),
65
+ })));
66
+ // A string unique key, which encodes differently from a numeric one.
67
+ await database.createTable({
68
+ name: "keyed_by_name",
69
+ uniqueKey: "name",
70
+ columns: [
71
+ { name: "name", type: "string" },
72
+ { name: "score", type: "number" },
73
+ ],
74
+ });
75
+ await database.insertBatch("keyed_by_name", Array.from({ length: 120 }, (_, index) => ({
76
+ name: `name-${String(index).padStart(4, "0")}`,
77
+ score: index % 50,
78
+ })));
79
+ // No unique key at all: this table stores no key column, which is its own layout.
80
+ await database.createTable({
81
+ name: "keyless",
82
+ columns: [
83
+ { name: "label", type: "string" },
84
+ { name: "value", type: "number" },
85
+ ],
86
+ });
87
+ await database.insertBatch("keyless", Array.from({ length: 90 }, (_, index) => ({
88
+ label: REGIONS[index % REGIONS.length] ?? "west",
89
+ value: index,
90
+ })));
91
+ // The mutation history. Updates and deletes write delta segments, whose layout differs from an
92
+ // append -- and a fixture with only appends would prove nothing about reading them back.
93
+ await database.execute("UPDATE records SET amount = ? WHERE id = ?", [1234.5, 3]);
94
+ await database.execute("UPDATE records SET maybe_text = ? WHERE id = ?", [null, 4]);
95
+ await database.execute("UPDATE records SET region = ? WHERE id = ?", ["central", 5]);
96
+ await database.execute("DELETE FROM records WHERE id = ?", [6]);
97
+ await database.execute("DELETE FROM records WHERE id > ?", [396]);
98
+ await database.execute("UPDATE keyed_by_name SET score = ? WHERE name = ?", [999, "name-0007"]);
99
+ await database.execute("DELETE FROM keyed_by_name WHERE name = ?", ["name-0008"]);
100
+ }
101
+ /**
102
+ * What every fixture is asked. Ordered so the answers are stable, and chosen to read each part
103
+ * of the shape above back out: every type, both codecs, the dictionary, the deltas, both key
104
+ * kinds, and the keyless table.
105
+ *
106
+ * Only ever append here. Changing an existing query changes the question every historical
107
+ * fixture is answering, and the recorded answer no longer means what it meant.
108
+ */
109
+ export const FIXTURE_QUERIES = [
110
+ "SELECT COUNT(*) AS n FROM records",
111
+ "SELECT COUNT(*) AS n FROM keyed_by_name",
112
+ "SELECT COUNT(*) AS n FROM keyless",
113
+ // Every column of one row, after the updates that touched its neighbours.
114
+ "SELECT * FROM records WHERE id = 1",
115
+ // The updated rows, which live in delta segments rather than the base.
116
+ "SELECT id, amount FROM records WHERE id = 3",
117
+ "SELECT id, maybe_text FROM records WHERE id = 4",
118
+ "SELECT id, region FROM records WHERE id = 5",
119
+ // The deleted rows must be gone, both the single and the ranged delete.
120
+ "SELECT id FROM records WHERE id IN (6, 397, 398, 399, 400) ORDER BY id",
121
+ // Nullability across every type, counted rather than listed so the answer stays small.
122
+ "SELECT COUNT(*) AS n FROM records WHERE maybe_text IS NULL",
123
+ "SELECT COUNT(*) AS n FROM records WHERE maybe_number IS NULL",
124
+ "SELECT COUNT(*) AS n FROM records WHERE maybe_flag IS NULL",
125
+ "SELECT COUNT(*) AS n FROM records WHERE maybe_time IS NULL",
126
+ // The dictionary-coded column, and an aggregate that has to decode every value of it.
127
+ "SELECT region, COUNT(*) AS n FROM records GROUP BY region ORDER BY region",
128
+ // Both text columns, which took different codecs.
129
+ "SELECT note FROM records WHERE id = 42",
130
+ "SELECT noise FROM records WHERE id = 42",
131
+ // Numeric and datetime round-trips, including the boundary rows of the range.
132
+ "SELECT SUM(amount) AS total, MIN(amount) AS low, MAX(amount) AS high FROM records",
133
+ "SELECT MIN(seen_at) AS first, MAX(seen_at) AS last FROM records",
134
+ "SELECT COUNT(*) AS n FROM records WHERE active",
135
+ // A scan that spans blocks rather than resolving inside one.
136
+ "SELECT id FROM records WHERE amount > 90 ORDER BY id LIMIT 10",
137
+ // The string key, updated and deleted through.
138
+ "SELECT name, score FROM keyed_by_name WHERE name = 'name-0007'",
139
+ "SELECT name FROM keyed_by_name WHERE name = 'name-0008'",
140
+ "SELECT name, score FROM keyed_by_name ORDER BY name LIMIT 3",
141
+ // The keyless table, which stores no key column.
142
+ "SELECT label, SUM(value) AS total FROM keyless GROUP BY label ORDER BY label",
143
+ // A join, which reads two layouts at once.
144
+ "SELECT r.region, COUNT(*) AS n FROM records r JOIN keyless k ON r.region = k.label GROUP BY r.region ORDER BY r.region",
145
+ ];
146
+ //# sourceMappingURL=fixture-shape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixture-shape.js","sourceRoot":"","sources":["../../src/storage/fixture-shape.ts"],"names":[],"mappings":"AA4BA,mGAAmG;AACnG,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC;IACvB,OAAO,GAAG,EAAE;QACV,KAAK,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACrD,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;IACvD,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAU,CAAC;AAC5D,MAAM,OAAO,GAAG,4BAA4B,CAAC;AAE7C,0EAA0E;AAC1E,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,+CAA+C,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED,iDAAiD;AACjD,SAAS,cAAc,CAAC,MAAoB;IAC1C,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3C,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC;IAC/D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,qFAAqF;AACrF,MAAM,IAAI,GAAG,GAAG,CAAC;AAEjB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,QAAwB;IACjE,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,QAAQ,CAAC,WAAW,CAAC;QACzB,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,IAAI;QACf,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC9B,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;YAClC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;YAChC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;YACjC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;YAClC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;YACnC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;YACrC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;YACtD,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;YACxD,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;YACvD,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;SACzD;KACF,CAAC,CAAC;IACH,MAAM,QAAQ,CAAC,WAAW,CACxB,SAAS,EACT,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1C,EAAE,EAAE,KAAK,GAAG,CAAC;QACb,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;QACjD,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC;QACzB,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC;QAC7B,uFAAuF;QACvF,sCAAsC;QACtC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC;QACtC,MAAM,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC;QACvB,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,UAAU,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;QACxD,YAAY,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;QAChD,UAAU,EAAE,KAAK,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC;QACrD,UAAU,EAAE,KAAK,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;KACpF,CAAC,CAAC,CACJ,CAAC;IAEF,qEAAqE;IACrE,MAAM,QAAQ,CAAC,WAAW,CAAC;QACzB,IAAI,EAAE,eAAe;QACrB,SAAS,EAAE,MAAM;QACjB,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;YAChC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;SAClC;KACF,CAAC,CAAC;IACH,MAAM,QAAQ,CAAC,WAAW,CACxB,eAAe,EACf,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACzC,IAAI,EAAE,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;QAC9C,KAAK,EAAE,KAAK,GAAG,EAAE;KAClB,CAAC,CAAC,CACJ,CAAC;IAEF,kFAAkF;IAClF,MAAM,QAAQ,CAAC,WAAW,CAAC;QACzB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;YACjC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;SAClC;KACF,CAAC,CAAC;IACH,MAAM,QAAQ,CAAC,WAAW,CACxB,SAAS,EACT,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACxC,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;QAChD,KAAK,EAAE,KAAK;KACb,CAAC,CAAC,CACJ,CAAC;IAEF,+FAA+F;IAC/F,yFAAyF;IACzF,MAAM,QAAQ,CAAC,OAAO,CAAC,4CAA4C,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,QAAQ,CAAC,OAAO,CAAC,gDAAgD,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACpF,MAAM,QAAQ,CAAC,OAAO,CAAC,4CAA4C,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IACrF,MAAM,QAAQ,CAAC,OAAO,CAAC,kCAAkC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,QAAQ,CAAC,OAAO,CAAC,kCAAkC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,MAAM,QAAQ,CAAC,OAAO,CAAC,mDAAmD,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;IAChG,MAAM,QAAQ,CAAC,OAAO,CAAC,0CAA0C,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;AACpF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAsB;IAChD,mCAAmC;IACnC,yCAAyC;IACzC,mCAAmC;IACnC,0EAA0E;IAC1E,oCAAoC;IACpC,uEAAuE;IACvE,6CAA6C;IAC7C,iDAAiD;IACjD,6CAA6C;IAC7C,wEAAwE;IACxE,wEAAwE;IACxE,uFAAuF;IACvF,4DAA4D;IAC5D,8DAA8D;IAC9D,4DAA4D;IAC5D,4DAA4D;IAC5D,sFAAsF;IACtF,2EAA2E;IAC3E,kDAAkD;IAClD,wCAAwC;IACxC,yCAAyC;IACzC,8EAA8E;IAC9E,mFAAmF;IACnF,iEAAiE;IACjE,gDAAgD;IAChD,6DAA6D;IAC7D,+DAA+D;IAC/D,+CAA+C;IAC/C,gEAAgE;IAChE,yDAAyD;IACzD,6DAA6D;IAC7D,iDAAiD;IACjD,8EAA8E;IAC9E,2CAA2C;IAC3C,wHAAwH;CACzH,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from "./indexeddb.js";
2
+ export * from "./memory.js";
3
+ export * from "./snapshot.js";
4
+ export * from "./types.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from "./indexeddb.js";
2
+ export * from "./memory.js";
3
+ export * from "./snapshot.js";
4
+ export * from "./types.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,139 @@
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 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 TempOwnerRecord, type TempRunPage, type TransactionRecord, type TransactionRecordUpdate } from "./types.js";
2
+ import { type DatabaseSnapshot, type SnapshotLoadProgress } from "./snapshot.js";
3
+ export interface IndexedDbBlockStoreOptions {
4
+ name: string;
5
+ durability?: IDBTransactionDurability;
6
+ indexedDB?: IDBFactory;
7
+ }
8
+ export declare class IndexedDbBlockStore implements BlockStore {
9
+ #private;
10
+ private constructor();
11
+ static open(options: IndexedDbBlockStoreOptions): Promise<IndexedDbBlockStore>;
12
+ addBlock(id: string, bytes: Uint8Array): Promise<void>;
13
+ addBlocks(blocks: readonly BlockWrite[]): Promise<void>;
14
+ getBlock(id: string): Promise<Uint8Array | undefined>;
15
+ getBlocks(ids: readonly string[]): Promise<Array<Uint8Array | undefined>>;
16
+ removeBlock(id: string): Promise<void>;
17
+ listBlockIds(): Promise<string[]>;
18
+ putTempRunPage(page: TempRunPage): Promise<void>;
19
+ getTempRunPage(ownerId: string, runId: string, pageIndex: number): Promise<Uint8Array | undefined>;
20
+ removeTempRun(ownerId: string, runId: string): Promise<void>;
21
+ removeTempOwner(ownerId: string): Promise<void>;
22
+ createTempOwner(record: TempOwnerRecord): Promise<void>;
23
+ getTempOwner(ownerId: string): Promise<TempOwnerRecord | undefined>;
24
+ renewTempOwner(ownerId: string, expectedRevision: number, expiresAt: string): Promise<TempOwnerRecord>;
25
+ removeTempOwnerIfExpired(ownerId: string, expiresAtCutoff: string): Promise<boolean>;
26
+ listTempOwnerIdsPage(afterOwnerId: string | null, limit: number): Promise<StoragePage<string, string>>;
27
+ addTable(record: TableRecord): Promise<void>;
28
+ getTable(id: string): Promise<TableRecord | undefined>;
29
+ updateTable(id: string, expectedRevision: number, update: {
30
+ columns?: TableColumnRecord[];
31
+ ftsColumns?: Record<string, FtsColumnIndexRecord> | null;
32
+ triggers?: TriggerRecord[] | null;
33
+ }): Promise<TableRecord>;
34
+ removeTable(id: string, expectedRevision: number): Promise<void>;
35
+ writeFtsBase(tableId: string, columnId: string, input: {
36
+ coversVersion: number;
37
+ chunks: FtsPosting[][];
38
+ totalTokens: number;
39
+ }): Promise<void>;
40
+ readFtsCandidates(tableId: string, columnId: string, terms: ReadonlyArray<{
41
+ term: string;
42
+ prefix: boolean;
43
+ }>, upToVersion: number): Promise<FtsCandidates & {
44
+ deltaChunkCount: number;
45
+ totalTokens: number;
46
+ coversVersion: number;
47
+ }>;
48
+ /**
49
+ * Resolving a name means two reads — name to id, then id to record — and the second cannot
50
+ * start until the first lands, so the write path pays two serialized round trips for one
51
+ * lookup. A remembered id collapses that to one read, and needs no invalidation: the record
52
+ * carries its own name, so a mapping that has gone stale fails the check below and falls
53
+ * back to the full resolution. Table ids are unique per creation, so a dropped and recreated
54
+ * table cannot be mistaken for its predecessor.
55
+ */
56
+ getTableByName(name: string): Promise<TableRecord | undefined>;
57
+ listTables(): Promise<TableRecord[]>;
58
+ addSegment(record: SegmentRecord): Promise<void>;
59
+ getSegment(id: string): Promise<SegmentRecord | undefined>;
60
+ listSegments(tableId?: string): Promise<SegmentRecord[]>;
61
+ removeSegment(id: string): Promise<void>;
62
+ reserveRowIds(tableId: string, count: number): Promise<RowIdRange>;
63
+ reserveAutoIncrement(tableId: string, columnId: string, count: number, atLeast?: bigint): Promise<RowIdRange>;
64
+ getExistingUniqueKeys(tableId: string, keyTokens: readonly string[]): Promise<string[]>;
65
+ getCurrentManifestVersion(): Promise<number | null>;
66
+ /**
67
+ * The freshness probe runs once per query, so its latency is a floor under every read the
68
+ * database serves. Both values are final the moment their reads land: a read-only
69
+ * transaction has nothing left to commit, and waiting for its `complete` event only costs
70
+ * another turn of the event loop — measured at roughly 40% of the probe in Chromium — while
71
+ * changing nothing about what was read. The reads still race the transaction's failure
72
+ * events, so an abort surfaces as a rejection here instead of hanging.
73
+ */
74
+ getCatalogProbe(): Promise<CatalogProbe>;
75
+ getQueryCatalogState(tableNames: readonly string[]): Promise<QueryCatalogState>;
76
+ getCurrentManifest(): Promise<Manifest | undefined>;
77
+ getManifest(version: number): Promise<Manifest | undefined>;
78
+ listManifests(): Promise<Manifest[]>;
79
+ listManifestPage(afterVersion: number | null, limit: number): Promise<{
80
+ records: Manifest[];
81
+ nextCursor: number | null;
82
+ }>;
83
+ publishManifest(input: PublishManifestInput): Promise<Manifest>;
84
+ beginTransaction(input: BeginTransactionInput): Promise<BeginTransactionResult>;
85
+ createTransaction(record: TransactionRecord): Promise<void>;
86
+ getTransaction(id: string): Promise<TransactionRecord | undefined>;
87
+ getTransactions(ids: readonly string[]): Promise<Array<TransactionRecord | undefined>>;
88
+ listTransactions(): Promise<TransactionRecord[]>;
89
+ listTransactionPage(afterId: string | null, limit: number): Promise<{
90
+ records: TransactionRecord[];
91
+ nextCursor: string | null;
92
+ }>;
93
+ updateTransaction(id: string, expectedRevision: number, update: TransactionRecordUpdate): Promise<TransactionRecord>;
94
+ stageTransactionArtifacts(input: StageTransactionArtifactsInput): Promise<TransactionRecord>;
95
+ commitTransaction(input: CommitTransactionInput): Promise<ManifestSummary>;
96
+ createLease(record: LeaseRecord): Promise<void>;
97
+ getLease(id: string): Promise<LeaseRecord | undefined>;
98
+ listLeases(): Promise<LeaseRecord[]>;
99
+ renewLease(id: string, expectedRevision: number, expiresAt: string): Promise<LeaseRecord>;
100
+ removeLeaseIfExpired(id: string, expectedRevision: number, expiresAtCutoff: string): Promise<boolean>;
101
+ removeLease(id: string): Promise<void>;
102
+ createCompactionJob(record: CompactionJobRecord): Promise<void>;
103
+ getCompactionJob(id: string): Promise<CompactionJobRecord | undefined>;
104
+ listCompactionJobs(tableId?: string): Promise<CompactionJobRecord[]>;
105
+ listCompactionJobPage(afterId: string | null, limit: number): Promise<{
106
+ records: CompactionJobRecord[];
107
+ nextCursor: string | null;
108
+ }>;
109
+ updateCompactionJob(id: string, expectedRevision: number, update: CompactionJobRecordUpdate): Promise<CompactionJobRecord>;
110
+ cancelCompactionJob(id: string, expectedRevision: number, cancelledAt: string): Promise<CompactionJobRecord>;
111
+ removeCompactionJob(id: string): Promise<void>;
112
+ createGarbageCollectionJob(input: CreateGarbageCollectionJobInput): Promise<GarbageCollectionJobRecord>;
113
+ getGarbageCollectionJob(id: string): Promise<GarbageCollectionJobRecord | undefined>;
114
+ listGarbageCollectionJobs(): Promise<GarbageCollectionJobRecord[]>;
115
+ runGarbageCollectionStep(input: RunGarbageCollectionStepInput): Promise<GarbageCollectionStepResult>;
116
+ removeGarbageCollectionJob(id: string): Promise<void>;
117
+ getLogicalStorageBytes(): Promise<number>;
118
+ /**
119
+ * Copies the current version out as a portable snapshot. See `./snapshot.ts` for what a
120
+ * snapshot carries and what it deliberately leaves behind.
121
+ *
122
+ * This reads across several transactions rather than one, so a concurrent commit could move
123
+ * the version underneath it. Hold a `backup` lease (see `../transactions/index.ts`) around
124
+ * the call when that is possible; the offline generators that produce published datasets are
125
+ * the only writer in their process and do not need one.
126
+ */
127
+ exportSnapshot(): Promise<DatabaseSnapshot>;
128
+ /**
129
+ * Loads a snapshot into this store, which must be empty. Block payloads go in batched
130
+ * transactions so a large dataset does not build one enormous write, and the current-version
131
+ * pointer is written last: until it lands, an interrupted load leaves a store that still reads
132
+ * as empty rather than as half a database.
133
+ */
134
+ importSnapshot(snapshot: DatabaseSnapshot, options?: {
135
+ onProgress?: (progress: SnapshotLoadProgress) => void;
136
+ }): Promise<void>;
137
+ close(): void;
138
+ }
139
+ //# sourceMappingURL=indexeddb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexeddb.d.ts","sourceRoot":"","sources":["../../src/storage/indexeddb.ts"],"names":[],"mappings":"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"}