sensemaking 0.19.1 → 0.20.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 (167) hide show
  1. package/dist/cjs/chunk/extract.d.cts +1 -0
  2. package/dist/cjs/chunk/extract.d.ts +1 -0
  3. package/dist/cjs/chunk/extract.js +23 -5
  4. package/dist/cjs/chunk/extract.js.map +1 -1
  5. package/dist/cjs/chunk/index.d.cts +1 -1
  6. package/dist/cjs/chunk/index.d.ts +1 -1
  7. package/dist/cjs/chunk/index.js +3 -0
  8. package/dist/cjs/chunk/index.js.map +1 -1
  9. package/dist/cjs/index.d.cts +1 -1
  10. package/dist/cjs/index.d.ts +1 -1
  11. package/dist/cjs/index.js +3 -0
  12. package/dist/cjs/index.js.map +1 -1
  13. package/dist/cjs/scan/pool.d.cts +15 -0
  14. package/dist/cjs/scan/pool.d.ts +15 -0
  15. package/dist/cjs/scan/pool.js +263 -0
  16. package/dist/cjs/scan/pool.js.map +1 -0
  17. package/dist/cjs/scan/reparse.d.cts +2 -0
  18. package/dist/cjs/scan/reparse.d.ts +2 -0
  19. package/dist/cjs/scan/reparse.js +15 -76
  20. package/dist/cjs/scan/reparse.js.map +1 -1
  21. package/dist/cjs/store/builder.d.cts +11 -0
  22. package/dist/cjs/store/builder.d.ts +11 -0
  23. package/dist/cjs/store/builder.js +27 -0
  24. package/dist/cjs/store/builder.js.map +1 -0
  25. package/dist/cjs/store/duckdb/fieldStats.js +87 -10
  26. package/dist/cjs/store/duckdb/fieldStats.js.map +1 -1
  27. package/dist/cjs/store/duckdb/lexical.d.cts +1 -0
  28. package/dist/cjs/store/duckdb/lexical.d.ts +1 -0
  29. package/dist/cjs/store/duckdb/lexical.js +21 -5
  30. package/dist/cjs/store/duckdb/lexical.js.map +1 -1
  31. package/dist/cjs/store/duckdb/open.d.cts +9 -8
  32. package/dist/cjs/store/duckdb/open.d.ts +9 -8
  33. package/dist/cjs/store/duckdb/open.js +69 -120
  34. package/dist/cjs/store/duckdb/open.js.map +1 -1
  35. package/dist/cjs/store/duckdb/reconcile.d.cts +2 -6
  36. package/dist/cjs/store/duckdb/reconcile.d.ts +2 -6
  37. package/dist/cjs/store/duckdb/reconcile.js +45 -581
  38. package/dist/cjs/store/duckdb/reconcile.js.map +1 -1
  39. package/dist/cjs/store/duckdb/store.d.cts +1 -2
  40. package/dist/cjs/store/duckdb/store.d.ts +1 -2
  41. package/dist/cjs/store/duckdb/store.js +3 -26
  42. package/dist/cjs/store/duckdb/store.js.map +1 -1
  43. package/dist/cjs/store/index.d.cts +9 -3
  44. package/dist/cjs/store/index.d.ts +9 -3
  45. package/dist/cjs/store/index.js +40 -7
  46. package/dist/cjs/store/index.js.map +1 -1
  47. package/dist/cjs/store/open.d.cts +15 -0
  48. package/dist/cjs/store/open.d.ts +15 -0
  49. package/dist/cjs/store/open.js +516 -0
  50. package/dist/cjs/store/open.js.map +1 -0
  51. package/dist/cjs/store/reconcile.d.cts +7 -0
  52. package/dist/cjs/store/reconcile.d.ts +7 -0
  53. package/dist/cjs/store/reconcile.js +752 -0
  54. package/dist/cjs/store/reconcile.js.map +1 -0
  55. package/dist/cjs/store/shared.d.cts +1 -0
  56. package/dist/cjs/store/shared.d.ts +1 -0
  57. package/dist/cjs/store/shared.js +37 -0
  58. package/dist/cjs/store/shared.js.map +1 -1
  59. package/dist/cjs/store/signature.d.cts +3 -0
  60. package/dist/cjs/store/signature.d.ts +3 -0
  61. package/dist/cjs/store/signature.js +162 -0
  62. package/dist/cjs/store/signature.js.map +1 -0
  63. package/dist/cjs/store/sqlite/open.d.cts +9 -9
  64. package/dist/cjs/store/sqlite/open.d.ts +9 -9
  65. package/dist/cjs/store/sqlite/open.js +188 -198
  66. package/dist/cjs/store/sqlite/open.js.map +1 -1
  67. package/dist/cjs/store/sqlite/reconcile.d.cts +5 -10
  68. package/dist/cjs/store/sqlite/reconcile.d.ts +5 -10
  69. package/dist/cjs/store/sqlite/reconcile.js +48 -850
  70. package/dist/cjs/store/sqlite/reconcile.js.map +1 -1
  71. package/dist/cjs/store/sqlite/store.d.cts +1 -1
  72. package/dist/cjs/store/sqlite/store.d.ts +1 -1
  73. package/dist/cjs/store/sqlite/store.js +3 -13
  74. package/dist/cjs/store/sqlite/store.js.map +1 -1
  75. package/dist/cjs/store/turso/open.d.cts +6 -11
  76. package/dist/cjs/store/turso/open.d.ts +6 -11
  77. package/dist/cjs/store/turso/open.js +78 -169
  78. package/dist/cjs/store/turso/open.js.map +1 -1
  79. package/dist/cjs/store/turso/reconcile.d.cts +5 -6
  80. package/dist/cjs/store/turso/reconcile.d.ts +5 -6
  81. package/dist/cjs/store/turso/reconcile.js +169 -729
  82. package/dist/cjs/store/turso/reconcile.js.map +1 -1
  83. package/dist/cjs/store/turso/store.d.cts +1 -2
  84. package/dist/cjs/store/turso/store.d.ts +1 -2
  85. package/dist/cjs/store/turso/store.js +1 -12
  86. package/dist/cjs/store/turso/store.js.map +1 -1
  87. package/dist/cjs/store/types.d.cts +28 -6
  88. package/dist/cjs/store/types.d.ts +28 -6
  89. package/dist/cjs/store/types.js +14 -0
  90. package/dist/cjs/store/types.js.map +1 -1
  91. package/dist/cjs/text/strip.js +3 -6
  92. package/dist/cjs/text/strip.js.map +1 -1
  93. package/dist/cjs/watch.js +28 -16
  94. package/dist/cjs/watch.js.map +1 -1
  95. package/dist/esm/chunk/extract.d.ts +1 -0
  96. package/dist/esm/chunk/extract.js +10 -2
  97. package/dist/esm/chunk/extract.js.map +1 -1
  98. package/dist/esm/chunk/index.d.ts +1 -1
  99. package/dist/esm/chunk/index.js +1 -1
  100. package/dist/esm/chunk/index.js.map +1 -1
  101. package/dist/esm/index.d.ts +1 -1
  102. package/dist/esm/index.js +1 -1
  103. package/dist/esm/index.js.map +1 -1
  104. package/dist/esm/scan/pool.d.ts +15 -0
  105. package/dist/esm/scan/pool.js +77 -0
  106. package/dist/esm/scan/pool.js.map +1 -0
  107. package/dist/esm/scan/reparse.d.ts +2 -0
  108. package/dist/esm/scan/reparse.js +11 -58
  109. package/dist/esm/scan/reparse.js.map +1 -1
  110. package/dist/esm/store/builder.d.ts +11 -0
  111. package/dist/esm/store/builder.js +14 -0
  112. package/dist/esm/store/builder.js.map +1 -0
  113. package/dist/esm/store/duckdb/fieldStats.js +32 -19
  114. package/dist/esm/store/duckdb/fieldStats.js.map +1 -1
  115. package/dist/esm/store/duckdb/lexical.d.ts +1 -0
  116. package/dist/esm/store/duckdb/lexical.js +22 -9
  117. package/dist/esm/store/duckdb/lexical.js.map +1 -1
  118. package/dist/esm/store/duckdb/open.d.ts +9 -8
  119. package/dist/esm/store/duckdb/open.js +32 -57
  120. package/dist/esm/store/duckdb/open.js.map +1 -1
  121. package/dist/esm/store/duckdb/reconcile.d.ts +2 -6
  122. package/dist/esm/store/duckdb/reconcile.js +24 -117
  123. package/dist/esm/store/duckdb/reconcile.js.map +1 -1
  124. package/dist/esm/store/duckdb/store.d.ts +1 -2
  125. package/dist/esm/store/duckdb/store.js +4 -11
  126. package/dist/esm/store/duckdb/store.js.map +1 -1
  127. package/dist/esm/store/index.d.ts +9 -3
  128. package/dist/esm/store/index.js +23 -7
  129. package/dist/esm/store/index.js.map +1 -1
  130. package/dist/esm/store/open.d.ts +15 -0
  131. package/dist/esm/store/open.js +137 -0
  132. package/dist/esm/store/open.js.map +1 -0
  133. package/dist/esm/store/reconcile.d.ts +7 -0
  134. package/dist/esm/store/reconcile.js +132 -0
  135. package/dist/esm/store/reconcile.js.map +1 -0
  136. package/dist/esm/store/shared.d.ts +1 -0
  137. package/dist/esm/store/shared.js +9 -0
  138. package/dist/esm/store/shared.js.map +1 -1
  139. package/dist/esm/store/signature.d.ts +3 -0
  140. package/dist/esm/store/signature.js +35 -0
  141. package/dist/esm/store/signature.js.map +1 -0
  142. package/dist/esm/store/sqlite/open.d.ts +9 -9
  143. package/dist/esm/store/sqlite/open.js +81 -111
  144. package/dist/esm/store/sqlite/open.js.map +1 -1
  145. package/dist/esm/store/sqlite/reconcile.d.ts +5 -10
  146. package/dist/esm/store/sqlite/reconcile.js +31 -201
  147. package/dist/esm/store/sqlite/reconcile.js.map +1 -1
  148. package/dist/esm/store/sqlite/store.d.ts +1 -1
  149. package/dist/esm/store/sqlite/store.js +4 -7
  150. package/dist/esm/store/sqlite/store.js.map +1 -1
  151. package/dist/esm/store/turso/open.d.ts +6 -11
  152. package/dist/esm/store/turso/open.js +30 -77
  153. package/dist/esm/store/turso/open.js.map +1 -1
  154. package/dist/esm/store/turso/reconcile.d.ts +5 -6
  155. package/dist/esm/store/turso/reconcile.js +42 -146
  156. package/dist/esm/store/turso/reconcile.js.map +1 -1
  157. package/dist/esm/store/turso/store.d.ts +1 -2
  158. package/dist/esm/store/turso/store.js +2 -6
  159. package/dist/esm/store/turso/store.js.map +1 -1
  160. package/dist/esm/store/types.d.ts +28 -6
  161. package/dist/esm/store/types.js +12 -1
  162. package/dist/esm/store/types.js.map +1 -1
  163. package/dist/esm/text/strip.js +3 -4
  164. package/dist/esm/text/strip.js.map +1 -1
  165. package/dist/esm/watch.js +5 -3
  166. package/dist/esm/watch.js.map +1 -1
  167. package/package.json +2 -2
