@nitpicker/archive 0.0.0 → 0.25.1
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 +1055 -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 +803 -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 +45 -0
- package/lib/filesystem/parse-tar-size-field.d.ts +13 -0
- package/lib/filesystem/parse-tar-size-field.js +37 -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 +132 -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/compare-strings.d.ts +12 -0
- package/lib/test-utils/compare-strings.js +14 -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,74 @@
|
|
|
1
|
+
import knex from 'knex';
|
|
2
|
+
import { setConfig } from '../db-ops/config/set-config.js';
|
|
3
|
+
import { init } from '../db-ops/lifecycle/init.js';
|
|
4
|
+
import { LibsqlDialect } from '../libsql-dialect.js';
|
|
5
|
+
/**
|
|
6
|
+
* Default {@link Config} fields for {@link buildFullSchemaTestDb} — a
|
|
7
|
+
* single-root, recursive, non-list crawl of `https://example.com/`, no
|
|
8
|
+
* excludes. Overridable per-call for scope/`fromList`/`disableQueries`
|
|
9
|
+
* tests.
|
|
10
|
+
*/
|
|
11
|
+
const DEFAULT_TEST_CONFIG = {
|
|
12
|
+
version: '0.13.0',
|
|
13
|
+
name: 'test',
|
|
14
|
+
baseUrl: 'https://example.com/',
|
|
15
|
+
roots: ['https://example.com/'],
|
|
16
|
+
recursive: true,
|
|
17
|
+
interval: 0,
|
|
18
|
+
image: false,
|
|
19
|
+
fetchExternal: false,
|
|
20
|
+
parallels: 1,
|
|
21
|
+
excludes: [],
|
|
22
|
+
excludeKeywords: [],
|
|
23
|
+
excludeUrls: [],
|
|
24
|
+
maxExcludedDepth: 0,
|
|
25
|
+
retry: 3,
|
|
26
|
+
fromList: false,
|
|
27
|
+
disableQueries: false,
|
|
28
|
+
userAgent: 'test',
|
|
29
|
+
ignoreRobots: false,
|
|
30
|
+
mainContentSelector: null,
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Builds a file-backed knex connection against the FULL current archive
|
|
34
|
+
* schema (every ref/entity/adjunct table, including columns only a
|
|
35
|
+
* migration adds to a legacy archive — `alias_of_id`, `dedupe_cap_event_id`,
|
|
36
|
+
* `body_hash`, …) by running the exact same {@link init} boot sequence a
|
|
37
|
+
* real `Archive.create`/`Archive.open` uses. Shared by every
|
|
38
|
+
* `archive/transfer/` spec that needs a realistic source or destination
|
|
39
|
+
* database — hand-rolling `createRefTables`/`createEntityTables`/
|
|
40
|
+
* `createAdjunctTables` directly would produce the schema `initSchema`
|
|
41
|
+
* creates but skip the migrations that add columns for archives created
|
|
42
|
+
* before those features existed (which happen to be a no-op on a fresh
|
|
43
|
+
* DB today, but drift is exactly the risk this helper avoids).
|
|
44
|
+
*
|
|
45
|
+
* A DB file must be used (not `:memory:`) because `ATTACH DATABASE` in
|
|
46
|
+
* the transfer primitives needs a real path — see `attach-source-database.ts`.
|
|
47
|
+
* @param filename - Absolute path to the SQLite file. The caller is
|
|
48
|
+
* responsible for removing it (`afterEach`) — see existing specs for the
|
|
49
|
+
* convention.
|
|
50
|
+
* @param config - Overrides merged over {@link DEFAULT_TEST_CONFIG} and
|
|
51
|
+
* written via `setConfig` once the schema exists. Pass `null` to skip
|
|
52
|
+
* writing an `info` row entirely (some specs seed `content_items`
|
|
53
|
+
* directly and never read `getConfig()`).
|
|
54
|
+
* @returns The connected knex instance, on the current schema, with an
|
|
55
|
+
* `info` row unless `config` is `null`.
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* const db = await buildFullSchemaTestDb(path.resolve(workingDir, 'source.sqlite'), {
|
|
59
|
+
* roots: ['https://a.example.com/'],
|
|
60
|
+
* });
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export async function buildFullSchemaTestDb(filename, config = {}) {
|
|
64
|
+
const instance = knex({
|
|
65
|
+
client: LibsqlDialect,
|
|
66
|
+
connection: { filename },
|
|
67
|
+
useNullAsDefault: true,
|
|
68
|
+
});
|
|
69
|
+
await init(instance, false);
|
|
70
|
+
if (config !== null) {
|
|
71
|
+
await setConfig(instance, { ...DEFAULT_TEST_CONFIG, ...config });
|
|
72
|
+
}
|
|
73
|
+
return instance;
|
|
74
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orders two strings by UTF-16 code unit, which is what `Array#sort()` does
|
|
3
|
+
* without a comparator. Written out so specs can pass a comparator
|
|
4
|
+
* explicitly (`toSorted(compareStrings)`) and still get the locale-independent
|
|
5
|
+
* order that makes expectations reproducible.
|
|
6
|
+
* @param a - Left string.
|
|
7
|
+
* @param b - Right string.
|
|
8
|
+
* @returns Negative when `a` sorts first, positive when `b` does, 0 when equal.
|
|
9
|
+
* @example
|
|
10
|
+
* ['b', 'B', 'a'].toSorted(compareStrings); // ['B', 'a', 'b']
|
|
11
|
+
*/
|
|
12
|
+
export declare function compareStrings(a: string, b: string): number;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orders two strings by UTF-16 code unit, which is what `Array#sort()` does
|
|
3
|
+
* without a comparator. Written out so specs can pass a comparator
|
|
4
|
+
* explicitly (`toSorted(compareStrings)`) and still get the locale-independent
|
|
5
|
+
* order that makes expectations reproducible.
|
|
6
|
+
* @param a - Left string.
|
|
7
|
+
* @param b - Right string.
|
|
8
|
+
* @returns Negative when `a` sorts first, positive when `b` does, 0 when equal.
|
|
9
|
+
* @example
|
|
10
|
+
* ['b', 'B', 'a'].toSorted(compareStrings); // ['B', 'a', 'b']
|
|
11
|
+
*/
|
|
12
|
+
export function compareStrings(a, b) {
|
|
13
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
14
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
/**
|
|
3
|
+
* Creates the `analysis_text_refs` / `analysis_violations` tables in the shape
|
|
4
|
+
* an archive written by an earlier version carries (FK → `content_items(id)`).
|
|
5
|
+
* Current archives do not create these tables, so specs that exercise the
|
|
6
|
+
* guarded cleanup of legacy archives provision them through this helper.
|
|
7
|
+
* @param db - Knex connected to the test DB (or a transaction).
|
|
8
|
+
* @example
|
|
9
|
+
* await createAdjunctTables(db);
|
|
10
|
+
* await createLegacyAnalysisTables(db);
|
|
11
|
+
* await db('analysis_text_refs').insert({ text: 'msg', sha256: 'abc' });
|
|
12
|
+
*/
|
|
13
|
+
export declare function createLegacyAnalysisTables(db: Knex): Promise<void>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates the `analysis_text_refs` / `analysis_violations` tables in the shape
|
|
3
|
+
* an archive written by an earlier version carries (FK → `content_items(id)`).
|
|
4
|
+
* Current archives do not create these tables, so specs that exercise the
|
|
5
|
+
* guarded cleanup of legacy archives provision them through this helper.
|
|
6
|
+
* @param db - Knex connected to the test DB (or a transaction).
|
|
7
|
+
* @example
|
|
8
|
+
* await createAdjunctTables(db);
|
|
9
|
+
* await createLegacyAnalysisTables(db);
|
|
10
|
+
* await db('analysis_text_refs').insert({ text: 'msg', sha256: 'abc' });
|
|
11
|
+
*/
|
|
12
|
+
export async function createLegacyAnalysisTables(db) {
|
|
13
|
+
await db.raw(`
|
|
14
|
+
CREATE TABLE analysis_text_refs (
|
|
15
|
+
id integer primary key,
|
|
16
|
+
text text not null,
|
|
17
|
+
sha256 text not null,
|
|
18
|
+
unique(sha256, text)
|
|
19
|
+
)
|
|
20
|
+
`);
|
|
21
|
+
await db.raw(`
|
|
22
|
+
CREATE TABLE analysis_violations (
|
|
23
|
+
id integer primary key,
|
|
24
|
+
page_id integer not null references content_items(id),
|
|
25
|
+
validator text not null,
|
|
26
|
+
severity text not null,
|
|
27
|
+
rule text not null,
|
|
28
|
+
message_text_id integer not null references analysis_text_refs(id),
|
|
29
|
+
code_text_id integer references analysis_text_refs(id),
|
|
30
|
+
page_url_sort_key text not null,
|
|
31
|
+
message_sort_key text not null,
|
|
32
|
+
code_sort_key text not null,
|
|
33
|
+
line integer,
|
|
34
|
+
col integer
|
|
35
|
+
)
|
|
36
|
+
`);
|
|
37
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
/**
|
|
3
|
+
* Returns the set of parent table names referenced by `table`'s FK
|
|
4
|
+
* clauses, read via SQLite's `pragma_foreign_key_list` table-valued
|
|
5
|
+
* function. Shared by the specs that assert FK declarations were
|
|
6
|
+
* retargeted from the legacy `pages(id)` to `content_items(id)`.
|
|
7
|
+
* @param db - Knex connected to the test DB.
|
|
8
|
+
* @param table - Table whose FK declarations to inspect.
|
|
9
|
+
* @returns Parent table names, deduplicated.
|
|
10
|
+
* @example
|
|
11
|
+
* const parents = await fkParentTables(db, 'page_errors');
|
|
12
|
+
* expect(parents.has('content_items')).toBe(true);
|
|
13
|
+
* expect(parents.has('pages')).toBe(false);
|
|
14
|
+
*/
|
|
15
|
+
export declare function fkParentTables(db: Knex, table: string): Promise<Set<string>>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns the set of parent table names referenced by `table`'s FK
|
|
3
|
+
* clauses, read via SQLite's `pragma_foreign_key_list` table-valued
|
|
4
|
+
* function. Shared by the specs that assert FK declarations were
|
|
5
|
+
* retargeted from the legacy `pages(id)` to `content_items(id)`.
|
|
6
|
+
* @param db - Knex connected to the test DB.
|
|
7
|
+
* @param table - Table whose FK declarations to inspect.
|
|
8
|
+
* @returns Parent table names, deduplicated.
|
|
9
|
+
* @example
|
|
10
|
+
* const parents = await fkParentTables(db, 'page_errors');
|
|
11
|
+
* expect(parents.has('content_items')).toBe(true);
|
|
12
|
+
* expect(parents.has('pages')).toBe(false);
|
|
13
|
+
*/
|
|
14
|
+
export async function fkParentTables(db, table) {
|
|
15
|
+
const rows = await db
|
|
16
|
+
.select('table')
|
|
17
|
+
.from(db.raw('pragma_foreign_key_list(?)', [table]));
|
|
18
|
+
return new Set(rows.map((row) => row.table));
|
|
19
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { PageSource } from '../types.js';
|
|
2
|
+
import type { Knex } from 'knex';
|
|
3
|
+
/**
|
|
4
|
+
* Optional column overrides for {@link seedContentItem}. Defaults model a
|
|
5
|
+
* scraped, internal, targeted page with no content type.
|
|
6
|
+
*/
|
|
7
|
+
interface SeedContentItemOptions {
|
|
8
|
+
/** `content_items.scraped` (default 1). */
|
|
9
|
+
scraped?: 0 | 1;
|
|
10
|
+
/** `content_items.is_target` (default 1). */
|
|
11
|
+
isTarget?: 0 | 1;
|
|
12
|
+
/** `content_items.is_external` (default 0). */
|
|
13
|
+
isExternal?: 0 | 1;
|
|
14
|
+
/** `content_items.source` (default: schema default `'crawled'`). */
|
|
15
|
+
source?: PageSource;
|
|
16
|
+
/** Registers the value in `content_type_refs` and links it (default: none). */
|
|
17
|
+
contentType?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Inserts one `url_refs` + `content_items` pair — the minimal seeding
|
|
21
|
+
* contract for specs that exercise entity-table readers. Shared so a
|
|
22
|
+
* schema change to the pair (e.g. a new NOT NULL column) is fixed in one
|
|
23
|
+
* place instead of drifting across per-spec copies.
|
|
24
|
+
* @param db - Knex connected to the test DB.
|
|
25
|
+
* @param url - URL string to register in `url_refs`.
|
|
26
|
+
* @param options - Column overrides; see {@link SeedContentItemOptions}.
|
|
27
|
+
* @returns The inserted `content_items.id`.
|
|
28
|
+
* @example
|
|
29
|
+
* const pageId = await seedContentItem(db, 'https://example.com/');
|
|
30
|
+
* const pdfId = await seedContentItem(db, 'https://example.com/doc.pdf', {
|
|
31
|
+
* contentType: 'application/pdf',
|
|
32
|
+
* });
|
|
33
|
+
*/
|
|
34
|
+
export declare function seedContentItem(db: Knex, url: string, options?: SeedContentItemOptions): Promise<number>;
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inserts one `url_refs` + `content_items` pair — the minimal seeding
|
|
3
|
+
* contract for specs that exercise entity-table readers. Shared so a
|
|
4
|
+
* schema change to the pair (e.g. a new NOT NULL column) is fixed in one
|
|
5
|
+
* place instead of drifting across per-spec copies.
|
|
6
|
+
* @param db - Knex connected to the test DB.
|
|
7
|
+
* @param url - URL string to register in `url_refs`.
|
|
8
|
+
* @param options - Column overrides; see {@link SeedContentItemOptions}.
|
|
9
|
+
* @returns The inserted `content_items.id`.
|
|
10
|
+
* @example
|
|
11
|
+
* const pageId = await seedContentItem(db, 'https://example.com/');
|
|
12
|
+
* const pdfId = await seedContentItem(db, 'https://example.com/doc.pdf', {
|
|
13
|
+
* contentType: 'application/pdf',
|
|
14
|
+
* });
|
|
15
|
+
*/
|
|
16
|
+
export async function seedContentItem(db, url, options = {}) {
|
|
17
|
+
const [urlRef] = await db('url_refs').insert({ url }).returning('id');
|
|
18
|
+
let contentTypeId = null;
|
|
19
|
+
if (options.contentType !== undefined) {
|
|
20
|
+
const [ctRef] = await db('content_type_refs')
|
|
21
|
+
.insert({
|
|
22
|
+
raw: options.contentType,
|
|
23
|
+
normalized: options.contentType,
|
|
24
|
+
category: 'other',
|
|
25
|
+
})
|
|
26
|
+
.onConflict('raw')
|
|
27
|
+
.merge({ raw: options.contentType })
|
|
28
|
+
.returning('id');
|
|
29
|
+
contentTypeId = ctRef.id;
|
|
30
|
+
}
|
|
31
|
+
const [item] = await db('content_items')
|
|
32
|
+
.insert({
|
|
33
|
+
url_id: urlRef.id,
|
|
34
|
+
scraped: options.scraped ?? 1,
|
|
35
|
+
is_target: options.isTarget ?? 1,
|
|
36
|
+
is_external: options.isExternal ?? 0,
|
|
37
|
+
content_type_id: contentTypeId,
|
|
38
|
+
...(options.source === undefined ? {} : { source: options.source }),
|
|
39
|
+
})
|
|
40
|
+
.returning('id');
|
|
41
|
+
return item.id;
|
|
42
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
/**
|
|
3
|
+
* Provisions the pre-0.13 legacy table shape on a test database:
|
|
4
|
+
* the five legacy write-model tables (`pages` / `anchors` / `images` /
|
|
5
|
+
* `resources` / `resources-referrers`) plus the five adjunct tables in
|
|
6
|
+
* their old form whose FK columns still point at `pages(id)`
|
|
7
|
+
* (`page_html_ref` / `page_tags` / `page_jsonld` / `page_errors` /
|
|
8
|
+
* `analysis_violations`, with their companion tables `page_html_blobs` /
|
|
9
|
+
* `analysis_text_refs`). The two `analysis_*` tables are the input of the
|
|
10
|
+
* 0.13 migration's drop path (no current-schema counterpart).
|
|
11
|
+
*
|
|
12
|
+
* `initSchema` no longer creates any of these shapes — fresh archives get
|
|
13
|
+
* neither the legacy write-model tables nor `pages(id)`-referencing
|
|
14
|
+
* adjunct tables — so specs that exercise the migration input format
|
|
15
|
+
* (`scripts/migrate-to-0.13.mjs` integration, `retargetLegacyFkTables`,
|
|
16
|
+
* `dropLegacyTables`) build it through this helper instead. The DDL is a
|
|
17
|
+
* verbatim copy of what pre-0.13 archives actually contain: the legacy
|
|
18
|
+
* write-model tables match the pre-0.13 `initSchema`, and the adjunct
|
|
19
|
+
* tables match the `scripts/migrate-to-0.10.mjs` / lazy-runtime-migration
|
|
20
|
+
* output of that era.
|
|
21
|
+
*
|
|
22
|
+
* Any current-form adjunct tables already present (e.g. created by
|
|
23
|
+
* `Archive.create()` on the current schema) are dropped first so the
|
|
24
|
+
* old-FK versions can take their place — callers get a deterministic
|
|
25
|
+
* "genuine pre-0.13 archive" shape regardless of how the underlying DB
|
|
26
|
+
* was provisioned.
|
|
27
|
+
* @param db - Knex connected to the test DB (or a transaction).
|
|
28
|
+
* @example
|
|
29
|
+
* await createRefTables(db);
|
|
30
|
+
* await createEntityTables(db);
|
|
31
|
+
* await setupLegacyFkDb(db);
|
|
32
|
+
* await db('pages').insert({ url: 'https://example.com/', scraped: 1, isTarget: 1 });
|
|
33
|
+
*/
|
|
34
|
+
export declare function setupLegacyFkDb(db: Knex): Promise<void>;
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provisions the pre-0.13 legacy table shape on a test database:
|
|
3
|
+
* the five legacy write-model tables (`pages` / `anchors` / `images` /
|
|
4
|
+
* `resources` / `resources-referrers`) plus the five adjunct tables in
|
|
5
|
+
* their old form whose FK columns still point at `pages(id)`
|
|
6
|
+
* (`page_html_ref` / `page_tags` / `page_jsonld` / `page_errors` /
|
|
7
|
+
* `analysis_violations`, with their companion tables `page_html_blobs` /
|
|
8
|
+
* `analysis_text_refs`). The two `analysis_*` tables are the input of the
|
|
9
|
+
* 0.13 migration's drop path (no current-schema counterpart).
|
|
10
|
+
*
|
|
11
|
+
* `initSchema` no longer creates any of these shapes — fresh archives get
|
|
12
|
+
* neither the legacy write-model tables nor `pages(id)`-referencing
|
|
13
|
+
* adjunct tables — so specs that exercise the migration input format
|
|
14
|
+
* (`scripts/migrate-to-0.13.mjs` integration, `retargetLegacyFkTables`,
|
|
15
|
+
* `dropLegacyTables`) build it through this helper instead. The DDL is a
|
|
16
|
+
* verbatim copy of what pre-0.13 archives actually contain: the legacy
|
|
17
|
+
* write-model tables match the pre-0.13 `initSchema`, and the adjunct
|
|
18
|
+
* tables match the `scripts/migrate-to-0.10.mjs` / lazy-runtime-migration
|
|
19
|
+
* output of that era.
|
|
20
|
+
*
|
|
21
|
+
* Any current-form adjunct tables already present (e.g. created by
|
|
22
|
+
* `Archive.create()` on the current schema) are dropped first so the
|
|
23
|
+
* old-FK versions can take their place — callers get a deterministic
|
|
24
|
+
* "genuine pre-0.13 archive" shape regardless of how the underlying DB
|
|
25
|
+
* was provisioned.
|
|
26
|
+
* @param db - Knex connected to the test DB (or a transaction).
|
|
27
|
+
* @example
|
|
28
|
+
* await createRefTables(db);
|
|
29
|
+
* await createEntityTables(db);
|
|
30
|
+
* await setupLegacyFkDb(db);
|
|
31
|
+
* await db('pages').insert({ url: 'https://example.com/', scraped: 1, isTarget: 1 });
|
|
32
|
+
*/
|
|
33
|
+
export async function setupLegacyFkDb(db) {
|
|
34
|
+
// Children before parents so the drops never trip FK enforcement
|
|
35
|
+
// when the caller has `PRAGMA foreign_keys = ON`.
|
|
36
|
+
await db.raw('DROP TABLE IF EXISTS "page_html_ref"');
|
|
37
|
+
await db.raw('DROP TABLE IF EXISTS "page_html_blobs"');
|
|
38
|
+
await db.raw('DROP TABLE IF EXISTS "analysis_violations"');
|
|
39
|
+
await db.raw('DROP TABLE IF EXISTS "analysis_text_refs"');
|
|
40
|
+
await db.raw('DROP TABLE IF EXISTS "page_tags"');
|
|
41
|
+
await db.raw('DROP TABLE IF EXISTS "page_jsonld"');
|
|
42
|
+
await db.raw('DROP TABLE IF EXISTS "page_errors"');
|
|
43
|
+
await db.schema
|
|
44
|
+
.createTable('pages', (t) => {
|
|
45
|
+
t.increments('id');
|
|
46
|
+
t.string('url', 8190).notNullable().unique();
|
|
47
|
+
t.integer('redirectDestId').unsigned().references('pages.id').defaultTo(null);
|
|
48
|
+
t.boolean('scraped').notNullable();
|
|
49
|
+
t.boolean('isTarget').notNullable();
|
|
50
|
+
t.boolean('isExternal');
|
|
51
|
+
t.integer('status');
|
|
52
|
+
t.string('statusText');
|
|
53
|
+
t.string('contentType').nullable();
|
|
54
|
+
t.integer('contentLength').unsigned().nullable();
|
|
55
|
+
t.json('responseHeaders').nullable();
|
|
56
|
+
// Document basics
|
|
57
|
+
t.string('lang');
|
|
58
|
+
t.string('dir');
|
|
59
|
+
t.string('charset');
|
|
60
|
+
t.string('baseHref');
|
|
61
|
+
t.text('viewport_raw');
|
|
62
|
+
t.string('themeColor');
|
|
63
|
+
t.string('applicationName');
|
|
64
|
+
t.string('author');
|
|
65
|
+
t.string('generator');
|
|
66
|
+
t.string('publisher');
|
|
67
|
+
// Title / description / keywords (top-level Meta fields)
|
|
68
|
+
t.string('title');
|
|
69
|
+
t.text('description');
|
|
70
|
+
t.text('keywords');
|
|
71
|
+
// Robots
|
|
72
|
+
t.text('robots_raw');
|
|
73
|
+
t.integer('robots_noindex');
|
|
74
|
+
t.integer('robots_nofollow');
|
|
75
|
+
t.integer('robots_noarchive');
|
|
76
|
+
t.integer('robots_noimageindex');
|
|
77
|
+
t.string('googlebot');
|
|
78
|
+
// Link (1:1 only — array shapes live in meta_extras)
|
|
79
|
+
t.string('canonical', 8190);
|
|
80
|
+
t.string('amphtml', 8190);
|
|
81
|
+
t.string('manifest', 8190);
|
|
82
|
+
t.string('icon_href', 8190);
|
|
83
|
+
t.string('appleTouchIcon_href', 8190);
|
|
84
|
+
// Open Graph
|
|
85
|
+
t.string('og_type');
|
|
86
|
+
t.string('og_title');
|
|
87
|
+
t.string('og_url', 8190);
|
|
88
|
+
t.string('og_site_name');
|
|
89
|
+
t.text('og_description');
|
|
90
|
+
t.string('og_image', 8190);
|
|
91
|
+
t.string('og_image_alt');
|
|
92
|
+
t.string('og_image_width');
|
|
93
|
+
t.string('og_image_height');
|
|
94
|
+
t.string('og_locale');
|
|
95
|
+
t.string('og_article_published_time');
|
|
96
|
+
t.string('og_article_modified_time');
|
|
97
|
+
// Twitter
|
|
98
|
+
t.string('twitter_card');
|
|
99
|
+
t.string('twitter_site');
|
|
100
|
+
t.string('twitter_creator');
|
|
101
|
+
t.string('twitter_title');
|
|
102
|
+
t.text('twitter_description');
|
|
103
|
+
t.string('twitter_image', 8190);
|
|
104
|
+
// One-offs
|
|
105
|
+
t.string('fb_app_id');
|
|
106
|
+
t.string('verification_google');
|
|
107
|
+
t.integer('formatDetection_telephone');
|
|
108
|
+
// Within-archive observation timestamps (UNIX ms)
|
|
109
|
+
t.integer('firstCrawledAt');
|
|
110
|
+
t.integer('lastCrawledAt');
|
|
111
|
+
// Denormalised aggregates
|
|
112
|
+
t.integer('tag_count');
|
|
113
|
+
t.integer('jsonld_count');
|
|
114
|
+
t.text('tags_providers_csv');
|
|
115
|
+
// Catch-all JSON for nested Meta sub-objects not flattened above
|
|
116
|
+
t.json('meta_extras');
|
|
117
|
+
// Crawl lifecycle
|
|
118
|
+
t.boolean('isSkipped');
|
|
119
|
+
t.string('skipReason');
|
|
120
|
+
t.integer('order').unsigned().nullable();
|
|
121
|
+
t.string('source').notNullable().defaultTo('crawled');
|
|
122
|
+
t.index('isExternal');
|
|
123
|
+
t.index('contentType');
|
|
124
|
+
t.index('scraped');
|
|
125
|
+
t.index('redirectDestId');
|
|
126
|
+
t.index('order');
|
|
127
|
+
t.index('robots_noindex');
|
|
128
|
+
t.index('og_type');
|
|
129
|
+
t.index('source');
|
|
130
|
+
})
|
|
131
|
+
.createTable('anchors', (t) => {
|
|
132
|
+
t.increments('id');
|
|
133
|
+
t.integer('pageId').notNullable().unsigned().references('pages.id');
|
|
134
|
+
t.integer('hrefId').notNullable().unsigned().references('pages.id');
|
|
135
|
+
t.string('hash');
|
|
136
|
+
t.string('textContent').nullable();
|
|
137
|
+
t.index('pageId');
|
|
138
|
+
t.index('hrefId');
|
|
139
|
+
})
|
|
140
|
+
.createTable('images', (t) => {
|
|
141
|
+
t.increments('id');
|
|
142
|
+
t.integer('pageId').notNullable().unsigned().references('pages.id');
|
|
143
|
+
t.string('src', 8190);
|
|
144
|
+
t.string('currentSrc', 8190);
|
|
145
|
+
t.string('alt');
|
|
146
|
+
t.float('width').unsigned().notNullable();
|
|
147
|
+
t.float('height').unsigned().notNullable();
|
|
148
|
+
t.integer('naturalWidth').unsigned().notNullable();
|
|
149
|
+
t.integer('naturalHeight').unsigned().notNullable();
|
|
150
|
+
t.boolean('isLazy');
|
|
151
|
+
t.integer('viewportWidth').unsigned().notNullable();
|
|
152
|
+
t.string('sourceCode');
|
|
153
|
+
t.index('pageId');
|
|
154
|
+
})
|
|
155
|
+
.createTable('resources', (t) => {
|
|
156
|
+
t.increments('id');
|
|
157
|
+
t.string('url', 8190).notNullable().unique();
|
|
158
|
+
t.boolean('isExternal');
|
|
159
|
+
t.integer('status');
|
|
160
|
+
t.string('statusText');
|
|
161
|
+
t.string('contentType').nullable();
|
|
162
|
+
t.integer('contentLength').unsigned().nullable();
|
|
163
|
+
t.string('compress').nullable();
|
|
164
|
+
t.string('cdn').nullable();
|
|
165
|
+
t.json('responseHeaders').nullable();
|
|
166
|
+
t.string('source').notNullable().defaultTo('crawled');
|
|
167
|
+
t.index('source');
|
|
168
|
+
})
|
|
169
|
+
.createTable('resources-referrers', (t) => {
|
|
170
|
+
t.increments('id');
|
|
171
|
+
t.integer('resourceId').notNullable().unsigned().references('resources.id');
|
|
172
|
+
t.integer('pageId').notNullable().unsigned().references('pages.id');
|
|
173
|
+
t.unique(['resourceId', 'pageId']);
|
|
174
|
+
t.index('resourceId');
|
|
175
|
+
t.index('pageId');
|
|
176
|
+
});
|
|
177
|
+
// Adjunct tables in their pre-0.13 shape: FK columns point at
|
|
178
|
+
// `pages(id)` — the exact declarations that
|
|
179
|
+
// `scripts/migrate-to-0.10.mjs` and the runtime lazy migrations of
|
|
180
|
+
// that era produced.
|
|
181
|
+
await db.schema.createTable('page_errors', (t) => {
|
|
182
|
+
t.increments('id');
|
|
183
|
+
t.integer('pageId').notNullable().unsigned().references('pages.id');
|
|
184
|
+
t.string('phase').notNullable();
|
|
185
|
+
t.text('message').notNullable();
|
|
186
|
+
t.integer('createdAt').notNullable();
|
|
187
|
+
t.index('pageId');
|
|
188
|
+
});
|
|
189
|
+
await db.schema.createTable('page_tags', (t) => {
|
|
190
|
+
t.increments('id');
|
|
191
|
+
t.integer('pageId')
|
|
192
|
+
.notNullable()
|
|
193
|
+
.unsigned()
|
|
194
|
+
.references('pages.id')
|
|
195
|
+
.onDelete('CASCADE');
|
|
196
|
+
t.string('provider').notNullable();
|
|
197
|
+
t.string('category');
|
|
198
|
+
t.string('externalId');
|
|
199
|
+
t.string('version');
|
|
200
|
+
t.integer('confidence');
|
|
201
|
+
t.json('categories');
|
|
202
|
+
t.json('sources');
|
|
203
|
+
t.index('pageId');
|
|
204
|
+
t.index('provider');
|
|
205
|
+
t.index('externalId');
|
|
206
|
+
});
|
|
207
|
+
await db.raw('CREATE INDEX page_tags_provider_extId ON page_tags(provider, externalId)');
|
|
208
|
+
await db.raw('CREATE INDEX page_tags_provider_pageId ON page_tags(provider, pageId)');
|
|
209
|
+
await db.schema.createTable('page_jsonld', (t) => {
|
|
210
|
+
t.increments('id');
|
|
211
|
+
t.integer('pageId')
|
|
212
|
+
.notNullable()
|
|
213
|
+
.unsigned()
|
|
214
|
+
.references('pages.id')
|
|
215
|
+
.onDelete('CASCADE');
|
|
216
|
+
t.string('kind').notNullable();
|
|
217
|
+
t.string('type');
|
|
218
|
+
t.text('raw').notNullable();
|
|
219
|
+
t.json('parsed');
|
|
220
|
+
t.text('parseError');
|
|
221
|
+
t.index('pageId');
|
|
222
|
+
t.index('type');
|
|
223
|
+
});
|
|
224
|
+
await db.raw('CREATE INDEX page_jsonld_type_pageId ON page_jsonld(type, pageId)');
|
|
225
|
+
await db.raw(`
|
|
226
|
+
CREATE TABLE analysis_text_refs (
|
|
227
|
+
id integer primary key,
|
|
228
|
+
text text not null,
|
|
229
|
+
sha256 text not null,
|
|
230
|
+
unique(sha256, text)
|
|
231
|
+
)
|
|
232
|
+
`);
|
|
233
|
+
await db.raw(`
|
|
234
|
+
CREATE TABLE analysis_violations (
|
|
235
|
+
id integer primary key,
|
|
236
|
+
page_id integer not null references pages(id),
|
|
237
|
+
validator text not null,
|
|
238
|
+
severity text not null,
|
|
239
|
+
rule text not null,
|
|
240
|
+
message_text_id integer not null references analysis_text_refs(id),
|
|
241
|
+
code_text_id integer references analysis_text_refs(id),
|
|
242
|
+
page_url_sort_key text not null,
|
|
243
|
+
message_sort_key text not null,
|
|
244
|
+
code_sort_key text not null
|
|
245
|
+
)
|
|
246
|
+
`);
|
|
247
|
+
await db.raw('CREATE INDEX av_url_order ON analysis_violations(page_url_sort_key, id)');
|
|
248
|
+
await db.raw('CREATE INDEX av_filter_url ON analysis_violations(validator, severity, rule, page_url_sort_key, id)');
|
|
249
|
+
await db.raw('CREATE INDEX av_validator_url ON analysis_violations(validator, page_url_sort_key, id)');
|
|
250
|
+
await db.raw('CREATE INDEX av_severity_url ON analysis_violations(severity, page_url_sort_key, id)');
|
|
251
|
+
await db.raw('CREATE INDEX av_rule_url ON analysis_violations(rule, page_url_sort_key, id)');
|
|
252
|
+
await db.raw('CREATE INDEX av_message_order ON analysis_violations(message_sort_key, id)');
|
|
253
|
+
await db.raw('CREATE INDEX av_code_order ON analysis_violations(code_sort_key, id)');
|
|
254
|
+
await db.raw('CREATE INDEX av_page ON analysis_violations(page_id, id)');
|
|
255
|
+
await db.raw(`
|
|
256
|
+
CREATE TABLE page_html_blobs (
|
|
257
|
+
hash BLOB PRIMARY KEY,
|
|
258
|
+
body BLOB NOT NULL,
|
|
259
|
+
codec TEXT NOT NULL CHECK(codec IN ('zstd', 'none')),
|
|
260
|
+
size_raw INTEGER NOT NULL,
|
|
261
|
+
size_stored INTEGER NOT NULL
|
|
262
|
+
) WITHOUT ROWID
|
|
263
|
+
`);
|
|
264
|
+
await db.raw(`
|
|
265
|
+
CREATE TABLE page_html_ref (
|
|
266
|
+
page_id INTEGER PRIMARY KEY REFERENCES pages(id) ON DELETE CASCADE,
|
|
267
|
+
hash BLOB NOT NULL REFERENCES page_html_blobs(hash)
|
|
268
|
+
) WITHOUT ROWID
|
|
269
|
+
`);
|
|
270
|
+
await db.raw('CREATE INDEX idx_page_html_ref_hash ON page_html_ref(hash)');
|
|
271
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
/**
|
|
3
|
+
* Attaches a source archive's `db.sqlite` file to the destination
|
|
4
|
+
* connection under the {@link TRANSFER_SOURCE_ALIAS} schema alias, so a
|
|
5
|
+
* transfer can read the source and write the destination in the same SQL
|
|
6
|
+
* statement (`INSERT INTO main.content_items SELECT ... FROM xfer_src.content_items`).
|
|
7
|
+
*
|
|
8
|
+
* `ATTACH DATABASE` must run OUTSIDE any transaction — SQLite rejects it
|
|
9
|
+
* with "cannot ATTACH database within transaction" otherwise — so this is
|
|
10
|
+
* always called before `knex.transaction(...)` opens, never inside it. The
|
|
11
|
+
* returned function detaches and must be called after the transaction
|
|
12
|
+
* commits or rolls back, in a `finally`.
|
|
13
|
+
* @param knex - Knex query builder connected to the destination archive DB
|
|
14
|
+
* (the connection whose schema this attaches to — not a transaction).
|
|
15
|
+
* @param sourceDbPath - Absolute path to the source's `db.sqlite` file
|
|
16
|
+
* (typically `path.join(accessor.tmpDir, Archive.SQLITE_DB_FILE_NAME)`).
|
|
17
|
+
* @returns An async function that detaches the source. Idempotent-safe to
|
|
18
|
+
* call even if the attach itself failed partway (best-effort).
|
|
19
|
+
* @throws {Error} If `ATTACH DATABASE` fails (e.g. the path does not exist,
|
|
20
|
+
* or a transaction is already open on this connection).
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* const detach = await attachSourceDatabase(knex, sourceDbPath);
|
|
24
|
+
* try {
|
|
25
|
+
* await knex.transaction(async (trx) => { ... trx.raw('SELECT * FROM xfer_src.content_items') ... });
|
|
26
|
+
* } finally {
|
|
27
|
+
* await detach();
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare function attachSourceDatabase(knex: Knex, sourceDbPath: string): Promise<() => Promise<void>>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { TRANSFER_SOURCE_ALIAS } from './transfer-source-alias.js';
|
|
2
|
+
/**
|
|
3
|
+
* Attaches a source archive's `db.sqlite` file to the destination
|
|
4
|
+
* connection under the {@link TRANSFER_SOURCE_ALIAS} schema alias, so a
|
|
5
|
+
* transfer can read the source and write the destination in the same SQL
|
|
6
|
+
* statement (`INSERT INTO main.content_items SELECT ... FROM xfer_src.content_items`).
|
|
7
|
+
*
|
|
8
|
+
* `ATTACH DATABASE` must run OUTSIDE any transaction — SQLite rejects it
|
|
9
|
+
* with "cannot ATTACH database within transaction" otherwise — so this is
|
|
10
|
+
* always called before `knex.transaction(...)` opens, never inside it. The
|
|
11
|
+
* returned function detaches and must be called after the transaction
|
|
12
|
+
* commits or rolls back, in a `finally`.
|
|
13
|
+
* @param knex - Knex query builder connected to the destination archive DB
|
|
14
|
+
* (the connection whose schema this attaches to — not a transaction).
|
|
15
|
+
* @param sourceDbPath - Absolute path to the source's `db.sqlite` file
|
|
16
|
+
* (typically `path.join(accessor.tmpDir, Archive.SQLITE_DB_FILE_NAME)`).
|
|
17
|
+
* @returns An async function that detaches the source. Idempotent-safe to
|
|
18
|
+
* call even if the attach itself failed partway (best-effort).
|
|
19
|
+
* @throws {Error} If `ATTACH DATABASE` fails (e.g. the path does not exist,
|
|
20
|
+
* or a transaction is already open on this connection).
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* const detach = await attachSourceDatabase(knex, sourceDbPath);
|
|
24
|
+
* try {
|
|
25
|
+
* await knex.transaction(async (trx) => { ... trx.raw('SELECT * FROM xfer_src.content_items') ... });
|
|
26
|
+
* } finally {
|
|
27
|
+
* await detach();
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export async function attachSourceDatabase(knex, sourceDbPath) {
|
|
32
|
+
await knex.raw('ATTACH DATABASE ? AS ' + TRANSFER_SOURCE_ALIAS, [sourceDbPath]);
|
|
33
|
+
const attached = await knex.raw('PRAGMA database_list');
|
|
34
|
+
if (!attached.some((row) => row.name === TRANSFER_SOURCE_ALIAS)) {
|
|
35
|
+
throw new Error(`Failed to attach source database at ${sourceDbPath} — PRAGMA database_list does not list "${TRANSFER_SOURCE_ALIAS}" after ATTACH.`);
|
|
36
|
+
}
|
|
37
|
+
return async () => {
|
|
38
|
+
await knex.raw('DETACH DATABASE ' + TRANSFER_SOURCE_ALIAS).catch(() => { });
|
|
39
|
+
};
|
|
40
|
+
}
|