@nitpicker/archive 0.0.0-stage → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +191 -0
- package/README.md +105 -2
- 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 +360 -5
|
@@ -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
|
+
}
|