@@ -2,27 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- Object.defineProperty(exports, "reconcile", {
5
+ Object.defineProperty(exports, "duckdbDialect", {
6
6
  enumerable: true,
7
7
  get: function() {
8
- return reconcile;
8
+ return duckdbDialect;
9
9
  }
10
10
  });
11
11
  var _errorsts = require("../../errors.js");
12
- var _indexts = require("../../features/index.js");
13
- var _progressts = require("../../output/progress.js");
14
- var _indexts1 = require("../../scan/index.js");
15
- var _reparsets = require("../../scan/reparse.js");
16
- var _sharedts = require("../shared.js");
17
- var _transactionts = require("../transaction.js");
18
- function _array_like_to_array(arr, len) {
19
- if (len == null || len > arr.length) len = arr.length;
20
- for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
21
- return arr2;
22
- }
23
- function _array_without_holes(arr) {
24
- if (Array.isArray(arr)) return _array_like_to_array(arr);
25
- }
12
+ var _lexicalts = require("./lexical.js");
26
13
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
27
14
  try {
28
15
  var info = gen[key](arg);
@@ -49,17 +36,6 @@ function _async_to_generator(fn) {
49
36
  });
50
37
  };
51
38
  }
52
- function _iterable_to_array(iter) {
53
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) {
54
- return Array.from(iter);
55
- }
56
- }
57
- function _non_iterable_spread() {
58
- throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
59
- }
60
- function _to_consumable_array(arr) {
61
- return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
62
- }
63
39
  function _ts_generator(thisArg, body) {
64
40
  var f, y, t, _ = {
65
41
  label: 0,
@@ -159,43 +135,10 @@ function _ts_generator(thisArg, body) {
159
135
  };
160
136
  }
161
137
  }
