@nitpicker/archive 0.0.0 → 0.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (739) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +106 -0
  3. package/lib/apply-connection-pragmas.d.ts +18 -0
  4. package/lib/apply-connection-pragmas.js +40 -0
  5. package/lib/archive-accessor.d.ts +265 -0
  6. package/lib/archive-accessor.js +477 -0
  7. package/lib/archive-lock.d.ts +45 -0
  8. package/lib/archive-lock.js +154 -0
  9. package/lib/archive.d.ts +736 -0
  10. package/lib/archive.js +1055 -0
  11. package/lib/body-hash/compute-body-hash.d.ts +32 -0
  12. package/lib/body-hash/compute-body-hash.js +35 -0
  13. package/lib/cache/clear-archive-cache-entry.d.ts +18 -0
  14. package/lib/cache/clear-archive-cache-entry.js +24 -0
  15. package/lib/cache/clear-archive-cache-root.d.ts +26 -0
  16. package/lib/cache/clear-archive-cache-root.js +32 -0
  17. package/lib/cache/compute-archive-cache-key.d.ts +39 -0
  18. package/lib/cache/compute-archive-cache-key.js +95 -0
  19. package/lib/cache/extract-archive-to-cache.d.ts +57 -0
  20. package/lib/cache/extract-archive-to-cache.js +326 -0
  21. package/lib/cache/get-archive-cache-root.d.ts +20 -0
  22. package/lib/cache/get-archive-cache-root.js +53 -0
  23. package/lib/cache/is-archive-cache-disabled.d.ts +24 -0
  24. package/lib/cache/is-archive-cache-disabled.js +34 -0
  25. package/lib/cache/list-archive-cache-entries.d.ts +23 -0
  26. package/lib/cache/list-archive-cache-entries.js +130 -0
  27. package/lib/cache/path-exists.d.ts +9 -0
  28. package/lib/cache/path-exists.js +18 -0
  29. package/lib/cache/resolve-archive-cache-dir.d.ts +26 -0
  30. package/lib/cache/resolve-archive-cache-dir.js +32 -0
  31. package/lib/cache/types.d.ts +33 -0
  32. package/lib/cache/types.js +1 -0
  33. package/lib/content-type/is-html-content-type.d.ts +17 -0
  34. package/lib/content-type/is-html-content-type.js +19 -0
  35. package/lib/content-type/normalize-content-type.d.ts +14 -0
  36. package/lib/content-type/normalize-content-type.js +20 -0
  37. package/lib/create-adjunct-tables.d.ts +66 -0
  38. package/lib/create-adjunct-tables.js +510 -0
  39. package/lib/create-entity-tables.d.ts +191 -0
  40. package/lib/create-entity-tables.js +387 -0
  41. package/lib/create-progress-reporter.d.ts +30 -0
  42. package/lib/create-progress-reporter.js +38 -0
  43. package/lib/create-ref-tables.d.ts +35 -0
  44. package/lib/create-ref-tables.js +185 -0
  45. package/lib/create-template-tables.d.ts +28 -0
  46. package/lib/create-template-tables.js +92 -0
  47. package/lib/database.d.ts +549 -0
  48. package/lib/database.js +803 -0
  49. package/lib/db-ops/_shared/clear-write-ref-caches.d.ts +27 -0
  50. package/lib/db-ops/_shared/clear-write-ref-caches.js +35 -0
  51. package/lib/db-ops/_shared/compress-payload.d.ts +26 -0
  52. package/lib/db-ops/_shared/compress-payload.js +30 -0
  53. package/lib/db-ops/_shared/create-write-ref-caches.d.ts +17 -0
  54. package/lib/db-ops/_shared/create-write-ref-caches.js +27 -0
  55. package/lib/db-ops/_shared/decode-json-ref.d.ts +17 -0
  56. package/lib/db-ops/_shared/decode-json-ref.js +31 -0
  57. package/lib/db-ops/_shared/keyset-paginate-by-id.d.ts +49 -0
  58. package/lib/db-ops/_shared/keyset-paginate-by-id.js +69 -0
  59. package/lib/db-ops/_shared/load-response-headers-by-set-ids.d.ts +20 -0
  60. package/lib/db-ops/_shared/load-response-headers-by-set-ids.js +53 -0
  61. package/lib/db-ops/_shared/resolve-content-item-id.d.ts +62 -0
  62. package/lib/db-ops/_shared/resolve-content-item-id.js +143 -0
  63. package/lib/db-ops/_shared/resolve-url-or-blob.d.ts +23 -0
  64. package/lib/db-ops/_shared/resolve-url-or-blob.js +29 -0
  65. package/lib/db-ops/_shared/retry-setting.d.ts +16 -0
  66. package/lib/db-ops/_shared/retry-setting.js +18 -0
  67. package/lib/db-ops/_shared/safe-parse-json.d.ts +11 -0
  68. package/lib/db-ops/_shared/safe-parse-json.js +18 -0
  69. package/lib/db-ops/_shared/types.d.ts +94 -0
  70. package/lib/db-ops/_shared/types.js +1 -0
  71. package/lib/db-ops/_shared/upsert-blob-ref.d.ts +25 -0
  72. package/lib/db-ops/_shared/upsert-blob-ref.js +48 -0
  73. package/lib/db-ops/_shared/upsert-content-type-ref.d.ts +30 -0
  74. package/lib/db-ops/_shared/upsert-content-type-ref.js +45 -0
  75. package/lib/db-ops/_shared/upsert-json-ref.d.ts +22 -0
  76. package/lib/db-ops/_shared/upsert-json-ref.js +41 -0
  77. package/lib/db-ops/_shared/upsert-response-headers.d.ts +35 -0
  78. package/lib/db-ops/_shared/upsert-response-headers.js +49 -0
  79. package/lib/db-ops/_shared/upsert-url-ref.d.ts +39 -0
  80. package/lib/db-ops/_shared/upsert-url-ref.js +62 -0
  81. package/lib/db-ops/anchors/get-anchors-on-page.d.ts +10 -0
  82. package/lib/db-ops/anchors/get-anchors-on-page.js +21 -0
  83. package/lib/db-ops/config/get-base-url.d.ts +8 -0
  84. package/lib/db-ops/config/get-base-url.js +14 -0
  85. package/lib/db-ops/config/get-config.d.ts +10 -0
  86. package/lib/db-ops/config/get-config.js +29 -0
  87. package/lib/db-ops/config/get-created-cwd.d.ts +11 -0
  88. package/lib/db-ops/config/get-created-cwd.js +13 -0
  89. package/lib/db-ops/config/get-name.d.ts +8 -0
  90. package/lib/db-ops/config/get-name.js +14 -0
  91. package/lib/db-ops/config/info-column-allowlist.d.ts +7 -0
  92. package/lib/db-ops/config/info-column-allowlist.js +29 -0
  93. package/lib/db-ops/config/info-json-columns.d.ts +5 -0
  94. package/lib/db-ops/config/info-json-columns.js +11 -0
  95. package/lib/db-ops/config/set-config.d.ts +12 -0
  96. package/lib/db-ops/config/set-config.js +21 -0
  97. package/lib/db-ops/config/update-config.d.ts +17 -0
  98. package/lib/db-ops/config/update-config.js +36 -0
  99. package/lib/db-ops/console-logs/compute-console-log-hash.d.ts +19 -0
  100. package/lib/db-ops/console-logs/compute-console-log-hash.js +30 -0
  101. package/lib/db-ops/console-logs/replace-console-logs.d.ts +34 -0
  102. package/lib/db-ops/console-logs/replace-console-logs.js +123 -0
  103. package/lib/db-ops/console-logs/stringify-console-log-args.d.ts +16 -0
  104. package/lib/db-ops/console-logs/stringify-console-log-args.js +26 -0
  105. package/lib/db-ops/console-logs/types.d.ts +38 -0
  106. package/lib/db-ops/console-logs/types.js +1 -0
  107. package/lib/db-ops/console-logs/upsert-console-log-item.d.ts +29 -0
  108. package/lib/db-ops/console-logs/upsert-console-log-item.js +52 -0
  109. package/lib/db-ops/dedupe-cap/accumulate-dedupe-cap-rejected-count.d.ts +18 -0
  110. package/lib/db-ops/dedupe-cap/accumulate-dedupe-cap-rejected-count.js +23 -0
  111. package/lib/db-ops/dedupe-cap/finalize-dedupe-cap-event.d.ts +12 -0
  112. package/lib/db-ops/dedupe-cap/finalize-dedupe-cap-event.js +15 -0
  113. package/lib/db-ops/dedupe-cap/insert-dedupe-cap-event.d.ts +14 -0
  114. package/lib/db-ops/dedupe-cap/insert-dedupe-cap-event.js +30 -0
  115. package/lib/db-ops/dedupe-cap/list-dedupe-cap-observations.d.ts +57 -0
  116. package/lib/db-ops/dedupe-cap/list-dedupe-cap-observations.js +87 -0
  117. package/lib/db-ops/dedupe-cap/list-dedupe-cap-shape-keys.d.ts +21 -0
  118. package/lib/db-ops/dedupe-cap/list-dedupe-cap-shape-keys.js +27 -0
  119. package/lib/db-ops/errors/insert-crawl-error.d.ts +15 -0
  120. package/lib/db-ops/errors/insert-crawl-error.js +21 -0
  121. package/lib/db-ops/errors/insert-page-error.d.ts +21 -0
  122. package/lib/db-ops/errors/insert-page-error.js +30 -0
  123. package/lib/db-ops/errors/list-dns-burned-host-candidates.d.ts +33 -0
  124. package/lib/db-ops/errors/list-dns-burned-host-candidates.js +158 -0
  125. package/lib/db-ops/html/read-page-html-blob.d.ts +17 -0
  126. package/lib/db-ops/html/read-page-html-blob.js +20 -0
  127. package/lib/db-ops/lifecycle/checkpoint.d.ts +8 -0
  128. package/lib/db-ops/lifecycle/checkpoint.js +9 -0
  129. package/lib/db-ops/lifecycle/destroy.d.ts +6 -0
  130. package/lib/db-ops/lifecycle/destroy.js +7 -0
  131. package/lib/db-ops/lifecycle/init.d.ts +58 -0
  132. package/lib/db-ops/lifecycle/init.js +122 -0
  133. package/lib/db-ops/list-reconcile/record-list-reconcile-run.d.ts +22 -0
  134. package/lib/db-ops/list-reconcile/record-list-reconcile-run.js +41 -0
  135. package/lib/db-ops/meta/get-audios-of-page.d.ts +11 -0
  136. package/lib/db-ops/meta/get-audios-of-page.js +15 -0
  137. package/lib/db-ops/meta/get-buttons-of-page.d.ts +11 -0
  138. package/lib/db-ops/meta/get-buttons-of-page.js +15 -0
  139. package/lib/db-ops/meta/get-canvases-of-page.d.ts +11 -0
  140. package/lib/db-ops/meta/get-canvases-of-page.js +15 -0
  141. package/lib/db-ops/meta/get-custom-elements-of-page.d.ts +11 -0
  142. package/lib/db-ops/meta/get-custom-elements-of-page.js +15 -0
  143. package/lib/db-ops/meta/get-headings-of-page.d.ts +11 -0
  144. package/lib/db-ops/meta/get-headings-of-page.js +15 -0
  145. package/lib/db-ops/meta/get-iframes-of-page.d.ts +11 -0
  146. package/lib/db-ops/meta/get-iframes-of-page.js +15 -0
  147. package/lib/db-ops/meta/get-jsonld-of-page.d.ts +13 -0
  148. package/lib/db-ops/meta/get-jsonld-of-page.js +27 -0
  149. package/lib/db-ops/meta/get-main-content-images-of-page.d.ts +11 -0
  150. package/lib/db-ops/meta/get-main-content-images-of-page.js +15 -0
  151. package/lib/db-ops/meta/get-main-content-tables-of-page.d.ts +11 -0
  152. package/lib/db-ops/meta/get-main-content-tables-of-page.js +15 -0
  153. package/lib/db-ops/meta/get-page-technologies-of-page.d.ts +11 -0
  154. package/lib/db-ops/meta/get-page-technologies-of-page.js +15 -0
  155. package/lib/db-ops/meta/get-technology-signals-of-page.d.ts +11 -0
  156. package/lib/db-ops/meta/get-technology-signals-of-page.js +15 -0
  157. package/lib/db-ops/meta/get-videos-of-page.d.ts +11 -0
  158. package/lib/db-ops/meta/get-videos-of-page.js +15 -0
  159. package/lib/db-ops/outages/close-network-outage.d.ts +12 -0
  160. package/lib/db-ops/outages/close-network-outage.js +15 -0
  161. package/lib/db-ops/outages/close-stale-open-network-outages.d.ts +26 -0
  162. package/lib/db-ops/outages/close-stale-open-network-outages.js +42 -0
  163. package/lib/db-ops/outages/compute-outage-clamp-timestamp.d.ts +26 -0
  164. package/lib/db-ops/outages/compute-outage-clamp-timestamp.js +31 -0
  165. package/lib/db-ops/outages/insert-network-outage.d.ts +14 -0
  166. package/lib/db-ops/outages/insert-network-outage.js +29 -0
  167. package/lib/db-ops/outages/list-network-outages.d.ts +28 -0
  168. package/lib/db-ops/outages/list-network-outages.js +42 -0
  169. package/lib/db-ops/pages/order/set-url-order.d.ts +13 -0
  170. package/lib/db-ops/pages/order/set-url-order.js +38 -0
  171. package/lib/db-ops/pages/read/build-page-query.d.ts +18 -0
  172. package/lib/db-ops/pages/read/build-page-query.js +40 -0
  173. package/lib/db-ops/pages/read/get-crawling-state.d.ts +117 -0
  174. package/lib/db-ops/pages/read/get-crawling-state.js +161 -0
  175. package/lib/db-ops/pages/read/get-existing-page-urls.d.ts +15 -0
  176. package/lib/db-ops/pages/read/get-existing-page-urls.js +30 -0
  177. package/lib/db-ops/pages/read/get-page-count.d.ts +12 -0
  178. package/lib/db-ops/pages/read/get-page-count.js +21 -0
  179. package/lib/db-ops/pages/read/get-page-source-by-url.d.ts +24 -0
  180. package/lib/db-ops/pages/read/get-page-source-by-url.js +28 -0
  181. package/lib/db-ops/pages/read/get-pages-with-rels.d.ts +38 -0
  182. package/lib/db-ops/pages/read/get-pages-with-rels.js +107 -0
  183. package/lib/db-ops/pages/read/get-pages.d.ts +11 -0
  184. package/lib/db-ops/pages/read/get-pages.js +51 -0
  185. package/lib/db-ops/pages/read/get-scraped-html-page-count.d.ts +18 -0
  186. package/lib/db-ops/pages/read/get-scraped-html-page-count.js +25 -0
  187. package/lib/db-ops/pages/read/reconstruct-page-rows.d.ts +31 -0
  188. package/lib/db-ops/pages/read/reconstruct-page-rows.js +32 -0
  189. package/lib/db-ops/pages/reset/clear-page-derived-rows.d.ts +20 -0
  190. package/lib/db-ops/pages/reset/clear-page-derived-rows.js +37 -0
  191. package/lib/db-ops/pages/reset/repromote-external-pages.d.ts +30 -0
  192. package/lib/db-ops/pages/reset/repromote-external-pages.js +91 -0
  193. package/lib/db-ops/pages/reset/reset-failed-pages.d.ts +88 -0
  194. package/lib/db-ops/pages/reset/reset-failed-pages.js +216 -0
  195. package/lib/db-ops/pages/reset/reset-pages-by-urls.d.ts +80 -0
  196. package/lib/db-ops/pages/reset/reset-pages-by-urls.js +151 -0
  197. package/lib/db-ops/pages/reset/retryable-image-scan-codes.d.ts +24 -0
  198. package/lib/db-ops/pages/reset/retryable-image-scan-codes.js +24 -0
  199. package/lib/db-ops/pages/write/insert-audios.d.ts +14 -0
  200. package/lib/db-ops/pages/write/insert-audios.js +25 -0
  201. package/lib/db-ops/pages/write/insert-buttons.d.ts +14 -0
  202. package/lib/db-ops/pages/write/insert-buttons.js +29 -0
  203. package/lib/db-ops/pages/write/insert-canvases.d.ts +14 -0
  204. package/lib/db-ops/pages/write/insert-canvases.js +26 -0
  205. package/lib/db-ops/pages/write/insert-custom-elements.d.ts +27 -0
  206. package/lib/db-ops/pages/write/insert-custom-elements.js +40 -0
  207. package/lib/db-ops/pages/write/insert-headings.d.ts +15 -0
  208. package/lib/db-ops/pages/write/insert-headings.js +27 -0
  209. package/lib/db-ops/pages/write/insert-iframes.d.ts +14 -0
  210. package/lib/db-ops/pages/write/insert-iframes.js +28 -0
  211. package/lib/db-ops/pages/write/insert-inventory-content-items.d.ts +38 -0
  212. package/lib/db-ops/pages/write/insert-inventory-content-items.js +60 -0
  213. package/lib/db-ops/pages/write/insert-inventory-seeds.d.ts +36 -0
  214. package/lib/db-ops/pages/write/insert-inventory-seeds.js +48 -0
  215. package/lib/db-ops/pages/write/insert-inventory-skipped-pages.d.ts +42 -0
  216. package/lib/db-ops/pages/write/insert-inventory-skipped-pages.js +56 -0
  217. package/lib/db-ops/pages/write/insert-jsonld.d.ts +17 -0
  218. package/lib/db-ops/pages/write/insert-jsonld.js +49 -0
  219. package/lib/db-ops/pages/write/insert-main-content-images.d.ts +20 -0
  220. package/lib/db-ops/pages/write/insert-main-content-images.js +32 -0
  221. package/lib/db-ops/pages/write/insert-main-content-tables.d.ts +14 -0
  222. package/lib/db-ops/pages/write/insert-main-content-tables.js +29 -0
  223. package/lib/db-ops/pages/write/insert-page.d.ts +56 -0
  224. package/lib/db-ops/pages/write/insert-page.js +259 -0
  225. package/lib/db-ops/pages/write/insert-technologies.d.ts +25 -0
  226. package/lib/db-ops/pages/write/insert-technologies.js +45 -0
  227. package/lib/db-ops/pages/write/insert-videos.d.ts +14 -0
  228. package/lib/db-ops/pages/write/insert-videos.js +28 -0
  229. package/lib/db-ops/pages/write/link-redirect-sources.d.ts +42 -0
  230. package/lib/db-ops/pages/write/link-redirect-sources.js +101 -0
  231. package/lib/db-ops/pages/write/record-redirect.d.ts +35 -0
  232. package/lib/db-ops/pages/write/record-redirect.js +100 -0
  233. package/lib/db-ops/pages/write/set-skipped-page.d.ts +13 -0
  234. package/lib/db-ops/pages/write/set-skipped-page.js +24 -0
  235. package/lib/db-ops/pages/write/update-page.d.ts +40 -0
  236. package/lib/db-ops/pages/write/update-page.js +419 -0
  237. package/lib/db-ops/pages/write/write-page-html-blob.d.ts +19 -0
  238. package/lib/db-ops/pages/write/write-page-html-blob.js +41 -0
  239. package/lib/db-ops/referrers/get-redirects-for-pages.d.ts +9 -0
  240. package/lib/db-ops/referrers/get-redirects-for-pages.js +15 -0
  241. package/lib/db-ops/referrers/get-referrers-of-page.d.ts +17 -0
  242. package/lib/db-ops/referrers/get-referrers-of-page.js +32 -0
  243. package/lib/db-ops/referrers/get-referrers-of-resource.d.ts +8 -0
  244. package/lib/db-ops/referrers/get-referrers-of-resource.js +15 -0
  245. package/lib/db-ops/resources/build-resource-query.d.ts +25 -0
  246. package/lib/db-ops/resources/build-resource-query.js +29 -0
  247. package/lib/db-ops/resources/get-existing-resource-urls.d.ts +9 -0
  248. package/lib/db-ops/resources/get-existing-resource-urls.js +24 -0
  249. package/lib/db-ops/resources/get-resource-by-url.d.ts +13 -0
  250. package/lib/db-ops/resources/get-resource-by-url.js +22 -0
  251. package/lib/db-ops/resources/get-resource-url-list.d.ts +17 -0
  252. package/lib/db-ops/resources/get-resource-url-list.js +26 -0
  253. package/lib/db-ops/resources/get-resources.d.ts +8 -0
  254. package/lib/db-ops/resources/get-resources.js +11 -0
  255. package/lib/db-ops/resources/insert-inventory-resources.d.ts +24 -0
  256. package/lib/db-ops/resources/insert-inventory-resources.js +64 -0
  257. package/lib/db-ops/resources/insert-resource-referrers.d.ts +15 -0
  258. package/lib/db-ops/resources/insert-resource-referrers.js +54 -0
  259. package/lib/db-ops/resources/insert-resource.d.ts +34 -0
  260. package/lib/db-ops/resources/insert-resource.js +73 -0
  261. package/lib/db-ops/resources/reconstruct-resource-rows.d.ts +26 -0
  262. package/lib/db-ops/resources/reconstruct-resource-rows.js +30 -0
  263. package/lib/db-ops/templates/assign-template-labels.d.ts +60 -0
  264. package/lib/db-ops/templates/assign-template-labels.js +187 -0
  265. package/lib/db-ops/templates/replace-page-templates.d.ts +44 -0
  266. package/lib/db-ops/templates/replace-page-templates.js +174 -0
  267. package/lib/db-ops/templates/serialize-template-cluster-reason.d.ts +16 -0
  268. package/lib/db-ops/templates/serialize-template-cluster-reason.js +17 -0
  269. package/lib/db-ops/templates/types.d.ts +103 -0
  270. package/lib/db-ops/templates/types.js +1 -0
  271. package/lib/debug.d.ts +8 -0
  272. package/lib/debug.js +9 -0
  273. package/lib/decode-html-blob.d.ts +20 -0
  274. package/lib/decode-html-blob.js +23 -0
  275. package/lib/decode-page-html-blob-bytes.d.ts +25 -0
  276. package/lib/decode-page-html-blob-bytes.js +29 -0
  277. package/lib/decode-stored-blob-bytes.d.ts +25 -0
  278. package/lib/decode-stored-blob-bytes.js +47 -0
  279. package/lib/derive-lineage-from-parent.d.ts +37 -0
  280. package/lib/derive-lineage-from-parent.js +42 -0
  281. package/lib/drop-legacy-tables.d.ts +45 -0
  282. package/lib/drop-legacy-tables.js +56 -0
  283. package/lib/error-kind/classify-error-kind.d.ts +20 -0
  284. package/lib/error-kind/classify-error-kind.js +136 -0
  285. package/lib/error-kind/network-related-error-kinds.d.ts +23 -0
  286. package/lib/error-kind/network-related-error-kinds.js +28 -0
  287. package/lib/error-kind/permanent-error-kinds.d.ts +48 -0
  288. package/lib/error-kind/permanent-error-kinds.js +54 -0
  289. package/lib/error-kind/types.d.ts +54 -0
  290. package/lib/error-kind/types.js +1 -0
  291. package/lib/filesystem/append-text.d.ts +9 -0
  292. package/lib/filesystem/append-text.js +14 -0
  293. package/lib/filesystem/copy-dir-sync.d.ts +6 -0
  294. package/lib/filesystem/copy-dir-sync.js +9 -0
  295. package/lib/filesystem/copy-dir.d.ts +7 -0
  296. package/lib/filesystem/copy-dir.js +13 -0
  297. package/lib/filesystem/copy-file-with-progress.d.ts +20 -0
  298. package/lib/filesystem/copy-file-with-progress.js +34 -0
  299. package/lib/filesystem/exists.d.ts +6 -0
  300. package/lib/filesystem/exists.js +9 -0
  301. package/lib/filesystem/get-file-list.d.ts +8 -0
  302. package/lib/filesystem/get-file-list.js +12 -0
  303. package/lib/filesystem/is-dir.d.ts +6 -0
  304. package/lib/filesystem/is-dir.js +10 -0
  305. package/lib/filesystem/mkdir.d.ts +8 -0
  306. package/lib/filesystem/mkdir.js +15 -0
  307. package/lib/filesystem/output-binary.d.ts +12 -0
  308. package/lib/filesystem/output-binary.js +17 -0
  309. package/lib/filesystem/output-json.d.ts +9 -0
  310. package/lib/filesystem/output-json.js +14 -0
  311. package/lib/filesystem/output-text.d.ts +11 -0
  312. package/lib/filesystem/output-text.js +32 -0
  313. package/lib/filesystem/parse-pax-path.d.ts +18 -0
  314. package/lib/filesystem/parse-pax-path.js +45 -0
  315. package/lib/filesystem/parse-tar-size-field.d.ts +13 -0
  316. package/lib/filesystem/parse-tar-size-field.js +37 -0
  317. package/lib/filesystem/peek-tar-top-dir.d.ts +35 -0
  318. package/lib/filesystem/peek-tar-top-dir.js +215 -0
  319. package/lib/filesystem/read-json.d.ts +7 -0
  320. package/lib/filesystem/read-json.js +11 -0
  321. package/lib/filesystem/read-text.d.ts +6 -0
  322. package/lib/filesystem/read-text.js +10 -0
  323. package/lib/filesystem/readline.d.ts +11 -0
  324. package/lib/filesystem/readline.js +26 -0
  325. package/lib/filesystem/remove.d.ts +5 -0
  326. package/lib/filesystem/remove.js +10 -0
  327. package/lib/filesystem/rename.d.ts +16 -0
  328. package/lib/filesystem/rename.js +48 -0
  329. package/lib/filesystem/tar.d.ts +23 -0
  330. package/lib/filesystem/tar.js +78 -0
  331. package/lib/filesystem/untar.d.ts +33 -0
  332. package/lib/filesystem/untar.js +84 -0
  333. package/lib/get-failed-page-messages.d.ts +56 -0
  334. package/lib/get-failed-page-messages.js +146 -0
  335. package/lib/get-json.d.ts +10 -0
  336. package/lib/get-json.js +25 -0
  337. package/lib/html-snapshot/match-selector-html.d.ts +25 -0
  338. package/lib/html-snapshot/match-selector-html.js +28 -0
  339. package/lib/html-snapshot/match-selector-snapshots.d.ts +33 -0
  340. package/lib/html-snapshot/match-selector-snapshots.js +33 -0
  341. package/lib/html-snapshot/search-html-document.d.ts +29 -0
  342. package/lib/html-snapshot/search-html-document.js +27 -0
  343. package/lib/html-snapshot/search-html-snapshots.d.ts +36 -0
  344. package/lib/html-snapshot/search-html-snapshots.js +35 -0
  345. package/lib/html-snapshot/types.d.ts +111 -0
  346. package/lib/html-snapshot/types.js +7 -0
  347. package/lib/html-snapshot/validate-search-pattern.d.ts +15 -0
  348. package/lib/html-snapshot/validate-search-pattern.js +17 -0
  349. package/lib/init-schema.d.ts +48 -0
  350. package/lib/init-schema.js +124 -0
  351. package/lib/is-inventory-source.d.ts +21 -0
  352. package/lib/is-inventory-source.js +22 -0
  353. package/lib/is-within-outage-window.d.ts +49 -0
  354. package/lib/is-within-outage-window.js +33 -0
  355. package/lib/isolated-cluster/create-isolated-cluster-run.d.ts +24 -0
  356. package/lib/isolated-cluster/create-isolated-cluster-run.js +26 -0
  357. package/lib/libsql-dialect.d.ts +115 -0
  358. package/lib/libsql-dialect.js +116 -0
  359. package/lib/limited-page-ids.d.ts +9 -0
  360. package/lib/limited-page-ids.js +18 -0
  361. package/lib/meta/assert-compatible-version.d.ts +60 -0
  362. package/lib/meta/assert-compatible-version.js +93 -0
  363. package/lib/meta/classify-jsonld-type.d.ts +23 -0
  364. package/lib/meta/classify-jsonld-type.js +43 -0
  365. package/lib/meta/compare-semver.d.ts +23 -0
  366. package/lib/meta/compare-semver.js +51 -0
  367. package/lib/meta/compute-main-contents-denormalized.d.ts +41 -0
  368. package/lib/meta/compute-main-contents-denormalized.js +88 -0
  369. package/lib/meta/compute-page-denormalized.d.ts +20 -0
  370. package/lib/meta/compute-page-denormalized.js +35 -0
  371. package/lib/meta/derive-flat-from-meta.d.ts +34 -0
  372. package/lib/meta/derive-flat-from-meta.js +158 -0
  373. package/lib/meta/derive-meta-extras.d.ts +20 -0
  374. package/lib/meta/derive-meta-extras.js +23 -0
  375. package/lib/meta/extract-tags-for-archive.d.ts +17 -0
  376. package/lib/meta/extract-tags-for-archive.js +36 -0
  377. package/lib/meta/parse-main-content-class-list.d.ts +19 -0
  378. package/lib/meta/parse-main-content-class-list.js +34 -0
  379. package/lib/meta/summarize-jsonld.d.ts +17 -0
  380. package/lib/meta/summarize-jsonld.js +29 -0
  381. package/lib/meta/technologies/combine-technology-confidence.d.ts +46 -0
  382. package/lib/meta/technologies/combine-technology-confidence.js +93 -0
  383. package/lib/meta/technologies/convert-legacy-page-tags-to-inserts.d.ts +45 -0
  384. package/lib/meta/technologies/convert-legacy-page-tags-to-inserts.js +53 -0
  385. package/lib/meta/technologies/convert-tag-row-to-wappalyzer-signal.d.ts +33 -0
  386. package/lib/meta/technologies/convert-tag-row-to-wappalyzer-signal.js +46 -0
  387. package/lib/meta/technologies/extract-technologies-for-archive.d.ts +33 -0
  388. package/lib/meta/technologies/extract-technologies-for-archive.js +30 -0
  389. package/lib/meta/technologies/match-js-license-comment-signal.d.ts +21 -0
  390. package/lib/meta/technologies/match-js-license-comment-signal.js +23 -0
  391. package/lib/meta/technologies/match-structural-technology-signals.d.ts +26 -0
  392. package/lib/meta/technologies/match-structural-technology-signals.js +48 -0
  393. package/lib/meta/technologies/normalize-wappalyzer-entries.d.ts +25 -0
  394. package/lib/meta/technologies/normalize-wappalyzer-entries.js +35 -0
  395. package/lib/meta/technologies/technology-signal-definitions.d.ts +44 -0
  396. package/lib/meta/technologies/technology-signal-definitions.js +60 -0
  397. package/lib/meta/technologies/types.d.ts +70 -0
  398. package/lib/meta/technologies/types.js +13 -0
  399. package/lib/meta/types.d.ts +1490 -0
  400. package/lib/meta/types.js +65 -0
  401. package/lib/migrate-content-items-alias-of-id.d.ts +52 -0
  402. package/lib/migrate-content-items-alias-of-id.js +69 -0
  403. package/lib/migrate-content-items-dedupe-cap-event-id.d.ts +46 -0
  404. package/lib/migrate-content-items-dedupe-cap-event-id.js +62 -0
  405. package/lib/migrate-content-items-is-metadata-only.d.ts +44 -0
  406. package/lib/migrate-content-items-is-metadata-only.js +60 -0
  407. package/lib/migrate-entity-tables.d.ts +55 -0
  408. package/lib/migrate-entity-tables.js +66 -0
  409. package/lib/migrate-info-created-cwd.d.ts +17 -0
  410. package/lib/migrate-info-created-cwd.js +36 -0
  411. package/lib/migrate-info-main-content-selector.d.ts +16 -0
  412. package/lib/migrate-info-main-content-selector.js +35 -0
  413. package/lib/migrate-info-request-header-names.d.ts +16 -0
  414. package/lib/migrate-info-request-header-names.js +35 -0
  415. package/lib/migrate-info-roots.d.ts +20 -0
  416. package/lib/migrate-info-roots.js +52 -0
  417. package/lib/migrate-inventory-runs-to-list-reconcile-runs.d.ts +34 -0
  418. package/lib/migrate-inventory-runs-to-list-reconcile-runs.js +51 -0
  419. package/lib/migrate-list-reconcile-runs-exclude-skipped.d.ts +25 -0
  420. package/lib/migrate-list-reconcile-runs-exclude-skipped.js +44 -0
  421. package/lib/migrate-list-reconcile-runs-invalid-skipped.d.ts +16 -0
  422. package/lib/migrate-list-reconcile-runs-invalid-skipped.js +35 -0
  423. package/lib/migrate-main-contents-columns.d.ts +26 -0
  424. package/lib/migrate-main-contents-columns.js +61 -0
  425. package/lib/migrate-page-meta-body-hash.d.ts +44 -0
  426. package/lib/migrate-page-meta-body-hash.js +63 -0
  427. package/lib/migrate-page-meta-console-error-count.d.ts +27 -0
  428. package/lib/migrate-page-meta-console-error-count.js +45 -0
  429. package/lib/migrate-page-meta-custom-element-count.d.ts +33 -0
  430. package/lib/migrate-page-meta-custom-element-count.js +51 -0
  431. package/lib/migrate-page-meta-image-scan.d.ts +27 -0
  432. package/lib/migrate-page-meta-image-scan.js +52 -0
  433. package/lib/migrate-page-tags-to-page-technologies.d.ts +39 -0
  434. package/lib/migrate-page-tags-to-page-technologies.js +79 -0
  435. package/lib/migrate-ref-tables.d.ts +25 -0
  436. package/lib/migrate-ref-tables.js +38 -0
  437. package/lib/native-executor/check-native-executor-config.d.ts +17 -0
  438. package/lib/native-executor/check-native-executor-config.js +20 -0
  439. package/lib/page-meta-column-maps.d.ts +32 -0
  440. package/lib/page-meta-column-maps.js +43 -0
  441. package/lib/page.d.ts +546 -0
  442. package/lib/page.js +764 -0
  443. package/lib/peek-archive-lock.d.ts +40 -0
  444. package/lib/peek-archive-lock.js +62 -0
  445. package/lib/populate-entity-tables/collapse-anchor-rows.d.ts +41 -0
  446. package/lib/populate-entity-tables/collapse-anchor-rows.js +87 -0
  447. package/lib/populate-entity-tables/derive-dom-path.d.ts +35 -0
  448. package/lib/populate-entity-tables/derive-dom-path.js +72 -0
  449. package/lib/populate-entity-tables/is-blob-ref-value.d.ts +16 -0
  450. package/lib/populate-entity-tables/is-blob-ref-value.js +19 -0
  451. package/lib/populate-entity-tables/match-images-to-dom-paths.d.ts +66 -0
  452. package/lib/populate-entity-tables/match-images-to-dom-paths.js +96 -0
  453. package/lib/populate-entity-tables/populate-anchor-edges.d.ts +33 -0
  454. package/lib/populate-entity-tables/populate-anchor-edges.js +153 -0
  455. package/lib/populate-entity-tables/populate-content-items.d.ts +40 -0
  456. package/lib/populate-entity-tables/populate-content-items.js +141 -0
  457. package/lib/populate-entity-tables/populate-entities.d.ts +81 -0
  458. package/lib/populate-entity-tables/populate-entities.js +110 -0
  459. package/lib/populate-entity-tables/populate-image-items.d.ts +91 -0
  460. package/lib/populate-entity-tables/populate-image-items.js +226 -0
  461. package/lib/populate-entity-tables/populate-page-meta.d.ts +33 -0
  462. package/lib/populate-entity-tables/populate-page-meta.js +267 -0
  463. package/lib/populate-entity-tables/populate-resource-items.d.ts +22 -0
  464. package/lib/populate-entity-tables/populate-resource-items.js +114 -0
  465. package/lib/populate-entity-tables/populate-resource-ref-edges.d.ts +31 -0
  466. package/lib/populate-entity-tables/populate-resource-ref-edges.js +33 -0
  467. package/lib/populate-entity-tables/resolve-blob-refs.d.ts +31 -0
  468. package/lib/populate-entity-tables/resolve-blob-refs.js +100 -0
  469. package/lib/populate-entity-tables/resolve-content-type-refs.d.ts +22 -0
  470. package/lib/populate-entity-tables/resolve-content-type-refs.js +27 -0
  471. package/lib/populate-entity-tables/resolve-header-sets.d.ts +49 -0
  472. package/lib/populate-entity-tables/resolve-header-sets.js +122 -0
  473. package/lib/populate-entity-tables/resolve-json-refs.d.ts +25 -0
  474. package/lib/populate-entity-tables/resolve-json-refs.js +67 -0
  475. package/lib/populate-entity-tables/resolve-text-refs.d.ts +30 -0
  476. package/lib/populate-entity-tables/resolve-text-refs.js +61 -0
  477. package/lib/populate-entity-tables/resolve-url-or-blob-from-maps.d.ts +21 -0
  478. package/lib/populate-entity-tables/resolve-url-or-blob-from-maps.js +27 -0
  479. package/lib/populate-entity-tables/resolve-url-refs.d.ts +33 -0
  480. package/lib/populate-entity-tables/resolve-url-refs.js +60 -0
  481. package/lib/populate-entity-tables/test-utils/count-rows.d.ts +17 -0
  482. package/lib/populate-entity-tables/test-utils/count-rows.js +20 -0
  483. package/lib/populate-entity-tables/test-utils/seed-content-items.d.ts +25 -0
  484. package/lib/populate-entity-tables/test-utils/seed-content-items.js +42 -0
  485. package/lib/populate-entity-tables/test-utils/setup-entities-db.d.ts +30 -0
  486. package/lib/populate-entity-tables/test-utils/setup-entities-db.js +175 -0
  487. package/lib/populate-entity-tables/types.d.ts +157 -0
  488. package/lib/populate-entity-tables/types.js +12 -0
  489. package/lib/populate-entity-tables/upsert-text-refs.d.ts +38 -0
  490. package/lib/populate-entity-tables/upsert-text-refs.js +78 -0
  491. package/lib/populate-ref-tables/classify-content-type.d.ts +16 -0
  492. package/lib/populate-ref-tables/classify-content-type.js +52 -0
  493. package/lib/populate-ref-tables/compute-content-hash.d.ts +22 -0
  494. package/lib/populate-ref-tables/compute-content-hash.js +26 -0
  495. package/lib/populate-ref-tables/compute-header-flags.d.ts +16 -0
  496. package/lib/populate-ref-tables/compute-header-flags.js +70 -0
  497. package/lib/populate-ref-tables/content-type-rules.d.ts +38 -0
  498. package/lib/populate-ref-tables/content-type-rules.js +133 -0
  499. package/lib/populate-ref-tables/create-header-table-caches.d.ts +25 -0
  500. package/lib/populate-ref-tables/create-header-table-caches.js +49 -0
  501. package/lib/populate-ref-tables/data-uri-url-refs-limit.d.ts +15 -0
  502. package/lib/populate-ref-tables/data-uri-url-refs-limit.js +15 -0
  503. package/lib/populate-ref-tables/decode-data-uri.d.ts +21 -0
  504. package/lib/populate-ref-tables/decode-data-uri.js +126 -0
  505. package/lib/populate-ref-tables/decompose-header-set.d.ts +29 -0
  506. package/lib/populate-ref-tables/decompose-header-set.js +157 -0
  507. package/lib/populate-ref-tables/decompose-url.d.ts +25 -0
  508. package/lib/populate-ref-tables/decompose-url.js +70 -0
  509. package/lib/populate-ref-tables/header-stability.d.ts +19 -0
  510. package/lib/populate-ref-tables/header-stability.js +22 -0
  511. package/lib/populate-ref-tables/header-value-cache-key.d.ts +17 -0
  512. package/lib/populate-ref-tables/header-value-cache-key.js +19 -0
  513. package/lib/populate-ref-tables/normalize-mime.d.ts +24 -0
  514. package/lib/populate-ref-tables/normalize-mime.js +36 -0
  515. package/lib/populate-ref-tables/populate-blob-refs.d.ts +38 -0
  516. package/lib/populate-ref-tables/populate-blob-refs.js +134 -0
  517. package/lib/populate-ref-tables/populate-content-type-refs.d.ts +27 -0
  518. package/lib/populate-ref-tables/populate-content-type-refs.js +70 -0
  519. package/lib/populate-ref-tables/populate-header-tables.d.ts +35 -0
  520. package/lib/populate-ref-tables/populate-header-tables.js +80 -0
  521. package/lib/populate-ref-tables/populate-json-refs.d.ts +29 -0
  522. package/lib/populate-ref-tables/populate-json-refs.js +101 -0
  523. package/lib/populate-ref-tables/populate-refs.d.ts +51 -0
  524. package/lib/populate-ref-tables/populate-refs.js +62 -0
  525. package/lib/populate-ref-tables/populate-text-refs.d.ts +32 -0
  526. package/lib/populate-ref-tables/populate-text-refs.js +133 -0
  527. package/lib/populate-ref-tables/populate-url-refs.d.ts +28 -0
  528. package/lib/populate-ref-tables/populate-url-refs.js +148 -0
  529. package/lib/populate-ref-tables/test-utils/count-rows.d.ts +15 -0
  530. package/lib/populate-ref-tables/test-utils/count-rows.js +17 -0
  531. package/lib/populate-ref-tables/types.d.ts +197 -0
  532. package/lib/populate-ref-tables/types.js +7 -0
  533. package/lib/populate-ref-tables/upsert-one-header-set.d.ts +34 -0
  534. package/lib/populate-ref-tables/upsert-one-header-set.js +208 -0
  535. package/lib/populate-ref-tables/volatile-header-names.d.ts +20 -0
  536. package/lib/populate-ref-tables/volatile-header-names.js +33 -0
  537. package/lib/redirect-table.d.ts +9 -0
  538. package/lib/redirect-table.js +28 -0
  539. package/lib/release-finished-statements.d.ts +42 -0
  540. package/lib/release-finished-statements.js +45 -0
  541. package/lib/resolve-redirect-chain.d.ts +33 -0
  542. package/lib/resolve-redirect-chain.js +27 -0
  543. package/lib/resource.d.ts +46 -0
  544. package/lib/resource.js +62 -0
  545. package/lib/retarget-legacy-fk-tables.d.ts +61 -0
  546. package/lib/retarget-legacy-fk-tables.js +137 -0
  547. package/lib/safe-path.d.ts +9 -0
  548. package/lib/safe-path.js +17 -0
  549. package/lib/scope/build-scope-map.d.ts +21 -0
  550. package/lib/scope/build-scope-map.js +32 -0
  551. package/lib/scope/find-scope-entry.d.ts +25 -0
  552. package/lib/scope/find-scope-entry.js +45 -0
  553. package/lib/template-classification/classify-archive-page-templates.d.ts +42 -0
  554. package/lib/template-classification/classify-archive-page-templates.js +70 -0
  555. package/lib/template-classification/classify-page-templates.d.ts +33 -0
  556. package/lib/template-classification/classify-page-templates.js +60 -0
  557. package/lib/template-classification/collect-page-ids-with-html.d.ts +24 -0
  558. package/lib/template-classification/collect-page-ids-with-html.js +30 -0
  559. package/lib/template-classification/collect-page-stylesheet-urls.d.ts +32 -0
  560. package/lib/template-classification/collect-page-stylesheet-urls.js +132 -0
  561. package/lib/template-classification/create-content-root-hint.d.ts +41 -0
  562. package/lib/template-classification/create-content-root-hint.js +51 -0
  563. package/lib/template-classification/create-page-cluster-factory.d.ts +36 -0
  564. package/lib/template-classification/create-page-cluster-factory.js +52 -0
  565. package/lib/template-classification/load-page-cluster-candidates.d.ts +32 -0
  566. package/lib/template-classification/load-page-cluster-candidates.js +93 -0
  567. package/lib/template-classification/page-cluster/resolve-page-cluster-keys.d.ts +34 -0
  568. package/lib/template-classification/page-cluster/resolve-page-cluster-keys.js +236 -0
  569. package/lib/template-classification/page-cluster/types.d.ts +123 -0
  570. package/lib/template-classification/page-cluster/types.js +1 -0
  571. package/lib/template-classification/types.d.ts +234 -0
  572. package/lib/template-classification/types.js +1 -0
  573. package/lib/test-utils/build-full-schema-test-db.d.ts +34 -0
  574. package/lib/test-utils/build-full-schema-test-db.js +74 -0
  575. package/lib/test-utils/compare-strings.d.ts +12 -0
  576. package/lib/test-utils/compare-strings.js +14 -0
  577. package/lib/test-utils/create-legacy-analysis-tables.d.ts +13 -0
  578. package/lib/test-utils/create-legacy-analysis-tables.js +37 -0
  579. package/lib/test-utils/fk-parent-tables.d.ts +15 -0
  580. package/lib/test-utils/fk-parent-tables.js +19 -0
  581. package/lib/test-utils/seed-content-item.d.ts +35 -0
  582. package/lib/test-utils/seed-content-item.js +42 -0
  583. package/lib/test-utils/setup-legacy-fk-db.d.ts +34 -0
  584. package/lib/test-utils/setup-legacy-fk-db.js +271 -0
  585. package/lib/transfer/attach-source-database.d.ts +31 -0
  586. package/lib/transfer/attach-source-database.js +40 -0
  587. package/lib/transfer/build-split-config.d.ts +30 -0
  588. package/lib/transfer/build-split-config.js +42 -0
  589. package/lib/transfer/clear-replaced-page-rows.d.ts +23 -0
  590. package/lib/transfer/clear-replaced-page-rows.js +61 -0
  591. package/lib/transfer/concat-archives.d.ts +55 -0
  592. package/lib/transfer/concat-archives.js +95 -0
  593. package/lib/transfer/concat-source-transfer-phases.d.ts +10 -0
  594. package/lib/transfer/concat-source-transfer-phases.js +17 -0
  595. package/lib/transfer/content-item-rank-sql.d.ts +21 -0
  596. package/lib/transfer/content-item-rank-sql.js +23 -0
  597. package/lib/transfer/copy-anchor-edges.d.ts +28 -0
  598. package/lib/transfer/copy-anchor-edges.js +42 -0
  599. package/lib/transfer/copy-dictionaries-for-concat.d.ts +39 -0
  600. package/lib/transfer/copy-dictionaries-for-concat.js +81 -0
  601. package/lib/transfer/copy-dictionaries-for-split.d.ts +29 -0
  602. package/lib/transfer/copy-dictionaries-for-split.js +224 -0
  603. package/lib/transfer/copy-header-set-children.d.ts +27 -0
  604. package/lib/transfer/copy-header-set-children.js +51 -0
  605. package/lib/transfer/copy-image-items.d.ts +21 -0
  606. package/lib/transfer/copy-image-items.js +62 -0
  607. package/lib/transfer/copy-inventory-source-lists.d.ts +30 -0
  608. package/lib/transfer/copy-inventory-source-lists.js +61 -0
  609. package/lib/transfer/copy-journal-tables.d.ts +30 -0
  610. package/lib/transfer/copy-journal-tables.js +56 -0
  611. package/lib/transfer/copy-page-console-logs.d.ts +16 -0
  612. package/lib/transfer/copy-page-console-logs.js +27 -0
  613. package/lib/transfer/copy-page-html-blobs.d.ts +31 -0
  614. package/lib/transfer/copy-page-html-blobs.js +43 -0
  615. package/lib/transfer/copy-page-meta.d.ts +27 -0
  616. package/lib/transfer/copy-page-meta.js +68 -0
  617. package/lib/transfer/copy-page-template-clusters.d.ts +31 -0
  618. package/lib/transfer/copy-page-template-clusters.js +56 -0
  619. package/lib/transfer/copy-page-template-labels.d.ts +34 -0
  620. package/lib/transfer/copy-page-template-labels.js +88 -0
  621. package/lib/transfer/copy-resource-items.d.ts +29 -0
  622. package/lib/transfer/copy-resource-items.js +89 -0
  623. package/lib/transfer/copy-resource-ref-edges.d.ts +20 -0
  624. package/lib/transfer/copy-resource-ref-edges.js +33 -0
  625. package/lib/transfer/copy-simple-page-scoped-tables.d.ts +15 -0
  626. package/lib/transfer/copy-simple-page-scoped-tables.js +34 -0
  627. package/lib/transfer/count-external-pages-in-scope.d.ts +26 -0
  628. package/lib/transfer/count-external-pages-in-scope.js +40 -0
  629. package/lib/transfer/create-transfer-temp-tables.d.ts +30 -0
  630. package/lib/transfer/create-transfer-temp-tables.js +59 -0
  631. package/lib/transfer/dictionary-copy-specs.d.ts +32 -0
  632. package/lib/transfer/dictionary-copy-specs.js +28 -0
  633. package/lib/transfer/drop-transfer-temp-tables.d.ts +9 -0
  634. package/lib/transfer/drop-transfer-temp-tables.js +18 -0
  635. package/lib/transfer/flatten-redirect-chains.d.ts +44 -0
  636. package/lib/transfer/flatten-redirect-chains.js +74 -0
  637. package/lib/transfer/insert-content-items.d.ts +35 -0
  638. package/lib/transfer/insert-content-items.js +116 -0
  639. package/lib/transfer/list-transfer-columns.d.ts +35 -0
  640. package/lib/transfer/list-transfer-columns.js +45 -0
  641. package/lib/transfer/mark-in-scope-content-items.d.ts +31 -0
  642. package/lib/transfer/mark-in-scope-content-items.js +54 -0
  643. package/lib/transfer/merge-archive-configs.d.ts +51 -0
  644. package/lib/transfer/merge-archive-configs.js +85 -0
  645. package/lib/transfer/plan-content-items-for-concat.d.ts +33 -0
  646. package/lib/transfer/plan-content-items-for-concat.js +51 -0
  647. package/lib/transfer/plan-content-items-for-split.d.ts +42 -0
  648. package/lib/transfer/plan-content-items-for-split.js +83 -0
  649. package/lib/transfer/plan-resource-items.d.ts +40 -0
  650. package/lib/transfer/plan-resource-items.js +69 -0
  651. package/lib/transfer/quote-transfer-identifier.d.ts +18 -0
  652. package/lib/transfer/quote-transfer-identifier.js +20 -0
  653. package/lib/transfer/reclassify-resource-externality.d.ts +37 -0
  654. package/lib/transfer/reclassify-resource-externality.js +66 -0
  655. package/lib/transfer/remap-redirect-dest-ids.d.ts +34 -0
  656. package/lib/transfer/remap-redirect-dest-ids.js +51 -0
  657. package/lib/transfer/replace-content-items.d.ts +39 -0
  658. package/lib/transfer/replace-content-items.js +83 -0
  659. package/lib/transfer/simple-page-scoped-tables.d.ts +25 -0
  660. package/lib/transfer/simple-page-scoped-tables.js +38 -0
  661. package/lib/transfer/split-archive.d.ts +55 -0
  662. package/lib/transfer/split-archive.js +98 -0
  663. package/lib/transfer/split-source-transfer-phases.d.ts +11 -0
  664. package/lib/transfer/split-source-transfer-phases.js +18 -0
  665. package/lib/transfer/transfer-action.d.ts +34 -0
  666. package/lib/transfer/transfer-action.js +32 -0
  667. package/lib/transfer/transfer-archive-rows.d.ts +65 -0
  668. package/lib/transfer/transfer-archive-rows.js +156 -0
  669. package/lib/transfer/transfer-dictionary-tables.d.ts +12 -0
  670. package/lib/transfer/transfer-dictionary-tables.js +22 -0
  671. package/lib/transfer/transfer-post-phases.d.ts +10 -0
  672. package/lib/transfer/transfer-post-phases.js +13 -0
  673. package/lib/transfer/transfer-source-alias.d.ts +9 -0
  674. package/lib/transfer/transfer-source-alias.js +9 -0
  675. package/lib/transfer/types.d.ts +111 -0
  676. package/lib/transfer/types.js +35 -0
  677. package/lib/types.d.ts +772 -0
  678. package/lib/types.js +1 -0
  679. package/lib/url-alias/compute-tier-a-alias-key.d.ts +44 -0
  680. package/lib/url-alias/compute-tier-a-alias-key.js +47 -0
  681. package/lib/url-alias/compute-tier-b-alias-key.d.ts +23 -0
  682. package/lib/url-alias/compute-tier-b-alias-key.js +26 -0
  683. package/lib/url-alias/group-alias-candidates.d.ts +27 -0
  684. package/lib/url-alias/group-alias-candidates.js +29 -0
  685. package/lib/url-alias/types.d.ts +12 -0
  686. package/lib/url-alias/types.js +1 -0
  687. package/lib/url-pattern/compute-shape-key.d.ts +58 -0
  688. package/lib/url-pattern/compute-shape-key.js +129 -0
  689. package/lib/url-pattern/decompose-url.d.ts +33 -0
  690. package/lib/url-pattern/decompose-url.js +79 -0
  691. package/lib/url-pattern/reconstruct-url.d.ts +15 -0
  692. package/lib/url-pattern/reconstruct-url.js +33 -0
  693. package/lib/url-sort/compute-url-sort-ranks.d.ts +30 -0
  694. package/lib/url-sort/compute-url-sort-ranks.js +33 -0
  695. package/lib/utils/array/each-splitted.d.ts +10 -0
  696. package/lib/utils/array/each-splitted.js +14 -0
  697. package/lib/utils/debug.d.ts +8 -0
  698. package/lib/utils/debug.js +8 -0
  699. package/lib/utils/error/emit-error-with-retry.d.ts +40 -0
  700. package/lib/utils/error/emit-error-with-retry.js +44 -0
  701. package/lib/utils/error/emit-error.d.ts +39 -0
  702. package/lib/utils/error/emit-error.js +41 -0
  703. package/lib/utils/object/parse-response-headers.d.ts +12 -0
  704. package/lib/utils/object/parse-response-headers.js +26 -0
  705. package/lib/utils/object/redact-request-headers.d.ts +15 -0
  706. package/lib/utils/object/redact-request-headers.js +27 -0
  707. package/lib/utils/types/types.d.ts +383 -0
  708. package/lib/utils/types/types.js +1 -0
  709. package/lib/verify-migration/capture-rejection.d.ts +24 -0
  710. package/lib/verify-migration/capture-rejection.js +31 -0
  711. package/lib/verify-migration/check-anchor-edges-count.d.ts +34 -0
  712. package/lib/verify-migration/check-anchor-edges-count.js +72 -0
  713. package/lib/verify-migration/check-anchor-edges-sum.d.ts +13 -0
  714. package/lib/verify-migration/check-anchor-edges-sum.js +27 -0
  715. package/lib/verify-migration/check-content-items-count.d.ts +16 -0
  716. package/lib/verify-migration/check-content-items-count.js +30 -0
  717. package/lib/verify-migration/check-content-type-preservation.d.ts +22 -0
  718. package/lib/verify-migration/check-content-type-preservation.js +40 -0
  719. package/lib/verify-migration/check-foreign-key-integrity.d.ts +31 -0
  720. package/lib/verify-migration/check-foreign-key-integrity.js +47 -0
  721. package/lib/verify-migration/check-image-items-count.d.ts +12 -0
  722. package/lib/verify-migration/check-image-items-count.js +26 -0
  723. package/lib/verify-migration/check-page-meta-count.d.ts +15 -0
  724. package/lib/verify-migration/check-page-meta-count.js +31 -0
  725. package/lib/verify-migration/check-reader-parity.d.ts +23 -0
  726. package/lib/verify-migration/check-reader-parity.js +182 -0
  727. package/lib/verify-migration/check-resource-items-count.d.ts +17 -0
  728. package/lib/verify-migration/check-resource-items-count.js +33 -0
  729. package/lib/verify-migration/check-url-round-trip.d.ts +43 -0
  730. package/lib/verify-migration/check-url-round-trip.js +112 -0
  731. package/lib/verify-migration/types.d.ts +70 -0
  732. package/lib/verify-migration/types.js +63 -0
  733. package/lib/verify-migration/verify-migration.d.ts +41 -0
  734. package/lib/verify-migration/verify-migration.js +120 -0
  735. package/lib/with-bulk-write-pragmas.d.ts +51 -0
  736. package/lib/with-bulk-write-pragmas.js +132 -0
  737. package/lib/write-queue.d.ts +32 -0
  738. package/lib/write-queue.js +55 -0
  739. package/package.json +350 -3
