@nitpicker/archive 0.0.0-stage → 0.25.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 (737) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +105 -2
  3. package/lib/apply-connection-pragmas.d.ts +18 -0
  4. package/lib/apply-connection-pragmas.js +40 -0
  5. package/lib/archive-accessor.d.ts +265 -0
  6. package/lib/archive-accessor.js +477 -0
  7. package/lib/archive-lock.d.ts +45 -0
  8. package/lib/archive-lock.js +154 -0
  9. package/lib/archive.d.ts +736 -0
  10. package/lib/archive.js +1056 -0
  11. package/lib/body-hash/compute-body-hash.d.ts +32 -0
  12. package/lib/body-hash/compute-body-hash.js +35 -0
  13. package/lib/cache/clear-archive-cache-entry.d.ts +18 -0
  14. package/lib/cache/clear-archive-cache-entry.js +24 -0
  15. package/lib/cache/clear-archive-cache-root.d.ts +26 -0
  16. package/lib/cache/clear-archive-cache-root.js +32 -0
  17. package/lib/cache/compute-archive-cache-key.d.ts +39 -0
  18. package/lib/cache/compute-archive-cache-key.js +95 -0
  19. package/lib/cache/extract-archive-to-cache.d.ts +57 -0
  20. package/lib/cache/extract-archive-to-cache.js +326 -0
  21. package/lib/cache/get-archive-cache-root.d.ts +20 -0
  22. package/lib/cache/get-archive-cache-root.js +53 -0
  23. package/lib/cache/is-archive-cache-disabled.d.ts +24 -0
  24. package/lib/cache/is-archive-cache-disabled.js +34 -0
  25. package/lib/cache/list-archive-cache-entries.d.ts +23 -0
  26. package/lib/cache/list-archive-cache-entries.js +130 -0
  27. package/lib/cache/path-exists.d.ts +9 -0
  28. package/lib/cache/path-exists.js +18 -0
  29. package/lib/cache/resolve-archive-cache-dir.d.ts +26 -0
  30. package/lib/cache/resolve-archive-cache-dir.js +32 -0
  31. package/lib/cache/types.d.ts +33 -0
  32. package/lib/cache/types.js +1 -0
  33. package/lib/content-type/is-html-content-type.d.ts +17 -0
  34. package/lib/content-type/is-html-content-type.js +19 -0
  35. package/lib/content-type/normalize-content-type.d.ts +14 -0
  36. package/lib/content-type/normalize-content-type.js +20 -0
  37. package/lib/create-adjunct-tables.d.ts +66 -0
  38. package/lib/create-adjunct-tables.js +510 -0
  39. package/lib/create-entity-tables.d.ts +191 -0
  40. package/lib/create-entity-tables.js +387 -0
  41. package/lib/create-progress-reporter.d.ts +30 -0
  42. package/lib/create-progress-reporter.js +38 -0
  43. package/lib/create-ref-tables.d.ts +35 -0
  44. package/lib/create-ref-tables.js +185 -0
  45. package/lib/create-template-tables.d.ts +28 -0
  46. package/lib/create-template-tables.js +92 -0
  47. package/lib/database.d.ts +549 -0
  48. package/lib/database.js +804 -0
  49. package/lib/db-ops/_shared/clear-write-ref-caches.d.ts +27 -0
  50. package/lib/db-ops/_shared/clear-write-ref-caches.js +35 -0
  51. package/lib/db-ops/_shared/compress-payload.d.ts +26 -0
  52. package/lib/db-ops/_shared/compress-payload.js +30 -0
  53. package/lib/db-ops/_shared/create-write-ref-caches.d.ts +17 -0
  54. package/lib/db-ops/_shared/create-write-ref-caches.js +27 -0
  55. package/lib/db-ops/_shared/decode-json-ref.d.ts +17 -0
  56. package/lib/db-ops/_shared/decode-json-ref.js +31 -0
  57. package/lib/db-ops/_shared/keyset-paginate-by-id.d.ts +49 -0
  58. package/lib/db-ops/_shared/keyset-paginate-by-id.js +69 -0
  59. package/lib/db-ops/_shared/load-response-headers-by-set-ids.d.ts +20 -0
  60. package/lib/db-ops/_shared/load-response-headers-by-set-ids.js +53 -0
  61. package/lib/db-ops/_shared/resolve-content-item-id.d.ts +62 -0
  62. package/lib/db-ops/_shared/resolve-content-item-id.js +143 -0
  63. package/lib/db-ops/_shared/resolve-url-or-blob.d.ts +23 -0
  64. package/lib/db-ops/_shared/resolve-url-or-blob.js +29 -0
  65. package/lib/db-ops/_shared/retry-setting.d.ts +16 -0
  66. package/lib/db-ops/_shared/retry-setting.js +18 -0
  67. package/lib/db-ops/_shared/safe-parse-json.d.ts +11 -0
  68. package/lib/db-ops/_shared/safe-parse-json.js +18 -0
  69. package/lib/db-ops/_shared/types.d.ts +94 -0
  70. package/lib/db-ops/_shared/types.js +1 -0
  71. package/lib/db-ops/_shared/upsert-blob-ref.d.ts +25 -0
  72. package/lib/db-ops/_shared/upsert-blob-ref.js +48 -0
  73. package/lib/db-ops/_shared/upsert-content-type-ref.d.ts +30 -0
  74. package/lib/db-ops/_shared/upsert-content-type-ref.js +45 -0
  75. package/lib/db-ops/_shared/upsert-json-ref.d.ts +22 -0
  76. package/lib/db-ops/_shared/upsert-json-ref.js +41 -0
  77. package/lib/db-ops/_shared/upsert-response-headers.d.ts +35 -0
  78. package/lib/db-ops/_shared/upsert-response-headers.js +49 -0
  79. package/lib/db-ops/_shared/upsert-url-ref.d.ts +39 -0
  80. package/lib/db-ops/_shared/upsert-url-ref.js +62 -0
  81. package/lib/db-ops/anchors/get-anchors-on-page.d.ts +10 -0
  82. package/lib/db-ops/anchors/get-anchors-on-page.js +21 -0
  83. package/lib/db-ops/config/get-base-url.d.ts +8 -0
  84. package/lib/db-ops/config/get-base-url.js +14 -0
  85. package/lib/db-ops/config/get-config.d.ts +10 -0
  86. package/lib/db-ops/config/get-config.js +29 -0
  87. package/lib/db-ops/config/get-created-cwd.d.ts +11 -0
  88. package/lib/db-ops/config/get-created-cwd.js +13 -0
  89. package/lib/db-ops/config/get-name.d.ts +8 -0
  90. package/lib/db-ops/config/get-name.js +14 -0
  91. package/lib/db-ops/config/info-column-allowlist.d.ts +7 -0
  92. package/lib/db-ops/config/info-column-allowlist.js +29 -0
  93. package/lib/db-ops/config/info-json-columns.d.ts +5 -0
  94. package/lib/db-ops/config/info-json-columns.js +11 -0
  95. package/lib/db-ops/config/set-config.d.ts +12 -0
  96. package/lib/db-ops/config/set-config.js +21 -0
  97. package/lib/db-ops/config/update-config.d.ts +17 -0
  98. package/lib/db-ops/config/update-config.js +36 -0
  99. package/lib/db-ops/console-logs/compute-console-log-hash.d.ts +19 -0
  100. package/lib/db-ops/console-logs/compute-console-log-hash.js +30 -0
  101. package/lib/db-ops/console-logs/replace-console-logs.d.ts +34 -0
  102. package/lib/db-ops/console-logs/replace-console-logs.js +123 -0
  103. package/lib/db-ops/console-logs/stringify-console-log-args.d.ts +16 -0
  104. package/lib/db-ops/console-logs/stringify-console-log-args.js +26 -0
  105. package/lib/db-ops/console-logs/types.d.ts +38 -0
  106. package/lib/db-ops/console-logs/types.js +1 -0
  107. package/lib/db-ops/console-logs/upsert-console-log-item.d.ts +29 -0
  108. package/lib/db-ops/console-logs/upsert-console-log-item.js +52 -0
  109. package/lib/db-ops/dedupe-cap/accumulate-dedupe-cap-rejected-count.d.ts +18 -0
  110. package/lib/db-ops/dedupe-cap/accumulate-dedupe-cap-rejected-count.js +23 -0
  111. package/lib/db-ops/dedupe-cap/finalize-dedupe-cap-event.d.ts +12 -0
  112. package/lib/db-ops/dedupe-cap/finalize-dedupe-cap-event.js +15 -0
  113. package/lib/db-ops/dedupe-cap/insert-dedupe-cap-event.d.ts +14 -0
  114. package/lib/db-ops/dedupe-cap/insert-dedupe-cap-event.js +30 -0
  115. package/lib/db-ops/dedupe-cap/list-dedupe-cap-observations.d.ts +57 -0
  116. package/lib/db-ops/dedupe-cap/list-dedupe-cap-observations.js +87 -0
  117. package/lib/db-ops/dedupe-cap/list-dedupe-cap-shape-keys.d.ts +21 -0
  118. package/lib/db-ops/dedupe-cap/list-dedupe-cap-shape-keys.js +27 -0
  119. package/lib/db-ops/errors/insert-crawl-error.d.ts +15 -0
  120. package/lib/db-ops/errors/insert-crawl-error.js +21 -0
  121. package/lib/db-ops/errors/insert-page-error.d.ts +21 -0
  122. package/lib/db-ops/errors/insert-page-error.js +30 -0
  123. package/lib/db-ops/errors/list-dns-burned-host-candidates.d.ts +33 -0
  124. package/lib/db-ops/errors/list-dns-burned-host-candidates.js +158 -0
  125. package/lib/db-ops/html/read-page-html-blob.d.ts +17 -0
  126. package/lib/db-ops/html/read-page-html-blob.js +20 -0
  127. package/lib/db-ops/lifecycle/checkpoint.d.ts +8 -0
  128. package/lib/db-ops/lifecycle/checkpoint.js +9 -0
  129. package/lib/db-ops/lifecycle/destroy.d.ts +6 -0
  130. package/lib/db-ops/lifecycle/destroy.js +7 -0
  131. package/lib/db-ops/lifecycle/init.d.ts +58 -0
  132. package/lib/db-ops/lifecycle/init.js +122 -0
  133. package/lib/db-ops/list-reconcile/record-list-reconcile-run.d.ts +22 -0
  134. package/lib/db-ops/list-reconcile/record-list-reconcile-run.js +41 -0
  135. package/lib/db-ops/meta/get-audios-of-page.d.ts +11 -0
  136. package/lib/db-ops/meta/get-audios-of-page.js +15 -0
  137. package/lib/db-ops/meta/get-buttons-of-page.d.ts +11 -0
  138. package/lib/db-ops/meta/get-buttons-of-page.js +15 -0
  139. package/lib/db-ops/meta/get-canvases-of-page.d.ts +11 -0
  140. package/lib/db-ops/meta/get-canvases-of-page.js +15 -0
  141. package/lib/db-ops/meta/get-custom-elements-of-page.d.ts +11 -0
  142. package/lib/db-ops/meta/get-custom-elements-of-page.js +15 -0
  143. package/lib/db-ops/meta/get-headings-of-page.d.ts +11 -0
  144. package/lib/db-ops/meta/get-headings-of-page.js +15 -0
  145. package/lib/db-ops/meta/get-iframes-of-page.d.ts +11 -0
  146. package/lib/db-ops/meta/get-iframes-of-page.js +15 -0
  147. package/lib/db-ops/meta/get-jsonld-of-page.d.ts +13 -0
  148. package/lib/db-ops/meta/get-jsonld-of-page.js +27 -0
  149. package/lib/db-ops/meta/get-main-content-images-of-page.d.ts +11 -0
  150. package/lib/db-ops/meta/get-main-content-images-of-page.js +15 -0
  151. package/lib/db-ops/meta/get-main-content-tables-of-page.d.ts +11 -0
  152. package/lib/db-ops/meta/get-main-content-tables-of-page.js +15 -0
  153. package/lib/db-ops/meta/get-page-technologies-of-page.d.ts +11 -0
  154. package/lib/db-ops/meta/get-page-technologies-of-page.js +15 -0
  155. package/lib/db-ops/meta/get-technology-signals-of-page.d.ts +11 -0
  156. package/lib/db-ops/meta/get-technology-signals-of-page.js +15 -0
  157. package/lib/db-ops/meta/get-videos-of-page.d.ts +11 -0
  158. package/lib/db-ops/meta/get-videos-of-page.js +15 -0
  159. package/lib/db-ops/outages/close-network-outage.d.ts +12 -0
  160. package/lib/db-ops/outages/close-network-outage.js +15 -0
  161. package/lib/db-ops/outages/close-stale-open-network-outages.d.ts +26 -0
  162. package/lib/db-ops/outages/close-stale-open-network-outages.js +42 -0
  163. package/lib/db-ops/outages/compute-outage-clamp-timestamp.d.ts +26 -0
  164. package/lib/db-ops/outages/compute-outage-clamp-timestamp.js +31 -0
  165. package/lib/db-ops/outages/insert-network-outage.d.ts +14 -0
  166. package/lib/db-ops/outages/insert-network-outage.js +29 -0
  167. package/lib/db-ops/outages/list-network-outages.d.ts +28 -0
  168. package/lib/db-ops/outages/list-network-outages.js +42 -0
  169. package/lib/db-ops/pages/order/set-url-order.d.ts +13 -0
  170. package/lib/db-ops/pages/order/set-url-order.js +38 -0
  171. package/lib/db-ops/pages/read/build-page-query.d.ts +18 -0
  172. package/lib/db-ops/pages/read/build-page-query.js +40 -0
  173. package/lib/db-ops/pages/read/get-crawling-state.d.ts +117 -0
  174. package/lib/db-ops/pages/read/get-crawling-state.js +161 -0
  175. package/lib/db-ops/pages/read/get-existing-page-urls.d.ts +15 -0
  176. package/lib/db-ops/pages/read/get-existing-page-urls.js +30 -0
  177. package/lib/db-ops/pages/read/get-page-count.d.ts +12 -0
  178. package/lib/db-ops/pages/read/get-page-count.js +21 -0
  179. package/lib/db-ops/pages/read/get-page-source-by-url.d.ts +24 -0
  180. package/lib/db-ops/pages/read/get-page-source-by-url.js +28 -0
  181. package/lib/db-ops/pages/read/get-pages-with-rels.d.ts +38 -0
  182. package/lib/db-ops/pages/read/get-pages-with-rels.js +107 -0
  183. package/lib/db-ops/pages/read/get-pages.d.ts +11 -0
  184. package/lib/db-ops/pages/read/get-pages.js +51 -0
  185. package/lib/db-ops/pages/read/get-scraped-html-page-count.d.ts +18 -0
  186. package/lib/db-ops/pages/read/get-scraped-html-page-count.js +25 -0
  187. package/lib/db-ops/pages/read/reconstruct-page-rows.d.ts +31 -0
  188. package/lib/db-ops/pages/read/reconstruct-page-rows.js +32 -0
  189. package/lib/db-ops/pages/reset/clear-page-derived-rows.d.ts +20 -0
  190. package/lib/db-ops/pages/reset/clear-page-derived-rows.js +37 -0
  191. package/lib/db-ops/pages/reset/repromote-external-pages.d.ts +30 -0
  192. package/lib/db-ops/pages/reset/repromote-external-pages.js +91 -0
  193. package/lib/db-ops/pages/reset/reset-failed-pages.d.ts +88 -0
  194. package/lib/db-ops/pages/reset/reset-failed-pages.js +216 -0
  195. package/lib/db-ops/pages/reset/reset-pages-by-urls.d.ts +80 -0
  196. package/lib/db-ops/pages/reset/reset-pages-by-urls.js +151 -0
  197. package/lib/db-ops/pages/reset/retryable-image-scan-codes.d.ts +24 -0
  198. package/lib/db-ops/pages/reset/retryable-image-scan-codes.js +24 -0
  199. package/lib/db-ops/pages/write/insert-audios.d.ts +14 -0
  200. package/lib/db-ops/pages/write/insert-audios.js +25 -0
  201. package/lib/db-ops/pages/write/insert-buttons.d.ts +14 -0
  202. package/lib/db-ops/pages/write/insert-buttons.js +29 -0
  203. package/lib/db-ops/pages/write/insert-canvases.d.ts +14 -0
  204. package/lib/db-ops/pages/write/insert-canvases.js +26 -0
  205. package/lib/db-ops/pages/write/insert-custom-elements.d.ts +27 -0
  206. package/lib/db-ops/pages/write/insert-custom-elements.js +40 -0
  207. package/lib/db-ops/pages/write/insert-headings.d.ts +15 -0
  208. package/lib/db-ops/pages/write/insert-headings.js +27 -0
  209. package/lib/db-ops/pages/write/insert-iframes.d.ts +14 -0
  210. package/lib/db-ops/pages/write/insert-iframes.js +28 -0
  211. package/lib/db-ops/pages/write/insert-inventory-content-items.d.ts +38 -0
  212. package/lib/db-ops/pages/write/insert-inventory-content-items.js +60 -0
  213. package/lib/db-ops/pages/write/insert-inventory-seeds.d.ts +36 -0
  214. package/lib/db-ops/pages/write/insert-inventory-seeds.js +48 -0
  215. package/lib/db-ops/pages/write/insert-inventory-skipped-pages.d.ts +42 -0
  216. package/lib/db-ops/pages/write/insert-inventory-skipped-pages.js +56 -0
  217. package/lib/db-ops/pages/write/insert-jsonld.d.ts +17 -0
  218. package/lib/db-ops/pages/write/insert-jsonld.js +49 -0
  219. package/lib/db-ops/pages/write/insert-main-content-images.d.ts +20 -0
  220. package/lib/db-ops/pages/write/insert-main-content-images.js +32 -0
  221. package/lib/db-ops/pages/write/insert-main-content-tables.d.ts +14 -0
  222. package/lib/db-ops/pages/write/insert-main-content-tables.js +29 -0
  223. package/lib/db-ops/pages/write/insert-page.d.ts +56 -0
  224. package/lib/db-ops/pages/write/insert-page.js +259 -0
  225. package/lib/db-ops/pages/write/insert-technologies.d.ts +25 -0
  226. package/lib/db-ops/pages/write/insert-technologies.js +45 -0
  227. package/lib/db-ops/pages/write/insert-videos.d.ts +14 -0
  228. package/lib/db-ops/pages/write/insert-videos.js +28 -0
  229. package/lib/db-ops/pages/write/link-redirect-sources.d.ts +42 -0
  230. package/lib/db-ops/pages/write/link-redirect-sources.js +101 -0
  231. package/lib/db-ops/pages/write/record-redirect.d.ts +35 -0
  232. package/lib/db-ops/pages/write/record-redirect.js +100 -0
  233. package/lib/db-ops/pages/write/set-skipped-page.d.ts +13 -0
  234. package/lib/db-ops/pages/write/set-skipped-page.js +24 -0
  235. package/lib/db-ops/pages/write/update-page.d.ts +40 -0
  236. package/lib/db-ops/pages/write/update-page.js +419 -0
  237. package/lib/db-ops/pages/write/write-page-html-blob.d.ts +19 -0
  238. package/lib/db-ops/pages/write/write-page-html-blob.js +41 -0
  239. package/lib/db-ops/referrers/get-redirects-for-pages.d.ts +9 -0
  240. package/lib/db-ops/referrers/get-redirects-for-pages.js +15 -0
  241. package/lib/db-ops/referrers/get-referrers-of-page.d.ts +17 -0
  242. package/lib/db-ops/referrers/get-referrers-of-page.js +32 -0
  243. package/lib/db-ops/referrers/get-referrers-of-resource.d.ts +8 -0
  244. package/lib/db-ops/referrers/get-referrers-of-resource.js +15 -0
  245. package/lib/db-ops/resources/build-resource-query.d.ts +25 -0
  246. package/lib/db-ops/resources/build-resource-query.js +29 -0
  247. package/lib/db-ops/resources/get-existing-resource-urls.d.ts +9 -0
  248. package/lib/db-ops/resources/get-existing-resource-urls.js +24 -0
  249. package/lib/db-ops/resources/get-resource-by-url.d.ts +13 -0
  250. package/lib/db-ops/resources/get-resource-by-url.js +22 -0
  251. package/lib/db-ops/resources/get-resource-url-list.d.ts +17 -0
  252. package/lib/db-ops/resources/get-resource-url-list.js +26 -0
  253. package/lib/db-ops/resources/get-resources.d.ts +8 -0
  254. package/lib/db-ops/resources/get-resources.js +11 -0
  255. package/lib/db-ops/resources/insert-inventory-resources.d.ts +24 -0
  256. package/lib/db-ops/resources/insert-inventory-resources.js +64 -0
  257. package/lib/db-ops/resources/insert-resource-referrers.d.ts +15 -0
  258. package/lib/db-ops/resources/insert-resource-referrers.js +54 -0
  259. package/lib/db-ops/resources/insert-resource.d.ts +34 -0
  260. package/lib/db-ops/resources/insert-resource.js +73 -0
  261. package/lib/db-ops/resources/reconstruct-resource-rows.d.ts +26 -0
  262. package/lib/db-ops/resources/reconstruct-resource-rows.js +30 -0
  263. package/lib/db-ops/templates/assign-template-labels.d.ts +60 -0
  264. package/lib/db-ops/templates/assign-template-labels.js +187 -0
  265. package/lib/db-ops/templates/replace-page-templates.d.ts +44 -0
  266. package/lib/db-ops/templates/replace-page-templates.js +174 -0
  267. package/lib/db-ops/templates/serialize-template-cluster-reason.d.ts +16 -0
  268. package/lib/db-ops/templates/serialize-template-cluster-reason.js +17 -0
  269. package/lib/db-ops/templates/types.d.ts +103 -0
  270. package/lib/db-ops/templates/types.js +1 -0
  271. package/lib/debug.d.ts +8 -0
  272. package/lib/debug.js +9 -0
  273. package/lib/decode-html-blob.d.ts +20 -0
  274. package/lib/decode-html-blob.js +23 -0
  275. package/lib/decode-page-html-blob-bytes.d.ts +25 -0
  276. package/lib/decode-page-html-blob-bytes.js +29 -0
  277. package/lib/decode-stored-blob-bytes.d.ts +25 -0
  278. package/lib/decode-stored-blob-bytes.js +47 -0
  279. package/lib/derive-lineage-from-parent.d.ts +37 -0
  280. package/lib/derive-lineage-from-parent.js +42 -0
  281. package/lib/drop-legacy-tables.d.ts +45 -0
  282. package/lib/drop-legacy-tables.js +56 -0
  283. package/lib/error-kind/classify-error-kind.d.ts +20 -0
  284. package/lib/error-kind/classify-error-kind.js +136 -0
  285. package/lib/error-kind/network-related-error-kinds.d.ts +23 -0
  286. package/lib/error-kind/network-related-error-kinds.js +28 -0
  287. package/lib/error-kind/permanent-error-kinds.d.ts +48 -0
  288. package/lib/error-kind/permanent-error-kinds.js +54 -0
  289. package/lib/error-kind/types.d.ts +54 -0
  290. package/lib/error-kind/types.js +1 -0
  291. package/lib/filesystem/append-text.d.ts +9 -0
  292. package/lib/filesystem/append-text.js +14 -0
  293. package/lib/filesystem/copy-dir-sync.d.ts +6 -0
  294. package/lib/filesystem/copy-dir-sync.js +9 -0
  295. package/lib/filesystem/copy-dir.d.ts +7 -0
  296. package/lib/filesystem/copy-dir.js +13 -0
  297. package/lib/filesystem/copy-file-with-progress.d.ts +20 -0
  298. package/lib/filesystem/copy-file-with-progress.js +34 -0
  299. package/lib/filesystem/exists.d.ts +6 -0
  300. package/lib/filesystem/exists.js +9 -0
  301. package/lib/filesystem/get-file-list.d.ts +8 -0
  302. package/lib/filesystem/get-file-list.js +12 -0
  303. package/lib/filesystem/is-dir.d.ts +6 -0
  304. package/lib/filesystem/is-dir.js +10 -0
  305. package/lib/filesystem/mkdir.d.ts +8 -0
  306. package/lib/filesystem/mkdir.js +15 -0
  307. package/lib/filesystem/output-binary.d.ts +12 -0
  308. package/lib/filesystem/output-binary.js +17 -0
  309. package/lib/filesystem/output-json.d.ts +9 -0
  310. package/lib/filesystem/output-json.js +14 -0
  311. package/lib/filesystem/output-text.d.ts +11 -0
  312. package/lib/filesystem/output-text.js +32 -0
  313. package/lib/filesystem/parse-pax-path.d.ts +18 -0
  314. package/lib/filesystem/parse-pax-path.js +47 -0
  315. package/lib/filesystem/parse-tar-size-field.d.ts +13 -0
  316. package/lib/filesystem/parse-tar-size-field.js +40 -0
  317. package/lib/filesystem/peek-tar-top-dir.d.ts +35 -0
  318. package/lib/filesystem/peek-tar-top-dir.js +215 -0
  319. package/lib/filesystem/read-json.d.ts +7 -0
  320. package/lib/filesystem/read-json.js +11 -0
  321. package/lib/filesystem/read-text.d.ts +6 -0
  322. package/lib/filesystem/read-text.js +10 -0
  323. package/lib/filesystem/readline.d.ts +11 -0
  324. package/lib/filesystem/readline.js +26 -0
  325. package/lib/filesystem/remove.d.ts +5 -0
  326. package/lib/filesystem/remove.js +10 -0
  327. package/lib/filesystem/rename.d.ts +16 -0
  328. package/lib/filesystem/rename.js +48 -0
  329. package/lib/filesystem/tar.d.ts +23 -0
  330. package/lib/filesystem/tar.js +78 -0
  331. package/lib/filesystem/untar.d.ts +33 -0
  332. package/lib/filesystem/untar.js +84 -0
  333. package/lib/get-failed-page-messages.d.ts +56 -0
  334. package/lib/get-failed-page-messages.js +146 -0
  335. package/lib/get-json.d.ts +10 -0
  336. package/lib/get-json.js +25 -0
  337. package/lib/html-snapshot/match-selector-html.d.ts +25 -0
  338. package/lib/html-snapshot/match-selector-html.js +28 -0
  339. package/lib/html-snapshot/match-selector-snapshots.d.ts +33 -0
  340. package/lib/html-snapshot/match-selector-snapshots.js +33 -0
  341. package/lib/html-snapshot/search-html-document.d.ts +29 -0
  342. package/lib/html-snapshot/search-html-document.js +27 -0
  343. package/lib/html-snapshot/search-html-snapshots.d.ts +36 -0
  344. package/lib/html-snapshot/search-html-snapshots.js +35 -0
  345. package/lib/html-snapshot/types.d.ts +111 -0
  346. package/lib/html-snapshot/types.js +7 -0
  347. package/lib/html-snapshot/validate-search-pattern.d.ts +15 -0
  348. package/lib/html-snapshot/validate-search-pattern.js +17 -0
  349. package/lib/init-schema.d.ts +48 -0
  350. package/lib/init-schema.js +124 -0
  351. package/lib/is-inventory-source.d.ts +21 -0
  352. package/lib/is-inventory-source.js +22 -0
  353. package/lib/is-within-outage-window.d.ts +49 -0
  354. package/lib/is-within-outage-window.js +33 -0
  355. package/lib/isolated-cluster/create-isolated-cluster-run.d.ts +24 -0
  356. package/lib/isolated-cluster/create-isolated-cluster-run.js +26 -0
  357. package/lib/libsql-dialect.d.ts +115 -0
  358. package/lib/libsql-dialect.js +116 -0
  359. package/lib/limited-page-ids.d.ts +9 -0
  360. package/lib/limited-page-ids.js +18 -0
  361. package/lib/meta/assert-compatible-version.d.ts +60 -0
  362. package/lib/meta/assert-compatible-version.js +93 -0
  363. package/lib/meta/classify-jsonld-type.d.ts +23 -0
  364. package/lib/meta/classify-jsonld-type.js +43 -0
  365. package/lib/meta/compare-semver.d.ts +23 -0
  366. package/lib/meta/compare-semver.js +51 -0
  367. package/lib/meta/compute-main-contents-denormalized.d.ts +41 -0
  368. package/lib/meta/compute-main-contents-denormalized.js +88 -0
  369. package/lib/meta/compute-page-denormalized.d.ts +20 -0
  370. package/lib/meta/compute-page-denormalized.js +35 -0
  371. package/lib/meta/derive-flat-from-meta.d.ts +34 -0
  372. package/lib/meta/derive-flat-from-meta.js +158 -0
  373. package/lib/meta/derive-meta-extras.d.ts +20 -0
  374. package/lib/meta/derive-meta-extras.js +23 -0
  375. package/lib/meta/extract-tags-for-archive.d.ts +17 -0
  376. package/lib/meta/extract-tags-for-archive.js +36 -0
  377. package/lib/meta/parse-main-content-class-list.d.ts +19 -0
  378. package/lib/meta/parse-main-content-class-list.js +34 -0
  379. package/lib/meta/summarize-jsonld.d.ts +17 -0
  380. package/lib/meta/summarize-jsonld.js +29 -0
  381. package/lib/meta/technologies/combine-technology-confidence.d.ts +46 -0
  382. package/lib/meta/technologies/combine-technology-confidence.js +93 -0
  383. package/lib/meta/technologies/convert-legacy-page-tags-to-inserts.d.ts +45 -0
  384. package/lib/meta/technologies/convert-legacy-page-tags-to-inserts.js +53 -0
  385. package/lib/meta/technologies/convert-tag-row-to-wappalyzer-signal.d.ts +33 -0
  386. package/lib/meta/technologies/convert-tag-row-to-wappalyzer-signal.js +46 -0
  387. package/lib/meta/technologies/extract-technologies-for-archive.d.ts +33 -0
  388. package/lib/meta/technologies/extract-technologies-for-archive.js +30 -0
  389. package/lib/meta/technologies/match-js-license-comment-signal.d.ts +21 -0
  390. package/lib/meta/technologies/match-js-license-comment-signal.js +23 -0
  391. package/lib/meta/technologies/match-structural-technology-signals.d.ts +26 -0
  392. package/lib/meta/technologies/match-structural-technology-signals.js +48 -0
  393. package/lib/meta/technologies/normalize-wappalyzer-entries.d.ts +25 -0
  394. package/lib/meta/technologies/normalize-wappalyzer-entries.js +35 -0
  395. package/lib/meta/technologies/technology-signal-definitions.d.ts +44 -0
  396. package/lib/meta/technologies/technology-signal-definitions.js +60 -0
  397. package/lib/meta/technologies/types.d.ts +70 -0
  398. package/lib/meta/technologies/types.js +13 -0
  399. package/lib/meta/types.d.ts +1490 -0
  400. package/lib/meta/types.js +65 -0
  401. package/lib/migrate-content-items-alias-of-id.d.ts +52 -0
  402. package/lib/migrate-content-items-alias-of-id.js +69 -0
  403. package/lib/migrate-content-items-dedupe-cap-event-id.d.ts +46 -0
  404. package/lib/migrate-content-items-dedupe-cap-event-id.js +62 -0
  405. package/lib/migrate-content-items-is-metadata-only.d.ts +44 -0
  406. package/lib/migrate-content-items-is-metadata-only.js +60 -0
  407. package/lib/migrate-entity-tables.d.ts +55 -0
  408. package/lib/migrate-entity-tables.js +66 -0
  409. package/lib/migrate-info-created-cwd.d.ts +17 -0
  410. package/lib/migrate-info-created-cwd.js +36 -0
  411. package/lib/migrate-info-main-content-selector.d.ts +16 -0
  412. package/lib/migrate-info-main-content-selector.js +35 -0
  413. package/lib/migrate-info-request-header-names.d.ts +16 -0
  414. package/lib/migrate-info-request-header-names.js +35 -0
  415. package/lib/migrate-info-roots.d.ts +20 -0
  416. package/lib/migrate-info-roots.js +52 -0
  417. package/lib/migrate-inventory-runs-to-list-reconcile-runs.d.ts +34 -0
  418. package/lib/migrate-inventory-runs-to-list-reconcile-runs.js +51 -0
  419. package/lib/migrate-list-reconcile-runs-exclude-skipped.d.ts +25 -0
  420. package/lib/migrate-list-reconcile-runs-exclude-skipped.js +44 -0
  421. package/lib/migrate-list-reconcile-runs-invalid-skipped.d.ts +16 -0
  422. package/lib/migrate-list-reconcile-runs-invalid-skipped.js +35 -0
  423. package/lib/migrate-main-contents-columns.d.ts +26 -0
  424. package/lib/migrate-main-contents-columns.js +61 -0
  425. package/lib/migrate-page-meta-body-hash.d.ts +44 -0
  426. package/lib/migrate-page-meta-body-hash.js +63 -0
  427. package/lib/migrate-page-meta-console-error-count.d.ts +27 -0
  428. package/lib/migrate-page-meta-console-error-count.js +45 -0
  429. package/lib/migrate-page-meta-custom-element-count.d.ts +33 -0
  430. package/lib/migrate-page-meta-custom-element-count.js +51 -0
  431. package/lib/migrate-page-meta-image-scan.d.ts +27 -0
  432. package/lib/migrate-page-meta-image-scan.js +52 -0
  433. package/lib/migrate-page-tags-to-page-technologies.d.ts +39 -0
  434. package/lib/migrate-page-tags-to-page-technologies.js +79 -0
  435. package/lib/migrate-ref-tables.d.ts +25 -0
  436. package/lib/migrate-ref-tables.js +38 -0
  437. package/lib/native-executor/check-native-executor-config.d.ts +17 -0
  438. package/lib/native-executor/check-native-executor-config.js +20 -0
  439. package/lib/page-meta-column-maps.d.ts +32 -0
  440. package/lib/page-meta-column-maps.js +43 -0
  441. package/lib/page.d.ts +546 -0
  442. package/lib/page.js +764 -0
  443. package/lib/peek-archive-lock.d.ts +40 -0
  444. package/lib/peek-archive-lock.js +62 -0
  445. package/lib/populate-entity-tables/collapse-anchor-rows.d.ts +41 -0
  446. package/lib/populate-entity-tables/collapse-anchor-rows.js +87 -0
  447. package/lib/populate-entity-tables/derive-dom-path.d.ts +35 -0
  448. package/lib/populate-entity-tables/derive-dom-path.js +72 -0
  449. package/lib/populate-entity-tables/is-blob-ref-value.d.ts +16 -0
  450. package/lib/populate-entity-tables/is-blob-ref-value.js +19 -0
  451. package/lib/populate-entity-tables/match-images-to-dom-paths.d.ts +66 -0
  452. package/lib/populate-entity-tables/match-images-to-dom-paths.js +96 -0
  453. package/lib/populate-entity-tables/populate-anchor-edges.d.ts +33 -0
  454. package/lib/populate-entity-tables/populate-anchor-edges.js +153 -0
  455. package/lib/populate-entity-tables/populate-content-items.d.ts +40 -0
  456. package/lib/populate-entity-tables/populate-content-items.js +141 -0
  457. package/lib/populate-entity-tables/populate-entities.d.ts +81 -0
  458. package/lib/populate-entity-tables/populate-entities.js +110 -0
  459. package/lib/populate-entity-tables/populate-image-items.d.ts +91 -0
  460. package/lib/populate-entity-tables/populate-image-items.js +226 -0
  461. package/lib/populate-entity-tables/populate-page-meta.d.ts +33 -0
  462. package/lib/populate-entity-tables/populate-page-meta.js +267 -0
  463. package/lib/populate-entity-tables/populate-resource-items.d.ts +22 -0
  464. package/lib/populate-entity-tables/populate-resource-items.js +114 -0
  465. package/lib/populate-entity-tables/populate-resource-ref-edges.d.ts +31 -0
  466. package/lib/populate-entity-tables/populate-resource-ref-edges.js +33 -0
  467. package/lib/populate-entity-tables/resolve-blob-refs.d.ts +31 -0
  468. package/lib/populate-entity-tables/resolve-blob-refs.js +100 -0
  469. package/lib/populate-entity-tables/resolve-content-type-refs.d.ts +22 -0
  470. package/lib/populate-entity-tables/resolve-content-type-refs.js +27 -0
  471. package/lib/populate-entity-tables/resolve-header-sets.d.ts +49 -0
  472. package/lib/populate-entity-tables/resolve-header-sets.js +122 -0
  473. package/lib/populate-entity-tables/resolve-json-refs.d.ts +25 -0
  474. package/lib/populate-entity-tables/resolve-json-refs.js +67 -0
  475. package/lib/populate-entity-tables/resolve-text-refs.d.ts +30 -0
  476. package/lib/populate-entity-tables/resolve-text-refs.js +61 -0
  477. package/lib/populate-entity-tables/resolve-url-or-blob-from-maps.d.ts +21 -0
  478. package/lib/populate-entity-tables/resolve-url-or-blob-from-maps.js +27 -0
  479. package/lib/populate-entity-tables/resolve-url-refs.d.ts +33 -0
  480. package/lib/populate-entity-tables/resolve-url-refs.js +60 -0
  481. package/lib/populate-entity-tables/test-utils/count-rows.d.ts +17 -0
  482. package/lib/populate-entity-tables/test-utils/count-rows.js +20 -0
  483. package/lib/populate-entity-tables/test-utils/seed-content-items.d.ts +25 -0
  484. package/lib/populate-entity-tables/test-utils/seed-content-items.js +42 -0
  485. package/lib/populate-entity-tables/test-utils/setup-entities-db.d.ts +30 -0
  486. package/lib/populate-entity-tables/test-utils/setup-entities-db.js +175 -0
  487. package/lib/populate-entity-tables/types.d.ts +157 -0
  488. package/lib/populate-entity-tables/types.js +12 -0
  489. package/lib/populate-entity-tables/upsert-text-refs.d.ts +38 -0
  490. package/lib/populate-entity-tables/upsert-text-refs.js +78 -0
  491. package/lib/populate-ref-tables/classify-content-type.d.ts +16 -0
  492. package/lib/populate-ref-tables/classify-content-type.js +52 -0
  493. package/lib/populate-ref-tables/compute-content-hash.d.ts +22 -0
  494. package/lib/populate-ref-tables/compute-content-hash.js +26 -0
  495. package/lib/populate-ref-tables/compute-header-flags.d.ts +16 -0
  496. package/lib/populate-ref-tables/compute-header-flags.js +70 -0
  497. package/lib/populate-ref-tables/content-type-rules.d.ts +38 -0
  498. package/lib/populate-ref-tables/content-type-rules.js +133 -0
  499. package/lib/populate-ref-tables/create-header-table-caches.d.ts +25 -0
  500. package/lib/populate-ref-tables/create-header-table-caches.js +49 -0
  501. package/lib/populate-ref-tables/data-uri-url-refs-limit.d.ts +15 -0
  502. package/lib/populate-ref-tables/data-uri-url-refs-limit.js +15 -0
  503. package/lib/populate-ref-tables/decode-data-uri.d.ts +21 -0
  504. package/lib/populate-ref-tables/decode-data-uri.js +126 -0
  505. package/lib/populate-ref-tables/decompose-header-set.d.ts +29 -0
  506. package/lib/populate-ref-tables/decompose-header-set.js +157 -0
  507. package/lib/populate-ref-tables/decompose-url.d.ts +25 -0
  508. package/lib/populate-ref-tables/decompose-url.js +70 -0
  509. package/lib/populate-ref-tables/header-stability.d.ts +19 -0
  510. package/lib/populate-ref-tables/header-stability.js +22 -0
  511. package/lib/populate-ref-tables/header-value-cache-key.d.ts +17 -0
  512. package/lib/populate-ref-tables/header-value-cache-key.js +19 -0
  513. package/lib/populate-ref-tables/normalize-mime.d.ts +24 -0
  514. package/lib/populate-ref-tables/normalize-mime.js +36 -0
  515. package/lib/populate-ref-tables/populate-blob-refs.d.ts +38 -0
  516. package/lib/populate-ref-tables/populate-blob-refs.js +134 -0
  517. package/lib/populate-ref-tables/populate-content-type-refs.d.ts +27 -0
  518. package/lib/populate-ref-tables/populate-content-type-refs.js +70 -0
  519. package/lib/populate-ref-tables/populate-header-tables.d.ts +35 -0
  520. package/lib/populate-ref-tables/populate-header-tables.js +80 -0
  521. package/lib/populate-ref-tables/populate-json-refs.d.ts +29 -0
  522. package/lib/populate-ref-tables/populate-json-refs.js +101 -0
  523. package/lib/populate-ref-tables/populate-refs.d.ts +51 -0
  524. package/lib/populate-ref-tables/populate-refs.js +62 -0
  525. package/lib/populate-ref-tables/populate-text-refs.d.ts +32 -0
  526. package/lib/populate-ref-tables/populate-text-refs.js +133 -0
  527. package/lib/populate-ref-tables/populate-url-refs.d.ts +28 -0
  528. package/lib/populate-ref-tables/populate-url-refs.js +148 -0
  529. package/lib/populate-ref-tables/test-utils/count-rows.d.ts +15 -0
  530. package/lib/populate-ref-tables/test-utils/count-rows.js +17 -0
  531. package/lib/populate-ref-tables/types.d.ts +197 -0
  532. package/lib/populate-ref-tables/types.js +7 -0
  533. package/lib/populate-ref-tables/upsert-one-header-set.d.ts +34 -0
  534. package/lib/populate-ref-tables/upsert-one-header-set.js +208 -0
  535. package/lib/populate-ref-tables/volatile-header-names.d.ts +20 -0
  536. package/lib/populate-ref-tables/volatile-header-names.js +33 -0
  537. package/lib/redirect-table.d.ts +9 -0
  538. package/lib/redirect-table.js +28 -0
  539. package/lib/release-finished-statements.d.ts +42 -0
  540. package/lib/release-finished-statements.js +45 -0
  541. package/lib/resolve-redirect-chain.d.ts +33 -0
  542. package/lib/resolve-redirect-chain.js +27 -0
  543. package/lib/resource.d.ts +46 -0
  544. package/lib/resource.js +62 -0
  545. package/lib/retarget-legacy-fk-tables.d.ts +61 -0
  546. package/lib/retarget-legacy-fk-tables.js +137 -0
  547. package/lib/safe-path.d.ts +9 -0
  548. package/lib/safe-path.js +17 -0
  549. package/lib/scope/build-scope-map.d.ts +21 -0
  550. package/lib/scope/build-scope-map.js +32 -0
  551. package/lib/scope/find-scope-entry.d.ts +25 -0
  552. package/lib/scope/find-scope-entry.js +45 -0
  553. package/lib/template-classification/classify-archive-page-templates.d.ts +42 -0
  554. package/lib/template-classification/classify-archive-page-templates.js +70 -0
  555. package/lib/template-classification/classify-page-templates.d.ts +33 -0
  556. package/lib/template-classification/classify-page-templates.js +60 -0
  557. package/lib/template-classification/collect-page-ids-with-html.d.ts +24 -0
  558. package/lib/template-classification/collect-page-ids-with-html.js +30 -0
  559. package/lib/template-classification/collect-page-stylesheet-urls.d.ts +32 -0
  560. package/lib/template-classification/collect-page-stylesheet-urls.js +130 -0
  561. package/lib/template-classification/create-content-root-hint.d.ts +41 -0
  562. package/lib/template-classification/create-content-root-hint.js +51 -0
  563. package/lib/template-classification/create-page-cluster-factory.d.ts +36 -0
  564. package/lib/template-classification/create-page-cluster-factory.js +52 -0
  565. package/lib/template-classification/load-page-cluster-candidates.d.ts +32 -0
  566. package/lib/template-classification/load-page-cluster-candidates.js +93 -0
  567. package/lib/template-classification/page-cluster/resolve-page-cluster-keys.d.ts +34 -0
  568. package/lib/template-classification/page-cluster/resolve-page-cluster-keys.js +236 -0
  569. package/lib/template-classification/page-cluster/types.d.ts +123 -0
  570. package/lib/template-classification/page-cluster/types.js +1 -0
  571. package/lib/template-classification/types.d.ts +234 -0
  572. package/lib/template-classification/types.js +1 -0
  573. package/lib/test-utils/build-full-schema-test-db.d.ts +34 -0
  574. package/lib/test-utils/build-full-schema-test-db.js +74 -0
  575. package/lib/test-utils/create-legacy-analysis-tables.d.ts +13 -0
  576. package/lib/test-utils/create-legacy-analysis-tables.js +37 -0
  577. package/lib/test-utils/fk-parent-tables.d.ts +15 -0
  578. package/lib/test-utils/fk-parent-tables.js +19 -0
  579. package/lib/test-utils/seed-content-item.d.ts +35 -0
  580. package/lib/test-utils/seed-content-item.js +42 -0
  581. package/lib/test-utils/setup-legacy-fk-db.d.ts +34 -0
  582. package/lib/test-utils/setup-legacy-fk-db.js +271 -0
  583. package/lib/transfer/attach-source-database.d.ts +31 -0
  584. package/lib/transfer/attach-source-database.js +40 -0
  585. package/lib/transfer/build-split-config.d.ts +30 -0
  586. package/lib/transfer/build-split-config.js +42 -0
  587. package/lib/transfer/clear-replaced-page-rows.d.ts +23 -0
  588. package/lib/transfer/clear-replaced-page-rows.js +61 -0
  589. package/lib/transfer/concat-archives.d.ts +55 -0
  590. package/lib/transfer/concat-archives.js +95 -0
  591. package/lib/transfer/concat-source-transfer-phases.d.ts +10 -0
  592. package/lib/transfer/concat-source-transfer-phases.js +17 -0
  593. package/lib/transfer/content-item-rank-sql.d.ts +21 -0
  594. package/lib/transfer/content-item-rank-sql.js +23 -0
  595. package/lib/transfer/copy-anchor-edges.d.ts +28 -0
  596. package/lib/transfer/copy-anchor-edges.js +42 -0
  597. package/lib/transfer/copy-dictionaries-for-concat.d.ts +39 -0
  598. package/lib/transfer/copy-dictionaries-for-concat.js +81 -0
  599. package/lib/transfer/copy-dictionaries-for-split.d.ts +29 -0
  600. package/lib/transfer/copy-dictionaries-for-split.js +224 -0
  601. package/lib/transfer/copy-header-set-children.d.ts +27 -0
  602. package/lib/transfer/copy-header-set-children.js +51 -0
  603. package/lib/transfer/copy-image-items.d.ts +21 -0
  604. package/lib/transfer/copy-image-items.js +62 -0
  605. package/lib/transfer/copy-inventory-source-lists.d.ts +30 -0
  606. package/lib/transfer/copy-inventory-source-lists.js +61 -0
  607. package/lib/transfer/copy-journal-tables.d.ts +30 -0
  608. package/lib/transfer/copy-journal-tables.js +56 -0
  609. package/lib/transfer/copy-page-console-logs.d.ts +16 -0
  610. package/lib/transfer/copy-page-console-logs.js +27 -0
  611. package/lib/transfer/copy-page-html-blobs.d.ts +31 -0
  612. package/lib/transfer/copy-page-html-blobs.js +43 -0
  613. package/lib/transfer/copy-page-meta.d.ts +27 -0
  614. package/lib/transfer/copy-page-meta.js +68 -0
  615. package/lib/transfer/copy-page-template-clusters.d.ts +31 -0
  616. package/lib/transfer/copy-page-template-clusters.js +56 -0
  617. package/lib/transfer/copy-page-template-labels.d.ts +34 -0
  618. package/lib/transfer/copy-page-template-labels.js +88 -0
  619. package/lib/transfer/copy-resource-items.d.ts +29 -0
  620. package/lib/transfer/copy-resource-items.js +89 -0
  621. package/lib/transfer/copy-resource-ref-edges.d.ts +20 -0
  622. package/lib/transfer/copy-resource-ref-edges.js +33 -0
  623. package/lib/transfer/copy-simple-page-scoped-tables.d.ts +15 -0
  624. package/lib/transfer/copy-simple-page-scoped-tables.js +34 -0
  625. package/lib/transfer/count-external-pages-in-scope.d.ts +26 -0
  626. package/lib/transfer/count-external-pages-in-scope.js +40 -0
  627. package/lib/transfer/create-transfer-temp-tables.d.ts +30 -0
  628. package/lib/transfer/create-transfer-temp-tables.js +59 -0
  629. package/lib/transfer/dictionary-copy-specs.d.ts +32 -0
  630. package/lib/transfer/dictionary-copy-specs.js +28 -0
  631. package/lib/transfer/drop-transfer-temp-tables.d.ts +9 -0
  632. package/lib/transfer/drop-transfer-temp-tables.js +18 -0
  633. package/lib/transfer/flatten-redirect-chains.d.ts +44 -0
  634. package/lib/transfer/flatten-redirect-chains.js +74 -0
  635. package/lib/transfer/insert-content-items.d.ts +35 -0
  636. package/lib/transfer/insert-content-items.js +116 -0
  637. package/lib/transfer/list-transfer-columns.d.ts +35 -0
  638. package/lib/transfer/list-transfer-columns.js +45 -0
  639. package/lib/transfer/mark-in-scope-content-items.d.ts +31 -0
  640. package/lib/transfer/mark-in-scope-content-items.js +54 -0
  641. package/lib/transfer/merge-archive-configs.d.ts +51 -0
  642. package/lib/transfer/merge-archive-configs.js +85 -0
  643. package/lib/transfer/plan-content-items-for-concat.d.ts +33 -0
  644. package/lib/transfer/plan-content-items-for-concat.js +51 -0
  645. package/lib/transfer/plan-content-items-for-split.d.ts +42 -0
  646. package/lib/transfer/plan-content-items-for-split.js +83 -0
  647. package/lib/transfer/plan-resource-items.d.ts +40 -0
  648. package/lib/transfer/plan-resource-items.js +69 -0
  649. package/lib/transfer/quote-transfer-identifier.d.ts +18 -0
  650. package/lib/transfer/quote-transfer-identifier.js +20 -0
  651. package/lib/transfer/reclassify-resource-externality.d.ts +37 -0
  652. package/lib/transfer/reclassify-resource-externality.js +66 -0
  653. package/lib/transfer/remap-redirect-dest-ids.d.ts +34 -0
  654. package/lib/transfer/remap-redirect-dest-ids.js +51 -0
  655. package/lib/transfer/replace-content-items.d.ts +39 -0
  656. package/lib/transfer/replace-content-items.js +83 -0
  657. package/lib/transfer/simple-page-scoped-tables.d.ts +25 -0
  658. package/lib/transfer/simple-page-scoped-tables.js +38 -0
  659. package/lib/transfer/split-archive.d.ts +55 -0
  660. package/lib/transfer/split-archive.js +98 -0
  661. package/lib/transfer/split-source-transfer-phases.d.ts +11 -0
  662. package/lib/transfer/split-source-transfer-phases.js +18 -0
  663. package/lib/transfer/transfer-action.d.ts +34 -0
  664. package/lib/transfer/transfer-action.js +32 -0
  665. package/lib/transfer/transfer-archive-rows.d.ts +65 -0
  666. package/lib/transfer/transfer-archive-rows.js +156 -0
  667. package/lib/transfer/transfer-dictionary-tables.d.ts +12 -0
  668. package/lib/transfer/transfer-dictionary-tables.js +22 -0
  669. package/lib/transfer/transfer-post-phases.d.ts +10 -0
  670. package/lib/transfer/transfer-post-phases.js +13 -0
  671. package/lib/transfer/transfer-source-alias.d.ts +9 -0
  672. package/lib/transfer/transfer-source-alias.js +9 -0
  673. package/lib/transfer/types.d.ts +111 -0
  674. package/lib/transfer/types.js +35 -0
  675. package/lib/types.d.ts +772 -0
  676. package/lib/types.js +1 -0
  677. package/lib/url-alias/compute-tier-a-alias-key.d.ts +44 -0
  678. package/lib/url-alias/compute-tier-a-alias-key.js +47 -0
  679. package/lib/url-alias/compute-tier-b-alias-key.d.ts +23 -0
  680. package/lib/url-alias/compute-tier-b-alias-key.js +26 -0
  681. package/lib/url-alias/group-alias-candidates.d.ts +27 -0
  682. package/lib/url-alias/group-alias-candidates.js +29 -0
  683. package/lib/url-alias/types.d.ts +12 -0
  684. package/lib/url-alias/types.js +1 -0
  685. package/lib/url-pattern/compute-shape-key.d.ts +58 -0
  686. package/lib/url-pattern/compute-shape-key.js +129 -0
  687. package/lib/url-pattern/decompose-url.d.ts +33 -0
  688. package/lib/url-pattern/decompose-url.js +79 -0
  689. package/lib/url-pattern/reconstruct-url.d.ts +15 -0
  690. package/lib/url-pattern/reconstruct-url.js +33 -0
  691. package/lib/url-sort/compute-url-sort-ranks.d.ts +30 -0
  692. package/lib/url-sort/compute-url-sort-ranks.js +33 -0
  693. package/lib/utils/array/each-splitted.d.ts +10 -0
  694. package/lib/utils/array/each-splitted.js +14 -0
  695. package/lib/utils/debug.d.ts +8 -0
  696. package/lib/utils/debug.js +8 -0
  697. package/lib/utils/error/emit-error-with-retry.d.ts +40 -0
  698. package/lib/utils/error/emit-error-with-retry.js +44 -0
  699. package/lib/utils/error/emit-error.d.ts +39 -0
  700. package/lib/utils/error/emit-error.js +41 -0
  701. package/lib/utils/object/parse-response-headers.d.ts +12 -0
  702. package/lib/utils/object/parse-response-headers.js +26 -0
  703. package/lib/utils/object/redact-request-headers.d.ts +15 -0
  704. package/lib/utils/object/redact-request-headers.js +27 -0
  705. package/lib/utils/types/types.d.ts +383 -0
  706. package/lib/utils/types/types.js +1 -0
  707. package/lib/verify-migration/capture-rejection.d.ts +24 -0
  708. package/lib/verify-migration/capture-rejection.js +31 -0
  709. package/lib/verify-migration/check-anchor-edges-count.d.ts +34 -0
  710. package/lib/verify-migration/check-anchor-edges-count.js +72 -0
  711. package/lib/verify-migration/check-anchor-edges-sum.d.ts +13 -0
  712. package/lib/verify-migration/check-anchor-edges-sum.js +27 -0
  713. package/lib/verify-migration/check-content-items-count.d.ts +16 -0
  714. package/lib/verify-migration/check-content-items-count.js +30 -0
  715. package/lib/verify-migration/check-content-type-preservation.d.ts +22 -0
  716. package/lib/verify-migration/check-content-type-preservation.js +40 -0
  717. package/lib/verify-migration/check-foreign-key-integrity.d.ts +31 -0
  718. package/lib/verify-migration/check-foreign-key-integrity.js +47 -0
  719. package/lib/verify-migration/check-image-items-count.d.ts +12 -0
  720. package/lib/verify-migration/check-image-items-count.js +26 -0
  721. package/lib/verify-migration/check-page-meta-count.d.ts +15 -0
  722. package/lib/verify-migration/check-page-meta-count.js +31 -0
  723. package/lib/verify-migration/check-reader-parity.d.ts +23 -0
  724. package/lib/verify-migration/check-reader-parity.js +182 -0
  725. package/lib/verify-migration/check-resource-items-count.d.ts +17 -0
  726. package/lib/verify-migration/check-resource-items-count.js +33 -0
  727. package/lib/verify-migration/check-url-round-trip.d.ts +43 -0
  728. package/lib/verify-migration/check-url-round-trip.js +112 -0
  729. package/lib/verify-migration/types.d.ts +70 -0
  730. package/lib/verify-migration/types.js +63 -0
  731. package/lib/verify-migration/verify-migration.d.ts +41 -0
  732. package/lib/verify-migration/verify-migration.js +120 -0
  733. package/lib/with-bulk-write-pragmas.d.ts +51 -0
  734. package/lib/with-bulk-write-pragmas.js +132 -0
  735. package/lib/write-queue.d.ts +32 -0
  736. package/lib/write-queue.js +55 -0
  737. package/package.json +360 -5
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Shared type definitions for archive-side meta processing helpers under {@link ./}.
3
+ *
4
+ * Mirrors the shape of {@link Meta} after archive-side
5
+ * derivation: flat columns persisted to the `pages` table, denormalised
6
+ * aggregates, per-row shapes for `page_jsonld` / `page_tags`, and the summary
7
+ * objects returned by `get-page-detail` consumers.
8
+ * @module
9
+ */
10
+ import { compareSemver } from './compare-semver.js';
11
+ /**
12
+ * Error thrown by `assert-compatible-version` when the archive's
13
+ * `info.version` is older than the format version this build accepts.
14
+ *
15
+ * Catch this at CLI / viewer boundaries to print a friendly message; do not
16
+ * confuse with generic `Error` thrown by `Database.connect` (lockfile / I/O).
17
+ * @example
18
+ * try {
19
+ * const accessor = await Archive.openCached(filePath);
20
+ * } catch (error) {
21
+ * if (error instanceof IncompatibleArchiveError) {
22
+ * // Message names the migration script(s) to run.
23
+ * console.error(error.message);
24
+ * } else {
25
+ * throw error;
26
+ * }
27
+ * }
28
+ */
29
+ export class IncompatibleArchiveError extends Error {
30
+ archiveVersion;
31
+ requiredVersion;
32
+ /**
33
+ * @param archiveVersion - The `info.version` value read from the archive
34
+ * (or `'unknown'` when the column is missing / null).
35
+ * @param requiredVersion - The minimum format version this build accepts
36
+ * (semver string, e.g. `'0.13.0'`).
37
+ */
38
+ constructor(archiveVersion, requiredVersion) {
39
+ super(`Archive uses Nitpicker ${archiveVersion}; this build requires ${requiredVersion} or newer. ` +
40
+ `Run ${suggestMigrationScript(archiveVersion)} to produce an upgraded copy next to it.`);
41
+ this.archiveVersion = archiveVersion;
42
+ this.requiredVersion = requiredVersion;
43
+ this.name = 'IncompatibleArchiveError';
44
+ }
45
+ }
46
+ /**
47
+ * Selects the migration script an operator should run to bring
48
+ * `archiveVersion` up to the current {@link IncompatibleArchiveError.requiredVersion}.
49
+ * Chained: pre-0.10 archives run migrate-to-0.10 first, then
50
+ * migrate-to-0.13 — so the message points at BOTH steps in order.
51
+ * 0.10.0-through-0.12.x archives only need migrate-to-0.13.
52
+ *
53
+ * Uses {@link compareSemver} instead of `<` string comparison: `'0.9.0'`
54
+ * lexicographically compares GREATER than `'0.10.0'` (because `'9' > '1'`),
55
+ * which would misroute pre-0.10 archives into the single-step hint and
56
+ * make the resulting migrator invocation fail with a confusing error.
57
+ * @param archiveVersion - Semver read from `info.version`, or `'unknown'`.
58
+ * @returns Bracketed command string for embedding into the error message.
59
+ */
60
+ function suggestMigrationScript(archiveVersion) {
61
+ if (archiveVersion === 'unknown' || compareSemver(archiveVersion, '0.10.0') < 0) {
62
+ return '`node scripts/migrate-to-0.10.mjs <path>` (then `node scripts/migrate-to-0.13.mjs <path>`)';
63
+ }
64
+ return '`node scripts/migrate-to-0.13.mjs <path>`';
65
+ }
@@ -0,0 +1,52 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Adds the `content_items.alias_of_id` column to archives created before
4
+ * this feature, then ensures its index exists.
5
+ *
6
+ * `content_items` is provisioned via a bare `CREATE TABLE IF NOT EXISTS` in
7
+ * {@link import('./create-entity-tables.js').createEntityTables}, which
8
+ * self-heals a *missing table* on every `initSchema` call but is a no-op
9
+ * against an *existing* table — adding a column to the DDL string never
10
+ * reaches an archive whose `content_items` predates this change. This
11
+ * mirrors {@link import('./migrate-page-meta-body-hash.js').migratePageMetaBodyHash}'s
12
+ * catch-up: a `hasColumn`-guarded `ALTER TABLE` for the one column
13
+ * `CREATE TABLE IF NOT EXISTS` cannot retrofit.
14
+ *
15
+ * Uses a raw `ALTER TABLE` (not the knex schema builder) so the retrofitted
16
+ * column's `REFERENCES content_items(id) DEFERRABLE INITIALLY DEFERRED`
17
+ * constraint matches the fresh-archive DDL bit-for-bit — the same
18
+ * self-referencing shape as `redirect_dest_id` (see
19
+ * `create-entity-tables.ts`'s JSDoc on why that FK must be deferred: a
20
+ * lower-id row can reference a higher-id row within the same write).
21
+ *
22
+ * The index is created here — unconditionally, after the column-add guard,
23
+ * not inside `createEntityTables`'s DDL — for both a fresh archive (where
24
+ * `alias_of_id` already exists from the DDL, so only the index still needs
25
+ * creating) and a legacy archive (where the column is added just above,
26
+ * then the index follows in the same call). `createEntityTables` runs
27
+ * unconditionally on every archive open, including legacy archives that
28
+ * still lack `alias_of_id` at that point; an unconditional
29
+ * `CREATE INDEX ... alias_of_id` there would fail with `no such column`
30
+ * before this migration ever runs. This function is the one place
31
+ * guaranteed to run only after the column is confirmed present, for both
32
+ * archive kinds.
33
+ *
34
+ * Only adds the column and its index — it does not compute values for
35
+ * existing rows (they stay `NULL`). That computation runs separately, from
36
+ * `backfillAliasOfId` during a viewer-read-model build, since it requires
37
+ * comparing every page's title and (for the trailing-slash tier) its
38
+ * `body_hash` against every other page.
39
+ *
40
+ * Idempotent: adding the column is a no-op once it exists (the index
41
+ * creation always runs, but `IF NOT EXISTS` makes repeat runs a no-op too).
42
+ * Guards on `content_items`'s existence defensively, though by the time this
43
+ * runs (after `initSchema`, itself after `assertCompatibleVersion` rejects
44
+ * pre-0.13 archives) the table is always present.
45
+ * @param instance - The Knex query builder instance connected to the database.
46
+ * @param onLog - Called instead of `console.error` when this migration
47
+ * actually applies (issue #294: a bare `console.error` here can fire
48
+ * while a `@d-zero/dealer` `Lanes`/`TaskList` display is mid-redraw during
49
+ * `Archive.open`, corrupting its cursor tracking). Falls back to
50
+ * `console.error` when omitted (direct/test callers).
51
+ */
52
+ export declare function migrateContentItemsAliasOfId(instance: Knex, onLog?: (message: string) => void): Promise<void>;
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Adds the `content_items.alias_of_id` column to archives created before
3
+ * this feature, then ensures its index exists.
4
+ *
5
+ * `content_items` is provisioned via a bare `CREATE TABLE IF NOT EXISTS` in
6
+ * {@link import('./create-entity-tables.js').createEntityTables}, which
7
+ * self-heals a *missing table* on every `initSchema` call but is a no-op
8
+ * against an *existing* table — adding a column to the DDL string never
9
+ * reaches an archive whose `content_items` predates this change. This
10
+ * mirrors {@link import('./migrate-page-meta-body-hash.js').migratePageMetaBodyHash}'s
11
+ * catch-up: a `hasColumn`-guarded `ALTER TABLE` for the one column
12
+ * `CREATE TABLE IF NOT EXISTS` cannot retrofit.
13
+ *
14
+ * Uses a raw `ALTER TABLE` (not the knex schema builder) so the retrofitted
15
+ * column's `REFERENCES content_items(id) DEFERRABLE INITIALLY DEFERRED`
16
+ * constraint matches the fresh-archive DDL bit-for-bit — the same
17
+ * self-referencing shape as `redirect_dest_id` (see
18
+ * `create-entity-tables.ts`'s JSDoc on why that FK must be deferred: a
19
+ * lower-id row can reference a higher-id row within the same write).
20
+ *
21
+ * The index is created here — unconditionally, after the column-add guard,
22
+ * not inside `createEntityTables`'s DDL — for both a fresh archive (where
23
+ * `alias_of_id` already exists from the DDL, so only the index still needs
24
+ * creating) and a legacy archive (where the column is added just above,
25
+ * then the index follows in the same call). `createEntityTables` runs
26
+ * unconditionally on every archive open, including legacy archives that
27
+ * still lack `alias_of_id` at that point; an unconditional
28
+ * `CREATE INDEX ... alias_of_id` there would fail with `no such column`
29
+ * before this migration ever runs. This function is the one place
30
+ * guaranteed to run only after the column is confirmed present, for both
31
+ * archive kinds.
32
+ *
33
+ * Only adds the column and its index — it does not compute values for
34
+ * existing rows (they stay `NULL`). That computation runs separately, from
35
+ * `backfillAliasOfId` during a viewer-read-model build, since it requires
36
+ * comparing every page's title and (for the trailing-slash tier) its
37
+ * `body_hash` against every other page.
38
+ *
39
+ * Idempotent: adding the column is a no-op once it exists (the index
40
+ * creation always runs, but `IF NOT EXISTS` makes repeat runs a no-op too).
41
+ * Guards on `content_items`'s existence defensively, though by the time this
42
+ * runs (after `initSchema`, itself after `assertCompatibleVersion` rejects
43
+ * pre-0.13 archives) the table is always present.
44
+ * @param instance - The Knex query builder instance connected to the database.
45
+ * @param onLog - Called instead of `console.error` when this migration
46
+ * actually applies (issue #294: a bare `console.error` here can fire
47
+ * while a `@d-zero/dealer` `Lanes`/`TaskList` display is mid-redraw during
48
+ * `Archive.open`, corrupting its cursor tracking). Falls back to
49
+ * `console.error` when omitted (direct/test callers).
50
+ */
51
+ export async function migrateContentItemsAliasOfId(instance, onLog) {
52
+ const hasContentItems = await instance.schema.hasTable('content_items');
53
+ if (!hasContentItems) {
54
+ return;
55
+ }
56
+ const hasColumn = await instance.schema.hasColumn('content_items', 'alias_of_id');
57
+ if (!hasColumn) {
58
+ await instance.raw('ALTER TABLE content_items ADD COLUMN alias_of_id INTEGER REFERENCES content_items(id) DEFERRABLE INITIALLY DEFERRED');
59
+ const message = '[migrate] content_items.alias_of_id column added';
60
+ if (onLog) {
61
+ onLog(message);
62
+ }
63
+ else {
64
+ // eslint-disable-next-line no-console
65
+ console.error(message);
66
+ }
67
+ }
68
+ await instance.raw('CREATE INDEX IF NOT EXISTS idx_content_items_alias_of_id ON content_items(alias_of_id)');
69
+ }
@@ -0,0 +1,46 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Adds the `content_items.dedupe_cap_event_id` column to archives created
4
+ * before this feature.
5
+ *
6
+ * `content_items` is provisioned via a bare `CREATE TABLE IF NOT EXISTS` in
7
+ * {@link import('./create-entity-tables.js').createEntityTables}, which
8
+ * self-heals a *missing table* on every `initSchema` call but is a no-op
9
+ * against an *existing* table — adding a column to the DDL string never
10
+ * reaches an archive whose `content_items` predates this change. This
11
+ * mirrors {@link import('./migrate-content-items-alias-of-id.js').migrateContentItemsAliasOfId}'s
12
+ * catch-up: a `hasColumn`-guarded `ALTER TABLE` for the one column
13
+ * `CREATE TABLE IF NOT EXISTS` cannot retrofit.
14
+ *
15
+ * Uses a raw `ALTER TABLE` (not the knex schema builder) so the retrofitted
16
+ * column's `REFERENCES dedupe_cap_events(id) DEFERRABLE INITIALLY DEFERRED`
17
+ * constraint matches the fresh-archive DDL bit-for-bit.
18
+ *
19
+ * Unlike `migrateContentItemsAliasOfId`, this migration never creates an
20
+ * index for the column — `--dedupe-cap` is opt-in and the number of rows a
21
+ * cap event ever marks is small (capped shapes × matching URLs), so there is
22
+ * no measured hot path to justify one. See `createEntityTables`'s DDL
23
+ * comment for the same reasoning.
24
+ *
25
+ * Only adds the column — it does not compute values for existing rows (they
26
+ * stay `NULL`). That computation runs separately, from
27
+ * `backfillDedupeCapEventId` during a viewer-read-model build, since it
28
+ * requires recomputing `computeShapeKey` against every internal page's URL
29
+ * and matching it against `dedupe_cap_events.shape_key`.
30
+ *
31
+ * Idempotent: adding the column is a no-op once it exists. Guards on
32
+ * `content_items`'s existence defensively, though by the time this runs
33
+ * (after `initSchema`, itself after `assertCompatibleVersion` rejects
34
+ * pre-0.13 archives) the table is always present.
35
+ * @param instance - The Knex query builder instance connected to the database.
36
+ * @param onLog - Called instead of `console.error` when this migration
37
+ * actually applies (issue #294: a bare `console.error` here can fire
38
+ * while a `@d-zero/dealer` `Lanes`/`TaskList` display is mid-redraw during
39
+ * `Archive.open`, corrupting its cursor tracking). Falls back to
40
+ * `console.error` when omitted (direct/test callers).
41
+ * @example
42
+ * ```ts
43
+ * await migrateContentItemsDedupeCapEventId(knex);
44
+ * ```
45
+ */
46
+ export declare function migrateContentItemsDedupeCapEventId(instance: Knex, onLog?: (message: string) => void): Promise<void>;
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Adds the `content_items.dedupe_cap_event_id` column to archives created
3
+ * before this feature.
4
+ *
5
+ * `content_items` is provisioned via a bare `CREATE TABLE IF NOT EXISTS` in
6
+ * {@link import('./create-entity-tables.js').createEntityTables}, which
7
+ * self-heals a *missing table* on every `initSchema` call but is a no-op
8
+ * against an *existing* table — adding a column to the DDL string never
9
+ * reaches an archive whose `content_items` predates this change. This
10
+ * mirrors {@link import('./migrate-content-items-alias-of-id.js').migrateContentItemsAliasOfId}'s
11
+ * catch-up: a `hasColumn`-guarded `ALTER TABLE` for the one column
12
+ * `CREATE TABLE IF NOT EXISTS` cannot retrofit.
13
+ *
14
+ * Uses a raw `ALTER TABLE` (not the knex schema builder) so the retrofitted
15
+ * column's `REFERENCES dedupe_cap_events(id) DEFERRABLE INITIALLY DEFERRED`
16
+ * constraint matches the fresh-archive DDL bit-for-bit.
17
+ *
18
+ * Unlike `migrateContentItemsAliasOfId`, this migration never creates an
19
+ * index for the column — `--dedupe-cap` is opt-in and the number of rows a
20
+ * cap event ever marks is small (capped shapes × matching URLs), so there is
21
+ * no measured hot path to justify one. See `createEntityTables`'s DDL
22
+ * comment for the same reasoning.
23
+ *
24
+ * Only adds the column — it does not compute values for existing rows (they
25
+ * stay `NULL`). That computation runs separately, from
26
+ * `backfillDedupeCapEventId` during a viewer-read-model build, since it
27
+ * requires recomputing `computeShapeKey` against every internal page's URL
28
+ * and matching it against `dedupe_cap_events.shape_key`.
29
+ *
30
+ * Idempotent: adding the column is a no-op once it exists. Guards on
31
+ * `content_items`'s existence defensively, though by the time this runs
32
+ * (after `initSchema`, itself after `assertCompatibleVersion` rejects
33
+ * pre-0.13 archives) the table is always present.
34
+ * @param instance - The Knex query builder instance connected to the database.
35
+ * @param onLog - Called instead of `console.error` when this migration
36
+ * actually applies (issue #294: a bare `console.error` here can fire
37
+ * while a `@d-zero/dealer` `Lanes`/`TaskList` display is mid-redraw during
38
+ * `Archive.open`, corrupting its cursor tracking). Falls back to
39
+ * `console.error` when omitted (direct/test callers).
40
+ * @example
41
+ * ```ts
42
+ * await migrateContentItemsDedupeCapEventId(knex);
43
+ * ```
44
+ */
45
+ export async function migrateContentItemsDedupeCapEventId(instance, onLog) {
46
+ const hasContentItems = await instance.schema.hasTable('content_items');
47
+ if (!hasContentItems) {
48
+ return;
49
+ }
50
+ const hasColumn = await instance.schema.hasColumn('content_items', 'dedupe_cap_event_id');
51
+ if (!hasColumn) {
52
+ await instance.raw('ALTER TABLE content_items ADD COLUMN dedupe_cap_event_id INTEGER REFERENCES dedupe_cap_events(id) DEFERRABLE INITIALLY DEFERRED');
53
+ const message = '[migrate] content_items.dedupe_cap_event_id column added';
54
+ if (onLog) {
55
+ onLog(message);
56
+ }
57
+ else {
58
+ // eslint-disable-next-line no-console
59
+ console.error(message);
60
+ }
61
+ }
62
+ }
@@ -0,0 +1,44 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Adds the `content_items.is_metadata_only` column to archives created
4
+ * before this feature.
5
+ *
6
+ * `content_items` is provisioned via a bare `CREATE TABLE IF NOT EXISTS` in
7
+ * {@link import('./create-entity-tables.js').createEntityTables}, which
8
+ * self-heals a *missing table* on every `initSchema` call but is a no-op
9
+ * against an *existing* table — adding a column to the DDL string never
10
+ * reaches an archive whose `content_items` predates this change. This
11
+ * mirrors {@link import('./migrate-content-items-dedupe-cap-event-id.js').migrateContentItemsDedupeCapEventId}'s
12
+ * catch-up: a `hasColumn`-guarded `ALTER TABLE` for the one column
13
+ * `CREATE TABLE IF NOT EXISTS` cannot retrofit.
14
+ *
15
+ * Unlike that migration, this column is `NOT NULL DEFAULT 0` (not nullable):
16
+ * SQLite requires a `DEFAULT` on `ALTER TABLE ... ADD COLUMN ... NOT NULL`,
17
+ * and the fresh-archive DDL carries the same `DEFAULT 0` so both paths stay
18
+ * bit-for-bit identical (see `createEntityTables`'s DDL comment). Existing
19
+ * rows backfill to `0` (not metadata-only) — a strict-pending row from
20
+ * before this migration was always resumed as a full-scrape target anyway
21
+ * (the bug this column fixes), so `0` preserves that prior behaviour rather
22
+ * than silently reclassifying already-crawled archives.
23
+ *
24
+ * No index: the only reader (`getCrawlingState`) already filters to
25
+ * `scraped = 0 AND is_external = 0` first, a small set. See
26
+ * `createEntityTables`'s DDL comment for the same "no speculative index"
27
+ * reasoning applied to `dedupe_cap_event_id`.
28
+ *
29
+ * Idempotent: adding the column is a no-op once it exists. Guards on
30
+ * `content_items`'s existence defensively, though by the time this runs
31
+ * (after `initSchema`, itself after `assertCompatibleVersion` rejects
32
+ * pre-0.13 archives) the table is always present.
33
+ * @param instance - The Knex query builder instance connected to the database.
34
+ * @param onLog - Called instead of `console.error` when this migration
35
+ * actually applies (issue #294: a bare `console.error` here can fire
36
+ * while a `@d-zero/dealer` `Lanes`/`TaskList` display is mid-redraw during
37
+ * `Archive.open`, corrupting its cursor tracking). Falls back to
38
+ * `console.error` when omitted (direct/test callers).
39
+ * @example
40
+ * ```ts
41
+ * await migrateContentItemsIsMetadataOnly(knex);
42
+ * ```
43
+ */
44
+ export declare function migrateContentItemsIsMetadataOnly(instance: Knex, onLog?: (message: string) => void): Promise<void>;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Adds the `content_items.is_metadata_only` column to archives created
3
+ * before this feature.
4
+ *
5
+ * `content_items` is provisioned via a bare `CREATE TABLE IF NOT EXISTS` in
6
+ * {@link import('./create-entity-tables.js').createEntityTables}, which
7
+ * self-heals a *missing table* on every `initSchema` call but is a no-op
8
+ * against an *existing* table — adding a column to the DDL string never
9
+ * reaches an archive whose `content_items` predates this change. This
10
+ * mirrors {@link import('./migrate-content-items-dedupe-cap-event-id.js').migrateContentItemsDedupeCapEventId}'s
11
+ * catch-up: a `hasColumn`-guarded `ALTER TABLE` for the one column
12
+ * `CREATE TABLE IF NOT EXISTS` cannot retrofit.
13
+ *
14
+ * Unlike that migration, this column is `NOT NULL DEFAULT 0` (not nullable):
15
+ * SQLite requires a `DEFAULT` on `ALTER TABLE ... ADD COLUMN ... NOT NULL`,
16
+ * and the fresh-archive DDL carries the same `DEFAULT 0` so both paths stay
17
+ * bit-for-bit identical (see `createEntityTables`'s DDL comment). Existing
18
+ * rows backfill to `0` (not metadata-only) — a strict-pending row from
19
+ * before this migration was always resumed as a full-scrape target anyway
20
+ * (the bug this column fixes), so `0` preserves that prior behaviour rather
21
+ * than silently reclassifying already-crawled archives.
22
+ *
23
+ * No index: the only reader (`getCrawlingState`) already filters to
24
+ * `scraped = 0 AND is_external = 0` first, a small set. See
25
+ * `createEntityTables`'s DDL comment for the same "no speculative index"
26
+ * reasoning applied to `dedupe_cap_event_id`.
27
+ *
28
+ * Idempotent: adding the column is a no-op once it exists. Guards on
29
+ * `content_items`'s existence defensively, though by the time this runs
30
+ * (after `initSchema`, itself after `assertCompatibleVersion` rejects
31
+ * pre-0.13 archives) the table is always present.
32
+ * @param instance - The Knex query builder instance connected to the database.
33
+ * @param onLog - Called instead of `console.error` when this migration
34
+ * actually applies (issue #294: a bare `console.error` here can fire
35
+ * while a `@d-zero/dealer` `Lanes`/`TaskList` display is mid-redraw during
36
+ * `Archive.open`, corrupting its cursor tracking). Falls back to
37
+ * `console.error` when omitted (direct/test callers).
38
+ * @example
39
+ * ```ts
40
+ * await migrateContentItemsIsMetadataOnly(knex);
41
+ * ```
42
+ */
43
+ export async function migrateContentItemsIsMetadataOnly(instance, onLog) {
44
+ const hasContentItems = await instance.schema.hasTable('content_items');
45
+ if (!hasContentItems) {
46
+ return;
47
+ }
48
+ const hasColumn = await instance.schema.hasColumn('content_items', 'is_metadata_only');
49
+ if (!hasColumn) {
50
+ await instance.raw('ALTER TABLE content_items ADD COLUMN is_metadata_only INTEGER NOT NULL DEFAULT 0');
51
+ const message = '[migrate] content_items.is_metadata_only column added';
52
+ if (onLog) {
53
+ onLog(message);
54
+ }
55
+ else {
56
+ // eslint-disable-next-line no-console
57
+ console.error(message);
58
+ }
59
+ }
60
+ }
@@ -0,0 +1,55 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Adds the 0.13 entity / edge tables (issue #192) to archives created
4
+ * before the 0.13 format.
5
+ *
6
+ * These are the 6 core normalised tables (`content_items`, `page_meta`,
7
+ * `resource_items`, `anchor_edges`, `resource_ref_edges`, `image_items`) that
8
+ * replace the legacy write model in the 0.13 format. Fresh archives get
9
+ * them via `initSchema`; this migration is called only by
10
+ * `scripts/migrate-to-0.13.mjs` as its schema catch-up step for pre-0.13
11
+ * input archives. The archive-open path (`db-ops/lifecycle/init.ts`) does
12
+ * not run it — `assertCompatibleVersion` guarantees every openable
13
+ * archive already has the full table set.
14
+ *
15
+ * The migration is intentionally table-only. It does not back-fill any data
16
+ * from `pages` / `resources` / `anchors` / `images` — that is the job of the
17
+ * population steps (`populateRefTables` + `populateEntityTables`), which
18
+ * read from the legacy tables and write
19
+ * the entity rows in a single WAL transaction with `.bak` protection. This
20
+ * migration only guarantees the empty tables exist so the populate step can
21
+ * INSERT into them without hitting `SQLITE_ERROR: no such table:
22
+ * content_items`.
23
+ *
24
+ * **Blocked-by contract**: `createEntityTables` references the
25
+ * 0.13 ref tables (`url_refs`, `content_type_refs`, `text_refs`,
26
+ * `json_refs`, `blob_refs`, `header_sets`) via `REFERENCES`. On an
27
+ * existing archive, `migrateRefTables` MUST have run first so the
28
+ * ref tables exist by the time this migration is applied.
29
+ * `scripts/migrate-to-0.13.mjs` orders the two calls statically so this
30
+ * ordering is enforced there, not here.
31
+ *
32
+ * `content_items` also declares `dedupe_cap_event_id REFERENCES
33
+ * dedupe_cap_events(id)` — an adjunct table (`createAdjunctTables`), not a
34
+ * ref table. This function only creates the empty tables (schema-only, see
35
+ * above), so it does not itself need `dedupe_cap_events` to exist. Callers
36
+ * that write data into `content_items` afterward do: under `PRAGMA
37
+ * foreign_keys = ON`, SQLite refuses to even prepare an INSERT/UPDATE
38
+ * against a table with an unresolvable `REFERENCES` target, so
39
+ * `scripts/migrate-to-0.13.mjs` creates adjunct tables immediately after
40
+ * this migration and before any entity-table data write.
41
+ *
42
+ * **Idempotency**: `createEntityTables` itself uses
43
+ * `CREATE TABLE IF NOT EXISTS` / `CREATE INDEX IF NOT EXISTS` for every
44
+ * statement, so calling it multiple times against any DB state is safe.
45
+ * That means this wrapper does not need a defensive sentinel — the
46
+ * "content_items exists but page_meta was dropped externally" partial-
47
+ * corruption case is fully repaired on next open because every CREATE
48
+ * statement individually checks its own existence. The one thing the
49
+ * wrapper adds beyond the primitive is a log line, which we still want
50
+ * to emit only when creation actually happened, so we probe
51
+ * `content_items` first and short-circuit when the schema is already
52
+ * fully installed.
53
+ * @param instance - The Knex query builder instance connected to the database.
54
+ */
55
+ export declare function migrateEntityTables(instance: Knex): Promise<void>;
@@ -0,0 +1,66 @@
1
+ import { createEntityTables } from './create-entity-tables.js';
2
+ /**
3
+ * Adds the 0.13 entity / edge tables (issue #192) to archives created
4
+ * before the 0.13 format.
5
+ *
6
+ * These are the 6 core normalised tables (`content_items`, `page_meta`,
7
+ * `resource_items`, `anchor_edges`, `resource_ref_edges`, `image_items`) that
8
+ * replace the legacy write model in the 0.13 format. Fresh archives get
9
+ * them via `initSchema`; this migration is called only by
10
+ * `scripts/migrate-to-0.13.mjs` as its schema catch-up step for pre-0.13
11
+ * input archives. The archive-open path (`db-ops/lifecycle/init.ts`) does
12
+ * not run it — `assertCompatibleVersion` guarantees every openable
13
+ * archive already has the full table set.
14
+ *
15
+ * The migration is intentionally table-only. It does not back-fill any data
16
+ * from `pages` / `resources` / `anchors` / `images` — that is the job of the
17
+ * population steps (`populateRefTables` + `populateEntityTables`), which
18
+ * read from the legacy tables and write
19
+ * the entity rows in a single WAL transaction with `.bak` protection. This
20
+ * migration only guarantees the empty tables exist so the populate step can
21
+ * INSERT into them without hitting `SQLITE_ERROR: no such table:
22
+ * content_items`.
23
+ *
24
+ * **Blocked-by contract**: `createEntityTables` references the
25
+ * 0.13 ref tables (`url_refs`, `content_type_refs`, `text_refs`,
26
+ * `json_refs`, `blob_refs`, `header_sets`) via `REFERENCES`. On an
27
+ * existing archive, `migrateRefTables` MUST have run first so the
28
+ * ref tables exist by the time this migration is applied.
29
+ * `scripts/migrate-to-0.13.mjs` orders the two calls statically so this
30
+ * ordering is enforced there, not here.
31
+ *
32
+ * `content_items` also declares `dedupe_cap_event_id REFERENCES
33
+ * dedupe_cap_events(id)` — an adjunct table (`createAdjunctTables`), not a
34
+ * ref table. This function only creates the empty tables (schema-only, see
35
+ * above), so it does not itself need `dedupe_cap_events` to exist. Callers
36
+ * that write data into `content_items` afterward do: under `PRAGMA
37
+ * foreign_keys = ON`, SQLite refuses to even prepare an INSERT/UPDATE
38
+ * against a table with an unresolvable `REFERENCES` target, so
39
+ * `scripts/migrate-to-0.13.mjs` creates adjunct tables immediately after
40
+ * this migration and before any entity-table data write.
41
+ *
42
+ * **Idempotency**: `createEntityTables` itself uses
43
+ * `CREATE TABLE IF NOT EXISTS` / `CREATE INDEX IF NOT EXISTS` for every
44
+ * statement, so calling it multiple times against any DB state is safe.
45
+ * That means this wrapper does not need a defensive sentinel — the
46
+ * "content_items exists but page_meta was dropped externally" partial-
47
+ * corruption case is fully repaired on next open because every CREATE
48
+ * statement individually checks its own existence. The one thing the
49
+ * wrapper adds beyond the primitive is a log line, which we still want
50
+ * to emit only when creation actually happened, so we probe
51
+ * `content_items` first and short-circuit when the schema is already
52
+ * fully installed.
53
+ * @param instance - The Knex query builder instance connected to the database.
54
+ */
55
+ export async function migrateEntityTables(instance) {
56
+ const hasContentItems = await instance.schema.hasTable('content_items');
57
+ if (hasContentItems) {
58
+ // Fast path: fully installed. `createEntityTables` would
59
+ // still be a safe no-op, but re-running it just to be defensive
60
+ // wastes 15 IF NOT EXISTS round-trips on every archive open.
61
+ return;
62
+ }
63
+ await createEntityTables(instance);
64
+ // eslint-disable-next-line no-console
65
+ console.error('[migrate] 0.13 entity/edge tables created');
66
+ }
@@ -0,0 +1,17 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Adds the `info.createdCwd` column to archives created before it existed.
4
+ * `CREATE TABLE IF NOT EXISTS` (used for `info` itself) cannot retrofit a new
5
+ * column onto an already-existing table, so this lightweight,
6
+ * `hasColumn`-guarded `ALTER TABLE` runs on every `initSchema` call —
7
+ * idempotent, and self-healing for archives whose provisioning crashed
8
+ * partway through. A stub missing this column simply falls back to
9
+ * `Archive.resume`'s own `process.cwd()`, same as before this column existed.
10
+ * @param instance - The Knex query builder instance connected to the database.
11
+ * @param onLog - Called instead of `console.error` when this migration
12
+ * actually applies (issue #294: a bare `console.error` here can fire
13
+ * while a `@d-zero/dealer` `Lanes`/`TaskList` display is mid-redraw during
14
+ * `Archive.open`, corrupting its cursor tracking). Falls back to
15
+ * `console.error` when omitted (direct/test callers).
16
+ */
17
+ export declare function migrateInfoCreatedCwd(instance: Knex, onLog?: (message: string) => void): Promise<void>;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Adds the `info.createdCwd` column to archives created before it existed.
3
+ * `CREATE TABLE IF NOT EXISTS` (used for `info` itself) cannot retrofit a new
4
+ * column onto an already-existing table, so this lightweight,
5
+ * `hasColumn`-guarded `ALTER TABLE` runs on every `initSchema` call —
6
+ * idempotent, and self-healing for archives whose provisioning crashed
7
+ * partway through. A stub missing this column simply falls back to
8
+ * `Archive.resume`'s own `process.cwd()`, same as before this column existed.
9
+ * @param instance - The Knex query builder instance connected to the database.
10
+ * @param onLog - Called instead of `console.error` when this migration
11
+ * actually applies (issue #294: a bare `console.error` here can fire
12
+ * while a `@d-zero/dealer` `Lanes`/`TaskList` display is mid-redraw during
13
+ * `Archive.open`, corrupting its cursor tracking). Falls back to
14
+ * `console.error` when omitted (direct/test callers).
15
+ */
16
+ export async function migrateInfoCreatedCwd(instance, onLog) {
17
+ const hasInfo = await instance.schema.hasTable('info');
18
+ if (!hasInfo) {
19
+ return;
20
+ }
21
+ const hasColumn = await instance.schema.hasColumn('info', 'createdCwd');
22
+ if (hasColumn) {
23
+ return;
24
+ }
25
+ await instance.schema.table('info', (t) => {
26
+ t.string('createdCwd');
27
+ });
28
+ const message = '[migrate] info.createdCwd column added';
29
+ if (onLog) {
30
+ onLog(message);
31
+ }
32
+ else {
33
+ // eslint-disable-next-line no-console
34
+ console.error(message);
35
+ }
36
+ }
@@ -0,0 +1,16 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Adds the `info.mainContentSelector` column to archives created before it
4
+ * existed. `CREATE TABLE IF NOT EXISTS` (used for `info` itself) cannot
5
+ * retrofit a new column onto an already-existing table, so this lightweight,
6
+ * `hasColumn`-guarded `ALTER TABLE` runs on every `initSchema` call —
7
+ * idempotent, and self-healing for archives whose provisioning crashed
8
+ * partway through.
9
+ * @param instance - The Knex query builder instance connected to the database.
10
+ * @param onLog - Called instead of `console.error` when this migration
11
+ * actually applies (issue #294: a bare `console.error` here can fire
12
+ * while a `@d-zero/dealer` `Lanes`/`TaskList` display is mid-redraw during
13
+ * `Archive.open`, corrupting its cursor tracking). Falls back to
14
+ * `console.error` when omitted (direct/test callers).
15
+ */
16
+ export declare function migrateInfoMainContentSelector(instance: Knex, onLog?: (message: string) => void): Promise<void>;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Adds the `info.mainContentSelector` column to archives created before it
3
+ * existed. `CREATE TABLE IF NOT EXISTS` (used for `info` itself) cannot
4
+ * retrofit a new column onto an already-existing table, so this lightweight,
5
+ * `hasColumn`-guarded `ALTER TABLE` runs on every `initSchema` call —
6
+ * idempotent, and self-healing for archives whose provisioning crashed
7
+ * partway through.
8
+ * @param instance - The Knex query builder instance connected to the database.
9
+ * @param onLog - Called instead of `console.error` when this migration
10
+ * actually applies (issue #294: a bare `console.error` here can fire
11
+ * while a `@d-zero/dealer` `Lanes`/`TaskList` display is mid-redraw during
12
+ * `Archive.open`, corrupting its cursor tracking). Falls back to
13
+ * `console.error` when omitted (direct/test callers).
14
+ */
15
+ export async function migrateInfoMainContentSelector(instance, onLog) {
16
+ const hasInfo = await instance.schema.hasTable('info');
17
+ if (!hasInfo) {
18
+ return;
19
+ }
20
+ const hasColumn = await instance.schema.hasColumn('info', 'mainContentSelector');
21
+ if (hasColumn) {
22
+ return;
23
+ }
24
+ await instance.schema.table('info', (t) => {
25
+ t.string('mainContentSelector');
26
+ });
27
+ const message = '[migrate] info.mainContentSelector column added';
28
+ if (onLog) {
29
+ onLog(message);
30
+ }
31
+ else {
32
+ // eslint-disable-next-line no-console
33
+ console.error(message);
34
+ }
35
+ }
@@ -0,0 +1,16 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Adds the `info.requestHeaderNames` column to archives created before it
4
+ * existed. `CREATE TABLE IF NOT EXISTS` (used for `info` itself) cannot
5
+ * retrofit a new column onto an already-existing table, so this lightweight,
6
+ * `hasColumn`-guarded `ALTER TABLE` runs on every `initSchema` call —
7
+ * idempotent, and self-healing for archives whose provisioning crashed
8
+ * partway through.
9
+ * @param instance - The Knex query builder instance connected to the database.
10
+ * @param onLog - Called instead of `console.error` when this migration
11
+ * actually applies (issue #294: a bare `console.error` here can fire
12
+ * while a `@d-zero/dealer` `Lanes`/`TaskList` display is mid-redraw during
13
+ * `Archive.open`, corrupting its cursor tracking). Falls back to
14
+ * `console.error` when omitted (direct/test callers).
15
+ */
16
+ export declare function migrateInfoRequestHeaderNames(instance: Knex, onLog?: (message: string) => void): Promise<void>;