@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,31 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Populates `resource_ref_edges` from `resources-referrers`
4
+ * (issue #193).
5
+ *
6
+ * The transformation is a **direct SQL `INSERT ... SELECT`** — no ref
7
+ * lookups, no per-row JS work. Legacy `resources-referrers` already
8
+ * enforces `UNIQUE(resourceId, pageId)` (see `init-schema.ts`), so every
9
+ * source row maps 1:1 to a distinct `resource_ref_edges` PK; every
10
+ * `count` starts at `1` because the legacy shape observed each
11
+ * (resource, page) pair exactly once.
12
+ *
13
+ * `INSERT OR IGNORE` on the `(resource_id, page_id)` PK is redundant
14
+ * with the legacy unique constraint on the source but present anyway to
15
+ * make partial-failure re-runs safe.
16
+ *
17
+ * The PKs on both `resource_items.id` and `content_items.id` were
18
+ * preserved from `resources.id` / `pages.id`, so no per-row translation
19
+ * is required — the FKs `resource_items(id)` and `content_items(id)`
20
+ * declared in `resource_ref_edges` are already satisfied for every
21
+ * source row by `populateContentItems` / `populateResourceItems`, which
22
+ * run before this function in `populateEntityTables`.
23
+ * @param trx - Knex instance or transaction connected to the archive DB.
24
+ * @example
25
+ * await knex.transaction(async (trx) => {
26
+ * await populateResourceItems(trx);
27
+ * await populateContentItems(trx);
28
+ * await populateResourceRefEdges(trx);
29
+ * });
30
+ */
31
+ export declare function populateResourceRefEdges(trx: Knex): Promise<void>;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Populates `resource_ref_edges` from `resources-referrers`
3
+ * (issue #193).
4
+ *
5
+ * The transformation is a **direct SQL `INSERT ... SELECT`** — no ref
6
+ * lookups, no per-row JS work. Legacy `resources-referrers` already
7
+ * enforces `UNIQUE(resourceId, pageId)` (see `init-schema.ts`), so every
8
+ * source row maps 1:1 to a distinct `resource_ref_edges` PK; every
9
+ * `count` starts at `1` because the legacy shape observed each
10
+ * (resource, page) pair exactly once.
11
+ *
12
+ * `INSERT OR IGNORE` on the `(resource_id, page_id)` PK is redundant
13
+ * with the legacy unique constraint on the source but present anyway to
14
+ * make partial-failure re-runs safe.
15
+ *
16
+ * The PKs on both `resource_items.id` and `content_items.id` were
17
+ * preserved from `resources.id` / `pages.id`, so no per-row translation
18
+ * is required — the FKs `resource_items(id)` and `content_items(id)`
19
+ * declared in `resource_ref_edges` are already satisfied for every
20
+ * source row by `populateContentItems` / `populateResourceItems`, which
21
+ * run before this function in `populateEntityTables`.
22
+ * @param trx - Knex instance or transaction connected to the archive DB.
23
+ * @example
24
+ * await knex.transaction(async (trx) => {
25
+ * await populateResourceItems(trx);
26
+ * await populateContentItems(trx);
27
+ * await populateResourceRefEdges(trx);
28
+ * });
29
+ */
30
+ export async function populateResourceRefEdges(trx) {
31
+ await trx.raw(`INSERT OR IGNORE INTO resource_ref_edges (resource_id, page_id, count)
32
+ SELECT resourceId, pageId, 1 FROM "resources-referrers"`);
33
+ }
@@ -0,0 +1,31 @@
1
+ import type { BlobRefIdMap } from './types.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Batch-resolves `blob_refs.id` for a set of large data-URI values
5
+ * (issue #193).
6
+ *
7
+ * The routing rule matches {@link ../populate-ref-tables/populate-blob-refs.ts}:
8
+ * only `data:` URIs longer than {@link DATA_URI_URL_REFS_LIMIT} bytes
9
+ * land in `blob_refs`; smaller data URIs (and every regular URL) live
10
+ * in `url_refs` instead. Callers pass URL-column values verbatim; this
11
+ * function filters out anything that does not match the routing rule
12
+ * before hashing.
13
+ *
14
+ * Malformed data URIs that fail {@link ../populate-ref-tables/decode-data-uri.ts}
15
+ * are skipped silently — `populateBlobRefs` also skipped them (with a
16
+ * warning), so no matching row exists to resolve.
17
+ *
18
+ * Duplicate values in `values` are deduped internally so an image whose
19
+ * `src` and `currentSrc` share the same data URI only counts once.
20
+ * @param trx - Knex instance or transaction connected to the archive DB.
21
+ * @param values - Iterable of raw URL-column values that may or may not
22
+ * be large data URIs.
23
+ * @returns Map keyed by the raw URI string; missing entries indicate
24
+ * the value is not stored in `blob_refs` (either not a data URI at
25
+ * all, below the size threshold, malformed, or absent from the
26
+ * dictionary).
27
+ * @example
28
+ * const idMap = await resolveBlobRefs(trx, [longDataUri, 'https://…']);
29
+ * const blobId = idMap.get(longDataUri); // number | undefined
30
+ */
31
+ export declare function resolveBlobRefs(trx: Knex, values: Iterable<string>): Promise<BlobRefIdMap>;
@@ -0,0 +1,100 @@
1
+ import { computeContentHash } from '../populate-ref-tables/compute-content-hash.js';
2
+ import { DATA_URI_URL_REFS_LIMIT } from '../populate-ref-tables/data-uri-url-refs-limit.js';
3
+ import { decodeDataUri } from '../populate-ref-tables/decode-data-uri.js';
4
+ /**
5
+ * Rows sent per `SELECT ... WHERE hash IN (?, ...)` chunk. `blob_refs`
6
+ * cardinality is tiny in the reference archive (≈ 429 rows) so 200 per
7
+ * chunk covers most realistic uses in a single query.
8
+ */
9
+ const LOOKUP_CHUNK_SIZE = 200;
10
+ /**
11
+ * Batch-resolves `blob_refs.id` for a set of large data-URI values
12
+ * (issue #193).
13
+ *
14
+ * The routing rule matches {@link ../populate-ref-tables/populate-blob-refs.ts}:
15
+ * only `data:` URIs longer than {@link DATA_URI_URL_REFS_LIMIT} bytes
16
+ * land in `blob_refs`; smaller data URIs (and every regular URL) live
17
+ * in `url_refs` instead. Callers pass URL-column values verbatim; this
18
+ * function filters out anything that does not match the routing rule
19
+ * before hashing.
20
+ *
21
+ * Malformed data URIs that fail {@link ../populate-ref-tables/decode-data-uri.ts}
22
+ * are skipped silently — `populateBlobRefs` also skipped them (with a
23
+ * warning), so no matching row exists to resolve.
24
+ *
25
+ * Duplicate values in `values` are deduped internally so an image whose
26
+ * `src` and `currentSrc` share the same data URI only counts once.
27
+ * @param trx - Knex instance or transaction connected to the archive DB.
28
+ * @param values - Iterable of raw URL-column values that may or may not
29
+ * be large data URIs.
30
+ * @returns Map keyed by the raw URI string; missing entries indicate
31
+ * the value is not stored in `blob_refs` (either not a data URI at
32
+ * all, below the size threshold, malformed, or absent from the
33
+ * dictionary).
34
+ * @example
35
+ * const idMap = await resolveBlobRefs(trx, [longDataUri, 'https://…']);
36
+ * const blobId = idMap.get(longDataUri); // number | undefined
37
+ */
38
+ export async function resolveBlobRefs(trx, values) {
39
+ const distinct = new Set();
40
+ for (const value of values) {
41
+ if (typeof value !== 'string' || value === '') {
42
+ continue;
43
+ }
44
+ if (value.length <= DATA_URI_URL_REFS_LIMIT || !value.startsWith('data:')) {
45
+ continue;
46
+ }
47
+ distinct.add(value);
48
+ }
49
+ if (distinct.size === 0) {
50
+ return new Map();
51
+ }
52
+ const rawValues = [...distinct];
53
+ const hashByValue = new Map();
54
+ // `hashHexToValues` maps `hex(hash) → [raw URI strings that decoded to
55
+ // those bytes]`. Two distinct raw data-URI strings can decode to the
56
+ // same payload bytes (e.g. `data:image/png;base64,XXXX…` and
57
+ // `data:image/svg+xml;base64,XXXX…` when the underlying base64 is
58
+ // identical). `populateBlobRefs` dedups them into one row keyed by the
59
+ // payload hash, so both raw URIs must resolve to that shared id — a
60
+ // last-wins Map keyed by hash would drop the earlier variant, and
61
+ // downstream `image_items` writes would lose the blob reference.
62
+ const hashHexToValues = new Map();
63
+ for (const value of rawValues) {
64
+ const decoded = decodeDataUri(value);
65
+ if (decoded === null) {
66
+ continue;
67
+ }
68
+ const hash = computeContentHash(decoded.bytes);
69
+ hashByValue.set(value, hash);
70
+ const hex = hash.toString('hex');
71
+ const bucket = hashHexToValues.get(hex);
72
+ if (bucket === undefined) {
73
+ hashHexToValues.set(hex, [value]);
74
+ }
75
+ else {
76
+ bucket.push(value);
77
+ }
78
+ }
79
+ if (hashByValue.size === 0) {
80
+ return new Map();
81
+ }
82
+ const hashes = [...hashByValue.values()];
83
+ const result = new Map();
84
+ for (let index = 0; index < hashes.length; index += LOOKUP_CHUNK_SIZE) {
85
+ const chunkHashes = hashes.slice(index, index + LOOKUP_CHUNK_SIZE);
86
+ const rows = await trx('blob_refs')
87
+ .select('id', 'hash')
88
+ .whereIn('hash', chunkHashes);
89
+ for (const row of rows) {
90
+ const hex = Buffer.from(row.hash).toString('hex');
91
+ const values = hashHexToValues.get(hex);
92
+ if (values !== undefined) {
93
+ for (const value of values) {
94
+ result.set(value, row.id);
95
+ }
96
+ }
97
+ }
98
+ }
99
+ return result;
100
+ }
@@ -0,0 +1,22 @@
1
+ import type { ContentTypeRefIdMap } from './types.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Loads the entire `content_type_refs` dictionary into an in-process map
5
+ * keyed by the raw wire value (issue #193).
6
+ *
7
+ * Content-type cardinality is small in practice — the reference archive
8
+ * carries ≈ 400 distinct raw values across `pages` + `resources`, so
9
+ * loading everything into a `Map` costs ≈ 40 KB and eliminates every
10
+ * per-chunk round-trip. This is the same trade-off {@link
11
+ * ../populate-ref-tables/populate-header-tables.ts} makes for `header_name_refs`.
12
+ *
13
+ * Callers should invoke this once at the start of a 0.13 populate
14
+ * step (e.g. `populateContentItems`, `populateResourceItems`) and reuse
15
+ * the map for every chunk.
16
+ * @param trx - Knex instance or transaction connected to the archive DB.
17
+ * @returns Map keyed by `content_type_refs.raw`.
18
+ * @example
19
+ * const contentTypeIds = await loadContentTypeRefs(trx);
20
+ * const id = contentTypeIds.get('text/html; charset=utf-8'); // number | undefined
21
+ */
22
+ export declare function loadContentTypeRefs(trx: Knex): Promise<ContentTypeRefIdMap>;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Loads the entire `content_type_refs` dictionary into an in-process map
3
+ * keyed by the raw wire value (issue #193).
4
+ *
5
+ * Content-type cardinality is small in practice — the reference archive
6
+ * carries ≈ 400 distinct raw values across `pages` + `resources`, so
7
+ * loading everything into a `Map` costs ≈ 40 KB and eliminates every
8
+ * per-chunk round-trip. This is the same trade-off {@link
9
+ * ../populate-ref-tables/populate-header-tables.ts} makes for `header_name_refs`.
10
+ *
11
+ * Callers should invoke this once at the start of a 0.13 populate
12
+ * step (e.g. `populateContentItems`, `populateResourceItems`) and reuse
13
+ * the map for every chunk.
14
+ * @param trx - Knex instance or transaction connected to the archive DB.
15
+ * @returns Map keyed by `content_type_refs.raw`.
16
+ * @example
17
+ * const contentTypeIds = await loadContentTypeRefs(trx);
18
+ * const id = contentTypeIds.get('text/html; charset=utf-8'); // number | undefined
19
+ */
20
+ export async function loadContentTypeRefs(trx) {
21
+ const rows = await trx('content_type_refs').select('id', 'raw');
22
+ const map = new Map();
23
+ for (const row of rows) {
24
+ map.set(row.raw, row.id);
25
+ }
26
+ return map;
27
+ }
@@ -0,0 +1,49 @@
1
+ import type { HeaderSetIdMap } from './types.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Batch-resolves `header_sets.id` for a set of raw `responseHeaders`
5
+ * JSON strings (issue #193).
6
+ *
7
+ * The lookup is a two-stage cascade:
8
+ *
9
+ * 1. **Primary lookup** by `header_sets.raw_json_hash` — SHA-256 of the
10
+ * raw JSON string exactly as stored on the source row. This hits when
11
+ * the row's JSON key ordering matches whichever ordering populated
12
+ * `header_sets` first for that stable-set equivalence class (see
13
+ * {@link ../populate-ref-tables/populate-header-tables.ts}).
14
+ * 2. **Fallback lookup** by `header_sets.raw_hash` for the misses — SHA-
15
+ * 256 of the sorted `name=value` pairs. `populate-header-tables.ts`
16
+ * stores exactly one `raw_json_hash` per `raw_hash` equivalence class
17
+ * (the first JSON variant encountered), so a second variant with
18
+ * identical decoded content but different key ordering never had its
19
+ * `raw_json_hash` persisted — but its `raw_hash` still points at the
20
+ * shared `header_sets` row. Without the fallback these rows would
21
+ * silently get `header_set_id = NULL` on `content_items` /
22
+ * `resource_items` and the count-based acceptance check would still
23
+ * pass; the fallback closes that gap.
24
+ *
25
+ * Hashes are computed in JS because SQLite has no built-in BLAKE3 /
26
+ * SHA-256 (see {@link ../populate-ref-tables/compute-content-hash.ts} for the
27
+ * algorithm choice). The `raw_hash` fallback re-decomposes each miss via
28
+ * {@link ../populate-ref-tables/decompose-header-set.ts} so the canonicalisation
29
+ * matches the one `populateHeaderTables` used at insert time.
30
+ *
31
+ * Empty / null values and the sentinel `'{}'` / `'null'` strings are
32
+ * skipped — those responses were decomposed to `null` by
33
+ * `decomposeHeaderSet` and never produced a `header_sets` row, so the
34
+ * caller writes `header_set_id = null` for them.
35
+ *
36
+ * Duplicate JSON strings are deduped internally so a page and a
37
+ * resource sharing the same raw responseHeaders JSON only contribute
38
+ * one lookup slot.
39
+ * @param trx - Knex instance or transaction connected to the archive DB.
40
+ * @param rawJsonStrings - Iterable of raw responseHeaders JSON strings.
41
+ * @returns Map keyed by the raw JSON string; missing entries indicate
42
+ * no matching `header_sets` row exists (parse failure or empty set).
43
+ * @example
44
+ * const idMap = await resolveHeaderSets(trx, [
45
+ * '{"content-type":"text/html"}',
46
+ * ]);
47
+ * const setId = idMap.get('{"content-type":"text/html"}'); // number | undefined
48
+ */
49
+ export declare function resolveHeaderSets(trx: Knex, rawJsonStrings: Iterable<string>): Promise<HeaderSetIdMap>;
@@ -0,0 +1,122 @@
1
+ import { computeContentHash } from '../populate-ref-tables/compute-content-hash.js';
2
+ import { decomposeHeaderSet } from '../populate-ref-tables/decompose-header-set.js';
3
+ /**
4
+ * Rows sent per `SELECT ... WHERE raw_json_hash IN (?, ...)` chunk. Same
5
+ * rationale as {@link ./resolve-url-refs.ts}: 500 rows × 1 param each is
6
+ * well under the SQLite variable limit and gives good round-trip
7
+ * amortisation.
8
+ */
9
+ const LOOKUP_CHUNK_SIZE = 500;
10
+ /**
11
+ * Batch-resolves `header_sets.id` for a set of raw `responseHeaders`
12
+ * JSON strings (issue #193).
13
+ *
14
+ * The lookup is a two-stage cascade:
15
+ *
16
+ * 1. **Primary lookup** by `header_sets.raw_json_hash` — SHA-256 of the
17
+ * raw JSON string exactly as stored on the source row. This hits when
18
+ * the row's JSON key ordering matches whichever ordering populated
19
+ * `header_sets` first for that stable-set equivalence class (see
20
+ * {@link ../populate-ref-tables/populate-header-tables.ts}).
21
+ * 2. **Fallback lookup** by `header_sets.raw_hash` for the misses — SHA-
22
+ * 256 of the sorted `name=value` pairs. `populate-header-tables.ts`
23
+ * stores exactly one `raw_json_hash` per `raw_hash` equivalence class
24
+ * (the first JSON variant encountered), so a second variant with
25
+ * identical decoded content but different key ordering never had its
26
+ * `raw_json_hash` persisted — but its `raw_hash` still points at the
27
+ * shared `header_sets` row. Without the fallback these rows would
28
+ * silently get `header_set_id = NULL` on `content_items` /
29
+ * `resource_items` and the count-based acceptance check would still
30
+ * pass; the fallback closes that gap.
31
+ *
32
+ * Hashes are computed in JS because SQLite has no built-in BLAKE3 /
33
+ * SHA-256 (see {@link ../populate-ref-tables/compute-content-hash.ts} for the
34
+ * algorithm choice). The `raw_hash` fallback re-decomposes each miss via
35
+ * {@link ../populate-ref-tables/decompose-header-set.ts} so the canonicalisation
36
+ * matches the one `populateHeaderTables` used at insert time.
37
+ *
38
+ * Empty / null values and the sentinel `'{}'` / `'null'` strings are
39
+ * skipped — those responses were decomposed to `null` by
40
+ * `decomposeHeaderSet` and never produced a `header_sets` row, so the
41
+ * caller writes `header_set_id = null` for them.
42
+ *
43
+ * Duplicate JSON strings are deduped internally so a page and a
44
+ * resource sharing the same raw responseHeaders JSON only contribute
45
+ * one lookup slot.
46
+ * @param trx - Knex instance or transaction connected to the archive DB.
47
+ * @param rawJsonStrings - Iterable of raw responseHeaders JSON strings.
48
+ * @returns Map keyed by the raw JSON string; missing entries indicate
49
+ * no matching `header_sets` row exists (parse failure or empty set).
50
+ * @example
51
+ * const idMap = await resolveHeaderSets(trx, [
52
+ * '{"content-type":"text/html"}',
53
+ * ]);
54
+ * const setId = idMap.get('{"content-type":"text/html"}'); // number | undefined
55
+ */
56
+ export async function resolveHeaderSets(trx, rawJsonStrings) {
57
+ const distinct = new Set();
58
+ for (const raw of rawJsonStrings) {
59
+ if (typeof raw !== 'string' || raw === '' || raw === 'null' || raw === '{}') {
60
+ continue;
61
+ }
62
+ distinct.add(raw);
63
+ }
64
+ if (distinct.size === 0) {
65
+ return new Map();
66
+ }
67
+ const values = [...distinct];
68
+ const hashByValue = new Map();
69
+ const hashHexToValue = new Map();
70
+ for (const value of values) {
71
+ const hash = computeContentHash(value);
72
+ hashByValue.set(value, hash);
73
+ hashHexToValue.set(hash.toString('hex'), value);
74
+ }
75
+ const hashes = [...hashByValue.values()];
76
+ const result = new Map();
77
+ for (let index = 0; index < hashes.length; index += LOOKUP_CHUNK_SIZE) {
78
+ const chunkHashes = hashes.slice(index, index + LOOKUP_CHUNK_SIZE);
79
+ const rows = await trx('header_sets')
80
+ .select('id', 'raw_json_hash')
81
+ .whereIn('raw_json_hash', chunkHashes);
82
+ for (const row of rows) {
83
+ const hex = Buffer.from(row.raw_json_hash).toString('hex');
84
+ const value = hashHexToValue.get(hex);
85
+ if (value !== undefined) {
86
+ result.set(value, row.id);
87
+ }
88
+ }
89
+ }
90
+ // Fallback pass: any value we could not resolve by `raw_json_hash`
91
+ // might still map to an existing `header_sets` row via `raw_hash`
92
+ // (identical decoded content, different JSON key ordering).
93
+ const misses = values.filter((value) => !result.has(value));
94
+ if (misses.length === 0) {
95
+ return result;
96
+ }
97
+ const rawHashByValue = new Map();
98
+ const rawHashHexToValue = new Map();
99
+ for (const value of misses) {
100
+ const decomposed = decomposeHeaderSet(value);
101
+ if (decomposed === null) {
102
+ continue;
103
+ }
104
+ rawHashByValue.set(value, decomposed.rawHash);
105
+ rawHashHexToValue.set(decomposed.rawHash.toString('hex'), value);
106
+ }
107
+ const rawHashes = [...rawHashByValue.values()];
108
+ for (let index = 0; index < rawHashes.length; index += LOOKUP_CHUNK_SIZE) {
109
+ const chunkHashes = rawHashes.slice(index, index + LOOKUP_CHUNK_SIZE);
110
+ const rows = await trx('header_sets')
111
+ .select('id', 'raw_hash')
112
+ .whereIn('raw_hash', chunkHashes);
113
+ for (const row of rows) {
114
+ const hex = Buffer.from(row.raw_hash).toString('hex');
115
+ const value = rawHashHexToValue.get(hex);
116
+ if (value !== undefined) {
117
+ result.set(value, row.id);
118
+ }
119
+ }
120
+ }
121
+ return result;
122
+ }
@@ -0,0 +1,25 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Batch-resolves `json_refs.id` for a set of raw `meta_extras` JSON
4
+ * strings (issue #193).
5
+ *
6
+ * The lookup goes through `json_refs.hash`, the SHA-256 hash of the raw
7
+ * JSON string stored by `populateJsonRefs` (see
8
+ * {@link ../populate-ref-tables/populate-json-refs.ts}). Hashes are computed in JS
9
+ * for the same reason as {@link ./resolve-header-sets.ts}: SQLite has no
10
+ * built-in hash function.
11
+ *
12
+ * Empty / null strings are skipped — those pages had no `meta_extras`
13
+ * and never produced a `json_refs` row, so the caller writes
14
+ * `meta_extras_json_id = null` for them.
15
+ *
16
+ * Duplicate strings in `rawJsonStrings` are deduped internally.
17
+ * @param trx - Knex instance or transaction connected to the archive DB.
18
+ * @param rawJsonStrings - Iterable of raw `meta_extras` JSON strings.
19
+ * @returns Map keyed by the raw JSON string; missing entries indicate
20
+ * no matching `json_refs` row exists.
21
+ * @example
22
+ * const idMap = await resolveJsonRefs(trx, ['{"customField":"x"}']);
23
+ * const jsonId = idMap.get('{"customField":"x"}'); // number | undefined
24
+ */
25
+ export declare function resolveJsonRefs(trx: Knex, rawJsonStrings: Iterable<string>): Promise<ReadonlyMap<string, number>>;
@@ -0,0 +1,67 @@
1
+ import { computeContentHash } from '../populate-ref-tables/compute-content-hash.js';
2
+ /**
3
+ * Rows sent per `SELECT ... WHERE hash IN (?, ...)` chunk. `json_refs`
4
+ * cardinality is bounded by the count of distinct `pages.meta_extras`
5
+ * JSON strings — typically low thousands on a reference archive — so
6
+ * 500 per chunk keeps round-trips low without straining the SQLite
7
+ * variable limit.
8
+ */
9
+ const LOOKUP_CHUNK_SIZE = 500;
10
+ /**
11
+ * Batch-resolves `json_refs.id` for a set of raw `meta_extras` JSON
12
+ * strings (issue #193).
13
+ *
14
+ * The lookup goes through `json_refs.hash`, the SHA-256 hash of the raw
15
+ * JSON string stored by `populateJsonRefs` (see
16
+ * {@link ../populate-ref-tables/populate-json-refs.ts}). Hashes are computed in JS
17
+ * for the same reason as {@link ./resolve-header-sets.ts}: SQLite has no
18
+ * built-in hash function.
19
+ *
20
+ * Empty / null strings are skipped — those pages had no `meta_extras`
21
+ * and never produced a `json_refs` row, so the caller writes
22
+ * `meta_extras_json_id = null` for them.
23
+ *
24
+ * Duplicate strings in `rawJsonStrings` are deduped internally.
25
+ * @param trx - Knex instance or transaction connected to the archive DB.
26
+ * @param rawJsonStrings - Iterable of raw `meta_extras` JSON strings.
27
+ * @returns Map keyed by the raw JSON string; missing entries indicate
28
+ * no matching `json_refs` row exists.
29
+ * @example
30
+ * const idMap = await resolveJsonRefs(trx, ['{"customField":"x"}']);
31
+ * const jsonId = idMap.get('{"customField":"x"}'); // number | undefined
32
+ */
33
+ export async function resolveJsonRefs(trx, rawJsonStrings) {
34
+ const distinct = new Set();
35
+ for (const raw of rawJsonStrings) {
36
+ if (typeof raw === 'string' && raw !== '') {
37
+ distinct.add(raw);
38
+ }
39
+ }
40
+ if (distinct.size === 0) {
41
+ return new Map();
42
+ }
43
+ const values = [...distinct];
44
+ const hashByValue = new Map();
45
+ const hashHexToValue = new Map();
46
+ for (const value of values) {
47
+ const hash = computeContentHash(value);
48
+ hashByValue.set(value, hash);
49
+ hashHexToValue.set(hash.toString('hex'), value);
50
+ }
51
+ const hashes = [...hashByValue.values()];
52
+ const result = new Map();
53
+ for (let index = 0; index < hashes.length; index += LOOKUP_CHUNK_SIZE) {
54
+ const chunkHashes = hashes.slice(index, index + LOOKUP_CHUNK_SIZE);
55
+ const rows = await trx('json_refs')
56
+ .select('id', 'hash')
57
+ .whereIn('hash', chunkHashes);
58
+ for (const row of rows) {
59
+ const hex = Buffer.from(row.hash).toString('hex');
60
+ const value = hashHexToValue.get(hex);
61
+ if (value !== undefined) {
62
+ result.set(value, row.id);
63
+ }
64
+ }
65
+ }
66
+ return result;
67
+ }
@@ -0,0 +1,30 @@
1
+ import type { TextRefIdMap } from './types.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Batch-resolves `text_refs.id` for a set of raw text strings (issue #193).
5
+ *
6
+ * The `text_refs` UNIQUE constraint is on `(hash, text)` so lookups
7
+ * prefix-seek on `hash`. Each caller-supplied text is hashed in JS via
8
+ * {@link ../populate-ref-tables/compute-content-hash.ts} (32-byte SHA-256, matching
9
+ * how `populateTextRefs` inserted the rows) before the
10
+ * SQL query; providing the hash lets SQLite's index seek in O(log n)
11
+ * without a full table scan.
12
+ *
13
+ * The `(hash, text)` UNIQUE composite makes the trailing text column
14
+ * theoretically necessary to disambiguate the astronomically improbable
15
+ * hash collision — we narrow on both by including `text` in the WHERE
16
+ * clause, then filter the map keys by the exact text on read-back.
17
+ *
18
+ * Empty / null texts are ignored. Duplicate strings in `texts` are
19
+ * deduped internally.
20
+ * @param trx - Knex instance or transaction connected to the archive DB.
21
+ * @param texts - Iterable of raw text strings to resolve.
22
+ * @returns Map keyed by the raw text; missing entries indicate the text
23
+ * is not present in `text_refs` (which should not happen after
24
+ * `populateTextRefs` completes but does happen mid-migration when a caller
25
+ * passes texts that were never inserted).
26
+ * @example
27
+ * const idMap = await resolveTextRefs(trx, ['My Page Title', 'Alt text']);
28
+ * const titleId = idMap.get('My Page Title'); // number | undefined
29
+ */
30
+ export declare function resolveTextRefs(trx: Knex, texts: Iterable<string>): Promise<TextRefIdMap>;
@@ -0,0 +1,61 @@
1
+ import { computeContentHash } from '../populate-ref-tables/compute-content-hash.js';
2
+ /**
3
+ * Rows sent per `SELECT ... WHERE hash IN (?, ...)` chunk. Same rationale
4
+ * as {@link ./resolve-url-refs.ts}: 800 rows keeps the parameter count
5
+ * well under the SQLite variable limit even in the worst case where every
6
+ * hash is bound as its own parameter.
7
+ */
8
+ const LOOKUP_CHUNK_SIZE = 800;
9
+ /**
10
+ * Batch-resolves `text_refs.id` for a set of raw text strings (issue #193).
11
+ *
12
+ * The `text_refs` UNIQUE constraint is on `(hash, text)` so lookups
13
+ * prefix-seek on `hash`. Each caller-supplied text is hashed in JS via
14
+ * {@link ../populate-ref-tables/compute-content-hash.ts} (32-byte SHA-256, matching
15
+ * how `populateTextRefs` inserted the rows) before the
16
+ * SQL query; providing the hash lets SQLite's index seek in O(log n)
17
+ * without a full table scan.
18
+ *
19
+ * The `(hash, text)` UNIQUE composite makes the trailing text column
20
+ * theoretically necessary to disambiguate the astronomically improbable
21
+ * hash collision — we narrow on both by including `text` in the WHERE
22
+ * clause, then filter the map keys by the exact text on read-back.
23
+ *
24
+ * Empty / null texts are ignored. Duplicate strings in `texts` are
25
+ * deduped internally.
26
+ * @param trx - Knex instance or transaction connected to the archive DB.
27
+ * @param texts - Iterable of raw text strings to resolve.
28
+ * @returns Map keyed by the raw text; missing entries indicate the text
29
+ * is not present in `text_refs` (which should not happen after
30
+ * `populateTextRefs` completes but does happen mid-migration when a caller
31
+ * passes texts that were never inserted).
32
+ * @example
33
+ * const idMap = await resolveTextRefs(trx, ['My Page Title', 'Alt text']);
34
+ * const titleId = idMap.get('My Page Title'); // number | undefined
35
+ */
36
+ export async function resolveTextRefs(trx, texts) {
37
+ const distinct = new Set();
38
+ for (const text of texts) {
39
+ if (typeof text === 'string' && text !== '') {
40
+ distinct.add(text);
41
+ }
42
+ }
43
+ if (distinct.size === 0) {
44
+ return new Map();
45
+ }
46
+ const values = [...distinct];
47
+ const hashes = values.map((text) => computeContentHash(text));
48
+ const result = new Map();
49
+ for (let index = 0; index < values.length; index += LOOKUP_CHUNK_SIZE) {
50
+ const chunkValues = values.slice(index, index + LOOKUP_CHUNK_SIZE);
51
+ const chunkHashes = hashes.slice(index, index + LOOKUP_CHUNK_SIZE);
52
+ const rows = await trx('text_refs')
53
+ .select('id', 'hash', 'text')
54
+ .whereIn('hash', chunkHashes)
55
+ .whereIn('text', chunkValues);
56
+ for (const row of rows) {
57
+ result.set(row.text, row.id);
58
+ }
59
+ }
60
+ return result;
61
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Routes one legacy URL-shaped value to either `url_refs` or `blob_refs`
3
+ * per the {@link isBlobRefValue} threshold rule, looking the id up in
4
+ * pre-resolved maps rather than upserting (the populate steps batch-resolve
5
+ * every distinct value across a whole chunk before this per-row lookup —
6
+ * see `resolveUrlRefs` / `resolveBlobRefs`). At most one of `url` / `blob`
7
+ * is non-null; both may be `null` when the value is null or fails to
8
+ * resolve (e.g. the `blob_refs` row is missing because the data URI was
9
+ * malformed and skipped by `populateBlobRefs`).
10
+ * @param value - Raw URL-shaped column value.
11
+ * @param urlIds - Map of URL string → `url_refs.id`.
12
+ * @param blobIds - Map of data-URI string → `blob_refs.id`.
13
+ * @returns `{ url, blob }` pair with at most one non-null field.
14
+ * @example
15
+ * const slot = resolveUrlOrBlobFromMaps(row.src, urlIds, blobIds);
16
+ * // slot.url set for a regular URL, slot.blob set for a large data: URI.
17
+ */
18
+ export declare function resolveUrlOrBlobFromMaps(value: string | null, urlIds: ReadonlyMap<string, number>, blobIds: ReadonlyMap<string, number>): {
19
+ url: number | null;
20
+ blob: number | null;
21
+ };
@@ -0,0 +1,27 @@
1
+ import { isBlobRefValue } from './is-blob-ref-value.js';
2
+ /**
3
+ * Routes one legacy URL-shaped value to either `url_refs` or `blob_refs`
4
+ * per the {@link isBlobRefValue} threshold rule, looking the id up in
5
+ * pre-resolved maps rather than upserting (the populate steps batch-resolve
6
+ * every distinct value across a whole chunk before this per-row lookup —
7
+ * see `resolveUrlRefs` / `resolveBlobRefs`). At most one of `url` / `blob`
8
+ * is non-null; both may be `null` when the value is null or fails to
9
+ * resolve (e.g. the `blob_refs` row is missing because the data URI was
10
+ * malformed and skipped by `populateBlobRefs`).
11
+ * @param value - Raw URL-shaped column value.
12
+ * @param urlIds - Map of URL string → `url_refs.id`.
13
+ * @param blobIds - Map of data-URI string → `blob_refs.id`.
14
+ * @returns `{ url, blob }` pair with at most one non-null field.
15
+ * @example
16
+ * const slot = resolveUrlOrBlobFromMaps(row.src, urlIds, blobIds);
17
+ * // slot.url set for a regular URL, slot.blob set for a large data: URI.
18
+ */
19
+ export function resolveUrlOrBlobFromMaps(value, urlIds, blobIds) {
20
+ if (typeof value !== 'string' || value === '') {
21
+ return { url: null, blob: null };
22
+ }
23
+ if (isBlobRefValue(value)) {
24
+ return { url: null, blob: blobIds.get(value) ?? null };
25
+ }
26
+ return { url: urlIds.get(value) ?? null, blob: null };
27
+ }