@cavelang/cli 0.34.0 → 0.36.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 (344) hide show
  1. package/README.md +225 -13
  2. package/dist/internal/act/action.js +2 -1
  3. package/dist/internal/act/action.js.map +1 -1
  4. package/dist/internal/act/declare.d.ts.map +1 -1
  5. package/dist/internal/act/declare.js +82 -53
  6. package/dist/internal/act/declare.js.map +1 -1
  7. package/dist/internal/act/engine.d.ts +4 -3
  8. package/dist/internal/act/engine.d.ts.map +1 -1
  9. package/dist/internal/act/engine.js +121 -32
  10. package/dist/internal/act/engine.js.map +1 -1
  11. package/dist/internal/automate/cancellation.d.ts +3 -0
  12. package/dist/internal/automate/cancellation.d.ts.map +1 -0
  13. package/dist/internal/automate/cancellation.js +38 -0
  14. package/dist/internal/automate/cancellation.js.map +1 -0
  15. package/dist/internal/automate/declare.d.ts.map +1 -1
  16. package/dist/internal/automate/declare.js +49 -24
  17. package/dist/internal/automate/declare.js.map +1 -1
  18. package/dist/internal/automate/engine.d.ts +7 -3
  19. package/dist/internal/automate/engine.d.ts.map +1 -1
  20. package/dist/internal/automate/engine.js +196 -93
  21. package/dist/internal/automate/engine.js.map +1 -1
  22. package/dist/internal/automate/error-message.d.ts +3 -0
  23. package/dist/internal/automate/error-message.d.ts.map +1 -0
  24. package/dist/internal/automate/error-message.js +10 -0
  25. package/dist/internal/automate/error-message.js.map +1 -0
  26. package/dist/internal/automate/main.d.ts.map +1 -1
  27. package/dist/internal/automate/main.js +240 -35
  28. package/dist/internal/automate/main.js.map +1 -1
  29. package/dist/internal/automate/options.d.ts +4 -0
  30. package/dist/internal/automate/options.d.ts.map +1 -0
  31. package/dist/internal/automate/options.js +19 -0
  32. package/dist/internal/automate/options.js.map +1 -0
  33. package/dist/internal/connect/declared.d.ts +204 -0
  34. package/dist/internal/connect/declared.d.ts.map +1 -0
  35. package/dist/internal/connect/declared.js +610 -0
  36. package/dist/internal/connect/declared.js.map +1 -0
  37. package/dist/internal/connect/error-message.d.ts +3 -0
  38. package/dist/internal/connect/error-message.d.ts.map +1 -0
  39. package/dist/internal/connect/error-message.js +10 -0
  40. package/dist/internal/connect/error-message.js.map +1 -0
  41. package/dist/internal/connect/federation.d.ts +9 -0
  42. package/dist/internal/connect/federation.d.ts.map +1 -0
  43. package/dist/internal/connect/federation.js +19 -0
  44. package/dist/internal/connect/federation.js.map +1 -0
  45. package/dist/internal/connect/fetch-failure.d.ts +3 -0
  46. package/dist/internal/connect/fetch-failure.d.ts.map +1 -0
  47. package/dist/internal/connect/fetch-failure.js +36 -0
  48. package/dist/internal/connect/fetch-failure.js.map +1 -0
  49. package/dist/internal/connect/index.d.ts +4 -2
  50. package/dist/internal/connect/index.d.ts.map +1 -1
  51. package/dist/internal/connect/index.js +3 -1
  52. package/dist/internal/connect/index.js.map +1 -1
  53. package/dist/internal/connect/main.d.ts +1 -0
  54. package/dist/internal/connect/main.d.ts.map +1 -1
  55. package/dist/internal/connect/main.js +575 -59
  56. package/dist/internal/connect/main.js.map +1 -1
  57. package/dist/internal/connect/options.d.ts +3 -0
  58. package/dist/internal/connect/options.d.ts.map +1 -0
  59. package/dist/internal/connect/options.js +9 -0
  60. package/dist/internal/connect/options.js.map +1 -0
  61. package/dist/internal/connect/records.d.ts +3 -0
  62. package/dist/internal/connect/records.d.ts.map +1 -0
  63. package/dist/internal/connect/records.js +21 -0
  64. package/dist/internal/connect/records.js.map +1 -0
  65. package/dist/internal/connect/run.d.ts +48 -19
  66. package/dist/internal/connect/run.d.ts.map +1 -1
  67. package/dist/internal/connect/run.js +185 -77
  68. package/dist/internal/connect/run.js.map +1 -1
  69. package/dist/internal/connect/source.d.ts +36 -3
  70. package/dist/internal/connect/source.d.ts.map +1 -1
  71. package/dist/internal/connect/source.js +378 -39
  72. package/dist/internal/connect/source.js.map +1 -1
  73. package/dist/internal/connect/template.d.ts +20 -2
  74. package/dist/internal/connect/template.d.ts.map +1 -1
  75. package/dist/internal/connect/template.js +53 -9
  76. package/dist/internal/connect/template.js.map +1 -1
  77. package/dist/internal/connect/utf8.d.ts +3 -0
  78. package/dist/internal/connect/utf8.d.ts.map +1 -0
  79. package/dist/internal/connect/utf8.js +12 -0
  80. package/dist/internal/connect/utf8.js.map +1 -0
  81. package/dist/internal/eval/cleanup.d.ts +5 -0
  82. package/dist/internal/eval/cleanup.d.ts.map +1 -0
  83. package/dist/internal/eval/cleanup.js +50 -0
  84. package/dist/internal/eval/cleanup.js.map +1 -0
  85. package/dist/internal/eval/error-message.d.ts +3 -0
  86. package/dist/internal/eval/error-message.d.ts.map +1 -0
  87. package/dist/internal/eval/error-message.js +10 -0
  88. package/dist/internal/eval/error-message.js.map +1 -0
  89. package/dist/internal/eval/judge.d.ts.map +1 -1
  90. package/dist/internal/eval/judge.js +3 -31
  91. package/dist/internal/eval/judge.js.map +1 -1
  92. package/dist/internal/eval/loop.d.ts.map +1 -1
  93. package/dist/internal/eval/loop.js +18 -4
  94. package/dist/internal/eval/loop.js.map +1 -1
  95. package/dist/internal/eval/main.d.ts.map +1 -1
  96. package/dist/internal/eval/main.js +22 -10
  97. package/dist/internal/eval/main.js.map +1 -1
  98. package/dist/internal/eval/options.d.ts +6 -0
  99. package/dist/internal/eval/options.d.ts.map +1 -0
  100. package/dist/internal/eval/options.js +31 -0
  101. package/dist/internal/eval/options.js.map +1 -0
  102. package/dist/internal/eval/queries.d.ts.map +1 -1
  103. package/dist/internal/eval/queries.js +9 -6
  104. package/dist/internal/eval/queries.js.map +1 -1
  105. package/dist/internal/eval/run.d.ts.map +1 -1
  106. package/dist/internal/eval/run.js +112 -24
  107. package/dist/internal/eval/run.js.map +1 -1
  108. package/dist/internal/eval/score.d.ts.map +1 -1
  109. package/dist/internal/eval/score.js +9 -2
  110. package/dist/internal/eval/score.js.map +1 -1
  111. package/dist/internal/eval/suite.d.ts.map +1 -1
  112. package/dist/internal/eval/suite.js +14 -2
  113. package/dist/internal/eval/suite.js.map +1 -1
  114. package/dist/internal/ingest/cleanup.d.ts +5 -0
  115. package/dist/internal/ingest/cleanup.d.ts.map +1 -0
  116. package/dist/internal/ingest/cleanup.js +50 -0
  117. package/dist/internal/ingest/cleanup.js.map +1 -0
  118. package/dist/internal/ingest/content.d.ts +6 -0
  119. package/dist/internal/ingest/content.d.ts.map +1 -0
  120. package/dist/internal/ingest/content.js +25 -0
  121. package/dist/internal/ingest/content.js.map +1 -0
  122. package/dist/internal/ingest/context.d.ts.map +1 -1
  123. package/dist/internal/ingest/context.js +25 -7
  124. package/dist/internal/ingest/context.js.map +1 -1
  125. package/dist/internal/ingest/error-message.d.ts +3 -0
  126. package/dist/internal/ingest/error-message.d.ts.map +1 -0
  127. package/dist/internal/ingest/error-message.js +10 -0
  128. package/dist/internal/ingest/error-message.js.map +1 -0
  129. package/dist/internal/ingest/files.d.ts +4 -12
  130. package/dist/internal/ingest/files.d.ts.map +1 -1
  131. package/dist/internal/ingest/files.js +22 -10
  132. package/dist/internal/ingest/files.js.map +1 -1
  133. package/dist/internal/ingest/main.d.ts.map +1 -1
  134. package/dist/internal/ingest/main.js +48 -17
  135. package/dist/internal/ingest/main.js.map +1 -1
  136. package/dist/internal/ingest/options.d.ts +6 -0
  137. package/dist/internal/ingest/options.d.ts.map +1 -0
  138. package/dist/internal/ingest/options.js +27 -0
  139. package/dist/internal/ingest/options.js.map +1 -0
  140. package/dist/internal/ingest/prompt.d.ts.map +1 -1
  141. package/dist/internal/ingest/prompt.js +14 -10
  142. package/dist/internal/ingest/prompt.js.map +1 -1
  143. package/dist/internal/ingest/run.d.ts +9 -2
  144. package/dist/internal/ingest/run.d.ts.map +1 -1
  145. package/dist/internal/ingest/run.js +206 -62
  146. package/dist/internal/ingest/run.js.map +1 -1
  147. package/dist/internal/ingest/timeout.d.ts +3 -0
  148. package/dist/internal/ingest/timeout.d.ts.map +1 -0
  149. package/dist/internal/ingest/timeout.js +14 -0
  150. package/dist/internal/ingest/timeout.js.map +1 -0
  151. package/dist/internal/ingest/web.d.ts +2 -11
  152. package/dist/internal/ingest/web.d.ts.map +1 -1
  153. package/dist/internal/ingest/web.js +131 -25
  154. package/dist/internal/ingest/web.js.map +1 -1
  155. package/dist/internal/loop/budgets.d.ts +3 -0
  156. package/dist/internal/loop/budgets.d.ts.map +1 -0
  157. package/dist/internal/loop/budgets.js +10 -0
  158. package/dist/internal/loop/budgets.js.map +1 -0
  159. package/dist/internal/loop/index.d.ts +2 -0
  160. package/dist/internal/loop/index.d.ts.map +1 -1
  161. package/dist/internal/loop/index.js +2 -0
  162. package/dist/internal/loop/index.js.map +1 -1
  163. package/dist/internal/loop/json-answer.d.ts +7 -0
  164. package/dist/internal/loop/json-answer.d.ts.map +1 -0
  165. package/dist/internal/loop/json-answer.js +79 -0
  166. package/dist/internal/loop/json-answer.js.map +1 -0
  167. package/dist/internal/loop/json-spans.d.ts +3 -0
  168. package/dist/internal/loop/json-spans.d.ts.map +1 -0
  169. package/dist/internal/loop/json-spans.js +88 -0
  170. package/dist/internal/loop/json-spans.js.map +1 -0
  171. package/dist/internal/loop/llm.d.ts +3 -2
  172. package/dist/internal/loop/llm.d.ts.map +1 -1
  173. package/dist/internal/loop/llm.js +115 -32
  174. package/dist/internal/loop/llm.js.map +1 -1
  175. package/dist/internal/loop/process.d.ts +3 -1
  176. package/dist/internal/loop/process.d.ts.map +1 -1
  177. package/dist/internal/loop/process.js +159 -59
  178. package/dist/internal/loop/process.js.map +1 -1
  179. package/dist/internal/loop/read-snapshot.d.ts +4 -0
  180. package/dist/internal/loop/read-snapshot.d.ts.map +1 -0
  181. package/dist/internal/loop/read-snapshot.js +29 -0
  182. package/dist/internal/loop/read-snapshot.js.map +1 -0
  183. package/dist/internal/loop/reconstruct.d.ts +6 -5
  184. package/dist/internal/loop/reconstruct.d.ts.map +1 -1
  185. package/dist/internal/loop/reconstruct.js +19 -8
  186. package/dist/internal/loop/reconstruct.js.map +1 -1
  187. package/dist/internal/loop/score-settings.d.ts +5 -0
  188. package/dist/internal/loop/score-settings.d.ts.map +1 -0
  189. package/dist/internal/loop/score-settings.js +14 -0
  190. package/dist/internal/loop/score-settings.js.map +1 -0
  191. package/dist/internal/loop/sqlite.d.ts.map +1 -1
  192. package/dist/internal/loop/sqlite.js +15 -7
  193. package/dist/internal/loop/sqlite.js.map +1 -1
  194. package/dist/internal/loop/store.d.ts.map +1 -1
  195. package/dist/internal/loop/store.js +11 -7
  196. package/dist/internal/loop/store.js.map +1 -1
  197. package/dist/internal/loop/timeout.d.ts +3 -0
  198. package/dist/internal/loop/timeout.d.ts.map +1 -0
  199. package/dist/internal/loop/timeout.js +13 -0
  200. package/dist/internal/loop/timeout.js.map +1 -0
  201. package/dist/internal/mcp/error-message.d.ts +3 -0
  202. package/dist/internal/mcp/error-message.d.ts.map +1 -0
  203. package/dist/internal/mcp/error-message.js +10 -0
  204. package/dist/internal/mcp/error-message.js.map +1 -0
  205. package/dist/internal/mcp/main.d.ts.map +1 -1
  206. package/dist/internal/mcp/main.js +44 -27
  207. package/dist/internal/mcp/main.js.map +1 -1
  208. package/dist/internal/mcp/read-snapshot.d.ts +4 -0
  209. package/dist/internal/mcp/read-snapshot.d.ts.map +1 -0
  210. package/dist/internal/mcp/read-snapshot.js +22 -0
  211. package/dist/internal/mcp/read-snapshot.js.map +1 -0
  212. package/dist/internal/mcp/server.d.ts.map +1 -1
  213. package/dist/internal/mcp/server.js +181 -21
  214. package/dist/internal/mcp/server.js.map +1 -1
  215. package/dist/internal/mcp/source.d.ts +3 -0
  216. package/dist/internal/mcp/source.d.ts.map +1 -0
  217. package/dist/internal/mcp/source.js +13 -0
  218. package/dist/internal/mcp/source.js.map +1 -0
  219. package/dist/internal/mcp/tools.d.ts.map +1 -1
  220. package/dist/internal/mcp/tools.js +135 -72
  221. package/dist/internal/mcp/tools.js.map +1 -1
  222. package/dist/internal/rules/declarations.d.ts +6 -0
  223. package/dist/internal/rules/declarations.d.ts.map +1 -0
  224. package/dist/internal/rules/declarations.js +14 -0
  225. package/dist/internal/rules/declarations.js.map +1 -0
  226. package/dist/internal/rules/declare.d.ts.map +1 -1
  227. package/dist/internal/rules/declare.js +30 -16
  228. package/dist/internal/rules/declare.js.map +1 -1
  229. package/dist/internal/rules/engine.d.ts +8 -7
  230. package/dist/internal/rules/engine.d.ts.map +1 -1
  231. package/dist/internal/rules/engine.js +150 -44
  232. package/dist/internal/rules/engine.js.map +1 -1
  233. package/dist/internal/rules/rule.d.ts.map +1 -1
  234. package/dist/internal/rules/rule.js +1 -22
  235. package/dist/internal/rules/rule.js.map +1 -1
  236. package/dist/internal/shape/alias-root.d.ts +3 -0
  237. package/dist/internal/shape/alias-root.d.ts.map +1 -0
  238. package/dist/internal/shape/alias-root.js +13 -0
  239. package/dist/internal/shape/alias-root.js.map +1 -0
  240. package/dist/internal/shape/check.d.ts +15 -3
  241. package/dist/internal/shape/check.d.ts.map +1 -1
  242. package/dist/internal/shape/check.js +230 -100
  243. package/dist/internal/shape/check.js.map +1 -1
  244. package/dist/internal/shape/client.d.ts.map +1 -1
  245. package/dist/internal/shape/client.js +42 -20
  246. package/dist/internal/shape/client.js.map +1 -1
  247. package/dist/internal/shape/constraints.d.ts +8 -0
  248. package/dist/internal/shape/constraints.d.ts.map +1 -0
  249. package/dist/internal/shape/constraints.js +17 -0
  250. package/dist/internal/shape/constraints.js.map +1 -0
  251. package/dist/internal/shape/edit-distance.d.ts +3 -0
  252. package/dist/internal/shape/edit-distance.d.ts.map +1 -0
  253. package/dist/internal/shape/edit-distance.js +33 -0
  254. package/dist/internal/shape/edit-distance.js.map +1 -0
  255. package/dist/internal/shape/gate.d.ts.map +1 -1
  256. package/dist/internal/shape/gate.js +0 -0
  257. package/dist/internal/shape/gate.js.map +1 -1
  258. package/dist/internal/shape/snapshot.d.ts +4 -0
  259. package/dist/internal/shape/snapshot.d.ts.map +1 -0
  260. package/dist/internal/shape/snapshot.js +20 -0
  261. package/dist/internal/shape/snapshot.js.map +1 -0
  262. package/dist/internal/shape/suggest.d.ts +8 -6
  263. package/dist/internal/shape/suggest.d.ts.map +1 -1
  264. package/dist/internal/shape/suggest.js +208 -92
  265. package/dist/internal/shape/suggest.js.map +1 -1
  266. package/dist/internal/sync/error-message.d.ts +3 -0
  267. package/dist/internal/sync/error-message.d.ts.map +1 -0
  268. package/dist/internal/sync/error-message.js +10 -0
  269. package/dist/internal/sync/error-message.js.map +1 -0
  270. package/dist/internal/sync/index.d.ts +3 -2
  271. package/dist/internal/sync/index.d.ts.map +1 -1
  272. package/dist/internal/sync/index.js +3 -2
  273. package/dist/internal/sync/index.js.map +1 -1
  274. package/dist/internal/sync/sync.d.ts +8 -5
  275. package/dist/internal/sync/sync.d.ts.map +1 -1
  276. package/dist/internal/sync/sync.js +322 -65
  277. package/dist/internal/sync/sync.js.map +1 -1
  278. package/dist/internal/view/api.d.ts +3 -1
  279. package/dist/internal/view/api.d.ts.map +1 -1
  280. package/dist/internal/view/api.js +154 -90
  281. package/dist/internal/view/api.js.map +1 -1
  282. package/dist/internal/view/error-message.d.ts +3 -0
  283. package/dist/internal/view/error-message.d.ts.map +1 -0
  284. package/dist/internal/view/error-message.js +10 -0
  285. package/dist/internal/view/error-message.js.map +1 -0
  286. package/dist/internal/view/main.d.ts.map +1 -1
  287. package/dist/internal/view/main.js +63 -9
  288. package/dist/internal/view/main.js.map +1 -1
  289. package/dist/internal/view/page.d.ts.map +1 -1
  290. package/dist/internal/view/page.js +119 -20
  291. package/dist/internal/view/page.js.map +1 -1
  292. package/dist/internal/view/report.d.ts.map +1 -1
  293. package/dist/internal/view/report.js +180 -145
  294. package/dist/internal/view/report.js.map +1 -1
  295. package/dist/internal/view/scope.d.ts +6 -2
  296. package/dist/internal/view/scope.d.ts.map +1 -1
  297. package/dist/internal/view/scope.js +107 -24
  298. package/dist/internal/view/scope.js.map +1 -1
  299. package/dist/internal/view/sensitivity.d.ts +4 -0
  300. package/dist/internal/view/sensitivity.d.ts.map +1 -0
  301. package/dist/internal/view/sensitivity.js +11 -0
  302. package/dist/internal/view/sensitivity.js.map +1 -0
  303. package/dist/internal/view/server.d.ts.map +1 -1
  304. package/dist/internal/view/server.js +57 -20
  305. package/dist/internal/view/server.js.map +1 -1
  306. package/dist/src/atomic-output.d.ts +3 -0
  307. package/dist/src/atomic-output.d.ts.map +1 -0
  308. package/dist/src/atomic-output.js +67 -0
  309. package/dist/src/atomic-output.js.map +1 -0
  310. package/dist/src/cli.d.ts +17 -2
  311. package/dist/src/cli.d.ts.map +1 -1
  312. package/dist/src/cli.js +333 -195
  313. package/dist/src/cli.js.map +1 -1
  314. package/dist/src/commands.d.ts +2 -2
  315. package/dist/src/commands.js +2 -2
  316. package/dist/src/commands.js.map +1 -1
  317. package/dist/src/dispatch.d.ts.map +1 -1
  318. package/dist/src/dispatch.js +10 -3
  319. package/dist/src/dispatch.js.map +1 -1
  320. package/dist/src/doctor.d.ts +1 -1
  321. package/dist/src/doctor.d.ts.map +1 -1
  322. package/dist/src/doctor.js +192 -91
  323. package/dist/src/doctor.js.map +1 -1
  324. package/dist/src/error-message.d.ts +3 -0
  325. package/dist/src/error-message.d.ts.map +1 -0
  326. package/dist/src/error-message.js +20 -0
  327. package/dist/src/error-message.js.map +1 -0
  328. package/dist/src/hooks-config.d.ts +3 -0
  329. package/dist/src/hooks-config.d.ts.map +1 -0
  330. package/dist/src/hooks-config.js +23 -0
  331. package/dist/src/hooks-config.js.map +1 -0
  332. package/dist/src/index.d.ts +1 -1
  333. package/dist/src/index.d.ts.map +1 -1
  334. package/dist/src/index.js +1 -1
  335. package/dist/src/index.js.map +1 -1
  336. package/package.json +23 -20
  337. package/src/atomic-output.ts +47 -0
  338. package/src/cli.ts +345 -171
  339. package/src/commands.ts +2 -2
  340. package/src/dispatch.ts +10 -3
  341. package/src/doctor.ts +207 -100
  342. package/src/error-message.ts +13 -0
  343. package/src/hooks-config.ts +22 -0
  344. package/src/index.ts +1 -1
