sensemaking 0.25.0 → 0.26.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 (316) hide show
  1. package/README.md +14 -10
  2. package/dist/cjs/cli/index.d.cts +1 -1
  3. package/dist/cjs/cli/index.d.ts +1 -1
  4. package/dist/cjs/cli/index.js +1 -1
  5. package/dist/cjs/cli/index.js.map +1 -1
  6. package/dist/cjs/cli/path.js +5 -29
  7. package/dist/cjs/cli/path.js.map +1 -1
  8. package/dist/cjs/cli/related.js +4 -3
  9. package/dist/cjs/cli/related.js.map +1 -1
  10. package/dist/cjs/commands/index.d.cts +6 -3
  11. package/dist/cjs/commands/index.d.ts +6 -3
  12. package/dist/cjs/commands/index.js +4 -0
  13. package/dist/cjs/commands/index.js.map +1 -1
  14. package/dist/cjs/commands/map.d.cts +14 -5
  15. package/dist/cjs/commands/map.d.ts +14 -5
  16. package/dist/cjs/commands/map.js +42 -35
  17. package/dist/cjs/commands/map.js.map +1 -1
  18. package/dist/cjs/commands/path.d.cts +14 -0
  19. package/dist/cjs/commands/path.d.ts +14 -0
  20. package/dist/cjs/commands/path.js +209 -0
  21. package/dist/cjs/commands/path.js.map +1 -0
  22. package/dist/cjs/commands/peek.d.cts +16 -1
  23. package/dist/cjs/commands/peek.d.ts +16 -1
  24. package/dist/cjs/commands/peek.js +71 -33
  25. package/dist/cjs/commands/peek.js.map +1 -1
  26. package/dist/cjs/commands/related.d.cts +16 -3
  27. package/dist/cjs/commands/related.d.ts +16 -3
  28. package/dist/cjs/commands/related.js +131 -98
  29. package/dist/cjs/commands/related.js.map +1 -1
  30. package/dist/cjs/commands/scope.d.cts +1 -0
  31. package/dist/cjs/commands/scope.d.ts +1 -0
  32. package/dist/cjs/commands/scope.js +149 -0
  33. package/dist/cjs/commands/scope.js.map +1 -1
  34. package/dist/cjs/commands/search.d.cts +26 -3
  35. package/dist/cjs/commands/search.d.ts +26 -3
  36. package/dist/cjs/commands/search.js +211 -71
  37. package/dist/cjs/commands/search.js.map +1 -1
  38. package/dist/cjs/commands/signals.d.cts +4 -3
  39. package/dist/cjs/commands/signals.d.ts +4 -3
  40. package/dist/cjs/commands/signals.js +13 -4
  41. package/dist/cjs/commands/signals.js.map +1 -1
  42. package/dist/cjs/commands/snapshot.d.cts +3 -0
  43. package/dist/cjs/commands/snapshot.d.ts +3 -0
  44. package/dist/cjs/commands/snapshot.js +180 -0
  45. package/dist/cjs/commands/snapshot.js.map +1 -0
  46. package/dist/cjs/embed/cohere.js +41 -16
  47. package/dist/cjs/embed/cohere.js.map +1 -1
  48. package/dist/cjs/embed/endpoint.d.cts +2 -0
  49. package/dist/cjs/embed/endpoint.d.ts +2 -0
  50. package/dist/cjs/embed/endpoint.js +30 -0
  51. package/dist/cjs/embed/endpoint.js.map +1 -0
  52. package/dist/cjs/embed/handoff.d.cts +7 -2
  53. package/dist/cjs/embed/handoff.d.ts +7 -2
  54. package/dist/cjs/embed/handoff.js +10 -0
  55. package/dist/cjs/embed/handoff.js.map +1 -1
  56. package/dist/cjs/embed/http.d.cts +18 -1
  57. package/dist/cjs/embed/http.d.ts +18 -1
  58. package/dist/cjs/embed/http.js +239 -40
  59. package/dist/cjs/embed/http.js.map +1 -1
  60. package/dist/cjs/embed/openai.js +39 -17
  61. package/dist/cjs/embed/openai.js.map +1 -1
  62. package/dist/cjs/embed/query.d.cts +9 -3
  63. package/dist/cjs/embed/query.d.ts +9 -3
  64. package/dist/cjs/embed/query.js +257 -90
  65. package/dist/cjs/embed/query.js.map +1 -1
  66. package/dist/cjs/embed/registry.d.cts +2 -2
  67. package/dist/cjs/embed/registry.d.ts +2 -2
  68. package/dist/cjs/embed/registry.js +36 -4
  69. package/dist/cjs/embed/registry.js.map +1 -1
  70. package/dist/cjs/embed/static.js +6 -2
  71. package/dist/cjs/embed/static.js.map +1 -1
  72. package/dist/cjs/embed/store.js +42 -77
  73. package/dist/cjs/embed/store.js.map +1 -1
  74. package/dist/cjs/embed/types.d.cts +5 -2
  75. package/dist/cjs/embed/types.d.ts +5 -2
  76. package/dist/cjs/embed/types.js.map +1 -1
  77. package/dist/cjs/features/embed.js +290 -43
  78. package/dist/cjs/features/embed.js.map +1 -1
  79. package/dist/cjs/graph/traverse.d.cts +2 -2
  80. package/dist/cjs/graph/traverse.d.ts +2 -2
  81. package/dist/cjs/graph/traverse.js +15 -5
  82. package/dist/cjs/graph/traverse.js.map +1 -1
  83. package/dist/cjs/index.d.cts +2 -2
  84. package/dist/cjs/index.d.ts +2 -2
  85. package/dist/cjs/index.js +6 -0
  86. package/dist/cjs/index.js.map +1 -1
  87. package/dist/cjs/output/output.d.cts +4 -36
  88. package/dist/cjs/output/output.d.ts +4 -36
  89. package/dist/cjs/output/output.js +1 -2
  90. package/dist/cjs/output/output.js.map +1 -1
  91. package/dist/cjs/scan/pool.d.cts +2 -1
  92. package/dist/cjs/scan/pool.d.ts +2 -1
  93. package/dist/cjs/scan/pool.js +116 -27
  94. package/dist/cjs/scan/pool.js.map +1 -1
  95. package/dist/cjs/scan/reparse.d.cts +1 -0
  96. package/dist/cjs/scan/reparse.d.ts +1 -0
  97. package/dist/cjs/scan/reparse.js +75 -21
  98. package/dist/cjs/scan/reparse.js.map +1 -1
  99. package/dist/cjs/store/builder.d.cts +11 -21
  100. package/dist/cjs/store/builder.d.ts +11 -21
  101. package/dist/cjs/store/builder.js +1077 -438
  102. package/dist/cjs/store/builder.js.map +1 -1
  103. package/dist/cjs/store/duckdb/connection.js +16 -2
  104. package/dist/cjs/store/duckdb/connection.js.map +1 -1
  105. package/dist/cjs/store/duckdb/open.d.cts +1 -1
  106. package/dist/cjs/store/duckdb/open.d.ts +1 -1
  107. package/dist/cjs/store/duckdb/open.js +73 -65
  108. package/dist/cjs/store/duckdb/open.js.map +1 -1
  109. package/dist/cjs/store/duckdb/reconcile.js +533 -15
  110. package/dist/cjs/store/duckdb/reconcile.js.map +1 -1
  111. package/dist/cjs/store/embed-scope.js +19 -9
  112. package/dist/cjs/store/embed-scope.js.map +1 -1
  113. package/dist/cjs/store/index.d.cts +6 -0
  114. package/dist/cjs/store/index.d.ts +6 -0
  115. package/dist/cjs/store/index.js +8 -4
  116. package/dist/cjs/store/index.js.map +1 -1
  117. package/dist/cjs/store/open.d.cts +6 -1
  118. package/dist/cjs/store/open.d.ts +6 -1
  119. package/dist/cjs/store/open.js +230 -307
  120. package/dist/cjs/store/open.js.map +1 -1
  121. package/dist/cjs/store/readiness.d.cts +5 -0
  122. package/dist/cjs/store/readiness.d.ts +5 -0
  123. package/dist/cjs/store/readiness.js +39 -0
  124. package/dist/cjs/store/readiness.js.map +1 -0
  125. package/dist/cjs/store/reconcile.d.cts +26 -1
  126. package/dist/cjs/store/reconcile.d.ts +26 -1
  127. package/dist/cjs/store/reconcile.js +670 -576
  128. package/dist/cjs/store/reconcile.js.map +1 -1
  129. package/dist/cjs/store/signature.d.cts +1 -0
  130. package/dist/cjs/store/signature.d.ts +1 -0
  131. package/dist/cjs/store/signature.js +9 -0
  132. package/dist/cjs/store/signature.js.map +1 -1
  133. package/dist/cjs/store/sqlite/open.d.cts +1 -1
  134. package/dist/cjs/store/sqlite/open.d.ts +1 -1
  135. package/dist/cjs/store/sqlite/open.js +84 -90
  136. package/dist/cjs/store/sqlite/open.js.map +1 -1
  137. package/dist/cjs/store/sqlite/reconcile.js.map +1 -1
  138. package/dist/cjs/store/sqlite/store.js +63 -60
  139. package/dist/cjs/store/sqlite/store.js.map +1 -1
  140. package/dist/cjs/store/sqlite/vectors.d.cts +2 -2
  141. package/dist/cjs/store/sqlite/vectors.d.ts +2 -2
  142. package/dist/cjs/store/sqlite/vectors.js +8 -4
  143. package/dist/cjs/store/sqlite/vectors.js.map +1 -1
  144. package/dist/cjs/store/stages.js.map +1 -1
  145. package/dist/cjs/store/turso/connection.d.cts +1 -0
  146. package/dist/cjs/store/turso/connection.d.ts +1 -0
  147. package/dist/cjs/store/turso/connection.js +319 -94
  148. package/dist/cjs/store/turso/connection.js.map +1 -1
  149. package/dist/cjs/store/turso/open.d.cts +1 -1
  150. package/dist/cjs/store/turso/open.d.ts +1 -1
  151. package/dist/cjs/store/turso/open.js +70 -74
  152. package/dist/cjs/store/turso/open.js.map +1 -1
  153. package/dist/cjs/store/turso/store.js +25 -23
  154. package/dist/cjs/store/turso/store.js.map +1 -1
  155. package/dist/cjs/store/turso/vectors.d.cts +2 -2
  156. package/dist/cjs/store/turso/vectors.d.ts +2 -2
  157. package/dist/cjs/store/turso/vectors.js +26 -16
  158. package/dist/cjs/store/turso/vectors.js.map +1 -1
  159. package/dist/cjs/store/types.d.cts +4 -1
  160. package/dist/cjs/store/types.d.ts +4 -1
  161. package/dist/cjs/store/types.js.map +1 -1
  162. package/dist/cjs/store/vectors.d.cts +14 -1
  163. package/dist/cjs/store/vectors.d.ts +14 -1
  164. package/dist/cjs/store/vectors.js +61 -0
  165. package/dist/cjs/store/vectors.js.map +1 -1
  166. package/dist/cjs/watch.d.cts +6 -0
  167. package/dist/cjs/watch.d.ts +6 -0
  168. package/dist/cjs/watch.js +42 -10
  169. package/dist/cjs/watch.js.map +1 -1
  170. package/dist/cjs/workers/parse.d.cts +4 -3
  171. package/dist/cjs/workers/parse.d.ts +4 -3
  172. package/dist/cjs/workers/parse.js +19 -17
  173. package/dist/cjs/workers/parse.js.map +1 -1
  174. package/dist/esm/cli/index.d.ts +1 -1
  175. package/dist/esm/cli/index.js +1 -1
  176. package/dist/esm/cli/index.js.map +1 -1
  177. package/dist/esm/cli/path.js +4 -10
  178. package/dist/esm/cli/path.js.map +1 -1
  179. package/dist/esm/cli/related.js +5 -3
  180. package/dist/esm/cli/related.js.map +1 -1
  181. package/dist/esm/commands/index.d.ts +6 -3
  182. package/dist/esm/commands/index.js +1 -0
  183. package/dist/esm/commands/index.js.map +1 -1
  184. package/dist/esm/commands/map.d.ts +14 -5
  185. package/dist/esm/commands/map.js +2 -0
  186. package/dist/esm/commands/map.js.map +1 -1
  187. package/dist/esm/commands/path.d.ts +14 -0
  188. package/dist/esm/commands/path.js +33 -0
  189. package/dist/esm/commands/path.js.map +1 -0
  190. package/dist/esm/commands/peek.d.ts +16 -1
  191. package/dist/esm/commands/peek.js +35 -9
  192. package/dist/esm/commands/peek.js.map +1 -1
  193. package/dist/esm/commands/related.d.ts +16 -3
  194. package/dist/esm/commands/related.js +45 -28
  195. package/dist/esm/commands/related.js.map +1 -1
  196. package/dist/esm/commands/scope.d.ts +1 -0
  197. package/dist/esm/commands/scope.js +58 -0
  198. package/dist/esm/commands/scope.js.map +1 -1
  199. package/dist/esm/commands/search.d.ts +26 -3
  200. package/dist/esm/commands/search.js +85 -18
  201. package/dist/esm/commands/search.js.map +1 -1
  202. package/dist/esm/commands/signals.d.ts +4 -3
  203. package/dist/esm/commands/signals.js +11 -4
  204. package/dist/esm/commands/signals.js.map +1 -1
  205. package/dist/esm/commands/snapshot.d.ts +3 -0
  206. package/dist/esm/commands/snapshot.js +25 -0
  207. package/dist/esm/commands/snapshot.js.map +1 -0
  208. package/dist/esm/embed/cohere.js +35 -10
  209. package/dist/esm/embed/cohere.js.map +1 -1
  210. package/dist/esm/embed/endpoint.d.ts +2 -0
  211. package/dist/esm/embed/endpoint.js +11 -0
  212. package/dist/esm/embed/endpoint.js.map +1 -0
  213. package/dist/esm/embed/handoff.d.ts +7 -2
  214. package/dist/esm/embed/handoff.js +7 -0
  215. package/dist/esm/embed/handoff.js.map +1 -1
  216. package/dist/esm/embed/http.d.ts +18 -1
  217. package/dist/esm/embed/http.js +137 -17
  218. package/dist/esm/embed/http.js.map +1 -1
  219. package/dist/esm/embed/openai.js +34 -12
  220. package/dist/esm/embed/openai.js.map +1 -1
  221. package/dist/esm/embed/query.d.ts +9 -3
  222. package/dist/esm/embed/query.js +98 -26
  223. package/dist/esm/embed/query.js.map +1 -1
  224. package/dist/esm/embed/registry.d.ts +2 -2
  225. package/dist/esm/embed/registry.js +34 -5
  226. package/dist/esm/embed/registry.js.map +1 -1
  227. package/dist/esm/embed/static.js +10 -2
  228. package/dist/esm/embed/static.js.map +1 -1
  229. package/dist/esm/embed/store.js +30 -21
  230. package/dist/esm/embed/store.js.map +1 -1
  231. package/dist/esm/embed/types.d.ts +5 -2
  232. package/dist/esm/embed/types.js.map +1 -1
  233. package/dist/esm/features/embed.js +82 -21
  234. package/dist/esm/features/embed.js.map +1 -1
  235. package/dist/esm/graph/traverse.d.ts +2 -2
  236. package/dist/esm/graph/traverse.js +4 -2
  237. package/dist/esm/graph/traverse.js.map +1 -1
  238. package/dist/esm/index.d.ts +2 -2
  239. package/dist/esm/index.js +1 -1
  240. package/dist/esm/index.js.map +1 -1
  241. package/dist/esm/output/output.d.ts +4 -36
  242. package/dist/esm/output/output.js +1 -2
  243. package/dist/esm/output/output.js.map +1 -1
  244. package/dist/esm/scan/pool.d.ts +2 -1
  245. package/dist/esm/scan/pool.js +80 -23
  246. package/dist/esm/scan/pool.js.map +1 -1
  247. package/dist/esm/scan/reparse.d.ts +1 -0
  248. package/dist/esm/scan/reparse.js +40 -12
  249. package/dist/esm/scan/reparse.js.map +1 -1
  250. package/dist/esm/store/builder.d.ts +11 -21
  251. package/dist/esm/store/builder.js +337 -133
  252. package/dist/esm/store/builder.js.map +1 -1
  253. package/dist/esm/store/duckdb/connection.js +9 -1
  254. package/dist/esm/store/duckdb/connection.js.map +1 -1
  255. package/dist/esm/store/duckdb/open.d.ts +1 -1
  256. package/dist/esm/store/duckdb/open.js +13 -9
  257. package/dist/esm/store/duckdb/open.js.map +1 -1
  258. package/dist/esm/store/duckdb/reconcile.js +145 -10
  259. package/dist/esm/store/duckdb/reconcile.js.map +1 -1
  260. package/dist/esm/store/embed-scope.js +16 -6
  261. package/dist/esm/store/embed-scope.js.map +1 -1
  262. package/dist/esm/store/index.d.ts +6 -0
  263. package/dist/esm/store/index.js +10 -4
  264. package/dist/esm/store/index.js.map +1 -1
  265. package/dist/esm/store/open.d.ts +6 -1
  266. package/dist/esm/store/open.js +77 -87
  267. package/dist/esm/store/open.js.map +1 -1
  268. package/dist/esm/store/readiness.d.ts +5 -0
  269. package/dist/esm/store/readiness.js +11 -0
  270. package/dist/esm/store/readiness.js.map +1 -0
  271. package/dist/esm/store/reconcile.d.ts +26 -1
  272. package/dist/esm/store/reconcile.js +142 -120
  273. package/dist/esm/store/reconcile.js.map +1 -1
  274. package/dist/esm/store/signature.d.ts +1 -0
  275. package/dist/esm/store/signature.js +8 -0
  276. package/dist/esm/store/signature.js.map +1 -1
  277. package/dist/esm/store/sqlite/open.d.ts +1 -1
  278. package/dist/esm/store/sqlite/open.js +12 -12
  279. package/dist/esm/store/sqlite/open.js.map +1 -1
  280. package/dist/esm/store/sqlite/reconcile.js +2 -2
  281. package/dist/esm/store/sqlite/reconcile.js.map +1 -1
  282. package/dist/esm/store/sqlite/store.js +21 -18
  283. package/dist/esm/store/sqlite/store.js.map +1 -1
  284. package/dist/esm/store/sqlite/vectors.d.ts +2 -2
  285. package/dist/esm/store/sqlite/vectors.js +7 -5
  286. package/dist/esm/store/sqlite/vectors.js.map +1 -1
  287. package/dist/esm/store/stages.js.map +1 -1
  288. package/dist/esm/store/turso/connection.d.ts +1 -0
  289. package/dist/esm/store/turso/connection.js +97 -28
  290. package/dist/esm/store/turso/connection.js.map +1 -1
  291. package/dist/esm/store/turso/open.d.ts +1 -1
  292. package/dist/esm/store/turso/open.js +9 -8
  293. package/dist/esm/store/turso/open.js.map +1 -1
  294. package/dist/esm/store/turso/store.js +16 -14
  295. package/dist/esm/store/turso/store.js.map +1 -1
  296. package/dist/esm/store/turso/vectors.d.ts +2 -2
  297. package/dist/esm/store/turso/vectors.js +27 -17
  298. package/dist/esm/store/turso/vectors.js.map +1 -1
  299. package/dist/esm/store/types.d.ts +4 -1
  300. package/dist/esm/store/types.js.map +1 -1
  301. package/dist/esm/store/vectors.d.ts +14 -1
  302. package/dist/esm/store/vectors.js +55 -0
  303. package/dist/esm/store/vectors.js.map +1 -1
  304. package/dist/esm/watch.d.ts +6 -0
  305. package/dist/esm/watch.js +40 -14
  306. package/dist/esm/watch.js.map +1 -1
  307. package/dist/esm/workers/parse.d.ts +4 -3
  308. package/dist/esm/workers/parse.js +19 -17
  309. package/dist/esm/workers/parse.js.map +1 -1
  310. package/package.json +1 -1
  311. package/skills/sense/SKILL.md +4 -2
  312. package/skills/sense/references/stores/duckdb.md +1 -1
  313. package/skills/sense-setup/SKILL.md +2 -2
  314. package/skills/sense-setup/references/embeddings.md +1 -1
  315. package/skills/sense-setup/references/store-benchmarks.md +5 -5
  316. package/skills/sense-setup/references/stores/duckdb.md +1 -1