@@ -0,0 +1,236 @@
1
+ import { createTemplateClassificationRun } from '@nitpicker/core/create-template-classification-run';
2
+ /** Pages whose signals are handed to the run per call. */
3
+ const SIGNALS_PER_BATCH = 1000;
4
+ /**
5
+ * Pages a read uses handed to the native run per call (the pages it does
6
+ * not use ride along without counting): enough to keep its thread pool busy
7
+ * on one call, few enough that the next batch is read while it runs. Only
8
+ * throughput depends on it, never the keys.
9
+ */
10
+ const PAGES_PER_BATCH = 64;
11
+ /**
12
+ * HTML (in UTF-16 code units) handed to the native run per call, at most, so
13
+ * a batch of unusually large pages does not hold their copies all at once.
14
+ * Only memory and throughput depend on it, never the keys.
15
+ */
16
+ const HTML_PER_BATCH = 32 * 1024 * 1024;
17
+ /**
18
+ * Pages whose HTML is being read at once, ahead of the one the batch takes
19
+ * next. Each read is a database query and a decompression, so one at a time
20
+ * leaves the native run waiting for the next batch (on a ~178,000-page
21
+ * archive, reading ahead took classification from 139 s to 110 s); a few at
22
+ * a time keeps it busy while bounding the HTML held in flight. Only
23
+ * throughput and memory depend on it, never the keys (pages still enter
24
+ * batches in order).
25
+ */
26
+ const HTML_READ_AHEAD = 16;
27
+ /** What a page a read does not use is handed over as. */
28
+ const UNUSED_PAGE = Object.freeze({ html: '' });
29
+ /**
30
+ * The error for a factory that yields a different corpus on a later read.
31
+ * @param produced How many pages the read produced: its exact count, or
32
+ * `{ moreThan }` the first read's count when it was cut short at the
33
+ * first page beyond it (the rest is not read).
34
+ * @param expected
35
+ */
36
+ function factoryMismatch(produced, expected) {
37
+ const producedText = typeof produced === 'number'
38
+ ? `${produced} pages`
39
+ : `more than ${produced.moreThan} pages`;
40
+ return new Error(`resolvePageClusterKeys: a read of the page factory produced ${producedText} but the first read saw ${expected} — the factory must produce the same pages in the same order on every call`);
41
+ }
42
+ /**
43
+ * The page as one read hands it to the run: its HTML and content-root hint
44
+ * when the read uses it, the shared empty page otherwise.
45
+ * @param page
46
+ * @param used
47
+ */
48
+ async function toPageHtml(page, used) {
49
+ if (!used) {
50
+ // A page the read does not use costs the run nothing, so it only holds
51
+ // its place in the corpus order.
52
+ return UNUSED_PAGE;
53
+ }
54
+ const html = await page.getHtml();
55
+ return {
56
+ html,
57
+ ...(page.contentRoot ? { contentRoot: page.contentRoot } : {}),
58
+ };
59
+ }
60
+ /**
61
+ * Reads `pages` once and hands them to `push` in batches, reading the HTML
62
+ * only of the pages `mask` marks (the others go with empty HTML, which the
63
+ * run does not read). The HTML of up to {@link HTML_READ_AHEAD} pages is read
64
+ * at once, and a batch is read while the previous one is processed (the
65
+ * native run works off Node's main thread); each push is awaited before the
66
+ * next one starts, as the run requires.
67
+ *
68
+ * Only the page count is checked against the first read: a factory yielding
69
+ * as many pages but different ones, or in another order, goes unnoticed.
70
+ * @param read
71
+ * @param read.pages
72
+ * @param read.mask The run's `pageMask()` for this read; its length is the
73
+ * page count of the first read.
74
+ * @param read.push
75
+ */
76
+ async function streamPages(read) {
77
+ const { pages, mask, push } = read;
78
+ let inFlight = Promise.resolve();
79
+ let batch = [];
80
+ let usedInBatch = 0;
81
+ let batchLength = 0;
82
+ let pagesRead = 0;
83
+ const reading = [];
84
+ let pushFailure;
85
+ const flush = async () => {
86
+ await inFlight;
87
+ inFlight = push(batch);
88
+ // Read on while it runs; a rejection is noted here (so it does not
89
+ // count as unhandled) and stops the reading at the next page.
90
+ inFlight.catch((error) => {
91
+ pushFailure ??= { error };
92
+ });
93
+ batch = [];
94
+ usedInBatch = 0;
95
+ batchLength = 0;
96
+ };
97
+ const takeNext = async () => {
98
+ const entry = await reading.shift();
99
+ batch.push(entry);
100
+ if (entry === UNUSED_PAGE)
101
+ return;
102
+ usedInBatch++;
103
+ batchLength += entry.html.length;
104
+ if (usedInBatch >= PAGES_PER_BATCH || batchLength >= HTML_PER_BATCH) {
105
+ await flush();
106
+ }
107
+ };
108
+ try {
109
+ for await (const page of pages()) {
110
+ if (pushFailure)
111
+ throw pushFailure.error;
112
+ if (pagesRead >= mask.length) {
113
+ throw factoryMismatch({ moreThan: mask.length }, mask.length);
114
+ }
115
+ const entry = toPageHtml(page, mask[pagesRead] === 1);
116
+ // Awaited in order by `takeNext`; until then a rejection must not
117
+ // count as unhandled.
118
+ entry.catch(() => { });
119
+ reading.push(entry);
120
+ pagesRead++;
121
+ if (reading.length > HTML_READ_AHEAD) {
122
+ await takeNext();
123
+ }
124
+ }
125
+ while (reading.length > 0) {
126
+ await takeNext();
127
+ }
128
+ }
129
+ catch (error) {
130
+ // Let the running call and the HTML reads already started settle
131
+ // before the caller cancels the run (and perhaps closes the archive),
132
+ // so nothing is left working on a run that is being given up.
133
+ await inFlight.catch(() => { });
134
+ await Promise.allSettled(reading);
135
+ throw error;
136
+ }
137
+ if (batch.length > 0) {
138
+ await flush();
139
+ }
140
+ await inFlight;
141
+ if (pagesRead !== mask.length) {
142
+ throw factoryMismatch(pagesRead, mask.length);
143
+ }
144
+ }
145
+ /**
146
+ * Reads every page's blocking signals into `run`, reporting every 1,000
147
+ * pages.
148
+ * @param read
149
+ * @param read.pages
150
+ * @param read.run
151
+ * @param read.onProgress
152
+ */
153
+ async function pushSignals(read) {
154
+ const { pages, run, onProgress } = read;
155
+ let pagesSeen = 0;
156
+ let batch = [];
157
+ for await (const page of pages()) {
158
+ if (onProgress && pagesSeen > 0 && pagesSeen % SIGNALS_PER_BATCH === 0) {
159
+ onProgress({ phase: 'pass0-signals', pagesSeen });
160
+ }
161
+ pagesSeen++;
162
+ batch.push(page);
163
+ if (batch.length >= SIGNALS_PER_BATCH) {
164
+ run.pushSignals(batch);
165
+ batch = [];
166
+ }
167
+ }
168
+ run.pushSignals(batch);
169
+ }
170
+ /**
171
+ * Clusters pages into templates by DOM structure, in the native addon
172
+ * (`@nitpicker/core`'s `createTemplateClassificationRun`):
173
+ *
174
+ * - **Pass 0** splits the corpus into blocks by URL section and first-party
175
+ * stylesheets, from the signals alone — no HTML.
176
+ * - **Stage A** clusters each block: landmark chrome is cut out, the content
177
+ * depth is capped at the block's knee, and complete-linkage clustering
178
+ * with a max-gap cut splits the block.
179
+ * - **Stage B** merges clusters across blocks and explains each final one.
180
+ *
181
+ * A block is clustered whole unless its Stage A similarity table
182
+ * (`n * (n - 1) / 2 * 8` bytes for `n` pages) exceeds `options.memoryBudget`,
183
+ * or the blocks clustered whole would hold more than
184
+ * `TEMPLATE_EXACT_PAGE_LIMIT` pages together (the largest are then sampled
185
+ * until they fit); a sampled block is clustered on a sample and a further
186
+ * read assigns its other pages. The factory is read twice (signals, HTML)
187
+ * or, with a sampled block that has pages outside its sample, three times; each page's HTML is read
188
+ * once, and JavaScript never holds the whole corpus's HTML.
189
+ * @param pages
190
+ * @param options
191
+ * @example
192
+ * ```ts
193
+ * const { keys, reasons } = await resolvePageClusterKeys(() => [
194
+ * { paths: ['news', '1'], stylesheetHrefs: [], getHtml: () => '<body><article>one</article></body>' },
195
+ * { paths: ['news', '2'], stylesheetHrefs: [], getHtml: () => '<body><article>two</article></body>' },
196
+ * { paths: ['about'], stylesheetHrefs: [], getHtml: () => '<body><section>about</section></body>' },
197
+ * ]);
198
+ * // keys: ['["path:news","cluster:0"]', '["path:news","cluster:0"]', '["path:about","cluster:0"]']
199
+ * // reasons: one per cluster key, e.g. reasons.get('["path:about","cluster:0"]')?.memberCount === 1
200
+ * ```
201
+ */
202
+ export async function resolvePageClusterKeys(pages, options) {
203
+ const onProgress = options?.onProgress;
204
+ const memoryBudget = options?.memoryBudget;
205
+ const run = createTemplateClassificationRun({
206
+ ...(memoryBudget === undefined ? {} : { memoryBudget }),
207
+ ...(onProgress ? { onProgress } : {}),
208
+ });
209
+ try {
210
+ await pushSignals({ pages, run, onProgress });
211
+ await run.block();
212
+ await streamPages({
213
+ pages,
214
+ mask: run.pageMask(),
215
+ push: (batch) => run.pushPages(batch),
216
+ });
217
+ await run.finishPages();
218
+ if (run.needsAssignment()) {
219
+ await streamPages({
220
+ pages,
221
+ mask: run.pageMask(),
222
+ push: (batch) => run.pushAssignmentPages(batch),
223
+ });
224
+ }
225
+ const output = await run.takeOutput();
226
+ return {
227
+ keys: Array.from(output.keyOfPage, (key) => output.keys[key]),
228
+ reasons: output.reasons,
229
+ sampledBlocks: output.sampledBlocks,
230
+ };
231
+ }
232
+ catch (error) {
233
+ run.cancel();
234
+ throw error;
235
+ }
236
+ }
@@ -0,0 +1,123 @@
1
+ import type { ContentRootHint, TemplateClassificationRun, TemplateClusterReason, TemplatePageHtml, TemplateSampledBlock } from '@nitpicker/core/types';
2
+ /**
3
+ * One page as `resolvePageClusterKeys` reads it: the blocking signals, read
4
+ * on every pass, and the HTML, read only on the passes that use the page.
5
+ */
6
+ export interface PageClusterPage {
7
+ /** The page URL's path segments (`ExURL.paths`). */
8
+ readonly paths: readonly string[];
9
+ /** Absolute hrefs of the page's stylesheets. */
10
+ readonly stylesheetHrefs: readonly string[];
11
+ /**
12
+ * The page URL's host (hostname, optionally `:port` — `new URL(pageUrl).host`).
13
+ * Stylesheets on other hosts take no part in blocking.
14
+ */
15
+ readonly host?: string;
16
+ /**
17
+ * Identity of the page's content-root element, as a crawler detected it.
18
+ * Anchors the per-block content depth cap on sites without
19
+ * `<main>`/`role="main"`; without it the cap falls back to
20
+ * `<main>`/`role="main"` and then the built-in `#main`, `#content`, … list.
21
+ */
22
+ readonly contentRoot?: ContentRootHint;
23
+ /**
24
+ * The page's HTML, non-empty. Called only on the reads that use the page
25
+ * (every page of a block clustered whole, and the sampled pages of a
26
+ * sampled block, on the first read; the other pages of the sampled blocks
27
+ * on the second), so a page's HTML is decompressed once however many
28
+ * times the corpus is read.
29
+ */
30
+ getHtml(): string | Promise<string>;
31
+ }
32
+ /**
33
+ * Factory returning an iterator over the corpus. Called once per read — the
34
+ * signals, then the HTML, and, when a block was sampled, the HTML again for
35
+ * the pages outside the samples. Every call must yield the same pages in the
36
+ * same order; a corpus that changes size between reads is rejected.
37
+ *
38
+ * A factory rather than an `AsyncIterable`: one returned once cannot be
39
+ * traversed a second time, while a factory lets the caller re-issue its
40
+ * archive query per read, so no read holds the corpus's HTML at once.
41
+ */
42
+ export type PageFactory = () => Iterable<PageClusterPage> | AsyncIterable<PageClusterPage>;
43
+ /**
44
+ * Progress of `resolvePageClusterKeys`, a union on `phase`:
45
+ * - `pass0-signals`: reading the blocking signals; every 1,000 pages.
46
+ * - `block-sampled`: a block will be clustered from a sample, because its
47
+ * similarity table exceeds the memory budget or because the blocks
48
+ * clustered whole would hold more than `@nitpicker/core`'s
49
+ * `TEMPLATE_EXACT_PAGE_LIMIT` pages and it is among the largest; once per
50
+ * such block, before any HTML is read.
51
+ * - `pass1-block-complete`: one block's clusters are done.
52
+ * - `pass1b-assign`: only with a sampled block; every 1,000 pages assigned to
53
+ * the sampled clusters.
54
+ * - `stage-b-start`: the merge across blocks began; once per call.
55
+ */
56
+ export type ProgressEvent = {
57
+ readonly phase: 'pass0-signals';
58
+ readonly pagesSeen: number;
59
+ } | {
60
+ readonly phase: 'block-sampled';
61
+ readonly blockKey: string;
62
+ readonly pageCount: number;
63
+ readonly pairBytes: number;
64
+ readonly budget: number;
65
+ readonly reason: 'table-over-budget' | 'pages-over-limit';
66
+ } | {
67
+ readonly phase: 'pass1-block-complete';
68
+ readonly blockKey: string;
69
+ readonly blocksProcessed: number;
70
+ readonly totalBlocks: number;
71
+ } | {
72
+ readonly phase: 'pass1b-assign';
73
+ readonly pagesAssigned: number;
74
+ readonly pagesToAssign: number;
75
+ } | {
76
+ readonly phase: 'stage-b-start';
77
+ readonly unitCount: number;
78
+ };
79
+ /** Options of `resolvePageClusterKeys`. */
80
+ export interface ResolvePageClusterKeysOptions {
81
+ /**
82
+ * Bytes a block's Stage A similarity table may take before the block is
83
+ * clustered from a sample instead (`@nitpicker/core`'s
84
+ * `TEMPLATE_MEMORY_BUDGET` by default; `0` samples every block).
85
+ */
86
+ readonly memoryBudget: number;
87
+ /** Receives every {@link ProgressEvent}. */
88
+ readonly onProgress: (event: ProgressEvent) => void;
89
+ }
90
+ /** What `resolvePageClusterKeys` returns. */
91
+ export interface PageClusterKeys {
92
+ /** Each page's cluster key, in corpus order. */
93
+ readonly keys: string[];
94
+ /**
95
+ * Each final cluster's reason, by key. Built from the clusters' retained
96
+ * members (the samples, for a sampled block), sized by cluster count, not
97
+ * page count.
98
+ */
99
+ readonly reasons: ReadonlyMap<string, TemplateClusterReason>;
100
+ /** The blocks clustered from a sample, in block order. */
101
+ readonly sampledBlocks: readonly TemplateSampledBlock[];
102
+ }
103
+ /** One read of the corpus's HTML, as the driver hands it to the run. */
104
+ export interface HtmlRead {
105
+ /** The corpus. */
106
+ readonly pages: PageFactory;
107
+ /**
108
+ * The run's `pageMask()` for this read: which pages it uses; its length
109
+ * is the page count of the first read.
110
+ */
111
+ readonly mask: Uint8Array;
112
+ /** Hands a batch to the run (`pushPages` or `pushAssignmentPages`). */
113
+ readonly push: (batch: TemplatePageHtml[]) => Promise<void>;
114
+ }
115
+ /** The read of every page's blocking signals into a run. */
116
+ export interface SignalsRead {
117
+ /** The corpus. */
118
+ readonly pages: PageFactory;
119
+ /** The run the signals go to. */
120
+ readonly run: TemplateClassificationRun;
121
+ /** Receives the `pass0-signals` events. */
122
+ readonly onProgress: ((event: ProgressEvent) => void) | undefined;
123
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,234 @@
1
+ import type Archive from '../archive.js';
2
+ import type { TemplateClusterReason } from '../db-ops/templates/types.js';
3
+ import type { ContentRootHint } from '@nitpicker/core/types';
4
+ /**
5
+ * The four values of a page's detected main-content element that
6
+ * `createContentRootHint` builds the classifier's content-root hint from.
7
+ * Structurally the matching getters of `Page`, and the decoded
8
+ * `page_meta.main_content_*` columns `loadPageClusterCandidates` reads.
9
+ */
10
+ export interface ContentRootSource {
11
+ /** The element's DOM node name (`'DIV'`), or `null`. */
12
+ readonly mainContentNodeName: string | null;
13
+ /** The element's `id`, or `null`. */
14
+ readonly mainContentId: string | null;
15
+ /** The element's `role`, or `null`. */
16
+ readonly mainContentRole: string | null;
17
+ /** The element's CSS classes, or `null` when no main region was detected. */
18
+ readonly mainContentClassList: readonly string[] | null;
19
+ }
20
+ /**
21
+ * What template classification keeps of one internal HTML page while it
22
+ * waits for the clustering: the page's id (to read its HTML by) and the
23
+ * signals the classifier reads without HTML. Deliberately not a `Page` — a
24
+ * `Page` holds the page's whole row (every meta column), and holding one per
25
+ * page of a several-hundred-thousand-page archive is what this type avoids.
26
+ * @example
27
+ * ```ts
28
+ * const candidate: PageClusterCandidate = {
29
+ * id: 12,
30
+ * href: 'https://example.com/news/1',
31
+ * paths: ['news', '1'],
32
+ * host: 'example.com',
33
+ * };
34
+ * ```
35
+ */
36
+ export interface PageClusterCandidate {
37
+ /** `Page.id`; the key the page's HTML is read by. */
38
+ readonly id: number;
39
+ /** The page's `url.href`; the key of its result and of its stylesheet references. */
40
+ readonly href: string;
41
+ /** The page's URL path segments. */
42
+ readonly paths: readonly string[];
43
+ /** `hostname`, or `hostname:port` when the URL has a port. */
44
+ readonly host: string;
45
+ /** The crawler-detected main-content hint; absent when none was detected. */
46
+ readonly contentRoot?: ContentRootHint;
47
+ }
48
+ /**
49
+ * Progress of the clustering step itself. A copy of the page-cluster
50
+ * driver's `ProgressEvent` (`./page-cluster/resolve-page-cluster-keys.ts`,
51
+ * structurally assignable to this type), kept independent of it so
52
+ * `@nitpicker/cli` formats progress against a type archive exports rather
53
+ * than against the driver's internals, which are not part of archive's
54
+ * `exports` — the same reason {@link TemplateClusterReason} mirrors
55
+ * `@nitpicker/core`'s reason type.
56
+ */
57
+ export type TemplateClusteringProgress = {
58
+ readonly phase: 'pass0-signals';
59
+ readonly pagesSeen: number;
60
+ } | {
61
+ readonly phase: 'block-sampled';
62
+ readonly blockKey: string;
63
+ readonly pageCount: number;
64
+ readonly pairBytes: number;
65
+ readonly budget: number;
66
+ readonly reason: 'table-over-budget' | 'pages-over-limit';
67
+ } | {
68
+ readonly phase: 'pass1-block-complete';
69
+ readonly blockKey: string;
70
+ readonly blocksProcessed: number;
71
+ readonly totalBlocks: number;
72
+ } | {
73
+ readonly phase: 'pass1b-assign';
74
+ readonly pagesAssigned: number;
75
+ readonly pagesToAssign: number;
76
+ } | {
77
+ readonly phase: 'stage-b-start';
78
+ readonly unitCount: number;
79
+ };
80
+ /**
81
+ * Progress of the whole crawl-end classification
82
+ * ({@link import('./classify-archive-page-templates.js').classifyArchivePageTemplates}):
83
+ * listing the pages with stored HTML, loading their signals out of the
84
+ * archive, gathering stylesheet references, the clustering phases, then
85
+ * writing the result.
86
+ *
87
+ * `loading-pages-start`, `collecting-stylesheets`, `listing-html-snapshots`
88
+ * and `writing-results` carry no count: each is a step with no natural
89
+ * progress unit (a count query followed by keyset batches that report their
90
+ * own `loading-pages` counts, three chained SQL passes, one join query, one
91
+ * write transaction), so they only announce that the step began — otherwise
92
+ * the previous step's last message would stay on screen and look like a stall.
93
+ */
94
+ export type TemplateClassificationProgress = {
95
+ readonly phase: 'loading-pages-start';
96
+ } | {
97
+ readonly phase: 'loading-pages';
98
+ readonly done: number;
99
+ readonly total: number;
100
+ } | {
101
+ readonly phase: 'collecting-stylesheets';
102
+ } | {
103
+ readonly phase: 'listing-html-snapshots';
104
+ } | TemplateClusteringProgress | {
105
+ readonly phase: 'writing-results';
106
+ readonly templateCount: number;
107
+ };
108
+ /**
109
+ * A block clustered from a sample of its pages. Mirrors `@nitpicker/core`'s
110
+ * `TemplateSampledBlock`, for the same reason {@link TemplateClusterReason}
111
+ * mirrors its reason type.
112
+ * @example
113
+ * ```ts
114
+ * const block: SampledTemplateBlock = {
115
+ * blockKey: 'path:news',
116
+ * pageCount: 30_000,
117
+ * pairBytes: 3_599_880_000,
118
+ * reason: 'table-over-budget',
119
+ * };
120
+ * ```
121
+ */
122
+ export interface SampledTemplateBlock {
123
+ /** The block's key. */
124
+ readonly blockKey: string;
125
+ /** Its pages. */
126
+ readonly pageCount: number;
127
+ /** Bytes its similarity table would have taken. */
128
+ readonly pairBytes: number;
129
+ /**
130
+ * Why it was sampled: its table exceeds the memory budget, or the blocks
131
+ * clustered whole would hold more than `@nitpicker/core`'s
132
+ * `TEMPLATE_EXACT_PAGE_LIMIT` pages and it is among the largest.
133
+ */
134
+ readonly reason: 'table-over-budget' | 'pages-over-limit';
135
+ }
136
+ /**
137
+ * Options for {@link import('./classify-page-templates.js').classifyPageTemplates}.
138
+ */
139
+ export interface ClassifyPageTemplatesOptions {
140
+ /** The archive to read stylesheet references and the stored-HTML listing from. */
141
+ archive: Archive;
142
+ /**
143
+ * Every internal HTML page of the archive that has a stored HTML snapshot
144
+ * (`loadPageClusterCandidates`).
145
+ * Classification is a corpus-wide batch computation: template keys are
146
+ * only comparable within one call, so the pages must never be passed in
147
+ * per-batch slices.
148
+ */
149
+ candidates: readonly PageClusterCandidate[];
150
+ /**
151
+ * Bytes a block's Stage A similarity table may take before the block is
152
+ * clustered from a sample instead; see `resolvePageClusterKeys`. Defaults
153
+ * to `@nitpicker/core`'s `TEMPLATE_MEMORY_BUDGET`; `0` samples every block.
154
+ */
155
+ memoryBudget?: number;
156
+ /**
157
+ * Receives every {@link TemplateClassificationProgress} event of the call,
158
+ * including the clustering phases `resolvePageClusterKeys` reports, so
159
+ * long-running classification on large archives isn't silently
160
+ * unresponsive.
161
+ */
162
+ onProgress?: (event: TemplateClassificationProgress) => void;
163
+ }
164
+ /**
165
+ * Options for {@link import('./load-page-cluster-candidates.js').loadPageClusterCandidates}.
166
+ */
167
+ export interface LoadPageClusterCandidatesOptions {
168
+ /**
169
+ * Output of `collectPageIdsWithHtml`: only pages whose id is in it are
170
+ * loaded, so pages with no stored HTML never take part (nor stay resident).
171
+ */
172
+ readonly pageIdsWithHtml: ReadonlySet<number>;
173
+ /** Receives a `loading-pages` event after each batch. */
174
+ readonly onProgress?: (event: TemplateClassificationProgress) => void;
175
+ /** Rows read per query. Defaults to 10,000; a bound on one query's transient garbage only. */
176
+ readonly batchSize?: number;
177
+ }
178
+ /**
179
+ * Options for {@link import('./create-page-cluster-factory.js').createPageClusterFactory}.
180
+ */
181
+ export interface CreatePageClusterFactoryOptions {
182
+ /** Reads each page's HTML by id, only on the reads that use it. */
183
+ readonly archive: Pick<Archive, 'getHtmlOfPage'>;
184
+ /**
185
+ * The pages to cluster, as `loadPageClusterCandidates` returned them
186
+ * (already limited to pages with a stored HTML snapshot).
187
+ */
188
+ readonly candidates: readonly PageClusterCandidate[];
189
+ /** Output of `collectPageStylesheetUrls`, keyed by `url.href`. */
190
+ readonly stylesheetsByUrl: ReadonlyMap<string, readonly string[]>;
191
+ }
192
+ /**
193
+ * Result of {@link import('./classify-page-templates.js').classifyPageTemplates}.
194
+ */
195
+ export interface PageTemplateClassification {
196
+ /**
197
+ * Page URL (`page.url.href`) → template key. Only internal HTML pages
198
+ * with retrievable HTML have an entry.
199
+ */
200
+ readonly templateKeysByUrl: ReadonlyMap<string, string>;
201
+ /**
202
+ * Template key → the classifier's cluster-selection evidence for that
203
+ * key, one per final cluster. Built from each cluster's retained members
204
+ * (the samples, for a sampled block), so `memberCount` can be smaller
205
+ * than the cluster's page count.
206
+ */
207
+ readonly clusterReasonsByTemplateKey: ReadonlyMap<string, TemplateClusterReason>;
208
+ /** The blocks clustered from a sample, in block order. */
209
+ readonly sampledBlocks: readonly SampledTemplateBlock[];
210
+ }
211
+ /**
212
+ * Options for {@link import('./classify-archive-page-templates.js').classifyArchivePageTemplates}.
213
+ */
214
+ export interface ClassifyArchivePageTemplatesOptions {
215
+ /**
216
+ * Bytes a block's Stage A similarity table may take before the block is
217
+ * clustered from a sample instead; see `resolvePageClusterKeys`. Defaults
218
+ * to `@nitpicker/core`'s `TEMPLATE_MEMORY_BUDGET`; `0` samples every block.
219
+ */
220
+ readonly memoryBudget?: number;
221
+ /** Receives loading and clustering progress; omit for a silent run. */
222
+ readonly onProgress?: (event: TemplateClassificationProgress) => void;
223
+ }
224
+ /**
225
+ * Result of {@link import('./classify-archive-page-templates.js').classifyArchivePageTemplates}.
226
+ */
227
+ export interface ClassifyArchivePageTemplatesResult {
228
+ /** Number of pages that received a template key. */
229
+ readonly classifiedPageCount: number;
230
+ /** Number of distinct template keys among them. */
231
+ readonly templateCount: number;
232
+ /** The blocks clustered from a sample, in block order; empty when none was. */
233
+ readonly sampledBlocks: readonly SampledTemplateBlock[];
234
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,34 @@
1
+ import type { Config } from '../types.js';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Builds a file-backed knex connection against the FULL current archive
5
+ * schema (every ref/entity/adjunct table, including columns only a
6
+ * migration adds to a legacy archive — `alias_of_id`, `dedupe_cap_event_id`,
7
+ * `body_hash`, …) by running the exact same {@link init} boot sequence a
8
+ * real `Archive.create`/`Archive.open` uses. Shared by every
9
+ * `archive/transfer/` spec that needs a realistic source or destination
10
+ * database — hand-rolling `createRefTables`/`createEntityTables`/
11
+ * `createAdjunctTables` directly would produce the schema `initSchema`
12
+ * creates but skip the migrations that add columns for archives created
13
+ * before those features existed (which happen to be a no-op on a fresh
14
+ * DB today, but drift is exactly the risk this helper avoids).
15
+ *
16
+ * A DB file must be used (not `:memory:`) because `ATTACH DATABASE` in
17
+ * the transfer primitives needs a real path — see `attach-source-database.ts`.
18
+ * @param filename - Absolute path to the SQLite file. The caller is
19
+ * responsible for removing it (`afterEach`) — see existing specs for the
20
+ * convention.
21
+ * @param config - Overrides merged over {@link DEFAULT_TEST_CONFIG} and
22
+ * written via `setConfig` once the schema exists. Pass `null` to skip
23
+ * writing an `info` row entirely (some specs seed `content_items`
24
+ * directly and never read `getConfig()`).
25
+ * @returns The connected knex instance, on the current schema, with an
26
+ * `info` row unless `config` is `null`.
27
+ * @example
28
+ * ```ts
29
+ * const db = await buildFullSchemaTestDb(path.resolve(workingDir, 'source.sqlite'), {
30
+ * roots: ['https://a.example.com/'],
31
+ * });
32
+ * ```
33
+ */
34
+ export declare function buildFullSchemaTestDb(filename: string, config?: Partial<Config> | null): Promise<Knex>;