@nitpicker/archive 0.0.0 → 0.25.1

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 (739) 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 +1055 -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 +803 -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 +45 -0
  315. package/lib/filesystem/parse-tar-size-field.d.ts +13 -0
  316. package/lib/filesystem/parse-tar-size-field.js +37 -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 +132 -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/compare-strings.d.ts +12 -0
  576. package/lib/test-utils/compare-strings.js +14 -0
  577. package/lib/test-utils/create-legacy-analysis-tables.d.ts +13 -0
  578. package/lib/test-utils/create-legacy-analysis-tables.js +37 -0
  579. package/lib/test-utils/fk-parent-tables.d.ts +15 -0
  580. package/lib/test-utils/fk-parent-tables.js +19 -0
  581. package/lib/test-utils/seed-content-item.d.ts +35 -0
  582. package/lib/test-utils/seed-content-item.js +42 -0
  583. package/lib/test-utils/setup-legacy-fk-db.d.ts +34 -0
  584. package/lib/test-utils/setup-legacy-fk-db.js +271 -0
  585. package/lib/transfer/attach-source-database.d.ts +31 -0
  586. package/lib/transfer/attach-source-database.js +40 -0
  587. package/lib/transfer/build-split-config.d.ts +30 -0
  588. package/lib/transfer/build-split-config.js +42 -0
  589. package/lib/transfer/clear-replaced-page-rows.d.ts +23 -0
  590. package/lib/transfer/clear-replaced-page-rows.js +61 -0
  591. package/lib/transfer/concat-archives.d.ts +55 -0
  592. package/lib/transfer/concat-archives.js +95 -0
  593. package/lib/transfer/concat-source-transfer-phases.d.ts +10 -0
  594. package/lib/transfer/concat-source-transfer-phases.js +17 -0
  595. package/lib/transfer/content-item-rank-sql.d.ts +21 -0
  596. package/lib/transfer/content-item-rank-sql.js +23 -0
  597. package/lib/transfer/copy-anchor-edges.d.ts +28 -0
  598. package/lib/transfer/copy-anchor-edges.js +42 -0
  599. package/lib/transfer/copy-dictionaries-for-concat.d.ts +39 -0
  600. package/lib/transfer/copy-dictionaries-for-concat.js +81 -0
  601. package/lib/transfer/copy-dictionaries-for-split.d.ts +29 -0
  602. package/lib/transfer/copy-dictionaries-for-split.js +224 -0
  603. package/lib/transfer/copy-header-set-children.d.ts +27 -0
  604. package/lib/transfer/copy-header-set-children.js +51 -0
  605. package/lib/transfer/copy-image-items.d.ts +21 -0
  606. package/lib/transfer/copy-image-items.js +62 -0
  607. package/lib/transfer/copy-inventory-source-lists.d.ts +30 -0
  608. package/lib/transfer/copy-inventory-source-lists.js +61 -0
  609. package/lib/transfer/copy-journal-tables.d.ts +30 -0
  610. package/lib/transfer/copy-journal-tables.js +56 -0
  611. package/lib/transfer/copy-page-console-logs.d.ts +16 -0
  612. package/lib/transfer/copy-page-console-logs.js +27 -0
  613. package/lib/transfer/copy-page-html-blobs.d.ts +31 -0
  614. package/lib/transfer/copy-page-html-blobs.js +43 -0
  615. package/lib/transfer/copy-page-meta.d.ts +27 -0
  616. package/lib/transfer/copy-page-meta.js +68 -0
  617. package/lib/transfer/copy-page-template-clusters.d.ts +31 -0
  618. package/lib/transfer/copy-page-template-clusters.js +56 -0
  619. package/lib/transfer/copy-page-template-labels.d.ts +34 -0
  620. package/lib/transfer/copy-page-template-labels.js +88 -0
  621. package/lib/transfer/copy-resource-items.d.ts +29 -0
  622. package/lib/transfer/copy-resource-items.js +89 -0
  623. package/lib/transfer/copy-resource-ref-edges.d.ts +20 -0
  624. package/lib/transfer/copy-resource-ref-edges.js +33 -0
  625. package/lib/transfer/copy-simple-page-scoped-tables.d.ts +15 -0
  626. package/lib/transfer/copy-simple-page-scoped-tables.js +34 -0
  627. package/lib/transfer/count-external-pages-in-scope.d.ts +26 -0
  628. package/lib/transfer/count-external-pages-in-scope.js +40 -0
  629. package/lib/transfer/create-transfer-temp-tables.d.ts +30 -0
  630. package/lib/transfer/create-transfer-temp-tables.js +59 -0
  631. package/lib/transfer/dictionary-copy-specs.d.ts +32 -0
  632. package/lib/transfer/dictionary-copy-specs.js +28 -0
  633. package/lib/transfer/drop-transfer-temp-tables.d.ts +9 -0
  634. package/lib/transfer/drop-transfer-temp-tables.js +18 -0
  635. package/lib/transfer/flatten-redirect-chains.d.ts +44 -0
  636. package/lib/transfer/flatten-redirect-chains.js +74 -0
  637. package/lib/transfer/insert-content-items.d.ts +35 -0
  638. package/lib/transfer/insert-content-items.js +116 -0
  639. package/lib/transfer/list-transfer-columns.d.ts +35 -0
  640. package/lib/transfer/list-transfer-columns.js +45 -0
  641. package/lib/transfer/mark-in-scope-content-items.d.ts +31 -0
  642. package/lib/transfer/mark-in-scope-content-items.js +54 -0
  643. package/lib/transfer/merge-archive-configs.d.ts +51 -0
  644. package/lib/transfer/merge-archive-configs.js +85 -0
  645. package/lib/transfer/plan-content-items-for-concat.d.ts +33 -0
  646. package/lib/transfer/plan-content-items-for-concat.js +51 -0
  647. package/lib/transfer/plan-content-items-for-split.d.ts +42 -0
  648. package/lib/transfer/plan-content-items-for-split.js +83 -0
  649. package/lib/transfer/plan-resource-items.d.ts +40 -0
  650. package/lib/transfer/plan-resource-items.js +69 -0
  651. package/lib/transfer/quote-transfer-identifier.d.ts +18 -0
  652. package/lib/transfer/quote-transfer-identifier.js +20 -0
  653. package/lib/transfer/reclassify-resource-externality.d.ts +37 -0
  654. package/lib/transfer/reclassify-resource-externality.js +66 -0
  655. package/lib/transfer/remap-redirect-dest-ids.d.ts +34 -0
  656. package/lib/transfer/remap-redirect-dest-ids.js +51 -0
  657. package/lib/transfer/replace-content-items.d.ts +39 -0
  658. package/lib/transfer/replace-content-items.js +83 -0
  659. package/lib/transfer/simple-page-scoped-tables.d.ts +25 -0
  660. package/lib/transfer/simple-page-scoped-tables.js +38 -0
  661. package/lib/transfer/split-archive.d.ts +55 -0
  662. package/lib/transfer/split-archive.js +98 -0
  663. package/lib/transfer/split-source-transfer-phases.d.ts +11 -0
  664. package/lib/transfer/split-source-transfer-phases.js +18 -0
  665. package/lib/transfer/transfer-action.d.ts +34 -0
  666. package/lib/transfer/transfer-action.js +32 -0
  667. package/lib/transfer/transfer-archive-rows.d.ts +65 -0
  668. package/lib/transfer/transfer-archive-rows.js +156 -0
  669. package/lib/transfer/transfer-dictionary-tables.d.ts +12 -0
  670. package/lib/transfer/transfer-dictionary-tables.js +22 -0
  671. package/lib/transfer/transfer-post-phases.d.ts +10 -0
  672. package/lib/transfer/transfer-post-phases.js +13 -0
  673. package/lib/transfer/transfer-source-alias.d.ts +9 -0
  674. package/lib/transfer/transfer-source-alias.js +9 -0
  675. package/lib/transfer/types.d.ts +111 -0
  676. package/lib/transfer/types.js +35 -0
  677. package/lib/types.d.ts +772 -0
  678. package/lib/types.js +1 -0
  679. package/lib/url-alias/compute-tier-a-alias-key.d.ts +44 -0
  680. package/lib/url-alias/compute-tier-a-alias-key.js +47 -0
  681. package/lib/url-alias/compute-tier-b-alias-key.d.ts +23 -0
  682. package/lib/url-alias/compute-tier-b-alias-key.js +26 -0
  683. package/lib/url-alias/group-alias-candidates.d.ts +27 -0
  684. package/lib/url-alias/group-alias-candidates.js +29 -0
  685. package/lib/url-alias/types.d.ts +12 -0
  686. package/lib/url-alias/types.js +1 -0
  687. package/lib/url-pattern/compute-shape-key.d.ts +58 -0
  688. package/lib/url-pattern/compute-shape-key.js +129 -0
  689. package/lib/url-pattern/decompose-url.d.ts +33 -0
  690. package/lib/url-pattern/decompose-url.js +79 -0
  691. package/lib/url-pattern/reconstruct-url.d.ts +15 -0
  692. package/lib/url-pattern/reconstruct-url.js +33 -0
  693. package/lib/url-sort/compute-url-sort-ranks.d.ts +30 -0
  694. package/lib/url-sort/compute-url-sort-ranks.js +33 -0
  695. package/lib/utils/array/each-splitted.d.ts +10 -0
  696. package/lib/utils/array/each-splitted.js +14 -0
  697. package/lib/utils/debug.d.ts +8 -0
  698. package/lib/utils/debug.js +8 -0
  699. package/lib/utils/error/emit-error-with-retry.d.ts +40 -0
  700. package/lib/utils/error/emit-error-with-retry.js +44 -0
  701. package/lib/utils/error/emit-error.d.ts +39 -0
  702. package/lib/utils/error/emit-error.js +41 -0
  703. package/lib/utils/object/parse-response-headers.d.ts +12 -0
  704. package/lib/utils/object/parse-response-headers.js +26 -0
  705. package/lib/utils/object/redact-request-headers.d.ts +15 -0
  706. package/lib/utils/object/redact-request-headers.js +27 -0
  707. package/lib/utils/types/types.d.ts +383 -0
  708. package/lib/utils/types/types.js +1 -0
  709. package/lib/verify-migration/capture-rejection.d.ts +24 -0
  710. package/lib/verify-migration/capture-rejection.js +31 -0
  711. package/lib/verify-migration/check-anchor-edges-count.d.ts +34 -0
  712. package/lib/verify-migration/check-anchor-edges-count.js +72 -0
  713. package/lib/verify-migration/check-anchor-edges-sum.d.ts +13 -0
  714. package/lib/verify-migration/check-anchor-edges-sum.js +27 -0
  715. package/lib/verify-migration/check-content-items-count.d.ts +16 -0
  716. package/lib/verify-migration/check-content-items-count.js +30 -0
  717. package/lib/verify-migration/check-content-type-preservation.d.ts +22 -0
  718. package/lib/verify-migration/check-content-type-preservation.js +40 -0
  719. package/lib/verify-migration/check-foreign-key-integrity.d.ts +31 -0
  720. package/lib/verify-migration/check-foreign-key-integrity.js +47 -0
  721. package/lib/verify-migration/check-image-items-count.d.ts +12 -0
  722. package/lib/verify-migration/check-image-items-count.js +26 -0
  723. package/lib/verify-migration/check-page-meta-count.d.ts +15 -0
  724. package/lib/verify-migration/check-page-meta-count.js +31 -0
  725. package/lib/verify-migration/check-reader-parity.d.ts +23 -0
  726. package/lib/verify-migration/check-reader-parity.js +182 -0
  727. package/lib/verify-migration/check-resource-items-count.d.ts +17 -0
  728. package/lib/verify-migration/check-resource-items-count.js +33 -0
  729. package/lib/verify-migration/check-url-round-trip.d.ts +43 -0
  730. package/lib/verify-migration/check-url-round-trip.js +112 -0
  731. package/lib/verify-migration/types.d.ts +70 -0
  732. package/lib/verify-migration/types.js +63 -0
  733. package/lib/verify-migration/verify-migration.d.ts +41 -0
  734. package/lib/verify-migration/verify-migration.js +120 -0
  735. package/lib/with-bulk-write-pragmas.d.ts +51 -0
  736. package/lib/with-bulk-write-pragmas.js +132 -0
  737. package/lib/write-queue.d.ts +32 -0
  738. package/lib/write-queue.js +55 -0
  739. package/package.json +350 -3
