@nitpicker/archive 0.0.0-stage → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +191 -0
- package/README.md +105 -2
- package/lib/apply-connection-pragmas.d.ts +18 -0
- package/lib/apply-connection-pragmas.js +40 -0
- package/lib/archive-accessor.d.ts +265 -0
- package/lib/archive-accessor.js +477 -0
- package/lib/archive-lock.d.ts +45 -0
- package/lib/archive-lock.js +154 -0
- package/lib/archive.d.ts +736 -0
- package/lib/archive.js +1056 -0
- package/lib/body-hash/compute-body-hash.d.ts +32 -0
- package/lib/body-hash/compute-body-hash.js +35 -0
- package/lib/cache/clear-archive-cache-entry.d.ts +18 -0
- package/lib/cache/clear-archive-cache-entry.js +24 -0
- package/lib/cache/clear-archive-cache-root.d.ts +26 -0
- package/lib/cache/clear-archive-cache-root.js +32 -0
- package/lib/cache/compute-archive-cache-key.d.ts +39 -0
- package/lib/cache/compute-archive-cache-key.js +95 -0
- package/lib/cache/extract-archive-to-cache.d.ts +57 -0
- package/lib/cache/extract-archive-to-cache.js +326 -0
- package/lib/cache/get-archive-cache-root.d.ts +20 -0
- package/lib/cache/get-archive-cache-root.js +53 -0
- package/lib/cache/is-archive-cache-disabled.d.ts +24 -0
- package/lib/cache/is-archive-cache-disabled.js +34 -0
- package/lib/cache/list-archive-cache-entries.d.ts +23 -0
- package/lib/cache/list-archive-cache-entries.js +130 -0
- package/lib/cache/path-exists.d.ts +9 -0
- package/lib/cache/path-exists.js +18 -0
- package/lib/cache/resolve-archive-cache-dir.d.ts +26 -0
- package/lib/cache/resolve-archive-cache-dir.js +32 -0
- package/lib/cache/types.d.ts +33 -0
- package/lib/cache/types.js +1 -0
- package/lib/content-type/is-html-content-type.d.ts +17 -0
- package/lib/content-type/is-html-content-type.js +19 -0
- package/lib/content-type/normalize-content-type.d.ts +14 -0
- package/lib/content-type/normalize-content-type.js +20 -0
- package/lib/create-adjunct-tables.d.ts +66 -0
- package/lib/create-adjunct-tables.js +510 -0
- package/lib/create-entity-tables.d.ts +191 -0
- package/lib/create-entity-tables.js +387 -0
- package/lib/create-progress-reporter.d.ts +30 -0
- package/lib/create-progress-reporter.js +38 -0
- package/lib/create-ref-tables.d.ts +35 -0
- package/lib/create-ref-tables.js +185 -0
- package/lib/create-template-tables.d.ts +28 -0
- package/lib/create-template-tables.js +92 -0
- package/lib/database.d.ts +549 -0
- package/lib/database.js +804 -0
- package/lib/db-ops/_shared/clear-write-ref-caches.d.ts +27 -0
- package/lib/db-ops/_shared/clear-write-ref-caches.js +35 -0
- package/lib/db-ops/_shared/compress-payload.d.ts +26 -0
- package/lib/db-ops/_shared/compress-payload.js +30 -0
- package/lib/db-ops/_shared/create-write-ref-caches.d.ts +17 -0
- package/lib/db-ops/_shared/create-write-ref-caches.js +27 -0
- package/lib/db-ops/_shared/decode-json-ref.d.ts +17 -0
- package/lib/db-ops/_shared/decode-json-ref.js +31 -0
- package/lib/db-ops/_shared/keyset-paginate-by-id.d.ts +49 -0
- package/lib/db-ops/_shared/keyset-paginate-by-id.js +69 -0
- package/lib/db-ops/_shared/load-response-headers-by-set-ids.d.ts +20 -0
- package/lib/db-ops/_shared/load-response-headers-by-set-ids.js +53 -0
- package/lib/db-ops/_shared/resolve-content-item-id.d.ts +62 -0
- package/lib/db-ops/_shared/resolve-content-item-id.js +143 -0
- package/lib/db-ops/_shared/resolve-url-or-blob.d.ts +23 -0
- package/lib/db-ops/_shared/resolve-url-or-blob.js +29 -0
- package/lib/db-ops/_shared/retry-setting.d.ts +16 -0
- package/lib/db-ops/_shared/retry-setting.js +18 -0
- package/lib/db-ops/_shared/safe-parse-json.d.ts +11 -0
- package/lib/db-ops/_shared/safe-parse-json.js +18 -0
- package/lib/db-ops/_shared/types.d.ts +94 -0
- package/lib/db-ops/_shared/types.js +1 -0
- package/lib/db-ops/_shared/upsert-blob-ref.d.ts +25 -0
- package/lib/db-ops/_shared/upsert-blob-ref.js +48 -0
- package/lib/db-ops/_shared/upsert-content-type-ref.d.ts +30 -0
- package/lib/db-ops/_shared/upsert-content-type-ref.js +45 -0
- package/lib/db-ops/_shared/upsert-json-ref.d.ts +22 -0
- package/lib/db-ops/_shared/upsert-json-ref.js +41 -0
- package/lib/db-ops/_shared/upsert-response-headers.d.ts +35 -0
- package/lib/db-ops/_shared/upsert-response-headers.js +49 -0
- package/lib/db-ops/_shared/upsert-url-ref.d.ts +39 -0
- package/lib/db-ops/_shared/upsert-url-ref.js +62 -0
- package/lib/db-ops/anchors/get-anchors-on-page.d.ts +10 -0
- package/lib/db-ops/anchors/get-anchors-on-page.js +21 -0
- package/lib/db-ops/config/get-base-url.d.ts +8 -0
- package/lib/db-ops/config/get-base-url.js +14 -0
- package/lib/db-ops/config/get-config.d.ts +10 -0
- package/lib/db-ops/config/get-config.js +29 -0
- package/lib/db-ops/config/get-created-cwd.d.ts +11 -0
- package/lib/db-ops/config/get-created-cwd.js +13 -0
- package/lib/db-ops/config/get-name.d.ts +8 -0
- package/lib/db-ops/config/get-name.js +14 -0
- package/lib/db-ops/config/info-column-allowlist.d.ts +7 -0
- package/lib/db-ops/config/info-column-allowlist.js +29 -0
- package/lib/db-ops/config/info-json-columns.d.ts +5 -0
- package/lib/db-ops/config/info-json-columns.js +11 -0
- package/lib/db-ops/config/set-config.d.ts +12 -0
- package/lib/db-ops/config/set-config.js +21 -0
- package/lib/db-ops/config/update-config.d.ts +17 -0
- package/lib/db-ops/config/update-config.js +36 -0
- package/lib/db-ops/console-logs/compute-console-log-hash.d.ts +19 -0
- package/lib/db-ops/console-logs/compute-console-log-hash.js +30 -0
- package/lib/db-ops/console-logs/replace-console-logs.d.ts +34 -0
- package/lib/db-ops/console-logs/replace-console-logs.js +123 -0
- package/lib/db-ops/console-logs/stringify-console-log-args.d.ts +16 -0
- package/lib/db-ops/console-logs/stringify-console-log-args.js +26 -0
- package/lib/db-ops/console-logs/types.d.ts +38 -0
- package/lib/db-ops/console-logs/types.js +1 -0
- package/lib/db-ops/console-logs/upsert-console-log-item.d.ts +29 -0
- package/lib/db-ops/console-logs/upsert-console-log-item.js +52 -0
- package/lib/db-ops/dedupe-cap/accumulate-dedupe-cap-rejected-count.d.ts +18 -0
- package/lib/db-ops/dedupe-cap/accumulate-dedupe-cap-rejected-count.js +23 -0
- package/lib/db-ops/dedupe-cap/finalize-dedupe-cap-event.d.ts +12 -0
- package/lib/db-ops/dedupe-cap/finalize-dedupe-cap-event.js +15 -0
- package/lib/db-ops/dedupe-cap/insert-dedupe-cap-event.d.ts +14 -0
- package/lib/db-ops/dedupe-cap/insert-dedupe-cap-event.js +30 -0
- package/lib/db-ops/dedupe-cap/list-dedupe-cap-observations.d.ts +57 -0
- package/lib/db-ops/dedupe-cap/list-dedupe-cap-observations.js +87 -0
- package/lib/db-ops/dedupe-cap/list-dedupe-cap-shape-keys.d.ts +21 -0
- package/lib/db-ops/dedupe-cap/list-dedupe-cap-shape-keys.js +27 -0
- package/lib/db-ops/errors/insert-crawl-error.d.ts +15 -0
- package/lib/db-ops/errors/insert-crawl-error.js +21 -0
- package/lib/db-ops/errors/insert-page-error.d.ts +21 -0
- package/lib/db-ops/errors/insert-page-error.js +30 -0
- package/lib/db-ops/errors/list-dns-burned-host-candidates.d.ts +33 -0
- package/lib/db-ops/errors/list-dns-burned-host-candidates.js +158 -0
- package/lib/db-ops/html/read-page-html-blob.d.ts +17 -0
- package/lib/db-ops/html/read-page-html-blob.js +20 -0
- package/lib/db-ops/lifecycle/checkpoint.d.ts +8 -0
- package/lib/db-ops/lifecycle/checkpoint.js +9 -0
- package/lib/db-ops/lifecycle/destroy.d.ts +6 -0
- package/lib/db-ops/lifecycle/destroy.js +7 -0
- package/lib/db-ops/lifecycle/init.d.ts +58 -0
- package/lib/db-ops/lifecycle/init.js +122 -0
- package/lib/db-ops/list-reconcile/record-list-reconcile-run.d.ts +22 -0
- package/lib/db-ops/list-reconcile/record-list-reconcile-run.js +41 -0
- package/lib/db-ops/meta/get-audios-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-audios-of-page.js +15 -0
- package/lib/db-ops/meta/get-buttons-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-buttons-of-page.js +15 -0
- package/lib/db-ops/meta/get-canvases-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-canvases-of-page.js +15 -0
- package/lib/db-ops/meta/get-custom-elements-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-custom-elements-of-page.js +15 -0
- package/lib/db-ops/meta/get-headings-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-headings-of-page.js +15 -0
- package/lib/db-ops/meta/get-iframes-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-iframes-of-page.js +15 -0
- package/lib/db-ops/meta/get-jsonld-of-page.d.ts +13 -0
- package/lib/db-ops/meta/get-jsonld-of-page.js +27 -0
- package/lib/db-ops/meta/get-main-content-images-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-main-content-images-of-page.js +15 -0
- package/lib/db-ops/meta/get-main-content-tables-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-main-content-tables-of-page.js +15 -0
- package/lib/db-ops/meta/get-page-technologies-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-page-technologies-of-page.js +15 -0
- package/lib/db-ops/meta/get-technology-signals-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-technology-signals-of-page.js +15 -0
- package/lib/db-ops/meta/get-videos-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-videos-of-page.js +15 -0
- package/lib/db-ops/outages/close-network-outage.d.ts +12 -0
- package/lib/db-ops/outages/close-network-outage.js +15 -0
- package/lib/db-ops/outages/close-stale-open-network-outages.d.ts +26 -0
- package/lib/db-ops/outages/close-stale-open-network-outages.js +42 -0
- package/lib/db-ops/outages/compute-outage-clamp-timestamp.d.ts +26 -0
- package/lib/db-ops/outages/compute-outage-clamp-timestamp.js +31 -0
- package/lib/db-ops/outages/insert-network-outage.d.ts +14 -0
- package/lib/db-ops/outages/insert-network-outage.js +29 -0
- package/lib/db-ops/outages/list-network-outages.d.ts +28 -0
- package/lib/db-ops/outages/list-network-outages.js +42 -0
- package/lib/db-ops/pages/order/set-url-order.d.ts +13 -0
- package/lib/db-ops/pages/order/set-url-order.js +38 -0
- package/lib/db-ops/pages/read/build-page-query.d.ts +18 -0
- package/lib/db-ops/pages/read/build-page-query.js +40 -0
- package/lib/db-ops/pages/read/get-crawling-state.d.ts +117 -0
- package/lib/db-ops/pages/read/get-crawling-state.js +161 -0
- package/lib/db-ops/pages/read/get-existing-page-urls.d.ts +15 -0
- package/lib/db-ops/pages/read/get-existing-page-urls.js +30 -0
- package/lib/db-ops/pages/read/get-page-count.d.ts +12 -0
- package/lib/db-ops/pages/read/get-page-count.js +21 -0
- package/lib/db-ops/pages/read/get-page-source-by-url.d.ts +24 -0
- package/lib/db-ops/pages/read/get-page-source-by-url.js +28 -0
- package/lib/db-ops/pages/read/get-pages-with-rels.d.ts +38 -0
- package/lib/db-ops/pages/read/get-pages-with-rels.js +107 -0
- package/lib/db-ops/pages/read/get-pages.d.ts +11 -0
- package/lib/db-ops/pages/read/get-pages.js +51 -0
- package/lib/db-ops/pages/read/get-scraped-html-page-count.d.ts +18 -0
- package/lib/db-ops/pages/read/get-scraped-html-page-count.js +25 -0
- package/lib/db-ops/pages/read/reconstruct-page-rows.d.ts +31 -0
- package/lib/db-ops/pages/read/reconstruct-page-rows.js +32 -0
- package/lib/db-ops/pages/reset/clear-page-derived-rows.d.ts +20 -0
- package/lib/db-ops/pages/reset/clear-page-derived-rows.js +37 -0
- package/lib/db-ops/pages/reset/repromote-external-pages.d.ts +30 -0
- package/lib/db-ops/pages/reset/repromote-external-pages.js +91 -0
- package/lib/db-ops/pages/reset/reset-failed-pages.d.ts +88 -0
- package/lib/db-ops/pages/reset/reset-failed-pages.js +216 -0
- package/lib/db-ops/pages/reset/reset-pages-by-urls.d.ts +80 -0
- package/lib/db-ops/pages/reset/reset-pages-by-urls.js +151 -0
- package/lib/db-ops/pages/reset/retryable-image-scan-codes.d.ts +24 -0
- package/lib/db-ops/pages/reset/retryable-image-scan-codes.js +24 -0
- package/lib/db-ops/pages/write/insert-audios.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-audios.js +25 -0
- package/lib/db-ops/pages/write/insert-buttons.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-buttons.js +29 -0
- package/lib/db-ops/pages/write/insert-canvases.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-canvases.js +26 -0
- package/lib/db-ops/pages/write/insert-custom-elements.d.ts +27 -0
- package/lib/db-ops/pages/write/insert-custom-elements.js +40 -0
- package/lib/db-ops/pages/write/insert-headings.d.ts +15 -0
- package/lib/db-ops/pages/write/insert-headings.js +27 -0
- package/lib/db-ops/pages/write/insert-iframes.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-iframes.js +28 -0
- package/lib/db-ops/pages/write/insert-inventory-content-items.d.ts +38 -0
- package/lib/db-ops/pages/write/insert-inventory-content-items.js +60 -0
- package/lib/db-ops/pages/write/insert-inventory-seeds.d.ts +36 -0
- package/lib/db-ops/pages/write/insert-inventory-seeds.js +48 -0
- package/lib/db-ops/pages/write/insert-inventory-skipped-pages.d.ts +42 -0
- package/lib/db-ops/pages/write/insert-inventory-skipped-pages.js +56 -0
- package/lib/db-ops/pages/write/insert-jsonld.d.ts +17 -0
- package/lib/db-ops/pages/write/insert-jsonld.js +49 -0
- package/lib/db-ops/pages/write/insert-main-content-images.d.ts +20 -0
- package/lib/db-ops/pages/write/insert-main-content-images.js +32 -0
- package/lib/db-ops/pages/write/insert-main-content-tables.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-main-content-tables.js +29 -0
- package/lib/db-ops/pages/write/insert-page.d.ts +56 -0
- package/lib/db-ops/pages/write/insert-page.js +259 -0
- package/lib/db-ops/pages/write/insert-technologies.d.ts +25 -0
- package/lib/db-ops/pages/write/insert-technologies.js +45 -0
- package/lib/db-ops/pages/write/insert-videos.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-videos.js +28 -0
- package/lib/db-ops/pages/write/link-redirect-sources.d.ts +42 -0
- package/lib/db-ops/pages/write/link-redirect-sources.js +101 -0
- package/lib/db-ops/pages/write/record-redirect.d.ts +35 -0
- package/lib/db-ops/pages/write/record-redirect.js +100 -0
- package/lib/db-ops/pages/write/set-skipped-page.d.ts +13 -0
- package/lib/db-ops/pages/write/set-skipped-page.js +24 -0
- package/lib/db-ops/pages/write/update-page.d.ts +40 -0
- package/lib/db-ops/pages/write/update-page.js +419 -0
- package/lib/db-ops/pages/write/write-page-html-blob.d.ts +19 -0
- package/lib/db-ops/pages/write/write-page-html-blob.js +41 -0
- package/lib/db-ops/referrers/get-redirects-for-pages.d.ts +9 -0
- package/lib/db-ops/referrers/get-redirects-for-pages.js +15 -0
- package/lib/db-ops/referrers/get-referrers-of-page.d.ts +17 -0
- package/lib/db-ops/referrers/get-referrers-of-page.js +32 -0
- package/lib/db-ops/referrers/get-referrers-of-resource.d.ts +8 -0
- package/lib/db-ops/referrers/get-referrers-of-resource.js +15 -0
- package/lib/db-ops/resources/build-resource-query.d.ts +25 -0
- package/lib/db-ops/resources/build-resource-query.js +29 -0
- package/lib/db-ops/resources/get-existing-resource-urls.d.ts +9 -0
- package/lib/db-ops/resources/get-existing-resource-urls.js +24 -0
- package/lib/db-ops/resources/get-resource-by-url.d.ts +13 -0
- package/lib/db-ops/resources/get-resource-by-url.js +22 -0
- package/lib/db-ops/resources/get-resource-url-list.d.ts +17 -0
- package/lib/db-ops/resources/get-resource-url-list.js +26 -0
- package/lib/db-ops/resources/get-resources.d.ts +8 -0
- package/lib/db-ops/resources/get-resources.js +11 -0
- package/lib/db-ops/resources/insert-inventory-resources.d.ts +24 -0
- package/lib/db-ops/resources/insert-inventory-resources.js +64 -0
- package/lib/db-ops/resources/insert-resource-referrers.d.ts +15 -0
- package/lib/db-ops/resources/insert-resource-referrers.js +54 -0
- package/lib/db-ops/resources/insert-resource.d.ts +34 -0
- package/lib/db-ops/resources/insert-resource.js +73 -0
- package/lib/db-ops/resources/reconstruct-resource-rows.d.ts +26 -0
- package/lib/db-ops/resources/reconstruct-resource-rows.js +30 -0
- package/lib/db-ops/templates/assign-template-labels.d.ts +60 -0
- package/lib/db-ops/templates/assign-template-labels.js +187 -0
- package/lib/db-ops/templates/replace-page-templates.d.ts +44 -0
- package/lib/db-ops/templates/replace-page-templates.js +174 -0
- package/lib/db-ops/templates/serialize-template-cluster-reason.d.ts +16 -0
- package/lib/db-ops/templates/serialize-template-cluster-reason.js +17 -0
- package/lib/db-ops/templates/types.d.ts +103 -0
- package/lib/db-ops/templates/types.js +1 -0
- package/lib/debug.d.ts +8 -0
- package/lib/debug.js +9 -0
- package/lib/decode-html-blob.d.ts +20 -0
- package/lib/decode-html-blob.js +23 -0
- package/lib/decode-page-html-blob-bytes.d.ts +25 -0
- package/lib/decode-page-html-blob-bytes.js +29 -0
- package/lib/decode-stored-blob-bytes.d.ts +25 -0
- package/lib/decode-stored-blob-bytes.js +47 -0
- package/lib/derive-lineage-from-parent.d.ts +37 -0
- package/lib/derive-lineage-from-parent.js +42 -0
- package/lib/drop-legacy-tables.d.ts +45 -0
- package/lib/drop-legacy-tables.js +56 -0
- package/lib/error-kind/classify-error-kind.d.ts +20 -0
- package/lib/error-kind/classify-error-kind.js +136 -0
- package/lib/error-kind/network-related-error-kinds.d.ts +23 -0
- package/lib/error-kind/network-related-error-kinds.js +28 -0
- package/lib/error-kind/permanent-error-kinds.d.ts +48 -0
- package/lib/error-kind/permanent-error-kinds.js +54 -0
- package/lib/error-kind/types.d.ts +54 -0
- package/lib/error-kind/types.js +1 -0
- package/lib/filesystem/append-text.d.ts +9 -0
- package/lib/filesystem/append-text.js +14 -0
- package/lib/filesystem/copy-dir-sync.d.ts +6 -0
- package/lib/filesystem/copy-dir-sync.js +9 -0
- package/lib/filesystem/copy-dir.d.ts +7 -0
- package/lib/filesystem/copy-dir.js +13 -0
- package/lib/filesystem/copy-file-with-progress.d.ts +20 -0
- package/lib/filesystem/copy-file-with-progress.js +34 -0
- package/lib/filesystem/exists.d.ts +6 -0
- package/lib/filesystem/exists.js +9 -0
- package/lib/filesystem/get-file-list.d.ts +8 -0
- package/lib/filesystem/get-file-list.js +12 -0
- package/lib/filesystem/is-dir.d.ts +6 -0
- package/lib/filesystem/is-dir.js +10 -0
- package/lib/filesystem/mkdir.d.ts +8 -0
- package/lib/filesystem/mkdir.js +15 -0
- package/lib/filesystem/output-binary.d.ts +12 -0
- package/lib/filesystem/output-binary.js +17 -0
- package/lib/filesystem/output-json.d.ts +9 -0
- package/lib/filesystem/output-json.js +14 -0
- package/lib/filesystem/output-text.d.ts +11 -0
- package/lib/filesystem/output-text.js +32 -0
- package/lib/filesystem/parse-pax-path.d.ts +18 -0
- package/lib/filesystem/parse-pax-path.js +47 -0
- package/lib/filesystem/parse-tar-size-field.d.ts +13 -0
- package/lib/filesystem/parse-tar-size-field.js +40 -0
- package/lib/filesystem/peek-tar-top-dir.d.ts +35 -0
- package/lib/filesystem/peek-tar-top-dir.js +215 -0
- package/lib/filesystem/read-json.d.ts +7 -0
- package/lib/filesystem/read-json.js +11 -0
- package/lib/filesystem/read-text.d.ts +6 -0
- package/lib/filesystem/read-text.js +10 -0
- package/lib/filesystem/readline.d.ts +11 -0
- package/lib/filesystem/readline.js +26 -0
- package/lib/filesystem/remove.d.ts +5 -0
- package/lib/filesystem/remove.js +10 -0
- package/lib/filesystem/rename.d.ts +16 -0
- package/lib/filesystem/rename.js +48 -0
- package/lib/filesystem/tar.d.ts +23 -0
- package/lib/filesystem/tar.js +78 -0
- package/lib/filesystem/untar.d.ts +33 -0
- package/lib/filesystem/untar.js +84 -0
- package/lib/get-failed-page-messages.d.ts +56 -0
- package/lib/get-failed-page-messages.js +146 -0
- package/lib/get-json.d.ts +10 -0
- package/lib/get-json.js +25 -0
- package/lib/html-snapshot/match-selector-html.d.ts +25 -0
- package/lib/html-snapshot/match-selector-html.js +28 -0
- package/lib/html-snapshot/match-selector-snapshots.d.ts +33 -0
- package/lib/html-snapshot/match-selector-snapshots.js +33 -0
- package/lib/html-snapshot/search-html-document.d.ts +29 -0
- package/lib/html-snapshot/search-html-document.js +27 -0
- package/lib/html-snapshot/search-html-snapshots.d.ts +36 -0
- package/lib/html-snapshot/search-html-snapshots.js +35 -0
- package/lib/html-snapshot/types.d.ts +111 -0
- package/lib/html-snapshot/types.js +7 -0
- package/lib/html-snapshot/validate-search-pattern.d.ts +15 -0
- package/lib/html-snapshot/validate-search-pattern.js +17 -0
- package/lib/init-schema.d.ts +48 -0
- package/lib/init-schema.js +124 -0
- package/lib/is-inventory-source.d.ts +21 -0
- package/lib/is-inventory-source.js +22 -0
- package/lib/is-within-outage-window.d.ts +49 -0
- package/lib/is-within-outage-window.js +33 -0
- package/lib/isolated-cluster/create-isolated-cluster-run.d.ts +24 -0
- package/lib/isolated-cluster/create-isolated-cluster-run.js +26 -0
- package/lib/libsql-dialect.d.ts +115 -0
- package/lib/libsql-dialect.js +116 -0
- package/lib/limited-page-ids.d.ts +9 -0
- package/lib/limited-page-ids.js +18 -0
- package/lib/meta/assert-compatible-version.d.ts +60 -0
- package/lib/meta/assert-compatible-version.js +93 -0
- package/lib/meta/classify-jsonld-type.d.ts +23 -0
- package/lib/meta/classify-jsonld-type.js +43 -0
- package/lib/meta/compare-semver.d.ts +23 -0
- package/lib/meta/compare-semver.js +51 -0
- package/lib/meta/compute-main-contents-denormalized.d.ts +41 -0
- package/lib/meta/compute-main-contents-denormalized.js +88 -0
- package/lib/meta/compute-page-denormalized.d.ts +20 -0
- package/lib/meta/compute-page-denormalized.js +35 -0
- package/lib/meta/derive-flat-from-meta.d.ts +34 -0
- package/lib/meta/derive-flat-from-meta.js +158 -0
- package/lib/meta/derive-meta-extras.d.ts +20 -0
- package/lib/meta/derive-meta-extras.js +23 -0
- package/lib/meta/extract-tags-for-archive.d.ts +17 -0
- package/lib/meta/extract-tags-for-archive.js +36 -0
- package/lib/meta/parse-main-content-class-list.d.ts +19 -0
- package/lib/meta/parse-main-content-class-list.js +34 -0
- package/lib/meta/summarize-jsonld.d.ts +17 -0
- package/lib/meta/summarize-jsonld.js +29 -0
- package/lib/meta/technologies/combine-technology-confidence.d.ts +46 -0
- package/lib/meta/technologies/combine-technology-confidence.js +93 -0
- package/lib/meta/technologies/convert-legacy-page-tags-to-inserts.d.ts +45 -0
- package/lib/meta/technologies/convert-legacy-page-tags-to-inserts.js +53 -0
- package/lib/meta/technologies/convert-tag-row-to-wappalyzer-signal.d.ts +33 -0
- package/lib/meta/technologies/convert-tag-row-to-wappalyzer-signal.js +46 -0
- package/lib/meta/technologies/extract-technologies-for-archive.d.ts +33 -0
- package/lib/meta/technologies/extract-technologies-for-archive.js +30 -0
- package/lib/meta/technologies/match-js-license-comment-signal.d.ts +21 -0
- package/lib/meta/technologies/match-js-license-comment-signal.js +23 -0
- package/lib/meta/technologies/match-structural-technology-signals.d.ts +26 -0
- package/lib/meta/technologies/match-structural-technology-signals.js +48 -0
- package/lib/meta/technologies/normalize-wappalyzer-entries.d.ts +25 -0
- package/lib/meta/technologies/normalize-wappalyzer-entries.js +35 -0
- package/lib/meta/technologies/technology-signal-definitions.d.ts +44 -0
- package/lib/meta/technologies/technology-signal-definitions.js +60 -0
- package/lib/meta/technologies/types.d.ts +70 -0
- package/lib/meta/technologies/types.js +13 -0
- package/lib/meta/types.d.ts +1490 -0
- package/lib/meta/types.js +65 -0
- package/lib/migrate-content-items-alias-of-id.d.ts +52 -0
- package/lib/migrate-content-items-alias-of-id.js +69 -0
- package/lib/migrate-content-items-dedupe-cap-event-id.d.ts +46 -0
- package/lib/migrate-content-items-dedupe-cap-event-id.js +62 -0
- package/lib/migrate-content-items-is-metadata-only.d.ts +44 -0
- package/lib/migrate-content-items-is-metadata-only.js +60 -0
- package/lib/migrate-entity-tables.d.ts +55 -0
- package/lib/migrate-entity-tables.js +66 -0
- package/lib/migrate-info-created-cwd.d.ts +17 -0
- package/lib/migrate-info-created-cwd.js +36 -0
- package/lib/migrate-info-main-content-selector.d.ts +16 -0
- package/lib/migrate-info-main-content-selector.js +35 -0
- package/lib/migrate-info-request-header-names.d.ts +16 -0
- package/lib/migrate-info-request-header-names.js +35 -0
- package/lib/migrate-info-roots.d.ts +20 -0
- package/lib/migrate-info-roots.js +52 -0
- package/lib/migrate-inventory-runs-to-list-reconcile-runs.d.ts +34 -0
- package/lib/migrate-inventory-runs-to-list-reconcile-runs.js +51 -0
- package/lib/migrate-list-reconcile-runs-exclude-skipped.d.ts +25 -0
- package/lib/migrate-list-reconcile-runs-exclude-skipped.js +44 -0
- package/lib/migrate-list-reconcile-runs-invalid-skipped.d.ts +16 -0
- package/lib/migrate-list-reconcile-runs-invalid-skipped.js +35 -0
- package/lib/migrate-main-contents-columns.d.ts +26 -0
- package/lib/migrate-main-contents-columns.js +61 -0
- package/lib/migrate-page-meta-body-hash.d.ts +44 -0
- package/lib/migrate-page-meta-body-hash.js +63 -0
- package/lib/migrate-page-meta-console-error-count.d.ts +27 -0
- package/lib/migrate-page-meta-console-error-count.js +45 -0
- package/lib/migrate-page-meta-custom-element-count.d.ts +33 -0
- package/lib/migrate-page-meta-custom-element-count.js +51 -0
- package/lib/migrate-page-meta-image-scan.d.ts +27 -0
- package/lib/migrate-page-meta-image-scan.js +52 -0
- package/lib/migrate-page-tags-to-page-technologies.d.ts +39 -0
- package/lib/migrate-page-tags-to-page-technologies.js +79 -0
- package/lib/migrate-ref-tables.d.ts +25 -0
- package/lib/migrate-ref-tables.js +38 -0
- package/lib/native-executor/check-native-executor-config.d.ts +17 -0
- package/lib/native-executor/check-native-executor-config.js +20 -0
- package/lib/page-meta-column-maps.d.ts +32 -0
- package/lib/page-meta-column-maps.js +43 -0
- package/lib/page.d.ts +546 -0
- package/lib/page.js +764 -0
- package/lib/peek-archive-lock.d.ts +40 -0
- package/lib/peek-archive-lock.js +62 -0
- package/lib/populate-entity-tables/collapse-anchor-rows.d.ts +41 -0
- package/lib/populate-entity-tables/collapse-anchor-rows.js +87 -0
- package/lib/populate-entity-tables/derive-dom-path.d.ts +35 -0
- package/lib/populate-entity-tables/derive-dom-path.js +72 -0
- package/lib/populate-entity-tables/is-blob-ref-value.d.ts +16 -0
- package/lib/populate-entity-tables/is-blob-ref-value.js +19 -0
- package/lib/populate-entity-tables/match-images-to-dom-paths.d.ts +66 -0
- package/lib/populate-entity-tables/match-images-to-dom-paths.js +96 -0
- package/lib/populate-entity-tables/populate-anchor-edges.d.ts +33 -0
- package/lib/populate-entity-tables/populate-anchor-edges.js +153 -0
- package/lib/populate-entity-tables/populate-content-items.d.ts +40 -0
- package/lib/populate-entity-tables/populate-content-items.js +141 -0
- package/lib/populate-entity-tables/populate-entities.d.ts +81 -0
- package/lib/populate-entity-tables/populate-entities.js +110 -0
- package/lib/populate-entity-tables/populate-image-items.d.ts +91 -0
- package/lib/populate-entity-tables/populate-image-items.js +226 -0
- package/lib/populate-entity-tables/populate-page-meta.d.ts +33 -0
- package/lib/populate-entity-tables/populate-page-meta.js +267 -0
- package/lib/populate-entity-tables/populate-resource-items.d.ts +22 -0
- package/lib/populate-entity-tables/populate-resource-items.js +114 -0
- package/lib/populate-entity-tables/populate-resource-ref-edges.d.ts +31 -0
- package/lib/populate-entity-tables/populate-resource-ref-edges.js +33 -0
- package/lib/populate-entity-tables/resolve-blob-refs.d.ts +31 -0
- package/lib/populate-entity-tables/resolve-blob-refs.js +100 -0
- package/lib/populate-entity-tables/resolve-content-type-refs.d.ts +22 -0
- package/lib/populate-entity-tables/resolve-content-type-refs.js +27 -0
- package/lib/populate-entity-tables/resolve-header-sets.d.ts +49 -0
- package/lib/populate-entity-tables/resolve-header-sets.js +122 -0
- package/lib/populate-entity-tables/resolve-json-refs.d.ts +25 -0
- package/lib/populate-entity-tables/resolve-json-refs.js +67 -0
- package/lib/populate-entity-tables/resolve-text-refs.d.ts +30 -0
- package/lib/populate-entity-tables/resolve-text-refs.js +61 -0
- package/lib/populate-entity-tables/resolve-url-or-blob-from-maps.d.ts +21 -0
- package/lib/populate-entity-tables/resolve-url-or-blob-from-maps.js +27 -0
- package/lib/populate-entity-tables/resolve-url-refs.d.ts +33 -0
- package/lib/populate-entity-tables/resolve-url-refs.js +60 -0
- package/lib/populate-entity-tables/test-utils/count-rows.d.ts +17 -0
- package/lib/populate-entity-tables/test-utils/count-rows.js +20 -0
- package/lib/populate-entity-tables/test-utils/seed-content-items.d.ts +25 -0
- package/lib/populate-entity-tables/test-utils/seed-content-items.js +42 -0
- package/lib/populate-entity-tables/test-utils/setup-entities-db.d.ts +30 -0
- package/lib/populate-entity-tables/test-utils/setup-entities-db.js +175 -0
- package/lib/populate-entity-tables/types.d.ts +157 -0
- package/lib/populate-entity-tables/types.js +12 -0
- package/lib/populate-entity-tables/upsert-text-refs.d.ts +38 -0
- package/lib/populate-entity-tables/upsert-text-refs.js +78 -0
- package/lib/populate-ref-tables/classify-content-type.d.ts +16 -0
- package/lib/populate-ref-tables/classify-content-type.js +52 -0
- package/lib/populate-ref-tables/compute-content-hash.d.ts +22 -0
- package/lib/populate-ref-tables/compute-content-hash.js +26 -0
- package/lib/populate-ref-tables/compute-header-flags.d.ts +16 -0
- package/lib/populate-ref-tables/compute-header-flags.js +70 -0
- package/lib/populate-ref-tables/content-type-rules.d.ts +38 -0
- package/lib/populate-ref-tables/content-type-rules.js +133 -0
- package/lib/populate-ref-tables/create-header-table-caches.d.ts +25 -0
- package/lib/populate-ref-tables/create-header-table-caches.js +49 -0
- package/lib/populate-ref-tables/data-uri-url-refs-limit.d.ts +15 -0
- package/lib/populate-ref-tables/data-uri-url-refs-limit.js +15 -0
- package/lib/populate-ref-tables/decode-data-uri.d.ts +21 -0
- package/lib/populate-ref-tables/decode-data-uri.js +126 -0
- package/lib/populate-ref-tables/decompose-header-set.d.ts +29 -0
- package/lib/populate-ref-tables/decompose-header-set.js +157 -0
- package/lib/populate-ref-tables/decompose-url.d.ts +25 -0
- package/lib/populate-ref-tables/decompose-url.js +70 -0
- package/lib/populate-ref-tables/header-stability.d.ts +19 -0
- package/lib/populate-ref-tables/header-stability.js +22 -0
- package/lib/populate-ref-tables/header-value-cache-key.d.ts +17 -0
- package/lib/populate-ref-tables/header-value-cache-key.js +19 -0
- package/lib/populate-ref-tables/normalize-mime.d.ts +24 -0
- package/lib/populate-ref-tables/normalize-mime.js +36 -0
- package/lib/populate-ref-tables/populate-blob-refs.d.ts +38 -0
- package/lib/populate-ref-tables/populate-blob-refs.js +134 -0
- package/lib/populate-ref-tables/populate-content-type-refs.d.ts +27 -0
- package/lib/populate-ref-tables/populate-content-type-refs.js +70 -0
- package/lib/populate-ref-tables/populate-header-tables.d.ts +35 -0
- package/lib/populate-ref-tables/populate-header-tables.js +80 -0
- package/lib/populate-ref-tables/populate-json-refs.d.ts +29 -0
- package/lib/populate-ref-tables/populate-json-refs.js +101 -0
- package/lib/populate-ref-tables/populate-refs.d.ts +51 -0
- package/lib/populate-ref-tables/populate-refs.js +62 -0
- package/lib/populate-ref-tables/populate-text-refs.d.ts +32 -0
- package/lib/populate-ref-tables/populate-text-refs.js +133 -0
- package/lib/populate-ref-tables/populate-url-refs.d.ts +28 -0
- package/lib/populate-ref-tables/populate-url-refs.js +148 -0
- package/lib/populate-ref-tables/test-utils/count-rows.d.ts +15 -0
- package/lib/populate-ref-tables/test-utils/count-rows.js +17 -0
- package/lib/populate-ref-tables/types.d.ts +197 -0
- package/lib/populate-ref-tables/types.js +7 -0
- package/lib/populate-ref-tables/upsert-one-header-set.d.ts +34 -0
- package/lib/populate-ref-tables/upsert-one-header-set.js +208 -0
- package/lib/populate-ref-tables/volatile-header-names.d.ts +20 -0
- package/lib/populate-ref-tables/volatile-header-names.js +33 -0
- package/lib/redirect-table.d.ts +9 -0
- package/lib/redirect-table.js +28 -0
- package/lib/release-finished-statements.d.ts +42 -0
- package/lib/release-finished-statements.js +45 -0
- package/lib/resolve-redirect-chain.d.ts +33 -0
- package/lib/resolve-redirect-chain.js +27 -0
- package/lib/resource.d.ts +46 -0
- package/lib/resource.js +62 -0
- package/lib/retarget-legacy-fk-tables.d.ts +61 -0
- package/lib/retarget-legacy-fk-tables.js +137 -0
- package/lib/safe-path.d.ts +9 -0
- package/lib/safe-path.js +17 -0
- package/lib/scope/build-scope-map.d.ts +21 -0
- package/lib/scope/build-scope-map.js +32 -0
- package/lib/scope/find-scope-entry.d.ts +25 -0
- package/lib/scope/find-scope-entry.js +45 -0
- package/lib/template-classification/classify-archive-page-templates.d.ts +42 -0
- package/lib/template-classification/classify-archive-page-templates.js +70 -0
- package/lib/template-classification/classify-page-templates.d.ts +33 -0
- package/lib/template-classification/classify-page-templates.js +60 -0
- package/lib/template-classification/collect-page-ids-with-html.d.ts +24 -0
- package/lib/template-classification/collect-page-ids-with-html.js +30 -0
- package/lib/template-classification/collect-page-stylesheet-urls.d.ts +32 -0
- package/lib/template-classification/collect-page-stylesheet-urls.js +130 -0
- package/lib/template-classification/create-content-root-hint.d.ts +41 -0
- package/lib/template-classification/create-content-root-hint.js +51 -0
- package/lib/template-classification/create-page-cluster-factory.d.ts +36 -0
- package/lib/template-classification/create-page-cluster-factory.js +52 -0
- package/lib/template-classification/load-page-cluster-candidates.d.ts +32 -0
- package/lib/template-classification/load-page-cluster-candidates.js +93 -0
- package/lib/template-classification/page-cluster/resolve-page-cluster-keys.d.ts +34 -0
- package/lib/template-classification/page-cluster/resolve-page-cluster-keys.js +236 -0
- package/lib/template-classification/page-cluster/types.d.ts +123 -0
- package/lib/template-classification/page-cluster/types.js +1 -0
- package/lib/template-classification/types.d.ts +234 -0
- package/lib/template-classification/types.js +1 -0
- package/lib/test-utils/build-full-schema-test-db.d.ts +34 -0
- package/lib/test-utils/build-full-schema-test-db.js +74 -0
- package/lib/test-utils/create-legacy-analysis-tables.d.ts +13 -0
- package/lib/test-utils/create-legacy-analysis-tables.js +37 -0
- package/lib/test-utils/fk-parent-tables.d.ts +15 -0
- package/lib/test-utils/fk-parent-tables.js +19 -0
- package/lib/test-utils/seed-content-item.d.ts +35 -0
- package/lib/test-utils/seed-content-item.js +42 -0
- package/lib/test-utils/setup-legacy-fk-db.d.ts +34 -0
- package/lib/test-utils/setup-legacy-fk-db.js +271 -0
- package/lib/transfer/attach-source-database.d.ts +31 -0
- package/lib/transfer/attach-source-database.js +40 -0
- package/lib/transfer/build-split-config.d.ts +30 -0
- package/lib/transfer/build-split-config.js +42 -0
- package/lib/transfer/clear-replaced-page-rows.d.ts +23 -0
- package/lib/transfer/clear-replaced-page-rows.js +61 -0
- package/lib/transfer/concat-archives.d.ts +55 -0
- package/lib/transfer/concat-archives.js +95 -0
- package/lib/transfer/concat-source-transfer-phases.d.ts +10 -0
- package/lib/transfer/concat-source-transfer-phases.js +17 -0
- package/lib/transfer/content-item-rank-sql.d.ts +21 -0
- package/lib/transfer/content-item-rank-sql.js +23 -0
- package/lib/transfer/copy-anchor-edges.d.ts +28 -0
- package/lib/transfer/copy-anchor-edges.js +42 -0
- package/lib/transfer/copy-dictionaries-for-concat.d.ts +39 -0
- package/lib/transfer/copy-dictionaries-for-concat.js +81 -0
- package/lib/transfer/copy-dictionaries-for-split.d.ts +29 -0
- package/lib/transfer/copy-dictionaries-for-split.js +224 -0
- package/lib/transfer/copy-header-set-children.d.ts +27 -0
- package/lib/transfer/copy-header-set-children.js +51 -0
- package/lib/transfer/copy-image-items.d.ts +21 -0
- package/lib/transfer/copy-image-items.js +62 -0
- package/lib/transfer/copy-inventory-source-lists.d.ts +30 -0
- package/lib/transfer/copy-inventory-source-lists.js +61 -0
- package/lib/transfer/copy-journal-tables.d.ts +30 -0
- package/lib/transfer/copy-journal-tables.js +56 -0
- package/lib/transfer/copy-page-console-logs.d.ts +16 -0
- package/lib/transfer/copy-page-console-logs.js +27 -0
- package/lib/transfer/copy-page-html-blobs.d.ts +31 -0
- package/lib/transfer/copy-page-html-blobs.js +43 -0
- package/lib/transfer/copy-page-meta.d.ts +27 -0
- package/lib/transfer/copy-page-meta.js +68 -0
- package/lib/transfer/copy-page-template-clusters.d.ts +31 -0
- package/lib/transfer/copy-page-template-clusters.js +56 -0
- package/lib/transfer/copy-page-template-labels.d.ts +34 -0
- package/lib/transfer/copy-page-template-labels.js +88 -0
- package/lib/transfer/copy-resource-items.d.ts +29 -0
- package/lib/transfer/copy-resource-items.js +89 -0
- package/lib/transfer/copy-resource-ref-edges.d.ts +20 -0
- package/lib/transfer/copy-resource-ref-edges.js +33 -0
- package/lib/transfer/copy-simple-page-scoped-tables.d.ts +15 -0
- package/lib/transfer/copy-simple-page-scoped-tables.js +34 -0
- package/lib/transfer/count-external-pages-in-scope.d.ts +26 -0
- package/lib/transfer/count-external-pages-in-scope.js +40 -0
- package/lib/transfer/create-transfer-temp-tables.d.ts +30 -0
- package/lib/transfer/create-transfer-temp-tables.js +59 -0
- package/lib/transfer/dictionary-copy-specs.d.ts +32 -0
- package/lib/transfer/dictionary-copy-specs.js +28 -0
- package/lib/transfer/drop-transfer-temp-tables.d.ts +9 -0
- package/lib/transfer/drop-transfer-temp-tables.js +18 -0
- package/lib/transfer/flatten-redirect-chains.d.ts +44 -0
- package/lib/transfer/flatten-redirect-chains.js +74 -0
- package/lib/transfer/insert-content-items.d.ts +35 -0
- package/lib/transfer/insert-content-items.js +116 -0
- package/lib/transfer/list-transfer-columns.d.ts +35 -0
- package/lib/transfer/list-transfer-columns.js +45 -0
- package/lib/transfer/mark-in-scope-content-items.d.ts +31 -0
- package/lib/transfer/mark-in-scope-content-items.js +54 -0
- package/lib/transfer/merge-archive-configs.d.ts +51 -0
- package/lib/transfer/merge-archive-configs.js +85 -0
- package/lib/transfer/plan-content-items-for-concat.d.ts +33 -0
- package/lib/transfer/plan-content-items-for-concat.js +51 -0
- package/lib/transfer/plan-content-items-for-split.d.ts +42 -0
- package/lib/transfer/plan-content-items-for-split.js +83 -0
- package/lib/transfer/plan-resource-items.d.ts +40 -0
- package/lib/transfer/plan-resource-items.js +69 -0
- package/lib/transfer/quote-transfer-identifier.d.ts +18 -0
- package/lib/transfer/quote-transfer-identifier.js +20 -0
- package/lib/transfer/reclassify-resource-externality.d.ts +37 -0
- package/lib/transfer/reclassify-resource-externality.js +66 -0
- package/lib/transfer/remap-redirect-dest-ids.d.ts +34 -0
- package/lib/transfer/remap-redirect-dest-ids.js +51 -0
- package/lib/transfer/replace-content-items.d.ts +39 -0
- package/lib/transfer/replace-content-items.js +83 -0
- package/lib/transfer/simple-page-scoped-tables.d.ts +25 -0
- package/lib/transfer/simple-page-scoped-tables.js +38 -0
- package/lib/transfer/split-archive.d.ts +55 -0
- package/lib/transfer/split-archive.js +98 -0
- package/lib/transfer/split-source-transfer-phases.d.ts +11 -0
- package/lib/transfer/split-source-transfer-phases.js +18 -0
- package/lib/transfer/transfer-action.d.ts +34 -0
- package/lib/transfer/transfer-action.js +32 -0
- package/lib/transfer/transfer-archive-rows.d.ts +65 -0
- package/lib/transfer/transfer-archive-rows.js +156 -0
- package/lib/transfer/transfer-dictionary-tables.d.ts +12 -0
- package/lib/transfer/transfer-dictionary-tables.js +22 -0
- package/lib/transfer/transfer-post-phases.d.ts +10 -0
- package/lib/transfer/transfer-post-phases.js +13 -0
- package/lib/transfer/transfer-source-alias.d.ts +9 -0
- package/lib/transfer/transfer-source-alias.js +9 -0
- package/lib/transfer/types.d.ts +111 -0
- package/lib/transfer/types.js +35 -0
- package/lib/types.d.ts +772 -0
- package/lib/types.js +1 -0
- package/lib/url-alias/compute-tier-a-alias-key.d.ts +44 -0
- package/lib/url-alias/compute-tier-a-alias-key.js +47 -0
- package/lib/url-alias/compute-tier-b-alias-key.d.ts +23 -0
- package/lib/url-alias/compute-tier-b-alias-key.js +26 -0
- package/lib/url-alias/group-alias-candidates.d.ts +27 -0
- package/lib/url-alias/group-alias-candidates.js +29 -0
- package/lib/url-alias/types.d.ts +12 -0
- package/lib/url-alias/types.js +1 -0
- package/lib/url-pattern/compute-shape-key.d.ts +58 -0
- package/lib/url-pattern/compute-shape-key.js +129 -0
- package/lib/url-pattern/decompose-url.d.ts +33 -0
- package/lib/url-pattern/decompose-url.js +79 -0
- package/lib/url-pattern/reconstruct-url.d.ts +15 -0
- package/lib/url-pattern/reconstruct-url.js +33 -0
- package/lib/url-sort/compute-url-sort-ranks.d.ts +30 -0
- package/lib/url-sort/compute-url-sort-ranks.js +33 -0
- package/lib/utils/array/each-splitted.d.ts +10 -0
- package/lib/utils/array/each-splitted.js +14 -0
- package/lib/utils/debug.d.ts +8 -0
- package/lib/utils/debug.js +8 -0
- package/lib/utils/error/emit-error-with-retry.d.ts +40 -0
- package/lib/utils/error/emit-error-with-retry.js +44 -0
- package/lib/utils/error/emit-error.d.ts +39 -0
- package/lib/utils/error/emit-error.js +41 -0
- package/lib/utils/object/parse-response-headers.d.ts +12 -0
- package/lib/utils/object/parse-response-headers.js +26 -0
- package/lib/utils/object/redact-request-headers.d.ts +15 -0
- package/lib/utils/object/redact-request-headers.js +27 -0
- package/lib/utils/types/types.d.ts +383 -0
- package/lib/utils/types/types.js +1 -0
- package/lib/verify-migration/capture-rejection.d.ts +24 -0
- package/lib/verify-migration/capture-rejection.js +31 -0
- package/lib/verify-migration/check-anchor-edges-count.d.ts +34 -0
- package/lib/verify-migration/check-anchor-edges-count.js +72 -0
- package/lib/verify-migration/check-anchor-edges-sum.d.ts +13 -0
- package/lib/verify-migration/check-anchor-edges-sum.js +27 -0
- package/lib/verify-migration/check-content-items-count.d.ts +16 -0
- package/lib/verify-migration/check-content-items-count.js +30 -0
- package/lib/verify-migration/check-content-type-preservation.d.ts +22 -0
- package/lib/verify-migration/check-content-type-preservation.js +40 -0
- package/lib/verify-migration/check-foreign-key-integrity.d.ts +31 -0
- package/lib/verify-migration/check-foreign-key-integrity.js +47 -0
- package/lib/verify-migration/check-image-items-count.d.ts +12 -0
- package/lib/verify-migration/check-image-items-count.js +26 -0
- package/lib/verify-migration/check-page-meta-count.d.ts +15 -0
- package/lib/verify-migration/check-page-meta-count.js +31 -0
- package/lib/verify-migration/check-reader-parity.d.ts +23 -0
- package/lib/verify-migration/check-reader-parity.js +182 -0
- package/lib/verify-migration/check-resource-items-count.d.ts +17 -0
- package/lib/verify-migration/check-resource-items-count.js +33 -0
- package/lib/verify-migration/check-url-round-trip.d.ts +43 -0
- package/lib/verify-migration/check-url-round-trip.js +112 -0
- package/lib/verify-migration/types.d.ts +70 -0
- package/lib/verify-migration/types.js +63 -0
- package/lib/verify-migration/verify-migration.d.ts +41 -0
- package/lib/verify-migration/verify-migration.js +120 -0
- package/lib/with-bulk-write-pragmas.d.ts +51 -0
- package/lib/with-bulk-write-pragmas.js +132 -0
- package/lib/write-queue.d.ts +32 -0
- package/lib/write-queue.js +55 -0
- package/package.json +360 -5
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { UrlRefIdMap } from './types.js';
|
|
2
|
+
import type { Knex } from 'knex';
|
|
3
|
+
/**
|
|
4
|
+
* Batch-resolves `url_refs.id` for a set of URL strings (issue #193).
|
|
5
|
+
*
|
|
6
|
+
* Called by every entity populate helper that needs to translate a
|
|
7
|
+
* legacy URL string column into a `url_id` FK. Rather than open a
|
|
8
|
+
* separate SELECT per row (which multiplies migration wall-clock by
|
|
9
|
+
* chunk size × URL column count) the resolver collects the distinct
|
|
10
|
+
* strings the caller cares about, splits them into chunks of
|
|
11
|
+
* {@link LOOKUP_CHUNK_SIZE}, issues one `WHERE url IN (?, ...)` per
|
|
12
|
+
* chunk, and returns a single map.
|
|
13
|
+
*
|
|
14
|
+
* Missing entries fall out of the map — callers distinguish "URL is a
|
|
15
|
+
* large data URI routed to blob_refs" from "URL is absent from the
|
|
16
|
+
* dictionary" via a separate {@link ./resolve-blob-refs.ts} probe.
|
|
17
|
+
*
|
|
18
|
+
* Duplicates in `urls` are deduped internally so an image whose `src`
|
|
19
|
+
* and `currentSrc` are the same value only counts once against
|
|
20
|
+
* `LOOKUP_CHUNK_SIZE`.
|
|
21
|
+
* @param trx - Knex instance or transaction connected to the archive DB.
|
|
22
|
+
* @param urls - Iterable of URL strings to resolve. Empty and null-like
|
|
23
|
+
* values are ignored.
|
|
24
|
+
* @returns Map keyed by the raw URL string; missing entries indicate
|
|
25
|
+
* the URL is not present in `url_refs`.
|
|
26
|
+
* @example
|
|
27
|
+
* const idMap = await resolveUrlRefs(trx, [
|
|
28
|
+
* 'https://example.com/a',
|
|
29
|
+
* 'https://example.com/b',
|
|
30
|
+
* ]);
|
|
31
|
+
* const id = idMap.get('https://example.com/a'); // number | undefined
|
|
32
|
+
*/
|
|
33
|
+
export declare function resolveUrlRefs(trx: Knex, urls: Iterable<string>): Promise<UrlRefIdMap>;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rows sent per `SELECT ... WHERE url IN (?, ...)` chunk. SQLite's default
|
|
3
|
+
* `SQLITE_MAX_VARIABLE_NUMBER` is 32766 on modern builds — 800 URLs per
|
|
4
|
+
* chunk stays well under that while amortising the round-trip cost across
|
|
5
|
+
* many rows.
|
|
6
|
+
*/
|
|
7
|
+
const LOOKUP_CHUNK_SIZE = 800;
|
|
8
|
+
/**
|
|
9
|
+
* Batch-resolves `url_refs.id` for a set of URL strings (issue #193).
|
|
10
|
+
*
|
|
11
|
+
* Called by every entity populate helper that needs to translate a
|
|
12
|
+
* legacy URL string column into a `url_id` FK. Rather than open a
|
|
13
|
+
* separate SELECT per row (which multiplies migration wall-clock by
|
|
14
|
+
* chunk size × URL column count) the resolver collects the distinct
|
|
15
|
+
* strings the caller cares about, splits them into chunks of
|
|
16
|
+
* {@link LOOKUP_CHUNK_SIZE}, issues one `WHERE url IN (?, ...)` per
|
|
17
|
+
* chunk, and returns a single map.
|
|
18
|
+
*
|
|
19
|
+
* Missing entries fall out of the map — callers distinguish "URL is a
|
|
20
|
+
* large data URI routed to blob_refs" from "URL is absent from the
|
|
21
|
+
* dictionary" via a separate {@link ./resolve-blob-refs.ts} probe.
|
|
22
|
+
*
|
|
23
|
+
* Duplicates in `urls` are deduped internally so an image whose `src`
|
|
24
|
+
* and `currentSrc` are the same value only counts once against
|
|
25
|
+
* `LOOKUP_CHUNK_SIZE`.
|
|
26
|
+
* @param trx - Knex instance or transaction connected to the archive DB.
|
|
27
|
+
* @param urls - Iterable of URL strings to resolve. Empty and null-like
|
|
28
|
+
* values are ignored.
|
|
29
|
+
* @returns Map keyed by the raw URL string; missing entries indicate
|
|
30
|
+
* the URL is not present in `url_refs`.
|
|
31
|
+
* @example
|
|
32
|
+
* const idMap = await resolveUrlRefs(trx, [
|
|
33
|
+
* 'https://example.com/a',
|
|
34
|
+
* 'https://example.com/b',
|
|
35
|
+
* ]);
|
|
36
|
+
* const id = idMap.get('https://example.com/a'); // number | undefined
|
|
37
|
+
*/
|
|
38
|
+
export async function resolveUrlRefs(trx, urls) {
|
|
39
|
+
const distinct = new Set();
|
|
40
|
+
for (const url of urls) {
|
|
41
|
+
if (typeof url === 'string' && url !== '') {
|
|
42
|
+
distinct.add(url);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (distinct.size === 0) {
|
|
46
|
+
return new Map();
|
|
47
|
+
}
|
|
48
|
+
const values = [...distinct];
|
|
49
|
+
const result = new Map();
|
|
50
|
+
for (let index = 0; index < values.length; index += LOOKUP_CHUNK_SIZE) {
|
|
51
|
+
const chunk = values.slice(index, index + LOOKUP_CHUNK_SIZE);
|
|
52
|
+
const rows = await trx('url_refs')
|
|
53
|
+
.select('id', 'url')
|
|
54
|
+
.whereIn('url', chunk);
|
|
55
|
+
for (const row of rows) {
|
|
56
|
+
result.set(row.url, row.id);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
/**
|
|
3
|
+
* Runs `SELECT count(<countColumn>) FROM <table>` and returns the count
|
|
4
|
+
* as a plain JS number. Kept in this package instead of importing from
|
|
5
|
+
* `populate-ref-tables/test-utils/count-rows.ts` because a spec in populate-entities importing
|
|
6
|
+
* from populate-refs test-utils would establish a cross-directory test-utils
|
|
7
|
+
* dependency; the populate-refs copy has the same shape but its default
|
|
8
|
+
* countColumn is scoped to that phase's tables. Duplication is minimal
|
|
9
|
+
* and keeps each phase's test scaffolding self-contained.
|
|
10
|
+
* @param db - Knex instance (typically a spec-local in-memory DB).
|
|
11
|
+
* @param table - Table name.
|
|
12
|
+
* @param countColumn - Column to count; defaults to `'*'` so this helper
|
|
13
|
+
* works uniformly across `content_items` / `page_meta` /
|
|
14
|
+
* `resource_ref_edges` (some of which do not have an `id` column).
|
|
15
|
+
* @returns Row count.
|
|
16
|
+
*/
|
|
17
|
+
export declare function countRows(db: Knex, table: string, countColumn?: string): Promise<number>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runs `SELECT count(<countColumn>) FROM <table>` and returns the count
|
|
3
|
+
* as a plain JS number. Kept in this package instead of importing from
|
|
4
|
+
* `populate-ref-tables/test-utils/count-rows.ts` because a spec in populate-entities importing
|
|
5
|
+
* from populate-refs test-utils would establish a cross-directory test-utils
|
|
6
|
+
* dependency; the populate-refs copy has the same shape but its default
|
|
7
|
+
* countColumn is scoped to that phase's tables. Duplication is minimal
|
|
8
|
+
* and keeps each phase's test scaffolding self-contained.
|
|
9
|
+
* @param db - Knex instance (typically a spec-local in-memory DB).
|
|
10
|
+
* @param table - Table name.
|
|
11
|
+
* @param countColumn - Column to count; defaults to `'*'` so this helper
|
|
12
|
+
* works uniformly across `content_items` / `page_meta` /
|
|
13
|
+
* `resource_ref_edges` (some of which do not have an `id` column).
|
|
14
|
+
* @returns Row count.
|
|
15
|
+
*/
|
|
16
|
+
export async function countRows(db, table, countColumn = '*') {
|
|
17
|
+
const rows = await db(table).count({ n: countColumn });
|
|
18
|
+
const first = rows[0];
|
|
19
|
+
return Number(first.n);
|
|
20
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type knex from 'knex';
|
|
2
|
+
/**
|
|
3
|
+
* Inserts one row into each of `pages`, `url_refs`, and `content_items` per
|
|
4
|
+
* requested id so downstream inserts against tables that FK to
|
|
5
|
+
* `content_items(id)` (`anchor_edges`, `image_items`, `page_meta`, …) satisfy
|
|
6
|
+
* their foreign key without every spec re-authoring the same 20 lines of
|
|
7
|
+
* seed logic.
|
|
8
|
+
*
|
|
9
|
+
* Shared by 0.13 check specs (`check-anchor-edges-count.spec.ts`,
|
|
10
|
+
* `check-anchor-edges-sum.spec.ts`, `check-image-items-count.spec.ts`,
|
|
11
|
+
* `verify-migration.spec.ts`) so a schema change to
|
|
12
|
+
* pages/url_refs/content_items only requires editing one file. Kept in
|
|
13
|
+
* `populate-entity-tables/test-utils/` alongside {@link setup-entities-db.ts} because that
|
|
14
|
+
* module already provisions the tables this helper writes to.
|
|
15
|
+
*
|
|
16
|
+
* Rows are inserted with defaults suitable for count / structural
|
|
17
|
+
* invariants: `scraped=1`, `isTarget=1`, `isExternal=0`, `source='crawled'`,
|
|
18
|
+
* URL `https://example.com/<id>` and matching `url_refs` row on the same id
|
|
19
|
+
* so `url_id` binds 1:1 with `pages.id` (helpful for URL round-trip specs).
|
|
20
|
+
* @param db - Knex handle from {@link setupMigrationDb}.
|
|
21
|
+
* @param ids - Content-item ids to create. Ordering does not matter but the
|
|
22
|
+
* helper does not deduplicate the input list — callers should pass
|
|
23
|
+
* distinct ids.
|
|
24
|
+
*/
|
|
25
|
+
export declare function seedContentItems(db: ReturnType<typeof knex>, ids: readonly number[]): Promise<void>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inserts one row into each of `pages`, `url_refs`, and `content_items` per
|
|
3
|
+
* requested id so downstream inserts against tables that FK to
|
|
4
|
+
* `content_items(id)` (`anchor_edges`, `image_items`, `page_meta`, …) satisfy
|
|
5
|
+
* their foreign key without every spec re-authoring the same 20 lines of
|
|
6
|
+
* seed logic.
|
|
7
|
+
*
|
|
8
|
+
* Shared by 0.13 check specs (`check-anchor-edges-count.spec.ts`,
|
|
9
|
+
* `check-anchor-edges-sum.spec.ts`, `check-image-items-count.spec.ts`,
|
|
10
|
+
* `verify-migration.spec.ts`) so a schema change to
|
|
11
|
+
* pages/url_refs/content_items only requires editing one file. Kept in
|
|
12
|
+
* `populate-entity-tables/test-utils/` alongside {@link setup-entities-db.ts} because that
|
|
13
|
+
* module already provisions the tables this helper writes to.
|
|
14
|
+
*
|
|
15
|
+
* Rows are inserted with defaults suitable for count / structural
|
|
16
|
+
* invariants: `scraped=1`, `isTarget=1`, `isExternal=0`, `source='crawled'`,
|
|
17
|
+
* URL `https://example.com/<id>` and matching `url_refs` row on the same id
|
|
18
|
+
* so `url_id` binds 1:1 with `pages.id` (helpful for URL round-trip specs).
|
|
19
|
+
* @param db - Knex handle from {@link setupMigrationDb}.
|
|
20
|
+
* @param ids - Content-item ids to create. Ordering does not matter but the
|
|
21
|
+
* helper does not deduplicate the input list — callers should pass
|
|
22
|
+
* distinct ids.
|
|
23
|
+
*/
|
|
24
|
+
export async function seedContentItems(db, ids) {
|
|
25
|
+
for (const id of ids) {
|
|
26
|
+
await db('pages').insert({
|
|
27
|
+
id,
|
|
28
|
+
url: `https://example.com/${id}`,
|
|
29
|
+
scraped: 1,
|
|
30
|
+
isTarget: 1,
|
|
31
|
+
});
|
|
32
|
+
await db('url_refs').insert({ id, url: `https://example.com/${id}` });
|
|
33
|
+
await db('content_items').insert({
|
|
34
|
+
id,
|
|
35
|
+
url_id: id,
|
|
36
|
+
is_external: 0,
|
|
37
|
+
scraped: 1,
|
|
38
|
+
is_target: 1,
|
|
39
|
+
source: 'crawled',
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import knex from 'knex';
|
|
2
|
+
/**
|
|
3
|
+
* Provisions an in-memory SQLite database with:
|
|
4
|
+
*
|
|
5
|
+
* - A minimal subset of the legacy write model (`pages`, `resources`,
|
|
6
|
+
* `anchors`, `images`, `resources-referrers`, `page_html_ref`,
|
|
7
|
+
* `page_html_blobs`) — only the columns the 0.13 populates
|
|
8
|
+
* actually read.
|
|
9
|
+
* - The 0.13 ref / header tables (via {@link createRefTables}).
|
|
10
|
+
* - The 0.13 entity tables (via {@link createEntityTables}).
|
|
11
|
+
* - The 0.13 adjunct tables (via {@link createAdjunctTables}) — required
|
|
12
|
+
* because `content_items.dedupe_cap_event_id REFERENCES
|
|
13
|
+
* dedupe_cap_events(id)`; under `PRAGMA foreign_keys = ON` (enabled
|
|
14
|
+
* below), inserting into `content_items` fails with `no such table:
|
|
15
|
+
* dedupe_cap_events` if the adjunct tables were skipped. `initSchema`
|
|
16
|
+
* always calls both create functions together, so this mirrors a real
|
|
17
|
+
* archive's actual schema rather than an artificially incomplete one.
|
|
18
|
+
*
|
|
19
|
+
* Every 0.13 populate spec calls this to obtain a fresh DB. The
|
|
20
|
+
* caller is responsible for `db.destroy()` (spec `afterEach`).
|
|
21
|
+
*
|
|
22
|
+
* `PRAGMA foreign_keys = ON` is enabled at setup time so specs mirror
|
|
23
|
+
* the migration script's execution mode. `content_items.redirect_dest_id`'s
|
|
24
|
+
* DEFERRABLE FK is enforced at COMMIT, so specs that exercise the
|
|
25
|
+
* self-reference must run their inserts inside a `db.transaction`
|
|
26
|
+
* boundary (see `populate-content-items.spec.ts`'s redirect test) —
|
|
27
|
+
* bare inserts would trip the FK immediately.
|
|
28
|
+
* @returns Connected Knex instance.
|
|
29
|
+
*/
|
|
30
|
+
export declare function setupMigrationDb(): Promise<ReturnType<typeof knex>>;
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import knex from 'knex';
|
|
2
|
+
import { createAdjunctTables } from '../../create-adjunct-tables.js';
|
|
3
|
+
import { createEntityTables } from '../../create-entity-tables.js';
|
|
4
|
+
import { createRefTables } from '../../create-ref-tables.js';
|
|
5
|
+
import { LibsqlDialect } from '../../libsql-dialect.js';
|
|
6
|
+
/**
|
|
7
|
+
* Provisions an in-memory SQLite database with:
|
|
8
|
+
*
|
|
9
|
+
* - A minimal subset of the legacy write model (`pages`, `resources`,
|
|
10
|
+
* `anchors`, `images`, `resources-referrers`, `page_html_ref`,
|
|
11
|
+
* `page_html_blobs`) — only the columns the 0.13 populates
|
|
12
|
+
* actually read.
|
|
13
|
+
* - The 0.13 ref / header tables (via {@link createRefTables}).
|
|
14
|
+
* - The 0.13 entity tables (via {@link createEntityTables}).
|
|
15
|
+
* - The 0.13 adjunct tables (via {@link createAdjunctTables}) — required
|
|
16
|
+
* because `content_items.dedupe_cap_event_id REFERENCES
|
|
17
|
+
* dedupe_cap_events(id)`; under `PRAGMA foreign_keys = ON` (enabled
|
|
18
|
+
* below), inserting into `content_items` fails with `no such table:
|
|
19
|
+
* dedupe_cap_events` if the adjunct tables were skipped. `initSchema`
|
|
20
|
+
* always calls both create functions together, so this mirrors a real
|
|
21
|
+
* archive's actual schema rather than an artificially incomplete one.
|
|
22
|
+
*
|
|
23
|
+
* Every 0.13 populate spec calls this to obtain a fresh DB. The
|
|
24
|
+
* caller is responsible for `db.destroy()` (spec `afterEach`).
|
|
25
|
+
*
|
|
26
|
+
* `PRAGMA foreign_keys = ON` is enabled at setup time so specs mirror
|
|
27
|
+
* the migration script's execution mode. `content_items.redirect_dest_id`'s
|
|
28
|
+
* DEFERRABLE FK is enforced at COMMIT, so specs that exercise the
|
|
29
|
+
* self-reference must run their inserts inside a `db.transaction`
|
|
30
|
+
* boundary (see `populate-content-items.spec.ts`'s redirect test) —
|
|
31
|
+
* bare inserts would trip the FK immediately.
|
|
32
|
+
* @returns Connected Knex instance.
|
|
33
|
+
*/
|
|
34
|
+
export async function setupMigrationDb() {
|
|
35
|
+
const db = knex({
|
|
36
|
+
client: LibsqlDialect,
|
|
37
|
+
connection: { filename: ':memory:' },
|
|
38
|
+
useNullAsDefault: true,
|
|
39
|
+
});
|
|
40
|
+
await db.raw('PRAGMA foreign_keys = ON');
|
|
41
|
+
await db.schema.createTable('pages', (t) => {
|
|
42
|
+
t.increments('id');
|
|
43
|
+
t.string('url').notNullable();
|
|
44
|
+
t.integer('redirectDestId').nullable();
|
|
45
|
+
t.boolean('scraped').notNullable();
|
|
46
|
+
t.boolean('isTarget').notNullable();
|
|
47
|
+
t.boolean('isExternal');
|
|
48
|
+
t.integer('status');
|
|
49
|
+
t.string('statusText');
|
|
50
|
+
t.string('contentType').nullable();
|
|
51
|
+
t.integer('contentLength').nullable();
|
|
52
|
+
t.json('responseHeaders').nullable();
|
|
53
|
+
t.string('lang');
|
|
54
|
+
t.string('dir');
|
|
55
|
+
t.string('charset');
|
|
56
|
+
t.string('baseHref');
|
|
57
|
+
t.text('viewport_raw');
|
|
58
|
+
t.string('themeColor');
|
|
59
|
+
t.string('applicationName');
|
|
60
|
+
t.string('author');
|
|
61
|
+
t.string('generator');
|
|
62
|
+
t.string('publisher');
|
|
63
|
+
t.string('title');
|
|
64
|
+
t.text('description');
|
|
65
|
+
t.text('keywords');
|
|
66
|
+
t.text('robots_raw');
|
|
67
|
+
t.integer('robots_noindex');
|
|
68
|
+
t.integer('robots_nofollow');
|
|
69
|
+
t.integer('robots_noarchive');
|
|
70
|
+
t.integer('robots_noimageindex');
|
|
71
|
+
t.string('googlebot');
|
|
72
|
+
t.string('canonical');
|
|
73
|
+
t.string('amphtml');
|
|
74
|
+
t.string('manifest');
|
|
75
|
+
t.string('icon_href');
|
|
76
|
+
t.string('appleTouchIcon_href');
|
|
77
|
+
t.string('og_type');
|
|
78
|
+
t.string('og_title');
|
|
79
|
+
t.string('og_url');
|
|
80
|
+
t.string('og_site_name');
|
|
81
|
+
t.text('og_description');
|
|
82
|
+
t.string('og_image');
|
|
83
|
+
t.string('og_image_alt');
|
|
84
|
+
t.string('og_image_width');
|
|
85
|
+
t.string('og_image_height');
|
|
86
|
+
t.string('og_locale');
|
|
87
|
+
t.string('og_article_published_time');
|
|
88
|
+
t.string('og_article_modified_time');
|
|
89
|
+
t.string('twitter_card');
|
|
90
|
+
t.string('twitter_site');
|
|
91
|
+
t.string('twitter_creator');
|
|
92
|
+
t.string('twitter_title');
|
|
93
|
+
t.text('twitter_description');
|
|
94
|
+
t.string('twitter_image');
|
|
95
|
+
t.string('fb_app_id');
|
|
96
|
+
t.string('verification_google');
|
|
97
|
+
t.integer('formatDetection_telephone');
|
|
98
|
+
t.integer('firstCrawledAt');
|
|
99
|
+
t.integer('lastCrawledAt');
|
|
100
|
+
t.integer('tag_count');
|
|
101
|
+
t.integer('jsonld_count');
|
|
102
|
+
t.text('tags_providers_csv');
|
|
103
|
+
t.json('meta_extras');
|
|
104
|
+
t.boolean('isSkipped');
|
|
105
|
+
t.string('skipReason');
|
|
106
|
+
t.integer('order');
|
|
107
|
+
t.string('source').notNullable().defaultTo('crawled');
|
|
108
|
+
});
|
|
109
|
+
await db.schema.createTable('resources', (t) => {
|
|
110
|
+
t.increments('id');
|
|
111
|
+
t.string('url').notNullable();
|
|
112
|
+
t.boolean('isExternal');
|
|
113
|
+
t.integer('status');
|
|
114
|
+
t.string('statusText');
|
|
115
|
+
t.string('contentType').nullable();
|
|
116
|
+
t.integer('contentLength').nullable();
|
|
117
|
+
t.string('compress').nullable();
|
|
118
|
+
t.string('cdn').nullable();
|
|
119
|
+
t.json('responseHeaders').nullable();
|
|
120
|
+
t.string('source').notNullable().defaultTo('crawled');
|
|
121
|
+
});
|
|
122
|
+
await db.schema.createTable('anchors', (t) => {
|
|
123
|
+
t.increments('id');
|
|
124
|
+
t.integer('pageId').notNullable();
|
|
125
|
+
t.integer('hrefId').notNullable();
|
|
126
|
+
t.string('hash');
|
|
127
|
+
t.string('textContent').nullable();
|
|
128
|
+
});
|
|
129
|
+
await db.schema.createTable('images', (t) => {
|
|
130
|
+
t.increments('id');
|
|
131
|
+
t.integer('pageId').notNullable();
|
|
132
|
+
t.string('src').nullable();
|
|
133
|
+
t.string('currentSrc').nullable();
|
|
134
|
+
t.string('alt');
|
|
135
|
+
t.float('width');
|
|
136
|
+
t.float('height');
|
|
137
|
+
t.integer('naturalWidth');
|
|
138
|
+
t.integer('naturalHeight');
|
|
139
|
+
t.boolean('isLazy');
|
|
140
|
+
t.integer('viewportWidth');
|
|
141
|
+
t.string('sourceCode');
|
|
142
|
+
});
|
|
143
|
+
await db.schema.createTable('resources-referrers', (t) => {
|
|
144
|
+
t.increments('id');
|
|
145
|
+
t.integer('resourceId').notNullable();
|
|
146
|
+
t.integer('pageId').notNullable();
|
|
147
|
+
t.unique(['resourceId', 'pageId']);
|
|
148
|
+
});
|
|
149
|
+
// `populate-image-items.ts` reads HTML BLOBs via the same trx that
|
|
150
|
+
// owns the outer populate transaction (see that file's JSDoc for the
|
|
151
|
+
// deadlock the inline read avoids). Provide the two tables so specs
|
|
152
|
+
// can seed rows or leave them empty (the reader returns `null` on a
|
|
153
|
+
// missing row, matching the `getHtmlOfPageById` contract). Raw SQL
|
|
154
|
+
// so the schema mirrors `init-schema.ts` exactly (`WITHOUT ROWID`,
|
|
155
|
+
// `size_raw` + `size_stored`, `codec` CHECK).
|
|
156
|
+
await db.raw(`
|
|
157
|
+
CREATE TABLE page_html_blobs (
|
|
158
|
+
hash BLOB PRIMARY KEY,
|
|
159
|
+
body BLOB NOT NULL,
|
|
160
|
+
codec TEXT NOT NULL CHECK(codec IN ('zstd', 'none')),
|
|
161
|
+
size_raw INTEGER NOT NULL,
|
|
162
|
+
size_stored INTEGER NOT NULL
|
|
163
|
+
) WITHOUT ROWID
|
|
164
|
+
`);
|
|
165
|
+
await db.raw(`
|
|
166
|
+
CREATE TABLE page_html_ref (
|
|
167
|
+
page_id INTEGER PRIMARY KEY,
|
|
168
|
+
hash BLOB NOT NULL REFERENCES page_html_blobs(hash)
|
|
169
|
+
) WITHOUT ROWID
|
|
170
|
+
`);
|
|
171
|
+
await createRefTables(db);
|
|
172
|
+
await createEntityTables(db);
|
|
173
|
+
await createAdjunctTables(db);
|
|
174
|
+
return db;
|
|
175
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain types for the 0.13 entity/edge population step (issue #193).
|
|
3
|
+
*
|
|
4
|
+
* The 0.13 populate helpers translate rows from the legacy write
|
|
5
|
+
* model (`pages`, `resources`, `anchors`, `images`, `resources-referrers`)
|
|
6
|
+
* into the normalised entity + edge tables (`content_items`, `page_meta`,
|
|
7
|
+
* `resource_items`, `anchor_edges`, `resource_ref_edges`, `image_items`)
|
|
8
|
+
* that 0.13 created. Every ref-id lookup goes through a small set of
|
|
9
|
+
* shared resolvers whose interfaces live here per the repo-wide
|
|
10
|
+
* `型は types.ts に集約` rule.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Mapping from `url_refs.url` (the natural key) to `url_refs.id`. Populated
|
|
14
|
+
* on demand from the DB by {@link ./resolve-url-refs.ts}. `null` on values
|
|
15
|
+
* that are stored in {@link ./resolve-blob-refs.ts} instead (large data
|
|
16
|
+
* URIs — see the routing rule in
|
|
17
|
+
* {@link ../populate-ref-tables/populate-url-refs.ts}) or on lookup miss.
|
|
18
|
+
*/
|
|
19
|
+
export interface UrlRefResolution {
|
|
20
|
+
/** `url_refs.id` when the URL string is present in the dictionary. */
|
|
21
|
+
readonly urlId: number | null;
|
|
22
|
+
/** `blob_refs.id` when the value is a large data URI routed to blob_refs. */
|
|
23
|
+
readonly blobId: number | null;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Batch-resolved `text_refs.id` for a set of raw text strings. Keyed by
|
|
27
|
+
* the raw text verbatim so the caller does not need to re-hash for
|
|
28
|
+
* cache probes.
|
|
29
|
+
*/
|
|
30
|
+
export type TextRefIdMap = ReadonlyMap<string, number>;
|
|
31
|
+
/**
|
|
32
|
+
* Batch-resolved `url_refs.id` for a set of URL strings. Keyed by the
|
|
33
|
+
* raw URL verbatim; missing entries mean the URL is either a large data
|
|
34
|
+
* URI (routed to `blob_refs`) or absent from the dictionary — the caller
|
|
35
|
+
* distinguishes via a separate `blob_refs` probe.
|
|
36
|
+
*/
|
|
37
|
+
export type UrlRefIdMap = ReadonlyMap<string, number>;
|
|
38
|
+
/**
|
|
39
|
+
* Batch-resolved `blob_refs.id` for a set of large data URI values.
|
|
40
|
+
* Keyed by the raw value verbatim (the data URI string), consistent with
|
|
41
|
+
* how `populateBlobRefs` inserts one row per distinct data URI payload
|
|
42
|
+
* hash — the resolver looks up by SHA-256 of the decoded payload but
|
|
43
|
+
* returns the map keyed by the raw URI so callers do not have to keep
|
|
44
|
+
* the decoded bytes around.
|
|
45
|
+
*/
|
|
46
|
+
export type BlobRefIdMap = ReadonlyMap<string, number>;
|
|
47
|
+
/**
|
|
48
|
+
* Batch-resolved `content_type_refs.id` for a set of raw content-type
|
|
49
|
+
* header values. Keyed by the raw value exactly as stored in
|
|
50
|
+
* `pages.contentType` / `resources.contentType`; missing entries mean
|
|
51
|
+
* the content type is null or absent from the dictionary (which should
|
|
52
|
+
* not happen after `populateContentTypeRefs` populates every distinct
|
|
53
|
+
* value).
|
|
54
|
+
*/
|
|
55
|
+
export type ContentTypeRefIdMap = ReadonlyMap<string, number>;
|
|
56
|
+
/**
|
|
57
|
+
* Batch-resolved `header_sets.id` for a set of raw `responseHeaders`
|
|
58
|
+
* JSON strings. Keyed by the raw JSON string; the resolver hashes each
|
|
59
|
+
* value in JS and looks up `header_sets.raw_json_hash` because SQLite
|
|
60
|
+
* has no built-in BLAKE3 / SHA-256 (see
|
|
61
|
+
* {@link ../populate-ref-tables/compute-content-hash.ts} for the algorithm choice).
|
|
62
|
+
*/
|
|
63
|
+
export type HeaderSetIdMap = ReadonlyMap<string, number>;
|
|
64
|
+
/**
|
|
65
|
+
* One collapsed anchor edge produced by the single-pass keyset scan in
|
|
66
|
+
* {@link ./populate-anchor-edges.ts}. Rows are emitted in `(page_id,
|
|
67
|
+
* href_page_id)` order; `first_text_id` is resolved in a second pass
|
|
68
|
+
* after `text_refs` lookups.
|
|
69
|
+
*/
|
|
70
|
+
export interface AnchorEdgeRow {
|
|
71
|
+
/** `content_items.id` of the page containing the anchor. */
|
|
72
|
+
page_id: number;
|
|
73
|
+
/** `content_items.id` of the anchor target. */
|
|
74
|
+
href_page_id: number;
|
|
75
|
+
/** Number of `anchors` rows collapsed into this edge. */
|
|
76
|
+
count: number;
|
|
77
|
+
/** `first_hash` — the `anchors.hash` of the first (lowest-id) instance. */
|
|
78
|
+
first_hash: string | null;
|
|
79
|
+
/**
|
|
80
|
+
* `first_text_id` — resolved from `first_textContent` against
|
|
81
|
+
* `text_refs`. `null` when the first instance had no textContent (an
|
|
82
|
+
* empty `<a>` tag) or when the text failed to resolve.
|
|
83
|
+
*/
|
|
84
|
+
first_text_id: number | null;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* One input row for {@link ./collapse-anchor-rows.ts}. Every field
|
|
88
|
+
* mirrors the legacy `anchors` schema; the collapser does not depend on
|
|
89
|
+
* knex or the DB so it can be unit-tested with plain arrays.
|
|
90
|
+
*/
|
|
91
|
+
export interface AnchorInputRow {
|
|
92
|
+
/** Legacy `anchors.id` — used only to sort input; not stored on the edge. */
|
|
93
|
+
id: number;
|
|
94
|
+
/** Legacy `anchors.pageId` — `content_items.id` of the source page. */
|
|
95
|
+
pageId: number;
|
|
96
|
+
/** Legacy `anchors.hrefId` — `content_items.id` of the anchor target. */
|
|
97
|
+
hrefId: number;
|
|
98
|
+
/** Legacy `anchors.hash` — verbatim SHA-256 hex from beholder. */
|
|
99
|
+
hash: string | null;
|
|
100
|
+
/** Legacy `anchors.textContent` — anchor visible text (empty for `<a>` with no content). */
|
|
101
|
+
textContent: string | null;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Intermediate shape yielded by {@link ./collapse-anchor-rows.ts}. Differs
|
|
105
|
+
* from the final {@link AnchorEdgeRow} in that `first_text_id` has not
|
|
106
|
+
* been resolved yet — the raw text is carried through as
|
|
107
|
+
* `first_textContent` so the second pass can batch-look up every
|
|
108
|
+
* distinct text against `text_refs`.
|
|
109
|
+
*/
|
|
110
|
+
export interface AnchorEdgeRowInProgress {
|
|
111
|
+
/** `content_items.id` of the page. */
|
|
112
|
+
page_id: number;
|
|
113
|
+
/** `content_items.id` of the anchor target. */
|
|
114
|
+
href_page_id: number;
|
|
115
|
+
/** Number of collapsed `anchors` rows. */
|
|
116
|
+
count: number;
|
|
117
|
+
/** Verbatim `anchors.hash` of the first (lowest-id) instance. */
|
|
118
|
+
first_hash: string | null;
|
|
119
|
+
/**
|
|
120
|
+
* Verbatim `anchors.textContent` of the first instance — carried
|
|
121
|
+
* unresolved so the caller can batch-look up ids across every edge.
|
|
122
|
+
*/
|
|
123
|
+
first_textContent: string | null;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Case discriminator for {@link ./match-images-to-dom-paths.ts}: which of
|
|
127
|
+
* the three resolution paths produced the returned `dom_path` string. The
|
|
128
|
+
* migration script's jsdom resolver emits a diagnostic warning log for
|
|
129
|
+
* `unknown` fallbacks so operators can audit reconstruction fidelity.
|
|
130
|
+
*/
|
|
131
|
+
export type DomPathDerivationCase = 'single-match' | 'ordinal-match' | 'unknown';
|
|
132
|
+
/**
|
|
133
|
+
* Result of the DOM-path derivation for one legacy `images` row.
|
|
134
|
+
* `path` is the string to insert into `text_refs.text`; `case` records
|
|
135
|
+
* which branch produced it.
|
|
136
|
+
*/
|
|
137
|
+
export interface DomPathResult {
|
|
138
|
+
/** The `dom_path` string, e.g. `html/body[1]/main[1]/img[3]`. */
|
|
139
|
+
path: string;
|
|
140
|
+
/** Which branch produced the string. */
|
|
141
|
+
case: DomPathDerivationCase;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* One `<img>` observed in a rendered / parsed document, in document
|
|
145
|
+
* order: its `outerHTML` (the matching key against the crawler's stored
|
|
146
|
+
* `sourceCode`) and its pre-derived `dom_path` string. Produced either
|
|
147
|
+
* by a jsdom walk over an archived HTML snapshot (migration script) or
|
|
148
|
+
* by an in-browser walk over the live page (crawler write path) — both
|
|
149
|
+
* feed {@link ./match-images-to-dom-paths.ts}, which is DOM-free and
|
|
150
|
+
* only compares these strings.
|
|
151
|
+
*/
|
|
152
|
+
export interface DomPathCandidate {
|
|
153
|
+
/** The element's `outerHTML`, verbatim. */
|
|
154
|
+
outerHTML: string;
|
|
155
|
+
/** The element's derived `dom_path` (see {@link ./derive-dom-path.ts}). */
|
|
156
|
+
path: string;
|
|
157
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain types for the 0.13 entity/edge population step (issue #193).
|
|
3
|
+
*
|
|
4
|
+
* The 0.13 populate helpers translate rows from the legacy write
|
|
5
|
+
* model (`pages`, `resources`, `anchors`, `images`, `resources-referrers`)
|
|
6
|
+
* into the normalised entity + edge tables (`content_items`, `page_meta`,
|
|
7
|
+
* `resource_items`, `anchor_edges`, `resource_ref_edges`, `image_items`)
|
|
8
|
+
* that 0.13 created. Every ref-id lookup goes through a small set of
|
|
9
|
+
* shared resolvers whose interfaces live here per the repo-wide
|
|
10
|
+
* `型は types.ts に集約` rule.
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { TextRefIdMap } from './types.js';
|
|
2
|
+
import type { Knex } from 'knex';
|
|
3
|
+
/**
|
|
4
|
+
* Upserts a set of text strings into `text_refs` and returns their ids
|
|
5
|
+
* (issue #193).
|
|
6
|
+
*
|
|
7
|
+
* Unlike {@link ./resolve-text-refs.ts}, which only reads, this helper
|
|
8
|
+
* inserts every missing string first. It exists specifically for
|
|
9
|
+
* `dom_path` strings, which are synthesised by the image-items populate
|
|
10
|
+
* ({@link ./populate-image-items.ts}) and are not among the columns the
|
|
11
|
+
* `text_refs` populate scans
|
|
12
|
+
* ({@link ../populate-ref-tables/populate-text-refs.ts}) — the caller
|
|
13
|
+
* cannot rely on the dictionary already containing them.
|
|
14
|
+
*
|
|
15
|
+
* Strategy:
|
|
16
|
+
*
|
|
17
|
+
* 1. **Hash and INSERT OR IGNORE** every input string in bulk. New rows
|
|
18
|
+
* materialise; conflicts are silently skipped.
|
|
19
|
+
* 2. **Read back** by hash + text (the `(hash, text)` UNIQUE composite)
|
|
20
|
+
* to pick up both freshly-inserted and pre-existing ids.
|
|
21
|
+
*
|
|
22
|
+
* The read-back narrows on both hash and text (same defensive shape as
|
|
23
|
+
* {@link ../populate-ref-tables/populate-header-tables.ts}'s `resolveValueIds`) so
|
|
24
|
+
* an astronomically improbable hash collision cannot leak the wrong
|
|
25
|
+
* id back to the caller.
|
|
26
|
+
*
|
|
27
|
+
* Empty / null strings are ignored; duplicates in `texts` are deduped
|
|
28
|
+
* internally.
|
|
29
|
+
* @param trx - Knex instance or transaction connected to the archive DB.
|
|
30
|
+
* @param texts - Iterable of text strings to upsert.
|
|
31
|
+
* @returns Map keyed by the raw text string.
|
|
32
|
+
* @example
|
|
33
|
+
* const idMap = await upsertTextRefs(trx, [
|
|
34
|
+
* 'html/body[1]/img[1]',
|
|
35
|
+
* 'unknown/42',
|
|
36
|
+
* ]);
|
|
37
|
+
*/
|
|
38
|
+
export declare function upsertTextRefs(trx: Knex, texts: Iterable<string>): Promise<TextRefIdMap>;
|