@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,134 @@
1
+ import { zstdCompressSync } from 'node:zlib';
2
+ import { createProgressReporter } from '../create-progress-reporter.js';
3
+ import { computeContentHash } from './compute-content-hash.js';
4
+ import { DATA_URI_URL_REFS_LIMIT } from './data-uri-url-refs-limit.js';
5
+ import { decodeDataUri } from './decode-data-uri.js';
6
+ /** Rows scanned per `SELECT`. See `populateTextRefs` for chunking rationale. */
7
+ const READ_CHUNK_SIZE = 2000;
8
+ /**
9
+ * Rows written per `INSERT`. blob_refs rows carry a compressed body BLOB
10
+ * so 100 rows keeps the total payload of a single INSERT statement well
11
+ * under WAL frame limits even for large SVGs.
12
+ */
13
+ const INSERT_CHUNK_SIZE = 100;
14
+ /**
15
+ * Source table + its URL-shaped column(s) that may hold a data URI large
16
+ * enough to route to `blob_refs`. `resources.url` is the resource's own
17
+ * identity (unlike `pages`/`content_items`, whose own URL is always a
18
+ * real http(s) address in practice) — a `<link>`/CSS sub-resource can
19
+ * legally be captured as an inline `data:` URI.
20
+ */
21
+ const URL_SOURCES = [
22
+ { table: 'images', columns: ['src', 'currentSrc'] },
23
+ { table: 'resources', columns: ['url'] },
24
+ ];
25
+ /**
26
+ * Populates `blob_refs` from every `images.src` / `images.currentSrc` /
27
+ * `resources.url` value that is a data URI longer than
28
+ * {@link DATA_URI_URL_REFS_LIMIT} bytes (issue #191).
29
+ *
30
+ * For each such value:
31
+ *
32
+ * 1. `decodeDataUri` strips the `data:...;base64,` (or `data:...,`) prefix
33
+ * and returns the raw payload bytes.
34
+ * 2. `computeContentHash` hashes the payload bytes (32-byte SHA-256).
35
+ * 3. The payload is zstd-compressed (`codec='zstd'`) — matching
36
+ * `page_html_blobs` / `json_refs`.
37
+ * 4. `INSERT OR IGNORE` on `hash` deduplicates: an `<img>` element and a
38
+ * resource that share the same underlying base64 payload share one
39
+ * `blob_refs` row.
40
+ *
41
+ * Malformed data URIs that `decodeDataUri` cannot decode are logged and
42
+ * skipped — the raw URI string still exists in the source row, and the
43
+ * migration script's operator can hunt it down from the warning log. The
44
+ * alternative — routing malformed large URIs back to `url_refs` — would
45
+ * break the "data URIs > threshold live in blob_refs" contract that 0.13
46
+ * lookups depend on.
47
+ *
48
+ * On the reference archive only ~429 images use data URIs, so the total
49
+ * dictionary is tiny — this step is I/O-cheap even without full
50
+ * chunking, but the same batching shape is used as elsewhere for
51
+ * consistency.
52
+ * @param trx - Knex instance or transaction connected to the archive DB.
53
+ * @param onProgress - Optional sink for periodic progress lines (one per
54
+ * ~5% of each source table scanned); see {@link ../create-progress-reporter.ts}.
55
+ * @example
56
+ * await knex.transaction(async (trx) => {
57
+ * await populateBlobRefs(trx);
58
+ * });
59
+ */
60
+ export async function populateBlobRefs(trx, onProgress) {
61
+ const seen = new Set();
62
+ const pending = [];
63
+ for (const source of URL_SOURCES) {
64
+ const hasTable = await trx.schema.hasTable(source.table);
65
+ if (!hasTable) {
66
+ continue;
67
+ }
68
+ const presentColumns = [];
69
+ for (const column of source.columns) {
70
+ if (await trx.schema.hasColumn(source.table, column)) {
71
+ presentColumns.push(column);
72
+ }
73
+ }
74
+ if (presentColumns.length === 0) {
75
+ continue;
76
+ }
77
+ const countRows = await trx(source.table).count({ n: '*' });
78
+ const total = Number(countRows[0]?.n ?? 0);
79
+ const report = createProgressReporter(`blob_refs (${source.table})`, total, onProgress);
80
+ let processed = 0;
81
+ let cursor = 0;
82
+ while (true) {
83
+ const rows = await trx(source.table)
84
+ .select('id', ...presentColumns)
85
+ .where('id', '>', cursor)
86
+ .orderBy('id', 'asc')
87
+ .limit(READ_CHUNK_SIZE);
88
+ if (rows.length === 0) {
89
+ break;
90
+ }
91
+ cursor = rows.at(-1).id;
92
+ processed += rows.length;
93
+ report(processed);
94
+ for (const row of rows) {
95
+ for (const column of presentColumns) {
96
+ const value = row[column];
97
+ if (value == null || value.length <= DATA_URI_URL_REFS_LIMIT) {
98
+ continue;
99
+ }
100
+ if (!value.startsWith('data:')) {
101
+ continue;
102
+ }
103
+ const decoded = decodeDataUri(value);
104
+ if (decoded === null) {
105
+ // eslint-disable-next-line no-console
106
+ console.warn(`populateBlobRefs: skipping malformed data URI (length=${value.length}) — raw string still exists in ${source.table} row`);
107
+ continue;
108
+ }
109
+ const hash = computeContentHash(decoded.bytes);
110
+ const hex = hash.toString('hex');
111
+ if (seen.has(hex)) {
112
+ continue;
113
+ }
114
+ seen.add(hex);
115
+ const compressed = zstdCompressSync(decoded.bytes);
116
+ pending.push({
117
+ hash,
118
+ body: compressed,
119
+ codec: 'zstd',
120
+ size_raw: decoded.bytes.byteLength,
121
+ size_stored: compressed.byteLength,
122
+ });
123
+ if (pending.length >= INSERT_CHUNK_SIZE) {
124
+ await trx('blob_refs').insert(pending).onConflict('hash').ignore();
125
+ pending.length = 0;
126
+ }
127
+ }
128
+ }
129
+ }
130
+ }
131
+ if (pending.length > 0) {
132
+ await trx('blob_refs').insert(pending).onConflict('hash').ignore();
133
+ }
134
+ }
@@ -0,0 +1,27 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Populates `content_type_refs` from every distinct `contentType` value
4
+ * currently stored in `pages` and `resources` (issue #191).
5
+ *
6
+ * Two independent DISTINCT SELECTs (one per table) are merged in JS
7
+ * rather than via SQL `UNION` — the cardinality is small in practice and
8
+ * doing it in JS avoids the knex-`union().select()` column-aliasing
9
+ * quirk (bare `.select()` on a union wraps in `SELECT *` and can lose
10
+ * the column name depending on driver version). Two per-table SELECTs
11
+ * are also fast because `contentType` is indexed on both tables via
12
+ * `idx_pages_listfilter` / natural column index (see `init-schema.ts`).
13
+ *
14
+ * `normalized` and `category` are derived in JS via {@link classifyContentType}
15
+ * so the rule table stays in one place; SQLite has no equivalent
16
+ * expression.
17
+ *
18
+ * `INSERT OR IGNORE` on the natural key `raw` makes this idempotent —
19
+ * re-running this populate after a partial failure never duplicates
20
+ * rows, only appends the new ones.
21
+ * @param trx - Knex instance or transaction connected to the archive DB.
22
+ * @example
23
+ * await knex.transaction(async (trx) => {
24
+ * await populateContentTypeRefs(trx);
25
+ * });
26
+ */
27
+ export declare function populateContentTypeRefs(trx: Knex): Promise<void>;
@@ -0,0 +1,70 @@
1
+ import { classifyContentType } from './classify-content-type.js';
2
+ import { normalizeMime } from './normalize-mime.js';
3
+ /**
4
+ * Distinct-`contentType` rows are collected from `pages` + `resources` in
5
+ * chunks of this size before being written into `content_type_refs`. The
6
+ * DISTINCT list is expected to be tiny (< 1000 rows even on the largest
7
+ * archives — the wire content-type space is small) so the chunk size only
8
+ * bounds worst-case parameter counts on `INSERT ... VALUES ...`.
9
+ */
10
+ const INSERT_CHUNK_SIZE = 500;
11
+ /**
12
+ * Populates `content_type_refs` from every distinct `contentType` value
13
+ * currently stored in `pages` and `resources` (issue #191).
14
+ *
15
+ * Two independent DISTINCT SELECTs (one per table) are merged in JS
16
+ * rather than via SQL `UNION` — the cardinality is small in practice and
17
+ * doing it in JS avoids the knex-`union().select()` column-aliasing
18
+ * quirk (bare `.select()` on a union wraps in `SELECT *` and can lose
19
+ * the column name depending on driver version). Two per-table SELECTs
20
+ * are also fast because `contentType` is indexed on both tables via
21
+ * `idx_pages_listfilter` / natural column index (see `init-schema.ts`).
22
+ *
23
+ * `normalized` and `category` are derived in JS via {@link classifyContentType}
24
+ * so the rule table stays in one place; SQLite has no equivalent
25
+ * expression.
26
+ *
27
+ * `INSERT OR IGNORE` on the natural key `raw` makes this idempotent —
28
+ * re-running this populate after a partial failure never duplicates
29
+ * rows, only appends the new ones.
30
+ * @param trx - Knex instance or transaction connected to the archive DB.
31
+ * @example
32
+ * await knex.transaction(async (trx) => {
33
+ * await populateContentTypeRefs(trx);
34
+ * });
35
+ */
36
+ export async function populateContentTypeRefs(trx) {
37
+ const distinctRaw = new Set();
38
+ if (await trx.schema.hasTable('pages')) {
39
+ const pagesRows = await trx('pages')
40
+ .distinct('contentType')
41
+ .whereNotNull('contentType');
42
+ for (const { contentType } of pagesRows) {
43
+ if (contentType != null && contentType !== '') {
44
+ distinctRaw.add(contentType);
45
+ }
46
+ }
47
+ }
48
+ if (await trx.schema.hasTable('resources')) {
49
+ const resourcesRows = await trx('resources')
50
+ .distinct('contentType')
51
+ .whereNotNull('contentType');
52
+ for (const { contentType } of resourcesRows) {
53
+ if (contentType != null && contentType !== '') {
54
+ distinctRaw.add(contentType);
55
+ }
56
+ }
57
+ }
58
+ if (distinctRaw.size === 0) {
59
+ return;
60
+ }
61
+ const inserts = [...distinctRaw].map((raw) => ({
62
+ raw,
63
+ normalized: normalizeMime(raw),
64
+ category: classifyContentType(raw),
65
+ }));
66
+ for (let index = 0; index < inserts.length; index += INSERT_CHUNK_SIZE) {
67
+ const chunk = inserts.slice(index, index + INSERT_CHUNK_SIZE);
68
+ await trx('content_type_refs').insert(chunk).onConflict('raw').ignore();
69
+ }
70
+ }
@@ -0,0 +1,35 @@
1
+ import type { ProgressCallback } from '../create-progress-reporter.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Populates the five header decomposition tables (`header_name_refs`,
5
+ * `header_value_refs`, `header_sets`, `header_set_entries`,
6
+ * `header_flags`) from every `pages.responseHeaders` and
7
+ * `resources.responseHeaders` JSON blob (issue #191).
8
+ *
9
+ * Strategy:
10
+ *
11
+ * 1. **Warm caches** via {@link ./create-header-table-caches.ts} — load
12
+ * existing `header_name_refs`, `header_value_refs`, and `header_sets`
13
+ * rows into id maps. Idempotent re-runs then reuse ids instead of
14
+ * re-issuing an upsert per entry, and new ids are appended as they
15
+ * are inserted.
16
+ * 2. **Stream `pages.responseHeaders` + `resources.responseHeaders`** in
17
+ * id-keyset chunks. Each non-null value is decomposed via
18
+ * {@link decomposeHeaderSet} and written via
19
+ * {@link ./upsert-one-header-set.ts} — the same per-set primitive the
20
+ * crawler's live write path uses, so migrated and live-crawled
21
+ * archives produce identical header rows.
22
+ *
23
+ * Every write is bulk-batched so the migration stays O(chunks × per-
24
+ * chunk-distinct-decomposed-sets) round-trips against the DB. Idempotency
25
+ * across full re-runs is guaranteed by the `INSERT OR IGNORE`s and the
26
+ * `setIdsProcessedThisRun` guard inside the per-set upsert.
27
+ * @param trx - Knex instance or transaction connected to the archive DB.
28
+ * @param onProgress - Optional sink for periodic progress lines (one per
29
+ * ~5% of each source table scanned); see {@link ../create-progress-reporter.ts}.
30
+ * @example
31
+ * await knex.transaction(async (trx) => {
32
+ * await populateHeaderTables(trx);
33
+ * });
34
+ */
35
+ export declare function populateHeaderTables(trx: Knex, onProgress?: ProgressCallback): Promise<void>;
@@ -0,0 +1,80 @@
1
+ import { createProgressReporter } from '../create-progress-reporter.js';
2
+ import { createHeaderTableCaches } from './create-header-table-caches.js';
3
+ import { decomposeHeaderSet } from './decompose-header-set.js';
4
+ import { upsertOneHeaderSet } from './upsert-one-header-set.js';
5
+ /**
6
+ * Rows scanned per SELECT chunk against `pages.responseHeaders` /
7
+ * `resources.responseHeaders`. Keyset-paginated on `id` to avoid loading
8
+ * a 470k-row `responseHeaders` column into a single query result.
9
+ */
10
+ const READ_CHUNK_SIZE = 500;
11
+ /**
12
+ * Populates the five header decomposition tables (`header_name_refs`,
13
+ * `header_value_refs`, `header_sets`, `header_set_entries`,
14
+ * `header_flags`) from every `pages.responseHeaders` and
15
+ * `resources.responseHeaders` JSON blob (issue #191).
16
+ *
17
+ * Strategy:
18
+ *
19
+ * 1. **Warm caches** via {@link ./create-header-table-caches.ts} — load
20
+ * existing `header_name_refs`, `header_value_refs`, and `header_sets`
21
+ * rows into id maps. Idempotent re-runs then reuse ids instead of
22
+ * re-issuing an upsert per entry, and new ids are appended as they
23
+ * are inserted.
24
+ * 2. **Stream `pages.responseHeaders` + `resources.responseHeaders`** in
25
+ * id-keyset chunks. Each non-null value is decomposed via
26
+ * {@link decomposeHeaderSet} and written via
27
+ * {@link ./upsert-one-header-set.ts} — the same per-set primitive the
28
+ * crawler's live write path uses, so migrated and live-crawled
29
+ * archives produce identical header rows.
30
+ *
31
+ * Every write is bulk-batched so the migration stays O(chunks × per-
32
+ * chunk-distinct-decomposed-sets) round-trips against the DB. Idempotency
33
+ * across full re-runs is guaranteed by the `INSERT OR IGNORE`s and the
34
+ * `setIdsProcessedThisRun` guard inside the per-set upsert.
35
+ * @param trx - Knex instance or transaction connected to the archive DB.
36
+ * @param onProgress - Optional sink for periodic progress lines (one per
37
+ * ~5% of each source table scanned); see {@link ../create-progress-reporter.ts}.
38
+ * @example
39
+ * await knex.transaction(async (trx) => {
40
+ * await populateHeaderTables(trx);
41
+ * });
42
+ */
43
+ export async function populateHeaderTables(trx, onProgress) {
44
+ const caches = await createHeaderTableCaches(trx);
45
+ for (const table of ['pages', 'resources']) {
46
+ const hasTable = await trx.schema.hasTable(table);
47
+ if (!hasTable) {
48
+ continue;
49
+ }
50
+ const hasColumn = await trx.schema.hasColumn(table, 'responseHeaders');
51
+ if (!hasColumn) {
52
+ continue;
53
+ }
54
+ const countRows = await trx(table).count({ n: '*' });
55
+ const total = Number(countRows[0]?.n ?? 0);
56
+ const report = createProgressReporter(`header_tables (${table})`, total, onProgress);
57
+ let processed = 0;
58
+ let cursor = 0;
59
+ while (true) {
60
+ const rows = await trx(table)
61
+ .select('id', 'responseHeaders')
62
+ .where('id', '>', cursor)
63
+ .orderBy('id', 'asc')
64
+ .limit(READ_CHUNK_SIZE);
65
+ if (rows.length === 0) {
66
+ break;
67
+ }
68
+ cursor = rows.at(-1).id;
69
+ processed += rows.length;
70
+ report(processed);
71
+ for (const row of rows) {
72
+ const decomposed = decomposeHeaderSet(row.responseHeaders);
73
+ if (decomposed === null) {
74
+ continue;
75
+ }
76
+ await upsertOneHeaderSet(trx, decomposed, caches);
77
+ }
78
+ }
79
+ }
80
+ }
@@ -0,0 +1,29 @@
1
+ import type { ProgressCallback } from '../create-progress-reporter.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Populates `json_refs` from every non-null `pages.meta_extras` value
5
+ * (issue #191).
6
+ *
7
+ * Each value is:
8
+ *
9
+ * 1. Hashed with {@link computeContentHash} (32-byte SHA-256; see that
10
+ * function's docs for the algorithm-choice rationale).
11
+ * 2. Compressed with `zstdCompressSync` (`codec='zstd'`) — same encoder
12
+ * used by `page_html_blobs`.
13
+ * 3. Deduplicated by hash — identical raw JSON strings produce one row.
14
+ *
15
+ * `size_raw` records the uncompressed byte length (UTF-8) and
16
+ * `size_stored` records the compressed byte length; consumers can
17
+ * estimate compression savings without decompressing.
18
+ *
19
+ * `INSERT OR IGNORE` on `hash` makes the step idempotent across partial-
20
+ * failure restarts.
21
+ * @param trx - Knex instance or transaction connected to the archive DB.
22
+ * @param onProgress - Optional sink for periodic progress lines (one per
23
+ * ~5% of `pages` scanned); see {@link ../create-progress-reporter.ts}.
24
+ * @example
25
+ * await knex.transaction(async (trx) => {
26
+ * await populateJsonRefs(trx);
27
+ * });
28
+ */
29
+ export declare function populateJsonRefs(trx: Knex, onProgress?: ProgressCallback): Promise<void>;
@@ -0,0 +1,101 @@
1
+ import { zstdCompressSync } from 'node:zlib';
2
+ import { createProgressReporter } from '../create-progress-reporter.js';
3
+ import { computeContentHash } from './compute-content-hash.js';
4
+ /**
5
+ * Number of `json_refs` rows sent per INSERT. Each row binds 5 params
6
+ * (hash + json_text + codec + size_raw + size_stored). 200 rows = 1000
7
+ * params — comfortable margin under SQLite's default variable limit and
8
+ * bounds any one INSERT's compressed-blob payload total to a size that
9
+ * fits in one WAL frame.
10
+ */
11
+ const INSERT_CHUNK_SIZE = 200;
12
+ /**
13
+ * Rows scanned per source query. Same rationale as the other populators:
14
+ * streaming with keyset pagination on `id` avoids loading a 470k-row
15
+ * `meta_extras` column into a single result set.
16
+ */
17
+ const READ_CHUNK_SIZE = 1000;
18
+ /**
19
+ * Populates `json_refs` from every non-null `pages.meta_extras` value
20
+ * (issue #191).
21
+ *
22
+ * Each value is:
23
+ *
24
+ * 1. Hashed with {@link computeContentHash} (32-byte SHA-256; see that
25
+ * function's docs for the algorithm-choice rationale).
26
+ * 2. Compressed with `zstdCompressSync` (`codec='zstd'`) — same encoder
27
+ * used by `page_html_blobs`.
28
+ * 3. Deduplicated by hash — identical raw JSON strings produce one row.
29
+ *
30
+ * `size_raw` records the uncompressed byte length (UTF-8) and
31
+ * `size_stored` records the compressed byte length; consumers can
32
+ * estimate compression savings without decompressing.
33
+ *
34
+ * `INSERT OR IGNORE` on `hash` makes the step idempotent across partial-
35
+ * failure restarts.
36
+ * @param trx - Knex instance or transaction connected to the archive DB.
37
+ * @param onProgress - Optional sink for periodic progress lines (one per
38
+ * ~5% of `pages` scanned); see {@link ../create-progress-reporter.ts}.
39
+ * @example
40
+ * await knex.transaction(async (trx) => {
41
+ * await populateJsonRefs(trx);
42
+ * });
43
+ */
44
+ export async function populateJsonRefs(trx, onProgress) {
45
+ const hasPages = await trx.schema.hasTable('pages');
46
+ if (!hasPages) {
47
+ return;
48
+ }
49
+ const hasMetaExtras = await trx.schema.hasColumn('pages', 'meta_extras');
50
+ if (!hasMetaExtras) {
51
+ return;
52
+ }
53
+ const seen = new Set();
54
+ const pending = [];
55
+ const countRows = await trx('pages').count({ n: '*' });
56
+ const total = Number(countRows[0]?.n ?? 0);
57
+ const report = createProgressReporter('json_refs (pages)', total, onProgress);
58
+ let processed = 0;
59
+ let cursor = 0;
60
+ while (true) {
61
+ const rows = await trx('pages')
62
+ .select('id', 'meta_extras as value')
63
+ .where('id', '>', cursor)
64
+ .orderBy('id', 'asc')
65
+ .limit(READ_CHUNK_SIZE);
66
+ if (rows.length === 0) {
67
+ break;
68
+ }
69
+ cursor = rows.at(-1).id;
70
+ processed += rows.length;
71
+ report(processed);
72
+ for (const row of rows) {
73
+ const raw = row.value;
74
+ if (raw == null || raw === '') {
75
+ continue;
76
+ }
77
+ const rawBytes = Buffer.from(raw, 'utf8');
78
+ const hash = computeContentHash(rawBytes);
79
+ const hex = hash.toString('hex');
80
+ if (seen.has(hex)) {
81
+ continue;
82
+ }
83
+ seen.add(hex);
84
+ const compressed = zstdCompressSync(rawBytes);
85
+ pending.push({
86
+ hash,
87
+ json_text: compressed,
88
+ codec: 'zstd',
89
+ size_raw: rawBytes.byteLength,
90
+ size_stored: compressed.byteLength,
91
+ });
92
+ if (pending.length >= INSERT_CHUNK_SIZE) {
93
+ await trx('json_refs').insert(pending).onConflict('hash').ignore();
94
+ pending.length = 0;
95
+ }
96
+ }
97
+ }
98
+ if (pending.length > 0) {
99
+ await trx('json_refs').insert(pending).onConflict('hash').ignore();
100
+ }
101
+ }
@@ -0,0 +1,51 @@
1
+ import type { ProgressCallback } from '../create-progress-reporter.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Runs the six 0.13 ref-table populates (issue #191) in this fixed
5
+ * order against an already-connected archive:
6
+ *
7
+ * 1. `content_type_refs`
8
+ * 2. `url_refs`
9
+ * 3. `text_refs`
10
+ * 4. `json_refs`
11
+ * 5. `blob_refs`
12
+ * 6. Header tables (name / value / set / entries / flags).
13
+ *
14
+ * The order is an execution-order invariant, not arbitrary: the entity
15
+ * populates that run afterwards (`populateEntityTables`) JOIN against
16
+ * `content_type_refs` when filling `content_items` / `resource_items`,
17
+ * and look up `url_refs.id` for every URL column, so both dictionaries
18
+ * must be complete first. Within this function the ordering is:
19
+ * dictionary tables (1–5) first, header tables (6) last — the header
20
+ * tables' entries reference name / value refs, but those are inserted
21
+ * by `populateHeaderTables` itself, so no barrier between sub-populates
22
+ * is required.
23
+ *
24
+ * Every sub-populate is independently idempotent via `INSERT OR IGNORE`
25
+ * on its natural key. Running this orchestrator twice on the same archive
26
+ * produces the same rows — no phase marker table is used. This function
27
+ * does not open its own transaction so the caller controls the boundary;
28
+ * the whole invocation is expected to run inside one writer transaction
29
+ * with `.bak` protection at the caller level.
30
+ *
31
+ * `scripts/migrate-to-0.13.mjs` does NOT call this orchestrator directly
32
+ * — it calls the same six sub-populates itself, each in its own
33
+ * transaction, so a killed multi-hour migration only re-does the one
34
+ * table in flight on resume rather than the whole six-table batch. Use
35
+ * this function directly when that per-table checkpointing is not
36
+ * needed and a single all-or-nothing transaction is preferred.
37
+ * @param trx - Knex instance or transaction connected to the archive DB.
38
+ * @param onProgress - Optional sink threaded to every sub-populate for
39
+ * periodic progress lines; see {@link ../create-progress-reporter.ts}.
40
+ * @example
41
+ * // Single-transaction use: connect via Archive, wrap in a
42
+ * // transaction, run every sub-step, then rely on the caller's `.bak`
43
+ * // safety net if any step throws.
44
+ * const archive = await Archive.open(archivePath);
45
+ * const knex = archive.getKnex();
46
+ * await knex.transaction(async (trx) => {
47
+ * await populateRefTables(trx);
48
+ * });
49
+ * await archive.write();
50
+ */
51
+ export declare function populateRefTables(trx: Knex, onProgress?: ProgressCallback): Promise<void>;
@@ -0,0 +1,62 @@
1
+ import { populateBlobRefs } from './populate-blob-refs.js';
2
+ import { populateContentTypeRefs } from './populate-content-type-refs.js';
3
+ import { populateHeaderTables } from './populate-header-tables.js';
4
+ import { populateJsonRefs } from './populate-json-refs.js';
5
+ import { populateTextRefs } from './populate-text-refs.js';
6
+ import { populateUrlRefs } from './populate-url-refs.js';
7
+ /**
8
+ * Runs the six 0.13 ref-table populates (issue #191) in this fixed
9
+ * order against an already-connected archive:
10
+ *
11
+ * 1. `content_type_refs`
12
+ * 2. `url_refs`
13
+ * 3. `text_refs`
14
+ * 4. `json_refs`
15
+ * 5. `blob_refs`
16
+ * 6. Header tables (name / value / set / entries / flags).
17
+ *
18
+ * The order is an execution-order invariant, not arbitrary: the entity
19
+ * populates that run afterwards (`populateEntityTables`) JOIN against
20
+ * `content_type_refs` when filling `content_items` / `resource_items`,
21
+ * and look up `url_refs.id` for every URL column, so both dictionaries
22
+ * must be complete first. Within this function the ordering is:
23
+ * dictionary tables (1–5) first, header tables (6) last — the header
24
+ * tables' entries reference name / value refs, but those are inserted
25
+ * by `populateHeaderTables` itself, so no barrier between sub-populates
26
+ * is required.
27
+ *
28
+ * Every sub-populate is independently idempotent via `INSERT OR IGNORE`
29
+ * on its natural key. Running this orchestrator twice on the same archive
30
+ * produces the same rows — no phase marker table is used. This function
31
+ * does not open its own transaction so the caller controls the boundary;
32
+ * the whole invocation is expected to run inside one writer transaction
33
+ * with `.bak` protection at the caller level.
34
+ *
35
+ * `scripts/migrate-to-0.13.mjs` does NOT call this orchestrator directly
36
+ * — it calls the same six sub-populates itself, each in its own
37
+ * transaction, so a killed multi-hour migration only re-does the one
38
+ * table in flight on resume rather than the whole six-table batch. Use
39
+ * this function directly when that per-table checkpointing is not
40
+ * needed and a single all-or-nothing transaction is preferred.
41
+ * @param trx - Knex instance or transaction connected to the archive DB.
42
+ * @param onProgress - Optional sink threaded to every sub-populate for
43
+ * periodic progress lines; see {@link ../create-progress-reporter.ts}.
44
+ * @example
45
+ * // Single-transaction use: connect via Archive, wrap in a
46
+ * // transaction, run every sub-step, then rely on the caller's `.bak`
47
+ * // safety net if any step throws.
48
+ * const archive = await Archive.open(archivePath);
49
+ * const knex = archive.getKnex();
50
+ * await knex.transaction(async (trx) => {
51
+ * await populateRefTables(trx);
52
+ * });
53
+ * await archive.write();
54
+ */
55
+ export async function populateRefTables(trx, onProgress) {
56
+ await populateContentTypeRefs(trx);
57
+ await populateUrlRefs(trx, onProgress);
58
+ await populateTextRefs(trx, onProgress);
59
+ await populateJsonRefs(trx, onProgress);
60
+ await populateBlobRefs(trx, onProgress);
61
+ await populateHeaderTables(trx, onProgress);
62
+ }
@@ -0,0 +1,32 @@
1
+ import type { ProgressCallback } from '../create-progress-reporter.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Populates `text_refs` from every text-shaped column across `anchors`,
5
+ * `images`, and `pages` (issue #191).
6
+ *
7
+ * Rules:
8
+ *
9
+ * - **Content-hash dedup contract**: identical text produces one row. The
10
+ * hash is derived by {@link computeContentHash} (currently SHA-256,
11
+ * matching `page_html_blobs.hash`; see that function's docs for the
12
+ * algorithm-choice rationale).
13
+ * - **Empty and null are skipped** — an empty `<a>` tag adds no text to
14
+ * the dictionary. Anchors with no text still get an `anchor_edges` row
15
+ * in 0.13, just with `first_text_id = NULL`.
16
+ * - **INSERT OR IGNORE on (hash, text)** — the composite UNIQUE from the
17
+ * 0.13 DDL — makes the step idempotent across partial-failure
18
+ * restarts.
19
+ *
20
+ * Peak memory is bounded by the count of distinct texts (all texts are
21
+ * held in a Map before insert). On the reference archive this Map is
22
+ * about 5 MB of anchor textContent + a few MB of page meta text — well
23
+ * within the migration process budget.
24
+ * @param trx - Knex instance or transaction connected to the archive DB.
25
+ * @param onProgress - Optional sink for periodic progress lines (one per
26
+ * ~5% of each source table scanned); see {@link ../create-progress-reporter.ts}.
27
+ * @example
28
+ * await knex.transaction(async (trx) => {
29
+ * await populateTextRefs(trx);
30
+ * });
31
+ */
32
+ export declare function populateTextRefs(trx: Knex, onProgress?: ProgressCallback): Promise<void>;