@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,43 @@
1
+ import { TRANSFER_ACTION } from './transfer-action.js';
2
+ import { TRANSFER_SOURCE_ALIAS } from './transfer-source-alias.js';
3
+ /**
4
+ * Copies `page_html_blobs` rows referenced by kept pages' `page_html_ref`.
5
+ *
6
+ * `page_html_blobs.hash` is itself the content-addressed identity (the
7
+ * table's PK, computed the same way in every archive) — unlike every
8
+ * other dictionary in `archive/transfer/`, there is no separate integer id
9
+ * to remap: {@link import('./copy-simple-page-scoped-tables.js').copySimplePageScopedTables}'s
10
+ * `page_html_ref` copy carries the source's `hash` value straight through
11
+ * unchanged, and it already resolves in the destination once this
12
+ * function has run. No `temp.xfer_map_*` table exists for this dictionary.
13
+ *
14
+ * The filter (`action IN (full, replace)`) applies identically to both
15
+ * transfer modes: split's plan never assigns `replace`, so for split this
16
+ * is exactly "full pages only"; concat's plan never assigns `stub`, so for
17
+ * concat this is exactly "every page whose `page_html_ref` copy will
18
+ * actually run" (`stub` rows, split-only, never get a `page_html_ref`
19
+ * copied either way).
20
+ * @param trx - Transaction with the source ATTACHed as
21
+ * {@link TRANSFER_SOURCE_ALIAS}. Must run after `temp.xfer_ci_plan` is
22
+ * fully populated, before `copy-simple-page-scoped-tables.ts`'s `page_html_ref` copy
23
+ * (which assumes the blob it points at already exists — `page_html_ref`
24
+ * has an FK on `hash`).
25
+ * @example
26
+ * ```ts
27
+ * await planContentItemsForSplit(trx);
28
+ * await copyPageHtmlBlobs(trx);
29
+ * await copySimplePageScopedTables(trx); // copies page_html_ref among other tables
30
+ * ```
31
+ */
32
+ export async function copyPageHtmlBlobs(trx) {
33
+ await trx.raw(`
34
+ INSERT INTO main.page_html_blobs (hash, body, codec, size_raw, size_stored)
35
+ SELECT DISTINCT b.hash, b.body, b.codec, b.size_raw, b.size_stored
36
+ FROM ${TRANSFER_SOURCE_ALIAS}.page_html_blobs b
37
+ JOIN ${TRANSFER_SOURCE_ALIAS}.page_html_ref ref ON ref.hash = b.hash
38
+ JOIN xfer_ci_plan p ON p.src_id = ref.page_id
39
+ AND p.action IN (${TRANSFER_ACTION.full}, ${TRANSFER_ACTION.replace})
40
+ WHERE true
41
+ ON CONFLICT(hash) DO NOTHING
42
+ `);
43
+ }
@@ -0,0 +1,27 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Copies `page_meta` for every `full`/`replace`-action page (never
4
+ * `stub` — a stub carries no page-scoped data at all, per
5
+ * `transfer-action.ts`'s docs; never `skip`, whose destination row's
6
+ * existing `page_meta` is untouched).
7
+ *
8
+ * `page_meta` has TEN `url_id`-shaped columns and EIGHT `text_id`-shaped
9
+ * columns ({@link PAGE_META_COLUMN_MAPS}), each potentially pointing at a
10
+ * DIFFERENT dictionary row — unlike `content_items`' single `url_id`, one
11
+ * shared join alias cannot serve every column. Each FK column gets its own
12
+ * uniquely-aliased `LEFT JOIN` against the relevant `temp.xfer_map_*`
13
+ * table, built dynamically from {@link listTransferColumns} so a future
14
+ * `page_meta` column addition is picked up without touching this file
15
+ * (only `page-meta-column-maps.ts` needs updating for a new url/text
16
+ * column; a new plain column needs nothing here at all).
17
+ * @param trx - Transaction with the source ATTACHed as
18
+ * {@link TRANSFER_SOURCE_ALIAS}. Must run after every dictionary copy
19
+ * AND after `insert-content-items.ts`/`replace-content-items.ts` have
20
+ * resolved every kept page's `dest_id`.
21
+ * @example
22
+ * ```ts
23
+ * await insertContentItems(trx, { crawlOrderOffset: 0 });
24
+ * await copyPageMeta(trx);
25
+ * ```
26
+ */
27
+ export declare function copyPageMeta(trx: Knex): Promise<void>;
@@ -0,0 +1,68 @@
1
+ import { PAGE_META_COLUMN_MAPS } from '../page-meta-column-maps.js';
2
+ import { listTransferColumns } from './list-transfer-columns.js';
3
+ import { quoteTransferIdentifier } from './quote-transfer-identifier.js';
4
+ import { TRANSFER_ACTION } from './transfer-action.js';
5
+ import { TRANSFER_SOURCE_ALIAS } from './transfer-source-alias.js';
6
+ const SRC = TRANSFER_SOURCE_ALIAS;
7
+ const URL_COLUMNS = new Set(PAGE_META_COLUMN_MAPS.url.map((m) => m.target));
8
+ const TEXT_COLUMNS = new Set(PAGE_META_COLUMN_MAPS.text.map((m) => m.target));
9
+ /**
10
+ * Copies `page_meta` for every `full`/`replace`-action page (never
11
+ * `stub` — a stub carries no page-scoped data at all, per
12
+ * `transfer-action.ts`'s docs; never `skip`, whose destination row's
13
+ * existing `page_meta` is untouched).
14
+ *
15
+ * `page_meta` has TEN `url_id`-shaped columns and EIGHT `text_id`-shaped
16
+ * columns ({@link PAGE_META_COLUMN_MAPS}), each potentially pointing at a
17
+ * DIFFERENT dictionary row — unlike `content_items`' single `url_id`, one
18
+ * shared join alias cannot serve every column. Each FK column gets its own
19
+ * uniquely-aliased `LEFT JOIN` against the relevant `temp.xfer_map_*`
20
+ * table, built dynamically from {@link listTransferColumns} so a future
21
+ * `page_meta` column addition is picked up without touching this file
22
+ * (only `page-meta-column-maps.ts` needs updating for a new url/text
23
+ * column; a new plain column needs nothing here at all).
24
+ * @param trx - Transaction with the source ATTACHed as
25
+ * {@link TRANSFER_SOURCE_ALIAS}. Must run after every dictionary copy
26
+ * AND after `insert-content-items.ts`/`replace-content-items.ts` have
27
+ * resolved every kept page's `dest_id`.
28
+ * @example
29
+ * ```ts
30
+ * await insertContentItems(trx, { crawlOrderOffset: 0 });
31
+ * await copyPageMeta(trx);
32
+ * ```
33
+ */
34
+ export async function copyPageMeta(trx) {
35
+ const columns = await listTransferColumns(trx, SRC, 'page_meta', ['page_id']);
36
+ const joins = [];
37
+ const exprFor = (column) => {
38
+ const quotedColumn = quoteTransferIdentifier(column);
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 = pm.${quotedColumn}`);
42
+ return `${alias}.dest_id`;
43
+ }
44
+ if (TEXT_COLUMNS.has(column)) {
45
+ const alias = `mt_${column}`;
46
+ joins.push(`LEFT JOIN xfer_map_text_refs ${alias} ON ${alias}.src_id = pm.${quotedColumn}`);
47
+ return `${alias}.dest_id`;
48
+ }
49
+ if (column === 'meta_extras_json_id') {
50
+ joins.push('LEFT JOIN xfer_map_json_refs mj ON mj.src_id = pm.meta_extras_json_id');
51
+ return 'mj.dest_id';
52
+ }
53
+ return `pm.${quotedColumn}`;
54
+ };
55
+ const selectList = columns.map(exprFor).join(', ');
56
+ const joinList = joins.join('\n');
57
+ const quotedColumnList = columns.map(quoteTransferIdentifier).join(', ');
58
+ await trx.raw(`
59
+ INSERT INTO main.page_meta (page_id, ${quotedColumnList})
60
+ SELECT p.dest_id, ${selectList}
61
+ FROM ${SRC}.page_meta pm
62
+ JOIN xfer_ci_plan p ON p.src_id = pm.page_id
63
+ AND p.action IN (${TRANSFER_ACTION.full}, ${TRANSFER_ACTION.replace})
64
+ ${joinList}
65
+ WHERE true
66
+ ON CONFLICT(page_id) DO NOTHING
67
+ `);
68
+ }
@@ -0,0 +1,31 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Copies `page_template_clusters` rows referenced by at least one kept
4
+ * (`full`/`replace`) page's `page_templates.template_key`, then
5
+ * recomputes `member_count` (and prunes any cluster left with zero
6
+ * members) against the destination's OWN `page_templates` table — which
7
+ * must already reflect this source's copy
8
+ * ({@link import('./copy-simple-page-scoped-tables.js').copySimplePageScopedTables},
9
+ * which carries `page_templates` — see that file's table list).
10
+ *
11
+ * A `template_key` collision between two DIFFERENT sources' clustering
12
+ * runs (concat) is a known, accepted simplification: `template_key` is a
13
+ * blocking-key string from page-cluster's own corpus
14
+ * classification, computed independently per archive, so the same string
15
+ * appearing in two sources does not necessarily mean the same semantic
16
+ * template — `ON CONFLICT(template_key) DO NOTHING` below means the
17
+ * FIRST source's `reason_json` (cluster-selection evidence) wins and the
18
+ * merged `member_count` recompute mixes both sources' pages under it.
19
+ * `concat` therefore re-classifies its output right after this copy,
20
+ * recomputing clean, merged-corpus clusters (see `docs/concat.md`); the
21
+ * copied rows only seed label inheritance for that run.
22
+ * @param trx - Transaction with the source ATTACHed as
23
+ * {@link TRANSFER_SOURCE_ALIAS}. Must run after
24
+ * `copySimplePageScopedTables` (which copies `page_templates` itself).
25
+ * @example
26
+ * ```ts
27
+ * await copySimplePageScopedTables(trx); // copies page_templates
28
+ * await copyPageTemplateClusters(trx);
29
+ * ```
30
+ */
31
+ export declare function copyPageTemplateClusters(trx: Knex): Promise<void>;
@@ -0,0 +1,56 @@
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_template_clusters` rows referenced by at least one kept
6
+ * (`full`/`replace`) page's `page_templates.template_key`, then
7
+ * recomputes `member_count` (and prunes any cluster left with zero
8
+ * members) against the destination's OWN `page_templates` table — which
9
+ * must already reflect this source's copy
10
+ * ({@link import('./copy-simple-page-scoped-tables.js').copySimplePageScopedTables},
11
+ * which carries `page_templates` — see that file's table list).
12
+ *
13
+ * A `template_key` collision between two DIFFERENT sources' clustering
14
+ * runs (concat) is a known, accepted simplification: `template_key` is a
15
+ * blocking-key string from page-cluster's own corpus
16
+ * classification, computed independently per archive, so the same string
17
+ * appearing in two sources does not necessarily mean the same semantic
18
+ * template — `ON CONFLICT(template_key) DO NOTHING` below means the
19
+ * FIRST source's `reason_json` (cluster-selection evidence) wins and the
20
+ * merged `member_count` recompute mixes both sources' pages under it.
21
+ * `concat` therefore re-classifies its output right after this copy,
22
+ * recomputing clean, merged-corpus clusters (see `docs/concat.md`); the
23
+ * copied rows only seed label inheritance for that run.
24
+ * @param trx - Transaction with the source ATTACHed as
25
+ * {@link TRANSFER_SOURCE_ALIAS}. Must run after
26
+ * `copySimplePageScopedTables` (which copies `page_templates` itself).
27
+ * @example
28
+ * ```ts
29
+ * await copySimplePageScopedTables(trx); // copies page_templates
30
+ * await copyPageTemplateClusters(trx);
31
+ * ```
32
+ */
33
+ export async function copyPageTemplateClusters(trx) {
34
+ await trx.raw(`
35
+ INSERT INTO main.page_template_clusters
36
+ (template_key, member_count, reason_json, codec, size_raw, size_stored)
37
+ SELECT s.template_key, s.member_count, s.reason_json, s.codec, s.size_raw, s.size_stored
38
+ FROM ${SRC}.page_template_clusters s
39
+ WHERE EXISTS (
40
+ SELECT 1
41
+ FROM ${SRC}.page_templates pt
42
+ JOIN xfer_ci_plan p ON p.src_id = pt.page_id
43
+ AND p.action IN (${TRANSFER_ACTION.full}, ${TRANSFER_ACTION.replace})
44
+ WHERE pt.template_key = s.template_key
45
+ )
46
+ ON CONFLICT(template_key) DO NOTHING
47
+ `);
48
+ await trx.raw(`
49
+ UPDATE main.page_template_clusters
50
+ SET member_count = (
51
+ SELECT COUNT(*) FROM main.page_templates
52
+ WHERE main.page_templates.template_key = main.page_template_clusters.template_key
53
+ )
54
+ `);
55
+ await trx.raw('DELETE FROM main.page_template_clusters WHERE member_count = 0');
56
+ }
@@ -0,0 +1,34 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Copies `page_template_labels` rows referenced by at least one kept
4
+ * (`full`/`replace`) page's `page_templates.template_key`, prunes any label
5
+ * whose key no longer has a member in the destination's OWN
6
+ * `page_templates`, and then **renumbers label collisions**: two sources
7
+ * (concat) number their labels independently, so both can carry an
8
+ * "events template A" under different keys. Leaving both would give the
9
+ * merged archive two templates with one name — and a later
10
+ * re-classification of the output (`concat` / `split` run one) would *keep* both, since `replacePageTemplates`
11
+ * carries labels forward by member overlap rather than renaming. The later
12
+ * key (by `template_key` order, for determinism) is therefore moved to the
13
+ * next free ordinal in its section here, at copy time.
14
+ *
15
+ * A `template_key` collision (the same key string in both sources) is the
16
+ * same accepted simplification as in
17
+ * {@link import('./copy-page-template-clusters.js').copyPageTemplateClusters}:
18
+ * `ON CONFLICT(template_key) DO NOTHING` keeps the FIRST source's label.
19
+ *
20
+ * A source extracted by an older nitpicker — the tar cache is keyed without
21
+ * a schema version, so an archive first opened before this table existed
22
+ * stays without it until re-extracted — has no `page_template_labels` at
23
+ * all; that source simply contributes no labels rather than failing the
24
+ * whole transfer.
25
+ * @param trx - Transaction with the source ATTACHed as
26
+ * {@link TRANSFER_SOURCE_ALIAS}. Must run after
27
+ * `copySimplePageScopedTables` (which copies `page_templates` itself).
28
+ * @example
29
+ * ```ts
30
+ * await copySimplePageScopedTables(trx); // copies page_templates
31
+ * await copyPageTemplateLabels(trx);
32
+ * ```
33
+ */
34
+ export declare function copyPageTemplateLabels(trx: Knex): Promise<void>;
@@ -0,0 +1,88 @@
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_template_labels` rows referenced by at least one kept
6
+ * (`full`/`replace`) page's `page_templates.template_key`, prunes any label
7
+ * whose key no longer has a member in the destination's OWN
8
+ * `page_templates`, and then **renumbers label collisions**: two sources
9
+ * (concat) number their labels independently, so both can carry an
10
+ * "events template A" under different keys. Leaving both would give the
11
+ * merged archive two templates with one name — and a later
12
+ * re-classification of the output (`concat` / `split` run one) would *keep* both, since `replacePageTemplates`
13
+ * carries labels forward by member overlap rather than renaming. The later
14
+ * key (by `template_key` order, for determinism) is therefore moved to the
15
+ * next free ordinal in its section here, at copy time.
16
+ *
17
+ * A `template_key` collision (the same key string in both sources) is the
18
+ * same accepted simplification as in
19
+ * {@link import('./copy-page-template-clusters.js').copyPageTemplateClusters}:
20
+ * `ON CONFLICT(template_key) DO NOTHING` keeps the FIRST source's label.
21
+ *
22
+ * A source extracted by an older nitpicker — the tar cache is keyed without
23
+ * a schema version, so an archive first opened before this table existed
24
+ * stays without it until re-extracted — has no `page_template_labels` at
25
+ * all; that source simply contributes no labels rather than failing the
26
+ * whole transfer.
27
+ * @param trx - Transaction with the source ATTACHed as
28
+ * {@link TRANSFER_SOURCE_ALIAS}. Must run after
29
+ * `copySimplePageScopedTables` (which copies `page_templates` itself).
30
+ * @example
31
+ * ```ts
32
+ * await copySimplePageScopedTables(trx); // copies page_templates
33
+ * await copyPageTemplateLabels(trx);
34
+ * ```
35
+ */
36
+ export async function copyPageTemplateLabels(trx) {
37
+ const [sourceTable] = (await trx.raw(`SELECT name FROM ${SRC}.sqlite_master WHERE type = 'table' AND name = 'page_template_labels'`));
38
+ if (sourceTable) {
39
+ await trx.raw(`
40
+ INSERT INTO main.page_template_labels (template_key, section, ordinal)
41
+ SELECT s.template_key, s.section, s.ordinal
42
+ FROM ${SRC}.page_template_labels s
43
+ WHERE EXISTS (
44
+ SELECT 1
45
+ FROM ${SRC}.page_templates pt
46
+ JOIN xfer_ci_plan p ON p.src_id = pt.page_id
47
+ AND p.action IN (${TRANSFER_ACTION.full}, ${TRANSFER_ACTION.replace})
48
+ WHERE pt.template_key = s.template_key
49
+ )
50
+ ON CONFLICT(template_key) DO NOTHING
51
+ `);
52
+ }
53
+ await trx.raw(`
54
+ DELETE FROM main.page_template_labels
55
+ WHERE NOT EXISTS (
56
+ SELECT 1 FROM main.page_templates
57
+ WHERE main.page_templates.template_key = main.page_template_labels.template_key
58
+ )
59
+ `);
60
+ await renumberLabelCollisions(trx);
61
+ }
62
+ /**
63
+ * Gives every `(section, ordinal)` pair held by more than one key a fresh,
64
+ * unused ordinal for all but the first key (by `template_key` order).
65
+ * @param trx - The transfer transaction.
66
+ */
67
+ async function renumberLabelCollisions(trx) {
68
+ const rows = (await trx('main.page_template_labels')
69
+ .select('template_key as templateKey', 'section', 'ordinal')
70
+ .orderBy('template_key'));
71
+ const maxOrdinalBySection = new Map();
72
+ for (const row of rows) {
73
+ maxOrdinalBySection.set(row.section, Math.max(maxOrdinalBySection.get(row.section) ?? 0, row.ordinal));
74
+ }
75
+ const seen = new Set();
76
+ for (const row of rows) {
77
+ const pair = `${row.section ?? '\0'}:${row.ordinal}`;
78
+ if (!seen.has(pair)) {
79
+ seen.add(pair);
80
+ continue;
81
+ }
82
+ const next = (maxOrdinalBySection.get(row.section) ?? 0) + 1;
83
+ maxOrdinalBySection.set(row.section, next);
84
+ await trx('main.page_template_labels')
85
+ .where('template_key', row.templateKey)
86
+ .update({ ordinal: next });
87
+ }
88
+ }
@@ -0,0 +1,29 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Copies `resource_items` (and its `technology_js_scan_cache` companion)
4
+ * for every `full`/`replace`-action row in `temp.xfer_ri_plan`
5
+ * ({@link import('./plan-resource-items.js').planResourceItems}), then
6
+ * backfills each `full` row's `dest_id`.
7
+ *
8
+ * `is_external` is carried over from the source verbatim here — it is
9
+ * NOT authoritative yet. `resource_items.is_external` is a pure scope
10
+ * check (unlike `content_items.is_external`, "was this taken on as a
11
+ * target"), so
12
+ * {@link import('./reclassify-resource-externality.js').reclassifyResourceExternality}
13
+ * always recomputes it against the OUTPUT archive's own (merged or
14
+ * narrowed) scope once every source has been copied — writing the
15
+ * source's value here is only a placeholder that step immediately
16
+ * overwrites.
17
+ * @param trx - Transaction with the source ATTACHed as
18
+ * {@link TRANSFER_SOURCE_ALIAS}. Must run after the dictionary copies
19
+ * (`temp.xfer_map_url_refs`/`xfer_map_blob_refs`/`xfer_map_content_type_refs`/
20
+ * `xfer_map_header_sets` populated) and after
21
+ * {@link import('./plan-resource-items.js').planResourceItems}.
22
+ * @example
23
+ * ```ts
24
+ * await planResourceItems(trx, 'concat');
25
+ * await copyDictionariesForConcat(trx);
26
+ * await copyResourceItems(trx);
27
+ * ```
28
+ */
29
+ export declare function copyResourceItems(trx: Knex): Promise<void>;
@@ -0,0 +1,89 @@
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 `resource_items` (and its `technology_js_scan_cache` companion)
6
+ * for every `full`/`replace`-action row in `temp.xfer_ri_plan`
7
+ * ({@link import('./plan-resource-items.js').planResourceItems}), then
8
+ * backfills each `full` row's `dest_id`.
9
+ *
10
+ * `is_external` is carried over from the source verbatim here — it is
11
+ * NOT authoritative yet. `resource_items.is_external` is a pure scope
12
+ * check (unlike `content_items.is_external`, "was this taken on as a
13
+ * target"), so
14
+ * {@link import('./reclassify-resource-externality.js').reclassifyResourceExternality}
15
+ * always recomputes it against the OUTPUT archive's own (merged or
16
+ * narrowed) scope once every source has been copied — writing the
17
+ * source's value here is only a placeholder that step immediately
18
+ * overwrites.
19
+ * @param trx - Transaction with the source ATTACHed as
20
+ * {@link TRANSFER_SOURCE_ALIAS}. Must run after the dictionary copies
21
+ * (`temp.xfer_map_url_refs`/`xfer_map_blob_refs`/`xfer_map_content_type_refs`/
22
+ * `xfer_map_header_sets` populated) and after
23
+ * {@link import('./plan-resource-items.js').planResourceItems}.
24
+ * @example
25
+ * ```ts
26
+ * await planResourceItems(trx, 'concat');
27
+ * await copyDictionariesForConcat(trx);
28
+ * await copyResourceItems(trx);
29
+ * ```
30
+ */
31
+ export async function copyResourceItems(trx) {
32
+ await trx.raw(`
33
+ INSERT INTO main.resource_items
34
+ (url_id, url_blob_id, is_external, status, status_text, content_type_id, content_length, header_set_id, compress, cdn, source)
35
+ SELECT
36
+ mu.dest_id, mb.dest_id, s.is_external, s.status, s.status_text,
37
+ mct.dest_id, s.content_length, mhs.dest_id, s.compress, s.cdn, s.source
38
+ FROM ${SRC}.resource_items s
39
+ JOIN xfer_ri_plan rp ON rp.src_id = s.id AND rp.action = ${TRANSFER_ACTION.full}
40
+ LEFT JOIN xfer_map_url_refs mu ON mu.src_id = s.url_id
41
+ LEFT JOIN xfer_map_blob_refs mb ON mb.src_id = s.url_blob_id
42
+ LEFT JOIN xfer_map_content_type_refs mct ON mct.src_id = s.content_type_id
43
+ LEFT JOIN xfer_map_header_sets mhs ON mhs.src_id = s.header_set_id
44
+ `);
45
+ await trx.raw(`
46
+ UPDATE xfer_ri_plan
47
+ SET dest_id = x.dest_id
48
+ FROM (
49
+ SELECT rp.src_id AS src_id, d.id AS dest_id
50
+ FROM xfer_ri_plan rp
51
+ JOIN ${SRC}.resource_items s ON s.id = rp.src_id
52
+ LEFT JOIN xfer_map_url_refs mu ON mu.src_id = s.url_id
53
+ LEFT JOIN xfer_map_blob_refs mb ON mb.src_id = s.url_blob_id
54
+ JOIN main.resource_items d ON d.url_id = mu.dest_id OR d.url_blob_id = mb.dest_id
55
+ WHERE rp.action = ${TRANSFER_ACTION.full}
56
+ ) x
57
+ WHERE xfer_ri_plan.src_id = x.src_id
58
+ `);
59
+ await trx.raw(`
60
+ UPDATE main.resource_items
61
+ SET
62
+ status = x.status, status_text = x.status_text, content_type_id = x.content_type_id,
63
+ content_length = x.content_length, header_set_id = x.header_set_id,
64
+ compress = x.compress, cdn = x.cdn, source = x.source, is_external = x.is_external
65
+ FROM (
66
+ SELECT
67
+ rp.dest_id AS dest_id, s.status, s.status_text, mct.dest_id AS content_type_id,
68
+ s.content_length, mhs.dest_id AS header_set_id, s.compress, s.cdn, s.source, s.is_external
69
+ FROM xfer_ri_plan rp
70
+ JOIN ${SRC}.resource_items s ON s.id = rp.src_id
71
+ LEFT JOIN xfer_map_content_type_refs mct ON mct.src_id = s.content_type_id
72
+ LEFT JOIN xfer_map_header_sets mhs ON mhs.src_id = s.header_set_id
73
+ WHERE rp.action = ${TRANSFER_ACTION.replace}
74
+ ) x
75
+ WHERE main.resource_items.id = x.dest_id
76
+ `);
77
+ await trx.raw(`
78
+ INSERT INTO main.technology_js_scan_cache (resourceId, scannedAt, technology, evidence)
79
+ SELECT rp.dest_id, c.scannedAt, c.technology, c.evidence
80
+ FROM ${SRC}.technology_js_scan_cache c
81
+ JOIN xfer_ri_plan rp ON rp.src_id = c.resourceId
82
+ AND rp.action IN (${TRANSFER_ACTION.full}, ${TRANSFER_ACTION.replace})
83
+ WHERE true
84
+ ON CONFLICT(resourceId) DO UPDATE SET
85
+ scannedAt = excluded.scannedAt,
86
+ technology = excluded.technology,
87
+ evidence = excluded.evidence
88
+ `);
89
+ }
@@ -0,0 +1,20 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Copies `resource_ref_edges` (page → resource references) for every
4
+ * `full`/`replace`-action page whose referenced resource is also kept
5
+ * (`temp.xfer_ri_plan`, INNER JOIN — a resource split's
6
+ * `plan-resource-items.ts` dropped has no destination row, so any edge
7
+ * pointing at it is correctly skipped rather than inserted with a
8
+ * dangling `resource_id`).
9
+ * @param trx - Transaction with the source ATTACHed as
10
+ * {@link TRANSFER_SOURCE_ALIAS}. Must run after both
11
+ * `temp.xfer_ci_plan` (with `dest_id` resolved) and `temp.xfer_ri_plan`
12
+ * (with `dest_id` resolved by
13
+ * {@link import('./copy-resource-items.js').copyResourceItems}).
14
+ * @example
15
+ * ```ts
16
+ * await copyResourceItems(trx, 'concat');
17
+ * await copyResourceRefEdges(trx);
18
+ * ```
19
+ */
20
+ export declare function copyResourceRefEdges(trx: Knex): Promise<void>;
@@ -0,0 +1,33 @@
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 `resource_ref_edges` (page → resource references) for every
6
+ * `full`/`replace`-action page whose referenced resource is also kept
7
+ * (`temp.xfer_ri_plan`, INNER JOIN — a resource split's
8
+ * `plan-resource-items.ts` dropped has no destination row, so any edge
9
+ * pointing at it is correctly skipped rather than inserted with a
10
+ * dangling `resource_id`).
11
+ * @param trx - Transaction with the source ATTACHed as
12
+ * {@link TRANSFER_SOURCE_ALIAS}. Must run after both
13
+ * `temp.xfer_ci_plan` (with `dest_id` resolved) and `temp.xfer_ri_plan`
14
+ * (with `dest_id` resolved by
15
+ * {@link import('./copy-resource-items.js').copyResourceItems}).
16
+ * @example
17
+ * ```ts
18
+ * await copyResourceItems(trx, 'concat');
19
+ * await copyResourceRefEdges(trx);
20
+ * ```
21
+ */
22
+ export async function copyResourceRefEdges(trx) {
23
+ await trx.raw(`
24
+ INSERT INTO main.resource_ref_edges (resource_id, page_id, count)
25
+ SELECT rp.dest_id, p.dest_id, e.count
26
+ FROM ${SRC}.resource_ref_edges e
27
+ JOIN xfer_ci_plan p ON p.src_id = e.page_id
28
+ AND p.action IN (${TRANSFER_ACTION.full}, ${TRANSFER_ACTION.replace})
29
+ JOIN xfer_ri_plan rp ON rp.src_id = e.resource_id
30
+ WHERE true
31
+ ON CONFLICT(resource_id, page_id) DO NOTHING
32
+ `);
33
+ }
@@ -0,0 +1,15 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Copies every table in {@link SIMPLE_PAGE_SCOPED_TABLES}, for every
4
+ * `full`/`replace`-action page, using {@link listTransferColumns} for the
5
+ * column list (never a hand-written one — see that function's docs) since
6
+ * every column here passes straight through unchanged.
7
+ * @param trx - Transaction with the source ATTACHed as
8
+ * {@link TRANSFER_SOURCE_ALIAS}.
9
+ * @example
10
+ * ```ts
11
+ * await copyPageMeta(trx);
12
+ * await copySimplePageScopedTables(trx);
13
+ * ```
14
+ */
15
+ export declare function copySimplePageScopedTables(trx: Knex): Promise<void>;
@@ -0,0 +1,34 @@
1
+ import { listTransferColumns } from './list-transfer-columns.js';
2
+ import { quoteTransferIdentifier } from './quote-transfer-identifier.js';
3
+ import { SIMPLE_PAGE_SCOPED_TABLES } from './simple-page-scoped-tables.js';
4
+ import { TRANSFER_ACTION } from './transfer-action.js';
5
+ import { TRANSFER_SOURCE_ALIAS } from './transfer-source-alias.js';
6
+ const SRC = TRANSFER_SOURCE_ALIAS;
7
+ /**
8
+ * Copies every table in {@link SIMPLE_PAGE_SCOPED_TABLES}, for every
9
+ * `full`/`replace`-action page, using {@link listTransferColumns} for the
10
+ * column list (never a hand-written one — see that function's docs) since
11
+ * every column here passes straight through unchanged.
12
+ * @param trx - Transaction with the source ATTACHed as
13
+ * {@link TRANSFER_SOURCE_ALIAS}.
14
+ * @example
15
+ * ```ts
16
+ * await copyPageMeta(trx);
17
+ * await copySimplePageScopedTables(trx);
18
+ * ```
19
+ */
20
+ export async function copySimplePageScopedTables(trx) {
21
+ for (const { table, pageColumn } of SIMPLE_PAGE_SCOPED_TABLES) {
22
+ const columns = await listTransferColumns(trx, SRC, table, ['id', pageColumn]);
23
+ const quotedColumns = columns.map(quoteTransferIdentifier);
24
+ const columnList = quotedColumns.map((col) => `s.${col}`).join(', ');
25
+ const quotedPageColumn = quoteTransferIdentifier(pageColumn);
26
+ await trx.raw(`
27
+ INSERT INTO main.${table} (${quotedPageColumn}, ${quotedColumns.join(', ')})
28
+ SELECT p.dest_id, ${columnList}
29
+ FROM ${SRC}.${table} s
30
+ JOIN xfer_ci_plan p ON p.src_id = s.${quotedPageColumn}
31
+ AND p.action IN (${TRANSFER_ACTION.full}, ${TRANSFER_ACTION.replace})
32
+ `);
33
+ }
34
+ }
@@ -0,0 +1,26 @@
1
+ import type { ExURL, ParseURLOptions } from '@d-zero/shared/parse-url';
2
+ import type { Knex } from 'knex';
3
+ /**
4
+ * Counts `content_items` rows that are `is_external = 1` yet fall inside
5
+ * the given scope — exactly the set `crawl <out> --append <root>`'s
6
+ * `repromoteExternalPages` would re-fetch as internal pages. Concat never
7
+ * runs that promotion itself (see `types.ts`'s `ConcatArchivesResult.externalInScopeCount`
8
+ * docs for why), so this count is what the CLI surfaces as its
9
+ * `--append` hint after a merge.
10
+ *
11
+ * Split never calls this (its output scope is a SUBSET of its single
12
+ * source's scope, so nothing newly falls into scope), but the function
13
+ * is written generically rather than concat-specific for the same reason
14
+ * `flattenRedirectChains` is: a narrower, single-purpose name would
15
+ * invite a second near-duplicate implementation later.
16
+ * @param trx - The destination transaction.
17
+ * @param scope - The output archive's final scope map.
18
+ * @param options - URL parsing options forwarded to {@link findScopeEntry}.
19
+ * @returns The count of in-scope-but-still-external pages.
20
+ * @example
21
+ * ```ts
22
+ * const scope = buildScopeMap(mergedConfig.roots, mergedConfig);
23
+ * const hintCount = await countExternalPagesInScope(knex, scope, mergedConfig);
24
+ * ```
25
+ */
26
+ export declare function countExternalPagesInScope(trx: Knex, scope: ReadonlyMap<string, readonly ExURL[]>, options?: ParseURLOptions): Promise<number>;
@@ -0,0 +1,40 @@
1
+ import { tryParseUrl as parseUrl } from '@d-zero/shared/parse-url';
2
+ import { findScopeEntry } from '../scope/find-scope-entry.js';
3
+ /**
4
+ * Counts `content_items` rows that are `is_external = 1` yet fall inside
5
+ * the given scope — exactly the set `crawl <out> --append <root>`'s
6
+ * `repromoteExternalPages` would re-fetch as internal pages. Concat never
7
+ * runs that promotion itself (see `types.ts`'s `ConcatArchivesResult.externalInScopeCount`
8
+ * docs for why), so this count is what the CLI surfaces as its
9
+ * `--append` hint after a merge.
10
+ *
11
+ * Split never calls this (its output scope is a SUBSET of its single
12
+ * source's scope, so nothing newly falls into scope), but the function
13
+ * is written generically rather than concat-specific for the same reason
14
+ * `flattenRedirectChains` is: a narrower, single-purpose name would
15
+ * invite a second near-duplicate implementation later.
16
+ * @param trx - The destination transaction.
17
+ * @param scope - The output archive's final scope map.
18
+ * @param options - URL parsing options forwarded to {@link findScopeEntry}.
19
+ * @returns The count of in-scope-but-still-external pages.
20
+ * @example
21
+ * ```ts
22
+ * const scope = buildScopeMap(mergedConfig.roots, mergedConfig);
23
+ * const hintCount = await countExternalPagesInScope(knex, scope, mergedConfig);
24
+ * ```
25
+ */
26
+ export async function countExternalPagesInScope(trx, scope, options) {
27
+ const candidates = await trx
28
+ .select('url_refs.url as url')
29
+ .from('content_items')
30
+ .join('url_refs', 'url_refs.id', 'content_items.url_id')
31
+ .where('content_items.is_external', 1);
32
+ let count = 0;
33
+ for (const row of candidates) {
34
+ const parsed = parseUrl(row.url, options);
35
+ if (parsed && findScopeEntry(parsed, scope, options) !== null) {
36
+ count++;
37
+ }
38
+ }
39
+ return count;
40
+ }