@nitpicker/archive 0.0.0 → 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 +106 -0
  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 +350 -3
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Attempts to decode a `data:...` URI into its raw payload bytes.
3
+ *
4
+ * Supports the two encoding forms in RFC 2397:
5
+ *
6
+ * - `data:<mime>;base64,<base64-bytes>` — the base64 tail is decoded via
7
+ * `Buffer.from(..., 'base64')`.
8
+ * - `data:<mime>,<percent-encoded-bytes>` — the tail is percent-decoded
9
+ * via `decodeURIComponent(...)`, then re-encoded as UTF-8. This form is
10
+ * commonly used for SVG data URIs.
11
+ *
12
+ * Returns `null` on any parse / decode failure so the caller can skip the
13
+ * value without aborting the whole `blob_refs` population step. A single
14
+ * malformed data URI in a 470 K-row archive should not halt the migration
15
+ * — the raw `url` string is still preserved in the source `images` row.
16
+ * @param value - Raw column value; may or may not start with `data:`.
17
+ * @returns Decoded bytes, or `null` when the value isn't a data URI or
18
+ * can't be decoded.
19
+ */
20
+ export function decodeDataUri(value) {
21
+ if (!value.startsWith('data:')) {
22
+ return null;
23
+ }
24
+ const commaIndex = value.indexOf(',');
25
+ if (commaIndex === -1) {
26
+ return null;
27
+ }
28
+ const header = value.slice(5, commaIndex);
29
+ const payload = value.slice(commaIndex + 1);
30
+ try {
31
+ if (/;\s*base64$/i.test(header)) {
32
+ // `Buffer.from(..., 'base64')` silently strips characters outside
33
+ // the base64 alphabet — a malformed payload decodes to garbage
34
+ // instead of throwing. Validate the alphabet + padding shape
35
+ // first so callers can distinguish "successfully decoded" from
36
+ // "silently corrupted" and get the promised `null` on malformed
37
+ // input.
38
+ if (!isValidBase64(payload)) {
39
+ return null;
40
+ }
41
+ const bytes = Buffer.from(payload, 'base64');
42
+ return { bytes };
43
+ }
44
+ return { bytes: percentDecodeToBytes(payload) };
45
+ }
46
+ catch {
47
+ return null;
48
+ }
49
+ }
50
+ /**
51
+ * Standard base64 alphabet + padding, plus one common URL-safe variant
52
+ * that occasionally appears in `data:` URIs even though RFC 2397 says
53
+ * only the standard alphabet. `-` / `_` are the URL-safe substitutes
54
+ * for `+` / `/`.
55
+ */
56
+ const BASE64_ALPHABET_RE = /^[\w+/-]*={0,2}$/;
57
+ /**
58
+ * Validates whether a base64 payload is well-formed enough that
59
+ * `Buffer.from(payload, 'base64')` won't need to silently strip
60
+ * characters. Whitespace-tolerant (RFC 2045 permits internal
61
+ * whitespace in base64 line-wrapped output).
62
+ * @param payload - Base64 payload (everything after `,` in the data URI).
63
+ * @returns `true` when the payload contains only valid base64 characters
64
+ * + optional trailing padding.
65
+ */
66
+ function isValidBase64(payload) {
67
+ const stripped = payload.replaceAll(/\s+/g, '');
68
+ if (stripped === '') {
69
+ return true;
70
+ }
71
+ if (!BASE64_ALPHABET_RE.test(stripped)) {
72
+ return false;
73
+ }
74
+ // base64 chunks group by 4 characters — a well-formed payload has
75
+ // length ≡ 0 (mod 4) once padding is applied. Padding-less trailing
76
+ // chunks of length 2 or 3 are also accepted (Node's decoder tolerates
77
+ // missing `=`), but length 1 or a padding-only chunk is malformed.
78
+ const remainder = stripped.length % 4;
79
+ if (remainder === 1) {
80
+ return false;
81
+ }
82
+ return true;
83
+ }
84
+ /**
85
+ * Percent-decodes a data-URI payload byte-by-byte, avoiding the round
86
+ * through `decodeURIComponent` → UTF-8 re-encode that mangles arbitrary
87
+ * binary payloads (e.g. a `%FF` byte becomes a JS string of code
88
+ * point U+00FF, then re-encodes to `[0xC3, 0xBF]` — the byte value
89
+ * changes). RFC 2397's non-base64 form treats the payload as octets,
90
+ * not as a UTF-8 string, so an octet-preserving decode is the correct
91
+ * inverse.
92
+ * @param payload - Raw payload text (everything after the `,`).
93
+ * @returns Payload bytes.
94
+ * @throws {URIError} If a `%` escape is truncated or not two hex
95
+ * digits; the caller's try/catch maps this to a `null` return.
96
+ */
97
+ function percentDecodeToBytes(payload) {
98
+ const chunks = [];
99
+ let i = 0;
100
+ while (i < payload.length) {
101
+ const ch = payload.codePointAt(i);
102
+ if (ch === 0x25 /* % */) {
103
+ if (i + 2 >= payload.length) {
104
+ throw new URIError('truncated % escape');
105
+ }
106
+ const hex = payload.slice(i + 1, i + 3);
107
+ if (!/^[\da-f]{2}$/i.test(hex)) {
108
+ throw new URIError('invalid % escape');
109
+ }
110
+ chunks.push(Buffer.from(hex, 'hex'));
111
+ i += 3;
112
+ continue;
113
+ }
114
+ if (ch > 127 /* 0x7F, ASCII high-bit boundary */) {
115
+ // A non-ASCII code point in a percent-encoded payload is
116
+ // unusual (browsers percent-encode outbound), but WHATWG
117
+ // tolerates it — encode as UTF-8 to preserve the character.
118
+ chunks.push(Buffer.from(payload[i], 'utf8'));
119
+ i += 1;
120
+ continue;
121
+ }
122
+ chunks.push(Buffer.from([ch]));
123
+ i += 1;
124
+ }
125
+ return Buffer.concat(chunks);
126
+ }
@@ -0,0 +1,29 @@
1
+ import type { DecomposedHeaderSet } from './types.js';
2
+ /**
3
+ * Parses one raw `responseHeaders` JSON string and produces the derived
4
+ * data shape required to insert into `header_sets`, `header_set_entries`,
5
+ * and `header_flags`.
6
+ *
7
+ * Behaviour:
8
+ *
9
+ * - `null` / `""` / `"null"` / `"{}"` / non-object JSON → returns `null`.
10
+ * The caller sets `header_set_id = null` on the referring row.
11
+ * - Multiple values per header name (JSON arrays, e.g.
12
+ * `{ "set-cookie": ["a=1", "b=2"] }`) become multiple
13
+ * {@link HeaderEntry} rows with `occurrence` ordinals 1, 2, ... The
14
+ * composite PK on `header_set_entries` `(header_set_id, name_id,
15
+ * occurrence)` guarantees no truncation.
16
+ * - Names are lower-cased. Values are trimmed of whitespace only in the
17
+ * sorted-hash construction; the raw value is preserved verbatim in
18
+ * the emitted `HeaderEntry.value` (and hence in `header_value_refs`).
19
+ * Trimming inside hash construction lets `content-type: text/html`
20
+ * and `content-type: text/html ` dedup to one stable set.
21
+ * - Sort order for hashing is `(name, occurrence)` in binary form —
22
+ * deterministic regardless of the input JSON's insertion order or
23
+ * how the JSON serializer arranged keys.
24
+ * @param rawJson - The raw JSON string exactly as stored in
25
+ * `pages.responseHeaders` / `resources.responseHeaders`.
26
+ * @returns Decomposed shape, or `null` when the row has no meaningful
27
+ * header set.
28
+ */
29
+ export declare function decomposeHeaderSet(rawJson: string | null): DecomposedHeaderSet | null;
@@ -0,0 +1,157 @@
1
+ import { computeContentHash } from './compute-content-hash.js';
2
+ import { isVolatileHeader } from './header-stability.js';
3
+ /**
4
+ * Parses one raw `responseHeaders` JSON string and produces the derived
5
+ * data shape required to insert into `header_sets`, `header_set_entries`,
6
+ * and `header_flags`.
7
+ *
8
+ * Behaviour:
9
+ *
10
+ * - `null` / `""` / `"null"` / `"{}"` / non-object JSON → returns `null`.
11
+ * The caller sets `header_set_id = null` on the referring row.
12
+ * - Multiple values per header name (JSON arrays, e.g.
13
+ * `{ "set-cookie": ["a=1", "b=2"] }`) become multiple
14
+ * {@link HeaderEntry} rows with `occurrence` ordinals 1, 2, ... The
15
+ * composite PK on `header_set_entries` `(header_set_id, name_id,
16
+ * occurrence)` guarantees no truncation.
17
+ * - Names are lower-cased. Values are trimmed of whitespace only in the
18
+ * sorted-hash construction; the raw value is preserved verbatim in
19
+ * the emitted `HeaderEntry.value` (and hence in `header_value_refs`).
20
+ * Trimming inside hash construction lets `content-type: text/html`
21
+ * and `content-type: text/html ` dedup to one stable set.
22
+ * - Sort order for hashing is `(name, occurrence)` in binary form —
23
+ * deterministic regardless of the input JSON's insertion order or
24
+ * how the JSON serializer arranged keys.
25
+ * @param rawJson - The raw JSON string exactly as stored in
26
+ * `pages.responseHeaders` / `resources.responseHeaders`.
27
+ * @returns Decomposed shape, or `null` when the row has no meaningful
28
+ * header set.
29
+ */
30
+ export function decomposeHeaderSet(rawJson) {
31
+ if (rawJson == null || rawJson === '' || rawJson === 'null' || rawJson === '{}') {
32
+ return null;
33
+ }
34
+ let parsed;
35
+ try {
36
+ parsed = JSON.parse(rawJson);
37
+ }
38
+ catch {
39
+ return null;
40
+ }
41
+ if (parsed == null || typeof parsed !== 'object' || Array.isArray(parsed)) {
42
+ return null;
43
+ }
44
+ const entries = [];
45
+ // `occurrence` runs per (lower-cased name) across ALL sources for that
46
+ // name, so duplicate JSON keys that differ only in case
47
+ // (`{"Cookie":"a=1", "cookie":"b=2"}` — non-conforming but legal JSON,
48
+ // and the crawler stores whatever puppeteer hands it) don't collide on
49
+ // (name_id, occurrence). Without this counter the second entry would
50
+ // land at occurrence=1 too, violating the `header_set_entries` PK and
51
+ // silently getting dropped by INSERT OR IGNORE while `entry_count`
52
+ // still counted it.
53
+ const occurrenceByName = new Map();
54
+ for (const [rawName, rawValue] of Object.entries(parsed)) {
55
+ const name = rawName.toLowerCase();
56
+ const volatile = isVolatileHeader(name);
57
+ const nextOccurrence = () => {
58
+ const next = (occurrenceByName.get(name) ?? 0) + 1;
59
+ occurrenceByName.set(name, next);
60
+ return next;
61
+ };
62
+ if (Array.isArray(rawValue)) {
63
+ for (const one of rawValue) {
64
+ if (typeof one !== 'string') {
65
+ continue;
66
+ }
67
+ entries.push({
68
+ name,
69
+ value: one,
70
+ occurrence: nextOccurrence(),
71
+ isVolatile: volatile,
72
+ });
73
+ }
74
+ continue;
75
+ }
76
+ if (typeof rawValue !== 'string') {
77
+ // parseResponseHeaders's stored shape is `Record<string, string |
78
+ // string[] | undefined>`, but hand-edited or non-conforming
79
+ // archives could smuggle in a nested object / number / boolean
80
+ // — coercing via `String()` would produce "[object Object]" and
81
+ // pollute `header_value_refs` with a garbage dictionary entry.
82
+ // Skipping is the conservative choice; the source row's raw
83
+ // JSON is still preserved via `raw_json_hash`.
84
+ continue;
85
+ }
86
+ entries.push({
87
+ name,
88
+ value: rawValue,
89
+ occurrence: nextOccurrence(),
90
+ isVolatile: volatile,
91
+ });
92
+ }
93
+ if (entries.length === 0) {
94
+ return null;
95
+ }
96
+ entries.sort((a, b) => {
97
+ if (a.name < b.name)
98
+ return -1;
99
+ if (a.name > b.name)
100
+ return 1;
101
+ return a.occurrence - b.occurrence;
102
+ });
103
+ // Canonicalize every entry exactly once, then partition the strings.
104
+ // Canonicalizing per hash pass instead (once in the all-entries pass,
105
+ // again in the stable / volatile passes) would serialize each entry
106
+ // twice, which becomes measurable on large archives where a single
107
+ // response can carry a couple of dozen entries.
108
+ const canonicalStrings = entries.map(canonicalize);
109
+ const stableCanonical = [];
110
+ const volatileCanonical = [];
111
+ let stableEntryCount = 0;
112
+ for (const [i, entry] of entries.entries()) {
113
+ if (entry.isVolatile) {
114
+ volatileCanonical.push(canonicalStrings[i]);
115
+ }
116
+ else {
117
+ stableCanonical.push(canonicalStrings[i]);
118
+ stableEntryCount += 1;
119
+ }
120
+ }
121
+ const rawJsonHash = computeContentHash(rawJson);
122
+ const rawHash = computeContentHash(canonicalStrings.join('\n'));
123
+ // A response with only volatile headers (tracker endpoints that return
124
+ // just `Date` / `Set-Cookie` / `Age`) hashes to `computeContentHash('')`
125
+ // — the canonical "empty stable profile" hash. All all-volatile
126
+ // responses cluster under this sentinel, which is the intended
127
+ // semantic (same empty stable profile = same cluster), and 0.13's
128
+ // DDL declares `stable_hash BLOB NOT NULL` so a `null` sentinel is not
129
+ // available even if we wanted one. Consumers that need to distinguish
130
+ // "empty stable set" from "populated stable set" should key off
131
+ // `stable_entry_count === 0` on the same row, not off the hash.
132
+ const stableHash = computeContentHash(stableCanonical.join('\n'));
133
+ const volatileHash = volatileCanonical.length === 0
134
+ ? null
135
+ : computeContentHash(volatileCanonical.join('\n'));
136
+ return {
137
+ rawJsonHash,
138
+ rawHash,
139
+ stableHash,
140
+ volatileHash,
141
+ entries,
142
+ entryCount: entries.length,
143
+ stableEntryCount,
144
+ };
145
+ }
146
+ /**
147
+ * Serializes one entry into the canonical `name/occurrence=value` form
148
+ * used inside the hash construction. The trailing occurrence keeps
149
+ * multi-value headers distinguishable while still letting single-value
150
+ * ones dedup naturally. Values are trimmed so surrounding whitespace
151
+ * does not fork the dedup key.
152
+ * @param entry - One decomposed header entry.
153
+ * @returns Canonical string joined into the hash pre-image.
154
+ */
155
+ function canonicalize(entry) {
156
+ return `${entry.name}/${entry.occurrence}=${entry.value.trim()}`;
157
+ }
@@ -0,0 +1,25 @@
1
+ import type { DecomposedUrl } from './types.js';
2
+ /**
3
+ * Extracts `scheme` / `host` / `port` / `path` / `query_hash` / `fragment`
4
+ * columns from a URL string for `url_refs` population.
5
+ *
6
+ * Parsing is done via WHATWG `new URL(...)`. URLs that fail to parse (e.g.
7
+ * a malformed href scraped from the wild) still round-trip through
8
+ * `url_refs` — the natural key is the raw `url` string — but every
9
+ * decomposed column becomes `null` so filters that JOIN on `host` or
10
+ * `scheme` cleanly skip malformed rows instead of falsely matching.
11
+ *
12
+ * `port` is only populated when explicit in the URL. `new URL(...)`
13
+ * normalises the scheme's default port away (`https://example.com:443/` →
14
+ * `url.port === ''`), so we never synthesise a default. Two rows differing
15
+ * only by explicit vs implicit default port must not deduplicate anyway —
16
+ * `url_refs.url` (the raw string) is the natural key, not the decomposed
17
+ * columns.
18
+ *
19
+ * `query_hash` is the 32-byte content hash of the query string with the
20
+ * leading `?` stripped. Storing the raw query would defeat dedup on
21
+ * tracker URLs whose per-request keys explode dictionary size.
22
+ * @param url - Raw URL string (may be any WHATWG-parseable form, or malformed).
23
+ * @returns Every column that goes into `url_refs` alongside the raw URL.
24
+ */
25
+ export declare function decomposeUrl(url: string): DecomposedUrl;
@@ -0,0 +1,70 @@
1
+ import { computeContentHash } from './compute-content-hash.js';
2
+ /**
3
+ * URL schemes whose "pathname" is really an in-band opaque payload
4
+ * (base64-encoded image bytes, javascript source, blob URL fragment,
5
+ * etc.) rather than a routing key. For these schemes we leave
6
+ * `DecomposedUrl.path` as `null` so the indexed `url_refs.path` column
7
+ * does not balloon with per-URL opaque tails and defeat the dedup goal.
8
+ */
9
+ const OPAQUE_PATH_SCHEMES = new Set([
10
+ 'data',
11
+ 'blob',
12
+ 'javascript',
13
+ 'about',
14
+ ]);
15
+ /**
16
+ * Extracts `scheme` / `host` / `port` / `path` / `query_hash` / `fragment`
17
+ * columns from a URL string for `url_refs` population.
18
+ *
19
+ * Parsing is done via WHATWG `new URL(...)`. URLs that fail to parse (e.g.
20
+ * a malformed href scraped from the wild) still round-trip through
21
+ * `url_refs` — the natural key is the raw `url` string — but every
22
+ * decomposed column becomes `null` so filters that JOIN on `host` or
23
+ * `scheme` cleanly skip malformed rows instead of falsely matching.
24
+ *
25
+ * `port` is only populated when explicit in the URL. `new URL(...)`
26
+ * normalises the scheme's default port away (`https://example.com:443/` →
27
+ * `url.port === ''`), so we never synthesise a default. Two rows differing
28
+ * only by explicit vs implicit default port must not deduplicate anyway —
29
+ * `url_refs.url` (the raw string) is the natural key, not the decomposed
30
+ * columns.
31
+ *
32
+ * `query_hash` is the 32-byte content hash of the query string with the
33
+ * leading `?` stripped. Storing the raw query would defeat dedup on
34
+ * tracker URLs whose per-request keys explode dictionary size.
35
+ * @param url - Raw URL string (may be any WHATWG-parseable form, or malformed).
36
+ * @returns Every column that goes into `url_refs` alongside the raw URL.
37
+ */
38
+ export function decomposeUrl(url) {
39
+ let parsed;
40
+ try {
41
+ parsed = new URL(url);
42
+ }
43
+ catch {
44
+ return {
45
+ scheme: null,
46
+ host: null,
47
+ port: null,
48
+ path: null,
49
+ query_hash: null,
50
+ fragment: null,
51
+ };
52
+ }
53
+ const scheme = parsed.protocol.slice(0, -1) || null;
54
+ const host = parsed.hostname === '' ? null : parsed.hostname.toLowerCase();
55
+ const port = parsed.port === '' ? null : Number.parseInt(parsed.port, 10);
56
+ const rawSearch = parsed.search.startsWith('?')
57
+ ? parsed.search.slice(1)
58
+ : parsed.search;
59
+ const query_hash = rawSearch === '' ? null : computeContentHash(rawSearch);
60
+ const fragment = parsed.hash === '' ? null : parsed.hash.slice(1);
61
+ const path = scheme !== null && OPAQUE_PATH_SCHEMES.has(scheme) ? null : parsed.pathname;
62
+ return {
63
+ scheme,
64
+ host,
65
+ port: port !== null && Number.isFinite(port) ? port : null,
66
+ path,
67
+ query_hash,
68
+ fragment,
69
+ };
70
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Classifies a header name as volatile (excluded from `stable_hash`) or
3
+ * stable (included). Names are compared case-insensitively (lower-cased
4
+ * before lookup). Names not in {@link VOLATILE_HEADER_NAMES} default to
5
+ * **stable** — see the docs on that constant for why this direction is
6
+ * the safer default.
7
+ *
8
+ * An explicit stable list could be named instead (`content-type`,
9
+ * `content-length`, `cache-control`, `content-security-policy`,
10
+ * `x-frame-options`, `x-content-type-options`, `strict-transport-
11
+ * security`, `referrer-policy`, `permissions-policy`, `server`, `vary`,
12
+ * `location`, ...); we deliberately do NOT enumerate that set at runtime —
13
+ * every non-volatile header is stable by construction, and enumerating
14
+ * it would create a maintenance surface that the volatile-only lookup
15
+ * avoids.
16
+ * @param name - Header name (any case).
17
+ * @returns `true` when the header is volatile.
18
+ */
19
+ export declare function isVolatileHeader(name: string): boolean;
@@ -0,0 +1,22 @@
1
+ import { VOLATILE_HEADER_NAMES } from './volatile-header-names.js';
2
+ /**
3
+ * Classifies a header name as volatile (excluded from `stable_hash`) or
4
+ * stable (included). Names are compared case-insensitively (lower-cased
5
+ * before lookup). Names not in {@link VOLATILE_HEADER_NAMES} default to
6
+ * **stable** — see the docs on that constant for why this direction is
7
+ * the safer default.
8
+ *
9
+ * An explicit stable list could be named instead (`content-type`,
10
+ * `content-length`, `cache-control`, `content-security-policy`,
11
+ * `x-frame-options`, `x-content-type-options`, `strict-transport-
12
+ * security`, `referrer-policy`, `permissions-policy`, `server`, `vary`,
13
+ * `location`, ...); we deliberately do NOT enumerate that set at runtime —
14
+ * every non-volatile header is stable by construction, and enumerating
15
+ * it would create a maintenance surface that the volatile-only lookup
16
+ * avoids.
17
+ * @param name - Header name (any case).
18
+ * @returns `true` when the header is volatile.
19
+ */
20
+ export function isVolatileHeader(name) {
21
+ return VOLATILE_HEADER_NAMES.has(name.toLowerCase());
22
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Composite cache key for `header_value_refs`: hex-encoded hash + a
3
+ * separator + raw value. Two values with the same hash but different
4
+ * strings (astronomically improbable, but a `BLOB` hash column is not
5
+ * a total function per SQL semantics) still resolve to distinct cache
6
+ * entries. Shared by the cache warmer
7
+ * ({@link ./create-header-table-caches.ts}) and the per-set upsert
8
+ * ({@link ./upsert-one-header-set.ts}) so both sides always agree on the
9
+ * key shape.
10
+ * @param hash - 32-byte content hash of `value`.
11
+ * @param value - Header value verbatim.
12
+ * @returns Cache key string.
13
+ * @example
14
+ * headerValueCacheKey(computeContentHash('no-cache'), 'no-cache');
15
+ * // '724cf9…|no-cache'
16
+ */
17
+ export declare function headerValueCacheKey(hash: Buffer, value: string): string;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Composite cache key for `header_value_refs`: hex-encoded hash + a
3
+ * separator + raw value. Two values with the same hash but different
4
+ * strings (astronomically improbable, but a `BLOB` hash column is not
5
+ * a total function per SQL semantics) still resolve to distinct cache
6
+ * entries. Shared by the cache warmer
7
+ * ({@link ./create-header-table-caches.ts}) and the per-set upsert
8
+ * ({@link ./upsert-one-header-set.ts}) so both sides always agree on the
9
+ * key shape.
10
+ * @param hash - 32-byte content hash of `value`.
11
+ * @param value - Header value verbatim.
12
+ * @returns Cache key string.
13
+ * @example
14
+ * headerValueCacheKey(computeContentHash('no-cache'), 'no-cache');
15
+ * // '724cf9…|no-cache'
16
+ */
17
+ export function headerValueCacheKey(hash, value) {
18
+ return `${hash.toString('hex')}|${value}`;
19
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Normalises a raw Content-Type header value to the canonical MIME form
3
+ * stored in `content_type_refs.normalized`: parameters (`; charset=...`)
4
+ * removed, C0 control characters (`0x00`..`0x1F`) and DEL (`0x7F`)
5
+ * stripped, trimmed, lower-cased.
6
+ *
7
+ * This is a derived column shared by two writers — the live-crawl upsert
8
+ * (`db-ops/_shared/upsert-content-type-ref.ts`) and the archive-migration
9
+ * populate (`populate-content-type-refs.ts`) — which MUST be
10
+ * same-input-same-output; a fork would split the dictionary so the same
11
+ * raw content-type maps to different normalized values depending on
12
+ * whether the row was crawled live or migrated. Keeping the single
13
+ * implementation here is what enforces that.
14
+ *
15
+ * Control chars are dropped character-by-character rather than via a
16
+ * regex literal so the source file carries no non-printing bytes and
17
+ * stays tool-friendly. `jsdom` / lax parsers occasionally emit them
18
+ * inside a raw Content-Type header (e.g. `text/html\r`).
19
+ * @param raw - Raw Content-Type header, guaranteed non-null non-empty.
20
+ * @returns Lower-cased MIME with parameters and control chars stripped.
21
+ * @example
22
+ * normalizeMime('Text/HTML; charset=UTF-8'); // => 'text/html'
23
+ */
24
+ export declare function normalizeMime(raw: string): string;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Normalises a raw Content-Type header value to the canonical MIME form
3
+ * stored in `content_type_refs.normalized`: parameters (`; charset=...`)
4
+ * removed, C0 control characters (`0x00`..`0x1F`) and DEL (`0x7F`)
5
+ * stripped, trimmed, lower-cased.
6
+ *
7
+ * This is a derived column shared by two writers — the live-crawl upsert
8
+ * (`db-ops/_shared/upsert-content-type-ref.ts`) and the archive-migration
9
+ * populate (`populate-content-type-refs.ts`) — which MUST be
10
+ * same-input-same-output; a fork would split the dictionary so the same
11
+ * raw content-type maps to different normalized values depending on
12
+ * whether the row was crawled live or migrated. Keeping the single
13
+ * implementation here is what enforces that.
14
+ *
15
+ * Control chars are dropped character-by-character rather than via a
16
+ * regex literal so the source file carries no non-printing bytes and
17
+ * stays tool-friendly. `jsdom` / lax parsers occasionally emit them
18
+ * inside a raw Content-Type header (e.g. `text/html\r`).
19
+ * @param raw - Raw Content-Type header, guaranteed non-null non-empty.
20
+ * @returns Lower-cased MIME with parameters and control chars stripped.
21
+ * @example
22
+ * normalizeMime('Text/HTML; charset=UTF-8'); // => 'text/html'
23
+ */
24
+ export function normalizeMime(raw) {
25
+ const semi = raw.indexOf(';');
26
+ const head = semi === -1 ? raw : raw.slice(0, semi);
27
+ let output = '';
28
+ for (const ch of head) {
29
+ const code = ch.codePointAt(0);
30
+ if (code < 32 /* 0x20 = SPACE */ || code === 127 /* 0x7F = DEL */) {
31
+ continue;
32
+ }
33
+ output += ch;
34
+ }
35
+ return output.trim().toLowerCase();
36
+ }
@@ -0,0 +1,38 @@
1
+ import type { ProgressCallback } from '../create-progress-reporter.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Populates `blob_refs` from every `images.src` / `images.currentSrc` /
5
+ * `resources.url` value that is a data URI longer than
6
+ * {@link DATA_URI_URL_REFS_LIMIT} bytes (issue #191).
7
+ *
8
+ * For each such value:
9
+ *
10
+ * 1. `decodeDataUri` strips the `data:...;base64,` (or `data:...,`) prefix
11
+ * and returns the raw payload bytes.
12
+ * 2. `computeContentHash` hashes the payload bytes (32-byte SHA-256).
13
+ * 3. The payload is zstd-compressed (`codec='zstd'`) — matching
14
+ * `page_html_blobs` / `json_refs`.
15
+ * 4. `INSERT OR IGNORE` on `hash` deduplicates: an `<img>` element and a
16
+ * resource that share the same underlying base64 payload share one
17
+ * `blob_refs` row.
18
+ *
19
+ * Malformed data URIs that `decodeDataUri` cannot decode are logged and
20
+ * skipped — the raw URI string still exists in the source row, and the
21
+ * migration script's operator can hunt it down from the warning log. The
22
+ * alternative — routing malformed large URIs back to `url_refs` — would
23
+ * break the "data URIs > threshold live in blob_refs" contract that 0.13
24
+ * lookups depend on.
25
+ *
26
+ * On the reference archive only ~429 images use data URIs, so the total
27
+ * dictionary is tiny — this step is I/O-cheap even without full
28
+ * chunking, but the same batching shape is used as elsewhere for
29
+ * consistency.
30
+ * @param trx - Knex instance or transaction connected to the archive DB.
31
+ * @param onProgress - Optional sink for periodic progress lines (one per
32
+ * ~5% of each source table scanned); see {@link ../create-progress-reporter.ts}.
33
+ * @example
34
+ * await knex.transaction(async (trx) => {
35
+ * await populateBlobRefs(trx);
36
+ * });
37
+ */
38
+ export declare function populateBlobRefs(trx: Knex, onProgress?: ProgressCallback): Promise<void>;