@@ -12,6 +12,15 @@ _export(exports, {
12
12
  get CORE_FRONTMATTER_COLUMNS () {
13
13
  return CORE_FRONTMATTER_COLUMNS;
14
14
  },
15
+ get createReconcileTiming () {
16
+ return createReconcileTiming;
17
+ },
18
+ get prepareReconcile () {
19
+ return prepareReconcile;
20
+ },
21
+ get readReconcileSnapshot () {
22
+ return readReconcileSnapshot;
23
+ },
15
24
  get reconcile () {
16
25
  return reconcile;
17
26
  }
@@ -203,35 +212,28 @@ var CORE_FRONTMATTER_COLUMNS = new Set([
203
212
  '_size',
204
213
  '_parse_error'
205
214
  ]);
206
- function reconcile(conn, cfg, paths, dialect, pool, forcedPaths) {
215
+ function createReconcileTiming(cfg) {
216
+ var start = process.hrtime.bigint();
217
+ return {
218
+ stages: (0, _stagests.stageRecorder)((0, _indexts.activeFeatures)(cfg).map(function(feature) {
219
+ return feature.name;
220
+ })),
221
+ elapsed: function elapsed() {
222
+ return Number(process.hrtime.bigint() - start) / 1e6;
223
+ },
224
+ workerParseMs: 0,
225
+ txMs: 0
226
+ };
227
+ }
228
+ function readReconcileSnapshot(conn, timing) {
207
229
  return _async_to_generator(function() {
208
- var rootDir, configDir, start, features, stages, elapsed, files, currentSet, existingRows, existing, vanished, toReparse, seenColumns, report, _ref, parsedDocs, warnings, newColumns, workerParseMs, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, col, allColumns, writableColumns, insertSql, added, delta, addedSet, reparsedExisting, touched, txStart, durationMs;
230
+ var existingRows, _tmp;
209
231
  return _ts_generator(this, function(_state) {
210
232
  switch(_state.label){
211
233
  case 0:
212
- rootDir = paths.rootDir, configDir = paths.configDir;
213
- start = process.hrtime.bigint();
214
- features = (0, _indexts.activeFeatures)(cfg);
215
- stages = (0, _stagests.stageRecorder)(features.map(function(f) {
216
- return f.name;
217
- }));
218
- elapsed = function elapsed() {
219
- return Number(process.hrtime.bigint() - start) / 1e6;
220
- };
221
234
  return [
222
235
  4,
223
- stages.time('list', function() {
224
- return (0, _indexts1.listFiles)(cfg, rootDir);
225
- })
226
- ];
227
- case 1:
228
- files = _state.sent();
229
- currentSet = new Set(files.map(function(f) {
230
- return f.relPath;
231
- }));
232
- return [
233
- 4,
234
- stages.time('existing', function() {
236
+ timing.stages.time('existing', function() {
235
237
  return _async_to_generator(function() {
236
238
  var existingStmt;
237
239
  return _ts_generator(this, function(_state) {
@@ -257,8 +259,45 @@ function reconcile(conn, cfg, paths, dialect, pool, forcedPaths) {
257
259
  })();
258
260
  })
259
261
  ];
260
- case 2:
262
+ case 1:
261
263
  existingRows = _state.sent();
264
+ _tmp = {
265
+ existingRows: existingRows
266
+ };
267
+ return [
268
+ 4,
269
+ (0, _sharedts.getColumns)(conn)
270
+ ];
271
+ case 2:
272
+ return [
273
+ 2,
274
+ (_tmp.seenColumns = _state.sent(), _tmp)
275
+ ];
276
+ }
277
+ });
278
+ })();
279
+ }
280
+ function prepareReconcile(snapshot, cfg, paths, dialect, timing, pool, forcedPaths) {
281
+ return _async_to_generator(function() {
282
+ var rootDir, configDir, features, stages, elapsed, files, currentSet, existingRows, existing, vanished, toReparse, seenColumns, report, _ref, parsedDocs, warnings, newColumns, workerParseMs, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, col, allColumns, writableColumns, insertSql, added, delta, addedSet, reparsedExisting, touched;
283
+ return _ts_generator(this, function(_state) {
284
+ switch(_state.label){
285
+ case 0:
286
+ rootDir = paths.rootDir, configDir = paths.configDir;
287
+ features = (0, _indexts.activeFeatures)(cfg);
288
+ stages = timing.stages, elapsed = timing.elapsed;
289
+ return [
290
+ 4,
291
+ stages.time('list', function() {
292
+ return (0, _indexts1.listFiles)(cfg, rootDir);
293
+ })
294
+ ];
295
+ case 1:
296
+ files = _state.sent();
297
+ currentSet = new Set(files.map(function(f) {
298
+ return f.relPath;
299
+ }));
300
+ existingRows = snapshot.existingRows;
262
301
  existing = new Map(existingRows.map(function(r) {
263
302
  return [
264
303
  r.path,
@@ -280,20 +319,38 @@ function reconcile(conn, cfg, paths, dialect, pool, forcedPaths) {
280
319
  var row = existing.get(f.relPath);
281
320
  return !row || row._mtime !== f.mtimeMs || row._size !== f.size || ((_ref = forcedPaths === null || forcedPaths === void 0 ? void 0 : forcedPaths.has(f.relPath)) !== null && _ref !== void 0 ? _ref : false);
282
321
  });
283
- if (vanished.length === 0 && toReparse.length === 0) return [
284
- 2,
285
- {
286
- parsed: 0,
287
- warnings: [],
288
- stages: stages.take(elapsed(), 0)
289
- }
290
- ];
291
- return [
292
- 4,
293
- (0, _sharedts.getColumns)(conn)
294
- ];
295
- case 3:
296
- seenColumns = _state.sent();
322
+ if (vanished.length === 0 && toReparse.length === 0) {
323
+ return [
324
+ 2,
325
+ {
326
+ mutated: false,
327
+ parsed: 0,
328
+ warnings: [],
329
+ apply: function apply() {
330
+ return _async_to_generator(function() {
331
+ return _ts_generator(this, function(_state) {
332
+ return [
333
+ 2
334
+ ];
335
+ });
336
+ })();
337
+ },
338
+ finish: function finish(txMs) {
339
+ return stages.take(elapsed(), txMs, timing.workerParseMs);
340
+ },
341
+ record: function record() {
342
+ return _async_to_generator(function() {
343
+ return _ts_generator(this, function(_state) {
344
+ return [
345
+ 2
346
+ ];
347
+ });
348
+ })();
349
+ }
350
+ }
351
+ ];
352
+ }
353
+ seenColumns = new Set(snapshot.seenColumns);
297
354
  // Bulk reparses (a sync, a cold build) are the long silences a query can hit; short
298
355
  // reconciles stay silent (progress() has a threshold).
299
356
  report = (0, _progressts.progress)('reparsing files', toReparse.length);
@@ -305,8 +362,9 @@ function reconcile(conn, cfg, paths, dialect, pool, forcedPaths) {
305
362
  });
306
363
  })
307
364
  ];
308
- case 4:
365
+ case 2:
309
366
  _ref = _state.sent(), parsedDocs = _ref.docs, warnings = _ref.warnings, newColumns = _ref.newColumns, workerParseMs = _ref.workerParseMs;
367
+ timing.workerParseMs += workerParseMs;
310
368
  report.finish();
311
369
  _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
312
370
  try {
@@ -368,575 +426,611 @@ function reconcile(conn, cfg, paths, dialect, pool, forcedPaths) {
368
426
  // Paths whose content (and, per feature, other rows) need clearing: gone entirely, or about to
369
427
  // be reinserted fresh. Disjoint from `added`, which has nothing to clear.
370
428
  touched = _to_consumable_array(vanished).concat(_to_consumable_array(reparsedExisting));
371
- txStart = Date.now();
372
429
  return [
373
- 4,
374
- (0, _transactionts.withTransaction)(conn, function() {
375
- return _async_to_generator(function() {
376
- var present, missingColumns, contentTouched, toRow, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _loop, _iterator, _step, err, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _loop1, _iterator1, _step1, err, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _loop2, _iterator2, _step2, err;
377
- return _ts_generator(this, function(_state) {
378
- switch(_state.label){
379
- case 0:
380
- return [
381
- 4,
382
- (0, _sharedts.getColumns)(conn)
383
- ];
384
- case 1:
385
- present = _state.sent();
386
- missingColumns = newColumns.filter(function(col) {
387
- return !present.has(col);
388
- });
389
- if (!(missingColumns.length > 0)) return [
390
- 3,
391
- 3
392
- ];
393
- return [
394
- 4,
395
- stages.time('alter', function() {
396
- return dialect.addColumns(conn, missingColumns);
397
- })
398
- ];
399
- case 2:
400
- _state.sent();
401
- _state.label = 3;
402
- case 3:
403
- // Revalidated once the lock is held, before this process's own frontmatter upsert below:
404
- // `added` came from a path read taken before this transaction's lock, so a path still
405
- // called "added" here may already have a content row from a concurrent reconcile that
406
- // committed while this one waited. One SELECT, not a DELETE per added file -- with no
407
- // contention it returns the same set `existing` already ruled out, so nothing extra clears.
408
- contentTouched = touched;
409
- if (!(added.length > 0)) return [
410
- 3,
411
- 5
412
- ];
413
- return [
414
- 4,
415
- stages.time('added-recheck', function() {
416
- return _async_to_generator(function() {
417
- var currentPathsStmt, currentPaths, _, staleAdded;
418
- return _ts_generator(this, function(_state) {
419
- switch(_state.label){
420
- case 0:
421
- return [
422
- 4,
423
- conn.prepare('SELECT "path" FROM frontmatter')
424
- ];
425
- case 1:
426
- currentPathsStmt = _state.sent();
427
- _ = Set.bind;
428
- return [
429
- 4,
430
- currentPathsStmt.all()
431
- ];
432
- case 2:
433
- currentPaths = new (_.apply(Set, [
434
- void 0,
435
- _state.sent().map(function(r) {
436
- return r.path;
437
- })
438
- ]));
439
- staleAdded = added.filter(function(p) {
440
- return currentPaths.has(p);
441
- });
442
- return [
443
- 2,
444
- staleAdded.length > 0 ? _to_consumable_array(touched).concat(_to_consumable_array(staleAdded)) : touched
445
- ];
446
- }
447
- });
448
- })();
449
- })
450
- ];
451
- case 4:
452
- contentTouched = _state.sent();
453
- _state.label = 5;
454
- case 5:
455
- if (!(parsedDocs.length > 0)) return [
456
- 3,
457
- 7
458
- ];
459
- toRow = function toRow(doc) {
460
- return writableColumns.map(function(col) {
461
- var _doc_data_col;
462
- if (col === 'path') return doc.relPath;
463
- if (col === '_mtime') return doc.mtimeMs;
464
- if (col === '_ctime') return doc.ctimeMs;
465
- if (col === '_size') return doc.size;
466
- // Written per parse, unlike _rank, which a feature pass owns and the upsert skips.
467
- if (col === '_parse_error') return doc.parseError;
468
- return (_doc_data_col = doc.data[col]) !== null && _doc_data_col !== void 0 ? _doc_data_col : null;
430
+ 2,
431
+ {
432
+ mutated: true,
433
+ parsed: parsedDocs.length,
434
+ warnings: warnings,
435
+ apply: function apply(conn) {
436
+ return _async_to_generator(function() {
437
+ var present, missingColumns, toRow, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _loop, _iterator, _step, err, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _loop1, _iterator1, _step1, err, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _loop2, _iterator2, _step2, err;
438
+ return _ts_generator(this, function(_state) {
439
+ switch(_state.label){
440
+ case 0:
441
+ return [
442
+ 4,
443
+ (0, _sharedts.getColumns)(conn)
444
+ ];
445
+ case 1:
446
+ present = _state.sent();
447
+ missingColumns = newColumns.filter(function(col) {
448
+ return !present.has(col);
469
449
  });
470
- };
471
- // A path in `added` has no existing frontmatter row, so it can never conflict; the rest
472
- // genuinely can, and keep the upsert.
473
- return [
474
- 4,
475
- stages.time('fm-upsert', function() {
476
- return _async_to_generator(function() {
477
- var newDocs, updateDocs;
478
- return _ts_generator(this, function(_state) {
479
- switch(_state.label){
480
- case 0:
481
- newDocs = parsedDocs.filter(function(d) {
482
- return addedSet.has(d.relPath);
483
- });
484
- updateDocs = parsedDocs.filter(function(d) {
485
- return !addedSet.has(d.relPath);
486
- });
487
- return [
488
- 4,
489
- (0, _sharedts.appendRows)(conn, 'frontmatter', writableColumns, insertSql, newDocs.map(toRow))
490
- ];
491
- case 1:
492
- _state.sent();
493
- if (!(updateDocs.length > 0)) return [
494
- 3,
495
- 3
496
- ];
497
- return [
498
- 4,
499
- conn.runBatch(insertSql, updateDocs.map(toRow))
500
- ];
501
- case 2:
502
- _state.sent();
503
- _state.label = 3;
504
- case 3:
505
- return [
506
- 2
507
- ];
508
- }
509
- });
510
- })();
511
- })
512
- ];
513
- case 6:
514
- _state.sent();
515
- _state.label = 7;
516
- case 7:
517
- // After the upsert, so every doc already has the frontmatter row sqlite's content rowid
518
- // couples to. ON CONFLICT DO UPDATE preserves that rowid, so a reparse keeps its identity.
519
- return [
520
- 4,
521
- stages.time('text-index', function() {
522
- return dialect.reconcileContent(conn, contentTouched, parsedDocs, delta, cfg);
523
- })
524
- ];
525
- case 8:
526
- _state.sent();
527
- if (!(contentTouched.length > 0)) return [
528
- 3,
529
- 10
530
- ];
531
- return [
532
- 4,
533
- conn.runBatch('DELETE FROM indexed_sources WHERE "path" = ?', contentTouched.map(function(p) {
534
- return [
535
- p
536
- ];
537
- }))
538
- ];
539
- case 9:
540
- _state.sent();
541
- _state.label = 10;
542
- case 10:
543
- return [
544
- 4,
545
- (0, _sharedts.appendRows)(conn, 'indexed_sources', [
546
- 'path',
547
- 'text'
548
- ], 'INSERT INTO indexed_sources ("path", text) VALUES (?, ?) ON CONFLICT("path") DO UPDATE SET text = excluded.text', parsedDocs.map(function(doc) {
549
- return [
550
- doc.relPath,
551
- doc.source
552
- ];
553
- }))
554
- ];
555
- case 11:
556
- _state.sent();
557
- // A preset edit forces a full rebuild, so an unchanged doc's coverage is already correct;
558
- // new docs have nothing to clear, which keeps cold builds linear.
559
- return [
560
- 4,
561
- stages.time('presets', function() {
562
- return _async_to_generator(function() {
563
- var presetRows, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator, _step, doc, _iterator1, _step1, presetName;
564
- return _ts_generator(this, function(_state) {
565
- switch(_state.label){
566
- case 0:
567
- if (!(touched.length > 0)) return [
568
- 3,
569
- 2
570
- ];
571
- return [
572
- 4,
573
- conn.runBatch('DELETE FROM preset_files WHERE "path" = ?', touched.map(function(p) {
574
- return [
575
- p
576
- ];
577
- }))
578
- ];
579
- case 1:
580
- _state.sent();
581
- _state.label = 2;
582
- case 2:
583
- presetRows = [];
584
- _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined, _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
585
- try {
586
- for(_iterator = parsedDocs[Symbol.iterator](); !(_iteratorNormalCompletion1 = (_step = _iterator.next()).done); _iteratorNormalCompletion1 = true){
587
- doc = _step.value;
588
- try {
589
- for(_iterator1 = doc.presets[Symbol.iterator](); !(_iteratorNormalCompletion = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion = true){
590
- presetName = _step1.value;
591
- presetRows.push([
592
- doc.relPath,
593
- presetName
594
- ]);
595
- }
596
- } catch (err) {
597
- _didIteratorError = true;
598
- _iteratorError = err;
599
- } finally{
450
+ if (!(missingColumns.length > 0)) return [
451
+ 3,
452
+ 3
453
+ ];
454
+ return [
455
+ 4,
456
+ stages.time('alter', function() {
457
+ return dialect.addColumns(conn, missingColumns);
458
+ })
459
+ ];
460
+ case 2:
461
+ _state.sent();
462
+ _state.label = 3;
463
+ case 3:
464
+ if (!(parsedDocs.length > 0)) return [
465
+ 3,
466
+ 5
467
+ ];
468
+ toRow = function toRow(doc) {
469
+ return writableColumns.map(function(col) {
470
+ var _doc_data_col;
471
+ if (col === 'path') return doc.relPath;
472
+ if (col === '_mtime') return doc.mtimeMs;
473
+ if (col === '_ctime') return doc.ctimeMs;
474
+ if (col === '_size') return doc.size;
475
+ if (col === '_parse_error') return doc.parseError;
476
+ return (_doc_data_col = doc.data[col]) !== null && _doc_data_col !== void 0 ? _doc_data_col : null;
477
+ });
478
+ };
479
+ return [
480
+ 4,
481
+ stages.time('fm-upsert', function() {
482
+ return _async_to_generator(function() {
483
+ var newDocs, updateDocs, rows;
484
+ return _ts_generator(this, function(_state) {
485
+ switch(_state.label){
486
+ case 0:
487
+ newDocs = parsedDocs.filter(function(d) {
488
+ return addedSet.has(d.relPath);
489
+ });
490
+ updateDocs = parsedDocs.filter(function(d) {
491
+ return !addedSet.has(d.relPath);
492
+ });
493
+ return [
494
+ 4,
495
+ (0, _sharedts.appendRows)(conn, 'frontmatter', writableColumns, insertSql, newDocs.map(toRow))
496
+ ];
497
+ case 1:
498
+ _state.sent();
499
+ if (!(updateDocs.length > 0)) return [
500
+ 3,
501
+ 5
502
+ ];
503
+ rows = updateDocs.map(toRow);
504
+ if (!dialect.updateFrontmatter) return [
505
+ 3,
506
+ 3
507
+ ];
508
+ return [
509
+ 4,
510
+ dialect.updateFrontmatter(conn, writableColumns, rows)
511
+ ];
512
+ case 2:
513
+ _state.sent();
514
+ return [
515
+ 3,
516
+ 5
517
+ ];
518
+ case 3:
519
+ return [
520
+ 4,
521
+ conn.runBatch(insertSql, rows)
522
+ ];
523
+ case 4:
524
+ _state.sent();
525
+ _state.label = 5;
526
+ case 5:
527
+ return [
528
+ 2
529
+ ];
530
+ }
531
+ });
532
+ })();
533
+ })
534
+ ];
535
+ case 4:
536
+ _state.sent();
537
+ _state.label = 5;
538
+ case 5:
539
+ return [
540
+ 4,
541
+ stages.time('text-index', function() {
542
+ return dialect.reconcileContent(conn, touched, parsedDocs, delta, cfg);
543
+ })
544
+ ];
545
+ case 6:
546
+ _state.sent();
547
+ if (!(touched.length > 0)) return [
548
+ 3,
549
+ 8
550
+ ];
551
+ return [
552
+ 4,
553
+ conn.runBatch('DELETE FROM indexed_sources WHERE "path" = ?', touched.map(function(p) {
554
+ return [
555
+ p
556
+ ];
557
+ }))
558
+ ];
559
+ case 7:
560
+ _state.sent();
561
+ _state.label = 8;
562
+ case 8:
563
+ return [
564
+ 4,
565
+ (0, _sharedts.appendRows)(conn, 'indexed_sources', [
566
+ 'path',
567
+ 'text'
568
+ ], 'INSERT INTO indexed_sources ("path", text) VALUES (?, ?) ON CONFLICT("path") DO UPDATE SET text = excluded.text', parsedDocs.map(function(doc) {
569
+ return [
570
+ doc.relPath,
571
+ doc.source
572
+ ];
573
+ }))
574
+ ];
575
+ case 9:
576
+ _state.sent();
577
+ return [
578
+ 4,
579
+ stages.time('presets', function() {
580
+ return _async_to_generator(function() {
581
+ var presetRows, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator, _step, doc, _iterator1, _step1, presetName;
582
+ return _ts_generator(this, function(_state) {
583
+ switch(_state.label){
584
+ case 0:
585
+ if (!(touched.length > 0)) return [
586
+ 3,
587
+ 2
588
+ ];
589
+ return [
590
+ 4,
591
+ conn.runBatch('DELETE FROM preset_files WHERE "path" = ?', touched.map(function(p) {
592
+ return [
593
+ p
594
+ ];
595
+ }))
596
+ ];
597
+ case 1:
598
+ _state.sent();
599
+ _state.label = 2;
600
+ case 2:
601
+ presetRows = [];
602
+ _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined, _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
603
+ try {
604
+ for(_iterator = parsedDocs[Symbol.iterator](); !(_iteratorNormalCompletion1 = (_step = _iterator.next()).done); _iteratorNormalCompletion1 = true){
605
+ doc = _step.value;
600
606
  try {
601
- if (!_iteratorNormalCompletion && _iterator1.return != null) {
602
- _iterator1.return();
607
+ for(_iterator1 = doc.presets[Symbol.iterator](); !(_iteratorNormalCompletion = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion = true){
608
+ presetName = _step1.value;
609
+ presetRows.push([
610
+ doc.relPath,
611
+ presetName
612
+ ]);
603
613
  }
614
+ } catch (err) {
615
+ _didIteratorError = true;
616
+ _iteratorError = err;
604
617
  } finally{
605
- if (_didIteratorError) {
606
- throw _iteratorError;
618
+ try {
619
+ if (!_iteratorNormalCompletion && _iterator1.return != null) {
620
+ _iterator1.return();
621
+ }
622
+ } finally{
623
+ if (_didIteratorError) {
624
+ throw _iteratorError;
625
+ }
607
626
  }
608
627
  }
609
628
  }
610
- }
611
- } catch (err) {
612
- _didIteratorError1 = true;
613
- _iteratorError1 = err;
614
- } finally{
615
- try {
616
- if (!_iteratorNormalCompletion1 && _iterator.return != null) {
617
- _iterator.return();
618
- }
629
+ } catch (err) {
630
+ _didIteratorError1 = true;
631
+ _iteratorError1 = err;
619
632
  } finally{
620
- if (_didIteratorError1) {
621
- throw _iteratorError1;
633
+ try {
634
+ if (!_iteratorNormalCompletion1 && _iterator.return != null) {
635
+ _iterator.return();
636
+ }
637
+ } finally{
638
+ if (_didIteratorError1) {
639
+ throw _iteratorError1;
640
+ }
622
641
  }
623
642
  }
624
- }
625
- // DO NOTHING, not a bare INSERT: the added/touched split above comes from a read taken
626
- // before this transaction's lock, so a path this process calls "added" can already have
627
- // its (path, preset) row committed by a concurrent reconcile -- the row would be identical either way.
628
- return [
629
- 4,
630
- (0, _sharedts.appendRows)(conn, 'preset_files', [
631
- 'path',
632
- 'preset'
633
- ], 'INSERT INTO preset_files ("path", preset) VALUES (?, ?) ON CONFLICT("path", preset) DO NOTHING', presetRows)
634
- ];
635
- case 3:
636
- _state.sent();
637
- return [
638
- 2
639
- ];
640
- }
641
- });
642
- })();
643
- })
644
- ];
645
- case 12:
646
- _state.sent();
647
- if (!(vanished.length > 0)) return [
648
- 3,
649
- 14
650
- ];
651
- return [
652
- 4,
653
- stages.time('vanished', function() {
654
- return conn.runBatch('DELETE FROM frontmatter WHERE "path" = ?', vanished.map(function(p) {
655
- return [
656
- p
657
- ];
658
- }));
659
- })
660
- ];
661
- case 13:
662
- _state.sent();
663
- _state.label = 14;
664
- case 14:
665
- _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
666
- if (!(touched.length > 0)) return [
667
- 3,
668
- 22
669
- ];
670
- _state.label = 15;
671
- case 15:
672
- _state.trys.push([
673
- 15,
674
- 20,
675
- 21,
676
- 22
677
- ]);
678
- _loop = function() {
679
- var feature;
680
- return _ts_generator(this, function(_state) {
681
- switch(_state.label){
682
- case 0:
683
- feature = _step.value;
684
- return [
685
- 4,
686
- stages.time((0, _stagests.featureStage)(feature.name, 'remove'), function() {
687
- var _feature_remove;
688
- return (_feature_remove = feature.remove) === null || _feature_remove === void 0 ? void 0 : _feature_remove.call(feature, conn, touched, delta);
689
- })
690
- ];
691
- case 1:
692
- _state.sent();
693
- return [
694
- 2
695
- ];
696
- }
697
- });
698
- };
699
- _iterator = features[Symbol.iterator]();
700
- _state.label = 16;
701
- case 16:
702
- if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
703
- 3,
704
- 19
705
- ];
706
- return [
707
- 5,
708
- _ts_values(_loop())
709
- ];
710
- case 17:
711
- _state.sent();
712
- _state.label = 18;
713
- case 18:
714
- _iteratorNormalCompletion = true;
715
- return [
716
- 3,
717
- 16
718
- ];
719
- case 19:
720
- return [
721
- 3,
722
- 22
723
- ];
724
- case 20:
725
- err = _state.sent();
726
- _didIteratorError = true;
727
- _iteratorError = err;
728
- return [
729
- 3,
730
- 22
731
- ];
732
- case 21:
733
- try {
734
- if (!_iteratorNormalCompletion && _iterator.return != null) {
735
- _iterator.return();
736
- }
737
- } finally{
738
- if (_didIteratorError) {
739
- throw _iteratorError;
740
- }
741
- }
742
- return [
743
- 7
744
- ];
745
- case 22:
746
- _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
747
- _state.label = 23;
748
- case 23:
749
- _state.trys.push([
750
- 23,
751
- 28,
752
- 29,
753
- 30
754
- ]);
755
- _loop1 = function() {
756
- var feature, docsForFeature;
757
- return _ts_generator(this, function(_state) {
758
- switch(_state.label){
759
- case 0:
760
- feature = _step1.value;
761
- docsForFeature = parsedDocs.map(function(doc) {
762
- return {
763
- path: doc.relPath,
764
- extracted: doc.extracted[feature.name]
765
- };
643
+ return [
644
+ 4,
645
+ (0, _sharedts.appendRows)(conn, 'preset_files', [
646
+ 'path',
647
+ 'preset'
648
+ ], 'INSERT INTO preset_files ("path", preset) VALUES (?, ?) ON CONFLICT("path", preset) DO NOTHING', presetRows)
649
+ ];
650
+ case 3:
651
+ _state.sent();
652
+ return [
653
+ 2
654
+ ];
655
+ }
766
656
  });
657
+ })();
658
+ })
659
+ ];
660
+ case 10:
661
+ _state.sent();
662
+ if (!(vanished.length > 0)) return [
663
+ 3,
664
+ 12
665
+ ];
666
+ return [
667
+ 4,
668
+ stages.time('vanished', function() {
669
+ return conn.runBatch('DELETE FROM frontmatter WHERE "path" = ?', vanished.map(function(p) {
767
670
  return [
768
- 4,
769
- stages.time((0, _stagests.featureStage)(feature.name, 'store'), function() {
770
- var _feature_store;
771
- return (_feature_store = feature.store) === null || _feature_store === void 0 ? void 0 : _feature_store.call(feature, conn, docsForFeature, delta);
772
- })
773
- ];
774
- case 1:
775
- _state.sent();
776
- return [
777
- 2
671
+ p
778
672
  ];
673
+ }));
674
+ })
675
+ ];
676
+ case 11:
677
+ _state.sent();
678
+ _state.label = 12;
679
+ case 12:
680
+ _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
681
+ if (!(touched.length > 0)) return [
682
+ 3,
683
+ 20
684
+ ];
685
+ _state.label = 13;
686
+ case 13:
687
+ _state.trys.push([
688
+ 13,
689
+ 18,
690
+ 19,
691
+ 20
692
+ ]);
693
+ _loop = function() {
694
+ var feature;
695
+ return _ts_generator(this, function(_state) {
696
+ switch(_state.label){
697
+ case 0:
698
+ feature = _step.value;
699
+ return [
700
+ 4,
701
+ stages.time((0, _stagests.featureStage)(feature.name, 'remove'), function() {
702
+ var _feature_remove;
703
+ return (_feature_remove = feature.remove) === null || _feature_remove === void 0 ? void 0 : _feature_remove.call(feature, conn, touched, delta);
704
+ })
705
+ ];
706
+ case 1:
707
+ _state.sent();
708
+ return [
709
+ 2
710
+ ];
711
+ }
712
+ });
713
+ };
714
+ _iterator = features[Symbol.iterator]();
715
+ _state.label = 14;
716
+ case 14:
717
+ if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
718
+ 3,
719
+ 17
720
+ ];
721
+ return [
722
+ 5,
723
+ _ts_values(_loop())
724
+ ];
725
+ case 15:
726
+ _state.sent();
727
+ _state.label = 16;
728
+ case 16:
729
+ _iteratorNormalCompletion = true;
730
+ return [
731
+ 3,
732
+ 14
733
+ ];
734
+ case 17:
735
+ return [
736
+ 3,
737
+ 20
738
+ ];
739
+ case 18:
740
+ err = _state.sent();
741
+ _didIteratorError = true;
742
+ _iteratorError = err;
743
+ return [
744
+ 3,
745
+ 20
746
+ ];
747
+ case 19:
748
+ try {
749
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
750
+ _iterator.return();
751
+ }
752
+ } finally{
753
+ if (_didIteratorError) {
754
+ throw _iteratorError;
779
755
  }
780
- });
781
- };
782
- _iterator1 = features[Symbol.iterator]();
783
- _state.label = 24;
784
- case 24:
785
- if (!!(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done)) return [
786
- 3,
787
- 27
788
- ];
789
- return [
790
- 5,
791
- _ts_values(_loop1())
792
- ];
793
- case 25:
794
- _state.sent();
795
- _state.label = 26;
796
- case 26:
797
- _iteratorNormalCompletion1 = true;
798
- return [
799
- 3,
800
- 24
801
- ];
802
- case 27:
803
- return [
804
- 3,
805
- 30
806
- ];
807
- case 28:
808
- err = _state.sent();
809
- _didIteratorError1 = true;
810
- _iteratorError1 = err;
811
- return [
812
- 3,
813
- 30
814
- ];
815
- case 29:
816
- try {
817
- if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
818
- _iterator1.return();
819
- }
820
- } finally{
821
- if (_didIteratorError1) {
822
- throw _iteratorError1;
823
756
  }
824
- }
825
- return [
826
- 7
827
- ];
828
- case 30:
829
- _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = undefined;
830
- _state.label = 31;
831
- case 31:
832
- _state.trys.push([
833
- 31,
834
- 36,
835
- 37,
836
- 38
837
- ]);
838
- _loop2 = function() {
839
- var feature;
840
- return _ts_generator(this, function(_state) {
841
- switch(_state.label){
842
- case 0:
843
- feature = _step2.value;
844
- return [
845
- 4,
846
- stages.time((0, _stagests.featureStage)(feature.name, 'after'), function() {
847
- var _feature_afterReconcile;
848
- return (_feature_afterReconcile = feature.afterReconcile) === null || _feature_afterReconcile === void 0 ? void 0 : _feature_afterReconcile.call(feature, conn, delta);
849
- })
850
- ];
851
- case 1:
852
- _state.sent();
853
- return [
854
- 2
855
- ];
757
+ return [
758
+ 7
759
+ ];
760
+ case 20:
761
+ _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
762
+ _state.label = 21;
763
+ case 21:
764
+ _state.trys.push([
765
+ 21,
766
+ 26,
767
+ 27,
768
+ 28
769
+ ]);
770
+ _loop1 = function() {
771
+ var feature, docsForFeature;
772
+ return _ts_generator(this, function(_state) {
773
+ switch(_state.label){
774
+ case 0:
775
+ feature = _step1.value;
776
+ docsForFeature = parsedDocs.map(function(doc) {
777
+ return {
778
+ path: doc.relPath,
779
+ extracted: doc.extracted[feature.name]
780
+ };
781
+ });
782
+ return [
783
+ 4,
784
+ stages.time((0, _stagests.featureStage)(feature.name, 'store'), function() {
785
+ var _feature_store;
786
+ return (_feature_store = feature.store) === null || _feature_store === void 0 ? void 0 : _feature_store.call(feature, conn, docsForFeature, delta);
787
+ })
788
+ ];
789
+ case 1:
790
+ _state.sent();
791
+ return [
792
+ 2
793
+ ];
794
+ }
795
+ });
796
+ };
797
+ _iterator1 = features[Symbol.iterator]();
798
+ _state.label = 22;
799
+ case 22:
800
+ if (!!(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done)) return [
801
+ 3,
802
+ 25
803
+ ];
804
+ return [
805
+ 5,
806
+ _ts_values(_loop1())
807
+ ];
808
+ case 23:
809
+ _state.sent();
810
+ _state.label = 24;
811
+ case 24:
812
+ _iteratorNormalCompletion1 = true;
813
+ return [
814
+ 3,
815
+ 22
816
+ ];
817
+ case 25:
818
+ return [
819
+ 3,
820
+ 28
821
+ ];
822
+ case 26:
823
+ err = _state.sent();
824
+ _didIteratorError1 = true;
825
+ _iteratorError1 = err;
826
+ return [
827
+ 3,
828
+ 28
829
+ ];
830
+ case 27:
831
+ try {
832
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
833
+ _iterator1.return();
834
+ }
835
+ } finally{
836
+ if (_didIteratorError1) {
837
+ throw _iteratorError1;
856
838
  }
857
- });
858
- };
859
- _iterator2 = features[Symbol.iterator]();
860
- _state.label = 32;
861
- case 32:
862
- if (!!(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done)) return [
863
- 3,
864
- 35
865
- ];
866
- return [
867
- 5,
868
- _ts_values(_loop2())
869
- ];
870
- case 33:
871
- _state.sent();
872
- _state.label = 34;
873
- case 34:
874
- _iteratorNormalCompletion2 = true;
875
- return [
876
- 3,
877
- 32
878
- ];
879
- case 35:
880
- return [
881
- 3,
882
- 38
883
- ];
884
- case 36:
885
- err = _state.sent();
886
- _didIteratorError2 = true;
887
- _iteratorError2 = err;
888
- return [
889
- 3,
890
- 38
891
- ];
892
- case 37:
893
- try {
894
- if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
895
- _iterator2.return();
896
839
  }
897
- } finally{
898
- if (_didIteratorError2) {
899
- throw _iteratorError2;
840
+ return [
841
+ 7
842
+ ];
843
+ case 28:
844
+ _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = undefined;
845
+ _state.label = 29;
846
+ case 29:
847
+ _state.trys.push([
848
+ 29,
849
+ 34,
850
+ 35,
851
+ 36
852
+ ]);
853
+ _loop2 = function() {
854
+ var feature;
855
+ return _ts_generator(this, function(_state) {
856
+ switch(_state.label){
857
+ case 0:
858
+ feature = _step2.value;
859
+ return [
860
+ 4,
861
+ stages.time((0, _stagests.featureStage)(feature.name, 'after'), function() {
862
+ var _feature_afterReconcile;
863
+ return (_feature_afterReconcile = feature.afterReconcile) === null || _feature_afterReconcile === void 0 ? void 0 : _feature_afterReconcile.call(feature, conn, delta);
864
+ })
865
+ ];
866
+ case 1:
867
+ _state.sent();
868
+ return [
869
+ 2
870
+ ];
871
+ }
872
+ });
873
+ };
874
+ _iterator2 = features[Symbol.iterator]();
875
+ _state.label = 30;
876
+ case 30:
877
+ if (!!(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done)) return [
878
+ 3,
879
+ 33
880
+ ];
881
+ return [
882
+ 5,
883
+ _ts_values(_loop2())
884
+ ];
885
+ case 31:
886
+ _state.sent();
887
+ _state.label = 32;
888
+ case 32:
889
+ _iteratorNormalCompletion2 = true;
890
+ return [
891
+ 3,
892
+ 30
893
+ ];
894
+ case 33:
895
+ return [
896
+ 3,
897
+ 36
898
+ ];
899
+ case 34:
900
+ err = _state.sent();
901
+ _didIteratorError2 = true;
902
+ _iteratorError2 = err;
903
+ return [
904
+ 3,
905
+ 36
906
+ ];
907
+ case 35:
908
+ try {
909
+ if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
910
+ _iterator2.return();
911
+ }
912
+ } finally{
913
+ if (_didIteratorError2) {
914
+ throw _iteratorError2;
915
+ }
900
916
  }
901
- }
902
- return [
903
- 7
904
- ];
905
- case 38:
906
- return [
907
- 2
908
- ];
909
- }
910
- });
911
- })();
917
+ return [
918
+ 7
919
+ ];
920
+ case 36:
921
+ return [
922
+ 2
923
+ ];
924
+ }
925
+ });
926
+ })();
927
+ },
928
+ finish: function finish(txMs) {
929
+ return stages.take(elapsed(), txMs, timing.workerParseMs);
930
+ },
931
+ record: function record(conn, txMs) {
932
+ return _async_to_generator(function() {
933
+ return _ts_generator(this, function(_state) {
934
+ switch(_state.label){
935
+ case 0:
936
+ (0, _lockwaitts.recordLockWaitMs)(configDir, txMs);
937
+ if (!dialect.recordDuration) return [
938
+ 3,
939
+ 2
940
+ ];
941
+ return [
942
+ 4,
943
+ stages.time('meta', function() {
944
+ var _dialect_recordDuration;
945
+ return (_dialect_recordDuration = dialect.recordDuration) === null || _dialect_recordDuration === void 0 ? void 0 : _dialect_recordDuration.call(dialect, conn, txMs);
946
+ })
947
+ ];
948
+ case 1:
949
+ _state.sent();
950
+ _state.label = 2;
951
+ case 2:
952
+ return [
953
+ 2
954
+ ];
955
+ }
956
+ });
957
+ })();
958
+ }
959
+ }
960
+ ];
961
+ }
962
+ });
963
+ })();
964
+ }
965
+ function reconcile(conn, cfg, paths, dialect, pool, forcedPaths) {
966
+ return _async_to_generator(function() {
967
+ var timing, snapshot, plan, txStart, txMs;
968
+ return _ts_generator(this, function(_state) {
969
+ switch(_state.label){
970
+ case 0:
971
+ timing = createReconcileTiming(cfg);
972
+ return [
973
+ 4,
974
+ (0, _transactionts.withTransaction)(conn, function() {
975
+ return readReconcileSnapshot(conn, timing);
976
+ })
977
+ ];
978
+ case 1:
979
+ snapshot = _state.sent();
980
+ return [
981
+ 4,
982
+ prepareReconcile(snapshot, cfg, paths, dialect, timing, pool, forcedPaths)
983
+ ];
984
+ case 2:
985
+ plan = _state.sent();
986
+ if (!plan.mutated) return [
987
+ 2,
988
+ {
989
+ parsed: plan.parsed,
990
+ warnings: plan.warnings,
991
+ stages: plan.finish(0)
992
+ }
993
+ ];
994
+ txStart = Date.now();
995
+ _state.label = 3;
996
+ case 3:
997
+ _state.trys.push([
998
+ 3,
999
+ ,
1000
+ 5,
1001
+ 6
1002
+ ]);
1003
+ return [
1004
+ 4,
1005
+ (0, _transactionts.withTransaction)(conn, function() {
1006
+ return plan.apply(conn);
912
1007
  }, dialect.beginMode())
913
1008
  ];
914
- case 5:
1009
+ case 4:
915
1010
  _state.sent();
916
- durationMs = Date.now() - txStart;
917
- // Every store, not just the ones with a PRAGMA to derive: connectUnlocked's lock-wait budget needs it too.
918
- (0, _lockwaitts.recordLockWaitMs)(configDir, durationMs);
919
- if (!dialect.recordDuration) return [
1011
+ return [
920
1012
  3,
1013
+ 6
1014
+ ];
1015
+ case 5:
1016
+ txMs = Date.now() - txStart;
1017
+ timing.txMs += txMs;
1018
+ return [
921
1019
  7
922
1020
  ];
1021
+ case 6:
923
1022
  return [
924
1023
  4,
925
- stages.time('meta', function() {
926
- var _dialect_recordDuration;
927
- return (_dialect_recordDuration = dialect.recordDuration) === null || _dialect_recordDuration === void 0 ? void 0 : _dialect_recordDuration.call(dialect, conn, durationMs);
928
- })
1024
+ plan.record(conn, txMs)
929
1025
  ];
930
- case 6:
931
- _state.sent();
932
- _state.label = 7;
933
1026
  case 7:
1027
+ _state.sent();
934
1028
  return [
935
1029
  2,
936
1030
  {
937
- parsed: parsedDocs.length,
938
- warnings: warnings,
939
- stages: stages.take(elapsed(), durationMs, workerParseMs)
1031
+ parsed: plan.parsed,
1032
+ warnings: plan.warnings,
1033
+ stages: plan.finish(timing.txMs)
940
1034
  }
941
1035
  ];
942
1036
  }