@@ -0,0 +1,610 @@
1
+ import { booleanOption } from "./options.js";
2
+ /**
3
+ * Declared sources (spec §23.4) — a `cave connect` invocation persisted
4
+ * in-band as ordinary attribute claims on a `source/<name>` entity:
5
+ *
6
+ * ```cave
7
+ * source/people HAS path: people.csv
8
+ * source/people HAS map: people.map.cave
9
+ * source/people HAS key: id
10
+ * source/verbs HAS path: verbs.cave ; a .cave file needs no map
11
+ * ```
12
+ *
13
+ * The entity is the one §26.3 already uses for source policy, so
14
+ * `source/people HAS reliability: 80%` applies to what the source yields:
15
+ * declared sources stamp `@src:<name>/<key>` and keep their digests under
16
+ * `source/<name>/<key>` (`declaredNaming`), the stamp and the entity
17
+ * mirroring each other. Paths resolve against the store's directory — a
18
+ * store and its sources travel together — never the working directory.
19
+ *
20
+ * `assemble` follows every declared source of a store synchronously, which
21
+ * is what a CAVE text file used as `--db` needs (spec §13.7): the file and
22
+ * what it declares are one store. `cave connect` with no source runs the
23
+ * same declarations against a SQLite store, URLs included.
24
+ */
25
+ import { errorMessage } from "./error-message.js";
26
+ import { existsSync, mkdtempSync, rmSync } from 'node:fs';
27
+ import { readText } from "./utf8.js";
28
+ import { tmpdir } from 'node:os';
29
+ import { dirname, extname, join, resolve } from 'node:path';
30
+ import { LocateError, open } from '@cavelang/store';
31
+ import * as Source from "./source.js";
32
+ import * as Template from "./template.js";
33
+ import { bookkeepingKey, connect, currentDigestsUnder, currentRowsUnder, declaredNaming, digestOf, hasDigest, provenanceContext, retireRun } from "./run.js";
34
+ /** Entity prefix of source declarations and policy (spec §26.3). */
35
+ export const prefix = 'source/';
36
+ /** The declaration attributes, one per `cave connect` option. */
37
+ export const attributes = ['path', 'map', 'key', 'format', 'delimiter', 'table', 'sql', 'records'];
38
+ const isAttribute = (name) => attributes.includes(name);
39
+ /**
40
+ * The current, positive `source/…` attribute rows — declarations, policy,
41
+ * and bookkeeping — read with one indexed range query rather than a scan
42
+ * of every belief, since discovery reads them after every source.
43
+ */
44
+ const sourceRows = (store) => currentRowsUnder(store, prefix).filter(row => row.verb === 'HAS' && row.conf > 0 && row.negated === 0);
45
+ /**
46
+ * A stored attribute value as declared: the store keeps a literal's
47
+ * delimiters (`"SELECT …"`, `` `?name IS person, …` ``), and a path, a
48
+ * query, or an inline mapping is the text inside them.
49
+ */
50
+ export const unwrap = (value) => (value.startsWith('"') && value.endsWith('"') && value.length >= 2) ||
51
+ (value.startsWith('`') && value.endsWith('`') && value.length >= 2) ?
52
+ value.slice(1, -1) :
53
+ value;
54
+ /** Every `source/<name>` attribute claim current in the store, grouped by source — complete or not. */
55
+ export const deltasOf = (store) => {
56
+ // Several belief series may speak about one attribute (the root file
57
+ // and a followed source stamp differently): the newest current claim
58
+ // wins among surviving positive claims. A retraction removes only its
59
+ // own series and can expose another source's older declaration again.
60
+ const byName = new Map();
61
+ for (const row of sourceRows(store)) {
62
+ if (row.attribute === null || row.value_text === null || !isAttribute(row.attribute)) {
63
+ continue;
64
+ }
65
+ const name = row.subject.slice(prefix.length);
66
+ if (name === '') {
67
+ continue;
68
+ }
69
+ const fields = byName.get(name) ?? {};
70
+ const seen = fields[row.attribute];
71
+ if (seen === undefined || seen.tx < row.tx) {
72
+ fields[row.attribute] = { value: unwrap(row.value_text), tx: row.tx };
73
+ }
74
+ byName.set(name, fields);
75
+ }
76
+ return [...byName]
77
+ .map(([name, fields]) => ({
78
+ name,
79
+ fields: Object.fromEntries(Object.entries(fields).map(([attribute, entry]) => [attribute, entry.value]))
80
+ }))
81
+ .sort((a, b) => a.name.localeCompare(b.name));
82
+ };
83
+ /** A delta applied over a known declaration; a source without a `path` is not declared. */
84
+ export const merge = (known, delta) => {
85
+ const fields = { ...known === undefined ? {} : known, ...delta.fields, name: delta.name };
86
+ return fields.path === undefined ? undefined : fields;
87
+ };
88
+ /**
89
+ * The store's declared sources: every `source/<name>` whose current belief
90
+ * carries a positive `path`, with the other declaration attributes that
91
+ * are current alongside it. Retracting a `path` (`… @ 0%`) removes that
92
+ * series; the source disappears only when no positive path series remains.
93
+ * Superseding the newest positive path moves it.
94
+ */
95
+ export const declaredSources = (store) => deltasOf(store).flatMap(delta => {
96
+ const declared = merge(undefined, delta);
97
+ return declared === undefined ? [] : [declared];
98
+ });
99
+ /**
100
+ * The sources a CAVE text declares, read without touching any store: the
101
+ * text is replayed into a scratch in-memory store. This is how an overlay
102
+ * or a dry run discovers what a followed `.cave` source declares in turn,
103
+ * before anything is appended.
104
+ */
105
+ export const declaredIn = (text) => declarationsIn(text).flatMap(delta => {
106
+ const declared = merge(undefined, delta);
107
+ return declared === undefined ? [] : [declared];
108
+ });
109
+ /**
110
+ * Every source declaration attribute a CAVE text carries, complete or
111
+ * partial: a followed `.cave` source may change just the map or key of a
112
+ * source the store already declares, and that delta must reach whatever
113
+ * reads declarations without appending (`discover`, `--name`).
114
+ */
115
+ export const declarationsIn = (text) => {
116
+ const scratch = open();
117
+ let result;
118
+ try {
119
+ scratch.ingest(text);
120
+ result = deltasOf(scratch);
121
+ }
122
+ catch (error) {
123
+ try {
124
+ scratch.close();
125
+ }
126
+ catch (closeError) {
127
+ const messages = [error, closeError].map(errorMessage);
128
+ throw new AggregateError([error, closeError], `declaration read failed: ${messages[0]}; scratch store close also failed: ${messages[1]}`, { cause: error });
129
+ }
130
+ throw error;
131
+ }
132
+ scratch.close();
133
+ return result;
134
+ };
135
+ /** Where a declared path points: URLs as they are, files against the store's directory. */
136
+ export const resolvePath = (path, dir) => Source.isUrl(path) ? path : resolve(dir, path);
137
+ /** A mapping-free CAVE text source: the file is its own template (all prelude). */
138
+ export const isCave = (declared) => declared.format === 'cave' || (declared.format === undefined && extname(declared.path).toLowerCase() === '.cave');
139
+ /**
140
+ * A value as a POSIX shell argument: bare when it is only word characters
141
+ * and path punctuation, otherwise double-quoted with the four characters
142
+ * a double-quoted shell word still interprets (`"`, `\\`, `$`, `` ` ``)
143
+ * escaped — so a listed invocation pastes back whatever the path or SQL
144
+ * carries.
145
+ */
146
+ const argument = (value) => /^[A-Za-z0-9_./:@%+=,-]+$/.test(value) ? value : `"${value.replace(/["\\$`]/g, char => `\\${char}`)}"`;
147
+ /** The declaration as the equivalent `cave connect` invocation, for listings. */
148
+ export const describe = (declared) => {
149
+ const parts = [argument(declared.path)];
150
+ for (const attribute of attributes) {
151
+ if (attribute === 'path')
152
+ continue;
153
+ const value = declared[attribute];
154
+ if (value !== undefined) {
155
+ parts.push(`--${attribute} ${argument(value)}`);
156
+ }
157
+ }
158
+ return `${declared.name}: ${parts.join(' ')}`;
159
+ };
160
+ /** The store directory a root path implies: the file's directory, or the working directory for `:memory:`. */
161
+ export const directoryOf = (root) => root === ':memory:' || root === '' ? process.cwd() : dirname(resolve(root));
162
+ const sourceOptions = (declared, fetchImpl, signal) => ({
163
+ ...declared.format === undefined || declared.format === 'cave' ? {} : { format: declared.format },
164
+ ...declared.delimiter === undefined ? {} : { delimiter: declared.delimiter },
165
+ ...declared.table === undefined ? {} : { table: declared.table },
166
+ ...declared.sql === undefined ? {} : { sql: declared.sql },
167
+ ...declared.records === undefined ? {} : { records: declared.records },
168
+ ...fetchImpl === undefined ? {} : { fetchImpl },
169
+ ...signal === undefined ? {} : { signal }
170
+ });
171
+ /** The declaration's content, for change detection between passes of one run. */
172
+ export const signature = (declared) => JSON.stringify(attributes.map(attribute => declared[attribute] ?? null));
173
+ /** Bookkeeping attribute recording which declaration a source was last run under. */
174
+ export const declarationAttribute = 'connect-declaration';
175
+ /** Digest of a declaration — what a run records, and what `followed` compares. */
176
+ export const declarationDigest = (declared) => digestOf(signature(declared));
177
+ /**
178
+ * @returns `true` when the store followed the source under exactly this
179
+ * declaration: every run records the declaration's digest on the source
180
+ * entity (`source/<name> HAS connect-declaration: …`), so a source
181
+ * re-declared since — a local file that became a URL, say — is not
182
+ * followed, whatever digests its earlier version left behind.
183
+ */
184
+ export const followed = (store, declared) => recordedDeclaration(store, declared.name) === declarationDigest(declared);
185
+ /** A selection and everything it owns, transitively — what a named watch must watch. */
186
+ export const closure = (store, names) => {
187
+ const owners = ownership(store);
188
+ const selected = new Set(names);
189
+ const queue = [...selected];
190
+ for (let at = 0; at < queue.length; at++) {
191
+ const owner = queue[at];
192
+ for (const name of owners.get(owner) ?? []) {
193
+ if (!selected.has(name)) {
194
+ selected.add(name);
195
+ queue.push(name);
196
+ }
197
+ }
198
+ }
199
+ return declaredSources(store).filter(declared => selected.has(declared.name));
200
+ };
201
+ const validate = (declared) => {
202
+ if (declared.name.includes('/')) {
203
+ // `source/team/admin` is also record `admin` of source `team`: the
204
+ // digest entity and the stamp would collide (spec §23.4).
205
+ throw new Error(`source names are one path segment — source/${declared.name} would collide with record ${JSON.stringify(declared.name.split('/').slice(1).join('/'))} of source/${declared.name.split('/')[0]}`);
206
+ }
207
+ if (declared.format !== undefined && declared.format !== 'cave' && !Source.formats.includes(declared.format)) {
208
+ throw new Error(`unknown format ${JSON.stringify(declared.format)} — one of ${[...Source.formats, 'cave'].join(', ')}`);
209
+ }
210
+ if (declared.delimiter !== undefined && declared.delimiter.length !== 1) {
211
+ throw new Error('delimiter must be a single character');
212
+ }
213
+ if (!isCave(declared) && declared.map === undefined) {
214
+ throw new Error('a map is required — declare `HAS map: <template.cave>` (a .cave source needs none)');
215
+ }
216
+ };
217
+ const parseTemplate = (text, label) => {
218
+ const { mapping, problems } = Template.parse(text);
219
+ if (mapping === undefined) {
220
+ throw new Error(`${label}:\n${problems.map(problem => ` ${problem}`).join('\n')}`);
221
+ }
222
+ return mapping;
223
+ };
224
+ const urlRefused = (source) => new Error(`${source}: URL sources are followed by cave connect, not when assembling a text store`);
225
+ const prepared = (declared, dir, mapping, loaded) => ({
226
+ declared,
227
+ mapping,
228
+ records: loaded?.records ?? [],
229
+ ...loaded?.spans === undefined ? {} : { spans: loaded.spans },
230
+ ...loaded === undefined ? {} : { source: declared.path },
231
+ cave: loaded === undefined
232
+ });
233
+ const caveLabel = 'the .cave source does not parse';
234
+ /** The mapping template: the declared map file, or the `.cave` source itself. */
235
+ const mappingSync = (declared, dir) => {
236
+ validate(declared);
237
+ if (isCave(declared)) {
238
+ if (Source.isUrl(declared.path)) {
239
+ throw urlRefused(declared.path);
240
+ }
241
+ return { mapping: parseTemplate(readText(resolvePath(declared.path, dir)), caveLabel), cave: true };
242
+ }
243
+ // A file that exists is the mapping, whatever its name looks like; only
244
+ // otherwise is the text read as an inline template.
245
+ const mapPath = resolvePath(declared.map, dir);
246
+ return !existsSync(mapPath) && Template.isInline(declared.map) ?
247
+ { mapping: parseTemplate(Template.inlineDocument(declared.map), 'inline mapping'), cave: false } :
248
+ { mapping: parseTemplate(readText(mapPath), `mapping ${declared.map}`), cave: false };
249
+ };
250
+ const mappingAsync = async (declared, dir, fetchImpl, signal) => {
251
+ if (isCave(declared) && Source.isUrl(declared.path)) {
252
+ validate(declared);
253
+ const { text } = await Source.fetchText(declared.path, sourceOptions(declared, fetchImpl, signal));
254
+ return { mapping: parseTemplate(text, caveLabel), cave: true };
255
+ }
256
+ return mappingSync(declared, dir);
257
+ };
258
+ const captureDeclaration = (declared) => {
259
+ const { name, path, map, key, format, delimiter, table, sql, records } = declared;
260
+ return {
261
+ name, path,
262
+ ...map === undefined ? {} : { map },
263
+ ...key === undefined ? {} : { key },
264
+ ...format === undefined ? {} : { format },
265
+ ...delimiter === undefined ? {} : { delimiter },
266
+ ...table === undefined ? {} : { table },
267
+ ...sql === undefined ? {} : { sql },
268
+ ...records === undefined ? {} : { records }
269
+ };
270
+ };
271
+ /** Loads a declared source synchronously — local files only (`assemble`); a URL is refused. */
272
+ export const prepareSync = (declared, dir) => {
273
+ declared = captureDeclaration(declared);
274
+ if (Source.isUrl(declared.path)) {
275
+ throw urlRefused(declared.path);
276
+ }
277
+ const { mapping, cave } = mappingSync(declared, dir);
278
+ return prepared(declared, dir, mapping, cave ? undefined : Source.loadSync(resolvePath(declared.path, dir), sourceOptions(declared)));
279
+ };
280
+ /** Loads a declared source, URLs included — a `.cave` URL is fetched and parsed as the template (`cave connect`). */
281
+ export const prepare = async (declared, dir, fetchImpl, signal) => {
282
+ signal?.throwIfAborted();
283
+ declared = captureDeclaration(declared);
284
+ const { mapping, cave } = await mappingAsync(declared, dir, fetchImpl, signal);
285
+ signal?.throwIfAborted();
286
+ const loaded = cave ? undefined : await Source.load(resolvePath(declared.path, dir), sourceOptions(declared, fetchImpl, signal));
287
+ signal?.throwIfAborted();
288
+ return prepared(declared, dir, mapping, loaded);
289
+ };
290
+ /** How often one source may be re-declared within a pass before it is a cycle, not convergence. */
291
+ const redeclarationLimit = 20;
292
+ const noFixedPoint = (name) => `source/${name} keeps being re-declared — no fixed point after ${redeclarationLimit} re-declarations`;
293
+ /** Counts a source's declaration versions within one pass and refuses a cycle. */
294
+ export const versionCounter = () => {
295
+ const versions = new Map();
296
+ return name => {
297
+ const count = (versions.get(name) ?? 0) + 1;
298
+ versions.set(name, count);
299
+ if (count > redeclarationLimit) {
300
+ throw new Error(noFixedPoint(name));
301
+ }
302
+ };
303
+ };
304
+ /**
305
+ * Loads every declared source of the store without leaving anything in
306
+ * it, URLs included, and returns the exact sequence a pass would run —
307
+ * a source re-declared along the way appears again, later. Nothing is
308
+ * simulated: the sources run through the real pass against a private
309
+ * snapshot of the store, each exactly once as it is discovered, and the
310
+ * declarations are read from that copy as they stand after each run; so
311
+ * precedence, deltas, retractions, and what an unchanged source skips
312
+ * come out exactly as in the pass, and the real database holds no lock
313
+ * while sources load. `force` replays every text (the overlay applies
314
+ * everything it loads); `prune` retracts what vanished records declared.
315
+ */
316
+ export const discover = async (origin, root, options = {}) => (await discovery(origin, root, options)).sequence;
317
+ /**
318
+ * The declaration state an overlay depends on: the current row of every
319
+ * `source/…` claim key — effective declarations, shadowed series, partial
320
+ * deltas, bookkeeping, and the provenance ownership follows — keyed by
321
+ * claim key. Any change a writer makes to those inputs, even one that
322
+ * leaves every effective declaration and owner the same, changes it.
323
+ */
324
+ export const declarationState = (store) => new Map(currentRowsUnder(store, prefix).map(row => [row.claim_key, row.id]));
325
+ /** Compare keyed declaration signatures or claim-row identities without ignoring ownership changes. */
326
+ export const sameDeclarations = (a, b) => a.size === b.size && [...a].every(([name, signature]) => b.get(name) === signature);
327
+ /** How many times an overlay rediscovers when the declarations changed underneath it. */
328
+ export const overlayAttempts = 3;
329
+ export const staleOverlay = () => new Error(`the declared sources changed while the overlay loaded them, ${overlayAttempts} times over — retry when the store is quiet`);
330
+ /** `discover`, also returning the declarations the snapshot started from. */
331
+ export const discovery = async (origin, root, options = {}) => {
332
+ const signal = options.signal;
333
+ signal?.throwIfAborted();
334
+ options = {
335
+ signal,
336
+ fetchImpl: options.fetchImpl,
337
+ only: options.only,
338
+ force: options.force,
339
+ prune: options.prune,
340
+ skipFollowed: options.skipFollowed
341
+ };
342
+ for (const key of ['force', 'prune', 'skipFollowed'])
343
+ booleanOption(options[key], key);
344
+ const dir = directoryOf(root);
345
+ // Everything runs against a private snapshot of the store: the real
346
+ // database holds no lock while sources load (a URL may take a minute),
347
+ // and the copy is simply discarded. The baseline and the selection come
348
+ // from that same snapshot, so they agree with each other.
349
+ const { store, dispose } = snapshot(origin);
350
+ const errors = [];
351
+ try {
352
+ const baseline = declarationState(store);
353
+ const names = declaredSources(store).map(declared => declared.name);
354
+ if (options.only !== undefined && !names.includes(options.only)) {
355
+ throw new Error(`no declared source/${options.only}` +
356
+ (names.length === 0 ? ' — the store declares no sources' : ` — declared: ${names.join(', ')}`));
357
+ }
358
+ // The selection starts as the named source and everything it already
359
+ // owns, so a parent that fails to load does not hide its descendants.
360
+ const allowed = options.only === undefined ? undefined : new Set(closure(store, [options.only]).map(declared => declared.name));
361
+ const sequence = [];
362
+ const done = new Map();
363
+ const version = versionCounter();
364
+ let seen = signatures(declaredSources(store));
365
+ for (;;) {
366
+ const current = declaredSources(store);
367
+ // A selection grows by what the replayed sources changed — added,
368
+ // re-declared, or retracted declarations alike; what they own is
369
+ // added as each one runs, below.
370
+ if (allowed !== undefined) {
371
+ for (const name of changedNames(seen, signatures(current)))
372
+ allowed.add(name);
373
+ }
374
+ seen = signatures(current);
375
+ const next = current.find(declared => (allowed === undefined || allowed.has(declared.name)) && done.get(declared.name) !== signature(declared));
376
+ if (next === undefined) {
377
+ return { sequence, baseline };
378
+ }
379
+ version(next.name);
380
+ done.set(next.name, signature(next));
381
+ try {
382
+ // The name rule holds for every declaration, skipped ones included.
383
+ validate(next);
384
+ // Followed means followed under this very declaration: a version a
385
+ // replayed source produced, or one assembly replaced, is new. A source
386
+ // already loaded in this discovery is never skipped again — a
387
+ // declaration that went away and came back must run again, after the
388
+ // intervening version.
389
+ if (options.skipFollowed === true && !sequence.some(ready => ready.declared.name === next.name) && followed(store, next)) {
390
+ continue;
391
+ }
392
+ options.signal?.throwIfAborted();
393
+ const loaded = await prepare(next, dir, options.fetchImpl, options.signal);
394
+ options.signal?.throwIfAborted();
395
+ sequence.push(loaded);
396
+ run(store, loaded, { force: options.force === true, prune: options.prune === true });
397
+ if (allowed !== undefined) {
398
+ // Ownership only changes when a source runs: one pass for this one.
399
+ for (const name of ownedDeclarations(store, loaded.declared.name))
400
+ allowed.add(name);
401
+ }
402
+ }
403
+ catch (error) {
404
+ // Preserve cancellation identity, including combined transport failures.
405
+ if (options.signal?.aborted)
406
+ throw error;
407
+ throw new LocateError(`${prefix}${next.name} (${next.path}): ${errorMessage(error)}`, { cause: error });
408
+ }
409
+ }
410
+ }
411
+ catch (error) {
412
+ errors.push(error);
413
+ throw error;
414
+ }
415
+ finally {
416
+ dispose(errors);
417
+ }
418
+ };
419
+ /** Attempt every owned cleanup step, preserving failures in occurrence order. */
420
+ const cleanupSnapshot = (errors, steps) => {
421
+ for (const step of steps) {
422
+ try {
423
+ step();
424
+ }
425
+ catch (error) {
426
+ errors.push(error);
427
+ }
428
+ }
429
+ if (errors.length === 1)
430
+ throw errors[0];
431
+ if (errors.length > 1) {
432
+ throw new AggregateError(errors, `discovery snapshot failed: ${errors.map(errorMessage).join('; ')}`, { cause: errors[0] });
433
+ }
434
+ };
435
+ /** A private, disposable copy of a store — an exact snapshot in a temporary file, opened writable. */
436
+ const snapshot = (origin) => {
437
+ const capability = origin.adapter.capabilities.backup;
438
+ if (capability === undefined) {
439
+ throw new Error(`cave connect: SQLite adapter ${JSON.stringify(origin.adapter.name)} cannot snapshot a store for discovery`);
440
+ }
441
+ const dir = mkdtempSync(join(tmpdir(), 'cave-discover-'));
442
+ const path = join(dir, 'snapshot.db');
443
+ try {
444
+ capability.write(origin.db, path);
445
+ const store = open(path, { registry: origin.baseRegistry(), access: 'no-migrate' });
446
+ return {
447
+ store,
448
+ dispose: errors => cleanupSnapshot(errors, [
449
+ () => store.close(),
450
+ () => rmSync(dir, { recursive: true, force: true })
451
+ ])
452
+ };
453
+ }
454
+ catch (error) {
455
+ // Attempt removal even when creation failed, preserving both failures.
456
+ cleanupSnapshot([error], [() => rmSync(dir, { recursive: true, force: true })]);
457
+ throw error;
458
+ }
459
+ };
460
+ /**
461
+ * Names of the sources whose current declaration claims a followed source
462
+ * owns — appended under its run — so a selection keeps a source's
463
+ * descendants even when its run changed nothing.
464
+ */
465
+ export const ownedDeclarations = (store, owner) => [...ownership(store).get(owner) ?? []].sort();
466
+ /**
467
+ * Who owns which declarations, in one pass over the current declaration
468
+ * rows: the prelude runs as `<owner>`, a record as `<owner>/<key>`, so a
469
+ * mapping that emits declarations per record owns them through its
470
+ * records.
471
+ */
472
+ export const ownership = (store) => {
473
+ const owners = new Map();
474
+ for (const row of sourceRows(store)) {
475
+ if (row.attribute === null || !isAttribute(row.attribute)) {
476
+ continue;
477
+ }
478
+ for (const run of store.provenanceOf(row)?.runs ?? []) {
479
+ const owner = run.split('/')[0];
480
+ const owned = owners.get(owner) ?? new Set();
481
+ owned.add(row.subject.slice(prefix.length));
482
+ owners.set(owner, owned);
483
+ }
484
+ }
485
+ return owners;
486
+ };
487
+ /** Declaration signatures by name. */
488
+ export const signatures = (declared) => new Map(declared.map(entry => [entry.name, signature(entry)]));
489
+ /** Names whose declaration was added, changed, or removed between two snapshots. */
490
+ export const changedNames = (before, after) => [...new Set([...before.keys(), ...after.keys()])].filter(name => before.get(name) !== after.get(name));
491
+ /** The digest of the declaration a source was last run under, if any. */
492
+ export const recordedDeclaration = (store, name) => {
493
+ // The connector's own series, by exact claim key: an authored claim with
494
+ // the same attribute, or one a source emitted, is another series.
495
+ const row = store.currentBelief(bookkeepingKey(`${prefix}${name}`, declarationAttribute));
496
+ return row !== undefined && row.conf > 0 && row.negated === 0 ? row.value_text ?? undefined : undefined;
497
+ };
498
+ /** @returns `true` when any digest bookkeeping exists for the source — its prelude's or a record's — read by range, not by scanning history. */
499
+ const hasAnyDigest = (store, name) => {
500
+ const naming = declaredNaming(name);
501
+ return hasDigest(store, naming.unit()) || currentDigestsUnder(store, naming.recordPrefix).length > 0;
502
+ };
503
+ /**
504
+ * One pass of a prepared declared source under `declaredNaming` (spec
505
+ * §23.4), recording the declaration it ran under. A source whose
506
+ * declaration changed since its last run — another path, key, query, or
507
+ * record selector — prunes as it runs: records the new version does not
508
+ * produce are retired, since the per-record diff never visits them. A
509
+ * source that was followed without a recorded declaration (digests, no
510
+ * marker) is treated as changed, conservatively.
511
+ */
512
+ export const run = (store, ready, options = {}) => {
513
+ options = { force: booleanOption(options.force, 'force'), prune: booleanOption(options.prune, 'prune') };
514
+ // One transaction: a transition that retires the former unit and then
515
+ // fails to ingest its replacement (a prelude the registry refuses, say)
516
+ // rolls the retirement back, keeping the last good data.
517
+ return store.transaction(() => {
518
+ const previous = recordedDeclaration(store, ready.declared.name);
519
+ const transition = previous === undefined ?
520
+ hasAnyDigest(store, ready.declared.name) :
521
+ previous !== declarationDigest(ready.declared);
522
+ // A .cave source that became a record source: its prelude unit is no
523
+ // longer a lifecycle unit the pass would diff, so it is retired whole —
524
+ // and the pass below runs forced, since the old prelude digest would
525
+ // otherwise pass a same-text prelude off as unchanged.
526
+ const retired = transition && !ready.cave ? retireRun(store, declaredNaming(ready.declared.name).run()) : 0;
527
+ const passed = connect(store, ready.mapping, ready.records, {
528
+ name: ready.declared.name,
529
+ naming: declaredNaming(ready.declared.name),
530
+ // A .cave source is data that changes: claims it no longer yields retract.
531
+ preludeLifecycle: ready.cave,
532
+ ...ready.source === undefined ? {} : { source: ready.source },
533
+ ...ready.spans === undefined ? {} : { spans: ready.spans },
534
+ ...ready.declared.key === undefined ? {} : { key: ready.declared.key },
535
+ force: options.force === true || transition,
536
+ prune: options.prune === true || transition
537
+ });
538
+ const report = retired === 0 ? passed : { ...passed, retracted: passed.retracted + retired };
539
+ if (transition && report.failures.length > 0) {
540
+ // A new declaration can change record identity. Keeping only successful
541
+ // records would retire old data without a complete replacement and mark
542
+ // that incomplete transition as finished, preventing a faithful retry.
543
+ throw new Error(`cave connect: source/${ready.declared.name} replacement failed\n` +
544
+ report.failures.map(failure => `${failure.record}: ${failure.problems.join('; ')}`).join('\n'));
545
+ }
546
+ if (!followed(store, ready.declared)) {
547
+ store.ingest(`${prefix}${ready.declared.name} HAS ${declarationAttribute}: ${declarationDigest(ready.declared)} @${provenanceContext}`);
548
+ }
549
+ return report;
550
+ });
551
+ };
552
+ /**
553
+ * Follows every declared source of the store, the ones the followed
554
+ * sources declare in turn included, until none is left. `root` is the
555
+ * store's own file (or `:memory:`): paths resolve against its directory
556
+ * and the root file itself is never re-read as a source, so a file that
557
+ * declares itself, directly or through a cycle, is loaded exactly once —
558
+ * one file under several names, with different mappings say, is followed
559
+ * under each. URL sources are skipped, not errors: fetching cannot be
560
+ * synchronous, and `cave connect` follows them. Other failures are
561
+ * `LocateError`s — the store is incomplete without its sources, exactly
562
+ * as with a text file that does not parse.
563
+ */
564
+ export const assemble = (store, root, options = {}) => {
565
+ const force = booleanOption(options.force, 'force');
566
+ const dir = directoryOf(root);
567
+ const done = new Map();
568
+ const self = root === ':memory:' || root === '' ? undefined : resolve(root);
569
+ const assembled = [];
570
+ const version = versionCounter();
571
+ // Declarations are re-read after every followed source: a .cave source
572
+ // may declare a source the root does not, or re-declare one the root
573
+ // does (a newer path, say) — the current declaration is what runs, and a
574
+ // source whose declaration changed runs again, its earlier claims
575
+ // retracted by the ordinary diff-on-change.
576
+ for (;;) {
577
+ const next = declaredSources(store).find(declared => done.get(declared.name) !== signature(declared));
578
+ if (next === undefined) {
579
+ return assembled;
580
+ }
581
+ try {
582
+ version(next.name);
583
+ }
584
+ catch (error) {
585
+ throw new LocateError(errorMessage(error), { cause: error });
586
+ }
587
+ done.set(next.name, signature(next));
588
+ try {
589
+ // The name rule holds for every declaration, skipped ones included.
590
+ validate(next);
591
+ }
592
+ catch (error) {
593
+ throw new LocateError(`${prefix}${next.name} (${next.path}): ${errorMessage(error)}`, { cause: error });
594
+ }
595
+ if (Source.isUrl(next.path) || resolvePath(next.path, dir) === self) {
596
+ continue;
597
+ }
598
+ try {
599
+ const report = run(store, prepareSync(next, dir), { force });
600
+ if (report.failures.length > 0) {
601
+ throw new Error(report.failures.map(failure => `${failure.record}: ${failure.problems.join('; ')}`).join('\n'));
602
+ }
603
+ assembled.push({ declared: next, report });
604
+ }
605
+ catch (error) {
606
+ throw new LocateError(`${prefix}${next.name} (${next.path}): ${errorMessage(error)}`, { cause: error });
607
+ }
608
+ }
609
+ };
610
+ //# sourceMappingURL=declared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declared.js","sourceRoot":"","sources":["../../src/declared.ts"],"names":[],"mappings":"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"}