@nitpicker/archive 0.0.0 → 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 +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 +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 +350 -3
@@ -0,0 +1,224 @@
1
+ import { PAGE_META_COLUMN_MAPS } from '../page-meta-column-maps.js';
2
+ import { DICTIONARY_COPY_SPECS } from './dictionary-copy-specs.js';
3
+ import { listTransferColumns } from './list-transfer-columns.js';
4
+ import { quoteTransferIdentifier } from './quote-transfer-identifier.js';
5
+ import { TRANSFER_ACTION } from './transfer-action.js';
6
+ import { TRANSFER_SOURCE_ALIAS } from './transfer-source-alias.js';
7
+ import { TransferIntegrityError } from './types.js';
8
+ const SRC = TRANSFER_SOURCE_ALIAS;
9
+ const FULL = TRANSFER_ACTION.full;
10
+ /**
11
+ * Collects dictionary ids referenced directly by `content_items` /
12
+ * `resource_items` rows the plan keeps — every plan action for
13
+ * `content_items` (both `full` and `stub`; a stub still carries its own
14
+ * `url_id`/`content_type_id`/`header_set_id`, the same fields a genuine
15
+ * external HEAD-only observation would record) and every kept
16
+ * (`full`-only, per `plan-resource-items.ts`'s split branch) resource.
17
+ * @param trx - Transaction with the source ATTACHed.
18
+ */
19
+ async function collectContentItemLevelNeeds(trx) {
20
+ await trx.raw(`
21
+ INSERT OR IGNORE INTO xfer_need_url_refs (src_id)
22
+ SELECT s.url_id FROM ${SRC}.content_items s JOIN xfer_ci_plan p ON p.src_id = s.id
23
+ `);
24
+ await trx.raw(`
25
+ INSERT OR IGNORE INTO xfer_need_content_type_refs (src_id)
26
+ SELECT s.content_type_id FROM ${SRC}.content_items s JOIN xfer_ci_plan p ON p.src_id = s.id
27
+ WHERE s.content_type_id IS NOT NULL
28
+ `);
29
+ await trx.raw(`
30
+ INSERT OR IGNORE INTO xfer_need_header_sets (src_id)
31
+ SELECT s.header_set_id FROM ${SRC}.content_items s JOIN xfer_ci_plan p ON p.src_id = s.id
32
+ WHERE s.header_set_id IS NOT NULL
33
+ `);
34
+ await trx.raw(`
35
+ INSERT OR IGNORE INTO xfer_need_url_refs (src_id)
36
+ SELECT r.url_id FROM ${SRC}.resource_items r JOIN xfer_ri_plan rp ON rp.src_id = r.id
37
+ WHERE r.url_id IS NOT NULL
38
+ `);
39
+ await trx.raw(`
40
+ INSERT OR IGNORE INTO xfer_need_blob_refs (src_id)
41
+ SELECT r.url_blob_id FROM ${SRC}.resource_items r JOIN xfer_ri_plan rp ON rp.src_id = r.id
42
+ WHERE r.url_blob_id IS NOT NULL
43
+ `);
44
+ await trx.raw(`
45
+ INSERT OR IGNORE INTO xfer_need_content_type_refs (src_id)
46
+ SELECT r.content_type_id FROM ${SRC}.resource_items r JOIN xfer_ri_plan rp ON rp.src_id = r.id
47
+ WHERE r.content_type_id IS NOT NULL
48
+ `);
49
+ await trx.raw(`
50
+ INSERT OR IGNORE INTO xfer_need_header_sets (src_id)
51
+ SELECT r.header_set_id FROM ${SRC}.resource_items r JOIN xfer_ri_plan rp ON rp.src_id = r.id
52
+ WHERE r.header_set_id IS NOT NULL
53
+ `);
54
+ }
55
+ /**
56
+ * Collects dictionary ids referenced by page-scoped data (`page_meta`,
57
+ * `anchor_edges`, `image_items`) — only from `full`
58
+ * pages, since `stub` rows never get any of these copied
59
+ * (`copy-page-meta.ts` et al. only ever read `full`-action rows).
60
+ * @param trx - Transaction with the source ATTACHed.
61
+ */
62
+ async function collectPageScopedNeeds(trx) {
63
+ for (const { target } of PAGE_META_COLUMN_MAPS.url) {
64
+ await trx.raw(`
65
+ INSERT OR IGNORE INTO xfer_need_url_refs (src_id)
66
+ SELECT pm.${target} FROM ${SRC}.page_meta pm
67
+ JOIN xfer_ci_plan p ON p.src_id = pm.page_id AND p.action = ${FULL}
68
+ WHERE pm.${target} IS NOT NULL
69
+ `);
70
+ }
71
+ for (const { target } of PAGE_META_COLUMN_MAPS.text) {
72
+ await trx.raw(`
73
+ INSERT OR IGNORE INTO xfer_need_text_refs (src_id)
74
+ SELECT pm.${target} FROM ${SRC}.page_meta pm
75
+ JOIN xfer_ci_plan p ON p.src_id = pm.page_id AND p.action = ${FULL}
76
+ WHERE pm.${target} IS NOT NULL
77
+ `);
78
+ }
79
+ await trx.raw(`
80
+ INSERT OR IGNORE INTO xfer_need_json_refs (src_id)
81
+ SELECT pm.meta_extras_json_id FROM ${SRC}.page_meta pm
82
+ JOIN xfer_ci_plan p ON p.src_id = pm.page_id AND p.action = ${FULL}
83
+ WHERE pm.meta_extras_json_id IS NOT NULL
84
+ `);
85
+ await trx.raw(`
86
+ INSERT OR IGNORE INTO xfer_need_text_refs (src_id)
87
+ SELECT ae.first_text_id FROM ${SRC}.anchor_edges ae
88
+ JOIN xfer_ci_plan p ON p.src_id = ae.page_id AND p.action = ${FULL}
89
+ WHERE ae.first_text_id IS NOT NULL
90
+ `);
91
+ for (const column of ['src_url_id', 'current_src_url_id']) {
92
+ await trx.raw(`
93
+ INSERT OR IGNORE INTO xfer_need_url_refs (src_id)
94
+ SELECT ii.${column} FROM ${SRC}.image_items ii
95
+ JOIN xfer_ci_plan p ON p.src_id = ii.page_id AND p.action = ${FULL}
96
+ WHERE ii.${column} IS NOT NULL
97
+ `);
98
+ }
99
+ for (const column of ['src_blob_id', 'current_src_blob_id']) {
100
+ await trx.raw(`
101
+ INSERT OR IGNORE INTO xfer_need_blob_refs (src_id)
102
+ SELECT ii.${column} FROM ${SRC}.image_items ii
103
+ JOIN xfer_ci_plan p ON p.src_id = ii.page_id AND p.action = ${FULL}
104
+ WHERE ii.${column} IS NOT NULL
105
+ `);
106
+ }
107
+ await trx.raw(`
108
+ INSERT OR IGNORE INTO xfer_need_text_refs (src_id)
109
+ SELECT ii.alt_text_id FROM ${SRC}.image_items ii
110
+ JOIN xfer_ci_plan p ON p.src_id = ii.page_id AND p.action = ${FULL}
111
+ WHERE ii.alt_text_id IS NOT NULL
112
+ `);
113
+ await trx.raw(`
114
+ INSERT OR IGNORE INTO xfer_need_text_refs (src_id)
115
+ SELECT ii.dom_path_text_id FROM ${SRC}.image_items ii
116
+ JOIN xfer_ci_plan p ON p.src_id = ii.page_id AND p.action = ${FULL}
117
+ `);
118
+ }
119
+ /**
120
+ * Collects `console_log_items` referenced by kept pages' `page_console_logs`,
121
+ * then that dictionary's OWN url/text/json needs — a second-order need
122
+ * only `console_log_items` has, since it is itself a dictionary that
123
+ * points into three other dictionaries.
124
+ * @param trx - Transaction with the source ATTACHed.
125
+ */
126
+ async function collectConsoleLogNeeds(trx) {
127
+ await trx.raw(`
128
+ INSERT OR IGNORE INTO xfer_need_console_log_items (src_id)
129
+ SELECT pcl.consoleLogId FROM ${SRC}.page_console_logs pcl
130
+ JOIN xfer_ci_plan p ON p.src_id = pcl.pageId AND p.action = ${FULL}
131
+ `);
132
+ await trx.raw(`
133
+ INSERT OR IGNORE INTO xfer_need_url_refs (src_id)
134
+ SELECT cli.loc_url_id FROM ${SRC}.console_log_items cli
135
+ JOIN xfer_need_console_log_items n ON n.src_id = cli.id
136
+ WHERE cli.loc_url_id IS NOT NULL
137
+ `);
138
+ await trx.raw(`
139
+ INSERT OR IGNORE INTO xfer_need_text_refs (src_id)
140
+ SELECT cli.text_id FROM ${SRC}.console_log_items cli
141
+ JOIN xfer_need_console_log_items n ON n.src_id = cli.id
142
+ WHERE cli.text_id IS NOT NULL
143
+ `);
144
+ await trx.raw(`
145
+ INSERT OR IGNORE INTO xfer_need_text_refs (src_id)
146
+ SELECT cli.stack_text_id FROM ${SRC}.console_log_items cli
147
+ JOIN xfer_need_console_log_items n ON n.src_id = cli.id
148
+ WHERE cli.stack_text_id IS NOT NULL
149
+ `);
150
+ await trx.raw(`
151
+ INSERT OR IGNORE INTO xfer_need_json_refs (src_id)
152
+ SELECT cli.args_json_id FROM ${SRC}.console_log_items cli
153
+ JOIN xfer_need_console_log_items n ON n.src_id = cli.id
154
+ WHERE cli.args_json_id IS NOT NULL
155
+ `);
156
+ }
157
+ /**
158
+ * Copies only the dictionary rows referenced by kept content — the split
159
+ * counterpart of `copy-dictionaries-for-concat.ts`'s unconditional
160
+ * copy-everything. Split's entire purpose is size reduction, so (unlike
161
+ * concat, where computing a precise needed-set is not worth the
162
+ * complexity) a dropped page's dictionary rows must not survive into the
163
+ * output archive.
164
+ *
165
+ * Runs in two phases: collect every needed dictionary id into
166
+ * `temp.xfer_need_<table>` (this function's own private helpers, in
167
+ * dependency order — `console_log_items`' own needs must be collected
168
+ * AFTER `console_log_items` itself, since they derive from it), then copy
169
+ * + map each dictionary table exactly like concat but filtered to the
170
+ * needed set.
171
+ * @param trx - Transaction with the source ATTACHed as
172
+ * {@link TRANSFER_SOURCE_ALIAS}. Must run after
173
+ * `temp.xfer_ci_plan` AND `temp.xfer_ri_plan` are fully populated.
174
+ * @throws {import('./types.js').TransferIntegrityError} If any table's
175
+ * mapped row count does not equal its needed-row count after the
176
+ * natural-key JOIN.
177
+ * @example
178
+ * ```ts
179
+ * await planContentItemsForSplit(trx);
180
+ * await planResourceItems(trx, 'split');
181
+ * await copyDictionariesForSplit(trx);
182
+ * ```
183
+ */
184
+ export async function copyDictionariesForSplit(trx) {
185
+ await collectContentItemLevelNeeds(trx);
186
+ await collectPageScopedNeeds(trx);
187
+ await collectConsoleLogNeeds(trx);
188
+ for (const spec of DICTIONARY_COPY_SPECS) {
189
+ const columns = await listTransferColumns(trx, SRC, spec.table, ['id']);
190
+ const quotedColumns = columns.map(quoteTransferIdentifier);
191
+ const columnList = quotedColumns.join(', ');
192
+ const conflictTarget = spec.naturalKey.map(quoteTransferIdentifier).join(', ');
193
+ await trx.raw(`
194
+ INSERT INTO main.${spec.table} (${columnList})
195
+ SELECT ${columnList} FROM ${SRC}.${spec.table} s
196
+ JOIN xfer_need_${spec.table} n ON n.src_id = s.id
197
+ WHERE true
198
+ ON CONFLICT(${conflictTarget}) DO NOTHING
199
+ `);
200
+ const joinCondition = spec.naturalKey
201
+ .map((col) => `d.${quoteTransferIdentifier(col)} IS s.${quoteTransferIdentifier(col)}`)
202
+ .join(' AND ');
203
+ await trx.raw(`
204
+ INSERT INTO xfer_map_${spec.table} (src_id, dest_id)
205
+ SELECT s.id, d.id
206
+ FROM ${SRC}.${spec.table} s
207
+ JOIN xfer_need_${spec.table} n ON n.src_id = s.id
208
+ JOIN main.${spec.table} d ON ${joinCondition}
209
+ `);
210
+ // Every NEEDED source row must resolve to a destination id (unlike
211
+ // concat, split's needed-set can legitimately be a strict subset of
212
+ // the source table — that is the whole point). A gap between
213
+ // `xfer_need_<table>` and `xfer_map_<table>` means the natural-key
214
+ // JOIN failed to match a row this same function just inserted,
215
+ // which should be impossible; treat it as a hard integrity failure.
216
+ const neededCountRows = await trx(`xfer_need_${spec.table}`).count({ neededCount: '*' });
217
+ const mappedCountRows = await trx(`xfer_map_${spec.table}`).count({ mappedCount: '*' });
218
+ const neededCount = neededCountRows[0]?.neededCount ?? 0;
219
+ const mappedCount = mappedCountRows[0]?.mappedCount ?? 0;
220
+ if (Number(mappedCount) !== Number(neededCount)) {
221
+ throw new TransferIntegrityError(`copyDictionariesForSplit: ${spec.table} needs ${neededCount} row(s) but only ${mappedCount} mapped to a destination id`);
222
+ }
223
+ }
224
+ }
@@ -0,0 +1,27 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Copies `header_set_entries` and `header_flags` — the two children of
4
+ * `header_sets` that have no id of their own to map (`header_set_entries`
5
+ * is `WITHOUT ROWID` with a composite PK; `header_flags`' PK IS
6
+ * `header_set_id`), so both are remapped and copied directly rather than
7
+ * going through the generic `temp.xfer_map_<table>` machinery
8
+ * {@link import('./copy-dictionaries-for-concat.js').copyDictionariesForConcat} /
9
+ * {@link import('./copy-dictionaries-for-split.js').copyDictionariesForSplit}
10
+ * use for id-keyed dictionaries.
11
+ *
12
+ * Both are filtered implicitly: only `header_sets` rows that were
13
+ * actually copied have an entry in `temp.xfer_map_header_sets`, so a
14
+ * source header set that split's need-computation skipped (belongs only
15
+ * to a dropped page) naturally contributes no entries/flags row either —
16
+ * no separate need-set for these two tables is required.
17
+ * @param trx - Transaction with the source ATTACHed as
18
+ * {@link TRANSFER_SOURCE_ALIAS}. Must run after `temp.xfer_map_header_sets`,
19
+ * `temp.xfer_map_header_name_refs`, and `temp.xfer_map_header_value_refs`
20
+ * are populated — i.e. after `copyDictionariesForConcat`/`copyDictionariesForSplit`.
21
+ * @example
22
+ * ```ts
23
+ * await copyDictionariesForConcat(trx); // or copyDictionariesForSplit
24
+ * await copyHeaderSetChildren(trx);
25
+ * ```
26
+ */
27
+ export declare function copyHeaderSetChildren(trx: Knex): Promise<void>;
@@ -0,0 +1,51 @@
1
+ import { listTransferColumns } from './list-transfer-columns.js';
2
+ import { quoteTransferIdentifier } from './quote-transfer-identifier.js';
3
+ import { TRANSFER_SOURCE_ALIAS } from './transfer-source-alias.js';
4
+ /**
5
+ * Copies `header_set_entries` and `header_flags` — the two children of
6
+ * `header_sets` that have no id of their own to map (`header_set_entries`
7
+ * is `WITHOUT ROWID` with a composite PK; `header_flags`' PK IS
8
+ * `header_set_id`), so both are remapped and copied directly rather than
9
+ * going through the generic `temp.xfer_map_<table>` machinery
10
+ * {@link import('./copy-dictionaries-for-concat.js').copyDictionariesForConcat} /
11
+ * {@link import('./copy-dictionaries-for-split.js').copyDictionariesForSplit}
12
+ * use for id-keyed dictionaries.
13
+ *
14
+ * Both are filtered implicitly: only `header_sets` rows that were
15
+ * actually copied have an entry in `temp.xfer_map_header_sets`, so a
16
+ * source header set that split's need-computation skipped (belongs only
17
+ * to a dropped page) naturally contributes no entries/flags row either —
18
+ * no separate need-set for these two tables is required.
19
+ * @param trx - Transaction with the source ATTACHed as
20
+ * {@link TRANSFER_SOURCE_ALIAS}. Must run after `temp.xfer_map_header_sets`,
21
+ * `temp.xfer_map_header_name_refs`, and `temp.xfer_map_header_value_refs`
22
+ * are populated — i.e. after `copyDictionariesForConcat`/`copyDictionariesForSplit`.
23
+ * @example
24
+ * ```ts
25
+ * await copyDictionariesForConcat(trx); // or copyDictionariesForSplit
26
+ * await copyHeaderSetChildren(trx);
27
+ * ```
28
+ */
29
+ export async function copyHeaderSetChildren(trx) {
30
+ await trx.raw(`
31
+ INSERT INTO main.header_set_entries (header_set_id, name_id, occurrence, value_id, is_volatile)
32
+ SELECT mhs.dest_id, mhn.dest_id, s.occurrence, mhv.dest_id, s.is_volatile
33
+ FROM ${TRANSFER_SOURCE_ALIAS}.header_set_entries s
34
+ JOIN xfer_map_header_sets mhs ON mhs.src_id = s.header_set_id
35
+ JOIN xfer_map_header_name_refs mhn ON mhn.src_id = s.name_id
36
+ JOIN xfer_map_header_value_refs mhv ON mhv.src_id = s.value_id
37
+ WHERE true
38
+ ON CONFLICT(header_set_id, name_id, occurrence) DO NOTHING
39
+ `);
40
+ const flagColumns = await listTransferColumns(trx, TRANSFER_SOURCE_ALIAS, 'header_flags', ['header_set_id']);
41
+ const quotedFlagColumns = flagColumns.map(quoteTransferIdentifier);
42
+ const selectList = quotedFlagColumns.map((col) => `s.${col}`).join(', ');
43
+ await trx.raw(`
44
+ INSERT INTO main.header_flags (header_set_id, ${quotedFlagColumns.join(', ')})
45
+ SELECT mhs.dest_id, ${selectList}
46
+ FROM ${TRANSFER_SOURCE_ALIAS}.header_flags s
47
+ JOIN xfer_map_header_sets mhs ON mhs.src_id = s.header_set_id
48
+ WHERE true
49
+ ON CONFLICT(header_set_id) DO NOTHING
50
+ `);
51
+ }
@@ -0,0 +1,21 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Copies `image_items` for every `full`/`replace`-action page (never
4
+ * `stub`/`skip` — see `copy-page-meta.ts`'s docs for the same rule).
5
+ *
6
+ * Like `page_meta`, several columns are FK-shaped but each points at its
7
+ * own distinct dictionary row, so each gets a uniquely-aliased join
8
+ * rather than one shared alias. `dom_path_text_id` is `NOT NULL` in the
9
+ * schema (every image resolves to a DOM-position label, falling back to
10
+ * a synthetic `img[unknown]` text at write time — see
11
+ * `create-entity-tables.ts`), so an unmapped id here would surface
12
+ * immediately as a constraint violation rather than silently going missing.
13
+ * @param trx - Transaction with the source ATTACHed as
14
+ * {@link TRANSFER_SOURCE_ALIAS}.
15
+ * @example
16
+ * ```ts
17
+ * await copyPageMeta(trx);
18
+ * await copyImageItems(trx);
19
+ * ```
20
+ */
21
+ export declare function copyImageItems(trx: Knex): Promise<void>;
@@ -0,0 +1,62 @@
1
+ import { listTransferColumns } from './list-transfer-columns.js';
2
+ import { quoteTransferIdentifier } from './quote-transfer-identifier.js';
3
+ import { TRANSFER_ACTION } from './transfer-action.js';
4
+ import { TRANSFER_SOURCE_ALIAS } from './transfer-source-alias.js';
5
+ const SRC = TRANSFER_SOURCE_ALIAS;
6
+ /** `image_items` columns that resolve through `temp.xfer_map_url_refs`. */
7
+ const URL_COLUMNS = new Set(['src_url_id', 'current_src_url_id']);
8
+ /** `image_items` columns that resolve through `temp.xfer_map_blob_refs`. */
9
+ const BLOB_COLUMNS = new Set(['src_blob_id', 'current_src_blob_id']);
10
+ /**
11
+ * Copies `image_items` for every `full`/`replace`-action page (never
12
+ * `stub`/`skip` — see `copy-page-meta.ts`'s docs for the same rule).
13
+ *
14
+ * Like `page_meta`, several columns are FK-shaped but each points at its
15
+ * own distinct dictionary row, so each gets a uniquely-aliased join
16
+ * rather than one shared alias. `dom_path_text_id` is `NOT NULL` in the
17
+ * schema (every image resolves to a DOM-position label, falling back to
18
+ * a synthetic `img[unknown]` text at write time — see
19
+ * `create-entity-tables.ts`), so an unmapped id here would surface
20
+ * immediately as a constraint violation rather than silently going missing.
21
+ * @param trx - Transaction with the source ATTACHed as
22
+ * {@link TRANSFER_SOURCE_ALIAS}.
23
+ * @example
24
+ * ```ts
25
+ * await copyPageMeta(trx);
26
+ * await copyImageItems(trx);
27
+ * ```
28
+ */
29
+ export async function copyImageItems(trx) {
30
+ const columns = await listTransferColumns(trx, SRC, 'image_items', ['id', 'page_id']);
31
+ const joins = [];
32
+ const exprFor = (column) => {
33
+ const quotedColumn = quoteTransferIdentifier(column);
34
+ if (column === 'alt_text_id' || column === 'dom_path_text_id') {
35
+ const alias = `mt_${column}`;
36
+ joins.push(`LEFT JOIN xfer_map_text_refs ${alias} ON ${alias}.src_id = ii.${quotedColumn}`);
37
+ return `${alias}.dest_id`;
38
+ }
39
+ if (URL_COLUMNS.has(column)) {
40
+ const alias = `mu_${column}`;
41
+ joins.push(`LEFT JOIN xfer_map_url_refs ${alias} ON ${alias}.src_id = ii.${quotedColumn}`);
42
+ return `${alias}.dest_id`;
43
+ }
44
+ if (BLOB_COLUMNS.has(column)) {
45
+ const alias = `mb_${column}`;
46
+ joins.push(`LEFT JOIN xfer_map_blob_refs ${alias} ON ${alias}.src_id = ii.${quotedColumn}`);
47
+ return `${alias}.dest_id`;
48
+ }
49
+ return `ii.${quotedColumn}`;
50
+ };
51
+ const selectList = columns.map(exprFor).join(', ');
52
+ const joinList = joins.join('\n');
53
+ const quotedColumnList = columns.map(quoteTransferIdentifier).join(', ');
54
+ await trx.raw(`
55
+ INSERT INTO main.image_items (page_id, ${quotedColumnList})
56
+ SELECT p.dest_id, ${selectList}
57
+ FROM ${SRC}.image_items ii
58
+ JOIN xfer_ci_plan p ON p.src_id = ii.page_id
59
+ AND p.action IN (${TRANSFER_ACTION.full}, ${TRANSFER_ACTION.replace})
60
+ ${joinList}
61
+ `);
62
+ }
@@ -0,0 +1,30 @@
1
+ import type Archive from '../archive.js';
2
+ /**
3
+ * Copies every `inventory/<sha256>.txt` source list from each source's
4
+ * extracted tmpDir into the destination archive, via
5
+ * `Archive#saveInventorySourceList` (the same write path `--inventory`/
6
+ * `--recrawl` themselves use) — a plain filesystem operation, not SQL, so
7
+ * this takes tmpDir paths and the destination `Archive`, not a `Knex`
8
+ * transaction.
9
+ *
10
+ * Filenames are content-addressed (the sha256 of the list's own bytes),
11
+ * so the same list appearing in two sources (an operator re-running
12
+ * `--inventory` with the same file against both, say) copies once — `seen`
13
+ * dedupes across sources, and `saveInventorySourceList` itself is a
14
+ * same-name overwrite (idempotent) even without that guard. Anything not
15
+ * matching {@link INVENTORY_FILE_NAME_PATTERN} — including a source whose
16
+ * `inventory/` directory does not exist at all, the common case — is
17
+ * skipped rather than copied verbatim, so an unrelated stray file
18
+ * (there should never be one, but this function does not trust that)
19
+ * cannot be smuggled into the output archive.
20
+ * @param destination - The (writer) destination archive, opened with
21
+ * `openPluginData: true` so `write()` will re-tar this directory.
22
+ * @param sourceTmpDirs - Each source's extracted tmpDir
23
+ * (`accessor.tmpDir`), in argument order.
24
+ * @returns The number of distinct source lists copied.
25
+ * @example
26
+ * ```ts
27
+ * const copied = await copyInventorySourceLists(destination, sources.map((s) => s.tmpDir));
28
+ * ```
29
+ */
30
+ export declare function copyInventorySourceLists(destination: Archive, sourceTmpDirs: readonly string[]): Promise<number>;
@@ -0,0 +1,61 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ /** Matches `Archive.saveInventorySourceList`'s own naming contract: `<sha256 hex>.txt`. */
4
+ const INVENTORY_FILE_NAME_PATTERN = /^[0-9a-f]{64}\.txt$/;
5
+ /**
6
+ * Copies every `inventory/<sha256>.txt` source list from each source's
7
+ * extracted tmpDir into the destination archive, via
8
+ * `Archive#saveInventorySourceList` (the same write path `--inventory`/
9
+ * `--recrawl` themselves use) — a plain filesystem operation, not SQL, so
10
+ * this takes tmpDir paths and the destination `Archive`, not a `Knex`
11
+ * transaction.
12
+ *
13
+ * Filenames are content-addressed (the sha256 of the list's own bytes),
14
+ * so the same list appearing in two sources (an operator re-running
15
+ * `--inventory` with the same file against both, say) copies once — `seen`
16
+ * dedupes across sources, and `saveInventorySourceList` itself is a
17
+ * same-name overwrite (idempotent) even without that guard. Anything not
18
+ * matching {@link INVENTORY_FILE_NAME_PATTERN} — including a source whose
19
+ * `inventory/` directory does not exist at all, the common case — is
20
+ * skipped rather than copied verbatim, so an unrelated stray file
21
+ * (there should never be one, but this function does not trust that)
22
+ * cannot be smuggled into the output archive.
23
+ * @param destination - The (writer) destination archive, opened with
24
+ * `openPluginData: true` so `write()` will re-tar this directory.
25
+ * @param sourceTmpDirs - Each source's extracted tmpDir
26
+ * (`accessor.tmpDir`), in argument order.
27
+ * @returns The number of distinct source lists copied.
28
+ * @example
29
+ * ```ts
30
+ * const copied = await copyInventorySourceLists(destination, sources.map((s) => s.tmpDir));
31
+ * ```
32
+ */
33
+ export async function copyInventorySourceLists(destination, sourceTmpDirs) {
34
+ const seen = new Set();
35
+ for (const sourceTmpDir of sourceTmpDirs) {
36
+ const inventoryDir = path.join(sourceTmpDir, 'inventory');
37
+ let entries;
38
+ try {
39
+ entries = await fs.readdir(inventoryDir);
40
+ }
41
+ catch (error) {
42
+ if (error.code === 'ENOENT') {
43
+ continue;
44
+ }
45
+ throw error;
46
+ }
47
+ for (const entry of entries) {
48
+ if (!INVENTORY_FILE_NAME_PATTERN.test(entry)) {
49
+ continue;
50
+ }
51
+ const sha256 = entry.slice(0, -'.txt'.length);
52
+ if (seen.has(sha256)) {
53
+ continue;
54
+ }
55
+ seen.add(sha256);
56
+ const bytes = await fs.readFile(path.join(inventoryDir, entry));
57
+ await destination.saveInventorySourceList(sha256, bytes);
58
+ }
59
+ }
60
+ return seen.size;
61
+ }
@@ -0,0 +1,30 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Copies the four append-only journal tables with fresh (auto-assigned)
4
+ * ids: `list_reconcile_runs`, `network_outages`, `dedupe_cap_events`
5
+ * (none has an FK, so a plain `INSERT ... SELECT` of every non-`id`
6
+ * column suffices — no id remapping needed for these three), and
7
+ * `crawl_errors` (also no FK, but split additionally drops a row whose
8
+ * `url` is no longer present in the output's `url_refs`, so a dropped
9
+ * page's crawl-time errors do not linger in an archive that no longer
10
+ * contains it — concat keeps every `crawl_errors` row unconditionally,
11
+ * since nothing was dropped).
12
+ *
13
+ * `content_items.dedupe_cap_event_id` is deliberately NOT remapped here
14
+ * to point at the copied `dedupe_cap_events` rows — it is always written
15
+ * `NULL` by `insert-content-items.ts`/`replace-content-items.ts` and the
16
+ * mandatory viewer read-model rebuild's `backfillDedupeCapEventId` fully
17
+ * recomputes it afterwards by matching `content_items` rows against
18
+ * `dedupe_cap_events.shape_key` from scratch, so writing a remapped id
19
+ * here would only be immediately overwritten.
20
+ * @param trx - Transaction with the source ATTACHed as
21
+ * {@link TRANSFER_SOURCE_ALIAS}.
22
+ * @param mode - `'split'` filters `crawl_errors` to rows whose `url` (if
23
+ * any) survives in the destination's `url_refs`; `'concat'` copies every
24
+ * row unconditionally.
25
+ * @example
26
+ * ```ts
27
+ * await copyJournalTables(trx, 'split');
28
+ * ```
29
+ */
30
+ export declare function copyJournalTables(trx: Knex, mode: 'concat' | 'split'): Promise<void>;
@@ -0,0 +1,56 @@
1
+ import { listTransferColumns } from './list-transfer-columns.js';
2
+ import { quoteTransferIdentifier } from './quote-transfer-identifier.js';
3
+ import { TRANSFER_SOURCE_ALIAS } from './transfer-source-alias.js';
4
+ const SRC = TRANSFER_SOURCE_ALIAS;
5
+ /**
6
+ * Copies the four append-only journal tables with fresh (auto-assigned)
7
+ * ids: `list_reconcile_runs`, `network_outages`, `dedupe_cap_events`
8
+ * (none has an FK, so a plain `INSERT ... SELECT` of every non-`id`
9
+ * column suffices — no id remapping needed for these three), and
10
+ * `crawl_errors` (also no FK, but split additionally drops a row whose
11
+ * `url` is no longer present in the output's `url_refs`, so a dropped
12
+ * page's crawl-time errors do not linger in an archive that no longer
13
+ * contains it — concat keeps every `crawl_errors` row unconditionally,
14
+ * since nothing was dropped).
15
+ *
16
+ * `content_items.dedupe_cap_event_id` is deliberately NOT remapped here
17
+ * to point at the copied `dedupe_cap_events` rows — it is always written
18
+ * `NULL` by `insert-content-items.ts`/`replace-content-items.ts` and the
19
+ * mandatory viewer read-model rebuild's `backfillDedupeCapEventId` fully
20
+ * recomputes it afterwards by matching `content_items` rows against
21
+ * `dedupe_cap_events.shape_key` from scratch, so writing a remapped id
22
+ * here would only be immediately overwritten.
23
+ * @param trx - Transaction with the source ATTACHed as
24
+ * {@link TRANSFER_SOURCE_ALIAS}.
25
+ * @param mode - `'split'` filters `crawl_errors` to rows whose `url` (if
26
+ * any) survives in the destination's `url_refs`; `'concat'` copies every
27
+ * row unconditionally.
28
+ * @example
29
+ * ```ts
30
+ * await copyJournalTables(trx, 'split');
31
+ * ```
32
+ */
33
+ export async function copyJournalTables(trx, mode) {
34
+ for (const table of ['list_reconcile_runs', 'network_outages', 'dedupe_cap_events']) {
35
+ const columns = await listTransferColumns(trx, SRC, table, ['id']);
36
+ const quoted = columns.map(quoteTransferIdentifier);
37
+ const columnList = quoted.map((col) => `s.${col}`).join(', ');
38
+ await trx.raw(`
39
+ INSERT INTO main.${table} (${quoted.join(', ')})
40
+ SELECT ${columnList} FROM ${SRC}.${table} s
41
+ `);
42
+ }
43
+ const crawlErrorColumns = await listTransferColumns(trx, SRC, 'crawl_errors', ['id']);
44
+ const quotedCrawlErrorColumns = crawlErrorColumns.map(quoteTransferIdentifier);
45
+ const crawlErrorSelectList = quotedCrawlErrorColumns
46
+ .map((col) => `s.${col}`)
47
+ .join(', ');
48
+ const urlSurvivesFilter = mode === 'split'
49
+ ? `WHERE s.url IS NULL OR EXISTS (SELECT 1 FROM main.url_refs u WHERE u.url = s.url)`
50
+ : '';
51
+ await trx.raw(`
52
+ INSERT INTO main.crawl_errors (${quotedCrawlErrorColumns.join(', ')})
53
+ SELECT ${crawlErrorSelectList} FROM ${SRC}.crawl_errors s
54
+ ${urlSurvivesFilter}
55
+ `);
56
+ }
@@ -0,0 +1,16 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Copies `page_console_logs` (one row per page/console-log occurrence)
4
+ * for every `full`/`replace`-action page, remapping `consoleLogId`
5
+ * through `temp.xfer_map_console_log_items`.
6
+ * @param trx - Transaction with the source ATTACHed as
7
+ * {@link TRANSFER_SOURCE_ALIAS}. Must run after
8
+ * `copyDictionariesForConcat`/`copyDictionariesForSplit` has populated
9
+ * `temp.xfer_map_console_log_items`.
10
+ * @example
11
+ * ```ts
12
+ * await copyPageMeta(trx);
13
+ * await copyPageConsoleLogs(trx);
14
+ * ```
15
+ */
16
+ export declare function copyPageConsoleLogs(trx: Knex): Promise<void>;
@@ -0,0 +1,27 @@
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 `page_console_logs` (one row per page/console-log occurrence)
6
+ * for every `full`/`replace`-action page, remapping `consoleLogId`
7
+ * through `temp.xfer_map_console_log_items`.
8
+ * @param trx - Transaction with the source ATTACHed as
9
+ * {@link TRANSFER_SOURCE_ALIAS}. Must run after
10
+ * `copyDictionariesForConcat`/`copyDictionariesForSplit` has populated
11
+ * `temp.xfer_map_console_log_items`.
12
+ * @example
13
+ * ```ts
14
+ * await copyPageMeta(trx);
15
+ * await copyPageConsoleLogs(trx);
16
+ * ```
17
+ */
18
+ export async function copyPageConsoleLogs(trx) {
19
+ await trx.raw(`
20
+ INSERT INTO main.page_console_logs (pageId, consoleLogId, ts)
21
+ SELECT p.dest_id, m.dest_id, pcl.ts
22
+ FROM ${SRC}.page_console_logs pcl
23
+ JOIN xfer_ci_plan p ON p.src_id = pcl.pageId
24
+ AND p.action IN (${TRANSFER_ACTION.full}, ${TRANSFER_ACTION.replace})
25
+ JOIN xfer_map_console_log_items m ON m.src_id = pcl.consoleLogId
26
+ `);
27
+ }
@@ -0,0 +1,31 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Copies `page_html_blobs` rows referenced by kept pages' `page_html_ref`.
4
+ *
5
+ * `page_html_blobs.hash` is itself the content-addressed identity (the
6
+ * table's PK, computed the same way in every archive) — unlike every
7
+ * other dictionary in `archive/transfer/`, there is no separate integer id
8
+ * to remap: {@link import('./copy-simple-page-scoped-tables.js').copySimplePageScopedTables}'s
9
+ * `page_html_ref` copy carries the source's `hash` value straight through
10
+ * unchanged, and it already resolves in the destination once this
11
+ * function has run. No `temp.xfer_map_*` table exists for this dictionary.
12
+ *
13
+ * The filter (`action IN (full, replace)`) applies identically to both
14
+ * transfer modes: split's plan never assigns `replace`, so for split this
15
+ * is exactly "full pages only"; concat's plan never assigns `stub`, so for
16
+ * concat this is exactly "every page whose `page_html_ref` copy will
17
+ * actually run" (`stub` rows, split-only, never get a `page_html_ref`
18
+ * copied either way).
19
+ * @param trx - Transaction with the source ATTACHed as
20
+ * {@link TRANSFER_SOURCE_ALIAS}. Must run after `temp.xfer_ci_plan` is
21
+ * fully populated, before `copy-simple-page-scoped-tables.ts`'s `page_html_ref` copy
22
+ * (which assumes the blob it points at already exists — `page_html_ref`
23
+ * has an FK on `hash`).
24
+ * @example
25
+ * ```ts
26
+ * await planContentItemsForSplit(trx);
27
+ * await copyPageHtmlBlobs(trx);
28
+ * await copySimplePageScopedTables(trx); // copies page_html_ref among other tables
29
+ * ```
30
+ */
31
+ export declare function copyPageHtmlBlobs(trx: Knex): Promise<void>;