@@ -0,0 +1,29 @@
1
+ import { DATA_URI_URL_REFS_LIMIT } from '../../populate-ref-tables/data-uri-url-refs-limit.js';
2
+ import { upsertBlobRef } from './upsert-blob-ref.js';
3
+ import { upsertUrlRef } from './upsert-url-ref.js';
4
+ /**
5
+ * Routes one URL-shaped value to either `url_refs` or `blob_refs` per the
6
+ * data-URI threshold rule (large data URIs live in `blob_refs`, everything
7
+ * else in `url_refs`), upserting into whichever dictionary applies.
8
+ *
9
+ * Shared by every writer that can receive a `data:` URI in a URL-shaped
10
+ * column: `image_items.src` / `current_src` and `resource_items`' own
11
+ * identity URL. At most one of `url` / `blob` is non-null; both are `null`
12
+ * when the value is empty or a malformed data URI that fails to decode.
13
+ * @param qb - Knex instance or transaction connected to the archive DB.
14
+ * @param caches - The connection's write-side id caches.
15
+ * @param value - Raw URL-shaped value.
16
+ * @returns `{ url, blob }` pair with at most one non-null field.
17
+ * @example
18
+ * const slot = await resolveUrlOrBlob(trx, caches, image.src);
19
+ * // slot.url set for a regular URL, slot.blob set for a large data: URI.
20
+ */
21
+ export async function resolveUrlOrBlob(qb, caches, value) {
22
+ if (typeof value !== 'string' || value === '') {
23
+ return { url: null, blob: null };
24
+ }
25
+ if (value.startsWith('data:') && value.length > DATA_URI_URL_REFS_LIMIT) {
26
+ return { url: null, blob: await upsertBlobRef(qb, caches, value) };
27
+ }
28
+ return { url: await upsertUrlRef(qb, caches, value), blob: null };
29
+ }
@@ -0,0 +1,16 @@
1
+ import type { RetryCallOptions } from '@d-zero/shared/retry';
2
+ /**
3
+ * Default retry options shared by every `Database.*` op that wraps its
4
+ * knex work in {@link ../../utils/error/emit-error-with-retry.ts}
5
+ * (`emitErrorAndRetry`) or {@link ../../utils/error/emit-error.ts}
6
+ * (`emitError`, no retry). Three retries at 300 ms intervals covers the
7
+ * transient libsql failure modes (WAL contention, brief lock waits)
8
+ * without letting a genuinely broken query hang the crawler for long.
9
+ *
10
+ * Two ops deliberately do NOT use these settings and instead wrap
11
+ * `retryCall` themselves so they can override `label` (`getResourceByUrl`)
12
+ * or opt out entirely (`checkpoint`, `destroy`, `getKnex`,
13
+ * `setUrlOrder`, the `constructor`, and `Database.connect`). See the
14
+ * corresponding op files for the reasoning at each site.
15
+ */
16
+ export declare const retrySetting: RetryCallOptions;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Default retry options shared by every `Database.*` op that wraps its
3
+ * knex work in {@link ../../utils/error/emit-error-with-retry.ts}
4
+ * (`emitErrorAndRetry`) or {@link ../../utils/error/emit-error.ts}
5
+ * (`emitError`, no retry). Three retries at 300 ms intervals covers the
6
+ * transient libsql failure modes (WAL contention, brief lock waits)
7
+ * without letting a genuinely broken query hang the crawler for long.
8
+ *
9
+ * Two ops deliberately do NOT use these settings and instead wrap
10
+ * `retryCall` themselves so they can override `label` (`getResourceByUrl`)
11
+ * or opt out entirely (`checkpoint`, `destroy`, `getKnex`,
12
+ * `setUrlOrder`, the `constructor`, and `Database.connect`). See the
13
+ * corresponding op files for the reasoning at each site.
14
+ */
15
+ export const retrySetting = {
16
+ interval: 300,
17
+ retries: 3,
18
+ };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Parses a JSON column value, returning `null` on parse failure rather
3
+ * than throwing. JSON columns in `page_jsonld` (`parsed`) and `page_tags`
4
+ * (`categories`, `sources`) are written by `JSON.stringify` and round-trip
5
+ * cleanly under normal conditions; a hand-edited archive that has
6
+ * malformed JSON in those columns should degrade gracefully rather than
7
+ * propagate a parse error up to the consumer.
8
+ * @param value - JSON-encoded text.
9
+ * @returns Parsed value, or `null` if the input could not be parsed.
10
+ */
11
+ export declare function safeParseJson(value: string): unknown;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Parses a JSON column value, returning `null` on parse failure rather
3
+ * than throwing. JSON columns in `page_jsonld` (`parsed`) and `page_tags`
4
+ * (`categories`, `sources`) are written by `JSON.stringify` and round-trip
5
+ * cleanly under normal conditions; a hand-edited archive that has
6
+ * malformed JSON in those columns should degrade gracefully rather than
7
+ * propagate a parse error up to the consumer.
8
+ * @param value - JSON-encoded text.
9
+ * @returns Parsed value, or `null` if the input could not be parsed.
10
+ */
11
+ export function safeParseJson(value) {
12
+ try {
13
+ return JSON.parse(value);
14
+ }
15
+ catch {
16
+ return null;
17
+ }
18
+ }
@@ -0,0 +1,94 @@
1
+ import type { HeaderTableCaches } from '../../populate-ref-tables/types.js';
2
+ import type { PageSource } from '../../types.js';
3
+ /**
4
+ * One cached `content_items` identity: the row id plus the provenance
5
+ * label at the time it was last read or written through the cache. The
6
+ * `source` copy lets {@link ../_shared/resolve-content-item-id.ts} apply
7
+ * the crawled-wins downgrade without re-reading the row on every anchor
8
+ * hit.
9
+ */
10
+ export interface ContentItemCacheEntry {
11
+ /** `content_items.id`. */
12
+ id: number;
13
+ /** `content_items.source` as last observed / written by this process. */
14
+ source: PageSource;
15
+ /**
16
+ * `content_items.is_metadata_only` as last observed / written by this
17
+ * process. Lets {@link ../_shared/resolve-content-item-id.ts} skip a
18
+ * redundant `UPDATE` when a later resolution recomputes the same value.
19
+ */
20
+ isMetadataOnly: 0 | 1;
21
+ }
22
+ /**
23
+ * In-process id caches shared across one archive connection's write path.
24
+ *
25
+ * Every ref-table upsert primitive under `db-ops/_shared/` consults these
26
+ * maps before touching SQL. The caches are correct for the lifetime of a
27
+ * single writer connection because ref rows are append-only (`url_refs`,
28
+ * `text_refs`, `json_refs`, `blob_refs`, `content_type_refs`, header
29
+ * dictionaries never delete rows) and `content_items` identities
30
+ * (`id`, `url_id`) are never reassigned — only the cached `source` can
31
+ * change, and the sole writer of that column is the cache-aware downgrade
32
+ * in `resolve-content-item-id.ts` itself.
33
+ *
34
+ * NOT safe to share across processes or across two concurrent writer
35
+ * connections — the crawler holds a single writer connection per archive
36
+ * (enforced by the archive lock), so no such sharing exists.
37
+ */
38
+ export interface WriteRefCaches {
39
+ /** `url string → url_refs.id`. */
40
+ readonly urlIds: Map<string, number>;
41
+ /** `url string → content_items` identity (id + last-known source). */
42
+ readonly contentItems: Map<string, ContentItemCacheEntry>;
43
+ /** `url string → resource_items.id`. */
44
+ readonly resourceIds: Map<string, number>;
45
+ /** `normalized content-type raw value → content_type_refs.id`. */
46
+ readonly contentTypeIds: Map<string, number>;
47
+ /** `hex(content hash) → json_refs.id`. */
48
+ readonly jsonIds: Map<string, number>;
49
+ /** `hex(content hash) → blob_refs.id`. */
50
+ readonly blobIds: Map<string, number>;
51
+ /** `hex(content hash) → console_log_items.id`. */
52
+ readonly consoleLogIds: Map<string, number>;
53
+ /**
54
+ * Header dictionary caches (`header_name_refs` / `header_value_refs` /
55
+ * `header_sets` id maps). `null` until the first header-set upsert
56
+ * warms them from the DB — warming issues three SELECTs, which a
57
+ * crawl that never stores headers (e.g. list-mode with no responses)
58
+ * should not pay for.
59
+ */
60
+ headers: HeaderTableCaches | null;
61
+ }
62
+ /**
63
+ * Optional per-call flags for {@link ../_shared/resolve-content-item-id.ts}.
64
+ */
65
+ export interface ResolveContentItemIdOptions {
66
+ /**
67
+ * `1` marks the row as an external URL that will never be scraped as a
68
+ * target. Recorded on new inserts only. Defaults to `0` (in-scope) on
69
+ * insert, mirroring the legacy column default.
70
+ */
71
+ isExternal?: 0 | 1;
72
+ /**
73
+ * Provenance label put on a newly-inserted row. Omit to let the
74
+ * `content_items.source` DEFAULT (`'crawled'`) apply. Pass `'crawled'`
75
+ * to arm the crawled-wins downgrade on existing inventory-labelled rows.
76
+ */
77
+ source?: PageSource;
78
+ /**
79
+ * `1` marks the row as fated for a metadata-only (title-only) scrape
80
+ * rather than a full one, `0` explicitly marks it as a full-scrape
81
+ * target. Omit (the default for every caller except
82
+ * `replaceAnchorEdges`) to leave the column untouched — those callers
83
+ * (redirects, resources, errors, skipped pages, console logs) have no
84
+ * opinion on scrape depth and must not clobber a value an
85
+ * anchor-discovery call already established.
86
+ * `!options.recursive || anchor.isExternal` is a pure function of the
87
+ * URL within one crawl session (`recursive` is session-constant,
88
+ * `isExternal` depends only on scope matching), so every anchor-path
89
+ * call for the same URL always recomputes the same value — there is no
90
+ * real conflict to arbitrate between two *opinionated* calls, only
91
+ * between an opinionated call and the unopinionated majority.
92
+ */
93
+ isMetadataOnly?: 0 | 1;
94
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,25 @@
1
+ import type { WriteRefCaches } from './types.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Resolves the `blob_refs.id` for one large `data:` URI, decoding and
5
+ * inserting the deduplicated (hash-keyed) payload row when it is new.
6
+ *
7
+ * Callers route values here per the data-URI threshold rule (`data:` URIs
8
+ * longer than `DATA_URI_URL_REFS_LIMIT` — everything else belongs in
9
+ * `url_refs`). The payload bytes are decoded from the base64 /
10
+ * percent-encoded tail, hashed, and stored zstd-compressed — the same
11
+ * storage contract as the rows produced when migrating an existing
12
+ * archive (`populate-ref-tables/populate-blob-refs.ts`).
13
+ *
14
+ * Returns `null` when the data URI fails to decode (malformed base64 /
15
+ * truncated percent escape). A single malformed image `src` must not
16
+ * abort the page write; the caller stores `*_blob_id = null` and the
17
+ * information loss is limited to that one slot.
18
+ * @param qb - Knex instance or transaction connected to the archive DB.
19
+ * @param caches - The connection's write-side id caches; mutated in place.
20
+ * @param dataUri - The raw `data:` URI value.
21
+ * @returns The `blob_refs.id`, or `null` when the URI cannot be decoded.
22
+ * @example
23
+ * const id = await upsertBlobRef(knex, caches, 'data:image/png;base64,<payload>');
24
+ */
25
+ export declare function upsertBlobRef(qb: Knex | Knex.Transaction, caches: WriteRefCaches, dataUri: string): Promise<number | null>;
@@ -0,0 +1,48 @@
1
+ import { zstdCompressSync } from 'node:zlib';
2
+ import { computeContentHash } from '../../populate-ref-tables/compute-content-hash.js';
3
+ import { decodeDataUri } from '../../populate-ref-tables/decode-data-uri.js';
4
+ /**
5
+ * Resolves the `blob_refs.id` for one large `data:` URI, decoding and
6
+ * inserting the deduplicated (hash-keyed) payload row when it is new.
7
+ *
8
+ * Callers route values here per the data-URI threshold rule (`data:` URIs
9
+ * longer than `DATA_URI_URL_REFS_LIMIT` — everything else belongs in
10
+ * `url_refs`). The payload bytes are decoded from the base64 /
11
+ * percent-encoded tail, hashed, and stored zstd-compressed — the same
12
+ * storage contract as the rows produced when migrating an existing
13
+ * archive (`populate-ref-tables/populate-blob-refs.ts`).
14
+ *
15
+ * Returns `null` when the data URI fails to decode (malformed base64 /
16
+ * truncated percent escape). A single malformed image `src` must not
17
+ * abort the page write; the caller stores `*_blob_id = null` and the
18
+ * information loss is limited to that one slot.
19
+ * @param qb - Knex instance or transaction connected to the archive DB.
20
+ * @param caches - The connection's write-side id caches; mutated in place.
21
+ * @param dataUri - The raw `data:` URI value.
22
+ * @returns The `blob_refs.id`, or `null` when the URI cannot be decoded.
23
+ * @example
24
+ * const id = await upsertBlobRef(knex, caches, 'data:image/png;base64,<payload>');
25
+ */
26
+ export async function upsertBlobRef(qb, caches, dataUri) {
27
+ const decoded = decodeDataUri(dataUri);
28
+ if (decoded === null) {
29
+ return null;
30
+ }
31
+ const hash = computeContentHash(decoded.bytes);
32
+ const hex = hash.toString('hex');
33
+ const cached = caches.blobIds.get(hex);
34
+ if (cached !== undefined) {
35
+ return cached;
36
+ }
37
+ const compressed = zstdCompressSync(decoded.bytes);
38
+ const rows = await qb.raw(`INSERT INTO blob_refs (hash, body, codec, size_raw, size_stored)
39
+ VALUES (?, ?, 'zstd', ?, ?)
40
+ ON CONFLICT(hash) DO UPDATE SET hash = hash
41
+ RETURNING id`, [hash, compressed, decoded.bytes.byteLength, compressed.byteLength]);
42
+ const first = rows[0];
43
+ if (first === undefined) {
44
+ throw new Error('upsertBlobRef: RETURNING yielded no row');
45
+ }
46
+ caches.blobIds.set(hex, first.id);
47
+ return first.id;
48
+ }
@@ -0,0 +1,30 @@
1
+ import type { WriteRefCaches } from './types.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Resolves the `content_type_refs.id` for one content-type value,
5
+ * inserting the dictionary row when the value is new.
6
+ *
7
+ * `raw` is expected to be the already-canonicalised form produced by
8
+ * `normalizeContentType` (lower-cased, trimmed) — the write path
9
+ * canonicalises before storing, exactly as the legacy `pages.contentType`
10
+ * column did, so the dictionary's natural key never forks on case or
11
+ * whitespace variants of the same MIME. `normalized` is derived via the
12
+ * shared {@link ../../populate-ref-tables/normalize-mime.ts} (the same
13
+ * derivation the archive-migration populate uses, so live-crawl rows and
14
+ * migrated rows never fork on the same raw value); `category` via
15
+ * {@link ../../populate-ref-tables/classify-content-type.ts}.
16
+ *
17
+ * The content-type space is tiny (well under 1 000 distinct values on
18
+ * even the largest archives) so the cache converges after the first few
19
+ * pages and steady-state calls issue no SQL.
20
+ * @param qb - Knex instance or transaction connected to the archive DB.
21
+ * @param caches - The connection's write-side id caches; mutated in place.
22
+ * @param raw - Canonicalised content-type value. Pass the output of
23
+ * `normalizeContentType`; `null` / empty input must be short-circuited
24
+ * by the caller (a row without a content type stores `content_type_id
25
+ * = null`, not a dictionary entry).
26
+ * @returns The `content_type_refs.id` of the existing or new row.
27
+ * @example
28
+ * const id = await upsertContentTypeRef(knex, caches, 'text/html');
29
+ */
30
+ export declare function upsertContentTypeRef(qb: Knex | Knex.Transaction, caches: WriteRefCaches, raw: string): Promise<number>;
@@ -0,0 +1,45 @@
1
+ import { classifyContentType } from '../../populate-ref-tables/classify-content-type.js';
2
+ import { normalizeMime } from '../../populate-ref-tables/normalize-mime.js';
3
+ /**
4
+ * Resolves the `content_type_refs.id` for one content-type value,
5
+ * inserting the dictionary row when the value is new.
6
+ *
7
+ * `raw` is expected to be the already-canonicalised form produced by
8
+ * `normalizeContentType` (lower-cased, trimmed) — the write path
9
+ * canonicalises before storing, exactly as the legacy `pages.contentType`
10
+ * column did, so the dictionary's natural key never forks on case or
11
+ * whitespace variants of the same MIME. `normalized` is derived via the
12
+ * shared {@link ../../populate-ref-tables/normalize-mime.ts} (the same
13
+ * derivation the archive-migration populate uses, so live-crawl rows and
14
+ * migrated rows never fork on the same raw value); `category` via
15
+ * {@link ../../populate-ref-tables/classify-content-type.ts}.
16
+ *
17
+ * The content-type space is tiny (well under 1 000 distinct values on
18
+ * even the largest archives) so the cache converges after the first few
19
+ * pages and steady-state calls issue no SQL.
20
+ * @param qb - Knex instance or transaction connected to the archive DB.
21
+ * @param caches - The connection's write-side id caches; mutated in place.
22
+ * @param raw - Canonicalised content-type value. Pass the output of
23
+ * `normalizeContentType`; `null` / empty input must be short-circuited
24
+ * by the caller (a row without a content type stores `content_type_id
25
+ * = null`, not a dictionary entry).
26
+ * @returns The `content_type_refs.id` of the existing or new row.
27
+ * @example
28
+ * const id = await upsertContentTypeRef(knex, caches, 'text/html');
29
+ */
30
+ export async function upsertContentTypeRef(qb, caches, raw) {
31
+ const cached = caches.contentTypeIds.get(raw);
32
+ if (cached !== undefined) {
33
+ return cached;
34
+ }
35
+ const rows = await qb.raw(`INSERT INTO content_type_refs (raw, normalized, category)
36
+ VALUES (?, ?, ?)
37
+ ON CONFLICT(raw) DO UPDATE SET raw = raw
38
+ RETURNING id`, [raw, normalizeMime(raw), classifyContentType(raw)]);
39
+ const first = rows[0];
40
+ if (first === undefined) {
41
+ throw new Error(`upsertContentTypeRef: RETURNING yielded no row for ${raw}`);
42
+ }
43
+ caches.contentTypeIds.set(raw, first.id);
44
+ return first.id;
45
+ }
@@ -0,0 +1,22 @@
1
+ import type { WriteRefCaches } from './types.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Resolves the `json_refs.id` for one JSON payload string, inserting the
5
+ * deduplicated (hash-keyed) row when the payload is new.
6
+ *
7
+ * The payload is hashed over its raw UTF-8 bytes and stored
8
+ * zstd-compressed (`codec = 'zstd'`) with `size_raw` / `size_stored`
9
+ * bookkeeping — the same storage contract as `page_html_blobs` and the
10
+ * dictionary rows produced when migrating an existing archive
11
+ * (`populate-ref-tables/populate-json-refs.ts`). Identical payloads
12
+ * (e.g. the same `meta_extras` JSON across templated pages) produce one
13
+ * row; the compression cost is paid only on a cache-and-DB miss.
14
+ * @param qb - Knex instance or transaction connected to the archive DB.
15
+ * @param caches - The connection's write-side id caches; mutated in place.
16
+ * @param jsonText - Raw JSON string. Empty / null input must be
17
+ * short-circuited by the caller (`*_json_id = null`).
18
+ * @returns The `json_refs.id` of the existing or new row.
19
+ * @example
20
+ * const id = await upsertJsonRef(knex, caches, JSON.stringify(extras));
21
+ */
22
+ export declare function upsertJsonRef(qb: Knex | Knex.Transaction, caches: WriteRefCaches, jsonText: string): Promise<number>;
@@ -0,0 +1,41 @@
1
+ import { computeContentHash } from '../../populate-ref-tables/compute-content-hash.js';
2
+ import { compressPayload } from './compress-payload.js';
3
+ /**
4
+ * Resolves the `json_refs.id` for one JSON payload string, inserting the
5
+ * deduplicated (hash-keyed) row when the payload is new.
6
+ *
7
+ * The payload is hashed over its raw UTF-8 bytes and stored
8
+ * zstd-compressed (`codec = 'zstd'`) with `size_raw` / `size_stored`
9
+ * bookkeeping — the same storage contract as `page_html_blobs` and the
10
+ * dictionary rows produced when migrating an existing archive
11
+ * (`populate-ref-tables/populate-json-refs.ts`). Identical payloads
12
+ * (e.g. the same `meta_extras` JSON across templated pages) produce one
13
+ * row; the compression cost is paid only on a cache-and-DB miss.
14
+ * @param qb - Knex instance or transaction connected to the archive DB.
15
+ * @param caches - The connection's write-side id caches; mutated in place.
16
+ * @param jsonText - Raw JSON string. Empty / null input must be
17
+ * short-circuited by the caller (`*_json_id = null`).
18
+ * @returns The `json_refs.id` of the existing or new row.
19
+ * @example
20
+ * const id = await upsertJsonRef(knex, caches, JSON.stringify(extras));
21
+ */
22
+ export async function upsertJsonRef(qb, caches, jsonText) {
23
+ const rawBytes = Buffer.from(jsonText, 'utf8');
24
+ const hash = computeContentHash(rawBytes);
25
+ const hex = hash.toString('hex');
26
+ const cached = caches.jsonIds.get(hex);
27
+ if (cached !== undefined) {
28
+ return cached;
29
+ }
30
+ const { body, sizeRaw, sizeStored } = compressPayload(rawBytes);
31
+ const rows = await qb.raw(`INSERT INTO json_refs (hash, json_text, codec, size_raw, size_stored)
32
+ VALUES (?, ?, 'zstd', ?, ?)
33
+ ON CONFLICT(hash) DO UPDATE SET hash = hash
34
+ RETURNING id`, [hash, body, sizeRaw, sizeStored]);
35
+ const first = rows[0];
36
+ if (first === undefined) {
37
+ throw new Error('upsertJsonRef: RETURNING yielded no row');
38
+ }
39
+ caches.jsonIds.set(hex, first.id);
40
+ return first.id;
41
+ }
@@ -0,0 +1,35 @@
1
+ import type { WriteRefCaches } from './types.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Decomposes one response's headers and upserts them into the header
5
+ * dictionary tables (`header_name_refs` / `header_value_refs` /
6
+ * `header_sets` / `header_set_entries` / `header_flags`), returning the
7
+ * `header_sets.id` to store on the referring `content_items` /
8
+ * `resource_items` row.
9
+ *
10
+ * Runs per response (incrementally during the crawl), not deferred to
11
+ * crawl-end — the header dictionaries grow as pages arrive and the
12
+ * entity row can reference its `header_set_id` in the same write.
13
+ * Dedup makes the steady-state cost small: CDN-served sites reuse a
14
+ * handful of header shapes, so after the first few pages most calls
15
+ * resolve entirely from the in-process caches (warmed lazily from the DB
16
+ * on the first call, so a crawl that never sees headers pays nothing).
17
+ *
18
+ * Returns `null` for responses with no headers (`null` / `{}` /
19
+ * unparsable) — the referring row stores `header_set_id = null`, which
20
+ * is exactly how such rows read back through `header_flags` joins
21
+ * (absent flags row = no headers recorded).
22
+ * @param qb - Knex instance or transaction connected to the archive DB.
23
+ * @param caches - The connection's write-side id caches; the header
24
+ * sub-caches are created and attached on first use.
25
+ * @param responseHeaders - The response's header record as delivered by
26
+ * the scraper (`Record<name, string | string[]>`), or `null` /
27
+ * `undefined` when the response carried none.
28
+ * @returns The `header_sets.id`, or `null` when there is no set to store.
29
+ * @example
30
+ * const headerSetId = await upsertResponseHeaders(knex, caches, {
31
+ * 'content-type': 'text/html',
32
+ * 'cache-control': 'no-store',
33
+ * });
34
+ */
35
+ export declare function upsertResponseHeaders(qb: Knex | Knex.Transaction, caches: WriteRefCaches, responseHeaders: Record<string, string | string[] | undefined> | null | undefined): Promise<number | null>;
@@ -0,0 +1,49 @@
1
+ import { createHeaderTableCaches } from '../../populate-ref-tables/create-header-table-caches.js';
2
+ import { decomposeHeaderSet } from '../../populate-ref-tables/decompose-header-set.js';
3
+ import { upsertOneHeaderSet } from '../../populate-ref-tables/upsert-one-header-set.js';
4
+ /**
5
+ * Decomposes one response's headers and upserts them into the header
6
+ * dictionary tables (`header_name_refs` / `header_value_refs` /
7
+ * `header_sets` / `header_set_entries` / `header_flags`), returning the
8
+ * `header_sets.id` to store on the referring `content_items` /
9
+ * `resource_items` row.
10
+ *
11
+ * Runs per response (incrementally during the crawl), not deferred to
12
+ * crawl-end — the header dictionaries grow as pages arrive and the
13
+ * entity row can reference its `header_set_id` in the same write.
14
+ * Dedup makes the steady-state cost small: CDN-served sites reuse a
15
+ * handful of header shapes, so after the first few pages most calls
16
+ * resolve entirely from the in-process caches (warmed lazily from the DB
17
+ * on the first call, so a crawl that never sees headers pays nothing).
18
+ *
19
+ * Returns `null` for responses with no headers (`null` / `{}` /
20
+ * unparsable) — the referring row stores `header_set_id = null`, which
21
+ * is exactly how such rows read back through `header_flags` joins
22
+ * (absent flags row = no headers recorded).
23
+ * @param qb - Knex instance or transaction connected to the archive DB.
24
+ * @param caches - The connection's write-side id caches; the header
25
+ * sub-caches are created and attached on first use.
26
+ * @param responseHeaders - The response's header record as delivered by
27
+ * the scraper (`Record<name, string | string[]>`), or `null` /
28
+ * `undefined` when the response carried none.
29
+ * @returns The `header_sets.id`, or `null` when there is no set to store.
30
+ * @example
31
+ * const headerSetId = await upsertResponseHeaders(knex, caches, {
32
+ * 'content-type': 'text/html',
33
+ * 'cache-control': 'no-store',
34
+ * });
35
+ */
36
+ export async function upsertResponseHeaders(qb, caches, responseHeaders) {
37
+ // Serialise exactly like the scraper's own JSON storage form so the
38
+ // decomposition (and its raw_json_hash dedup key) matches what a bulk
39
+ // archive populate would compute for the same response.
40
+ const rawJson = responseHeaders == null ? null : JSON.stringify(responseHeaders);
41
+ const decomposed = decomposeHeaderSet(rawJson);
42
+ if (decomposed === null) {
43
+ return null;
44
+ }
45
+ if (caches.headers === null) {
46
+ caches.headers = await createHeaderTableCaches(qb);
47
+ }
48
+ return await upsertOneHeaderSet(qb, decomposed, caches.headers);
49
+ }
@@ -0,0 +1,39 @@
1
+ import type { WriteRefCaches } from './types.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Resolves the `url_refs.id` for one URL string, inserting the row (with
5
+ * its decomposed `scheme` / `host` / `port` / `path` / `query_hash` /
6
+ * `fragment` columns) when the URL is not yet in the dictionary.
7
+ *
8
+ * The write path calls this for every URL it touches — page identities,
9
+ * anchor hrefs, image `src` / `currentSrc`, resource URLs, and URL-shaped
10
+ * meta columns — so the result is cached in `caches.urlIds` and a cache
11
+ * hit issues no SQL at all. Anchor hrefs and CDN-hosted image URLs repeat
12
+ * across thousands of pages, so the hit rate dominates after the first
13
+ * few pages.
14
+ *
15
+ * The cache-miss upsert is a single statement:
16
+ *
17
+ * ```sql
18
+ * INSERT INTO url_refs (...) VALUES (...)
19
+ * ON CONFLICT(url) DO UPDATE SET url = url
20
+ * RETURNING id
21
+ * ```
22
+ *
23
+ * `DO UPDATE SET url = url` is a deliberate no-op update whose only
24
+ * purpose is to make `RETURNING id` yield the existing row's id on
25
+ * conflict. `INSERT OR IGNORE ... RETURNING id` must NOT be used here:
26
+ * `RETURNING` returns zero rows when the insert is ignored, which would
27
+ * leave the caller with no id and a `null` FK on the next entity INSERT.
28
+ * @param qb - Knex instance or transaction connected to the archive DB.
29
+ * Callers inside a transaction MUST pass the `trx` so the read sees
30
+ * uncommitted rows from the same transaction.
31
+ * @param caches - The connection's write-side id caches; mutated in place.
32
+ * @param url - The URL string to resolve. Stored verbatim as the natural key.
33
+ * @returns The `url_refs.id` of the existing or newly inserted row.
34
+ * @example
35
+ * const id = await upsertUrlRef(knex, caches, 'https://example.com/a');
36
+ * const again = await upsertUrlRef(knex, caches, 'https://example.com/a');
37
+ * // id === again, second call hits the cache and issues no SQL
38
+ */
39
+ export declare function upsertUrlRef(qb: Knex | Knex.Transaction, caches: WriteRefCaches, url: string): Promise<number>;
@@ -0,0 +1,62 @@
1
+ import { decomposeUrl } from '../../populate-ref-tables/decompose-url.js';
2
+ /**
3
+ * Resolves the `url_refs.id` for one URL string, inserting the row (with
4
+ * its decomposed `scheme` / `host` / `port` / `path` / `query_hash` /
5
+ * `fragment` columns) when the URL is not yet in the dictionary.
6
+ *
7
+ * The write path calls this for every URL it touches — page identities,
8
+ * anchor hrefs, image `src` / `currentSrc`, resource URLs, and URL-shaped
9
+ * meta columns — so the result is cached in `caches.urlIds` and a cache
10
+ * hit issues no SQL at all. Anchor hrefs and CDN-hosted image URLs repeat
11
+ * across thousands of pages, so the hit rate dominates after the first
12
+ * few pages.
13
+ *
14
+ * The cache-miss upsert is a single statement:
15
+ *
16
+ * ```sql
17
+ * INSERT INTO url_refs (...) VALUES (...)
18
+ * ON CONFLICT(url) DO UPDATE SET url = url
19
+ * RETURNING id
20
+ * ```
21
+ *
22
+ * `DO UPDATE SET url = url` is a deliberate no-op update whose only
23
+ * purpose is to make `RETURNING id` yield the existing row's id on
24
+ * conflict. `INSERT OR IGNORE ... RETURNING id` must NOT be used here:
25
+ * `RETURNING` returns zero rows when the insert is ignored, which would
26
+ * leave the caller with no id and a `null` FK on the next entity INSERT.
27
+ * @param qb - Knex instance or transaction connected to the archive DB.
28
+ * Callers inside a transaction MUST pass the `trx` so the read sees
29
+ * uncommitted rows from the same transaction.
30
+ * @param caches - The connection's write-side id caches; mutated in place.
31
+ * @param url - The URL string to resolve. Stored verbatim as the natural key.
32
+ * @returns The `url_refs.id` of the existing or newly inserted row.
33
+ * @example
34
+ * const id = await upsertUrlRef(knex, caches, 'https://example.com/a');
35
+ * const again = await upsertUrlRef(knex, caches, 'https://example.com/a');
36
+ * // id === again, second call hits the cache and issues no SQL
37
+ */
38
+ export async function upsertUrlRef(qb, caches, url) {
39
+ const cached = caches.urlIds.get(url);
40
+ if (cached !== undefined) {
41
+ return cached;
42
+ }
43
+ const decomposed = decomposeUrl(url);
44
+ const rows = await qb.raw(`INSERT INTO url_refs (url, scheme, host, port, path, query_hash, fragment)
45
+ VALUES (?, ?, ?, ?, ?, ?, ?)
46
+ ON CONFLICT(url) DO UPDATE SET url = url
47
+ RETURNING id`, [
48
+ url,
49
+ decomposed.scheme,
50
+ decomposed.host,
51
+ decomposed.port,
52
+ decomposed.path,
53
+ decomposed.query_hash,
54
+ decomposed.fragment,
55
+ ]);
56
+ const first = rows[0];
57
+ if (first === undefined) {
58
+ throw new Error(`upsertUrlRef: RETURNING yielded no row for ${url}`);
59
+ }
60
+ caches.urlIds.set(url, first.id);
61
+ return first.id;
62
+ }
@@ -0,0 +1,10 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Retrieves all anchors (outgoing links) on a specific page.
4
+ * Joins `anchor_edges` with `content_items` (+ `page_meta` for title) to
5
+ * resolve link destinations.
6
+ * @param knex - Knex query builder connected to the archive DB.
7
+ * @param pageId - The database ID of the page whose anchors to retrieve.
8
+ * @returns An array of anchor records with resolved URL, title, status, and content type.
9
+ */
10
+ export declare function getAnchorsOnPage(knex: Knex, pageId: number): Promise<any[]>;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Retrieves all anchors (outgoing links) on a specific page.
3
+ * Joins `anchor_edges` with `content_items` (+ `page_meta` for title) to
4
+ * resolve link destinations.
5
+ * @param knex - Knex query builder connected to the archive DB.
6
+ * @param pageId - The database ID of the page whose anchors to retrieve.
7
+ * @returns An array of anchor records with resolved URL, title, status, and content type.
8
+ */
9
+ export async function getAnchorsOnPage(knex, pageId) {
10
+ const res = await knex
11
+ .select('dest_url.url as url', 'title_ref.text as title', 'dest.status as status', 'dest.status_text as statusText', 'ctr.raw as contentType', 'anchor_edges.first_hash as hash', 'first_text.text as textContent')
12
+ .from('anchor_edges')
13
+ .join('content_items as dest', 'anchor_edges.href_page_id', '=', 'dest.id')
14
+ .join('url_refs as dest_url', 'dest.url_id', '=', 'dest_url.id')
15
+ .leftJoin('content_type_refs as ctr', 'dest.content_type_id', '=', 'ctr.id')
16
+ .leftJoin('page_meta as pm', 'dest.id', '=', 'pm.page_id')
17
+ .leftJoin('text_refs as title_ref', 'pm.title_text_id', '=', 'title_ref.id')
18
+ .leftJoin('text_refs as first_text', 'anchor_edges.first_text_id', '=', 'first_text.id')
19
+ .where('anchor_edges.page_id', pageId);
20
+ return res;
21
+ }
@@ -0,0 +1,8 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Retrieves the base URL of the crawl session from the `info` table.
4
+ * @param knex - Knex query builder connected to the archive DB.
5
+ * @returns The base URL string.
6
+ * @throws {Error} If no base URL is found in the database.
7
+ */
8
+ export declare function getBaseUrl(knex: Knex): Promise<string>;