@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,42 @@
|
|
|
1
|
+
import { REQUIRED_FORMAT_VERSION } from '../meta/assert-compatible-version.js';
|
|
2
|
+
/**
|
|
3
|
+
* Derives the output {@link Config} for a `split`, from the source's own
|
|
4
|
+
* config plus the scope URLs the operator gave on the command line.
|
|
5
|
+
*
|
|
6
|
+
* `roots` becomes exactly the given URLs (their `withoutHash` form,
|
|
7
|
+
* matching how `crawl`'s own roots are recorded); `baseUrl` is the first
|
|
8
|
+
* one. Every other scalar field is carried over verbatim from the
|
|
9
|
+
* source — a split narrows WHICH pages are kept, it does not change HOW
|
|
10
|
+
* they were crawled (`recursive`/`interval`/`userAgent`/etc. all still
|
|
11
|
+
* describe the original session honestly). `excludes`/`excludeKeywords`/
|
|
12
|
+
* `excludeUrls` are likewise carried over unchanged (they described the
|
|
13
|
+
* source's own crawl-time exclusions, still true of the subset that
|
|
14
|
+
* survives). `version` is pinned to {@link REQUIRED_FORMAT_VERSION} and
|
|
15
|
+
* `createdCwd` is always `null`, matching `mergeArchiveConfigs`'s same
|
|
16
|
+
* two fields for the same reasons.
|
|
17
|
+
*
|
|
18
|
+
* Callers must reject a `fromList` source BEFORE calling this — `roots`
|
|
19
|
+
* for such an archive is a URL LIST, not a scope, so "roots = the given
|
|
20
|
+
* scope URLs" has no coherent meaning for it (see `docs/split.md`).
|
|
21
|
+
* @param source - The source archive's `getConfig()` result.
|
|
22
|
+
* @param scopeUrls - The scope URLs the operator gave (`withoutHash` form).
|
|
23
|
+
* @param name - The output archive's `name` (typically its basename).
|
|
24
|
+
* @returns The derived {@link Config} to write via `Archive#setConfig`.
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* const config = buildSplitConfig(await source.getConfig(), ['https://example.com/blog/'], 'blog');
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export function buildSplitConfig(source, scopeUrls, name) {
|
|
31
|
+
if (scopeUrls.length === 0) {
|
|
32
|
+
throw new Error('buildSplitConfig: at least one scope URL is required');
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
...source,
|
|
36
|
+
version: REQUIRED_FORMAT_VERSION,
|
|
37
|
+
name,
|
|
38
|
+
roots: [...scopeUrls],
|
|
39
|
+
baseUrl: scopeUrls[0],
|
|
40
|
+
createdCwd: null,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
/**
|
|
3
|
+
* Deletes every page-scoped derived row for a concat source's `replace`-
|
|
4
|
+
* action destination ids (`temp.xfer_ci_plan.dest_id`), across every
|
|
5
|
+
* table in {@link REMAPPED_PAGE_ROW_TABLES} + {@link SIMPLE_PAGE_SCOPED_TABLES}
|
|
6
|
+
* combined. The legacy `analysis_violations` rows are also deleted when the
|
|
7
|
+
* destination archive still carries that table (guarded by `hasTable`),
|
|
8
|
+
* because its legacy FK to `content_items` would otherwise block the
|
|
9
|
+
* deletion. Set-based (`WHERE ... IN (subquery)`), so there is no
|
|
10
|
+
* `SQLITE_LIMIT_VARIABLE_NUMBER` bind-count concern regardless of how many
|
|
11
|
+
* rows are being replaced.
|
|
12
|
+
*
|
|
13
|
+
* Must run BEFORE the page-scoped table copies
|
|
14
|
+
* (`copy-page-meta.ts` et al.) so their `INSERT`s never collide with
|
|
15
|
+
* stale rows left over from the losing destination row's own prior data.
|
|
16
|
+
* @param trx - Transaction with the source ATTACHed.
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* await clearReplacedPageRows(trx);
|
|
20
|
+
* await replaceContentItems(trx, { crawlOrderOffset: 0 });
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function clearReplacedPageRows(trx: Knex): Promise<void>;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { SIMPLE_PAGE_SCOPED_TABLES } from './simple-page-scoped-tables.js';
|
|
2
|
+
import { TRANSFER_ACTION } from './transfer-action.js';
|
|
3
|
+
/**
|
|
4
|
+
* The page-scoped tables NOT covered by {@link SIMPLE_PAGE_SCOPED_TABLES}
|
|
5
|
+
* (which this file also clears — see below) — each of these has its own
|
|
6
|
+
* dedicated FK-remapping copy function (`copy-page-meta.ts`,
|
|
7
|
+
* `copy-anchor-edges.ts`, `copy-image-items.ts`,
|
|
8
|
+
* `copy-resource-ref-edges.ts`, `copy-page-console-logs.ts`), so they are
|
|
9
|
+
* listed explicitly rather than folded into the shared "plain passthrough"
|
|
10
|
+
* table. Together the two lists are a superset of `clearPageDerivedRows`'
|
|
11
|
+
* tables (reused by `resetFailedPages`/`repromoteExternalPages` for the same
|
|
12
|
+
* un-scrape-then-re-insert shape) — the combined set additionally covers
|
|
13
|
+
* `page_console_logs`/`page_templates`/`page_errors`, which that shared
|
|
14
|
+
* helper deliberately omits (see its own JSDoc for why:
|
|
15
|
+
* `repromoteExternalPages` never needed them cleared, and folding them in
|
|
16
|
+
* would have silently changed its existing behaviour). Concat's replace
|
|
17
|
+
* path needs all of them — a `replace` is a full Scoped-Replace of every
|
|
18
|
+
* page-scoped table, not a partial one.
|
|
19
|
+
*/
|
|
20
|
+
const REMAPPED_PAGE_ROW_TABLES = [
|
|
21
|
+
{ table: 'page_meta', pageColumn: 'page_id' },
|
|
22
|
+
{ table: 'anchor_edges', pageColumn: 'page_id' },
|
|
23
|
+
{ table: 'image_items', pageColumn: 'page_id' },
|
|
24
|
+
{ table: 'resource_ref_edges', pageColumn: 'page_id' },
|
|
25
|
+
{ table: 'page_console_logs', pageColumn: 'pageId' },
|
|
26
|
+
];
|
|
27
|
+
/**
|
|
28
|
+
* Deletes every page-scoped derived row for a concat source's `replace`-
|
|
29
|
+
* action destination ids (`temp.xfer_ci_plan.dest_id`), across every
|
|
30
|
+
* table in {@link REMAPPED_PAGE_ROW_TABLES} + {@link SIMPLE_PAGE_SCOPED_TABLES}
|
|
31
|
+
* combined. The legacy `analysis_violations` rows are also deleted when the
|
|
32
|
+
* destination archive still carries that table (guarded by `hasTable`),
|
|
33
|
+
* because its legacy FK to `content_items` would otherwise block the
|
|
34
|
+
* deletion. Set-based (`WHERE ... IN (subquery)`), so there is no
|
|
35
|
+
* `SQLITE_LIMIT_VARIABLE_NUMBER` bind-count concern regardless of how many
|
|
36
|
+
* rows are being replaced.
|
|
37
|
+
*
|
|
38
|
+
* Must run BEFORE the page-scoped table copies
|
|
39
|
+
* (`copy-page-meta.ts` et al.) so their `INSERT`s never collide with
|
|
40
|
+
* stale rows left over from the losing destination row's own prior data.
|
|
41
|
+
* @param trx - Transaction with the source ATTACHed.
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* await clearReplacedPageRows(trx);
|
|
45
|
+
* await replaceContentItems(trx, { crawlOrderOffset: 0 });
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export async function clearReplacedPageRows(trx) {
|
|
49
|
+
const tables = [...REMAPPED_PAGE_ROW_TABLES, ...SIMPLE_PAGE_SCOPED_TABLES];
|
|
50
|
+
if (await trx.schema.hasTable('analysis_violations')) {
|
|
51
|
+
tables.push({ table: 'analysis_violations', pageColumn: 'page_id' });
|
|
52
|
+
}
|
|
53
|
+
for (const { table, pageColumn } of tables) {
|
|
54
|
+
await trx.raw(`
|
|
55
|
+
DELETE FROM main.${table}
|
|
56
|
+
WHERE ${pageColumn} IN (
|
|
57
|
+
SELECT dest_id FROM xfer_ci_plan WHERE action = ${TRANSFER_ACTION.replace}
|
|
58
|
+
)
|
|
59
|
+
`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { ArchiveAccessor } from '../archive-accessor.js';
|
|
2
|
+
import type Archive from '../archive.js';
|
|
3
|
+
import type { ConcatArchivesResult, TransferCallbacks } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Merges two or more read-only-opened source archives into an already
|
|
6
|
+
* `Archive.create`d, empty destination — the crawler-side half of the
|
|
7
|
+
* `concat` CLI command. Does not open/close/write anything itself: the
|
|
8
|
+
* caller owns every accessor's and the destination's lifecycle (see
|
|
9
|
+
* `docs/concat.md` and the CLI's `commands/concat.ts`, which owns the
|
|
10
|
+
* full open → transfer → rebuild-read-model → write sequence this is one
|
|
11
|
+
* step of).
|
|
12
|
+
*
|
|
13
|
+
* Sources are transferred ONE AT A TIME, in argument order, each one's
|
|
14
|
+
* `crawlOrderOffset` set to the destination's current
|
|
15
|
+
* `MAX(content_items.crawl_order)` so a later source's pages always sort
|
|
16
|
+
* after an earlier one's — this is what makes "ties go to the later
|
|
17
|
+
* argument" (see `plan-content-items-for-concat.ts`) match the pages'
|
|
18
|
+
* OWN display order too, not just their win/lose outcome.
|
|
19
|
+
*
|
|
20
|
+
* After every source is transferred: `flattenRedirectChains` (a merge can
|
|
21
|
+
* reintroduce a two-hop redirect chain no single source ever has),
|
|
22
|
+
* `reclassifyResourceExternality` against the MERGED scope, and
|
|
23
|
+
* `countExternalPagesInScope` for the CLI's `--append` hint (concat never
|
|
24
|
+
* promotes such pages itself — see `types.ts`'s
|
|
25
|
+
* `ConcatArchivesResult.externalInScopeCount` docs).
|
|
26
|
+
* @param options - See individual properties.
|
|
27
|
+
* @param options.sources - Every source, read-only opened
|
|
28
|
+
* (`Archive.openCached`), in argument order.
|
|
29
|
+
* @param options.destination - The empty destination, already
|
|
30
|
+
* `Archive.create`d by the caller.
|
|
31
|
+
* @param options.name - The output archive's `name` config field
|
|
32
|
+
* (typically its basename without extension).
|
|
33
|
+
* @param options.callbacks - Progress callbacks; see `types.ts`.
|
|
34
|
+
* @returns The merged config, each source's transfer outcome, and the
|
|
35
|
+
* two summary counts.
|
|
36
|
+
* @throws {import('./types.js').ArchiveConfigConflictError} If sources
|
|
37
|
+
* disagree on `disableQueries`/`fromList` — see `mergeArchiveConfigs`.
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* const destination = await Archive.create({ filePath: outputPath, cwd });
|
|
41
|
+
* const sources = await Promise.all(
|
|
42
|
+
* inputPaths.map(async (p) => ({ path: p, accessor: await Archive.openCached(p) })),
|
|
43
|
+
* );
|
|
44
|
+
* const result = await concatArchives({ sources, destination, name: 'merged' });
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare function concatArchives(options: {
|
|
48
|
+
readonly sources: readonly {
|
|
49
|
+
readonly accessor: ArchiveAccessor;
|
|
50
|
+
readonly path: string;
|
|
51
|
+
}[];
|
|
52
|
+
readonly destination: Archive;
|
|
53
|
+
readonly name: string;
|
|
54
|
+
readonly callbacks?: TransferCallbacks;
|
|
55
|
+
}): Promise<ConcatArchivesResult>;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import ArchiveDefault from '../archive.js';
|
|
3
|
+
import { buildScopeMap } from '../scope/build-scope-map.js';
|
|
4
|
+
import { copyInventorySourceLists } from './copy-inventory-source-lists.js';
|
|
5
|
+
import { countExternalPagesInScope } from './count-external-pages-in-scope.js';
|
|
6
|
+
import { flattenRedirectChains } from './flatten-redirect-chains.js';
|
|
7
|
+
import { mergeArchiveConfigs } from './merge-archive-configs.js';
|
|
8
|
+
import { reclassifyResourceExternality } from './reclassify-resource-externality.js';
|
|
9
|
+
import { transferArchiveRows } from './transfer-archive-rows.js';
|
|
10
|
+
/**
|
|
11
|
+
* Merges two or more read-only-opened source archives into an already
|
|
12
|
+
* `Archive.create`d, empty destination — the crawler-side half of the
|
|
13
|
+
* `concat` CLI command. Does not open/close/write anything itself: the
|
|
14
|
+
* caller owns every accessor's and the destination's lifecycle (see
|
|
15
|
+
* `docs/concat.md` and the CLI's `commands/concat.ts`, which owns the
|
|
16
|
+
* full open → transfer → rebuild-read-model → write sequence this is one
|
|
17
|
+
* step of).
|
|
18
|
+
*
|
|
19
|
+
* Sources are transferred ONE AT A TIME, in argument order, each one's
|
|
20
|
+
* `crawlOrderOffset` set to the destination's current
|
|
21
|
+
* `MAX(content_items.crawl_order)` so a later source's pages always sort
|
|
22
|
+
* after an earlier one's — this is what makes "ties go to the later
|
|
23
|
+
* argument" (see `plan-content-items-for-concat.ts`) match the pages'
|
|
24
|
+
* OWN display order too, not just their win/lose outcome.
|
|
25
|
+
*
|
|
26
|
+
* After every source is transferred: `flattenRedirectChains` (a merge can
|
|
27
|
+
* reintroduce a two-hop redirect chain no single source ever has),
|
|
28
|
+
* `reclassifyResourceExternality` against the MERGED scope, and
|
|
29
|
+
* `countExternalPagesInScope` for the CLI's `--append` hint (concat never
|
|
30
|
+
* promotes such pages itself — see `types.ts`'s
|
|
31
|
+
* `ConcatArchivesResult.externalInScopeCount` docs).
|
|
32
|
+
* @param options - See individual properties.
|
|
33
|
+
* @param options.sources - Every source, read-only opened
|
|
34
|
+
* (`Archive.openCached`), in argument order.
|
|
35
|
+
* @param options.destination - The empty destination, already
|
|
36
|
+
* `Archive.create`d by the caller.
|
|
37
|
+
* @param options.name - The output archive's `name` config field
|
|
38
|
+
* (typically its basename without extension).
|
|
39
|
+
* @param options.callbacks - Progress callbacks; see `types.ts`.
|
|
40
|
+
* @returns The merged config, each source's transfer outcome, and the
|
|
41
|
+
* two summary counts.
|
|
42
|
+
* @throws {import('./types.js').ArchiveConfigConflictError} If sources
|
|
43
|
+
* disagree on `disableQueries`/`fromList` — see `mergeArchiveConfigs`.
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* const destination = await Archive.create({ filePath: outputPath, cwd });
|
|
47
|
+
* const sources = await Promise.all(
|
|
48
|
+
* inputPaths.map(async (p) => ({ path: p, accessor: await Archive.openCached(p) })),
|
|
49
|
+
* );
|
|
50
|
+
* const result = await concatArchives({ sources, destination, name: 'merged' });
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export async function concatArchives(options) {
|
|
54
|
+
const { sources, destination, name, callbacks } = options;
|
|
55
|
+
if (sources.length < 2) {
|
|
56
|
+
throw new Error('concatArchives: at least two sources are required');
|
|
57
|
+
}
|
|
58
|
+
const configs = await Promise.all(sources.map((s) => s.accessor.getConfig()));
|
|
59
|
+
const merged = mergeArchiveConfigs(configs, name);
|
|
60
|
+
await destination.setConfig(merged);
|
|
61
|
+
const knex = destination.getKnex();
|
|
62
|
+
const scope = buildScopeMap(merged.roots, merged);
|
|
63
|
+
const results = [];
|
|
64
|
+
for (const [index, source] of sources.entries()) {
|
|
65
|
+
callbacks?.onSourceStart?.(index, source.path);
|
|
66
|
+
const sourceDbPath = path.join(source.accessor.tmpDir, ArchiveDefault.SQLITE_DB_FILE_NAME);
|
|
67
|
+
const maxRows = await knex('content_items').max({
|
|
68
|
+
max: 'crawl_order',
|
|
69
|
+
});
|
|
70
|
+
const crawlOrderOffset = maxRows[0]?.max ?? 0;
|
|
71
|
+
const result = await transferArchiveRows({
|
|
72
|
+
knex,
|
|
73
|
+
sourceDbPath,
|
|
74
|
+
mode: { kind: 'concat' },
|
|
75
|
+
crawlOrderOffset,
|
|
76
|
+
sourceIndex: index,
|
|
77
|
+
callbacks,
|
|
78
|
+
});
|
|
79
|
+
results.push(result);
|
|
80
|
+
}
|
|
81
|
+
const postIndex = sources.length;
|
|
82
|
+
callbacks?.onPhase?.(postIndex, 'flatteningRedirects');
|
|
83
|
+
await flattenRedirectChains(knex);
|
|
84
|
+
callbacks?.onPhase?.(postIndex, 'reclassifyingResources');
|
|
85
|
+
await reclassifyResourceExternality(knex, scope, merged);
|
|
86
|
+
callbacks?.onPhase?.(postIndex, 'countingExternalInScope');
|
|
87
|
+
const externalInScopeCount = await countExternalPagesInScope(knex, scope, merged);
|
|
88
|
+
const inventoryListsCopied = await copyInventorySourceLists(destination, sources.map((s) => s.accessor.tmpDir));
|
|
89
|
+
return {
|
|
90
|
+
config: merged,
|
|
91
|
+
sources: results,
|
|
92
|
+
externalInScopeCount,
|
|
93
|
+
inventoryListsCopied,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { TransferPhase } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Ordered phase sequence {@link import('./transfer-archive-rows.js').transferArchiveRows}
|
|
4
|
+
* announces via `onPhase`, once per concat source, unconditionally and
|
|
5
|
+
* always in this order (see that function's own source — no branch skips
|
|
6
|
+
* a phase). Single source of truth for the per-source `TaskList` rows a
|
|
7
|
+
* CLI caller pre-builds (mirrors `VIEWER_READ_MODEL_FULL_BUILD_PHASES`'s
|
|
8
|
+
* same role for the read-model build).
|
|
9
|
+
*/
|
|
10
|
+
export declare const CONCAT_SOURCE_TRANSFER_PHASES: readonly TransferPhase[];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ordered phase sequence {@link import('./transfer-archive-rows.js').transferArchiveRows}
|
|
3
|
+
* announces via `onPhase`, once per concat source, unconditionally and
|
|
4
|
+
* always in this order (see that function's own source — no branch skips
|
|
5
|
+
* a phase). Single source of truth for the per-source `TaskList` rows a
|
|
6
|
+
* CLI caller pre-builds (mirrors `VIEWER_READ_MODEL_FULL_BUILD_PHASES`'s
|
|
7
|
+
* same role for the read-model build).
|
|
8
|
+
*/
|
|
9
|
+
export const CONCAT_SOURCE_TRANSFER_PHASES = [
|
|
10
|
+
'planningContentItems',
|
|
11
|
+
'copyingDictionaries',
|
|
12
|
+
'copyingContentItems',
|
|
13
|
+
'copyingPageRows',
|
|
14
|
+
'copyingResources',
|
|
15
|
+
'copyingJournals',
|
|
16
|
+
'committing',
|
|
17
|
+
];
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQL fragment computing a `content_items` row's "richness" rank for
|
|
3
|
+
* concat's same-URL conflict resolution: `2` (scraped internal page) beats
|
|
4
|
+
* `1` (scraped external HEAD-only observation) beats `0` (never scraped).
|
|
5
|
+
* Concat keeps whichever source's row ranks highest for a given URL; a tie
|
|
6
|
+
* is resolved by processing sources in argument order and overwriting on
|
|
7
|
+
* `>=` (see {@link import('./plan-content-items-for-concat.js').planContentItemsForConcat}),
|
|
8
|
+
* so the LAST source with an equal-or-better rank wins.
|
|
9
|
+
*
|
|
10
|
+
* This is the single definition of the ranking lattice — every other
|
|
11
|
+
* ranking (or a change to it) must go through this function so concat's
|
|
12
|
+
* conflict resolution cannot silently drift from what this doc describes.
|
|
13
|
+
* @param alias - The table alias (or bare table name) the fragment reads
|
|
14
|
+
* `scraped`/`is_external` from, e.g. `'s'` for `xfer_src.content_items s`.
|
|
15
|
+
* @returns A SQL expression (no trailing semicolon) evaluating to `0`, `1`, or `2`.
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* trx.raw(`SELECT ${contentItemRankSql('s')} as rank FROM xfer_src.content_items s`);
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare function contentItemRankSql(alias: string): string;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQL fragment computing a `content_items` row's "richness" rank for
|
|
3
|
+
* concat's same-URL conflict resolution: `2` (scraped internal page) beats
|
|
4
|
+
* `1` (scraped external HEAD-only observation) beats `0` (never scraped).
|
|
5
|
+
* Concat keeps whichever source's row ranks highest for a given URL; a tie
|
|
6
|
+
* is resolved by processing sources in argument order and overwriting on
|
|
7
|
+
* `>=` (see {@link import('./plan-content-items-for-concat.js').planContentItemsForConcat}),
|
|
8
|
+
* so the LAST source with an equal-or-better rank wins.
|
|
9
|
+
*
|
|
10
|
+
* This is the single definition of the ranking lattice — every other
|
|
11
|
+
* ranking (or a change to it) must go through this function so concat's
|
|
12
|
+
* conflict resolution cannot silently drift from what this doc describes.
|
|
13
|
+
* @param alias - The table alias (or bare table name) the fragment reads
|
|
14
|
+
* `scraped`/`is_external` from, e.g. `'s'` for `xfer_src.content_items s`.
|
|
15
|
+
* @returns A SQL expression (no trailing semicolon) evaluating to `0`, `1`, or `2`.
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* trx.raw(`SELECT ${contentItemRankSql('s')} as rank FROM xfer_src.content_items s`);
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export function contentItemRankSql(alias) {
|
|
22
|
+
return `(CASE WHEN ${alias}.scraped = 1 THEN 2 - ${alias}.is_external ELSE 0 END)`;
|
|
23
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
/**
|
|
3
|
+
* Copies `anchor_edges` for every `full`/`replace`-action page's OUTBOUND
|
|
4
|
+
* links, remapping both `page_id` (the link's own page — must be
|
|
5
|
+
* `full`/`replace`, same rule as every other page-scoped table) and
|
|
6
|
+
* `href_page_id` (the link's target — resolved through
|
|
7
|
+
* `temp.xfer_ci_plan` directly, via an INNER JOIN, NOT `LEFT JOIN`):
|
|
8
|
+
*
|
|
9
|
+
* - Concat: every source row has a plan entry (even `skip`), so the
|
|
10
|
+
* INNER JOIN always matches — an anchor to a `skip`ped URL still
|
|
11
|
+
* resolves to whichever destination row won that URL.
|
|
12
|
+
* - Split: a target NOT in the plan means "dropped" (out of scope and
|
|
13
|
+
* unreferenced by anything else) — the INNER JOIN drops that anchor
|
|
14
|
+
* row entirely rather than inserting a dangling `href_page_id`. This is
|
|
15
|
+
* intentional: `plan-content-items-for-split.ts`'s own closure already
|
|
16
|
+
* guarantees every anchor target of a KEPT page is itself kept (as
|
|
17
|
+
* `full` or `stub`), so in practice this INNER JOIN never actually
|
|
18
|
+
* filters anything out for split — it exists as a structural safety net,
|
|
19
|
+
* not as an active filter.
|
|
20
|
+
* @param trx - Transaction with the source ATTACHed as
|
|
21
|
+
* {@link TRANSFER_SOURCE_ALIAS}.
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* await copyPageMeta(trx);
|
|
25
|
+
* await copyAnchorEdges(trx);
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function copyAnchorEdges(trx: Knex): Promise<void>;
|
|
@@ -0,0 +1,42 @@
|
|
|
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 `anchor_edges` for every `full`/`replace`-action page's OUTBOUND
|
|
6
|
+
* links, remapping both `page_id` (the link's own page — must be
|
|
7
|
+
* `full`/`replace`, same rule as every other page-scoped table) and
|
|
8
|
+
* `href_page_id` (the link's target — resolved through
|
|
9
|
+
* `temp.xfer_ci_plan` directly, via an INNER JOIN, NOT `LEFT JOIN`):
|
|
10
|
+
*
|
|
11
|
+
* - Concat: every source row has a plan entry (even `skip`), so the
|
|
12
|
+
* INNER JOIN always matches — an anchor to a `skip`ped URL still
|
|
13
|
+
* resolves to whichever destination row won that URL.
|
|
14
|
+
* - Split: a target NOT in the plan means "dropped" (out of scope and
|
|
15
|
+
* unreferenced by anything else) — the INNER JOIN drops that anchor
|
|
16
|
+
* row entirely rather than inserting a dangling `href_page_id`. This is
|
|
17
|
+
* intentional: `plan-content-items-for-split.ts`'s own closure already
|
|
18
|
+
* guarantees every anchor target of a KEPT page is itself kept (as
|
|
19
|
+
* `full` or `stub`), so in practice this INNER JOIN never actually
|
|
20
|
+
* filters anything out for split — it exists as a structural safety net,
|
|
21
|
+
* not as an active filter.
|
|
22
|
+
* @param trx - Transaction with the source ATTACHed as
|
|
23
|
+
* {@link TRANSFER_SOURCE_ALIAS}.
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* await copyPageMeta(trx);
|
|
27
|
+
* await copyAnchorEdges(trx);
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export async function copyAnchorEdges(trx) {
|
|
31
|
+
await trx.raw(`
|
|
32
|
+
INSERT INTO main.anchor_edges (page_id, href_page_id, count, first_hash, first_text_id)
|
|
33
|
+
SELECT p.dest_id, pd.dest_id, ae.count, ae.first_hash, mt.dest_id
|
|
34
|
+
FROM ${SRC}.anchor_edges ae
|
|
35
|
+
JOIN xfer_ci_plan p ON p.src_id = ae.page_id
|
|
36
|
+
AND p.action IN (${TRANSFER_ACTION.full}, ${TRANSFER_ACTION.replace})
|
|
37
|
+
JOIN xfer_ci_plan pd ON pd.src_id = ae.href_page_id
|
|
38
|
+
LEFT JOIN xfer_map_text_refs mt ON mt.src_id = ae.first_text_id
|
|
39
|
+
WHERE true
|
|
40
|
+
ON CONFLICT(page_id, href_page_id) DO NOTHING
|
|
41
|
+
`);
|
|
42
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
/**
|
|
3
|
+
* Copies every dictionary table's rows from the attached source into the
|
|
4
|
+
* destination unconditionally (`ON CONFLICT DO NOTHING` on the natural
|
|
5
|
+
* key), then builds a `temp.xfer_map_<table>` mapping every source row's id
|
|
6
|
+
* to its (possibly pre-existing, possibly freshly-inserted) destination
|
|
7
|
+
* id.
|
|
8
|
+
*
|
|
9
|
+
* Concat does not compute a "needed by kept content" filter first, unlike
|
|
10
|
+
* split (`copy-dictionaries-for-split.ts`) — every dictionary row is
|
|
11
|
+
* copied whether or not the content_items row(s) that referenced it ended
|
|
12
|
+
* up `full`/`replace` or `skip`. This can leave a handful of dictionary
|
|
13
|
+
* rows in the destination with no live referrer (a source's `skip`ped
|
|
14
|
+
* row's own `text_refs`/`url_refs`, say), the same accepted trade-off this
|
|
15
|
+
* archive already makes for `page_html_blobs` orphans (pending #23's GC) —
|
|
16
|
+
* computing a precise per-source needed-set here would roughly double the
|
|
17
|
+
* SQL in this file for a storage saving that matters far less than
|
|
18
|
+
* concat's own priority order (viewer compat > read perf > storage, see
|
|
19
|
+
* `viewer-priority-order.md`).
|
|
20
|
+
*
|
|
21
|
+
* `console_log_items` and `page_html_blobs` are copied by
|
|
22
|
+
* `copy-page-console-logs.ts` / `copy-page-html-blobs.ts` respectively —
|
|
23
|
+
* both need a source-row need-set derived from `page_console_logs`/
|
|
24
|
+
* `page_html_ref` regardless of concat/split, so they are not duplicated
|
|
25
|
+
* here.
|
|
26
|
+
* @param trx - Transaction with the source ATTACHed as
|
|
27
|
+
* {@link TRANSFER_SOURCE_ALIAS}. Must run after
|
|
28
|
+
* {@link import('./create-transfer-temp-tables.js').createTransferTempTables}.
|
|
29
|
+
* @throws {import('./types.js').TransferIntegrityError} If any table's
|
|
30
|
+
* mapped row count does not equal its source row count after the
|
|
31
|
+
* natural-key JOIN — see this function's body for why that should be
|
|
32
|
+
* structurally impossible in normal operation.
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* await copyDictionariesForConcat(trx);
|
|
36
|
+
* // temp.xfer_map_url_refs, temp.xfer_map_text_refs, ... are now populated
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function copyDictionariesForConcat(trx: Knex): Promise<void>;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { DICTIONARY_COPY_SPECS } from './dictionary-copy-specs.js';
|
|
2
|
+
import { listTransferColumns } from './list-transfer-columns.js';
|
|
3
|
+
import { quoteTransferIdentifier } from './quote-transfer-identifier.js';
|
|
4
|
+
import { TRANSFER_SOURCE_ALIAS } from './transfer-source-alias.js';
|
|
5
|
+
import { TransferIntegrityError } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Copies every dictionary table's rows from the attached source into the
|
|
8
|
+
* destination unconditionally (`ON CONFLICT DO NOTHING` on the natural
|
|
9
|
+
* key), then builds a `temp.xfer_map_<table>` mapping every source row's id
|
|
10
|
+
* to its (possibly pre-existing, possibly freshly-inserted) destination
|
|
11
|
+
* id.
|
|
12
|
+
*
|
|
13
|
+
* Concat does not compute a "needed by kept content" filter first, unlike
|
|
14
|
+
* split (`copy-dictionaries-for-split.ts`) — every dictionary row is
|
|
15
|
+
* copied whether or not the content_items row(s) that referenced it ended
|
|
16
|
+
* up `full`/`replace` or `skip`. This can leave a handful of dictionary
|
|
17
|
+
* rows in the destination with no live referrer (a source's `skip`ped
|
|
18
|
+
* row's own `text_refs`/`url_refs`, say), the same accepted trade-off this
|
|
19
|
+
* archive already makes for `page_html_blobs` orphans (pending #23's GC) —
|
|
20
|
+
* computing a precise per-source needed-set here would roughly double the
|
|
21
|
+
* SQL in this file for a storage saving that matters far less than
|
|
22
|
+
* concat's own priority order (viewer compat > read perf > storage, see
|
|
23
|
+
* `viewer-priority-order.md`).
|
|
24
|
+
*
|
|
25
|
+
* `console_log_items` and `page_html_blobs` are copied by
|
|
26
|
+
* `copy-page-console-logs.ts` / `copy-page-html-blobs.ts` respectively —
|
|
27
|
+
* both need a source-row need-set derived from `page_console_logs`/
|
|
28
|
+
* `page_html_ref` regardless of concat/split, so they are not duplicated
|
|
29
|
+
* here.
|
|
30
|
+
* @param trx - Transaction with the source ATTACHed as
|
|
31
|
+
* {@link TRANSFER_SOURCE_ALIAS}. Must run after
|
|
32
|
+
* {@link import('./create-transfer-temp-tables.js').createTransferTempTables}.
|
|
33
|
+
* @throws {import('./types.js').TransferIntegrityError} If any table's
|
|
34
|
+
* mapped row count does not equal its source row count after the
|
|
35
|
+
* natural-key JOIN — see this function's body for why that should be
|
|
36
|
+
* structurally impossible in normal operation.
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* await copyDictionariesForConcat(trx);
|
|
40
|
+
* // temp.xfer_map_url_refs, temp.xfer_map_text_refs, ... are now populated
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export async function copyDictionariesForConcat(trx) {
|
|
44
|
+
for (const spec of DICTIONARY_COPY_SPECS) {
|
|
45
|
+
const columns = await listTransferColumns(trx, TRANSFER_SOURCE_ALIAS, spec.table, [
|
|
46
|
+
'id',
|
|
47
|
+
]);
|
|
48
|
+
const quotedColumns = columns.map(quoteTransferIdentifier);
|
|
49
|
+
const columnList = quotedColumns.join(', ');
|
|
50
|
+
const conflictTarget = spec.naturalKey.map(quoteTransferIdentifier).join(', ');
|
|
51
|
+
await trx.raw(`
|
|
52
|
+
INSERT INTO main.${spec.table} (${columnList})
|
|
53
|
+
SELECT ${columnList} FROM ${TRANSFER_SOURCE_ALIAS}.${spec.table}
|
|
54
|
+
WHERE true
|
|
55
|
+
ON CONFLICT(${conflictTarget}) DO NOTHING
|
|
56
|
+
`);
|
|
57
|
+
const joinCondition = spec.naturalKey
|
|
58
|
+
.map((col) => `d.${quoteTransferIdentifier(col)} IS s.${quoteTransferIdentifier(col)}`)
|
|
59
|
+
.join(' AND ');
|
|
60
|
+
await trx.raw(`
|
|
61
|
+
INSERT INTO xfer_map_${spec.table} (src_id, dest_id)
|
|
62
|
+
SELECT s.id, d.id
|
|
63
|
+
FROM ${TRANSFER_SOURCE_ALIAS}.${spec.table} s
|
|
64
|
+
JOIN main.${spec.table} d ON ${joinCondition}
|
|
65
|
+
`);
|
|
66
|
+
// Every source row must resolve to a destination id — concat maps
|
|
67
|
+
// unconditionally (no needed-set filter), so `xfer_map_<table>`
|
|
68
|
+
// must cover every row of the attached source's own table. A gap
|
|
69
|
+
// here means the natural-key JOIN above failed to match a row this
|
|
70
|
+
// same function just inserted, which should be impossible; treat it
|
|
71
|
+
// as a hard integrity failure rather than let a missing map entry
|
|
72
|
+
// surface later as a confusing NULL FK deep in an unrelated table.
|
|
73
|
+
const sourceCountRows = await trx(`${TRANSFER_SOURCE_ALIAS}.${spec.table}`).count({ sourceCount: '*' });
|
|
74
|
+
const mappedCountRows = await trx(`xfer_map_${spec.table}`).count({ mappedCount: '*' });
|
|
75
|
+
const sourceCount = sourceCountRows[0]?.sourceCount ?? 0;
|
|
76
|
+
const mappedCount = mappedCountRows[0]?.mappedCount ?? 0;
|
|
77
|
+
if (Number(mappedCount) !== Number(sourceCount)) {
|
|
78
|
+
throw new TransferIntegrityError(`copyDictionariesForConcat: ${spec.table} has ${sourceCount} source row(s) but only ${mappedCount} mapped to a destination id`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
/**
|
|
3
|
+
* Copies only the dictionary rows referenced by kept content — the split
|
|
4
|
+
* counterpart of `copy-dictionaries-for-concat.ts`'s unconditional
|
|
5
|
+
* copy-everything. Split's entire purpose is size reduction, so (unlike
|
|
6
|
+
* concat, where computing a precise needed-set is not worth the
|
|
7
|
+
* complexity) a dropped page's dictionary rows must not survive into the
|
|
8
|
+
* output archive.
|
|
9
|
+
*
|
|
10
|
+
* Runs in two phases: collect every needed dictionary id into
|
|
11
|
+
* `temp.xfer_need_<table>` (this function's own private helpers, in
|
|
12
|
+
* dependency order — `console_log_items`' own needs must be collected
|
|
13
|
+
* AFTER `console_log_items` itself, since they derive from it), then copy
|
|
14
|
+
* + map each dictionary table exactly like concat but filtered to the
|
|
15
|
+
* needed set.
|
|
16
|
+
* @param trx - Transaction with the source ATTACHed as
|
|
17
|
+
* {@link TRANSFER_SOURCE_ALIAS}. Must run after
|
|
18
|
+
* `temp.xfer_ci_plan` AND `temp.xfer_ri_plan` are fully populated.
|
|
19
|
+
* @throws {import('./types.js').TransferIntegrityError} If any table's
|
|
20
|
+
* mapped row count does not equal its needed-row count after the
|
|
21
|
+
* natural-key JOIN.
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* await planContentItemsForSplit(trx);
|
|
25
|
+
* await planResourceItems(trx, 'split');
|
|
26
|
+
* await copyDictionariesForSplit(trx);
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare function copyDictionariesForSplit(trx: Knex): Promise<void>;
|