@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,42 @@
1
+ import { REQUIRED_FORMAT_VERSION } from '../meta/assert-compatible-version.js';
2
+ /**
3
+ * Derives the output {@link Config} for a `split`, from the source's own
4
+ * config plus the scope URLs the operator gave on the command line.
5
+ *
6
+ * `roots` becomes exactly the given URLs (their `withoutHash` form,
7
+ * matching how `crawl`'s own roots are recorded); `baseUrl` is the first
8
+ * one. Every other scalar field is carried over verbatim from the
9
+ * source — a split narrows WHICH pages are kept, it does not change HOW
10
+ * they were crawled (`recursive`/`interval`/`userAgent`/etc. all still
11
+ * describe the original session honestly). `excludes`/`excludeKeywords`/
12
+ * `excludeUrls` are likewise carried over unchanged (they described the
13
+ * source's own crawl-time exclusions, still true of the subset that
14
+ * survives). `version` is pinned to {@link REQUIRED_FORMAT_VERSION} and
15
+ * `createdCwd` is always `null`, matching `mergeArchiveConfigs`'s same
16
+ * two fields for the same reasons.
17
+ *
18
+ * Callers must reject a `fromList` source BEFORE calling this — `roots`
19
+ * for such an archive is a URL LIST, not a scope, so "roots = the given
20
+ * scope URLs" has no coherent meaning for it (see `docs/split.md`).
21
+ * @param source - The source archive's `getConfig()` result.
22
+ * @param scopeUrls - The scope URLs the operator gave (`withoutHash` form).
23
+ * @param name - The output archive's `name` (typically its basename).
24
+ * @returns The derived {@link Config} to write via `Archive#setConfig`.
25
+ * @example
26
+ * ```ts
27
+ * const config = buildSplitConfig(await source.getConfig(), ['https://example.com/blog/'], 'blog');
28
+ * ```
29
+ */
30
+ export function buildSplitConfig(source, scopeUrls, name) {
31
+ if (scopeUrls.length === 0) {
32
+ throw new Error('buildSplitConfig: at least one scope URL is required');
33
+ }
34
+ return {
35
+ ...source,
36
+ version: REQUIRED_FORMAT_VERSION,
37
+ name,
38
+ roots: [...scopeUrls],
39
+ baseUrl: scopeUrls[0],
40
+ createdCwd: null,
41
+ };
42
+ }
@@ -0,0 +1,23 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Deletes every page-scoped derived row for a concat source's `replace`-
4
+ * action destination ids (`temp.xfer_ci_plan.dest_id`), across every
5
+ * table in {@link REMAPPED_PAGE_ROW_TABLES} + {@link SIMPLE_PAGE_SCOPED_TABLES}
6
+ * combined. The legacy `analysis_violations` rows are also deleted when the
7
+ * destination archive still carries that table (guarded by `hasTable`),
8
+ * because its legacy FK to `content_items` would otherwise block the
9
+ * deletion. Set-based (`WHERE ... IN (subquery)`), so there is no
10
+ * `SQLITE_LIMIT_VARIABLE_NUMBER` bind-count concern regardless of how many
11
+ * rows are being replaced.
12
+ *
13
+ * Must run BEFORE the page-scoped table copies
14
+ * (`copy-page-meta.ts` et al.) so their `INSERT`s never collide with
15
+ * stale rows left over from the losing destination row's own prior data.
16
+ * @param trx - Transaction with the source ATTACHed.
17
+ * @example
18
+ * ```ts
19
+ * await clearReplacedPageRows(trx);
20
+ * await replaceContentItems(trx, { crawlOrderOffset: 0 });
21
+ * ```
22
+ */
23
+ export declare function clearReplacedPageRows(trx: Knex): Promise<void>;
@@ -0,0 +1,61 @@
1
+ import { SIMPLE_PAGE_SCOPED_TABLES } from './simple-page-scoped-tables.js';
2
+ import { TRANSFER_ACTION } from './transfer-action.js';
3
+ /**
4
+ * The page-scoped tables NOT covered by {@link SIMPLE_PAGE_SCOPED_TABLES}
5
+ * (which this file also clears — see below) — each of these has its own
6
+ * dedicated FK-remapping copy function (`copy-page-meta.ts`,
7
+ * `copy-anchor-edges.ts`, `copy-image-items.ts`,
8
+ * `copy-resource-ref-edges.ts`, `copy-page-console-logs.ts`), so they are
9
+ * listed explicitly rather than folded into the shared "plain passthrough"
10
+ * table. Together the two lists are a superset of `clearPageDerivedRows`'
11
+ * tables (reused by `resetFailedPages`/`repromoteExternalPages` for the same
12
+ * un-scrape-then-re-insert shape) — the combined set additionally covers
13
+ * `page_console_logs`/`page_templates`/`page_errors`, which that shared
14
+ * helper deliberately omits (see its own JSDoc for why:
15
+ * `repromoteExternalPages` never needed them cleared, and folding them in
16
+ * would have silently changed its existing behaviour). Concat's replace
17
+ * path needs all of them — a `replace` is a full Scoped-Replace of every
18
+ * page-scoped table, not a partial one.
19
+ */
20
+ const REMAPPED_PAGE_ROW_TABLES = [
21
+ { table: 'page_meta', pageColumn: 'page_id' },
22
+ { table: 'anchor_edges', pageColumn: 'page_id' },
23
+ { table: 'image_items', pageColumn: 'page_id' },
24
+ { table: 'resource_ref_edges', pageColumn: 'page_id' },
25
+ { table: 'page_console_logs', pageColumn: 'pageId' },
26
+ ];
27
+ /**
28
+ * Deletes every page-scoped derived row for a concat source's `replace`-
29
+ * action destination ids (`temp.xfer_ci_plan.dest_id`), across every
30
+ * table in {@link REMAPPED_PAGE_ROW_TABLES} + {@link SIMPLE_PAGE_SCOPED_TABLES}
31
+ * combined. The legacy `analysis_violations` rows are also deleted when the
32
+ * destination archive still carries that table (guarded by `hasTable`),
33
+ * because its legacy FK to `content_items` would otherwise block the
34
+ * deletion. Set-based (`WHERE ... IN (subquery)`), so there is no
35
+ * `SQLITE_LIMIT_VARIABLE_NUMBER` bind-count concern regardless of how many
36
+ * rows are being replaced.
37
+ *
38
+ * Must run BEFORE the page-scoped table copies
39
+ * (`copy-page-meta.ts` et al.) so their `INSERT`s never collide with
40
+ * stale rows left over from the losing destination row's own prior data.
41
+ * @param trx - Transaction with the source ATTACHed.
42
+ * @example
43
+ * ```ts
44
+ * await clearReplacedPageRows(trx);
45
+ * await replaceContentItems(trx, { crawlOrderOffset: 0 });
46
+ * ```
47
+ */
48
+ export async function clearReplacedPageRows(trx) {
49
+ const tables = [...REMAPPED_PAGE_ROW_TABLES, ...SIMPLE_PAGE_SCOPED_TABLES];
50
+ if (await trx.schema.hasTable('analysis_violations')) {
51
+ tables.push({ table: 'analysis_violations', pageColumn: 'page_id' });
52
+ }
53
+ for (const { table, pageColumn } of tables) {
54
+ await trx.raw(`
55
+ DELETE FROM main.${table}
56
+ WHERE ${pageColumn} IN (
57
+ SELECT dest_id FROM xfer_ci_plan WHERE action = ${TRANSFER_ACTION.replace}
58
+ )
59
+ `);
60
+ }
61
+ }
@@ -0,0 +1,55 @@
1
+ import type { ArchiveAccessor } from '../archive-accessor.js';
2
+ import type Archive from '../archive.js';
3
+ import type { ConcatArchivesResult, TransferCallbacks } from './types.js';
4
+ /**
5
+ * Merges two or more read-only-opened source archives into an already
6
+ * `Archive.create`d, empty destination — the crawler-side half of the
7
+ * `concat` CLI command. Does not open/close/write anything itself: the
8
+ * caller owns every accessor's and the destination's lifecycle (see
9
+ * `docs/concat.md` and the CLI's `commands/concat.ts`, which owns the
10
+ * full open → transfer → rebuild-read-model → write sequence this is one
11
+ * step of).
12
+ *
13
+ * Sources are transferred ONE AT A TIME, in argument order, each one's
14
+ * `crawlOrderOffset` set to the destination's current
15
+ * `MAX(content_items.crawl_order)` so a later source's pages always sort
16
+ * after an earlier one's — this is what makes "ties go to the later
17
+ * argument" (see `plan-content-items-for-concat.ts`) match the pages'
18
+ * OWN display order too, not just their win/lose outcome.
19
+ *
20
+ * After every source is transferred: `flattenRedirectChains` (a merge can
21
+ * reintroduce a two-hop redirect chain no single source ever has),
22
+ * `reclassifyResourceExternality` against the MERGED scope, and
23
+ * `countExternalPagesInScope` for the CLI's `--append` hint (concat never
24
+ * promotes such pages itself — see `types.ts`'s
25
+ * `ConcatArchivesResult.externalInScopeCount` docs).
26
+ * @param options - See individual properties.
27
+ * @param options.sources - Every source, read-only opened
28
+ * (`Archive.openCached`), in argument order.
29
+ * @param options.destination - The empty destination, already
30
+ * `Archive.create`d by the caller.
31
+ * @param options.name - The output archive's `name` config field
32
+ * (typically its basename without extension).
33
+ * @param options.callbacks - Progress callbacks; see `types.ts`.
34
+ * @returns The merged config, each source's transfer outcome, and the
35
+ * two summary counts.
36
+ * @throws {import('./types.js').ArchiveConfigConflictError} If sources
37
+ * disagree on `disableQueries`/`fromList` — see `mergeArchiveConfigs`.
38
+ * @example
39
+ * ```ts
40
+ * const destination = await Archive.create({ filePath: outputPath, cwd });
41
+ * const sources = await Promise.all(
42
+ * inputPaths.map(async (p) => ({ path: p, accessor: await Archive.openCached(p) })),
43
+ * );
44
+ * const result = await concatArchives({ sources, destination, name: 'merged' });
45
+ * ```
46
+ */
47
+ export declare function concatArchives(options: {
48
+ readonly sources: readonly {
49
+ readonly accessor: ArchiveAccessor;
50
+ readonly path: string;
51
+ }[];
52
+ readonly destination: Archive;
53
+ readonly name: string;
54
+ readonly callbacks?: TransferCallbacks;
55
+ }): Promise<ConcatArchivesResult>;
@@ -0,0 +1,95 @@
1
+ import path from 'node:path';
2
+ import ArchiveDefault from '../archive.js';
3
+ import { buildScopeMap } from '../scope/build-scope-map.js';
4
+ import { copyInventorySourceLists } from './copy-inventory-source-lists.js';
5
+ import { countExternalPagesInScope } from './count-external-pages-in-scope.js';
6
+ import { flattenRedirectChains } from './flatten-redirect-chains.js';
7
+ import { mergeArchiveConfigs } from './merge-archive-configs.js';
8
+ import { reclassifyResourceExternality } from './reclassify-resource-externality.js';
9
+ import { transferArchiveRows } from './transfer-archive-rows.js';
10
+ /**
11
+ * Merges two or more read-only-opened source archives into an already
12
+ * `Archive.create`d, empty destination — the crawler-side half of the
13
+ * `concat` CLI command. Does not open/close/write anything itself: the
14
+ * caller owns every accessor's and the destination's lifecycle (see
15
+ * `docs/concat.md` and the CLI's `commands/concat.ts`, which owns the
16
+ * full open → transfer → rebuild-read-model → write sequence this is one
17
+ * step of).
18
+ *
19
+ * Sources are transferred ONE AT A TIME, in argument order, each one's
20
+ * `crawlOrderOffset` set to the destination's current
21
+ * `MAX(content_items.crawl_order)` so a later source's pages always sort
22
+ * after an earlier one's — this is what makes "ties go to the later
23
+ * argument" (see `plan-content-items-for-concat.ts`) match the pages'
24
+ * OWN display order too, not just their win/lose outcome.
25
+ *
26
+ * After every source is transferred: `flattenRedirectChains` (a merge can
27
+ * reintroduce a two-hop redirect chain no single source ever has),
28
+ * `reclassifyResourceExternality` against the MERGED scope, and
29
+ * `countExternalPagesInScope` for the CLI's `--append` hint (concat never
30
+ * promotes such pages itself — see `types.ts`'s
31
+ * `ConcatArchivesResult.externalInScopeCount` docs).
32
+ * @param options - See individual properties.
33
+ * @param options.sources - Every source, read-only opened
34
+ * (`Archive.openCached`), in argument order.
35
+ * @param options.destination - The empty destination, already
36
+ * `Archive.create`d by the caller.
37
+ * @param options.name - The output archive's `name` config field
38
+ * (typically its basename without extension).
39
+ * @param options.callbacks - Progress callbacks; see `types.ts`.
40
+ * @returns The merged config, each source's transfer outcome, and the
41
+ * two summary counts.
42
+ * @throws {import('./types.js').ArchiveConfigConflictError} If sources
43
+ * disagree on `disableQueries`/`fromList` — see `mergeArchiveConfigs`.
44
+ * @example
45
+ * ```ts
46
+ * const destination = await Archive.create({ filePath: outputPath, cwd });
47
+ * const sources = await Promise.all(
48
+ * inputPaths.map(async (p) => ({ path: p, accessor: await Archive.openCached(p) })),
49
+ * );
50
+ * const result = await concatArchives({ sources, destination, name: 'merged' });
51
+ * ```
52
+ */
53
+ export async function concatArchives(options) {
54
+ const { sources, destination, name, callbacks } = options;
55
+ if (sources.length < 2) {
56
+ throw new Error('concatArchives: at least two sources are required');
57
+ }
58
+ const configs = await Promise.all(sources.map((s) => s.accessor.getConfig()));
59
+ const merged = mergeArchiveConfigs(configs, name);
60
+ await destination.setConfig(merged);
61
+ const knex = destination.getKnex();
62
+ const scope = buildScopeMap(merged.roots, merged);
63
+ const results = [];
64
+ for (const [index, source] of sources.entries()) {
65
+ callbacks?.onSourceStart?.(index, source.path);
66
+ const sourceDbPath = path.join(source.accessor.tmpDir, ArchiveDefault.SQLITE_DB_FILE_NAME);
67
+ const maxRows = await knex('content_items').max({
68
+ max: 'crawl_order',
69
+ });
70
+ const crawlOrderOffset = maxRows[0]?.max ?? 0;
71
+ const result = await transferArchiveRows({
72
+ knex,
73
+ sourceDbPath,
74
+ mode: { kind: 'concat' },
75
+ crawlOrderOffset,
76
+ sourceIndex: index,
77
+ callbacks,
78
+ });
79
+ results.push(result);
80
+ }
81
+ const postIndex = sources.length;
82
+ callbacks?.onPhase?.(postIndex, 'flatteningRedirects');
83
+ await flattenRedirectChains(knex);
84
+ callbacks?.onPhase?.(postIndex, 'reclassifyingResources');
85
+ await reclassifyResourceExternality(knex, scope, merged);
86
+ callbacks?.onPhase?.(postIndex, 'countingExternalInScope');
87
+ const externalInScopeCount = await countExternalPagesInScope(knex, scope, merged);
88
+ const inventoryListsCopied = await copyInventorySourceLists(destination, sources.map((s) => s.accessor.tmpDir));
89
+ return {
90
+ config: merged,
91
+ sources: results,
92
+ externalInScopeCount,
93
+ inventoryListsCopied,
94
+ };
95
+ }
@@ -0,0 +1,10 @@
1
+ import type { TransferPhase } from './types.js';
2
+ /**
3
+ * Ordered phase sequence {@link import('./transfer-archive-rows.js').transferArchiveRows}
4
+ * announces via `onPhase`, once per concat source, unconditionally and
5
+ * always in this order (see that function's own source — no branch skips
6
+ * a phase). Single source of truth for the per-source `TaskList` rows a
7
+ * CLI caller pre-builds (mirrors `VIEWER_READ_MODEL_FULL_BUILD_PHASES`'s
8
+ * same role for the read-model build).
9
+ */
10
+ export declare const CONCAT_SOURCE_TRANSFER_PHASES: readonly TransferPhase[];
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Ordered phase sequence {@link import('./transfer-archive-rows.js').transferArchiveRows}
3
+ * announces via `onPhase`, once per concat source, unconditionally and
4
+ * always in this order (see that function's own source — no branch skips
5
+ * a phase). Single source of truth for the per-source `TaskList` rows a
6
+ * CLI caller pre-builds (mirrors `VIEWER_READ_MODEL_FULL_BUILD_PHASES`'s
7
+ * same role for the read-model build).
8
+ */
9
+ export const CONCAT_SOURCE_TRANSFER_PHASES = [
10
+ 'planningContentItems',
11
+ 'copyingDictionaries',
12
+ 'copyingContentItems',
13
+ 'copyingPageRows',
14
+ 'copyingResources',
15
+ 'copyingJournals',
16
+ 'committing',
17
+ ];
@@ -0,0 +1,21 @@
1
+ /**
2
+ * SQL fragment computing a `content_items` row's "richness" rank for
3
+ * concat's same-URL conflict resolution: `2` (scraped internal page) beats
4
+ * `1` (scraped external HEAD-only observation) beats `0` (never scraped).
5
+ * Concat keeps whichever source's row ranks highest for a given URL; a tie
6
+ * is resolved by processing sources in argument order and overwriting on
7
+ * `>=` (see {@link import('./plan-content-items-for-concat.js').planContentItemsForConcat}),
8
+ * so the LAST source with an equal-or-better rank wins.
9
+ *
10
+ * This is the single definition of the ranking lattice — every other
11
+ * ranking (or a change to it) must go through this function so concat's
12
+ * conflict resolution cannot silently drift from what this doc describes.
13
+ * @param alias - The table alias (or bare table name) the fragment reads
14
+ * `scraped`/`is_external` from, e.g. `'s'` for `xfer_src.content_items s`.
15
+ * @returns A SQL expression (no trailing semicolon) evaluating to `0`, `1`, or `2`.
16
+ * @example
17
+ * ```ts
18
+ * trx.raw(`SELECT ${contentItemRankSql('s')} as rank FROM xfer_src.content_items s`);
19
+ * ```
20
+ */
21
+ export declare function contentItemRankSql(alias: string): string;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * SQL fragment computing a `content_items` row's "richness" rank for
3
+ * concat's same-URL conflict resolution: `2` (scraped internal page) beats
4
+ * `1` (scraped external HEAD-only observation) beats `0` (never scraped).
5
+ * Concat keeps whichever source's row ranks highest for a given URL; a tie
6
+ * is resolved by processing sources in argument order and overwriting on
7
+ * `>=` (see {@link import('./plan-content-items-for-concat.js').planContentItemsForConcat}),
8
+ * so the LAST source with an equal-or-better rank wins.
9
+ *
10
+ * This is the single definition of the ranking lattice — every other
11
+ * ranking (or a change to it) must go through this function so concat's
12
+ * conflict resolution cannot silently drift from what this doc describes.
13
+ * @param alias - The table alias (or bare table name) the fragment reads
14
+ * `scraped`/`is_external` from, e.g. `'s'` for `xfer_src.content_items s`.
15
+ * @returns A SQL expression (no trailing semicolon) evaluating to `0`, `1`, or `2`.
16
+ * @example
17
+ * ```ts
18
+ * trx.raw(`SELECT ${contentItemRankSql('s')} as rank FROM xfer_src.content_items s`);
19
+ * ```
20
+ */
21
+ export function contentItemRankSql(alias) {
22
+ return `(CASE WHEN ${alias}.scraped = 1 THEN 2 - ${alias}.is_external ELSE 0 END)`;
23
+ }
@@ -0,0 +1,28 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Copies `anchor_edges` for every `full`/`replace`-action page's OUTBOUND
4
+ * links, remapping both `page_id` (the link's own page — must be
5
+ * `full`/`replace`, same rule as every other page-scoped table) and
6
+ * `href_page_id` (the link's target — resolved through
7
+ * `temp.xfer_ci_plan` directly, via an INNER JOIN, NOT `LEFT JOIN`):
8
+ *
9
+ * - Concat: every source row has a plan entry (even `skip`), so the
10
+ * INNER JOIN always matches — an anchor to a `skip`ped URL still
11
+ * resolves to whichever destination row won that URL.
12
+ * - Split: a target NOT in the plan means "dropped" (out of scope and
13
+ * unreferenced by anything else) — the INNER JOIN drops that anchor
14
+ * row entirely rather than inserting a dangling `href_page_id`. This is
15
+ * intentional: `plan-content-items-for-split.ts`'s own closure already
16
+ * guarantees every anchor target of a KEPT page is itself kept (as
17
+ * `full` or `stub`), so in practice this INNER JOIN never actually
18
+ * filters anything out for split — it exists as a structural safety net,
19
+ * not as an active filter.
20
+ * @param trx - Transaction with the source ATTACHed as
21
+ * {@link TRANSFER_SOURCE_ALIAS}.
22
+ * @example
23
+ * ```ts
24
+ * await copyPageMeta(trx);
25
+ * await copyAnchorEdges(trx);
26
+ * ```
27
+ */
28
+ export declare function copyAnchorEdges(trx: Knex): Promise<void>;
@@ -0,0 +1,42 @@
1
+ import { TRANSFER_ACTION } from './transfer-action.js';
2
+ import { TRANSFER_SOURCE_ALIAS } from './transfer-source-alias.js';
3
+ const SRC = TRANSFER_SOURCE_ALIAS;
4
+ /**
5
+ * Copies `anchor_edges` for every `full`/`replace`-action page's OUTBOUND
6
+ * links, remapping both `page_id` (the link's own page — must be
7
+ * `full`/`replace`, same rule as every other page-scoped table) and
8
+ * `href_page_id` (the link's target — resolved through
9
+ * `temp.xfer_ci_plan` directly, via an INNER JOIN, NOT `LEFT JOIN`):
10
+ *
11
+ * - Concat: every source row has a plan entry (even `skip`), so the
12
+ * INNER JOIN always matches — an anchor to a `skip`ped URL still
13
+ * resolves to whichever destination row won that URL.
14
+ * - Split: a target NOT in the plan means "dropped" (out of scope and
15
+ * unreferenced by anything else) — the INNER JOIN drops that anchor
16
+ * row entirely rather than inserting a dangling `href_page_id`. This is
17
+ * intentional: `plan-content-items-for-split.ts`'s own closure already
18
+ * guarantees every anchor target of a KEPT page is itself kept (as
19
+ * `full` or `stub`), so in practice this INNER JOIN never actually
20
+ * filters anything out for split — it exists as a structural safety net,
21
+ * not as an active filter.
22
+ * @param trx - Transaction with the source ATTACHed as
23
+ * {@link TRANSFER_SOURCE_ALIAS}.
24
+ * @example
25
+ * ```ts
26
+ * await copyPageMeta(trx);
27
+ * await copyAnchorEdges(trx);
28
+ * ```
29
+ */
30
+ export async function copyAnchorEdges(trx) {
31
+ await trx.raw(`
32
+ INSERT INTO main.anchor_edges (page_id, href_page_id, count, first_hash, first_text_id)
33
+ SELECT p.dest_id, pd.dest_id, ae.count, ae.first_hash, mt.dest_id
34
+ FROM ${SRC}.anchor_edges ae
35
+ JOIN xfer_ci_plan p ON p.src_id = ae.page_id
36
+ AND p.action IN (${TRANSFER_ACTION.full}, ${TRANSFER_ACTION.replace})
37
+ JOIN xfer_ci_plan pd ON pd.src_id = ae.href_page_id
38
+ LEFT JOIN xfer_map_text_refs mt ON mt.src_id = ae.first_text_id
39
+ WHERE true
40
+ ON CONFLICT(page_id, href_page_id) DO NOTHING
41
+ `);
42
+ }
@@ -0,0 +1,39 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Copies every dictionary table's rows from the attached source into the
4
+ * destination unconditionally (`ON CONFLICT DO NOTHING` on the natural
5
+ * key), then builds a `temp.xfer_map_<table>` mapping every source row's id
6
+ * to its (possibly pre-existing, possibly freshly-inserted) destination
7
+ * id.
8
+ *
9
+ * Concat does not compute a "needed by kept content" filter first, unlike
10
+ * split (`copy-dictionaries-for-split.ts`) — every dictionary row is
11
+ * copied whether or not the content_items row(s) that referenced it ended
12
+ * up `full`/`replace` or `skip`. This can leave a handful of dictionary
13
+ * rows in the destination with no live referrer (a source's `skip`ped
14
+ * row's own `text_refs`/`url_refs`, say), the same accepted trade-off this
15
+ * archive already makes for `page_html_blobs` orphans (pending #23's GC) —
16
+ * computing a precise per-source needed-set here would roughly double the
17
+ * SQL in this file for a storage saving that matters far less than
18
+ * concat's own priority order (viewer compat > read perf > storage, see
19
+ * `viewer-priority-order.md`).
20
+ *
21
+ * `console_log_items` and `page_html_blobs` are copied by
22
+ * `copy-page-console-logs.ts` / `copy-page-html-blobs.ts` respectively —
23
+ * both need a source-row need-set derived from `page_console_logs`/
24
+ * `page_html_ref` regardless of concat/split, so they are not duplicated
25
+ * here.
26
+ * @param trx - Transaction with the source ATTACHed as
27
+ * {@link TRANSFER_SOURCE_ALIAS}. Must run after
28
+ * {@link import('./create-transfer-temp-tables.js').createTransferTempTables}.
29
+ * @throws {import('./types.js').TransferIntegrityError} If any table's
30
+ * mapped row count does not equal its source row count after the
31
+ * natural-key JOIN — see this function's body for why that should be
32
+ * structurally impossible in normal operation.
33
+ * @example
34
+ * ```ts
35
+ * await copyDictionariesForConcat(trx);
36
+ * // temp.xfer_map_url_refs, temp.xfer_map_text_refs, ... are now populated
37
+ * ```
38
+ */
39
+ export declare function copyDictionariesForConcat(trx: Knex): Promise<void>;
@@ -0,0 +1,81 @@
1
+ import { DICTIONARY_COPY_SPECS } from './dictionary-copy-specs.js';
2
+ import { listTransferColumns } from './list-transfer-columns.js';
3
+ import { quoteTransferIdentifier } from './quote-transfer-identifier.js';
4
+ import { TRANSFER_SOURCE_ALIAS } from './transfer-source-alias.js';
5
+ import { TransferIntegrityError } from './types.js';
6
+ /**
7
+ * Copies every dictionary table's rows from the attached source into the
8
+ * destination unconditionally (`ON CONFLICT DO NOTHING` on the natural
9
+ * key), then builds a `temp.xfer_map_<table>` mapping every source row's id
10
+ * to its (possibly pre-existing, possibly freshly-inserted) destination
11
+ * id.
12
+ *
13
+ * Concat does not compute a "needed by kept content" filter first, unlike
14
+ * split (`copy-dictionaries-for-split.ts`) — every dictionary row is
15
+ * copied whether or not the content_items row(s) that referenced it ended
16
+ * up `full`/`replace` or `skip`. This can leave a handful of dictionary
17
+ * rows in the destination with no live referrer (a source's `skip`ped
18
+ * row's own `text_refs`/`url_refs`, say), the same accepted trade-off this
19
+ * archive already makes for `page_html_blobs` orphans (pending #23's GC) —
20
+ * computing a precise per-source needed-set here would roughly double the
21
+ * SQL in this file for a storage saving that matters far less than
22
+ * concat's own priority order (viewer compat > read perf > storage, see
23
+ * `viewer-priority-order.md`).
24
+ *
25
+ * `console_log_items` and `page_html_blobs` are copied by
26
+ * `copy-page-console-logs.ts` / `copy-page-html-blobs.ts` respectively —
27
+ * both need a source-row need-set derived from `page_console_logs`/
28
+ * `page_html_ref` regardless of concat/split, so they are not duplicated
29
+ * here.
30
+ * @param trx - Transaction with the source ATTACHed as
31
+ * {@link TRANSFER_SOURCE_ALIAS}. Must run after
32
+ * {@link import('./create-transfer-temp-tables.js').createTransferTempTables}.
33
+ * @throws {import('./types.js').TransferIntegrityError} If any table's
34
+ * mapped row count does not equal its source row count after the
35
+ * natural-key JOIN — see this function's body for why that should be
36
+ * structurally impossible in normal operation.
37
+ * @example
38
+ * ```ts
39
+ * await copyDictionariesForConcat(trx);
40
+ * // temp.xfer_map_url_refs, temp.xfer_map_text_refs, ... are now populated
41
+ * ```
42
+ */
43
+ export async function copyDictionariesForConcat(trx) {
44
+ for (const spec of DICTIONARY_COPY_SPECS) {
45
+ const columns = await listTransferColumns(trx, TRANSFER_SOURCE_ALIAS, spec.table, [
46
+ 'id',
47
+ ]);
48
+ const quotedColumns = columns.map(quoteTransferIdentifier);
49
+ const columnList = quotedColumns.join(', ');
50
+ const conflictTarget = spec.naturalKey.map(quoteTransferIdentifier).join(', ');
51
+ await trx.raw(`
52
+ INSERT INTO main.${spec.table} (${columnList})
53
+ SELECT ${columnList} FROM ${TRANSFER_SOURCE_ALIAS}.${spec.table}
54
+ WHERE true
55
+ ON CONFLICT(${conflictTarget}) DO NOTHING
56
+ `);
57
+ const joinCondition = spec.naturalKey
58
+ .map((col) => `d.${quoteTransferIdentifier(col)} IS s.${quoteTransferIdentifier(col)}`)
59
+ .join(' AND ');
60
+ await trx.raw(`
61
+ INSERT INTO xfer_map_${spec.table} (src_id, dest_id)
62
+ SELECT s.id, d.id
63
+ FROM ${TRANSFER_SOURCE_ALIAS}.${spec.table} s
64
+ JOIN main.${spec.table} d ON ${joinCondition}
65
+ `);
66
+ // Every source row must resolve to a destination id — concat maps
67
+ // unconditionally (no needed-set filter), so `xfer_map_<table>`
68
+ // must cover every row of the attached source's own table. A gap
69
+ // here means the natural-key JOIN above failed to match a row this
70
+ // same function just inserted, which should be impossible; treat it
71
+ // as a hard integrity failure rather than let a missing map entry
72
+ // surface later as a confusing NULL FK deep in an unrelated table.
73
+ const sourceCountRows = await trx(`${TRANSFER_SOURCE_ALIAS}.${spec.table}`).count({ sourceCount: '*' });
74
+ const mappedCountRows = await trx(`xfer_map_${spec.table}`).count({ mappedCount: '*' });
75
+ const sourceCount = sourceCountRows[0]?.sourceCount ?? 0;
76
+ const mappedCount = mappedCountRows[0]?.mappedCount ?? 0;
77
+ if (Number(mappedCount) !== Number(sourceCount)) {
78
+ throw new TransferIntegrityError(`copyDictionariesForConcat: ${spec.table} has ${sourceCount} source row(s) but only ${mappedCount} mapped to a destination id`);
79
+ }
80
+ }
81
+ }
@@ -0,0 +1,29 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Copies only the dictionary rows referenced by kept content — the split
4
+ * counterpart of `copy-dictionaries-for-concat.ts`'s unconditional
5
+ * copy-everything. Split's entire purpose is size reduction, so (unlike
6
+ * concat, where computing a precise needed-set is not worth the
7
+ * complexity) a dropped page's dictionary rows must not survive into the
8
+ * output archive.
9
+ *
10
+ * Runs in two phases: collect every needed dictionary id into
11
+ * `temp.xfer_need_<table>` (this function's own private helpers, in
12
+ * dependency order — `console_log_items`' own needs must be collected
13
+ * AFTER `console_log_items` itself, since they derive from it), then copy
14
+ * + map each dictionary table exactly like concat but filtered to the
15
+ * needed set.
16
+ * @param trx - Transaction with the source ATTACHed as
17
+ * {@link TRANSFER_SOURCE_ALIAS}. Must run after
18
+ * `temp.xfer_ci_plan` AND `temp.xfer_ri_plan` are fully populated.
19
+ * @throws {import('./types.js').TransferIntegrityError} If any table's
20
+ * mapped row count does not equal its needed-row count after the
21
+ * natural-key JOIN.
22
+ * @example
23
+ * ```ts
24
+ * await planContentItemsForSplit(trx);
25
+ * await planResourceItems(trx, 'split');
26
+ * await copyDictionariesForSplit(trx);
27
+ * ```
28
+ */
29
+ export declare function copyDictionariesForSplit(trx: Knex): Promise<void>;