162
- function _ts_values(o) {
163
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
164
- if (m) {
165
- return m.call(o);
166
- }
167
- if (o && typeof o.length === "number") {
168
- return {
169
- next: function() {
170
- if (o && i >= o.length) {
171
- o = void 0;
172
- }
173
- return {
174
- value: o && o[i++],
175
- done: !o
176
- };
177
- }
178
- };
179
- }
180
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
181
- }
182
- function _unsupported_iterable_to_array(o, minLen) {
183
- if (!o) return;
184
- if (typeof o === "string") return _array_like_to_array(o, minLen);
185
- var n = Object.prototype.toString.call(o).slice(8, -1);
186
- if (n === "Object" && o.constructor) n = o.constructor.name;
187
- if (n === "Map" || n === "Set") return Array.from(n);
188
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
189
- }
190
- // Mirrors sqlite/reconcile.ts's frontmatter-upsert shape (dynamic ALTER TABLE per discovered key, ON CONFLICT upsert). `content` is
191
- // a plain table, not FTS-virtual, so rows are maintained here unconditionally; DuckDB's ALTER TABLE needs a declared type, so every dynamic frontmatter column is VARIANT (holds mapValue()'s mixed JS types for one key across files).
192
- var CORE_FRONTMATTER_COLUMNS = new Set([
193
- 'path',
194
- '_mtime',
195
- '_ctime',
196
- '_size',
197
- '_parse_error'
198
- ]);
138
+ // This store's dialect (types.ts's ReconcileDialect) for the shared orchestration in
139
+ // store/reconcile.ts. `content` is a plain table, not FTS-virtual, so rows are maintained here
140
+ // unconditionally; DuckDB's ALTER TABLE needs a declared type, so every dynamic frontmatter
141
+ // column is VARIANT (holds mapValue()'s mixed JS types for one key across files).
199
142
  // No rowid coupling needed (unlike sqlite's content, which links to frontmatter's rowid):
