@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.
- package/LICENSE +191 -0
- package/README.md +106 -0
- package/lib/apply-connection-pragmas.d.ts +18 -0
- package/lib/apply-connection-pragmas.js +40 -0
- package/lib/archive-accessor.d.ts +265 -0
- package/lib/archive-accessor.js +477 -0
- package/lib/archive-lock.d.ts +45 -0
- package/lib/archive-lock.js +154 -0
- package/lib/archive.d.ts +736 -0
- package/lib/archive.js +1056 -0
- package/lib/body-hash/compute-body-hash.d.ts +32 -0
- package/lib/body-hash/compute-body-hash.js +35 -0
- package/lib/cache/clear-archive-cache-entry.d.ts +18 -0
- package/lib/cache/clear-archive-cache-entry.js +24 -0
- package/lib/cache/clear-archive-cache-root.d.ts +26 -0
- package/lib/cache/clear-archive-cache-root.js +32 -0
- package/lib/cache/compute-archive-cache-key.d.ts +39 -0
- package/lib/cache/compute-archive-cache-key.js +95 -0
- package/lib/cache/extract-archive-to-cache.d.ts +57 -0
- package/lib/cache/extract-archive-to-cache.js +326 -0
- package/lib/cache/get-archive-cache-root.d.ts +20 -0
- package/lib/cache/get-archive-cache-root.js +53 -0
- package/lib/cache/is-archive-cache-disabled.d.ts +24 -0
- package/lib/cache/is-archive-cache-disabled.js +34 -0
- package/lib/cache/list-archive-cache-entries.d.ts +23 -0
- package/lib/cache/list-archive-cache-entries.js +130 -0
- package/lib/cache/path-exists.d.ts +9 -0
- package/lib/cache/path-exists.js +18 -0
- package/lib/cache/resolve-archive-cache-dir.d.ts +26 -0
- package/lib/cache/resolve-archive-cache-dir.js +32 -0
- package/lib/cache/types.d.ts +33 -0
- package/lib/cache/types.js +1 -0
- package/lib/content-type/is-html-content-type.d.ts +17 -0
- package/lib/content-type/is-html-content-type.js +19 -0
- package/lib/content-type/normalize-content-type.d.ts +14 -0
- package/lib/content-type/normalize-content-type.js +20 -0
- package/lib/create-adjunct-tables.d.ts +66 -0
- package/lib/create-adjunct-tables.js +510 -0
- package/lib/create-entity-tables.d.ts +191 -0
- package/lib/create-entity-tables.js +387 -0
- package/lib/create-progress-reporter.d.ts +30 -0
- package/lib/create-progress-reporter.js +38 -0
- package/lib/create-ref-tables.d.ts +35 -0
- package/lib/create-ref-tables.js +185 -0
- package/lib/create-template-tables.d.ts +28 -0
- package/lib/create-template-tables.js +92 -0
- package/lib/database.d.ts +549 -0
- package/lib/database.js +804 -0
- package/lib/db-ops/_shared/clear-write-ref-caches.d.ts +27 -0
- package/lib/db-ops/_shared/clear-write-ref-caches.js +35 -0
- package/lib/db-ops/_shared/compress-payload.d.ts +26 -0
- package/lib/db-ops/_shared/compress-payload.js +30 -0
- package/lib/db-ops/_shared/create-write-ref-caches.d.ts +17 -0
- package/lib/db-ops/_shared/create-write-ref-caches.js +27 -0
- package/lib/db-ops/_shared/decode-json-ref.d.ts +17 -0
- package/lib/db-ops/_shared/decode-json-ref.js +31 -0
- package/lib/db-ops/_shared/keyset-paginate-by-id.d.ts +49 -0
- package/lib/db-ops/_shared/keyset-paginate-by-id.js +69 -0
- package/lib/db-ops/_shared/load-response-headers-by-set-ids.d.ts +20 -0
- package/lib/db-ops/_shared/load-response-headers-by-set-ids.js +53 -0
- package/lib/db-ops/_shared/resolve-content-item-id.d.ts +62 -0
- package/lib/db-ops/_shared/resolve-content-item-id.js +143 -0
- package/lib/db-ops/_shared/resolve-url-or-blob.d.ts +23 -0
- package/lib/db-ops/_shared/resolve-url-or-blob.js +29 -0
- package/lib/db-ops/_shared/retry-setting.d.ts +16 -0
- package/lib/db-ops/_shared/retry-setting.js +18 -0
- package/lib/db-ops/_shared/safe-parse-json.d.ts +11 -0
- package/lib/db-ops/_shared/safe-parse-json.js +18 -0
- package/lib/db-ops/_shared/types.d.ts +94 -0
- package/lib/db-ops/_shared/types.js +1 -0
- package/lib/db-ops/_shared/upsert-blob-ref.d.ts +25 -0
- package/lib/db-ops/_shared/upsert-blob-ref.js +48 -0
- package/lib/db-ops/_shared/upsert-content-type-ref.d.ts +30 -0
- package/lib/db-ops/_shared/upsert-content-type-ref.js +45 -0
- package/lib/db-ops/_shared/upsert-json-ref.d.ts +22 -0
- package/lib/db-ops/_shared/upsert-json-ref.js +41 -0
- package/lib/db-ops/_shared/upsert-response-headers.d.ts +35 -0
- package/lib/db-ops/_shared/upsert-response-headers.js +49 -0
- package/lib/db-ops/_shared/upsert-url-ref.d.ts +39 -0
- package/lib/db-ops/_shared/upsert-url-ref.js +62 -0
- package/lib/db-ops/anchors/get-anchors-on-page.d.ts +10 -0
- package/lib/db-ops/anchors/get-anchors-on-page.js +21 -0
- package/lib/db-ops/config/get-base-url.d.ts +8 -0
- package/lib/db-ops/config/get-base-url.js +14 -0
- package/lib/db-ops/config/get-config.d.ts +10 -0
- package/lib/db-ops/config/get-config.js +29 -0
- package/lib/db-ops/config/get-created-cwd.d.ts +11 -0
- package/lib/db-ops/config/get-created-cwd.js +13 -0
- package/lib/db-ops/config/get-name.d.ts +8 -0
- package/lib/db-ops/config/get-name.js +14 -0
- package/lib/db-ops/config/info-column-allowlist.d.ts +7 -0
- package/lib/db-ops/config/info-column-allowlist.js +29 -0
- package/lib/db-ops/config/info-json-columns.d.ts +5 -0
- package/lib/db-ops/config/info-json-columns.js +11 -0
- package/lib/db-ops/config/set-config.d.ts +12 -0
- package/lib/db-ops/config/set-config.js +21 -0
- package/lib/db-ops/config/update-config.d.ts +17 -0
- package/lib/db-ops/config/update-config.js +36 -0
- package/lib/db-ops/console-logs/compute-console-log-hash.d.ts +19 -0
- package/lib/db-ops/console-logs/compute-console-log-hash.js +30 -0
- package/lib/db-ops/console-logs/replace-console-logs.d.ts +34 -0
- package/lib/db-ops/console-logs/replace-console-logs.js +123 -0
- package/lib/db-ops/console-logs/stringify-console-log-args.d.ts +16 -0
- package/lib/db-ops/console-logs/stringify-console-log-args.js +26 -0
- package/lib/db-ops/console-logs/types.d.ts +38 -0
- package/lib/db-ops/console-logs/types.js +1 -0
- package/lib/db-ops/console-logs/upsert-console-log-item.d.ts +29 -0
- package/lib/db-ops/console-logs/upsert-console-log-item.js +52 -0
- package/lib/db-ops/dedupe-cap/accumulate-dedupe-cap-rejected-count.d.ts +18 -0
- package/lib/db-ops/dedupe-cap/accumulate-dedupe-cap-rejected-count.js +23 -0
- package/lib/db-ops/dedupe-cap/finalize-dedupe-cap-event.d.ts +12 -0
- package/lib/db-ops/dedupe-cap/finalize-dedupe-cap-event.js +15 -0
- package/lib/db-ops/dedupe-cap/insert-dedupe-cap-event.d.ts +14 -0
- package/lib/db-ops/dedupe-cap/insert-dedupe-cap-event.js +30 -0
- package/lib/db-ops/dedupe-cap/list-dedupe-cap-observations.d.ts +57 -0
- package/lib/db-ops/dedupe-cap/list-dedupe-cap-observations.js +87 -0
- package/lib/db-ops/dedupe-cap/list-dedupe-cap-shape-keys.d.ts +21 -0
- package/lib/db-ops/dedupe-cap/list-dedupe-cap-shape-keys.js +27 -0
- package/lib/db-ops/errors/insert-crawl-error.d.ts +15 -0
- package/lib/db-ops/errors/insert-crawl-error.js +21 -0
- package/lib/db-ops/errors/insert-page-error.d.ts +21 -0
- package/lib/db-ops/errors/insert-page-error.js +30 -0
- package/lib/db-ops/errors/list-dns-burned-host-candidates.d.ts +33 -0
- package/lib/db-ops/errors/list-dns-burned-host-candidates.js +158 -0
- package/lib/db-ops/html/read-page-html-blob.d.ts +17 -0
- package/lib/db-ops/html/read-page-html-blob.js +20 -0
- package/lib/db-ops/lifecycle/checkpoint.d.ts +8 -0
- package/lib/db-ops/lifecycle/checkpoint.js +9 -0
- package/lib/db-ops/lifecycle/destroy.d.ts +6 -0
- package/lib/db-ops/lifecycle/destroy.js +7 -0
- package/lib/db-ops/lifecycle/init.d.ts +58 -0
- package/lib/db-ops/lifecycle/init.js +122 -0
- package/lib/db-ops/list-reconcile/record-list-reconcile-run.d.ts +22 -0
- package/lib/db-ops/list-reconcile/record-list-reconcile-run.js +41 -0
- package/lib/db-ops/meta/get-audios-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-audios-of-page.js +15 -0
- package/lib/db-ops/meta/get-buttons-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-buttons-of-page.js +15 -0
- package/lib/db-ops/meta/get-canvases-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-canvases-of-page.js +15 -0
- package/lib/db-ops/meta/get-custom-elements-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-custom-elements-of-page.js +15 -0
- package/lib/db-ops/meta/get-headings-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-headings-of-page.js +15 -0
- package/lib/db-ops/meta/get-iframes-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-iframes-of-page.js +15 -0
- package/lib/db-ops/meta/get-jsonld-of-page.d.ts +13 -0
- package/lib/db-ops/meta/get-jsonld-of-page.js +27 -0
- package/lib/db-ops/meta/get-main-content-images-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-main-content-images-of-page.js +15 -0
- package/lib/db-ops/meta/get-main-content-tables-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-main-content-tables-of-page.js +15 -0
- package/lib/db-ops/meta/get-page-technologies-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-page-technologies-of-page.js +15 -0
- package/lib/db-ops/meta/get-technology-signals-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-technology-signals-of-page.js +15 -0
- package/lib/db-ops/meta/get-videos-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-videos-of-page.js +15 -0
- package/lib/db-ops/outages/close-network-outage.d.ts +12 -0
- package/lib/db-ops/outages/close-network-outage.js +15 -0
- package/lib/db-ops/outages/close-stale-open-network-outages.d.ts +26 -0
- package/lib/db-ops/outages/close-stale-open-network-outages.js +42 -0
- package/lib/db-ops/outages/compute-outage-clamp-timestamp.d.ts +26 -0
- package/lib/db-ops/outages/compute-outage-clamp-timestamp.js +31 -0
- package/lib/db-ops/outages/insert-network-outage.d.ts +14 -0
- package/lib/db-ops/outages/insert-network-outage.js +29 -0
- package/lib/db-ops/outages/list-network-outages.d.ts +28 -0
- package/lib/db-ops/outages/list-network-outages.js +42 -0
- package/lib/db-ops/pages/order/set-url-order.d.ts +13 -0
- package/lib/db-ops/pages/order/set-url-order.js +38 -0
- package/lib/db-ops/pages/read/build-page-query.d.ts +18 -0
- package/lib/db-ops/pages/read/build-page-query.js +40 -0
- package/lib/db-ops/pages/read/get-crawling-state.d.ts +117 -0
- package/lib/db-ops/pages/read/get-crawling-state.js +161 -0
- package/lib/db-ops/pages/read/get-existing-page-urls.d.ts +15 -0
- package/lib/db-ops/pages/read/get-existing-page-urls.js +30 -0
- package/lib/db-ops/pages/read/get-page-count.d.ts +12 -0
- package/lib/db-ops/pages/read/get-page-count.js +21 -0
- package/lib/db-ops/pages/read/get-page-source-by-url.d.ts +24 -0
- package/lib/db-ops/pages/read/get-page-source-by-url.js +28 -0
- package/lib/db-ops/pages/read/get-pages-with-rels.d.ts +38 -0
- package/lib/db-ops/pages/read/get-pages-with-rels.js +107 -0
- package/lib/db-ops/pages/read/get-pages.d.ts +11 -0
- package/lib/db-ops/pages/read/get-pages.js +51 -0
- package/lib/db-ops/pages/read/get-scraped-html-page-count.d.ts +18 -0
- package/lib/db-ops/pages/read/get-scraped-html-page-count.js +25 -0
- package/lib/db-ops/pages/read/reconstruct-page-rows.d.ts +31 -0
- package/lib/db-ops/pages/read/reconstruct-page-rows.js +32 -0
- package/lib/db-ops/pages/reset/clear-page-derived-rows.d.ts +20 -0
- package/lib/db-ops/pages/reset/clear-page-derived-rows.js +37 -0
- package/lib/db-ops/pages/reset/repromote-external-pages.d.ts +30 -0
- package/lib/db-ops/pages/reset/repromote-external-pages.js +91 -0
- package/lib/db-ops/pages/reset/reset-failed-pages.d.ts +88 -0
- package/lib/db-ops/pages/reset/reset-failed-pages.js +216 -0
- package/lib/db-ops/pages/reset/reset-pages-by-urls.d.ts +80 -0
- package/lib/db-ops/pages/reset/reset-pages-by-urls.js +151 -0
- package/lib/db-ops/pages/reset/retryable-image-scan-codes.d.ts +24 -0
- package/lib/db-ops/pages/reset/retryable-image-scan-codes.js +24 -0
- package/lib/db-ops/pages/write/insert-audios.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-audios.js +25 -0
- package/lib/db-ops/pages/write/insert-buttons.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-buttons.js +29 -0
- package/lib/db-ops/pages/write/insert-canvases.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-canvases.js +26 -0
- package/lib/db-ops/pages/write/insert-custom-elements.d.ts +27 -0
- package/lib/db-ops/pages/write/insert-custom-elements.js +40 -0
- package/lib/db-ops/pages/write/insert-headings.d.ts +15 -0
- package/lib/db-ops/pages/write/insert-headings.js +27 -0
- package/lib/db-ops/pages/write/insert-iframes.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-iframes.js +28 -0
- package/lib/db-ops/pages/write/insert-inventory-content-items.d.ts +38 -0
- package/lib/db-ops/pages/write/insert-inventory-content-items.js +60 -0
- package/lib/db-ops/pages/write/insert-inventory-seeds.d.ts +36 -0
- package/lib/db-ops/pages/write/insert-inventory-seeds.js +48 -0
- package/lib/db-ops/pages/write/insert-inventory-skipped-pages.d.ts +42 -0
- package/lib/db-ops/pages/write/insert-inventory-skipped-pages.js +56 -0
- package/lib/db-ops/pages/write/insert-jsonld.d.ts +17 -0
- package/lib/db-ops/pages/write/insert-jsonld.js +49 -0
- package/lib/db-ops/pages/write/insert-main-content-images.d.ts +20 -0
- package/lib/db-ops/pages/write/insert-main-content-images.js +32 -0
- package/lib/db-ops/pages/write/insert-main-content-tables.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-main-content-tables.js +29 -0
- package/lib/db-ops/pages/write/insert-page.d.ts +56 -0
- package/lib/db-ops/pages/write/insert-page.js +259 -0
- package/lib/db-ops/pages/write/insert-technologies.d.ts +25 -0
- package/lib/db-ops/pages/write/insert-technologies.js +45 -0
- package/lib/db-ops/pages/write/insert-videos.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-videos.js +28 -0
- package/lib/db-ops/pages/write/link-redirect-sources.d.ts +42 -0
- package/lib/db-ops/pages/write/link-redirect-sources.js +101 -0
- package/lib/db-ops/pages/write/record-redirect.d.ts +35 -0
- package/lib/db-ops/pages/write/record-redirect.js +100 -0
- package/lib/db-ops/pages/write/set-skipped-page.d.ts +13 -0
- package/lib/db-ops/pages/write/set-skipped-page.js +24 -0
- package/lib/db-ops/pages/write/update-page.d.ts +40 -0
- package/lib/db-ops/pages/write/update-page.js +419 -0
- package/lib/db-ops/pages/write/write-page-html-blob.d.ts +19 -0
- package/lib/db-ops/pages/write/write-page-html-blob.js +41 -0
- package/lib/db-ops/referrers/get-redirects-for-pages.d.ts +9 -0
- package/lib/db-ops/referrers/get-redirects-for-pages.js +15 -0
- package/lib/db-ops/referrers/get-referrers-of-page.d.ts +17 -0
- package/lib/db-ops/referrers/get-referrers-of-page.js +32 -0
- package/lib/db-ops/referrers/get-referrers-of-resource.d.ts +8 -0
- package/lib/db-ops/referrers/get-referrers-of-resource.js +15 -0
- package/lib/db-ops/resources/build-resource-query.d.ts +25 -0
- package/lib/db-ops/resources/build-resource-query.js +29 -0
- package/lib/db-ops/resources/get-existing-resource-urls.d.ts +9 -0
- package/lib/db-ops/resources/get-existing-resource-urls.js +24 -0
- package/lib/db-ops/resources/get-resource-by-url.d.ts +13 -0
- package/lib/db-ops/resources/get-resource-by-url.js +22 -0
- package/lib/db-ops/resources/get-resource-url-list.d.ts +17 -0
- package/lib/db-ops/resources/get-resource-url-list.js +26 -0
- package/lib/db-ops/resources/get-resources.d.ts +8 -0
- package/lib/db-ops/resources/get-resources.js +11 -0
- package/lib/db-ops/resources/insert-inventory-resources.d.ts +24 -0
- package/lib/db-ops/resources/insert-inventory-resources.js +64 -0
- package/lib/db-ops/resources/insert-resource-referrers.d.ts +15 -0
- package/lib/db-ops/resources/insert-resource-referrers.js +54 -0
- package/lib/db-ops/resources/insert-resource.d.ts +34 -0
- package/lib/db-ops/resources/insert-resource.js +73 -0
- package/lib/db-ops/resources/reconstruct-resource-rows.d.ts +26 -0
- package/lib/db-ops/resources/reconstruct-resource-rows.js +30 -0
- package/lib/db-ops/templates/assign-template-labels.d.ts +60 -0
- package/lib/db-ops/templates/assign-template-labels.js +187 -0
- package/lib/db-ops/templates/replace-page-templates.d.ts +44 -0
- package/lib/db-ops/templates/replace-page-templates.js +174 -0
- package/lib/db-ops/templates/serialize-template-cluster-reason.d.ts +16 -0
- package/lib/db-ops/templates/serialize-template-cluster-reason.js +17 -0
- package/lib/db-ops/templates/types.d.ts +103 -0
- package/lib/db-ops/templates/types.js +1 -0
- package/lib/debug.d.ts +8 -0
- package/lib/debug.js +9 -0
- package/lib/decode-html-blob.d.ts +20 -0
- package/lib/decode-html-blob.js +23 -0
- package/lib/decode-page-html-blob-bytes.d.ts +25 -0
- package/lib/decode-page-html-blob-bytes.js +29 -0
- package/lib/decode-stored-blob-bytes.d.ts +25 -0
- package/lib/decode-stored-blob-bytes.js +47 -0
- package/lib/derive-lineage-from-parent.d.ts +37 -0
- package/lib/derive-lineage-from-parent.js +42 -0
- package/lib/drop-legacy-tables.d.ts +45 -0
- package/lib/drop-legacy-tables.js +56 -0
- package/lib/error-kind/classify-error-kind.d.ts +20 -0
- package/lib/error-kind/classify-error-kind.js +136 -0
- package/lib/error-kind/network-related-error-kinds.d.ts +23 -0
- package/lib/error-kind/network-related-error-kinds.js +28 -0
- package/lib/error-kind/permanent-error-kinds.d.ts +48 -0
- package/lib/error-kind/permanent-error-kinds.js +54 -0
- package/lib/error-kind/types.d.ts +54 -0
- package/lib/error-kind/types.js +1 -0
- package/lib/filesystem/append-text.d.ts +9 -0
- package/lib/filesystem/append-text.js +14 -0
- package/lib/filesystem/copy-dir-sync.d.ts +6 -0
- package/lib/filesystem/copy-dir-sync.js +9 -0
- package/lib/filesystem/copy-dir.d.ts +7 -0
- package/lib/filesystem/copy-dir.js +13 -0
- package/lib/filesystem/copy-file-with-progress.d.ts +20 -0
- package/lib/filesystem/copy-file-with-progress.js +34 -0
- package/lib/filesystem/exists.d.ts +6 -0
- package/lib/filesystem/exists.js +9 -0
- package/lib/filesystem/get-file-list.d.ts +8 -0
- package/lib/filesystem/get-file-list.js +12 -0
- package/lib/filesystem/is-dir.d.ts +6 -0
- package/lib/filesystem/is-dir.js +10 -0
- package/lib/filesystem/mkdir.d.ts +8 -0
- package/lib/filesystem/mkdir.js +15 -0
- package/lib/filesystem/output-binary.d.ts +12 -0
- package/lib/filesystem/output-binary.js +17 -0
- package/lib/filesystem/output-json.d.ts +9 -0
- package/lib/filesystem/output-json.js +14 -0
- package/lib/filesystem/output-text.d.ts +11 -0
- package/lib/filesystem/output-text.js +32 -0
- package/lib/filesystem/parse-pax-path.d.ts +18 -0
- package/lib/filesystem/parse-pax-path.js +47 -0
- package/lib/filesystem/parse-tar-size-field.d.ts +13 -0
- package/lib/filesystem/parse-tar-size-field.js +40 -0
- package/lib/filesystem/peek-tar-top-dir.d.ts +35 -0
- package/lib/filesystem/peek-tar-top-dir.js +215 -0
- package/lib/filesystem/read-json.d.ts +7 -0
- package/lib/filesystem/read-json.js +11 -0
- package/lib/filesystem/read-text.d.ts +6 -0
- package/lib/filesystem/read-text.js +10 -0
- package/lib/filesystem/readline.d.ts +11 -0
- package/lib/filesystem/readline.js +26 -0
- package/lib/filesystem/remove.d.ts +5 -0
- package/lib/filesystem/remove.js +10 -0
- package/lib/filesystem/rename.d.ts +16 -0
- package/lib/filesystem/rename.js +48 -0
- package/lib/filesystem/tar.d.ts +23 -0
- package/lib/filesystem/tar.js +78 -0
- package/lib/filesystem/untar.d.ts +33 -0
- package/lib/filesystem/untar.js +84 -0
- package/lib/get-failed-page-messages.d.ts +56 -0
- package/lib/get-failed-page-messages.js +146 -0
- package/lib/get-json.d.ts +10 -0
- package/lib/get-json.js +25 -0
- package/lib/html-snapshot/match-selector-html.d.ts +25 -0
- package/lib/html-snapshot/match-selector-html.js +28 -0
- package/lib/html-snapshot/match-selector-snapshots.d.ts +33 -0
- package/lib/html-snapshot/match-selector-snapshots.js +33 -0
- package/lib/html-snapshot/search-html-document.d.ts +29 -0
- package/lib/html-snapshot/search-html-document.js +27 -0
- package/lib/html-snapshot/search-html-snapshots.d.ts +36 -0
- package/lib/html-snapshot/search-html-snapshots.js +35 -0
- package/lib/html-snapshot/types.d.ts +111 -0
- package/lib/html-snapshot/types.js +7 -0
- package/lib/html-snapshot/validate-search-pattern.d.ts +15 -0
- package/lib/html-snapshot/validate-search-pattern.js +17 -0
- package/lib/init-schema.d.ts +48 -0
- package/lib/init-schema.js +124 -0
- package/lib/is-inventory-source.d.ts +21 -0
- package/lib/is-inventory-source.js +22 -0
- package/lib/is-within-outage-window.d.ts +49 -0
- package/lib/is-within-outage-window.js +33 -0
- package/lib/isolated-cluster/create-isolated-cluster-run.d.ts +24 -0
- package/lib/isolated-cluster/create-isolated-cluster-run.js +26 -0
- package/lib/libsql-dialect.d.ts +115 -0
- package/lib/libsql-dialect.js +116 -0
- package/lib/limited-page-ids.d.ts +9 -0
- package/lib/limited-page-ids.js +18 -0
- package/lib/meta/assert-compatible-version.d.ts +60 -0
- package/lib/meta/assert-compatible-version.js +93 -0
- package/lib/meta/classify-jsonld-type.d.ts +23 -0
- package/lib/meta/classify-jsonld-type.js +43 -0
- package/lib/meta/compare-semver.d.ts +23 -0
- package/lib/meta/compare-semver.js +51 -0
- package/lib/meta/compute-main-contents-denormalized.d.ts +41 -0
- package/lib/meta/compute-main-contents-denormalized.js +88 -0
- package/lib/meta/compute-page-denormalized.d.ts +20 -0
- package/lib/meta/compute-page-denormalized.js +35 -0
- package/lib/meta/derive-flat-from-meta.d.ts +34 -0
- package/lib/meta/derive-flat-from-meta.js +158 -0
- package/lib/meta/derive-meta-extras.d.ts +20 -0
- package/lib/meta/derive-meta-extras.js +23 -0
- package/lib/meta/extract-tags-for-archive.d.ts +17 -0
- package/lib/meta/extract-tags-for-archive.js +36 -0
- package/lib/meta/parse-main-content-class-list.d.ts +19 -0
- package/lib/meta/parse-main-content-class-list.js +34 -0
- package/lib/meta/summarize-jsonld.d.ts +17 -0
- package/lib/meta/summarize-jsonld.js +29 -0
- package/lib/meta/technologies/combine-technology-confidence.d.ts +46 -0
- package/lib/meta/technologies/combine-technology-confidence.js +93 -0
- package/lib/meta/technologies/convert-legacy-page-tags-to-inserts.d.ts +45 -0
- package/lib/meta/technologies/convert-legacy-page-tags-to-inserts.js +53 -0
- package/lib/meta/technologies/convert-tag-row-to-wappalyzer-signal.d.ts +33 -0
- package/lib/meta/technologies/convert-tag-row-to-wappalyzer-signal.js +46 -0
- package/lib/meta/technologies/extract-technologies-for-archive.d.ts +33 -0
- package/lib/meta/technologies/extract-technologies-for-archive.js +30 -0
- package/lib/meta/technologies/match-js-license-comment-signal.d.ts +21 -0
- package/lib/meta/technologies/match-js-license-comment-signal.js +23 -0
- package/lib/meta/technologies/match-structural-technology-signals.d.ts +26 -0
- package/lib/meta/technologies/match-structural-technology-signals.js +48 -0
- package/lib/meta/technologies/normalize-wappalyzer-entries.d.ts +25 -0
- package/lib/meta/technologies/normalize-wappalyzer-entries.js +35 -0
- package/lib/meta/technologies/technology-signal-definitions.d.ts +44 -0
- package/lib/meta/technologies/technology-signal-definitions.js +60 -0
- package/lib/meta/technologies/types.d.ts +70 -0
- package/lib/meta/technologies/types.js +13 -0
- package/lib/meta/types.d.ts +1490 -0
- package/lib/meta/types.js +65 -0
- package/lib/migrate-content-items-alias-of-id.d.ts +52 -0
- package/lib/migrate-content-items-alias-of-id.js +69 -0
- package/lib/migrate-content-items-dedupe-cap-event-id.d.ts +46 -0
- package/lib/migrate-content-items-dedupe-cap-event-id.js +62 -0
- package/lib/migrate-content-items-is-metadata-only.d.ts +44 -0
- package/lib/migrate-content-items-is-metadata-only.js +60 -0
- package/lib/migrate-entity-tables.d.ts +55 -0
- package/lib/migrate-entity-tables.js +66 -0
- package/lib/migrate-info-created-cwd.d.ts +17 -0
- package/lib/migrate-info-created-cwd.js +36 -0
- package/lib/migrate-info-main-content-selector.d.ts +16 -0
- package/lib/migrate-info-main-content-selector.js +35 -0
- package/lib/migrate-info-request-header-names.d.ts +16 -0
- package/lib/migrate-info-request-header-names.js +35 -0
- package/lib/migrate-info-roots.d.ts +20 -0
- package/lib/migrate-info-roots.js +52 -0
- package/lib/migrate-inventory-runs-to-list-reconcile-runs.d.ts +34 -0
- package/lib/migrate-inventory-runs-to-list-reconcile-runs.js +51 -0
- package/lib/migrate-list-reconcile-runs-exclude-skipped.d.ts +25 -0
- package/lib/migrate-list-reconcile-runs-exclude-skipped.js +44 -0
- package/lib/migrate-list-reconcile-runs-invalid-skipped.d.ts +16 -0
- package/lib/migrate-list-reconcile-runs-invalid-skipped.js +35 -0
- package/lib/migrate-main-contents-columns.d.ts +26 -0
- package/lib/migrate-main-contents-columns.js +61 -0
- package/lib/migrate-page-meta-body-hash.d.ts +44 -0
- package/lib/migrate-page-meta-body-hash.js +63 -0
- package/lib/migrate-page-meta-console-error-count.d.ts +27 -0
- package/lib/migrate-page-meta-console-error-count.js +45 -0
- package/lib/migrate-page-meta-custom-element-count.d.ts +33 -0
- package/lib/migrate-page-meta-custom-element-count.js +51 -0
- package/lib/migrate-page-meta-image-scan.d.ts +27 -0
- package/lib/migrate-page-meta-image-scan.js +52 -0
- package/lib/migrate-page-tags-to-page-technologies.d.ts +39 -0
- package/lib/migrate-page-tags-to-page-technologies.js +79 -0
- package/lib/migrate-ref-tables.d.ts +25 -0
- package/lib/migrate-ref-tables.js +38 -0
- package/lib/native-executor/check-native-executor-config.d.ts +17 -0
- package/lib/native-executor/check-native-executor-config.js +20 -0
- package/lib/page-meta-column-maps.d.ts +32 -0
- package/lib/page-meta-column-maps.js +43 -0
- package/lib/page.d.ts +546 -0
- package/lib/page.js +764 -0
- package/lib/peek-archive-lock.d.ts +40 -0
- package/lib/peek-archive-lock.js +62 -0
- package/lib/populate-entity-tables/collapse-anchor-rows.d.ts +41 -0
- package/lib/populate-entity-tables/collapse-anchor-rows.js +87 -0
- package/lib/populate-entity-tables/derive-dom-path.d.ts +35 -0
- package/lib/populate-entity-tables/derive-dom-path.js +72 -0
- package/lib/populate-entity-tables/is-blob-ref-value.d.ts +16 -0
- package/lib/populate-entity-tables/is-blob-ref-value.js +19 -0
- package/lib/populate-entity-tables/match-images-to-dom-paths.d.ts +66 -0
- package/lib/populate-entity-tables/match-images-to-dom-paths.js +96 -0
- package/lib/populate-entity-tables/populate-anchor-edges.d.ts +33 -0
- package/lib/populate-entity-tables/populate-anchor-edges.js +153 -0
- package/lib/populate-entity-tables/populate-content-items.d.ts +40 -0
- package/lib/populate-entity-tables/populate-content-items.js +141 -0
- package/lib/populate-entity-tables/populate-entities.d.ts +81 -0
- package/lib/populate-entity-tables/populate-entities.js +110 -0
- package/lib/populate-entity-tables/populate-image-items.d.ts +91 -0
- package/lib/populate-entity-tables/populate-image-items.js +226 -0
- package/lib/populate-entity-tables/populate-page-meta.d.ts +33 -0
- package/lib/populate-entity-tables/populate-page-meta.js +267 -0
- package/lib/populate-entity-tables/populate-resource-items.d.ts +22 -0
- package/lib/populate-entity-tables/populate-resource-items.js +114 -0
- package/lib/populate-entity-tables/populate-resource-ref-edges.d.ts +31 -0
- package/lib/populate-entity-tables/populate-resource-ref-edges.js +33 -0
- package/lib/populate-entity-tables/resolve-blob-refs.d.ts +31 -0
- package/lib/populate-entity-tables/resolve-blob-refs.js +100 -0
- package/lib/populate-entity-tables/resolve-content-type-refs.d.ts +22 -0
- package/lib/populate-entity-tables/resolve-content-type-refs.js +27 -0
- package/lib/populate-entity-tables/resolve-header-sets.d.ts +49 -0
- package/lib/populate-entity-tables/resolve-header-sets.js +122 -0
- package/lib/populate-entity-tables/resolve-json-refs.d.ts +25 -0
- package/lib/populate-entity-tables/resolve-json-refs.js +67 -0
- package/lib/populate-entity-tables/resolve-text-refs.d.ts +30 -0
- package/lib/populate-entity-tables/resolve-text-refs.js +61 -0
- package/lib/populate-entity-tables/resolve-url-or-blob-from-maps.d.ts +21 -0
- package/lib/populate-entity-tables/resolve-url-or-blob-from-maps.js +27 -0
- package/lib/populate-entity-tables/resolve-url-refs.d.ts +33 -0
- package/lib/populate-entity-tables/resolve-url-refs.js +60 -0
- package/lib/populate-entity-tables/test-utils/count-rows.d.ts +17 -0
- package/lib/populate-entity-tables/test-utils/count-rows.js +20 -0
- package/lib/populate-entity-tables/test-utils/seed-content-items.d.ts +25 -0
- package/lib/populate-entity-tables/test-utils/seed-content-items.js +42 -0
- package/lib/populate-entity-tables/test-utils/setup-entities-db.d.ts +30 -0
- package/lib/populate-entity-tables/test-utils/setup-entities-db.js +175 -0
- package/lib/populate-entity-tables/types.d.ts +157 -0
- package/lib/populate-entity-tables/types.js +12 -0
- package/lib/populate-entity-tables/upsert-text-refs.d.ts +38 -0
- package/lib/populate-entity-tables/upsert-text-refs.js +78 -0
- package/lib/populate-ref-tables/classify-content-type.d.ts +16 -0
- package/lib/populate-ref-tables/classify-content-type.js +52 -0
- package/lib/populate-ref-tables/compute-content-hash.d.ts +22 -0
- package/lib/populate-ref-tables/compute-content-hash.js +26 -0
- package/lib/populate-ref-tables/compute-header-flags.d.ts +16 -0
- package/lib/populate-ref-tables/compute-header-flags.js +70 -0
- package/lib/populate-ref-tables/content-type-rules.d.ts +38 -0
- package/lib/populate-ref-tables/content-type-rules.js +133 -0
- package/lib/populate-ref-tables/create-header-table-caches.d.ts +25 -0
- package/lib/populate-ref-tables/create-header-table-caches.js +49 -0
- package/lib/populate-ref-tables/data-uri-url-refs-limit.d.ts +15 -0
- package/lib/populate-ref-tables/data-uri-url-refs-limit.js +15 -0
- package/lib/populate-ref-tables/decode-data-uri.d.ts +21 -0
- package/lib/populate-ref-tables/decode-data-uri.js +126 -0
- package/lib/populate-ref-tables/decompose-header-set.d.ts +29 -0
- package/lib/populate-ref-tables/decompose-header-set.js +157 -0
- package/lib/populate-ref-tables/decompose-url.d.ts +25 -0
- package/lib/populate-ref-tables/decompose-url.js +70 -0
- package/lib/populate-ref-tables/header-stability.d.ts +19 -0
- package/lib/populate-ref-tables/header-stability.js +22 -0
- package/lib/populate-ref-tables/header-value-cache-key.d.ts +17 -0
- package/lib/populate-ref-tables/header-value-cache-key.js +19 -0
- package/lib/populate-ref-tables/normalize-mime.d.ts +24 -0
- package/lib/populate-ref-tables/normalize-mime.js +36 -0
- package/lib/populate-ref-tables/populate-blob-refs.d.ts +38 -0
- package/lib/populate-ref-tables/populate-blob-refs.js +134 -0
- package/lib/populate-ref-tables/populate-content-type-refs.d.ts +27 -0
- package/lib/populate-ref-tables/populate-content-type-refs.js +70 -0
- package/lib/populate-ref-tables/populate-header-tables.d.ts +35 -0
- package/lib/populate-ref-tables/populate-header-tables.js +80 -0
- package/lib/populate-ref-tables/populate-json-refs.d.ts +29 -0
- package/lib/populate-ref-tables/populate-json-refs.js +101 -0
- package/lib/populate-ref-tables/populate-refs.d.ts +51 -0
- package/lib/populate-ref-tables/populate-refs.js +62 -0
- package/lib/populate-ref-tables/populate-text-refs.d.ts +32 -0
- package/lib/populate-ref-tables/populate-text-refs.js +133 -0
- package/lib/populate-ref-tables/populate-url-refs.d.ts +28 -0
- package/lib/populate-ref-tables/populate-url-refs.js +148 -0
- package/lib/populate-ref-tables/test-utils/count-rows.d.ts +15 -0
- package/lib/populate-ref-tables/test-utils/count-rows.js +17 -0
- package/lib/populate-ref-tables/types.d.ts +197 -0
- package/lib/populate-ref-tables/types.js +7 -0
- package/lib/populate-ref-tables/upsert-one-header-set.d.ts +34 -0
- package/lib/populate-ref-tables/upsert-one-header-set.js +208 -0
- package/lib/populate-ref-tables/volatile-header-names.d.ts +20 -0
- package/lib/populate-ref-tables/volatile-header-names.js +33 -0
- package/lib/redirect-table.d.ts +9 -0
- package/lib/redirect-table.js +28 -0
- package/lib/release-finished-statements.d.ts +42 -0
- package/lib/release-finished-statements.js +45 -0
- package/lib/resolve-redirect-chain.d.ts +33 -0
- package/lib/resolve-redirect-chain.js +27 -0
- package/lib/resource.d.ts +46 -0
- package/lib/resource.js +62 -0
- package/lib/retarget-legacy-fk-tables.d.ts +61 -0
- package/lib/retarget-legacy-fk-tables.js +137 -0
- package/lib/safe-path.d.ts +9 -0
- package/lib/safe-path.js +17 -0
- package/lib/scope/build-scope-map.d.ts +21 -0
- package/lib/scope/build-scope-map.js +32 -0
- package/lib/scope/find-scope-entry.d.ts +25 -0
- package/lib/scope/find-scope-entry.js +45 -0
- package/lib/template-classification/classify-archive-page-templates.d.ts +42 -0
- package/lib/template-classification/classify-archive-page-templates.js +70 -0
- package/lib/template-classification/classify-page-templates.d.ts +33 -0
- package/lib/template-classification/classify-page-templates.js +60 -0
- package/lib/template-classification/collect-page-ids-with-html.d.ts +24 -0
- package/lib/template-classification/collect-page-ids-with-html.js +30 -0
- package/lib/template-classification/collect-page-stylesheet-urls.d.ts +32 -0
- package/lib/template-classification/collect-page-stylesheet-urls.js +130 -0
- package/lib/template-classification/create-content-root-hint.d.ts +41 -0
- package/lib/template-classification/create-content-root-hint.js +51 -0
- package/lib/template-classification/create-page-cluster-factory.d.ts +36 -0
- package/lib/template-classification/create-page-cluster-factory.js +52 -0
- package/lib/template-classification/load-page-cluster-candidates.d.ts +32 -0
- package/lib/template-classification/load-page-cluster-candidates.js +93 -0
- package/lib/template-classification/page-cluster/resolve-page-cluster-keys.d.ts +34 -0
- package/lib/template-classification/page-cluster/resolve-page-cluster-keys.js +236 -0
- package/lib/template-classification/page-cluster/types.d.ts +123 -0
- package/lib/template-classification/page-cluster/types.js +1 -0
- package/lib/template-classification/types.d.ts +234 -0
- package/lib/template-classification/types.js +1 -0
- package/lib/test-utils/build-full-schema-test-db.d.ts +34 -0
- package/lib/test-utils/build-full-schema-test-db.js +74 -0
- package/lib/test-utils/create-legacy-analysis-tables.d.ts +13 -0
- package/lib/test-utils/create-legacy-analysis-tables.js +37 -0
- package/lib/test-utils/fk-parent-tables.d.ts +15 -0
- package/lib/test-utils/fk-parent-tables.js +19 -0
- package/lib/test-utils/seed-content-item.d.ts +35 -0
- package/lib/test-utils/seed-content-item.js +42 -0
- package/lib/test-utils/setup-legacy-fk-db.d.ts +34 -0
- package/lib/test-utils/setup-legacy-fk-db.js +271 -0
- package/lib/transfer/attach-source-database.d.ts +31 -0
- package/lib/transfer/attach-source-database.js +40 -0
- package/lib/transfer/build-split-config.d.ts +30 -0
- package/lib/transfer/build-split-config.js +42 -0
- package/lib/transfer/clear-replaced-page-rows.d.ts +23 -0
- package/lib/transfer/clear-replaced-page-rows.js +61 -0
- package/lib/transfer/concat-archives.d.ts +55 -0
- package/lib/transfer/concat-archives.js +95 -0
- package/lib/transfer/concat-source-transfer-phases.d.ts +10 -0
- package/lib/transfer/concat-source-transfer-phases.js +17 -0
- package/lib/transfer/content-item-rank-sql.d.ts +21 -0
- package/lib/transfer/content-item-rank-sql.js +23 -0
- package/lib/transfer/copy-anchor-edges.d.ts +28 -0
- package/lib/transfer/copy-anchor-edges.js +42 -0
- package/lib/transfer/copy-dictionaries-for-concat.d.ts +39 -0
- package/lib/transfer/copy-dictionaries-for-concat.js +81 -0
- package/lib/transfer/copy-dictionaries-for-split.d.ts +29 -0
- package/lib/transfer/copy-dictionaries-for-split.js +224 -0
- package/lib/transfer/copy-header-set-children.d.ts +27 -0
- package/lib/transfer/copy-header-set-children.js +51 -0
- package/lib/transfer/copy-image-items.d.ts +21 -0
- package/lib/transfer/copy-image-items.js +62 -0
- package/lib/transfer/copy-inventory-source-lists.d.ts +30 -0
- package/lib/transfer/copy-inventory-source-lists.js +61 -0
- package/lib/transfer/copy-journal-tables.d.ts +30 -0
- package/lib/transfer/copy-journal-tables.js +56 -0
- package/lib/transfer/copy-page-console-logs.d.ts +16 -0
- package/lib/transfer/copy-page-console-logs.js +27 -0
- package/lib/transfer/copy-page-html-blobs.d.ts +31 -0
- package/lib/transfer/copy-page-html-blobs.js +43 -0
- package/lib/transfer/copy-page-meta.d.ts +27 -0
- package/lib/transfer/copy-page-meta.js +68 -0
- package/lib/transfer/copy-page-template-clusters.d.ts +31 -0
- package/lib/transfer/copy-page-template-clusters.js +56 -0
- package/lib/transfer/copy-page-template-labels.d.ts +34 -0
- package/lib/transfer/copy-page-template-labels.js +88 -0
- package/lib/transfer/copy-resource-items.d.ts +29 -0
- package/lib/transfer/copy-resource-items.js +89 -0
- package/lib/transfer/copy-resource-ref-edges.d.ts +20 -0
- package/lib/transfer/copy-resource-ref-edges.js +33 -0
- package/lib/transfer/copy-simple-page-scoped-tables.d.ts +15 -0
- package/lib/transfer/copy-simple-page-scoped-tables.js +34 -0
- package/lib/transfer/count-external-pages-in-scope.d.ts +26 -0
- package/lib/transfer/count-external-pages-in-scope.js +40 -0
- package/lib/transfer/create-transfer-temp-tables.d.ts +30 -0
- package/lib/transfer/create-transfer-temp-tables.js +59 -0
- package/lib/transfer/dictionary-copy-specs.d.ts +32 -0
- package/lib/transfer/dictionary-copy-specs.js +28 -0
- package/lib/transfer/drop-transfer-temp-tables.d.ts +9 -0
- package/lib/transfer/drop-transfer-temp-tables.js +18 -0
- package/lib/transfer/flatten-redirect-chains.d.ts +44 -0
- package/lib/transfer/flatten-redirect-chains.js +74 -0
- package/lib/transfer/insert-content-items.d.ts +35 -0
- package/lib/transfer/insert-content-items.js +116 -0
- package/lib/transfer/list-transfer-columns.d.ts +35 -0
- package/lib/transfer/list-transfer-columns.js +45 -0
- package/lib/transfer/mark-in-scope-content-items.d.ts +31 -0
- package/lib/transfer/mark-in-scope-content-items.js +54 -0
- package/lib/transfer/merge-archive-configs.d.ts +51 -0
- package/lib/transfer/merge-archive-configs.js +85 -0
- package/lib/transfer/plan-content-items-for-concat.d.ts +33 -0
- package/lib/transfer/plan-content-items-for-concat.js +51 -0
- package/lib/transfer/plan-content-items-for-split.d.ts +42 -0
- package/lib/transfer/plan-content-items-for-split.js +83 -0
- package/lib/transfer/plan-resource-items.d.ts +40 -0
- package/lib/transfer/plan-resource-items.js +69 -0
- package/lib/transfer/quote-transfer-identifier.d.ts +18 -0
- package/lib/transfer/quote-transfer-identifier.js +20 -0
- package/lib/transfer/reclassify-resource-externality.d.ts +37 -0
- package/lib/transfer/reclassify-resource-externality.js +66 -0
- package/lib/transfer/remap-redirect-dest-ids.d.ts +34 -0
- package/lib/transfer/remap-redirect-dest-ids.js +51 -0
- package/lib/transfer/replace-content-items.d.ts +39 -0
- package/lib/transfer/replace-content-items.js +83 -0
- package/lib/transfer/simple-page-scoped-tables.d.ts +25 -0
- package/lib/transfer/simple-page-scoped-tables.js +38 -0
- package/lib/transfer/split-archive.d.ts +55 -0
- package/lib/transfer/split-archive.js +98 -0
- package/lib/transfer/split-source-transfer-phases.d.ts +11 -0
- package/lib/transfer/split-source-transfer-phases.js +18 -0
- package/lib/transfer/transfer-action.d.ts +34 -0
- package/lib/transfer/transfer-action.js +32 -0
- package/lib/transfer/transfer-archive-rows.d.ts +65 -0
- package/lib/transfer/transfer-archive-rows.js +156 -0
- package/lib/transfer/transfer-dictionary-tables.d.ts +12 -0
- package/lib/transfer/transfer-dictionary-tables.js +22 -0
- package/lib/transfer/transfer-post-phases.d.ts +10 -0
- package/lib/transfer/transfer-post-phases.js +13 -0
- package/lib/transfer/transfer-source-alias.d.ts +9 -0
- package/lib/transfer/transfer-source-alias.js +9 -0
- package/lib/transfer/types.d.ts +111 -0
- package/lib/transfer/types.js +35 -0
- package/lib/types.d.ts +772 -0
- package/lib/types.js +1 -0
- package/lib/url-alias/compute-tier-a-alias-key.d.ts +44 -0
- package/lib/url-alias/compute-tier-a-alias-key.js +47 -0
- package/lib/url-alias/compute-tier-b-alias-key.d.ts +23 -0
- package/lib/url-alias/compute-tier-b-alias-key.js +26 -0
- package/lib/url-alias/group-alias-candidates.d.ts +27 -0
- package/lib/url-alias/group-alias-candidates.js +29 -0
- package/lib/url-alias/types.d.ts +12 -0
- package/lib/url-alias/types.js +1 -0
- package/lib/url-pattern/compute-shape-key.d.ts +58 -0
- package/lib/url-pattern/compute-shape-key.js +129 -0
- package/lib/url-pattern/decompose-url.d.ts +33 -0
- package/lib/url-pattern/decompose-url.js +79 -0
- package/lib/url-pattern/reconstruct-url.d.ts +15 -0
- package/lib/url-pattern/reconstruct-url.js +33 -0
- package/lib/url-sort/compute-url-sort-ranks.d.ts +30 -0
- package/lib/url-sort/compute-url-sort-ranks.js +33 -0
- package/lib/utils/array/each-splitted.d.ts +10 -0
- package/lib/utils/array/each-splitted.js +14 -0
- package/lib/utils/debug.d.ts +8 -0
- package/lib/utils/debug.js +8 -0
- package/lib/utils/error/emit-error-with-retry.d.ts +40 -0
- package/lib/utils/error/emit-error-with-retry.js +44 -0
- package/lib/utils/error/emit-error.d.ts +39 -0
- package/lib/utils/error/emit-error.js +41 -0
- package/lib/utils/object/parse-response-headers.d.ts +12 -0
- package/lib/utils/object/parse-response-headers.js +26 -0
- package/lib/utils/object/redact-request-headers.d.ts +15 -0
- package/lib/utils/object/redact-request-headers.js +27 -0
- package/lib/utils/types/types.d.ts +383 -0
- package/lib/utils/types/types.js +1 -0
- package/lib/verify-migration/capture-rejection.d.ts +24 -0
- package/lib/verify-migration/capture-rejection.js +31 -0
- package/lib/verify-migration/check-anchor-edges-count.d.ts +34 -0
- package/lib/verify-migration/check-anchor-edges-count.js +72 -0
- package/lib/verify-migration/check-anchor-edges-sum.d.ts +13 -0
- package/lib/verify-migration/check-anchor-edges-sum.js +27 -0
- package/lib/verify-migration/check-content-items-count.d.ts +16 -0
- package/lib/verify-migration/check-content-items-count.js +30 -0
- package/lib/verify-migration/check-content-type-preservation.d.ts +22 -0
- package/lib/verify-migration/check-content-type-preservation.js +40 -0
- package/lib/verify-migration/check-foreign-key-integrity.d.ts +31 -0
- package/lib/verify-migration/check-foreign-key-integrity.js +47 -0
- package/lib/verify-migration/check-image-items-count.d.ts +12 -0
- package/lib/verify-migration/check-image-items-count.js +26 -0
- package/lib/verify-migration/check-page-meta-count.d.ts +15 -0
- package/lib/verify-migration/check-page-meta-count.js +31 -0
- package/lib/verify-migration/check-reader-parity.d.ts +23 -0
- package/lib/verify-migration/check-reader-parity.js +182 -0
- package/lib/verify-migration/check-resource-items-count.d.ts +17 -0
- package/lib/verify-migration/check-resource-items-count.js +33 -0
- package/lib/verify-migration/check-url-round-trip.d.ts +43 -0
- package/lib/verify-migration/check-url-round-trip.js +112 -0
- package/lib/verify-migration/types.d.ts +70 -0
- package/lib/verify-migration/types.js +63 -0
- package/lib/verify-migration/verify-migration.d.ts +41 -0
- package/lib/verify-migration/verify-migration.js +120 -0
- package/lib/with-bulk-write-pragmas.d.ts +51 -0
- package/lib/with-bulk-write-pragmas.js +132 -0
- package/lib/write-queue.d.ts +32 -0
- package/lib/write-queue.js +55 -0
- 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>;
|