@nitpicker/archive 0.0.0-stage → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (737) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +105 -2
  3. package/lib/apply-connection-pragmas.d.ts +18 -0
  4. package/lib/apply-connection-pragmas.js +40 -0
  5. package/lib/archive-accessor.d.ts +265 -0
  6. package/lib/archive-accessor.js +477 -0
  7. package/lib/archive-lock.d.ts +45 -0
  8. package/lib/archive-lock.js +154 -0
  9. package/lib/archive.d.ts +736 -0
  10. package/lib/archive.js +1056 -0
  11. package/lib/body-hash/compute-body-hash.d.ts +32 -0
  12. package/lib/body-hash/compute-body-hash.js +35 -0
  13. package/lib/cache/clear-archive-cache-entry.d.ts +18 -0
  14. package/lib/cache/clear-archive-cache-entry.js +24 -0
  15. package/lib/cache/clear-archive-cache-root.d.ts +26 -0
  16. package/lib/cache/clear-archive-cache-root.js +32 -0
  17. package/lib/cache/compute-archive-cache-key.d.ts +39 -0
  18. package/lib/cache/compute-archive-cache-key.js +95 -0
  19. package/lib/cache/extract-archive-to-cache.d.ts +57 -0
  20. package/lib/cache/extract-archive-to-cache.js +326 -0
  21. package/lib/cache/get-archive-cache-root.d.ts +20 -0
  22. package/lib/cache/get-archive-cache-root.js +53 -0
  23. package/lib/cache/is-archive-cache-disabled.d.ts +24 -0
  24. package/lib/cache/is-archive-cache-disabled.js +34 -0
  25. package/lib/cache/list-archive-cache-entries.d.ts +23 -0
  26. package/lib/cache/list-archive-cache-entries.js +130 -0
  27. package/lib/cache/path-exists.d.ts +9 -0
  28. package/lib/cache/path-exists.js +18 -0
  29. package/lib/cache/resolve-archive-cache-dir.d.ts +26 -0
  30. package/lib/cache/resolve-archive-cache-dir.js +32 -0
  31. package/lib/cache/types.d.ts +33 -0
  32. package/lib/cache/types.js +1 -0
  33. package/lib/content-type/is-html-content-type.d.ts +17 -0
  34. package/lib/content-type/is-html-content-type.js +19 -0
  35. package/lib/content-type/normalize-content-type.d.ts +14 -0
  36. package/lib/content-type/normalize-content-type.js +20 -0
  37. package/lib/create-adjunct-tables.d.ts +66 -0
  38. package/lib/create-adjunct-tables.js +510 -0
  39. package/lib/create-entity-tables.d.ts +191 -0
  40. package/lib/create-entity-tables.js +387 -0
  41. package/lib/create-progress-reporter.d.ts +30 -0
  42. package/lib/create-progress-reporter.js +38 -0
  43. package/lib/create-ref-tables.d.ts +35 -0
  44. package/lib/create-ref-tables.js +185 -0
  45. package/lib/create-template-tables.d.ts +28 -0
  46. package/lib/create-template-tables.js +92 -0
  47. package/lib/database.d.ts +549 -0
  48. package/lib/database.js +804 -0
  49. package/lib/db-ops/_shared/clear-write-ref-caches.d.ts +27 -0
  50. package/lib/db-ops/_shared/clear-write-ref-caches.js +35 -0
  51. package/lib/db-ops/_shared/compress-payload.d.ts +26 -0
  52. package/lib/db-ops/_shared/compress-payload.js +30 -0
  53. package/lib/db-ops/_shared/create-write-ref-caches.d.ts +17 -0
  54. package/lib/db-ops/_shared/create-write-ref-caches.js +27 -0
  55. package/lib/db-ops/_shared/decode-json-ref.d.ts +17 -0
  56. package/lib/db-ops/_shared/decode-json-ref.js +31 -0
  57. package/lib/db-ops/_shared/keyset-paginate-by-id.d.ts +49 -0
  58. package/lib/db-ops/_shared/keyset-paginate-by-id.js +69 -0
  59. package/lib/db-ops/_shared/load-response-headers-by-set-ids.d.ts +20 -0
  60. package/lib/db-ops/_shared/load-response-headers-by-set-ids.js +53 -0
  61. package/lib/db-ops/_shared/resolve-content-item-id.d.ts +62 -0
  62. package/lib/db-ops/_shared/resolve-content-item-id.js +143 -0
  63. package/lib/db-ops/_shared/resolve-url-or-blob.d.ts +23 -0
  64. package/lib/db-ops/_shared/resolve-url-or-blob.js +29 -0
  65. package/lib/db-ops/_shared/retry-setting.d.ts +16 -0
  66. package/lib/db-ops/_shared/retry-setting.js +18 -0
  67. package/lib/db-ops/_shared/safe-parse-json.d.ts +11 -0
  68. package/lib/db-ops/_shared/safe-parse-json.js +18 -0
  69. package/lib/db-ops/_shared/types.d.ts +94 -0
  70. package/lib/db-ops/_shared/types.js +1 -0
  71. package/lib/db-ops/_shared/upsert-blob-ref.d.ts +25 -0
  72. package/lib/db-ops/_shared/upsert-blob-ref.js +48 -0
  73. package/lib/db-ops/_shared/upsert-content-type-ref.d.ts +30 -0
  74. package/lib/db-ops/_shared/upsert-content-type-ref.js +45 -0
  75. package/lib/db-ops/_shared/upsert-json-ref.d.ts +22 -0
  76. package/lib/db-ops/_shared/upsert-json-ref.js +41 -0
  77. package/lib/db-ops/_shared/upsert-response-headers.d.ts +35 -0
  78. package/lib/db-ops/_shared/upsert-response-headers.js +49 -0
  79. package/lib/db-ops/_shared/upsert-url-ref.d.ts +39 -0
  80. package/lib/db-ops/_shared/upsert-url-ref.js +62 -0
  81. package/lib/db-ops/anchors/get-anchors-on-page.d.ts +10 -0
  82. package/lib/db-ops/anchors/get-anchors-on-page.js +21 -0
  83. package/lib/db-ops/config/get-base-url.d.ts +8 -0
  84. package/lib/db-ops/config/get-base-url.js +14 -0
  85. package/lib/db-ops/config/get-config.d.ts +10 -0
  86. package/lib/db-ops/config/get-config.js +29 -0
  87. package/lib/db-ops/config/get-created-cwd.d.ts +11 -0
  88. package/lib/db-ops/config/get-created-cwd.js +13 -0
  89. package/lib/db-ops/config/get-name.d.ts +8 -0
  90. package/lib/db-ops/config/get-name.js +14 -0
  91. package/lib/db-ops/config/info-column-allowlist.d.ts +7 -0
  92. package/lib/db-ops/config/info-column-allowlist.js +29 -0
  93. package/lib/db-ops/config/info-json-columns.d.ts +5 -0
  94. package/lib/db-ops/config/info-json-columns.js +11 -0
  95. package/lib/db-ops/config/set-config.d.ts +12 -0
  96. package/lib/db-ops/config/set-config.js +21 -0
  97. package/lib/db-ops/config/update-config.d.ts +17 -0
  98. package/lib/db-ops/config/update-config.js +36 -0
  99. package/lib/db-ops/console-logs/compute-console-log-hash.d.ts +19 -0
  100. package/lib/db-ops/console-logs/compute-console-log-hash.js +30 -0
  101. package/lib/db-ops/console-logs/replace-console-logs.d.ts +34 -0
  102. package/lib/db-ops/console-logs/replace-console-logs.js +123 -0
  103. package/lib/db-ops/console-logs/stringify-console-log-args.d.ts +16 -0
  104. package/lib/db-ops/console-logs/stringify-console-log-args.js +26 -0
  105. package/lib/db-ops/console-logs/types.d.ts +38 -0
  106. package/lib/db-ops/console-logs/types.js +1 -0
  107. package/lib/db-ops/console-logs/upsert-console-log-item.d.ts +29 -0
  108. package/lib/db-ops/console-logs/upsert-console-log-item.js +52 -0
  109. package/lib/db-ops/dedupe-cap/accumulate-dedupe-cap-rejected-count.d.ts +18 -0
  110. package/lib/db-ops/dedupe-cap/accumulate-dedupe-cap-rejected-count.js +23 -0
  111. package/lib/db-ops/dedupe-cap/finalize-dedupe-cap-event.d.ts +12 -0
  112. package/lib/db-ops/dedupe-cap/finalize-dedupe-cap-event.js +15 -0
  113. package/lib/db-ops/dedupe-cap/insert-dedupe-cap-event.d.ts +14 -0
  114. package/lib/db-ops/dedupe-cap/insert-dedupe-cap-event.js +30 -0
  115. package/lib/db-ops/dedupe-cap/list-dedupe-cap-observations.d.ts +57 -0
  116. package/lib/db-ops/dedupe-cap/list-dedupe-cap-observations.js +87 -0
  117. package/lib/db-ops/dedupe-cap/list-dedupe-cap-shape-keys.d.ts +21 -0
  118. package/lib/db-ops/dedupe-cap/list-dedupe-cap-shape-keys.js +27 -0
  119. package/lib/db-ops/errors/insert-crawl-error.d.ts +15 -0
  120. package/lib/db-ops/errors/insert-crawl-error.js +21 -0
  121. package/lib/db-ops/errors/insert-page-error.d.ts +21 -0
  122. package/lib/db-ops/errors/insert-page-error.js +30 -0
  123. package/lib/db-ops/errors/list-dns-burned-host-candidates.d.ts +33 -0
  124. package/lib/db-ops/errors/list-dns-burned-host-candidates.js +158 -0
  125. package/lib/db-ops/html/read-page-html-blob.d.ts +17 -0
  126. package/lib/db-ops/html/read-page-html-blob.js +20 -0
  127. package/lib/db-ops/lifecycle/checkpoint.d.ts +8 -0
  128. package/lib/db-ops/lifecycle/checkpoint.js +9 -0
  129. package/lib/db-ops/lifecycle/destroy.d.ts +6 -0
  130. package/lib/db-ops/lifecycle/destroy.js +7 -0
  131. package/lib/db-ops/lifecycle/init.d.ts +58 -0
  132. package/lib/db-ops/lifecycle/init.js +122 -0
  133. package/lib/db-ops/list-reconcile/record-list-reconcile-run.d.ts +22 -0
  134. package/lib/db-ops/list-reconcile/record-list-reconcile-run.js +41 -0
  135. package/lib/db-ops/meta/get-audios-of-page.d.ts +11 -0
  136. package/lib/db-ops/meta/get-audios-of-page.js +15 -0
  137. package/lib/db-ops/meta/get-buttons-of-page.d.ts +11 -0
  138. package/lib/db-ops/meta/get-buttons-of-page.js +15 -0
  139. package/lib/db-ops/meta/get-canvases-of-page.d.ts +11 -0
  140. package/lib/db-ops/meta/get-canvases-of-page.js +15 -0
  141. package/lib/db-ops/meta/get-custom-elements-of-page.d.ts +11 -0
  142. package/lib/db-ops/meta/get-custom-elements-of-page.js +15 -0
  143. package/lib/db-ops/meta/get-headings-of-page.d.ts +11 -0
  144. package/lib/db-ops/meta/get-headings-of-page.js +15 -0
  145. package/lib/db-ops/meta/get-iframes-of-page.d.ts +11 -0
  146. package/lib/db-ops/meta/get-iframes-of-page.js +15 -0
  147. package/lib/db-ops/meta/get-jsonld-of-page.d.ts +13 -0
  148. package/lib/db-ops/meta/get-jsonld-of-page.js +27 -0
  149. package/lib/db-ops/meta/get-main-content-images-of-page.d.ts +11 -0
  150. package/lib/db-ops/meta/get-main-content-images-of-page.js +15 -0
  151. package/lib/db-ops/meta/get-main-content-tables-of-page.d.ts +11 -0
  152. package/lib/db-ops/meta/get-main-content-tables-of-page.js +15 -0
  153. package/lib/db-ops/meta/get-page-technologies-of-page.d.ts +11 -0
  154. package/lib/db-ops/meta/get-page-technologies-of-page.js +15 -0
  155. package/lib/db-ops/meta/get-technology-signals-of-page.d.ts +11 -0
  156. package/lib/db-ops/meta/get-technology-signals-of-page.js +15 -0
  157. package/lib/db-ops/meta/get-videos-of-page.d.ts +11 -0
  158. package/lib/db-ops/meta/get-videos-of-page.js +15 -0
  159. package/lib/db-ops/outages/close-network-outage.d.ts +12 -0
  160. package/lib/db-ops/outages/close-network-outage.js +15 -0
  161. package/lib/db-ops/outages/close-stale-open-network-outages.d.ts +26 -0
  162. package/lib/db-ops/outages/close-stale-open-network-outages.js +42 -0
  163. package/lib/db-ops/outages/compute-outage-clamp-timestamp.d.ts +26 -0
  164. package/lib/db-ops/outages/compute-outage-clamp-timestamp.js +31 -0
  165. package/lib/db-ops/outages/insert-network-outage.d.ts +14 -0
  166. package/lib/db-ops/outages/insert-network-outage.js +29 -0
  167. package/lib/db-ops/outages/list-network-outages.d.ts +28 -0
  168. package/lib/db-ops/outages/list-network-outages.js +42 -0
  169. package/lib/db-ops/pages/order/set-url-order.d.ts +13 -0
  170. package/lib/db-ops/pages/order/set-url-order.js +38 -0
  171. package/lib/db-ops/pages/read/build-page-query.d.ts +18 -0
  172. package/lib/db-ops/pages/read/build-page-query.js +40 -0
  173. package/lib/db-ops/pages/read/get-crawling-state.d.ts +117 -0
  174. package/lib/db-ops/pages/read/get-crawling-state.js +161 -0
  175. package/lib/db-ops/pages/read/get-existing-page-urls.d.ts +15 -0
  176. package/lib/db-ops/pages/read/get-existing-page-urls.js +30 -0
  177. package/lib/db-ops/pages/read/get-page-count.d.ts +12 -0
  178. package/lib/db-ops/pages/read/get-page-count.js +21 -0
  179. package/lib/db-ops/pages/read/get-page-source-by-url.d.ts +24 -0
  180. package/lib/db-ops/pages/read/get-page-source-by-url.js +28 -0
  181. package/lib/db-ops/pages/read/get-pages-with-rels.d.ts +38 -0
  182. package/lib/db-ops/pages/read/get-pages-with-rels.js +107 -0
  183. package/lib/db-ops/pages/read/get-pages.d.ts +11 -0
  184. package/lib/db-ops/pages/read/get-pages.js +51 -0
  185. package/lib/db-ops/pages/read/get-scraped-html-page-count.d.ts +18 -0
  186. package/lib/db-ops/pages/read/get-scraped-html-page-count.js +25 -0
  187. package/lib/db-ops/pages/read/reconstruct-page-rows.d.ts +31 -0
  188. package/lib/db-ops/pages/read/reconstruct-page-rows.js +32 -0
  189. package/lib/db-ops/pages/reset/clear-page-derived-rows.d.ts +20 -0
  190. package/lib/db-ops/pages/reset/clear-page-derived-rows.js +37 -0
  191. package/lib/db-ops/pages/reset/repromote-external-pages.d.ts +30 -0
  192. package/lib/db-ops/pages/reset/repromote-external-pages.js +91 -0
  193. package/lib/db-ops/pages/reset/reset-failed-pages.d.ts +88 -0
  194. package/lib/db-ops/pages/reset/reset-failed-pages.js +216 -0
  195. package/lib/db-ops/pages/reset/reset-pages-by-urls.d.ts +80 -0
  196. package/lib/db-ops/pages/reset/reset-pages-by-urls.js +151 -0
  197. package/lib/db-ops/pages/reset/retryable-image-scan-codes.d.ts +24 -0
  198. package/lib/db-ops/pages/reset/retryable-image-scan-codes.js +24 -0
  199. package/lib/db-ops/pages/write/insert-audios.d.ts +14 -0
  200. package/lib/db-ops/pages/write/insert-audios.js +25 -0
  201. package/lib/db-ops/pages/write/insert-buttons.d.ts +14 -0
  202. package/lib/db-ops/pages/write/insert-buttons.js +29 -0
  203. package/lib/db-ops/pages/write/insert-canvases.d.ts +14 -0
  204. package/lib/db-ops/pages/write/insert-canvases.js +26 -0
  205. package/lib/db-ops/pages/write/insert-custom-elements.d.ts +27 -0
  206. package/lib/db-ops/pages/write/insert-custom-elements.js +40 -0
  207. package/lib/db-ops/pages/write/insert-headings.d.ts +15 -0
  208. package/lib/db-ops/pages/write/insert-headings.js +27 -0
  209. package/lib/db-ops/pages/write/insert-iframes.d.ts +14 -0
  210. package/lib/db-ops/pages/write/insert-iframes.js +28 -0
  211. package/lib/db-ops/pages/write/insert-inventory-content-items.d.ts +38 -0
  212. package/lib/db-ops/pages/write/insert-inventory-content-items.js +60 -0
  213. package/lib/db-ops/pages/write/insert-inventory-seeds.d.ts +36 -0
  214. package/lib/db-ops/pages/write/insert-inventory-seeds.js +48 -0
  215. package/lib/db-ops/pages/write/insert-inventory-skipped-pages.d.ts +42 -0
  216. package/lib/db-ops/pages/write/insert-inventory-skipped-pages.js +56 -0
  217. package/lib/db-ops/pages/write/insert-jsonld.d.ts +17 -0
  218. package/lib/db-ops/pages/write/insert-jsonld.js +49 -0
  219. package/lib/db-ops/pages/write/insert-main-content-images.d.ts +20 -0
  220. package/lib/db-ops/pages/write/insert-main-content-images.js +32 -0
  221. package/lib/db-ops/pages/write/insert-main-content-tables.d.ts +14 -0
  222. package/lib/db-ops/pages/write/insert-main-content-tables.js +29 -0
  223. package/lib/db-ops/pages/write/insert-page.d.ts +56 -0
  224. package/lib/db-ops/pages/write/insert-page.js +259 -0
  225. package/lib/db-ops/pages/write/insert-technologies.d.ts +25 -0
  226. package/lib/db-ops/pages/write/insert-technologies.js +45 -0
  227. package/lib/db-ops/pages/write/insert-videos.d.ts +14 -0
  228. package/lib/db-ops/pages/write/insert-videos.js +28 -0
  229. package/lib/db-ops/pages/write/link-redirect-sources.d.ts +42 -0
  230. package/lib/db-ops/pages/write/link-redirect-sources.js +101 -0
  231. package/lib/db-ops/pages/write/record-redirect.d.ts +35 -0
  232. package/lib/db-ops/pages/write/record-redirect.js +100 -0
  233. package/lib/db-ops/pages/write/set-skipped-page.d.ts +13 -0
  234. package/lib/db-ops/pages/write/set-skipped-page.js +24 -0
  235. package/lib/db-ops/pages/write/update-page.d.ts +40 -0
  236. package/lib/db-ops/pages/write/update-page.js +419 -0
  237. package/lib/db-ops/pages/write/write-page-html-blob.d.ts +19 -0
  238. package/lib/db-ops/pages/write/write-page-html-blob.js +41 -0
  239. package/lib/db-ops/referrers/get-redirects-for-pages.d.ts +9 -0
  240. package/lib/db-ops/referrers/get-redirects-for-pages.js +15 -0
  241. package/lib/db-ops/referrers/get-referrers-of-page.d.ts +17 -0
  242. package/lib/db-ops/referrers/get-referrers-of-page.js +32 -0
  243. package/lib/db-ops/referrers/get-referrers-of-resource.d.ts +8 -0
  244. package/lib/db-ops/referrers/get-referrers-of-resource.js +15 -0
  245. package/lib/db-ops/resources/build-resource-query.d.ts +25 -0
  246. package/lib/db-ops/resources/build-resource-query.js +29 -0
  247. package/lib/db-ops/resources/get-existing-resource-urls.d.ts +9 -0
  248. package/lib/db-ops/resources/get-existing-resource-urls.js +24 -0
  249. package/lib/db-ops/resources/get-resource-by-url.d.ts +13 -0
  250. package/lib/db-ops/resources/get-resource-by-url.js +22 -0
  251. package/lib/db-ops/resources/get-resource-url-list.d.ts +17 -0
  252. package/lib/db-ops/resources/get-resource-url-list.js +26 -0
  253. package/lib/db-ops/resources/get-resources.d.ts +8 -0
  254. package/lib/db-ops/resources/get-resources.js +11 -0
  255. package/lib/db-ops/resources/insert-inventory-resources.d.ts +24 -0
  256. package/lib/db-ops/resources/insert-inventory-resources.js +64 -0
  257. package/lib/db-ops/resources/insert-resource-referrers.d.ts +15 -0
  258. package/lib/db-ops/resources/insert-resource-referrers.js +54 -0
  259. package/lib/db-ops/resources/insert-resource.d.ts +34 -0
  260. package/lib/db-ops/resources/insert-resource.js +73 -0
  261. package/lib/db-ops/resources/reconstruct-resource-rows.d.ts +26 -0
  262. package/lib/db-ops/resources/reconstruct-resource-rows.js +30 -0
  263. package/lib/db-ops/templates/assign-template-labels.d.ts +60 -0
  264. package/lib/db-ops/templates/assign-template-labels.js +187 -0
  265. package/lib/db-ops/templates/replace-page-templates.d.ts +44 -0
  266. package/lib/db-ops/templates/replace-page-templates.js +174 -0
  267. package/lib/db-ops/templates/serialize-template-cluster-reason.d.ts +16 -0
  268. package/lib/db-ops/templates/serialize-template-cluster-reason.js +17 -0
  269. package/lib/db-ops/templates/types.d.ts +103 -0
  270. package/lib/db-ops/templates/types.js +1 -0
  271. package/lib/debug.d.ts +8 -0
  272. package/lib/debug.js +9 -0
  273. package/lib/decode-html-blob.d.ts +20 -0
  274. package/lib/decode-html-blob.js +23 -0
  275. package/lib/decode-page-html-blob-bytes.d.ts +25 -0
  276. package/lib/decode-page-html-blob-bytes.js +29 -0
  277. package/lib/decode-stored-blob-bytes.d.ts +25 -0
  278. package/lib/decode-stored-blob-bytes.js +47 -0
  279. package/lib/derive-lineage-from-parent.d.ts +37 -0
  280. package/lib/derive-lineage-from-parent.js +42 -0
  281. package/lib/drop-legacy-tables.d.ts +45 -0
  282. package/lib/drop-legacy-tables.js +56 -0
  283. package/lib/error-kind/classify-error-kind.d.ts +20 -0
  284. package/lib/error-kind/classify-error-kind.js +136 -0
  285. package/lib/error-kind/network-related-error-kinds.d.ts +23 -0
  286. package/lib/error-kind/network-related-error-kinds.js +28 -0
  287. package/lib/error-kind/permanent-error-kinds.d.ts +48 -0
  288. package/lib/error-kind/permanent-error-kinds.js +54 -0
  289. package/lib/error-kind/types.d.ts +54 -0
  290. package/lib/error-kind/types.js +1 -0
  291. package/lib/filesystem/append-text.d.ts +9 -0
  292. package/lib/filesystem/append-text.js +14 -0
  293. package/lib/filesystem/copy-dir-sync.d.ts +6 -0
  294. package/lib/filesystem/copy-dir-sync.js +9 -0
  295. package/lib/filesystem/copy-dir.d.ts +7 -0
  296. package/lib/filesystem/copy-dir.js +13 -0
  297. package/lib/filesystem/copy-file-with-progress.d.ts +20 -0
  298. package/lib/filesystem/copy-file-with-progress.js +34 -0
  299. package/lib/filesystem/exists.d.ts +6 -0
  300. package/lib/filesystem/exists.js +9 -0
  301. package/lib/filesystem/get-file-list.d.ts +8 -0
  302. package/lib/filesystem/get-file-list.js +12 -0
  303. package/lib/filesystem/is-dir.d.ts +6 -0
  304. package/lib/filesystem/is-dir.js +10 -0
  305. package/lib/filesystem/mkdir.d.ts +8 -0
  306. package/lib/filesystem/mkdir.js +15 -0
  307. package/lib/filesystem/output-binary.d.ts +12 -0
  308. package/lib/filesystem/output-binary.js +17 -0
  309. package/lib/filesystem/output-json.d.ts +9 -0
  310. package/lib/filesystem/output-json.js +14 -0
  311. package/lib/filesystem/output-text.d.ts +11 -0
  312. package/lib/filesystem/output-text.js +32 -0
  313. package/lib/filesystem/parse-pax-path.d.ts +18 -0
  314. package/lib/filesystem/parse-pax-path.js +47 -0
  315. package/lib/filesystem/parse-tar-size-field.d.ts +13 -0
  316. package/lib/filesystem/parse-tar-size-field.js +40 -0
  317. package/lib/filesystem/peek-tar-top-dir.d.ts +35 -0
  318. package/lib/filesystem/peek-tar-top-dir.js +215 -0
  319. package/lib/filesystem/read-json.d.ts +7 -0
  320. package/lib/filesystem/read-json.js +11 -0
  321. package/lib/filesystem/read-text.d.ts +6 -0
  322. package/lib/filesystem/read-text.js +10 -0
  323. package/lib/filesystem/readline.d.ts +11 -0
  324. package/lib/filesystem/readline.js +26 -0
  325. package/lib/filesystem/remove.d.ts +5 -0
  326. package/lib/filesystem/remove.js +10 -0
  327. package/lib/filesystem/rename.d.ts +16 -0
  328. package/lib/filesystem/rename.js +48 -0
  329. package/lib/filesystem/tar.d.ts +23 -0
  330. package/lib/filesystem/tar.js +78 -0
  331. package/lib/filesystem/untar.d.ts +33 -0
  332. package/lib/filesystem/untar.js +84 -0
  333. package/lib/get-failed-page-messages.d.ts +56 -0
  334. package/lib/get-failed-page-messages.js +146 -0
  335. package/lib/get-json.d.ts +10 -0
  336. package/lib/get-json.js +25 -0
  337. package/lib/html-snapshot/match-selector-html.d.ts +25 -0
  338. package/lib/html-snapshot/match-selector-html.js +28 -0
  339. package/lib/html-snapshot/match-selector-snapshots.d.ts +33 -0
  340. package/lib/html-snapshot/match-selector-snapshots.js +33 -0
  341. package/lib/html-snapshot/search-html-document.d.ts +29 -0
  342. package/lib/html-snapshot/search-html-document.js +27 -0
  343. package/lib/html-snapshot/search-html-snapshots.d.ts +36 -0
  344. package/lib/html-snapshot/search-html-snapshots.js +35 -0
  345. package/lib/html-snapshot/types.d.ts +111 -0
  346. package/lib/html-snapshot/types.js +7 -0
  347. package/lib/html-snapshot/validate-search-pattern.d.ts +15 -0
  348. package/lib/html-snapshot/validate-search-pattern.js +17 -0
  349. package/lib/init-schema.d.ts +48 -0
  350. package/lib/init-schema.js +124 -0
  351. package/lib/is-inventory-source.d.ts +21 -0
  352. package/lib/is-inventory-source.js +22 -0
  353. package/lib/is-within-outage-window.d.ts +49 -0
  354. package/lib/is-within-outage-window.js +33 -0
  355. package/lib/isolated-cluster/create-isolated-cluster-run.d.ts +24 -0
  356. package/lib/isolated-cluster/create-isolated-cluster-run.js +26 -0
  357. package/lib/libsql-dialect.d.ts +115 -0
  358. package/lib/libsql-dialect.js +116 -0
  359. package/lib/limited-page-ids.d.ts +9 -0
  360. package/lib/limited-page-ids.js +18 -0
  361. package/lib/meta/assert-compatible-version.d.ts +60 -0
  362. package/lib/meta/assert-compatible-version.js +93 -0
  363. package/lib/meta/classify-jsonld-type.d.ts +23 -0
  364. package/lib/meta/classify-jsonld-type.js +43 -0
  365. package/lib/meta/compare-semver.d.ts +23 -0
  366. package/lib/meta/compare-semver.js +51 -0
  367. package/lib/meta/compute-main-contents-denormalized.d.ts +41 -0
  368. package/lib/meta/compute-main-contents-denormalized.js +88 -0
  369. package/lib/meta/compute-page-denormalized.d.ts +20 -0
  370. package/lib/meta/compute-page-denormalized.js +35 -0
  371. package/lib/meta/derive-flat-from-meta.d.ts +34 -0
  372. package/lib/meta/derive-flat-from-meta.js +158 -0
  373. package/lib/meta/derive-meta-extras.d.ts +20 -0
  374. package/lib/meta/derive-meta-extras.js +23 -0
  375. package/lib/meta/extract-tags-for-archive.d.ts +17 -0
  376. package/lib/meta/extract-tags-for-archive.js +36 -0
  377. package/lib/meta/parse-main-content-class-list.d.ts +19 -0
  378. package/lib/meta/parse-main-content-class-list.js +34 -0
  379. package/lib/meta/summarize-jsonld.d.ts +17 -0
  380. package/lib/meta/summarize-jsonld.js +29 -0
  381. package/lib/meta/technologies/combine-technology-confidence.d.ts +46 -0
  382. package/lib/meta/technologies/combine-technology-confidence.js +93 -0
  383. package/lib/meta/technologies/convert-legacy-page-tags-to-inserts.d.ts +45 -0
  384. package/lib/meta/technologies/convert-legacy-page-tags-to-inserts.js +53 -0
  385. package/lib/meta/technologies/convert-tag-row-to-wappalyzer-signal.d.ts +33 -0
  386. package/lib/meta/technologies/convert-tag-row-to-wappalyzer-signal.js +46 -0
  387. package/lib/meta/technologies/extract-technologies-for-archive.d.ts +33 -0
  388. package/lib/meta/technologies/extract-technologies-for-archive.js +30 -0
  389. package/lib/meta/technologies/match-js-license-comment-signal.d.ts +21 -0
  390. package/lib/meta/technologies/match-js-license-comment-signal.js +23 -0
  391. package/lib/meta/technologies/match-structural-technology-signals.d.ts +26 -0
  392. package/lib/meta/technologies/match-structural-technology-signals.js +48 -0
  393. package/lib/meta/technologies/normalize-wappalyzer-entries.d.ts +25 -0
  394. package/lib/meta/technologies/normalize-wappalyzer-entries.js +35 -0
  395. package/lib/meta/technologies/technology-signal-definitions.d.ts +44 -0
  396. package/lib/meta/technologies/technology-signal-definitions.js +60 -0
  397. package/lib/meta/technologies/types.d.ts +70 -0
  398. package/lib/meta/technologies/types.js +13 -0
  399. package/lib/meta/types.d.ts +1490 -0
  400. package/lib/meta/types.js +65 -0
  401. package/lib/migrate-content-items-alias-of-id.d.ts +52 -0
  402. package/lib/migrate-content-items-alias-of-id.js +69 -0
  403. package/lib/migrate-content-items-dedupe-cap-event-id.d.ts +46 -0
  404. package/lib/migrate-content-items-dedupe-cap-event-id.js +62 -0
  405. package/lib/migrate-content-items-is-metadata-only.d.ts +44 -0
  406. package/lib/migrate-content-items-is-metadata-only.js +60 -0
  407. package/lib/migrate-entity-tables.d.ts +55 -0
  408. package/lib/migrate-entity-tables.js +66 -0
  409. package/lib/migrate-info-created-cwd.d.ts +17 -0
  410. package/lib/migrate-info-created-cwd.js +36 -0
  411. package/lib/migrate-info-main-content-selector.d.ts +16 -0
  412. package/lib/migrate-info-main-content-selector.js +35 -0
  413. package/lib/migrate-info-request-header-names.d.ts +16 -0
  414. package/lib/migrate-info-request-header-names.js +35 -0
  415. package/lib/migrate-info-roots.d.ts +20 -0
  416. package/lib/migrate-info-roots.js +52 -0
  417. package/lib/migrate-inventory-runs-to-list-reconcile-runs.d.ts +34 -0
  418. package/lib/migrate-inventory-runs-to-list-reconcile-runs.js +51 -0
  419. package/lib/migrate-list-reconcile-runs-exclude-skipped.d.ts +25 -0
  420. package/lib/migrate-list-reconcile-runs-exclude-skipped.js +44 -0
  421. package/lib/migrate-list-reconcile-runs-invalid-skipped.d.ts +16 -0
  422. package/lib/migrate-list-reconcile-runs-invalid-skipped.js +35 -0
  423. package/lib/migrate-main-contents-columns.d.ts +26 -0
  424. package/lib/migrate-main-contents-columns.js +61 -0
  425. package/lib/migrate-page-meta-body-hash.d.ts +44 -0
  426. package/lib/migrate-page-meta-body-hash.js +63 -0
  427. package/lib/migrate-page-meta-console-error-count.d.ts +27 -0
  428. package/lib/migrate-page-meta-console-error-count.js +45 -0
  429. package/lib/migrate-page-meta-custom-element-count.d.ts +33 -0
  430. package/lib/migrate-page-meta-custom-element-count.js +51 -0
  431. package/lib/migrate-page-meta-image-scan.d.ts +27 -0
  432. package/lib/migrate-page-meta-image-scan.js +52 -0
  433. package/lib/migrate-page-tags-to-page-technologies.d.ts +39 -0
  434. package/lib/migrate-page-tags-to-page-technologies.js +79 -0
  435. package/lib/migrate-ref-tables.d.ts +25 -0
  436. package/lib/migrate-ref-tables.js +38 -0
  437. package/lib/native-executor/check-native-executor-config.d.ts +17 -0
  438. package/lib/native-executor/check-native-executor-config.js +20 -0
  439. package/lib/page-meta-column-maps.d.ts +32 -0
  440. package/lib/page-meta-column-maps.js +43 -0
  441. package/lib/page.d.ts +546 -0
  442. package/lib/page.js +764 -0
  443. package/lib/peek-archive-lock.d.ts +40 -0
  444. package/lib/peek-archive-lock.js +62 -0
  445. package/lib/populate-entity-tables/collapse-anchor-rows.d.ts +41 -0
  446. package/lib/populate-entity-tables/collapse-anchor-rows.js +87 -0
  447. package/lib/populate-entity-tables/derive-dom-path.d.ts +35 -0
  448. package/lib/populate-entity-tables/derive-dom-path.js +72 -0
  449. package/lib/populate-entity-tables/is-blob-ref-value.d.ts +16 -0
  450. package/lib/populate-entity-tables/is-blob-ref-value.js +19 -0
  451. package/lib/populate-entity-tables/match-images-to-dom-paths.d.ts +66 -0
  452. package/lib/populate-entity-tables/match-images-to-dom-paths.js +96 -0
  453. package/lib/populate-entity-tables/populate-anchor-edges.d.ts +33 -0
  454. package/lib/populate-entity-tables/populate-anchor-edges.js +153 -0
  455. package/lib/populate-entity-tables/populate-content-items.d.ts +40 -0
  456. package/lib/populate-entity-tables/populate-content-items.js +141 -0
  457. package/lib/populate-entity-tables/populate-entities.d.ts +81 -0
  458. package/lib/populate-entity-tables/populate-entities.js +110 -0
  459. package/lib/populate-entity-tables/populate-image-items.d.ts +91 -0
  460. package/lib/populate-entity-tables/populate-image-items.js +226 -0
  461. package/lib/populate-entity-tables/populate-page-meta.d.ts +33 -0
  462. package/lib/populate-entity-tables/populate-page-meta.js +267 -0
  463. package/lib/populate-entity-tables/populate-resource-items.d.ts +22 -0
  464. package/lib/populate-entity-tables/populate-resource-items.js +114 -0
  465. package/lib/populate-entity-tables/populate-resource-ref-edges.d.ts +31 -0
  466. package/lib/populate-entity-tables/populate-resource-ref-edges.js +33 -0
  467. package/lib/populate-entity-tables/resolve-blob-refs.d.ts +31 -0
  468. package/lib/populate-entity-tables/resolve-blob-refs.js +100 -0
  469. package/lib/populate-entity-tables/resolve-content-type-refs.d.ts +22 -0
  470. package/lib/populate-entity-tables/resolve-content-type-refs.js +27 -0
  471. package/lib/populate-entity-tables/resolve-header-sets.d.ts +49 -0
  472. package/lib/populate-entity-tables/resolve-header-sets.js +122 -0
  473. package/lib/populate-entity-tables/resolve-json-refs.d.ts +25 -0
  474. package/lib/populate-entity-tables/resolve-json-refs.js +67 -0
  475. package/lib/populate-entity-tables/resolve-text-refs.d.ts +30 -0
  476. package/lib/populate-entity-tables/resolve-text-refs.js +61 -0
  477. package/lib/populate-entity-tables/resolve-url-or-blob-from-maps.d.ts +21 -0
  478. package/lib/populate-entity-tables/resolve-url-or-blob-from-maps.js +27 -0
  479. package/lib/populate-entity-tables/resolve-url-refs.d.ts +33 -0
  480. package/lib/populate-entity-tables/resolve-url-refs.js +60 -0
  481. package/lib/populate-entity-tables/test-utils/count-rows.d.ts +17 -0
  482. package/lib/populate-entity-tables/test-utils/count-rows.js +20 -0
  483. package/lib/populate-entity-tables/test-utils/seed-content-items.d.ts +25 -0
  484. package/lib/populate-entity-tables/test-utils/seed-content-items.js +42 -0
  485. package/lib/populate-entity-tables/test-utils/setup-entities-db.d.ts +30 -0
  486. package/lib/populate-entity-tables/test-utils/setup-entities-db.js +175 -0
  487. package/lib/populate-entity-tables/types.d.ts +157 -0
  488. package/lib/populate-entity-tables/types.js +12 -0
  489. package/lib/populate-entity-tables/upsert-text-refs.d.ts +38 -0
  490. package/lib/populate-entity-tables/upsert-text-refs.js +78 -0
  491. package/lib/populate-ref-tables/classify-content-type.d.ts +16 -0
  492. package/lib/populate-ref-tables/classify-content-type.js +52 -0
  493. package/lib/populate-ref-tables/compute-content-hash.d.ts +22 -0
  494. package/lib/populate-ref-tables/compute-content-hash.js +26 -0
  495. package/lib/populate-ref-tables/compute-header-flags.d.ts +16 -0
  496. package/lib/populate-ref-tables/compute-header-flags.js +70 -0
  497. package/lib/populate-ref-tables/content-type-rules.d.ts +38 -0
  498. package/lib/populate-ref-tables/content-type-rules.js +133 -0
  499. package/lib/populate-ref-tables/create-header-table-caches.d.ts +25 -0
  500. package/lib/populate-ref-tables/create-header-table-caches.js +49 -0
  501. package/lib/populate-ref-tables/data-uri-url-refs-limit.d.ts +15 -0
  502. package/lib/populate-ref-tables/data-uri-url-refs-limit.js +15 -0
  503. package/lib/populate-ref-tables/decode-data-uri.d.ts +21 -0
  504. package/lib/populate-ref-tables/decode-data-uri.js +126 -0
  505. package/lib/populate-ref-tables/decompose-header-set.d.ts +29 -0
  506. package/lib/populate-ref-tables/decompose-header-set.js +157 -0
  507. package/lib/populate-ref-tables/decompose-url.d.ts +25 -0
  508. package/lib/populate-ref-tables/decompose-url.js +70 -0
  509. package/lib/populate-ref-tables/header-stability.d.ts +19 -0
  510. package/lib/populate-ref-tables/header-stability.js +22 -0
  511. package/lib/populate-ref-tables/header-value-cache-key.d.ts +17 -0
  512. package/lib/populate-ref-tables/header-value-cache-key.js +19 -0
  513. package/lib/populate-ref-tables/normalize-mime.d.ts +24 -0
  514. package/lib/populate-ref-tables/normalize-mime.js +36 -0
  515. package/lib/populate-ref-tables/populate-blob-refs.d.ts +38 -0
  516. package/lib/populate-ref-tables/populate-blob-refs.js +134 -0
  517. package/lib/populate-ref-tables/populate-content-type-refs.d.ts +27 -0
  518. package/lib/populate-ref-tables/populate-content-type-refs.js +70 -0
  519. package/lib/populate-ref-tables/populate-header-tables.d.ts +35 -0
  520. package/lib/populate-ref-tables/populate-header-tables.js +80 -0
  521. package/lib/populate-ref-tables/populate-json-refs.d.ts +29 -0
  522. package/lib/populate-ref-tables/populate-json-refs.js +101 -0
  523. package/lib/populate-ref-tables/populate-refs.d.ts +51 -0
  524. package/lib/populate-ref-tables/populate-refs.js +62 -0
  525. package/lib/populate-ref-tables/populate-text-refs.d.ts +32 -0
  526. package/lib/populate-ref-tables/populate-text-refs.js +133 -0
  527. package/lib/populate-ref-tables/populate-url-refs.d.ts +28 -0
  528. package/lib/populate-ref-tables/populate-url-refs.js +148 -0
  529. package/lib/populate-ref-tables/test-utils/count-rows.d.ts +15 -0
  530. package/lib/populate-ref-tables/test-utils/count-rows.js +17 -0
  531. package/lib/populate-ref-tables/types.d.ts +197 -0
  532. package/lib/populate-ref-tables/types.js +7 -0
  533. package/lib/populate-ref-tables/upsert-one-header-set.d.ts +34 -0
  534. package/lib/populate-ref-tables/upsert-one-header-set.js +208 -0
  535. package/lib/populate-ref-tables/volatile-header-names.d.ts +20 -0
  536. package/lib/populate-ref-tables/volatile-header-names.js +33 -0
  537. package/lib/redirect-table.d.ts +9 -0
  538. package/lib/redirect-table.js +28 -0
  539. package/lib/release-finished-statements.d.ts +42 -0
  540. package/lib/release-finished-statements.js +45 -0
  541. package/lib/resolve-redirect-chain.d.ts +33 -0
  542. package/lib/resolve-redirect-chain.js +27 -0
  543. package/lib/resource.d.ts +46 -0
  544. package/lib/resource.js +62 -0
  545. package/lib/retarget-legacy-fk-tables.d.ts +61 -0
  546. package/lib/retarget-legacy-fk-tables.js +137 -0
  547. package/lib/safe-path.d.ts +9 -0
  548. package/lib/safe-path.js +17 -0
  549. package/lib/scope/build-scope-map.d.ts +21 -0
  550. package/lib/scope/build-scope-map.js +32 -0
  551. package/lib/scope/find-scope-entry.d.ts +25 -0
  552. package/lib/scope/find-scope-entry.js +45 -0
  553. package/lib/template-classification/classify-archive-page-templates.d.ts +42 -0
  554. package/lib/template-classification/classify-archive-page-templates.js +70 -0
  555. package/lib/template-classification/classify-page-templates.d.ts +33 -0
  556. package/lib/template-classification/classify-page-templates.js +60 -0
  557. package/lib/template-classification/collect-page-ids-with-html.d.ts +24 -0
  558. package/lib/template-classification/collect-page-ids-with-html.js +30 -0
  559. package/lib/template-classification/collect-page-stylesheet-urls.d.ts +32 -0
  560. package/lib/template-classification/collect-page-stylesheet-urls.js +130 -0
  561. package/lib/template-classification/create-content-root-hint.d.ts +41 -0
  562. package/lib/template-classification/create-content-root-hint.js +51 -0
  563. package/lib/template-classification/create-page-cluster-factory.d.ts +36 -0
  564. package/lib/template-classification/create-page-cluster-factory.js +52 -0
  565. package/lib/template-classification/load-page-cluster-candidates.d.ts +32 -0
  566. package/lib/template-classification/load-page-cluster-candidates.js +93 -0
  567. package/lib/template-classification/page-cluster/resolve-page-cluster-keys.d.ts +34 -0
  568. package/lib/template-classification/page-cluster/resolve-page-cluster-keys.js +236 -0
  569. package/lib/template-classification/page-cluster/types.d.ts +123 -0
  570. package/lib/template-classification/page-cluster/types.js +1 -0
  571. package/lib/template-classification/types.d.ts +234 -0
  572. package/lib/template-classification/types.js +1 -0
  573. package/lib/test-utils/build-full-schema-test-db.d.ts +34 -0
  574. package/lib/test-utils/build-full-schema-test-db.js +74 -0
  575. package/lib/test-utils/create-legacy-analysis-tables.d.ts +13 -0
  576. package/lib/test-utils/create-legacy-analysis-tables.js +37 -0
  577. package/lib/test-utils/fk-parent-tables.d.ts +15 -0
  578. package/lib/test-utils/fk-parent-tables.js +19 -0
  579. package/lib/test-utils/seed-content-item.d.ts +35 -0
  580. package/lib/test-utils/seed-content-item.js +42 -0
  581. package/lib/test-utils/setup-legacy-fk-db.d.ts +34 -0
  582. package/lib/test-utils/setup-legacy-fk-db.js +271 -0
  583. package/lib/transfer/attach-source-database.d.ts +31 -0
  584. package/lib/transfer/attach-source-database.js +40 -0
  585. package/lib/transfer/build-split-config.d.ts +30 -0
  586. package/lib/transfer/build-split-config.js +42 -0
  587. package/lib/transfer/clear-replaced-page-rows.d.ts +23 -0
  588. package/lib/transfer/clear-replaced-page-rows.js +61 -0
  589. package/lib/transfer/concat-archives.d.ts +55 -0
  590. package/lib/transfer/concat-archives.js +95 -0
  591. package/lib/transfer/concat-source-transfer-phases.d.ts +10 -0
  592. package/lib/transfer/concat-source-transfer-phases.js +17 -0
  593. package/lib/transfer/content-item-rank-sql.d.ts +21 -0
  594. package/lib/transfer/content-item-rank-sql.js +23 -0
  595. package/lib/transfer/copy-anchor-edges.d.ts +28 -0
  596. package/lib/transfer/copy-anchor-edges.js +42 -0
  597. package/lib/transfer/copy-dictionaries-for-concat.d.ts +39 -0
  598. package/lib/transfer/copy-dictionaries-for-concat.js +81 -0
  599. package/lib/transfer/copy-dictionaries-for-split.d.ts +29 -0
  600. package/lib/transfer/copy-dictionaries-for-split.js +224 -0
  601. package/lib/transfer/copy-header-set-children.d.ts +27 -0
  602. package/lib/transfer/copy-header-set-children.js +51 -0
  603. package/lib/transfer/copy-image-items.d.ts +21 -0
  604. package/lib/transfer/copy-image-items.js +62 -0
  605. package/lib/transfer/copy-inventory-source-lists.d.ts +30 -0
  606. package/lib/transfer/copy-inventory-source-lists.js +61 -0
  607. package/lib/transfer/copy-journal-tables.d.ts +30 -0
  608. package/lib/transfer/copy-journal-tables.js +56 -0
  609. package/lib/transfer/copy-page-console-logs.d.ts +16 -0
  610. package/lib/transfer/copy-page-console-logs.js +27 -0
  611. package/lib/transfer/copy-page-html-blobs.d.ts +31 -0
  612. package/lib/transfer/copy-page-html-blobs.js +43 -0
  613. package/lib/transfer/copy-page-meta.d.ts +27 -0
  614. package/lib/transfer/copy-page-meta.js +68 -0
  615. package/lib/transfer/copy-page-template-clusters.d.ts +31 -0
  616. package/lib/transfer/copy-page-template-clusters.js +56 -0
  617. package/lib/transfer/copy-page-template-labels.d.ts +34 -0
  618. package/lib/transfer/copy-page-template-labels.js +88 -0
  619. package/lib/transfer/copy-resource-items.d.ts +29 -0
  620. package/lib/transfer/copy-resource-items.js +89 -0
  621. package/lib/transfer/copy-resource-ref-edges.d.ts +20 -0
  622. package/lib/transfer/copy-resource-ref-edges.js +33 -0
  623. package/lib/transfer/copy-simple-page-scoped-tables.d.ts +15 -0
  624. package/lib/transfer/copy-simple-page-scoped-tables.js +34 -0
  625. package/lib/transfer/count-external-pages-in-scope.d.ts +26 -0
  626. package/lib/transfer/count-external-pages-in-scope.js +40 -0
  627. package/lib/transfer/create-transfer-temp-tables.d.ts +30 -0
  628. package/lib/transfer/create-transfer-temp-tables.js +59 -0
  629. package/lib/transfer/dictionary-copy-specs.d.ts +32 -0
  630. package/lib/transfer/dictionary-copy-specs.js +28 -0
  631. package/lib/transfer/drop-transfer-temp-tables.d.ts +9 -0
  632. package/lib/transfer/drop-transfer-temp-tables.js +18 -0
  633. package/lib/transfer/flatten-redirect-chains.d.ts +44 -0
  634. package/lib/transfer/flatten-redirect-chains.js +74 -0
  635. package/lib/transfer/insert-content-items.d.ts +35 -0
  636. package/lib/transfer/insert-content-items.js +116 -0
  637. package/lib/transfer/list-transfer-columns.d.ts +35 -0
  638. package/lib/transfer/list-transfer-columns.js +45 -0
  639. package/lib/transfer/mark-in-scope-content-items.d.ts +31 -0
  640. package/lib/transfer/mark-in-scope-content-items.js +54 -0
  641. package/lib/transfer/merge-archive-configs.d.ts +51 -0
  642. package/lib/transfer/merge-archive-configs.js +85 -0
  643. package/lib/transfer/plan-content-items-for-concat.d.ts +33 -0
  644. package/lib/transfer/plan-content-items-for-concat.js +51 -0
  645. package/lib/transfer/plan-content-items-for-split.d.ts +42 -0
  646. package/lib/transfer/plan-content-items-for-split.js +83 -0
  647. package/lib/transfer/plan-resource-items.d.ts +40 -0
  648. package/lib/transfer/plan-resource-items.js +69 -0
  649. package/lib/transfer/quote-transfer-identifier.d.ts +18 -0
  650. package/lib/transfer/quote-transfer-identifier.js +20 -0
  651. package/lib/transfer/reclassify-resource-externality.d.ts +37 -0
  652. package/lib/transfer/reclassify-resource-externality.js +66 -0
  653. package/lib/transfer/remap-redirect-dest-ids.d.ts +34 -0
  654. package/lib/transfer/remap-redirect-dest-ids.js +51 -0
  655. package/lib/transfer/replace-content-items.d.ts +39 -0
  656. package/lib/transfer/replace-content-items.js +83 -0
  657. package/lib/transfer/simple-page-scoped-tables.d.ts +25 -0
  658. package/lib/transfer/simple-page-scoped-tables.js +38 -0
  659. package/lib/transfer/split-archive.d.ts +55 -0
  660. package/lib/transfer/split-archive.js +98 -0
  661. package/lib/transfer/split-source-transfer-phases.d.ts +11 -0
  662. package/lib/transfer/split-source-transfer-phases.js +18 -0
  663. package/lib/transfer/transfer-action.d.ts +34 -0
  664. package/lib/transfer/transfer-action.js +32 -0
  665. package/lib/transfer/transfer-archive-rows.d.ts +65 -0
  666. package/lib/transfer/transfer-archive-rows.js +156 -0
  667. package/lib/transfer/transfer-dictionary-tables.d.ts +12 -0
  668. package/lib/transfer/transfer-dictionary-tables.js +22 -0
  669. package/lib/transfer/transfer-post-phases.d.ts +10 -0
  670. package/lib/transfer/transfer-post-phases.js +13 -0
  671. package/lib/transfer/transfer-source-alias.d.ts +9 -0
  672. package/lib/transfer/transfer-source-alias.js +9 -0
  673. package/lib/transfer/types.d.ts +111 -0
  674. package/lib/transfer/types.js +35 -0
  675. package/lib/types.d.ts +772 -0
  676. package/lib/types.js +1 -0
  677. package/lib/url-alias/compute-tier-a-alias-key.d.ts +44 -0
  678. package/lib/url-alias/compute-tier-a-alias-key.js +47 -0
  679. package/lib/url-alias/compute-tier-b-alias-key.d.ts +23 -0
  680. package/lib/url-alias/compute-tier-b-alias-key.js +26 -0
  681. package/lib/url-alias/group-alias-candidates.d.ts +27 -0
  682. package/lib/url-alias/group-alias-candidates.js +29 -0
  683. package/lib/url-alias/types.d.ts +12 -0
  684. package/lib/url-alias/types.js +1 -0
  685. package/lib/url-pattern/compute-shape-key.d.ts +58 -0
  686. package/lib/url-pattern/compute-shape-key.js +129 -0
  687. package/lib/url-pattern/decompose-url.d.ts +33 -0
  688. package/lib/url-pattern/decompose-url.js +79 -0
  689. package/lib/url-pattern/reconstruct-url.d.ts +15 -0
  690. package/lib/url-pattern/reconstruct-url.js +33 -0
  691. package/lib/url-sort/compute-url-sort-ranks.d.ts +30 -0
  692. package/lib/url-sort/compute-url-sort-ranks.js +33 -0
  693. package/lib/utils/array/each-splitted.d.ts +10 -0
  694. package/lib/utils/array/each-splitted.js +14 -0
  695. package/lib/utils/debug.d.ts +8 -0
  696. package/lib/utils/debug.js +8 -0
  697. package/lib/utils/error/emit-error-with-retry.d.ts +40 -0
  698. package/lib/utils/error/emit-error-with-retry.js +44 -0
  699. package/lib/utils/error/emit-error.d.ts +39 -0
  700. package/lib/utils/error/emit-error.js +41 -0
  701. package/lib/utils/object/parse-response-headers.d.ts +12 -0
  702. package/lib/utils/object/parse-response-headers.js +26 -0
  703. package/lib/utils/object/redact-request-headers.d.ts +15 -0
  704. package/lib/utils/object/redact-request-headers.js +27 -0
  705. package/lib/utils/types/types.d.ts +383 -0
  706. package/lib/utils/types/types.js +1 -0
  707. package/lib/verify-migration/capture-rejection.d.ts +24 -0
  708. package/lib/verify-migration/capture-rejection.js +31 -0
  709. package/lib/verify-migration/check-anchor-edges-count.d.ts +34 -0
  710. package/lib/verify-migration/check-anchor-edges-count.js +72 -0
  711. package/lib/verify-migration/check-anchor-edges-sum.d.ts +13 -0
  712. package/lib/verify-migration/check-anchor-edges-sum.js +27 -0
  713. package/lib/verify-migration/check-content-items-count.d.ts +16 -0
  714. package/lib/verify-migration/check-content-items-count.js +30 -0
  715. package/lib/verify-migration/check-content-type-preservation.d.ts +22 -0
  716. package/lib/verify-migration/check-content-type-preservation.js +40 -0
  717. package/lib/verify-migration/check-foreign-key-integrity.d.ts +31 -0
  718. package/lib/verify-migration/check-foreign-key-integrity.js +47 -0
  719. package/lib/verify-migration/check-image-items-count.d.ts +12 -0
  720. package/lib/verify-migration/check-image-items-count.js +26 -0
  721. package/lib/verify-migration/check-page-meta-count.d.ts +15 -0
  722. package/lib/verify-migration/check-page-meta-count.js +31 -0
  723. package/lib/verify-migration/check-reader-parity.d.ts +23 -0
  724. package/lib/verify-migration/check-reader-parity.js +182 -0
  725. package/lib/verify-migration/check-resource-items-count.d.ts +17 -0
  726. package/lib/verify-migration/check-resource-items-count.js +33 -0
  727. package/lib/verify-migration/check-url-round-trip.d.ts +43 -0
  728. package/lib/verify-migration/check-url-round-trip.js +112 -0
  729. package/lib/verify-migration/types.d.ts +70 -0
  730. package/lib/verify-migration/types.js +63 -0
  731. package/lib/verify-migration/verify-migration.d.ts +41 -0
  732. package/lib/verify-migration/verify-migration.js +120 -0
  733. package/lib/with-bulk-write-pragmas.d.ts +51 -0
  734. package/lib/with-bulk-write-pragmas.js +132 -0
  735. package/lib/write-queue.d.ts +32 -0
  736. package/lib/write-queue.js +55 -0
  737. package/package.json +360 -5
@@ -0,0 +1,151 @@
1
+ import { dbLog } from '../../../debug.js';
2
+ import { eachSplitted } from '../../../utils/array/each-splitted.js';
3
+ import { clearPageDerivedRows } from './clear-page-derived-rows.js';
4
+ /**
5
+ * Reset pages matching an operator-supplied URL list back to pending, so a
6
+ * follow-up crawl re-fetches them from scratch — the un-scrape half of
7
+ * `crawl --recrawl`.
8
+ *
9
+ * Unlike {@link resetFailedPages}, this function does not filter by prior
10
+ * failure kind: a URL named explicitly by the operator is reset regardless
11
+ * of what its last observation was, including a definitive `4xx`/`5xx` — the
12
+ * whole point of `--recrawl` is to catch a page that used to 404 and is now
13
+ * live. The only requirement on the raw candidate scan is `scraped = 1` (a
14
+ * page never scraped has nothing to reset; it is the caller's "novel URL"
15
+ * path instead).
16
+ *
17
+ * Three conservative guards then apply — matching content follows the same
18
+ * union used to skip `resetFailedPages`'s permanent-failure filter had none:
19
+ * a matched row is excluded (not reset) rather than silently promoted, and
20
+ * the exclusion is reported back to the caller by category:
21
+ *
22
+ * - **Redirect source** (`redirect_dest_id` is set): resetting it would
23
+ * discard a real, previously-observed 3xx. If the operator wants the
24
+ * redirect re-verified, that is `--retry-failed`'s job (which does NOT
25
+ * exclude redirect sources from a permanent-failure reset — a different
26
+ * operation with a different default).
27
+ * - **Intentionally skipped** (`is_skipped = 1`): the row was excluded by
28
+ * `excludes`/`excludeUrls` at ingestion or fetch time. `--recrawl` does not
29
+ * second-guess that configuration; re-running the crawl with a changed
30
+ * exclude list is the supported path to un-skip a page.
31
+ * - **External** (`is_external = 1`): bringing a scope-external URL back
32
+ * into scope is `--append`'s job (`repromoteExternalPages`), which also
33
+ * updates the scope map. `--recrawl` only re-fetches in-scope pages.
34
+ *
35
+ * Deliberately does NOT exclude candidates whose URL shape already has a
36
+ * confirmed same-cluster trap recorded (`dedupe_cap_events.shape_key`) — the
37
+ * exclusion {@link resetFailedPages} applies for exactly that reason (see its
38
+ * own JSDoc). The two functions differ on what "the operator asked for this"
39
+ * means: `resetFailedPages` widens an automatic, unattended SQL scan
40
+ * (`--retry-failed`), so a known trap is safe to silently skip re-admitting.
41
+ * `resetPagesByUrls` resets URLs the operator named one-by-one in a file —
42
+ * the same reasoning that already exempts explicit URLs from the
43
+ * failure-kind filter above applies here too: an operator who names a
44
+ * specific trap-shaped URL is not "re-discovering" it by accident, and
45
+ * silently refusing to reset a row they explicitly listed would be a more
46
+ * surprising failure mode than honouring the request.
47
+ *
48
+ * A URL that matches no `content_items` row at all (not yet known to the
49
+ * archive) is silently absent from every array on the result — the caller
50
+ * treats it as a novel URL, the same "not yet known" path `--inventory`
51
+ * takes. A URL matching a row with `scraped = 0` is likewise absent from
52
+ * every array: it is already pending, so there is nothing to reset.
53
+ *
54
+ * On a match, `content_items` is UPDATEd exactly like
55
+ * {@link resetFailedPages} (`scraped`/`status`/`status_text`/
56
+ * `content_type_id`/`content_length`/`header_set_id` cleared,
57
+ * `first_crawled_at`/`last_crawled_at` preserved), and every derived row is
58
+ * cleared via {@link clearPageDerivedRows} plus `page_errors` and
59
+ * the legacy `analysis_violations` table when an archive still carries it.
60
+ * Current archives no longer create that table, but an archive written by
61
+ * an earlier version keeps it (FK to `content_items(id)`). The reset only
62
+ * UPDATEs `content_items`, so no FK violation is reachable here; the stale
63
+ * violation rows of a re-fetched page are removed because they describe
64
+ * content that is about to be replaced. The delete is guarded by `hasTable`.
65
+ * `analysis_text_refs` is a content-hash dictionary shared across pages and
66
+ * is not touched; an orphaned entry is a harmless, unreferenced row, the
67
+ * same trade-off already made for `page_html_blobs`.
68
+ *
69
+ * SELECT and UPDATE/DELETE statements are chunked to stay below SQLite's
70
+ * `SQLITE_LIMIT_VARIABLE_NUMBER`.
71
+ * @param knex - Knex query builder connected to the archive DB.
72
+ * @param urls - URL strings to match against `content_items`, already in
73
+ * `withoutHashAndAuth` form (mirrors every other URL-list comparison in
74
+ * this package, e.g. `getExistingPageUrls`).
75
+ * @param onProgress - Called after each chunk's DELETE/UPDATE statements
76
+ * complete, with the pages processed so far and the total to reset. Omit
77
+ * for no reporting (the default; e.g. tests).
78
+ * @returns The reset URLs, plus the excluded URLs grouped by exclusion
79
+ * reason — see {@link ResetPagesByUrlsResult}.
80
+ */
81
+ export async function resetPagesByUrls(knex, urls, onProgress) {
82
+ const empty = {
83
+ resetUrls: [],
84
+ excludedRedirects: [],
85
+ excludedSkipped: [],
86
+ excludedExternal: [],
87
+ };
88
+ if (urls.length === 0) {
89
+ return empty;
90
+ }
91
+ const candidates = [];
92
+ await eachSplitted([...urls], 500, async (chunk) => {
93
+ const rows = await knex('content_items')
94
+ .join('url_refs', 'url_refs.id', 'content_items.url_id')
95
+ .select('content_items.id as id', 'url_refs.url as url', 'content_items.redirect_dest_id as redirect_dest_id', 'content_items.is_skipped as is_skipped', 'content_items.is_external as is_external')
96
+ .where('content_items.scraped', 1)
97
+ .whereIn('url_refs.url', chunk);
98
+ candidates.push(...rows);
99
+ });
100
+ if (candidates.length === 0) {
101
+ return empty;
102
+ }
103
+ const resettable = [];
104
+ const excludedRedirects = [];
105
+ const excludedSkipped = [];
106
+ const excludedExternal = [];
107
+ for (const row of candidates) {
108
+ if (row.redirect_dest_id != null) {
109
+ excludedRedirects.push(row.url);
110
+ continue;
111
+ }
112
+ if (row.is_skipped) {
113
+ excludedSkipped.push(row.url);
114
+ continue;
115
+ }
116
+ if (row.is_external) {
117
+ excludedExternal.push(row.url);
118
+ continue;
119
+ }
120
+ resettable.push(row);
121
+ }
122
+ if (resettable.length === 0) {
123
+ return { resetUrls: [], excludedRedirects, excludedSkipped, excludedExternal };
124
+ }
125
+ const ids = resettable.map((row) => row.id);
126
+ const resetUrls = resettable.map((row) => row.url);
127
+ const hasLegacyViolations = await knex.schema.hasTable('analysis_violations');
128
+ const chunkSize = 500;
129
+ for (let i = 0; i < ids.length; i += chunkSize) {
130
+ const chunk = ids.slice(i, i + chunkSize);
131
+ await knex('content_items').whereIn('id', chunk).update({
132
+ scraped: 0,
133
+ status: null,
134
+ status_text: null,
135
+ content_type_id: null,
136
+ content_length: null,
137
+ header_set_id: null,
138
+ // `first_crawled_at` / `last_crawled_at` are deliberately left
139
+ // untouched, matching `resetFailedPages` — the last-success
140
+ // timestamp records survive the demotion.
141
+ });
142
+ await knex('page_errors').whereIn('pageId', chunk).delete();
143
+ if (hasLegacyViolations) {
144
+ await knex('analysis_violations').whereIn('page_id', chunk).delete();
145
+ }
146
+ await clearPageDerivedRows(knex, chunk);
147
+ onProgress?.(Math.min(i + chunkSize, ids.length), ids.length);
148
+ }
149
+ dbLog('Reset %d page(s) matched by URL list back to pending', resetUrls.length);
150
+ return { resetUrls, excludedRedirects, excludedSkipped, excludedExternal };
151
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * `page_meta.image_scan_desktop` / `image_scan_mobile` codes that qualify a
3
+ * page for `--retry-failed`, mirroring `@d-zero/beholder`'s `IMAGE_SCAN_CODE`
4
+ * (kept as a plain numeric literal list here rather than importing that
5
+ * constant, since the archive's `page_meta` columns persist across
6
+ * a `@d-zero/beholder` version bump and must keep meaning the same numbers
7
+ * even if a future crawler build pins an older beholder).
8
+ *
9
+ * - `2` (`nav-unsettled`) and `3` (`frame-lost`) are transient failures the
10
+ * scan itself could not recover from — a retry is likely to succeed.
11
+ * - `255` (`unknown`) is retried too, erring on the side of investigation,
12
+ * consistent with {@link import('../../../error-kind/classify-error-kind.js').classifyErrorKind}'s
13
+ * "unknown" kind never being treated as permanent.
14
+ *
15
+ * Deliberately excluded:
16
+ * - `0` (`ok`) and `1` (`degraded`) — the scan produced data.
17
+ * - `4` (`scroll-height-exceeded`) — a deterministic, page-shape-driven
18
+ * outcome that a retry cannot change.
19
+ * @example
20
+ * ```ts
21
+ * qb.whereIn('page_meta.image_scan_desktop', RETRYABLE_IMAGE_SCAN_CODES);
22
+ * ```
23
+ */
24
+ export declare const RETRYABLE_IMAGE_SCAN_CODES: readonly [2, 3, 255];
@@ -0,0 +1,24 @@
1
+ /**
2
+ * `page_meta.image_scan_desktop` / `image_scan_mobile` codes that qualify a
3
+ * page for `--retry-failed`, mirroring `@d-zero/beholder`'s `IMAGE_SCAN_CODE`
4
+ * (kept as a plain numeric literal list here rather than importing that
5
+ * constant, since the archive's `page_meta` columns persist across
6
+ * a `@d-zero/beholder` version bump and must keep meaning the same numbers
7
+ * even if a future crawler build pins an older beholder).
8
+ *
9
+ * - `2` (`nav-unsettled`) and `3` (`frame-lost`) are transient failures the
10
+ * scan itself could not recover from — a retry is likely to succeed.
11
+ * - `255` (`unknown`) is retried too, erring on the side of investigation,
12
+ * consistent with {@link import('../../../error-kind/classify-error-kind.js').classifyErrorKind}'s
13
+ * "unknown" kind never being treated as permanent.
14
+ *
15
+ * Deliberately excluded:
16
+ * - `0` (`ok`) and `1` (`degraded`) — the scan produced data.
17
+ * - `4` (`scroll-height-exceeded`) — a deterministic, page-shape-driven
18
+ * outcome that a retry cannot change.
19
+ * @example
20
+ * ```ts
21
+ * qb.whereIn('page_meta.image_scan_desktop', RETRYABLE_IMAGE_SCAN_CODES);
22
+ * ```
23
+ */
24
+ export const RETRYABLE_IMAGE_SCAN_CODES = [2, 3, 255];
@@ -0,0 +1,14 @@
1
+ import type { MainContentsData } from '../../../utils/types/types.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Replaces the page's `page_main_content_audios` rows with the freshly
5
+ * captured set. Called inside `updatePage`'s transaction, gated on
6
+ * `mainContents !== null`.
7
+ *
8
+ * Same empty-guard as `insertTags` / `insertJsonLd`: an empty array does not
9
+ * wipe prior rows on a degraded re-scrape.
10
+ * @param pageId - The owning `content_items.id`.
11
+ * @param mainContents - Beholder's per-page main-content metrics.
12
+ * @param trx - The active transaction.
13
+ */
14
+ export declare function insertAudios(pageId: number, mainContents: MainContentsData, trx: Knex.Transaction): Promise<void>;
@@ -0,0 +1,25 @@
1
+ import { eachSplitted } from '../../../utils/array/each-splitted.js';
2
+ /**
3
+ * Replaces the page's `page_main_content_audios` rows with the freshly
4
+ * captured set. Called inside `updatePage`'s transaction, gated on
5
+ * `mainContents !== null`.
6
+ *
7
+ * Same empty-guard as `insertTags` / `insertJsonLd`: an empty array does not
8
+ * wipe prior rows on a degraded re-scrape.
9
+ * @param pageId - The owning `content_items.id`.
10
+ * @param mainContents - Beholder's per-page main-content metrics.
11
+ * @param trx - The active transaction.
12
+ */
13
+ export async function insertAudios(pageId, mainContents, trx) {
14
+ if (mainContents.audios.length === 0)
15
+ return;
16
+ const rows = mainContents.audios.map((audio, order) => ({
17
+ pageId,
18
+ order,
19
+ src: audio.src,
20
+ }));
21
+ await trx('page_main_content_audios').where('pageId', pageId).delete();
22
+ await eachSplitted(rows, 100, async (chunk) => {
23
+ await trx('page_main_content_audios').insert(chunk);
24
+ });
25
+ }
@@ -0,0 +1,14 @@
1
+ import type { MainContentsData } from '../../../utils/types/types.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Replaces the page's `page_main_content_buttons` rows with the freshly
5
+ * captured set. Called inside `updatePage`'s transaction, gated on
6
+ * `mainContents !== null`.
7
+ *
8
+ * Same empty-guard as `insertTags` / `insertJsonLd`: an empty array does not
9
+ * wipe prior rows on a degraded re-scrape.
10
+ * @param pageId - The owning `content_items.id`.
11
+ * @param mainContents - Beholder's per-page main-content metrics.
12
+ * @param trx - The active transaction.
13
+ */
14
+ export declare function insertButtons(pageId: number, mainContents: MainContentsData, trx: Knex.Transaction): Promise<void>;
@@ -0,0 +1,29 @@
1
+ import { eachSplitted } from '../../../utils/array/each-splitted.js';
2
+ /**
3
+ * Replaces the page's `page_main_content_buttons` rows with the freshly
4
+ * captured set. Called inside `updatePage`'s transaction, gated on
5
+ * `mainContents !== null`.
6
+ *
7
+ * Same empty-guard as `insertTags` / `insertJsonLd`: an empty array does not
8
+ * wipe prior rows on a degraded re-scrape.
9
+ * @param pageId - The owning `content_items.id`.
10
+ * @param mainContents - Beholder's per-page main-content metrics.
11
+ * @param trx - The active transaction.
12
+ */
13
+ export async function insertButtons(pageId, mainContents, trx) {
14
+ if (mainContents.buttons.length === 0)
15
+ return;
16
+ const rows = mainContents.buttons.map((button, order) => ({
17
+ pageId,
18
+ order,
19
+ nodeName: button.nodeName,
20
+ role: button.role,
21
+ type: button.type,
22
+ text: button.text,
23
+ disabled: button.disabled,
24
+ }));
25
+ await trx('page_main_content_buttons').where('pageId', pageId).delete();
26
+ await eachSplitted(rows, 100, async (chunk) => {
27
+ await trx('page_main_content_buttons').insert(chunk);
28
+ });
29
+ }
@@ -0,0 +1,14 @@
1
+ import type { MainContentsData } from '../../../utils/types/types.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Replaces the page's `page_main_content_canvases` rows with the freshly
5
+ * captured set. Called inside `updatePage`'s transaction, gated on
6
+ * `mainContents !== null`.
7
+ *
8
+ * Same empty-guard as `insertTags` / `insertJsonLd`: an empty array does not
9
+ * wipe prior rows on a degraded re-scrape.
10
+ * @param pageId - The owning `content_items.id`.
11
+ * @param mainContents - Beholder's per-page main-content metrics.
12
+ * @param trx - The active transaction.
13
+ */
14
+ export declare function insertCanvases(pageId: number, mainContents: MainContentsData, trx: Knex.Transaction): Promise<void>;
@@ -0,0 +1,26 @@
1
+ import { eachSplitted } from '../../../utils/array/each-splitted.js';
2
+ /**
3
+ * Replaces the page's `page_main_content_canvases` rows with the freshly
4
+ * captured set. Called inside `updatePage`'s transaction, gated on
5
+ * `mainContents !== null`.
6
+ *
7
+ * Same empty-guard as `insertTags` / `insertJsonLd`: an empty array does not
8
+ * wipe prior rows on a degraded re-scrape.
9
+ * @param pageId - The owning `content_items.id`.
10
+ * @param mainContents - Beholder's per-page main-content metrics.
11
+ * @param trx - The active transaction.
12
+ */
13
+ export async function insertCanvases(pageId, mainContents, trx) {
14
+ if (mainContents.canvases.length === 0)
15
+ return;
16
+ const rows = mainContents.canvases.map((canvas, order) => ({
17
+ pageId,
18
+ order,
19
+ width: canvas.width,
20
+ height: canvas.height,
21
+ }));
22
+ await trx('page_main_content_canvases').where('pageId', pageId).delete();
23
+ await eachSplitted(rows, 100, async (chunk) => {
24
+ await trx('page_main_content_canvases').insert(chunk);
25
+ });
26
+ }
@@ -0,0 +1,27 @@
1
+ import type { MainContentCustomElementCandidate } from '../../../types.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Replaces the page's `page_main_content_custom_elements` rows with the
5
+ * freshly captured set. Called inside `updatePage`'s transaction, gated on
6
+ * `page.mainContentCustomElements !== undefined` by the caller — the caller
7
+ * must NOT call this with a defaulted `[]` when the capture itself failed
8
+ * (`undefined`), since this function cannot tell "capture found nothing"
9
+ * apart from "capture didn't run" once it receives a plain array.
10
+ *
11
+ * Unlike `insertButtons` / `insertHeadings` etc. (whose empty-array case is
12
+ * genuinely ambiguous — beholder's `MainContentsData` gives no way to tell
13
+ * "successfully found zero" from "degraded scrape" — this function always
14
+ * deletes existing rows once called, including for an empty array: because
15
+ * the caller already resolved that ambiguity via the `!== undefined` gate,
16
+ * an empty array here unambiguously means "capture succeeded, found none,"
17
+ * so stale rows from a previous crawl must be cleared.
18
+ *
19
+ * Unlike `insertButtons`, the input is nitpicker's own
20
+ * `MainContentCustomElementCandidate[]` (from `capture-custom-elements.ts`),
21
+ * not a slice of beholder's `MainContentsData` — there is no such category
22
+ * in `MainContentsData`.
23
+ * @param pageId - The owning `content_items.id`.
24
+ * @param customElements - The captured custom elements, in document order.
25
+ * @param trx - The active transaction.
26
+ */
27
+ export declare function insertCustomElements(pageId: number, customElements: readonly MainContentCustomElementCandidate[], trx: Knex.Transaction): Promise<void>;
@@ -0,0 +1,40 @@
1
+ import { eachSplitted } from '../../../utils/array/each-splitted.js';
2
+ /**
3
+ * Replaces the page's `page_main_content_custom_elements` rows with the
4
+ * freshly captured set. Called inside `updatePage`'s transaction, gated on
5
+ * `page.mainContentCustomElements !== undefined` by the caller — the caller
6
+ * must NOT call this with a defaulted `[]` when the capture itself failed
7
+ * (`undefined`), since this function cannot tell "capture found nothing"
8
+ * apart from "capture didn't run" once it receives a plain array.
9
+ *
10
+ * Unlike `insertButtons` / `insertHeadings` etc. (whose empty-array case is
11
+ * genuinely ambiguous — beholder's `MainContentsData` gives no way to tell
12
+ * "successfully found zero" from "degraded scrape" — this function always
13
+ * deletes existing rows once called, including for an empty array: because
14
+ * the caller already resolved that ambiguity via the `!== undefined` gate,
15
+ * an empty array here unambiguously means "capture succeeded, found none,"
16
+ * so stale rows from a previous crawl must be cleared.
17
+ *
18
+ * Unlike `insertButtons`, the input is nitpicker's own
19
+ * `MainContentCustomElementCandidate[]` (from `capture-custom-elements.ts`),
20
+ * not a slice of beholder's `MainContentsData` — there is no such category
21
+ * in `MainContentsData`.
22
+ * @param pageId - The owning `content_items.id`.
23
+ * @param customElements - The captured custom elements, in document order.
24
+ * @param trx - The active transaction.
25
+ */
26
+ export async function insertCustomElements(pageId, customElements, trx) {
27
+ await trx('page_main_content_custom_elements').where('pageId', pageId).delete();
28
+ if (customElements.length === 0)
29
+ return;
30
+ const rows = customElements.map((el, order) => ({
31
+ pageId,
32
+ order,
33
+ nodeName: el.nodeName,
34
+ elementId: el.elementId,
35
+ classList: JSON.stringify(el.classList),
36
+ }));
37
+ await eachSplitted(rows, 100, async (chunk) => {
38
+ await trx('page_main_content_custom_elements').insert(chunk);
39
+ });
40
+ }
@@ -0,0 +1,15 @@
1
+ import type { MainContentsData } from '../../../utils/types/types.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Replaces the page's `page_main_content_headings` rows with the freshly
5
+ * captured set. Called inside `updatePage`'s transaction, gated on
6
+ * `mainContents !== null` (non-HTML / external / metadata-only scrapes have
7
+ * no main-content data to write).
8
+ *
9
+ * Same empty-guard as `insertTags` / `insertJsonLd`: an empty array does not
10
+ * wipe prior rows on a degraded re-scrape.
11
+ * @param pageId - The owning `content_items.id`.
12
+ * @param mainContents - Beholder's per-page main-content metrics.
13
+ * @param trx - The active transaction.
14
+ */
15
+ export declare function insertHeadings(pageId: number, mainContents: MainContentsData, trx: Knex.Transaction): Promise<void>;
@@ -0,0 +1,27 @@
1
+ import { eachSplitted } from '../../../utils/array/each-splitted.js';
2
+ /**
3
+ * Replaces the page's `page_main_content_headings` rows with the freshly
4
+ * captured set. Called inside `updatePage`'s transaction, gated on
5
+ * `mainContents !== null` (non-HTML / external / metadata-only scrapes have
6
+ * no main-content data to write).
7
+ *
8
+ * Same empty-guard as `insertTags` / `insertJsonLd`: an empty array does not
9
+ * wipe prior rows on a degraded re-scrape.
10
+ * @param pageId - The owning `content_items.id`.
11
+ * @param mainContents - Beholder's per-page main-content metrics.
12
+ * @param trx - The active transaction.
13
+ */
14
+ export async function insertHeadings(pageId, mainContents, trx) {
15
+ if (mainContents.headings.length === 0)
16
+ return;
17
+ const rows = mainContents.headings.map((heading, order) => ({
18
+ pageId,
19
+ order,
20
+ text: heading.text,
21
+ level: heading.level,
22
+ }));
23
+ await trx('page_main_content_headings').where('pageId', pageId).delete();
24
+ await eachSplitted(rows, 100, async (chunk) => {
25
+ await trx('page_main_content_headings').insert(chunk);
26
+ });
27
+ }
@@ -0,0 +1,14 @@
1
+ import type { MainContentsData } from '../../../utils/types/types.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Replaces the page's `page_main_content_iframes` rows with the freshly
5
+ * captured set. Called inside `updatePage`'s transaction, gated on
6
+ * `mainContents !== null`.
7
+ *
8
+ * Same empty-guard as `insertTags` / `insertJsonLd`: an empty array does not
9
+ * wipe prior rows on a degraded re-scrape.
10
+ * @param pageId - The owning `content_items.id`.
11
+ * @param mainContents - Beholder's per-page main-content metrics.
12
+ * @param trx - The active transaction.
13
+ */
14
+ export declare function insertIframes(pageId: number, mainContents: MainContentsData, trx: Knex.Transaction): Promise<void>;
@@ -0,0 +1,28 @@
1
+ import { eachSplitted } from '../../../utils/array/each-splitted.js';
2
+ /**
3
+ * Replaces the page's `page_main_content_iframes` rows with the freshly
4
+ * captured set. Called inside `updatePage`'s transaction, gated on
5
+ * `mainContents !== null`.
6
+ *
7
+ * Same empty-guard as `insertTags` / `insertJsonLd`: an empty array does not
8
+ * wipe prior rows on a degraded re-scrape.
9
+ * @param pageId - The owning `content_items.id`.
10
+ * @param mainContents - Beholder's per-page main-content metrics.
11
+ * @param trx - The active transaction.
12
+ */
13
+ export async function insertIframes(pageId, mainContents, trx) {
14
+ if (mainContents.iframes.length === 0)
15
+ return;
16
+ const rows = mainContents.iframes.map((iframe, order) => ({
17
+ pageId,
18
+ order,
19
+ src: iframe.src,
20
+ title: iframe.title,
21
+ width: iframe.width,
22
+ height: iframe.height,
23
+ }));
24
+ await trx('page_main_content_iframes').where('pageId', pageId).delete();
25
+ await eachSplitted(rows, 100, async (chunk) => {
26
+ await trx('page_main_content_iframes').insert(chunk);
27
+ });
28
+ }
@@ -0,0 +1,38 @@
1
+ import type { WriteRefCaches } from '../../_shared/types.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Parameters for {@link insertInventoryContentItems}.
5
+ */
6
+ export interface InsertInventoryContentItemsParams {
7
+ /** Knex query builder connected to the archive DB. */
8
+ readonly knex: Knex;
9
+ /** The connection's write-side id caches. */
10
+ readonly caches: WriteRefCaches;
11
+ /** URL strings already in `withoutHashAndAuth` form. */
12
+ readonly urls: readonly string[];
13
+ /** `content_items` column values shared by every inserted row (everything except `url_id`). */
14
+ readonly row: Readonly<Record<string, number | string>>;
15
+ /** Calling op's name, used to prefix the unresolved-url_ref error message. */
16
+ readonly opName: string;
17
+ }
18
+ /**
19
+ * Shared body of the inventory `content_items` bulk-insert ops
20
+ * (`insertInventorySeeds` / `insertInventorySkippedPages`): chunked
21
+ * `url_refs` upsert → id resolution → `content_items` insert-ignore →
22
+ * write-cache population. The two callers differ only in the row
23
+ * constants they stamp on every row, so the invariant-heavy plumbing
24
+ * lives here exactly once:
25
+ *
26
+ * - Chunked into 500-URL batches so SQLite's bound-parameter limit
27
+ * (`SQLITE_MAX_VARIABLE_NUMBER`) cannot be hit even on a
28
+ * tens-of-thousands inventory list.
29
+ * - Both inserts are `ON CONFLICT ... IGNORE`, so existing rows — in
30
+ * particular previously crawled pages — are never overwritten
31
+ * (crawled-wins), and within-list duplicates collapse to one row.
32
+ * - The `urlIds` / `contentItems` write caches are populated from what
33
+ * the DB actually holds after the insert (not from the attempted row
34
+ * values), keeping later cache-hits consistent with conflict-ignored
35
+ * rows.
36
+ * @param params - See {@link InsertInventoryContentItemsParams}.
37
+ */
38
+ export declare function insertInventoryContentItems(params: InsertInventoryContentItemsParams): Promise<void>;
@@ -0,0 +1,60 @@
1
+ import { resolveUrlRefs } from '../../../populate-entity-tables/resolve-url-refs.js';
2
+ import { decomposeUrl } from '../../../populate-ref-tables/decompose-url.js';
3
+ import { eachSplitted } from '../../../utils/array/each-splitted.js';
4
+ /**
5
+ * Shared body of the inventory `content_items` bulk-insert ops
6
+ * (`insertInventorySeeds` / `insertInventorySkippedPages`): chunked
7
+ * `url_refs` upsert → id resolution → `content_items` insert-ignore →
8
+ * write-cache population. The two callers differ only in the row
9
+ * constants they stamp on every row, so the invariant-heavy plumbing
10
+ * lives here exactly once:
11
+ *
12
+ * - Chunked into 500-URL batches so SQLite's bound-parameter limit
13
+ * (`SQLITE_MAX_VARIABLE_NUMBER`) cannot be hit even on a
14
+ * tens-of-thousands inventory list.
15
+ * - Both inserts are `ON CONFLICT ... IGNORE`, so existing rows — in
16
+ * particular previously crawled pages — are never overwritten
17
+ * (crawled-wins), and within-list duplicates collapse to one row.
18
+ * - The `urlIds` / `contentItems` write caches are populated from what
19
+ * the DB actually holds after the insert (not from the attempted row
20
+ * values), keeping later cache-hits consistent with conflict-ignored
21
+ * rows.
22
+ * @param params - See {@link InsertInventoryContentItemsParams}.
23
+ */
24
+ export async function insertInventoryContentItems(params) {
25
+ const { knex, caches, urls, row, opName } = params;
26
+ if (urls.length === 0) {
27
+ return;
28
+ }
29
+ await eachSplitted([...urls], 500, async (chunk) => {
30
+ await knex('url_refs')
31
+ .insert(chunk.map((url) => ({ url, ...decomposeUrl(url) })))
32
+ .onConflict('url')
33
+ .ignore();
34
+ const urlIds = await resolveUrlRefs(knex, chunk);
35
+ const rows = chunk.map((url) => {
36
+ const urlId = urlIds.get(url);
37
+ if (urlId === undefined) {
38
+ throw new Error(`${opName}: url_refs.id not resolved for ${url}`);
39
+ }
40
+ caches.urlIds.set(url, urlId);
41
+ return {
42
+ url_id: urlId,
43
+ ...row,
44
+ };
45
+ });
46
+ await knex('content_items').insert(rows).onConflict('url_id').ignore();
47
+ const inserted = (await knex
48
+ .select('ci.id', 'ci.source', 'ci.is_metadata_only', 'ur.url')
49
+ .from('content_items as ci')
50
+ .join('url_refs as ur', 'ur.id', 'ci.url_id')
51
+ .whereIn('ur.url', chunk));
52
+ for (const insertedRow of inserted) {
53
+ caches.contentItems.set(insertedRow.url, {
54
+ id: insertedRow.id,
55
+ source: insertedRow.source,
56
+ isMetadataOnly: insertedRow.is_metadata_only,
57
+ });
58
+ }
59
+ });
60
+ }
@@ -0,0 +1,36 @@
1
+ import type { WriteRefCaches } from '../../_shared/types.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Pre-insert inventory HTML seeds into `content_items` as `scraped = 0`,
5
+ * `source = 'inventory-seed'` placeholders so the URL's existence in the
6
+ * archive is **durable before the scrape phase starts**.
7
+ *
8
+ * Why this is the linchpin of `--inventory` Ctrl+C tolerance: without
9
+ * pre-insertion, HTML seeds live only in the Crawler's in-memory
10
+ * `LinkList` until the dealer eventually calls `setPage`. A Ctrl+C /
11
+ * crash before that point loses the seed without trace, and `--resume`
12
+ * cannot recover it because `getCrawlingState`'s strict pending set
13
+ * requires a `content_items` row. Pre-inserting fills exactly that gap:
14
+ * the strict pending set picks these rows up via its
15
+ * `OR source != 'crawled'` clause, so `--resume` after an interrupted
16
+ * inventory pass picks every seed back up. See `getCrawlingState` for
17
+ * the strict-set rationale.
18
+ *
19
+ * Idempotent: both the `url_refs` and `content_items` inserts are
20
+ * `ON CONFLICT ... IGNORE`, keeping existing rows intact. The
21
+ * `resolveContentItemId` crawled-wins downgrade still fires later when a
22
+ * crawled-lineage anchor reaches one of these seeds — that's the right
23
+ * behaviour (a seed that turned out to be reachable is not an orphan
24
+ * and should not retain the inventory label).
25
+ *
26
+ * Called by `CrawlerOrchestrator.inventory` during the
27
+ * `.bak`-protected ingestion phase, so any failure here aborts the run
28
+ * and restores from backup — the operator reruns from scratch. The
29
+ * chunking / conflict-ignore / cache-population plumbing lives in
30
+ * {@link insertInventoryContentItems}, shared with
31
+ * `insertInventorySkippedPages`.
32
+ * @param knex - Knex query builder connected to the archive DB.
33
+ * @param caches - The connection's write-side id caches.
34
+ * @param urls - URL strings already in `withoutHashAndAuth` form.
35
+ */
36
+ export declare function insertInventorySeeds(knex: Knex, caches: WriteRefCaches, urls: readonly string[]): Promise<void>;