@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,40 @@
1
+ /**
2
+ * Result of probing an archive's `.lock` sibling without acquiring it.
3
+ *
4
+ * Used by read-only consumers (the viewer, MCP `open_archive`) that want
5
+ * to surface "a crawler is currently writing this archive" to the user
6
+ * without blocking or competing for the lock.
7
+ */
8
+ export interface ArchiveLockHolder {
9
+ /** Path of the lock directory (`<tmpDir>.lock`) that was probed. */
10
+ readonly lockPath: string;
11
+ /** PID of the process whose lock is recorded in `pid.txt`. */
12
+ readonly pid: number;
13
+ /**
14
+ * Whether that PID is currently alive on the OS (signal-0 probe).
15
+ *
16
+ * **PID-recycling caveat**: this only proves *some* process owns that PID,
17
+ * not necessarily the original crawler. Callers should treat
18
+ * `{ alive: true }` as "likely a live crawler" rather than a hard
19
+ * guarantee.
20
+ */
21
+ readonly alive: boolean;
22
+ }
23
+ /**
24
+ * Probe `<tmpDir>.lock/pid.txt` without acquiring the lock.
25
+ *
26
+ * Mirror of the alive-check inside `acquireArchiveLock`, exposed for
27
+ * read-only consumers so they can detect (and surface) a concurrent crawler
28
+ * without competing for the lock. Returns `null` when no lock directory is
29
+ * present or the pid file is missing/malformed — callers should treat that
30
+ * as "no detectable crawler" rather than as an error.
31
+ *
32
+ * Co-located with `acquireArchiveLock` so the writer side and the
33
+ * read-only probe stay in lockstep when the lock format evolves (e.g.
34
+ * adding a hostname/timestamp field).
35
+ * @param tmpDir - The archive's temporary working directory whose
36
+ * `${tmpDir}.lock` sibling will be probed.
37
+ * @returns Lock-holder metadata when a parseable lock exists, otherwise
38
+ * `null`.
39
+ */
40
+ export declare function peekArchiveLockHolder(tmpDir: string): ArchiveLockHolder | null;
@@ -0,0 +1,62 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ /**
4
+ * Probe `<tmpDir>.lock/pid.txt` without acquiring the lock.
5
+ *
6
+ * Mirror of the alive-check inside `acquireArchiveLock`, exposed for
7
+ * read-only consumers so they can detect (and surface) a concurrent crawler
8
+ * without competing for the lock. Returns `null` when no lock directory is
9
+ * present or the pid file is missing/malformed — callers should treat that
10
+ * as "no detectable crawler" rather than as an error.
11
+ *
12
+ * Co-located with `acquireArchiveLock` so the writer side and the
13
+ * read-only probe stay in lockstep when the lock format evolves (e.g.
14
+ * adding a hostname/timestamp field).
15
+ * @param tmpDir - The archive's temporary working directory whose
16
+ * `${tmpDir}.lock` sibling will be probed.
17
+ * @returns Lock-holder metadata when a parseable lock exists, otherwise
18
+ * `null`.
19
+ */
20
+ export function peekArchiveLockHolder(tmpDir) {
21
+ const lockPath = `${tmpDir}.lock`;
22
+ if (!existsSync(lockPath)) {
23
+ return null;
24
+ }
25
+ const pid = readPidFile(lockPath);
26
+ if (pid === null) {
27
+ return null;
28
+ }
29
+ return { lockPath, pid, alive: isProcessAlive(pid) };
30
+ }
31
+ /**
32
+ * Read the PID stored in the lock's `pid.txt`. Returns `null` for any
33
+ * missing/unparsable/non-positive content so the probe degrades gracefully
34
+ * on partially-written or corrupted lock dirs.
35
+ * @param lockPath - The lock directory path.
36
+ */
37
+ function readPidFile(lockPath) {
38
+ try {
39
+ const raw = readFileSync(path.join(lockPath, 'pid.txt'), 'utf8');
40
+ const pid = Number.parseInt(raw.trim(), 10);
41
+ return Number.isFinite(pid) && pid > 0 ? pid : null;
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ }
47
+ /**
48
+ * Check whether a PID is currently alive using a signal-0 probe.
49
+ *
50
+ * Treats `EPERM` as alive (the process exists but is owned by another
51
+ * user). Any other errno (notably `ESRCH`) means dead.
52
+ * @param pid - The process id to probe.
53
+ */
54
+ function isProcessAlive(pid) {
55
+ try {
56
+ process.kill(pid, 0);
57
+ return true;
58
+ }
59
+ catch (error) {
60
+ return error.code === 'EPERM';
61
+ }
62
+ }
@@ -0,0 +1,41 @@
1
+ import type { AnchorEdgeRowInProgress, AnchorInputRow } from './types.js';
2
+ /**
3
+ * Collapses consecutive `anchors`-shaped rows into `anchor_edges` rows by
4
+ * `(pageId, hrefId)` (issue #193).
5
+ *
6
+ * **Input contract**: `rows` MUST be sorted by `(pageId, hrefId, id)`
7
+ * ascending. The caller (`populate-anchor-edges.ts`) achieves this via a
8
+ * single keyset scan `ORDER BY pageId, hrefId, id` over `anchors`.
9
+ *
10
+ * The `id`-then-key sort matters because the dedup rule is
11
+ * "first instance wins": the smallest `anchors.id` for a given
12
+ * `(pageId, hrefId)` pair contributes its `hash` and `textContent` to
13
+ * the edge; every subsequent duplicate is counted but its body is
14
+ * discarded. A naive `min(hash) GROUP BY pageId, hrefId` would pick the
15
+ * lexicographically smallest hex string (uniformly distributed) rather
16
+ * than the earliest occurrence, so the pass has to happen in JS.
17
+ *
18
+ * The generator yields one {@link AnchorEdgeRowInProgress} per distinct
19
+ * pair as soon as the next pair boundary is observed. Emitting eagerly
20
+ * keeps peak memory bounded to O(1) — the collapser holds at most one
21
+ * open pair state at a time.
22
+ *
23
+ * `first_text_id` is intentionally left `null` here; the caller resolves
24
+ * it in a second pass after all edges are known (see
25
+ * `populate-anchor-edges.ts`). The `first_hash` field is set to the
26
+ * first row's `hash` verbatim; a first row with `hash === null` results
27
+ * in `first_hash = null` on the edge (rare but possible on legacy
28
+ * archives that failed to compute a hash).
29
+ * @param rows - Anchor input rows sorted by `(pageId, hrefId, id)`.
30
+ * @yields {AnchorEdgeRowInProgress} One entry per distinct
31
+ * `(pageId, hrefId)` pair in the input.
32
+ * @example
33
+ * const edges = [...collapseAnchorRows([
34
+ * { id: 1, pageId: 10, hrefId: 20, hash: 'a', textContent: 'first' },
35
+ * { id: 2, pageId: 10, hrefId: 20, hash: 'b', textContent: 'second' },
36
+ * { id: 3, pageId: 10, hrefId: 30, hash: 'c', textContent: 'x' },
37
+ * ])];
38
+ * // edges[0] = { page_id: 10, href_page_id: 20, count: 2, first_hash: 'a', ... }
39
+ * // edges[1] = { page_id: 10, href_page_id: 30, count: 1, first_hash: 'c', ... }
40
+ */
41
+ export declare function collapseAnchorRows(rows: Iterable<AnchorInputRow>): Generator<AnchorEdgeRowInProgress>;
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Collapses consecutive `anchors`-shaped rows into `anchor_edges` rows by
3
+ * `(pageId, hrefId)` (issue #193).
4
+ *
5
+ * **Input contract**: `rows` MUST be sorted by `(pageId, hrefId, id)`
6
+ * ascending. The caller (`populate-anchor-edges.ts`) achieves this via a
7
+ * single keyset scan `ORDER BY pageId, hrefId, id` over `anchors`.
8
+ *
9
+ * The `id`-then-key sort matters because the dedup rule is
10
+ * "first instance wins": the smallest `anchors.id` for a given
11
+ * `(pageId, hrefId)` pair contributes its `hash` and `textContent` to
12
+ * the edge; every subsequent duplicate is counted but its body is
13
+ * discarded. A naive `min(hash) GROUP BY pageId, hrefId` would pick the
14
+ * lexicographically smallest hex string (uniformly distributed) rather
15
+ * than the earliest occurrence, so the pass has to happen in JS.
16
+ *
17
+ * The generator yields one {@link AnchorEdgeRowInProgress} per distinct
18
+ * pair as soon as the next pair boundary is observed. Emitting eagerly
19
+ * keeps peak memory bounded to O(1) — the collapser holds at most one
20
+ * open pair state at a time.
21
+ *
22
+ * `first_text_id` is intentionally left `null` here; the caller resolves
23
+ * it in a second pass after all edges are known (see
24
+ * `populate-anchor-edges.ts`). The `first_hash` field is set to the
25
+ * first row's `hash` verbatim; a first row with `hash === null` results
26
+ * in `first_hash = null` on the edge (rare but possible on legacy
27
+ * archives that failed to compute a hash).
28
+ * @param rows - Anchor input rows sorted by `(pageId, hrefId, id)`.
29
+ * @yields {AnchorEdgeRowInProgress} One entry per distinct
30
+ * `(pageId, hrefId)` pair in the input.
31
+ * @example
32
+ * const edges = [...collapseAnchorRows([
33
+ * { id: 1, pageId: 10, hrefId: 20, hash: 'a', textContent: 'first' },
34
+ * { id: 2, pageId: 10, hrefId: 20, hash: 'b', textContent: 'second' },
35
+ * { id: 3, pageId: 10, hrefId: 30, hash: 'c', textContent: 'x' },
36
+ * ])];
37
+ * // edges[0] = { page_id: 10, href_page_id: 20, count: 2, first_hash: 'a', ... }
38
+ * // edges[1] = { page_id: 10, href_page_id: 30, count: 1, first_hash: 'c', ... }
39
+ */
40
+ export function* collapseAnchorRows(rows) {
41
+ let openPageId = null;
42
+ let openHrefId = null;
43
+ let openCount = 0;
44
+ let openFirstHash = null;
45
+ let openFirstTextContent = null;
46
+ let openLastId = null;
47
+ for (const row of rows) {
48
+ if (openPageId === row.pageId && openHrefId === row.hrefId) {
49
+ // Same pair — assert monotonically-increasing `id` so callers
50
+ // that regress the `ORDER BY id` fail loudly instead of
51
+ // silently producing the wrong "first instance". The count-
52
+ // based acceptance check does not catch this (it only sums
53
+ // counts, not first_hash values), so the collapser defends
54
+ // its own precondition.
55
+ if (openLastId !== null && row.id <= openLastId) {
56
+ throw new Error(`collapseAnchorRows: input not sorted by id within (pageId=${row.pageId}, hrefId=${row.hrefId}) — saw id=${row.id} after id=${openLastId}. Caller must ORDER BY pageId, hrefId, id ASC.`);
57
+ }
58
+ openLastId = row.id;
59
+ openCount += 1;
60
+ continue;
61
+ }
62
+ if (openPageId !== null && openHrefId !== null) {
63
+ yield {
64
+ page_id: openPageId,
65
+ href_page_id: openHrefId,
66
+ count: openCount,
67
+ first_hash: openFirstHash,
68
+ first_textContent: openFirstTextContent,
69
+ };
70
+ }
71
+ openPageId = row.pageId;
72
+ openHrefId = row.hrefId;
73
+ openCount = 1;
74
+ openFirstHash = row.hash;
75
+ openFirstTextContent = row.textContent;
76
+ openLastId = row.id;
77
+ }
78
+ if (openPageId !== null && openHrefId !== null) {
79
+ yield {
80
+ page_id: openPageId,
81
+ href_page_id: openHrefId,
82
+ count: openCount,
83
+ first_hash: openFirstHash,
84
+ first_textContent: openFirstTextContent,
85
+ };
86
+ }
87
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Computes the `dom_path` string for one DOM element as required by
3
+ * `image_items.dom_path_text_id` (issue #193).
4
+ *
5
+ * Format: slash-joined ancestor tags starting at `<html>`, each tag
6
+ * followed by a 1-based sibling ordinal counting **same-tag** siblings
7
+ * only (e.g.
8
+ * `html/body[1]/main[1]/section[2]/picture[1]/img[1]`). The `<html>`
9
+ * root has no bracketed ordinal because there is only one document
10
+ * root per page.
11
+ *
12
+ * The walk uses `parentElement` + `previousElementSibling` — no
13
+ * document mutation, no reliance on `id` / `class` — so a re-render
14
+ * that only reshuffles class names or ids still produces the same path.
15
+ * The chain of tag names alone is stable for a given DOM shape.
16
+ *
17
+ * The function operates on the generic `Element` interface from DOM lib
18
+ * (available in the crawler's TS lib config) so it does not force
19
+ * jsdom into the crawler runtime — the migration script and unit tests
20
+ * inject jsdom-backed elements, while a future crawler-side wrapper
21
+ * can pass puppeteer's DOM handles through the same code.
22
+ *
23
+ * Detached elements (`element.parentElement === null` before reaching
24
+ * `<html>`) return the tag chain from wherever the walk terminates —
25
+ * a legally detached image (rare, but
26
+ * technically possible during scripted mutations) yields e.g.
27
+ * `img[1]` alone instead of throwing.
28
+ * @param element - The DOM element to derive the path for. Typically an
29
+ * `<img>` in the archived HTML, but the function is not tag-specific.
30
+ * @returns The dom_path string.
31
+ * @example
32
+ * // In an HTML snapshot `<html><body><main><img></main></body></html>`
33
+ * deriveDomPath(imgElement); // 'html/body[1]/main[1]/img[1]'
34
+ */
35
+ export declare function deriveDomPath(element: Element): string;
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Computes the `dom_path` string for one DOM element as required by
3
+ * `image_items.dom_path_text_id` (issue #193).
4
+ *
5
+ * Format: slash-joined ancestor tags starting at `<html>`, each tag
6
+ * followed by a 1-based sibling ordinal counting **same-tag** siblings
7
+ * only (e.g.
8
+ * `html/body[1]/main[1]/section[2]/picture[1]/img[1]`). The `<html>`
9
+ * root has no bracketed ordinal because there is only one document
10
+ * root per page.
11
+ *
12
+ * The walk uses `parentElement` + `previousElementSibling` — no
13
+ * document mutation, no reliance on `id` / `class` — so a re-render
14
+ * that only reshuffles class names or ids still produces the same path.
15
+ * The chain of tag names alone is stable for a given DOM shape.
16
+ *
17
+ * The function operates on the generic `Element` interface from DOM lib
18
+ * (available in the crawler's TS lib config) so it does not force
19
+ * jsdom into the crawler runtime — the migration script and unit tests
20
+ * inject jsdom-backed elements, while a future crawler-side wrapper
21
+ * can pass puppeteer's DOM handles through the same code.
22
+ *
23
+ * Detached elements (`element.parentElement === null` before reaching
24
+ * `<html>`) return the tag chain from wherever the walk terminates —
25
+ * a legally detached image (rare, but
26
+ * technically possible during scripted mutations) yields e.g.
27
+ * `img[1]` alone instead of throwing.
28
+ * @param element - The DOM element to derive the path for. Typically an
29
+ * `<img>` in the archived HTML, but the function is not tag-specific.
30
+ * @returns The dom_path string.
31
+ * @example
32
+ * // In an HTML snapshot `<html><body><main><img></main></body></html>`
33
+ * deriveDomPath(imgElement); // 'html/body[1]/main[1]/img[1]'
34
+ */
35
+ export function deriveDomPath(element) {
36
+ const segments = [];
37
+ let current = element;
38
+ while (current !== null) {
39
+ const tag = current.tagName.toLowerCase();
40
+ if (tag === 'html') {
41
+ segments.unshift('html');
42
+ break;
43
+ }
44
+ segments.unshift(`${tag}[${computeSiblingOrdinal(current, tag)}]`);
45
+ current = current.parentElement;
46
+ }
47
+ return segments.join('/');
48
+ }
49
+ /**
50
+ * Counts how many earlier siblings share the same tag name as `element`,
51
+ * returning `count + 1` as the 1-based ordinal.
52
+ *
53
+ * Iterating `previousElementSibling` is O(k) where k is the sibling
54
+ * position; for typical DOM depth and sibling counts this is negligible
55
+ * next to the jsdom parse cost of the enclosing page.
56
+ * @param element - The element whose ordinal is being computed.
57
+ * @param tag - The lower-cased tag name to match on. Passed in by the
58
+ * caller so `element.tagName.toLowerCase()` is not recomputed inside
59
+ * the loop for every sibling comparison.
60
+ * @returns 1-based ordinal among same-tag siblings.
61
+ */
62
+ function computeSiblingOrdinal(element, tag) {
63
+ let count = 1;
64
+ let sibling = element.previousElementSibling;
65
+ while (sibling !== null) {
66
+ if (sibling.tagName.toLowerCase() === tag) {
67
+ count += 1;
68
+ }
69
+ sibling = sibling.previousElementSibling;
70
+ }
71
+ return count;
72
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Predicate matching the ref-tables populate's routing rule
3
+ * (`populate-ref-tables/populate-url-refs.ts` /
4
+ * `populate-ref-tables/populate-blob-refs.ts`): a `data:` URI whose
5
+ * length exceeds {@link DATA_URI_URL_REFS_LIMIT} lands in `blob_refs`;
6
+ * anything else (regular URL or short data URI) lands in `url_refs`.
7
+ * Shared by every entity populate that partitions a URL-shaped column
8
+ * into the two dictionaries (`populate-image-items.ts`,
9
+ * `populate-resource-items.ts`).
10
+ * @param value - Raw URL-shaped column value.
11
+ * @returns `true` when the value belongs in `blob_refs`.
12
+ * @example
13
+ * isBlobRefValue('data:image/png;base64,' + 'x'.repeat(600)); // true
14
+ * isBlobRefValue('https://example.com/a.png'); // false
15
+ */
16
+ export declare function isBlobRefValue(value: string): boolean;
@@ -0,0 +1,19 @@
1
+ import { DATA_URI_URL_REFS_LIMIT } from '../populate-ref-tables/data-uri-url-refs-limit.js';
2
+ /**
3
+ * Predicate matching the ref-tables populate's routing rule
4
+ * (`populate-ref-tables/populate-url-refs.ts` /
5
+ * `populate-ref-tables/populate-blob-refs.ts`): a `data:` URI whose
6
+ * length exceeds {@link DATA_URI_URL_REFS_LIMIT} lands in `blob_refs`;
7
+ * anything else (regular URL or short data URI) lands in `url_refs`.
8
+ * Shared by every entity populate that partitions a URL-shaped column
9
+ * into the two dictionaries (`populate-image-items.ts`,
10
+ * `populate-resource-items.ts`).
11
+ * @param value - Raw URL-shaped column value.
12
+ * @returns `true` when the value belongs in `blob_refs`.
13
+ * @example
14
+ * isBlobRefValue('data:image/png;base64,' + 'x'.repeat(600)); // true
15
+ * isBlobRefValue('https://example.com/a.png'); // false
16
+ */
17
+ export function isBlobRefValue(value) {
18
+ return value.startsWith('data:') && value.length > DATA_URI_URL_REFS_LIMIT;
19
+ }
@@ -0,0 +1,66 @@
1
+ import type { DomPathCandidate, DomPathResult } from './types.js';
2
+ /**
3
+ * One image record projected onto the fields the matcher needs:
4
+ * `id` (used to build the returned Map) and `sourceCode` (the outerHTML
5
+ * string to match against document candidates). `id` may be a real
6
+ * `images.id` (migration) or a synthetic per-page index (crawler write
7
+ * path) — the matcher only requires ids to be unique within one call and
8
+ * ordered in crawler insertion order.
9
+ */
10
+ interface ImageRowForMatching {
11
+ /** Unique-within-call id, in crawler insertion order. */
12
+ id: number;
13
+ /**
14
+ * The `<img>` element's `outerHTML` as captured by the crawler.
15
+ * `null` when the crawler failed to capture the source (a null blob
16
+ * or a puppeteer serialisation edge case).
17
+ */
18
+ sourceCode: string | null;
19
+ }
20
+ /**
21
+ * Matches image records to their DOM-path strings using a 3-case
22
+ * algorithm (issue #193).
23
+ *
24
+ * The three cases:
25
+ *
26
+ * 1. **Single match** — `image.sourceCode` matches exactly one `<img>`
27
+ * outerHTML in the document. Assign that candidate's `dom_path`.
28
+ * 2. **Ordinal match** — multiple `<img>` elements share the same
29
+ * outerHTML (identical `src` / `alt` / attributes on the same page).
30
+ * Assign paths in `id` order, matching the crawler's insertion order
31
+ * which is expected to correspond to DOM order.
32
+ * 3. **Unknown** — `sourceCode` is null OR no matching `<img>` exists
33
+ * in the document (crawler-side rewriting drift). Fall back to the
34
+ * synthetic `unknown/<id>` marker so the `dom_path_text_id NOT NULL`
35
+ * constraint is still satisfied.
36
+ *
37
+ * The function is pure — no DB, no DOM. Callers produce the candidate
38
+ * list from whatever DOM they have: jsdom over an archived HTML snapshot
39
+ * (migration script) or an in-browser walk over the live page (crawler
40
+ * write path). See {@link ./types.ts}'s `DomPathCandidate`.
41
+ *
42
+ * `candidatesInDocumentOrder` MUST already be in document order — the
43
+ * matcher does not sort. `document.querySelectorAll('img')` satisfies
44
+ * this contract; ordering is the caller's responsibility.
45
+ *
46
+ * `images` MUST already be sorted by `id` ascending for the ordinal-
47
+ * match case to reproduce the crawler's insertion order deterministically.
48
+ * A minor deviation from this ordering only affects the ordinal-match
49
+ * branch — single-match and unknown branches are order-independent.
50
+ * @param images - The page's image records in `id` order.
51
+ * @param candidatesInDocumentOrder - `<img>` outerHTML + dom_path pairs
52
+ * from the document, in document order.
53
+ * @returns Map keyed by `images[].id`; every input row gets one entry.
54
+ * @example
55
+ * const jsdom = new JSDOM(html);
56
+ * const candidates = [...jsdom.window.document.querySelectorAll('img')].map(
57
+ * (img) => ({ outerHTML: img.outerHTML, path: deriveDomPath(img) }),
58
+ * );
59
+ * const result = matchImagesToDomPaths(
60
+ * [{ id: 1, sourceCode: '<img src="a.png">' }],
61
+ * candidates,
62
+ * );
63
+ * result.get(1); // { path: 'html/body[1]/img[1]', case: 'single-match' }
64
+ */
65
+ export declare function matchImagesToDomPaths(images: readonly ImageRowForMatching[], candidatesInDocumentOrder: readonly DomPathCandidate[]): ReadonlyMap<number, DomPathResult>;
66
+ export {};
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Matches image records to their DOM-path strings using a 3-case
3
+ * algorithm (issue #193).
4
+ *
5
+ * The three cases:
6
+ *
7
+ * 1. **Single match** — `image.sourceCode` matches exactly one `<img>`
8
+ * outerHTML in the document. Assign that candidate's `dom_path`.
9
+ * 2. **Ordinal match** — multiple `<img>` elements share the same
10
+ * outerHTML (identical `src` / `alt` / attributes on the same page).
11
+ * Assign paths in `id` order, matching the crawler's insertion order
12
+ * which is expected to correspond to DOM order.
13
+ * 3. **Unknown** — `sourceCode` is null OR no matching `<img>` exists
14
+ * in the document (crawler-side rewriting drift). Fall back to the
15
+ * synthetic `unknown/<id>` marker so the `dom_path_text_id NOT NULL`
16
+ * constraint is still satisfied.
17
+ *
18
+ * The function is pure — no DB, no DOM. Callers produce the candidate
19
+ * list from whatever DOM they have: jsdom over an archived HTML snapshot
20
+ * (migration script) or an in-browser walk over the live page (crawler
21
+ * write path). See {@link ./types.ts}'s `DomPathCandidate`.
22
+ *
23
+ * `candidatesInDocumentOrder` MUST already be in document order — the
24
+ * matcher does not sort. `document.querySelectorAll('img')` satisfies
25
+ * this contract; ordering is the caller's responsibility.
26
+ *
27
+ * `images` MUST already be sorted by `id` ascending for the ordinal-
28
+ * match case to reproduce the crawler's insertion order deterministically.
29
+ * A minor deviation from this ordering only affects the ordinal-match
30
+ * branch — single-match and unknown branches are order-independent.
31
+ * @param images - The page's image records in `id` order.
32
+ * @param candidatesInDocumentOrder - `<img>` outerHTML + dom_path pairs
33
+ * from the document, in document order.
34
+ * @returns Map keyed by `images[].id`; every input row gets one entry.
35
+ * @example
36
+ * const jsdom = new JSDOM(html);
37
+ * const candidates = [...jsdom.window.document.querySelectorAll('img')].map(
38
+ * (img) => ({ outerHTML: img.outerHTML, path: deriveDomPath(img) }),
39
+ * );
40
+ * const result = matchImagesToDomPaths(
41
+ * [{ id: 1, sourceCode: '<img src="a.png">' }],
42
+ * candidates,
43
+ * );
44
+ * result.get(1); // { path: 'html/body[1]/img[1]', case: 'single-match' }
45
+ */
46
+ export function matchImagesToDomPaths(images, candidatesInDocumentOrder) {
47
+ const byOuterHtml = new Map();
48
+ for (const candidate of candidatesInDocumentOrder) {
49
+ const bucket = byOuterHtml.get(candidate.outerHTML);
50
+ if (bucket === undefined) {
51
+ byOuterHtml.set(candidate.outerHTML, [candidate]);
52
+ }
53
+ else {
54
+ bucket.push(candidate);
55
+ }
56
+ }
57
+ const cursorByOuterHtml = new Map();
58
+ const result = new Map();
59
+ for (const image of images) {
60
+ if (image.sourceCode === null || image.sourceCode === '') {
61
+ result.set(image.id, { path: `unknown/${image.id}`, case: 'unknown' });
62
+ continue;
63
+ }
64
+ const candidates = byOuterHtml.get(image.sourceCode);
65
+ if (candidates === undefined || candidates.length === 0) {
66
+ result.set(image.id, { path: `unknown/${image.id}`, case: 'unknown' });
67
+ continue;
68
+ }
69
+ if (candidates.length === 1) {
70
+ result.set(image.id, {
71
+ path: candidates[0].path,
72
+ case: 'single-match',
73
+ });
74
+ continue;
75
+ }
76
+ const cursor = cursorByOuterHtml.get(image.sourceCode) ?? 0;
77
+ cursorByOuterHtml.set(image.sourceCode, cursor + 1);
78
+ const chosen = candidates[cursor];
79
+ if (chosen === undefined) {
80
+ // More image records share this outerHTML than the document
81
+ // has matching `<img>` elements. Reusing the last candidate
82
+ // (`candidates.at(-1)`) would silently map every overflow row
83
+ // to the same element, producing multiple `image_items` rows
84
+ // with the same `dom_path_text_id`. Falling back to
85
+ // `unknown/<id>` keeps overflow rows individually
86
+ // distinguishable in the archive.
87
+ result.set(image.id, { path: `unknown/${image.id}`, case: 'unknown' });
88
+ continue;
89
+ }
90
+ result.set(image.id, {
91
+ path: chosen.path,
92
+ case: 'ordinal-match',
93
+ });
94
+ }
95
+ return result;
96
+ }
@@ -0,0 +1,33 @@
1
+ import type { ProgressCallback } from '../create-progress-reporter.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Populates `anchor_edges` from `anchors` (issue #193).
5
+ *
6
+ * The algorithm is a **single keyset-paginated scan** over `anchors`
7
+ * ordered by `(pageId, hrefId, id)`. Each chunk feeds
8
+ * {@link ./collapse-anchor-rows.ts}, which yields one edge per distinct
9
+ * `(pageId, hrefId)` pair as soon as the pair boundary is observed.
10
+ *
11
+ * A boundary can straddle two chunks (the last row of chunk N shares a
12
+ * pair with the first row of chunk N+1), so the outer loop keeps an
13
+ * "open edge" state that flushes only when the *next* pair actually
14
+ * starts. On end-of-stream the last open edge is emitted.
15
+ *
16
+ * `first_text_id` is left unresolved during the streaming pass — the
17
+ * text is buffered on each pending edge and resolved in bulk by
18
+ * {@link ./resolve-text-refs.ts} at INSERT time. Every INSERT batch
19
+ * therefore issues one text-refs lookup + one INSERT, keeping DB
20
+ * round-trips per edge low.
21
+ *
22
+ * `INSERT OR IGNORE` on the `(page_id, href_page_id)` UNIQUE composite
23
+ * makes the step idempotent: a re-run after partial failure re-emits the
24
+ * same edges but the writes no-op.
25
+ * @param trx - Knex instance or transaction connected to the archive DB.
26
+ * @param onProgress - Optional sink for periodic progress lines (one per
27
+ * ~5% of `anchors` scanned); see {@link ../create-progress-reporter.ts}.
28
+ * @example
29
+ * await knex.transaction(async (trx) => {
30
+ * await populateAnchorEdges(trx);
31
+ * });
32
+ */
33
+ export declare function populateAnchorEdges(trx: Knex, onProgress?: ProgressCallback): Promise<void>;