@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,51 @@
|
|
|
1
|
+
import { TRANSFER_ACTION } from './transfer-action.js';
|
|
2
|
+
import { TRANSFER_SOURCE_ALIAS } from './transfer-source-alias.js';
|
|
3
|
+
/**
|
|
4
|
+
* Remaps `redirect_dest_id` for every `full`/`stub`/`replace`-action
|
|
5
|
+
* destination row this source just wrote, from the source's own id space
|
|
6
|
+
* into the destination's, via `temp.xfer_ci_plan` (which by this point
|
|
7
|
+
* maps EVERY source id to a destination id, not just the ones this source
|
|
8
|
+
* inserted — `skip`/`replace` rows already had `dest_id` set at plan
|
|
9
|
+
* time).
|
|
10
|
+
*
|
|
11
|
+
* `skip`-action rows are deliberately excluded from the `SET` target
|
|
12
|
+
* (via the `p.action IN (...)` filter) — a `skip` row's `content_items`
|
|
13
|
+
* row belongs to a PRIOR, better-ranked source, and this (losing) source
|
|
14
|
+
* has no business touching its `redirect_dest_id`.
|
|
15
|
+
*
|
|
16
|
+
* Must run AFTER both
|
|
17
|
+
* {@link import('./insert-content-items.js').insertContentItems} and
|
|
18
|
+
* {@link import('./replace-content-items.js').replaceContentItems} —
|
|
19
|
+
* every plan row needs a resolved `dest_id` (its own AND its redirect
|
|
20
|
+
* target's) before this can run. A source row whose `redirect_dest_id`
|
|
21
|
+
* points outside this source's own plan (should not happen — concat's
|
|
22
|
+
* plan covers every source row, and split's plan closure always pulls a
|
|
23
|
+
* kept row's redirect target in too, see `plan-content-items-for-split.ts`)
|
|
24
|
+
* silently leaves that destination row's `redirect_dest_id` at `NULL`
|
|
25
|
+
* rather than erroring — a dangling-but-absent redirect is a safe
|
|
26
|
+
* degrade, never a wrong one.
|
|
27
|
+
* @param trx - Transaction with the source ATTACHed as
|
|
28
|
+
* {@link TRANSFER_SOURCE_ALIAS}.
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* await insertContentItems(trx, { crawlOrderOffset: 0 });
|
|
32
|
+
* await remapRedirectDestIds(trx);
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export async function remapRedirectDestIds(trx) {
|
|
36
|
+
await trx.raw(`
|
|
37
|
+
UPDATE main.content_items
|
|
38
|
+
SET redirect_dest_id = x.redirect_dest_id
|
|
39
|
+
FROM (
|
|
40
|
+
SELECT p.dest_id AS id, p2.dest_id AS redirect_dest_id
|
|
41
|
+
FROM xfer_ci_plan p
|
|
42
|
+
JOIN ${TRANSFER_SOURCE_ALIAS}.content_items s ON s.id = p.src_id
|
|
43
|
+
JOIN xfer_ci_plan p2 ON p2.src_id = s.redirect_dest_id
|
|
44
|
+
WHERE s.redirect_dest_id IS NOT NULL
|
|
45
|
+
AND p.action IN (${TRANSFER_ACTION.full}, ${TRANSFER_ACTION.stub}, ${TRANSFER_ACTION.replace})
|
|
46
|
+
AND p2.dest_id IS NOT NULL
|
|
47
|
+
) x
|
|
48
|
+
WHERE main.content_items.id = x.id
|
|
49
|
+
AND x.redirect_dest_id != x.id
|
|
50
|
+
`);
|
|
51
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
/**
|
|
3
|
+
* Overwrites every `replace`-action destination `content_items` row
|
|
4
|
+
* (concat only — split never assigns `replace`) with this source's
|
|
5
|
+
* column values, using the same per-column remap rules
|
|
6
|
+
* {@link import('./insert-content-items.js').insertContentItems} applies
|
|
7
|
+
* (dictionary FKs through their `temp.xfer_map_*` table, `redirect_dest_id`/
|
|
8
|
+
* `alias_of_id`/`dedupe_cap_event_id` always `NULL`, `crawl_order` offset).
|
|
9
|
+
*
|
|
10
|
+
* `url_id` is deliberately excluded from the UPDATE — a `replace` row was
|
|
11
|
+
* matched by URL string in the first place (`plan-content-items-for-concat.ts`),
|
|
12
|
+
* so the destination's `url_id` already points at the correct `url_refs`
|
|
13
|
+
* row and must not change. `is_external`/`is_target` are never forced
|
|
14
|
+
* here (unlike `insertContentItems`'s `stub` case) — concat has no stub
|
|
15
|
+
* action, so the source's own observed values pass straight through the
|
|
16
|
+
* generic `default` branch.
|
|
17
|
+
*
|
|
18
|
+
* Must run BEFORE {@link import('./insert-content-items.js').insertContentItems}
|
|
19
|
+
* would otherwise be fine in either order relative to it (they touch
|
|
20
|
+
* disjoint plan actions), but MUST run before the page-scoped table
|
|
21
|
+
* copies (`copy-page-meta.ts` et al.) — and after
|
|
22
|
+
* {@link import('./clear-replaced-page-rows.js').clearReplacedPageRows}
|
|
23
|
+
* has deleted the old derived rows for these same destination ids, so the
|
|
24
|
+
* fresh page-scoped copy does not collide with stale data.
|
|
25
|
+
* @param trx - Transaction with the source ATTACHed as
|
|
26
|
+
* {@link TRANSFER_SOURCE_ALIAS}.
|
|
27
|
+
* @param options - Options.
|
|
28
|
+
* @param options.crawlOrderOffset - See `insertContentItems`'s parameter
|
|
29
|
+
* of the same name — the same value passed to that call for this source.
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* await clearReplacedPageRows(trx);
|
|
33
|
+
* await replaceContentItems(trx, { crawlOrderOffset: 0 });
|
|
34
|
+
* await insertContentItems(trx, { crawlOrderOffset: 0 });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function replaceContentItems(trx: Knex, options: {
|
|
38
|
+
crawlOrderOffset: number;
|
|
39
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,83 @@
|
|
|
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
|
+
/**
|
|
7
|
+
* Overwrites every `replace`-action destination `content_items` row
|
|
8
|
+
* (concat only — split never assigns `replace`) with this source's
|
|
9
|
+
* column values, using the same per-column remap rules
|
|
10
|
+
* {@link import('./insert-content-items.js').insertContentItems} applies
|
|
11
|
+
* (dictionary FKs through their `temp.xfer_map_*` table, `redirect_dest_id`/
|
|
12
|
+
* `alias_of_id`/`dedupe_cap_event_id` always `NULL`, `crawl_order` offset).
|
|
13
|
+
*
|
|
14
|
+
* `url_id` is deliberately excluded from the UPDATE — a `replace` row was
|
|
15
|
+
* matched by URL string in the first place (`plan-content-items-for-concat.ts`),
|
|
16
|
+
* so the destination's `url_id` already points at the correct `url_refs`
|
|
17
|
+
* row and must not change. `is_external`/`is_target` are never forced
|
|
18
|
+
* here (unlike `insertContentItems`'s `stub` case) — concat has no stub
|
|
19
|
+
* action, so the source's own observed values pass straight through the
|
|
20
|
+
* generic `default` branch.
|
|
21
|
+
*
|
|
22
|
+
* Must run BEFORE {@link import('./insert-content-items.js').insertContentItems}
|
|
23
|
+
* would otherwise be fine in either order relative to it (they touch
|
|
24
|
+
* disjoint plan actions), but MUST run before the page-scoped table
|
|
25
|
+
* copies (`copy-page-meta.ts` et al.) — and after
|
|
26
|
+
* {@link import('./clear-replaced-page-rows.js').clearReplacedPageRows}
|
|
27
|
+
* has deleted the old derived rows for these same destination ids, so the
|
|
28
|
+
* fresh page-scoped copy does not collide with stale data.
|
|
29
|
+
* @param trx - Transaction with the source ATTACHed as
|
|
30
|
+
* {@link TRANSFER_SOURCE_ALIAS}.
|
|
31
|
+
* @param options - Options.
|
|
32
|
+
* @param options.crawlOrderOffset - See `insertContentItems`'s parameter
|
|
33
|
+
* of the same name — the same value passed to that call for this source.
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* await clearReplacedPageRows(trx);
|
|
37
|
+
* await replaceContentItems(trx, { crawlOrderOffset: 0 });
|
|
38
|
+
* await insertContentItems(trx, { crawlOrderOffset: 0 });
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export async function replaceContentItems(trx, options) {
|
|
42
|
+
const columns = await listTransferColumns(trx, SRC, 'content_items', ['id', 'url_id']);
|
|
43
|
+
const setList = columns
|
|
44
|
+
.map((col) => `${quoteTransferIdentifier(col)} = x.${quoteTransferIdentifier(col)}`)
|
|
45
|
+
.join(', ');
|
|
46
|
+
const selectList = columns
|
|
47
|
+
.map((col) => {
|
|
48
|
+
const quotedCol = quoteTransferIdentifier(col);
|
|
49
|
+
switch (col) {
|
|
50
|
+
case 'content_type_id': {
|
|
51
|
+
return `mct.dest_id AS ${quotedCol}`;
|
|
52
|
+
}
|
|
53
|
+
case 'header_set_id': {
|
|
54
|
+
return `mhs.dest_id AS ${quotedCol}`;
|
|
55
|
+
}
|
|
56
|
+
case 'redirect_dest_id':
|
|
57
|
+
case 'alias_of_id':
|
|
58
|
+
case 'dedupe_cap_event_id': {
|
|
59
|
+
return `NULL AS ${quotedCol}`;
|
|
60
|
+
}
|
|
61
|
+
case 'crawl_order': {
|
|
62
|
+
return `s.crawl_order + ${options.crawlOrderOffset} AS ${quotedCol}`;
|
|
63
|
+
}
|
|
64
|
+
default: {
|
|
65
|
+
return `s.${quotedCol} AS ${quotedCol}`;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
})
|
|
69
|
+
.join(', ');
|
|
70
|
+
await trx.raw(`
|
|
71
|
+
UPDATE main.content_items
|
|
72
|
+
SET ${setList}
|
|
73
|
+
FROM (
|
|
74
|
+
SELECT p.dest_id AS dest_id, ${selectList}
|
|
75
|
+
FROM xfer_ci_plan p
|
|
76
|
+
JOIN ${SRC}.content_items s ON s.id = p.src_id
|
|
77
|
+
LEFT JOIN xfer_map_content_type_refs mct ON mct.src_id = s.content_type_id
|
|
78
|
+
LEFT JOIN xfer_map_header_sets mhs ON mhs.src_id = s.header_set_id
|
|
79
|
+
WHERE p.action = ${TRANSFER_ACTION.replace}
|
|
80
|
+
) x
|
|
81
|
+
WHERE main.content_items.id = x.dest_id
|
|
82
|
+
`);
|
|
83
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every page-scoped table whose only FK column is its own page reference
|
|
3
|
+
* — no dictionary or cross-entity FK columns to remap, so every other
|
|
4
|
+
* column passes through unchanged. Covers the 9
|
|
5
|
+
* beholder-`MainContentsData` sub-entity tables, the technology-detection
|
|
6
|
+
* pair (always updated together, per ARCHITECTURE.md's pairing
|
|
7
|
+
* invariant — copying both in the same call keeps that true here too),
|
|
8
|
+
* `page_jsonld`, `page_errors`, `page_html_ref` (`hash` is the content-
|
|
9
|
+
* addressed identity of a `page_html_blobs` row, identical in every archive,
|
|
10
|
+
* so it passes through once `copy-page-html-blobs.ts` has copied the blob),
|
|
11
|
+
* and `page_templates` (`template_key` is a plain string column, not a
|
|
12
|
+
* dictionary FK — see `copy-page-template-clusters.ts` for its paired
|
|
13
|
+
* cluster-evidence table).
|
|
14
|
+
*
|
|
15
|
+
* Shared between {@link import('./copy-simple-page-scoped-tables.js').copySimplePageScopedTables}
|
|
16
|
+
* (what to copy verbatim) and
|
|
17
|
+
* {@link import('./clear-replaced-page-rows.js').clearReplacedPageRows}
|
|
18
|
+
* (a subset of what to delete for a `replace`d page) — a single list here
|
|
19
|
+
* means a future page-scoped table only needs adding in one place to stay
|
|
20
|
+
* consistent between the two operations.
|
|
21
|
+
*/
|
|
22
|
+
export declare const SIMPLE_PAGE_SCOPED_TABLES: readonly {
|
|
23
|
+
table: string;
|
|
24
|
+
pageColumn: string;
|
|
25
|
+
}[];
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every page-scoped table whose only FK column is its own page reference
|
|
3
|
+
* — no dictionary or cross-entity FK columns to remap, so every other
|
|
4
|
+
* column passes through unchanged. Covers the 9
|
|
5
|
+
* beholder-`MainContentsData` sub-entity tables, the technology-detection
|
|
6
|
+
* pair (always updated together, per ARCHITECTURE.md's pairing
|
|
7
|
+
* invariant — copying both in the same call keeps that true here too),
|
|
8
|
+
* `page_jsonld`, `page_errors`, `page_html_ref` (`hash` is the content-
|
|
9
|
+
* addressed identity of a `page_html_blobs` row, identical in every archive,
|
|
10
|
+
* so it passes through once `copy-page-html-blobs.ts` has copied the blob),
|
|
11
|
+
* and `page_templates` (`template_key` is a plain string column, not a
|
|
12
|
+
* dictionary FK — see `copy-page-template-clusters.ts` for its paired
|
|
13
|
+
* cluster-evidence table).
|
|
14
|
+
*
|
|
15
|
+
* Shared between {@link import('./copy-simple-page-scoped-tables.js').copySimplePageScopedTables}
|
|
16
|
+
* (what to copy verbatim) and
|
|
17
|
+
* {@link import('./clear-replaced-page-rows.js').clearReplacedPageRows}
|
|
18
|
+
* (a subset of what to delete for a `replace`d page) — a single list here
|
|
19
|
+
* means a future page-scoped table only needs adding in one place to stay
|
|
20
|
+
* consistent between the two operations.
|
|
21
|
+
*/
|
|
22
|
+
export const SIMPLE_PAGE_SCOPED_TABLES = [
|
|
23
|
+
{ table: 'page_main_content_headings', pageColumn: 'pageId' },
|
|
24
|
+
{ table: 'page_main_content_images', pageColumn: 'pageId' },
|
|
25
|
+
{ table: 'page_main_content_tables', pageColumn: 'pageId' },
|
|
26
|
+
{ table: 'page_main_content_buttons', pageColumn: 'pageId' },
|
|
27
|
+
{ table: 'page_main_content_iframes', pageColumn: 'pageId' },
|
|
28
|
+
{ table: 'page_main_content_videos', pageColumn: 'pageId' },
|
|
29
|
+
{ table: 'page_main_content_audios', pageColumn: 'pageId' },
|
|
30
|
+
{ table: 'page_main_content_canvases', pageColumn: 'pageId' },
|
|
31
|
+
{ table: 'page_main_content_custom_elements', pageColumn: 'pageId' },
|
|
32
|
+
{ table: 'technology_signals', pageColumn: 'pageId' },
|
|
33
|
+
{ table: 'page_technologies', pageColumn: 'pageId' },
|
|
34
|
+
{ table: 'page_jsonld', pageColumn: 'pageId' },
|
|
35
|
+
{ table: 'page_errors', pageColumn: 'pageId' },
|
|
36
|
+
{ table: 'page_html_ref', pageColumn: 'page_id' },
|
|
37
|
+
{ table: 'page_templates', pageColumn: 'page_id' },
|
|
38
|
+
];
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { ArchiveAccessor } from '../archive-accessor.js';
|
|
2
|
+
import type Archive from '../archive.js';
|
|
3
|
+
import type { SplitArchiveResult, TransferCallbacks } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Extracts the subset of one read-only-opened source archive within the
|
|
6
|
+
* given scope URLs into an already `Archive.create`d, empty destination —
|
|
7
|
+
* the crawler-side half of the `split` CLI command. Does not open/close/
|
|
8
|
+
* write anything itself; see `concat-archives.ts`'s docs for the same
|
|
9
|
+
* lifecycle-ownership split (the CLI's `commands/split.ts` owns open →
|
|
10
|
+
* transfer → rebuild-read-model → write).
|
|
11
|
+
*
|
|
12
|
+
* Rejects a `fromList` source up front — see `build-split-config.ts`'s
|
|
13
|
+
* docs for why "roots = the given scope" has no coherent meaning for an
|
|
14
|
+
* archive whose `roots` is a URL list rather than a scope.
|
|
15
|
+
*
|
|
16
|
+
* `flattenRedirectChains` still runs even though a single, not-yet-merged
|
|
17
|
+
* source is already flat by construction — a cheap no-op, kept for the
|
|
18
|
+
* same reason `reclassifyResourceExternality` is written mode-agnostic
|
|
19
|
+
* rather than split having its own near-duplicate of each.
|
|
20
|
+
* @param options - See individual properties.
|
|
21
|
+
* @param options.source - The source, read-only opened
|
|
22
|
+
* (`Archive.openCached`).
|
|
23
|
+
* @param options.source.path
|
|
24
|
+
* @param options.source.accessor
|
|
25
|
+
* @param options.scopeUrls - The scope URLs the operator gave (raw
|
|
26
|
+
* strings; normalised to `withoutHash` form by
|
|
27
|
+
* {@link import('./build-split-config.js').buildSplitConfig}).
|
|
28
|
+
* @param options.destination - The empty destination, already
|
|
29
|
+
* `Archive.create`d by the caller.
|
|
30
|
+
* @param options.name - The output archive's `name` config field.
|
|
31
|
+
* @param options.callbacks - Progress callbacks; see `types.ts`.
|
|
32
|
+
* @returns The derived config and the transfer outcome.
|
|
33
|
+
* @throws {Error} If the source is a `fromList` archive, or `scopeUrls` is empty.
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* const destination = await Archive.create({ filePath: outputPath, cwd });
|
|
37
|
+
* const accessor = await Archive.openCached(archivePath);
|
|
38
|
+
* const result = await splitArchive({
|
|
39
|
+
* source: { path: archivePath, accessor },
|
|
40
|
+
* scopeUrls: ['https://example.com/blog/'],
|
|
41
|
+
* destination,
|
|
42
|
+
* name: 'blog',
|
|
43
|
+
* });
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare function splitArchive(options: {
|
|
47
|
+
readonly source: {
|
|
48
|
+
readonly accessor: ArchiveAccessor;
|
|
49
|
+
readonly path: string;
|
|
50
|
+
};
|
|
51
|
+
readonly scopeUrls: readonly string[];
|
|
52
|
+
readonly destination: Archive;
|
|
53
|
+
readonly name: string;
|
|
54
|
+
readonly callbacks?: TransferCallbacks;
|
|
55
|
+
}): Promise<SplitArchiveResult>;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import ArchiveDefault from '../archive.js';
|
|
3
|
+
import { buildScopeMap } from '../scope/build-scope-map.js';
|
|
4
|
+
import { buildSplitConfig } from './build-split-config.js';
|
|
5
|
+
import { copyInventorySourceLists } from './copy-inventory-source-lists.js';
|
|
6
|
+
import { countExternalPagesInScope } from './count-external-pages-in-scope.js';
|
|
7
|
+
import { flattenRedirectChains } from './flatten-redirect-chains.js';
|
|
8
|
+
import { reclassifyResourceExternality } from './reclassify-resource-externality.js';
|
|
9
|
+
import { transferArchiveRows } from './transfer-archive-rows.js';
|
|
10
|
+
/**
|
|
11
|
+
* Extracts the subset of one read-only-opened source archive within the
|
|
12
|
+
* given scope URLs into an already `Archive.create`d, empty destination —
|
|
13
|
+
* the crawler-side half of the `split` CLI command. Does not open/close/
|
|
14
|
+
* write anything itself; see `concat-archives.ts`'s docs for the same
|
|
15
|
+
* lifecycle-ownership split (the CLI's `commands/split.ts` owns open →
|
|
16
|
+
* transfer → rebuild-read-model → write).
|
|
17
|
+
*
|
|
18
|
+
* Rejects a `fromList` source up front — see `build-split-config.ts`'s
|
|
19
|
+
* docs for why "roots = the given scope" has no coherent meaning for an
|
|
20
|
+
* archive whose `roots` is a URL list rather than a scope.
|
|
21
|
+
*
|
|
22
|
+
* `flattenRedirectChains` still runs even though a single, not-yet-merged
|
|
23
|
+
* source is already flat by construction — a cheap no-op, kept for the
|
|
24
|
+
* same reason `reclassifyResourceExternality` is written mode-agnostic
|
|
25
|
+
* rather than split having its own near-duplicate of each.
|
|
26
|
+
* @param options - See individual properties.
|
|
27
|
+
* @param options.source - The source, read-only opened
|
|
28
|
+
* (`Archive.openCached`).
|
|
29
|
+
* @param options.source.path
|
|
30
|
+
* @param options.source.accessor
|
|
31
|
+
* @param options.scopeUrls - The scope URLs the operator gave (raw
|
|
32
|
+
* strings; normalised to `withoutHash` form by
|
|
33
|
+
* {@link import('./build-split-config.js').buildSplitConfig}).
|
|
34
|
+
* @param options.destination - The empty destination, already
|
|
35
|
+
* `Archive.create`d by the caller.
|
|
36
|
+
* @param options.name - The output archive's `name` config field.
|
|
37
|
+
* @param options.callbacks - Progress callbacks; see `types.ts`.
|
|
38
|
+
* @returns The derived config and the transfer outcome.
|
|
39
|
+
* @throws {Error} If the source is a `fromList` archive, or `scopeUrls` is empty.
|
|
40
|
+
* @example
|
|
41
|
+
* ```ts
|
|
42
|
+
* const destination = await Archive.create({ filePath: outputPath, cwd });
|
|
43
|
+
* const accessor = await Archive.openCached(archivePath);
|
|
44
|
+
* const result = await splitArchive({
|
|
45
|
+
* source: { path: archivePath, accessor },
|
|
46
|
+
* scopeUrls: ['https://example.com/blog/'],
|
|
47
|
+
* destination,
|
|
48
|
+
* name: 'blog',
|
|
49
|
+
* });
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export async function splitArchive(options) {
|
|
53
|
+
const { source, scopeUrls, destination, name, callbacks } = options;
|
|
54
|
+
const sourceConfig = await source.accessor.getConfig();
|
|
55
|
+
if (sourceConfig.fromList) {
|
|
56
|
+
throw new Error('split: cannot split a --list/--list-file archive — its roots are a URL list, ' +
|
|
57
|
+
'not a scope, so "roots = the given scope" has no coherent meaning for it.');
|
|
58
|
+
}
|
|
59
|
+
const config = buildSplitConfig(sourceConfig, scopeUrls, name);
|
|
60
|
+
await destination.setConfig(config);
|
|
61
|
+
const knex = destination.getKnex();
|
|
62
|
+
const scope = buildScopeMap(config.roots, config);
|
|
63
|
+
callbacks?.onSourceStart?.(0, source.path);
|
|
64
|
+
const sourceDbPath = path.join(source.accessor.tmpDir, ArchiveDefault.SQLITE_DB_FILE_NAME);
|
|
65
|
+
const result = await transferArchiveRows({
|
|
66
|
+
knex,
|
|
67
|
+
sourceDbPath,
|
|
68
|
+
mode: { kind: 'split', scopeMap: scope, parseOptions: config },
|
|
69
|
+
crawlOrderOffset: 0,
|
|
70
|
+
sourceIndex: 0,
|
|
71
|
+
callbacks,
|
|
72
|
+
});
|
|
73
|
+
if (result.inserted === 0) {
|
|
74
|
+
throw new Error('split: no page inside the given scope was found in the source archive — nothing to extract.');
|
|
75
|
+
}
|
|
76
|
+
callbacks?.onPhase?.(1, 'flatteningRedirects');
|
|
77
|
+
await flattenRedirectChains(knex);
|
|
78
|
+
callbacks?.onPhase?.(1, 'reclassifyingResources');
|
|
79
|
+
await reclassifyResourceExternality(knex, scope, config);
|
|
80
|
+
callbacks?.onPhase?.(1, 'countingExternalInScope');
|
|
81
|
+
// Not always 0: the operator's scope URLs are not required to be a
|
|
82
|
+
// SUBSET of the source's original roots. A split scope broader than (or
|
|
83
|
+
// merely different from) the original roots can bring a page that was
|
|
84
|
+
// only ever recorded as an external link (never crawled under the
|
|
85
|
+
// source's narrower original scope) inside the new scope — the same
|
|
86
|
+
// "still external, never fabricate a scrape" rule concat's own
|
|
87
|
+
// `externalInScopeCount` documents.
|
|
88
|
+
const externalInScopeCount = await countExternalPagesInScope(knex, scope, config);
|
|
89
|
+
const inventoryListsCopied = await copyInventorySourceLists(destination, [
|
|
90
|
+
source.accessor.tmpDir,
|
|
91
|
+
]);
|
|
92
|
+
return {
|
|
93
|
+
config,
|
|
94
|
+
source: result,
|
|
95
|
+
externalInScopeCount,
|
|
96
|
+
inventoryListsCopied,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TransferPhase } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Ordered phase sequence {@link import('./transfer-archive-rows.js').transferArchiveRows}
|
|
4
|
+
* announces via `onPhase` for split's single source — identical to
|
|
5
|
+
* {@link import('./concat-source-transfer-phases.js').CONCAT_SOURCE_TRANSFER_PHASES}
|
|
6
|
+
* (the phase sequence inside `transferArchiveRows` does not branch on
|
|
7
|
+
* mode, only what each phase DOES differs), kept as its own named export
|
|
8
|
+
* so a CLI caller building split's `TaskList` rows never has to reason
|
|
9
|
+
* about why it is importing something named "concat".
|
|
10
|
+
*/
|
|
11
|
+
export declare const SPLIT_SOURCE_TRANSFER_PHASES: readonly TransferPhase[];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ordered phase sequence {@link import('./transfer-archive-rows.js').transferArchiveRows}
|
|
3
|
+
* announces via `onPhase` for split's single source — identical to
|
|
4
|
+
* {@link import('./concat-source-transfer-phases.js').CONCAT_SOURCE_TRANSFER_PHASES}
|
|
5
|
+
* (the phase sequence inside `transferArchiveRows` does not branch on
|
|
6
|
+
* mode, only what each phase DOES differs), kept as its own named export
|
|
7
|
+
* so a CLI caller building split's `TaskList` rows never has to reason
|
|
8
|
+
* about why it is importing something named "concat".
|
|
9
|
+
*/
|
|
10
|
+
export const SPLIT_SOURCE_TRANSFER_PHASES = [
|
|
11
|
+
'planningContentItems',
|
|
12
|
+
'copyingDictionaries',
|
|
13
|
+
'copyingContentItems',
|
|
14
|
+
'copyingPageRows',
|
|
15
|
+
'copyingResources',
|
|
16
|
+
'copyingJournals',
|
|
17
|
+
'committing',
|
|
18
|
+
];
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The action a `content_items` transfer plan (`temp.xfer_ci_plan`) assigns
|
|
3
|
+
* to each source row, stored as a small integer so the plan table can be
|
|
4
|
+
* queried/joined without a TEXT comparison.
|
|
5
|
+
*
|
|
6
|
+
* - `full` — insert the source row (and its page-scoped data) as a
|
|
7
|
+
* brand-new destination row. Used by both concat (no existing dest row
|
|
8
|
+
* for this URL yet) and split (in-scope, kept in full).
|
|
9
|
+
* - `stub` — insert only the `content_items` row itself, forced to
|
|
10
|
+
* `is_external = 1` / `is_target = 0`; no `page_meta` or any other
|
|
11
|
+
* page-scoped row is copied. Split-only — an out-of-scope page that a
|
|
12
|
+
* kept page still references (an anchor target or a redirect
|
|
13
|
+
* destination).
|
|
14
|
+
* - `replace` — an existing destination row for this URL is overwritten
|
|
15
|
+
* because this source's observation outranks it (see
|
|
16
|
+
* `content-item-rank-sql.ts`). Concat-only.
|
|
17
|
+
* - `skip` — the source row is not copied at all; the destination already
|
|
18
|
+
* holds an equal-or-better observation for this URL. Concat-only.
|
|
19
|
+
*
|
|
20
|
+
* `full` and `stub` are the only actions {@link
|
|
21
|
+
* import('./plan-content-items-for-split.js').planContentItemsForSplit}
|
|
22
|
+
* ever assigns; `full`, `replace`, and `skip` are the only actions {@link
|
|
23
|
+
* import('./plan-content-items-for-concat.js').planContentItemsForConcat}
|
|
24
|
+
* ever assigns — a row not present in the plan at all means "dropped"
|
|
25
|
+
* (split-only: out of scope and unreferenced by anything kept).
|
|
26
|
+
*/
|
|
27
|
+
export declare const TRANSFER_ACTION: {
|
|
28
|
+
readonly full: 1;
|
|
29
|
+
readonly stub: 2;
|
|
30
|
+
readonly replace: 3;
|
|
31
|
+
readonly skip: 4;
|
|
32
|
+
};
|
|
33
|
+
/** Union of {@link TRANSFER_ACTION}'s values. */
|
|
34
|
+
export type TransferAction = (typeof TRANSFER_ACTION)[keyof typeof TRANSFER_ACTION];
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The action a `content_items` transfer plan (`temp.xfer_ci_plan`) assigns
|
|
3
|
+
* to each source row, stored as a small integer so the plan table can be
|
|
4
|
+
* queried/joined without a TEXT comparison.
|
|
5
|
+
*
|
|
6
|
+
* - `full` — insert the source row (and its page-scoped data) as a
|
|
7
|
+
* brand-new destination row. Used by both concat (no existing dest row
|
|
8
|
+
* for this URL yet) and split (in-scope, kept in full).
|
|
9
|
+
* - `stub` — insert only the `content_items` row itself, forced to
|
|
10
|
+
* `is_external = 1` / `is_target = 0`; no `page_meta` or any other
|
|
11
|
+
* page-scoped row is copied. Split-only — an out-of-scope page that a
|
|
12
|
+
* kept page still references (an anchor target or a redirect
|
|
13
|
+
* destination).
|
|
14
|
+
* - `replace` — an existing destination row for this URL is overwritten
|
|
15
|
+
* because this source's observation outranks it (see
|
|
16
|
+
* `content-item-rank-sql.ts`). Concat-only.
|
|
17
|
+
* - `skip` — the source row is not copied at all; the destination already
|
|
18
|
+
* holds an equal-or-better observation for this URL. Concat-only.
|
|
19
|
+
*
|
|
20
|
+
* `full` and `stub` are the only actions {@link
|
|
21
|
+
* import('./plan-content-items-for-split.js').planContentItemsForSplit}
|
|
22
|
+
* ever assigns; `full`, `replace`, and `skip` are the only actions {@link
|
|
23
|
+
* import('./plan-content-items-for-concat.js').planContentItemsForConcat}
|
|
24
|
+
* ever assigns — a row not present in the plan at all means "dropped"
|
|
25
|
+
* (split-only: out of scope and unreferenced by anything kept).
|
|
26
|
+
*/
|
|
27
|
+
export const TRANSFER_ACTION = {
|
|
28
|
+
full: 1,
|
|
29
|
+
stub: 2,
|
|
30
|
+
replace: 3,
|
|
31
|
+
skip: 4,
|
|
32
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { TransferCallbacks, TransferSourceResult } from './types.js';
|
|
2
|
+
import type { ExURL, ParseURLOptions } from '@d-zero/shared/parse-url';
|
|
3
|
+
import type { Knex } from 'knex';
|
|
4
|
+
/** One source's transfer mode and (for split) scope-check inputs. */
|
|
5
|
+
export type TransferSourceMode = {
|
|
6
|
+
readonly kind: 'concat';
|
|
7
|
+
} | {
|
|
8
|
+
readonly kind: 'split';
|
|
9
|
+
readonly scopeMap: ReadonlyMap<string, readonly ExURL[]>;
|
|
10
|
+
readonly parseOptions?: ParseURLOptions;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Transfers ONE source archive's rows into the destination — the shared
|
|
14
|
+
* engine {@link import('./concat-archives.js').concatArchives} and
|
|
15
|
+
* {@link import('./split-archive.js').splitArchive} both drive, once per
|
|
16
|
+
* source. Attaches the source, plans, copies every table in dependency
|
|
17
|
+
* order, and detaches — always, even on failure (`finally`).
|
|
18
|
+
*
|
|
19
|
+
* Order within the transaction (see each step's own docs for why this
|
|
20
|
+
* exact order, not a different one):
|
|
21
|
+
* 1. Plan `content_items` (mode-specific) and `resource_items`.
|
|
22
|
+
* 2. Copy every dictionary (mode-specific), then their `header_sets`
|
|
23
|
+
* children and `page_html_blobs` (both depend on the dictionary maps
|
|
24
|
+
* dictionaries step just built).
|
|
25
|
+
* 3. Concat only: clear the old page-scoped rows of every `replace`
|
|
26
|
+
* destination, then overwrite its `content_items` row. Both modes:
|
|
27
|
+
* insert every `full`/`stub` row, backfilling `dest_id`; remap
|
|
28
|
+
* `redirect_dest_id` now that every row has one.
|
|
29
|
+
* 4. Copy every page-scoped table.
|
|
30
|
+
* 5. Copy `resource_items` (and its js-scan cache), then
|
|
31
|
+
* `resource_ref_edges` (needs the resource plan's `dest_id`, just
|
|
32
|
+
* resolved).
|
|
33
|
+
* 6. Copy the append-only journal tables.
|
|
34
|
+
* @param options - See individual properties.
|
|
35
|
+
* @param options.knex - Knex connected to the destination archive DB (the
|
|
36
|
+
* connection ATTACH/temp-tables/transaction all operate against).
|
|
37
|
+
* @param options.sourceDbPath - Absolute path to the source's `db.sqlite`
|
|
38
|
+
* (e.g. `path.join(accessor.tmpDir, Archive.SQLITE_DB_FILE_NAME)`).
|
|
39
|
+
* @param options.mode - `{ kind: 'concat' }`, or `{ kind: 'split',
|
|
40
|
+
* scopeMap, parseOptions? }` for the narrower-scope pass.
|
|
41
|
+
* @param options.crawlOrderOffset - Forwarded to
|
|
42
|
+
* `insertContentItems`/`replaceContentItems` — see their docs.
|
|
43
|
+
* @param options.sourceIndex - This source's 0-based position, forwarded
|
|
44
|
+
* verbatim to `callbacks` — purely for display, not used in any query.
|
|
45
|
+
* @param options.callbacks - Progress callbacks; see `types.ts`.
|
|
46
|
+
* @returns Per-action row counts — see {@link TransferSourceResult}.
|
|
47
|
+
* @example
|
|
48
|
+
* ```ts
|
|
49
|
+
* const result = await transferArchiveRows({
|
|
50
|
+
* knex: destination.getKnex(),
|
|
51
|
+
* sourceDbPath: path.join(accessor.tmpDir, Archive.SQLITE_DB_FILE_NAME),
|
|
52
|
+
* mode: { kind: 'concat' },
|
|
53
|
+
* crawlOrderOffset: 0,
|
|
54
|
+
* sourceIndex: 0,
|
|
55
|
+
* });
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare function transferArchiveRows(options: {
|
|
59
|
+
readonly knex: Knex;
|
|
60
|
+
readonly sourceDbPath: string;
|
|
61
|
+
readonly mode: TransferSourceMode;
|
|
62
|
+
readonly crawlOrderOffset: number;
|
|
63
|
+
readonly sourceIndex: number;
|
|
64
|
+
readonly callbacks?: TransferCallbacks;
|
|
65
|
+
}): Promise<TransferSourceResult>;
|