200
143
  // `path` is content's own primary key, so this is a plain per-doc row.
201
144
  var INSERT_CONTENT_SQL = 'INSERT INTO content ("path", title, summary, text) VALUES (?, ?, ?, ?)';
@@ -210,542 +153,63 @@ function contentRow(doc) {
210
153
  // No compile-time column cap in DuckDB (unlike SQLite's SQLITE_MAX_COLUMN); kept as a sanity fence anyway
211
154
  // so a runaway frontmatter generator fails with a clear message instead of an unbounded ALTER TABLE loop.
212
155
  var MAX_FRONTMATTER_COLUMNS = 10000;
213
- function reconcile(conn, cfg, baseDir) {
156
+ function reconcileContent(conn, touched, docs, _delta) {
214
157
  return _async_to_generator(function() {
215
- var files, currentSet, existingStmt, existingRows, existing, vanished, toReparse, features, seenColumns, report, _ref, parsedDocs, warnings, newColumns, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, col, allColumns, writableColumns, insertSql, added, delta, addedSet, reparsedExisting;
216
158
  return _ts_generator(this, function(_state) {
217
159
  switch(_state.label){
218
160
  case 0:
219
- files = (0, _indexts1.listFiles)(cfg, baseDir);
220
- currentSet = new Set(files.map(function(f) {
221
- return f.relPath;
222
- }));
223
- return [
224
- 4,
225
- conn.prepare('SELECT "path", "_mtime", "_size" FROM frontmatter')
161
+ if (!(touched.length > 0)) return [
162
+ 3,
163
+ 2
226
164
  ];
227
- case 1:
228
- existingStmt = _state.sent();
229
165
  return [
230
166
  4,
231
- existingStmt.all()
167
+ conn.runBatch('DELETE FROM content WHERE "path" = ?', touched.map(function(p) {
168
+ return [
169
+ p
170
+ ];
171
+ }))
232
172
  ];
173
+ case 1:
174
+ _state.sent();
175
+ _state.label = 2;
233
176
  case 2:
234
- existingRows = _state.sent();
235
- existing = new Map(existingRows.map(function(r) {
236
- return [
237
- r.path,
238
- r
239
- ];
240
- }));
241
- vanished = existingRows.filter(function(r) {
242
- return !currentSet.has(r.path);
243
- }).map(function(r) {
244
- return r.path;
245
- });
246
- toReparse = files.filter(function(f) {
247
- var row = existing.get(f.relPath);
248
- return !row || row._mtime !== f.mtimeMs || row._size !== f.size;
249
- });
250
- if (vanished.length === 0 && toReparse.length === 0) return [
251
- 2,
252
- {
253
- parsed: 0,
254
- warnings: []
255
- }
177
+ if (!(docs.length > 0)) return [
178
+ 3,
179
+ 4
256
180
  ];
257
- features = (0, _indexts.activeFeatures)(cfg);
258
181
  return [
259
182
  4,
260
- (0, _sharedts.getColumns)(conn)
183
+ conn.runBatch(INSERT_CONTENT_SQL, docs.map(contentRow))
261
184
  ];
262
185
  case 3:
263
- seenColumns = _state.sent();
264
- report = (0, _progressts.progress)('reparsing files', toReparse.length);
265
- return [
266
- 4,
267
- (0, _reparsets.reparseFiles)(toReparse, features, cfg, seenColumns, report.tick)
268
- ];
269
- case 4:
270
- _ref = _state.sent(), parsedDocs = _ref.docs, warnings = _ref.warnings, newColumns = _ref.newColumns;
271
- report.finish();
272
- _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
273
- try {
274
- for(_iterator = newColumns[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
275
- col = _step.value;
276
- seenColumns.add(col);
277
- }
278
- } catch (err) {
279
- _didIteratorError = true;
280
- _iteratorError = err;
281
- } finally{
282
- try {
283
- if (!_iteratorNormalCompletion && _iterator.return != null) {
284
- _iterator.return();
285
- }
286
- } finally{
287
- if (_didIteratorError) {
288
- throw _iteratorError;
289
- }
290
- }
291
- }
292
- allColumns = _to_consumable_array(seenColumns);
293
- if (allColumns.length > MAX_FRONTMATTER_COLUMNS) {
294
- throw new _errorsts.SenseError('COLUMN_LIMIT', "frontmatter would need ".concat(allColumns.length, " columns, crossing this store's sanity limit (").concat(MAX_FRONTMATTER_COLUMNS, "). Narrow the presets' include globs so fewer/other files are indexed, or fix whatever is generating unbounded frontmatter keys."));
295
- }
296
- writableColumns = allColumns.filter(function(c) {
297
- return CORE_FRONTMATTER_COLUMNS.has(c) || !_indexts1.RESERVED_COLUMNS.has(c);
298
- });
299
- insertSql = "INSERT INTO frontmatter (".concat(writableColumns.map(_sharedts.quoteIdent).join(', '), ") VALUES (").concat(writableColumns.map(function() {
300
- return '?';
301
- }).join(', '), ') ON CONFLICT("path") DO UPDATE SET ').concat(writableColumns.filter(function(c) {
302
- return c !== 'path';
303
- }).map(function(c) {
304
- return "".concat((0, _sharedts.quoteIdent)(c), " = excluded.").concat((0, _sharedts.quoteIdent)(c));
305
- }).join(', '));
306
- added = toReparse.filter(function(f) {
307
- return !existing.has(f.relPath);
308
- }).map(function(f) {
309
- return f.relPath;
310
- });
311
- delta = {
312
- files: files,
313
- reparsed: parsedDocs.map(function(d) {
314
- return d.relPath;
315
- }),
316
- added: added,
317
- vanished: vanished
318
- };
319
- addedSet = new Set(added);
320
- reparsedExisting = parsedDocs.map(function(d) {
321
- return d.relPath;
322
- }).filter(function(p) {
323
- return !addedSet.has(p);
324
- });
325
- return [
326
- 4,
327
- (0, _transactionts.withTransaction)(conn, function() {
328
- return _async_to_generator(function() {
329
- var _feature_remove, _feature_afterReconcile, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, col, err, rows, contentTouched, presetTouched, presetRows, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator1, _step1, doc, _iterator2, _step2, presetName, removedPaths, _iteratorNormalCompletion3, _didIteratorError3, _iteratorError3, _iterator3, _step3, feature, err, _iteratorNormalCompletion4, _didIteratorError4, _iteratorError4, _loop, _iterator4, _step4, err, _iteratorNormalCompletion5, _didIteratorError5, _iteratorError5, _iterator5, _step5, feature1, err;
330
- return _ts_generator(this, function(_state) {
331
- switch(_state.label){
332
- case 0:
333
- _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
334
- _state.label = 1;
335
- case 1:
336
- _state.trys.push([
337
- 1,
338
- 6,
339
- 7,
340
- 8
341
- ]);
342
- _iterator = newColumns[Symbol.iterator]();
343
- _state.label = 2;
344
- case 2:
345
- if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
346
- 3,
347
- 5
348
- ];
349
- col = _step.value;
350
- return [
351
- 4,
352
- conn.exec("ALTER TABLE frontmatter ADD COLUMN ".concat((0, _sharedts.quoteIdent)(col), " VARIANT"))
353
- ];
354
- case 3:
355
- _state.sent();
356
- _state.label = 4;
357
- case 4:
358
- _iteratorNormalCompletion = true;
359
- return [
360
- 3,
361
- 2
362
- ];
363
- case 5:
364
- return [
365
- 3,
366
- 8
367
- ];
368
- case 6:
369
- err = _state.sent();
370
- _didIteratorError = true;
371
- _iteratorError = err;
372
- return [
373
- 3,
374
- 8
375
- ];
376
- case 7:
377
- try {
378
- if (!_iteratorNormalCompletion && _iterator.return != null) {
379
- _iterator.return();
380
- }
381
- } finally{
382
- if (_didIteratorError) {
383
- throw _iteratorError;
384
- }
385
- }
386
- return [
387
- 7
388
- ];
389
- case 8:
390
- if (!(parsedDocs.length > 0)) return [
391
- 3,
392
- 10
393
- ];
394
- rows = parsedDocs.map(function(doc) {
395
- return writableColumns.map(function(col) {
396
- var _doc_data_col;
397
- if (col === 'path') return doc.relPath;
398
- if (col === '_mtime') return doc.mtimeMs;
399
- if (col === '_ctime') return doc.ctimeMs;
400
- if (col === '_size') return doc.size;
401
- if (col === '_parse_error') return doc.parseError;
402
- return (_doc_data_col = doc.data[col]) !== null && _doc_data_col !== void 0 ? _doc_data_col : null;
403
- });
404
- });
405
- return [
406
- 4,
407
- conn.runBatch(insertSql, rows)
408
- ];
409
- case 9:
410
- _state.sent();
411
- _state.label = 10;
412
- case 10:
413
- contentTouched = _to_consumable_array(vanished).concat(_to_consumable_array(reparsedExisting));
414
- if (!(contentTouched.length > 0)) return [
415
- 3,
416
- 12
417
- ];
418
- return [
419
- 4,
420
- conn.runBatch('DELETE FROM content WHERE "path" = ?', contentTouched.map(function(p) {
421
- return [
422
- p
423
- ];
424
- }))
425
- ];
426
- case 11:
427
- _state.sent();
428
- _state.label = 12;
429
- case 12:
430
- if (!(parsedDocs.length > 0)) return [
431
- 3,
432
- 14
433
- ];
434
- return [
435
- 4,
436
- conn.runBatch(INSERT_CONTENT_SQL, parsedDocs.map(contentRow))
437
- ];
438
- case 13:
439
- _state.sent();
440
- _state.label = 14;
441
- case 14:
442
- if (!(vanished.length > 0)) return [
443
- 3,
444
- 16
445
- ];
446
- return [
447
- 4,
448
- conn.runBatch('DELETE FROM frontmatter WHERE "path" = ?', vanished.map(function(p) {
449
- return [
450
- p
451
- ];
452
- }))
453
- ];
454
- case 15:
455
- _state.sent();
456
- _state.label = 16;
457
- case 16:
458
- // A preset edit forces a full rebuild, so an unchanged doc's coverage is already correct;
459
- // new docs have nothing to clear, which keeps cold builds linear.
460
- presetTouched = _to_consumable_array(vanished).concat(_to_consumable_array(reparsedExisting));
461
- if (!(presetTouched.length > 0)) return [
462
- 3,
463
- 18
464
- ];
465
- return [
466
- 4,
467
- conn.runBatch('DELETE FROM preset_files WHERE "path" = ?', presetTouched.map(function(p) {
468
- return [
469
- p
470
- ];
471
- }))
472
- ];
473
- case 17:
474
- _state.sent();
475
- _state.label = 18;
476
- case 18:
477
- presetRows = [];
478
- _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined, _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = undefined;
479
- try {
480
- for(_iterator1 = parsedDocs[Symbol.iterator](); !(_iteratorNormalCompletion2 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion2 = true){
481
- doc = _step1.value;
482
- try {
483
- for(_iterator2 = doc.presets[Symbol.iterator](); !(_iteratorNormalCompletion1 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion1 = true){
484
- presetName = _step2.value;
485
- presetRows.push([
486
- doc.relPath,
487
- presetName
488
- ]);
489
- }
490
- } catch (err) {
491
- _didIteratorError1 = true;
492
- _iteratorError1 = err;
493
- } finally{
494
- try {
495
- if (!_iteratorNormalCompletion1 && _iterator2.return != null) {
496
- _iterator2.return();
497
- }
498
- } finally{
499
- if (_didIteratorError1) {
500
- throw _iteratorError1;
501
- }
502
- }
503
- }
504
- }
505
- } catch (err) {
506
- _didIteratorError2 = true;
507
- _iteratorError2 = err;
508
- } finally{
509
- try {
510
- if (!_iteratorNormalCompletion2 && _iterator1.return != null) {
511
- _iterator1.return();
512
- }
513
- } finally{
514
- if (_didIteratorError2) {
515
- throw _iteratorError2;
516
- }
517
- }
518
- }
519
- if (!(presetRows.length > 0)) return [
520
- 3,
521
- 20
522
- ];
523
- return [
524
- 4,
525
- conn.runBatch('INSERT INTO preset_files ("path", preset) VALUES (?, ?)', presetRows)
526
- ];
527
- case 19:
528
- _state.sent();
529
- _state.label = 20;
530
- case 20:
531
- removedPaths = _to_consumable_array(vanished).concat(_to_consumable_array(reparsedExisting));
532
- _iteratorNormalCompletion3 = true, _didIteratorError3 = false, _iteratorError3 = undefined;
533
- if (!(removedPaths.length > 0)) return [
534
- 3,
535
- 28
536
- ];
537
- _state.label = 21;
538
- case 21:
539
- _state.trys.push([
540
- 21,
541
- 26,
542
- 27,
543
- 28
544
- ]);
545
- _iterator3 = features[Symbol.iterator]();
546
- _state.label = 22;
547
- case 22:
548
- if (!!(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done)) return [
549
- 3,
550
- 25
551
- ];
552
- feature = _step3.value;
553
- return [
554
- 4,
555
- (_feature_remove = feature.remove) === null || _feature_remove === void 0 ? void 0 : _feature_remove.call(feature, conn, removedPaths, delta)
556
- ];
557
- case 23:
558
- _state.sent();
559
- _state.label = 24;
560
- case 24:
561
- _iteratorNormalCompletion3 = true;
562
- return [
563
- 3,
564
- 22
565
- ];
566
- case 25:
567
- return [
568
- 3,
569
- 28
570
- ];
571
- case 26:
572
- err = _state.sent();
573
- _didIteratorError3 = true;
574
- _iteratorError3 = err;
575
- return [
576
- 3,
577
- 28
578
- ];
579
- case 27:
580
- try {
581
- if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
582
- _iterator3.return();
583
- }
584
- } finally{
585
- if (_didIteratorError3) {
586
- throw _iteratorError3;
587
- }
588
- }
589
- return [
590
- 7
591
- ];
592
- case 28:
593
- _iteratorNormalCompletion4 = true, _didIteratorError4 = false, _iteratorError4 = undefined;
594
- _state.label = 29;
595
- case 29:
596
- _state.trys.push([
597
- 29,
598
- 34,
599
- 35,
600
- 36
601
- ]);
602
- _loop = function() {
603
- var feature, _feature_store, docsForFeature;
604
- return _ts_generator(this, function(_state) {
605
- switch(_state.label){
606
- case 0:
607
- feature = _step4.value;
608
- docsForFeature = parsedDocs.map(function(doc) {
609
- return {
610
- path: doc.relPath,
611
- extracted: doc.extracted[feature.name]
612
- };
613
- });
614
- return [
615
- 4,
616
- (_feature_store = feature.store) === null || _feature_store === void 0 ? void 0 : _feature_store.call(feature, conn, docsForFeature, delta)
617
- ];
618
- case 1:
619
- _state.sent();
620
- return [
621
- 2
622
- ];
623
- }
624
- });
625
- };
626
- _iterator4 = features[Symbol.iterator]();
627
- _state.label = 30;
628
- case 30:
629
- if (!!(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done)) return [
630
- 3,
631
- 33
632
- ];
633
- return [
634
- 5,
635
- _ts_values(_loop())
636
- ];
637
- case 31:
638
- _state.sent();
639
- _state.label = 32;
640
- case 32:
641
- _iteratorNormalCompletion4 = true;
642
- return [
643
- 3,
644
- 30
645
- ];
646
- case 33:
647
- return [
648
- 3,
649
- 36
650
- ];
651
- case 34:
652
- err = _state.sent();
653
- _didIteratorError4 = true;
654
- _iteratorError4 = err;
655
- return [
656
- 3,
657
- 36
658
- ];
659
- case 35:
660
- try {
661
- if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
662
- _iterator4.return();
663
- }
664
- } finally{
665
- if (_didIteratorError4) {
666
- throw _iteratorError4;
667
- }
668
- }
669
- return [
670
- 7
671
- ];
672
- case 36:
673
- _iteratorNormalCompletion5 = true, _didIteratorError5 = false, _iteratorError5 = undefined;
674
- _state.label = 37;
675
- case 37:
676
- _state.trys.push([
677
- 37,
678
- 42,
679
- 43,
680
- 44
681
- ]);
682
- _iterator5 = features[Symbol.iterator]();
683
- _state.label = 38;
684
- case 38:
685
- if (!!(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done)) return [
686
- 3,
687
- 41
688
- ];
689
- feature1 = _step5.value;
690
- return [
691
- 4,
692
- (_feature_afterReconcile = feature1.afterReconcile) === null || _feature_afterReconcile === void 0 ? void 0 : _feature_afterReconcile.call(feature1, conn, delta)
693
- ];
694
- case 39:
695
- _state.sent();
696
- _state.label = 40;
697
- case 40:
698
- _iteratorNormalCompletion5 = true;
699
- return [
700
- 3,
701
- 38
702
- ];
703
- case 41:
704
- return [
705
- 3,
706
- 44
707
- ];
708
- case 42:
709
- err = _state.sent();
710
- _didIteratorError5 = true;
711
- _iteratorError5 = err;
712
- return [
713
- 3,
714
- 44
715
- ];
716
- case 43:
717
- try {
718
- if (!_iteratorNormalCompletion5 && _iterator5.return != null) {
719
- _iterator5.return();
720
- }
721
- } finally{
722
- if (_didIteratorError5) {
723
- throw _iteratorError5;
724
- }
725
- }
726
- return [
727
- 7
728
- ];
729
- case 44:
730
- return [
731
- 2
732
- ];
733
- }
734
- });
735
- })();
736
- })
737
- ];
738
- case 5:
739
186
  _state.sent();
187
+ _state.label = 4;
188
+ case 4:
189
+ // content changed: the fts index is rebuilt lazily, on the next lexical query that needs it,
190
+ // not here (lexical.ts's FtsIndexState).
191
+ (0, _lexicalts.markContentStale)(conn);
740
192
  return [
741
- 2,
742
- {
743
- parsed: parsedDocs.length,
744
- warnings: warnings
745
- }
193
+ 2
746
194
  ];
747
195
  }
748
196
  });
749
197
  })();
750
198
  }
199
+ var duckdbDialect = {
200
+ beginMode: function beginMode() {
201
+ return 'BEGIN';
202
+ },
203
+ checkColumnLimit: function checkColumnLimit(count) {
204
+ if (count > MAX_FRONTMATTER_COLUMNS) {
205
+ throw new _errorsts.SenseError('COLUMN_LIMIT', "frontmatter would need ".concat(count, " columns, crossing this store's sanity limit (").concat(MAX_FRONTMATTER_COLUMNS, "). Narrow the presets' include globs so fewer/other files are indexed, or fix whatever is generating unbounded frontmatter keys."));
206
+ }
207
+ },
208
+ // DuckDB's ALTER TABLE ADD COLUMN requires a type; VARIANT is the only one that can hold
209
+ // the mixed bigint/number/string/null shapes mapValue() produces for one key across files.
210
+ columnTypeSuffix: function columnTypeSuffix() {
211
+ return ' VARIANT';
212
+ },
213
+ reconcileContent: reconcileContent
214
+ };
751
215
  /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }