@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,133 @@
|
|
|
1
|
+
import { createProgressReporter } from '../create-progress-reporter.js';
|
|
2
|
+
import { computeContentHash } from './compute-content-hash.js';
|
|
3
|
+
/**
|
|
4
|
+
* Number of `text_refs` rows sent per `INSERT ... VALUES (...)` statement.
|
|
5
|
+
* Each row binds 2 params (hash + text), so 500 rows = 1000 params — well
|
|
6
|
+
* under SQLite's default `SQLITE_MAX_VARIABLE_NUMBER`.
|
|
7
|
+
*/
|
|
8
|
+
const INSERT_CHUNK_SIZE = 500;
|
|
9
|
+
/**
|
|
10
|
+
* Rows scanned per keyset-paginated `SELECT` chunk. One SELECT reads all
|
|
11
|
+
* text columns for the source table's chunk simultaneously so the pages
|
|
12
|
+
* table is scanned exactly once per populate call, not N-times-once-per-
|
|
13
|
+
* text-column.
|
|
14
|
+
*/
|
|
15
|
+
const READ_CHUNK_SIZE = 5000;
|
|
16
|
+
/**
|
|
17
|
+
* Source table + its text-shaped columns. Groups by table so each table
|
|
18
|
+
* is scanned exactly once with a single SELECT that covers every
|
|
19
|
+
* relevant column — a per-column scan would run 8 separate `pages`
|
|
20
|
+
* scans and multiply migration wall-clock accordingly.
|
|
21
|
+
*
|
|
22
|
+
* `dom_path` is intentionally absent: dom_path strings are derived from
|
|
23
|
+
* the stored HTML blob, not from any column of the current write-model,
|
|
24
|
+
* so this scan has nothing to read. Upserting dom_path strings into
|
|
25
|
+
* `text_refs` is the job of the image-items populate
|
|
26
|
+
* (`populate-entity-tables/populate-image-items.ts`), not this pass.
|
|
27
|
+
*/
|
|
28
|
+
const TEXT_SOURCES = [
|
|
29
|
+
{ table: 'anchors', columns: ['textContent'] },
|
|
30
|
+
{ table: 'images', columns: ['alt'] },
|
|
31
|
+
{
|
|
32
|
+
table: 'pages',
|
|
33
|
+
columns: [
|
|
34
|
+
'title',
|
|
35
|
+
'description',
|
|
36
|
+
'keywords',
|
|
37
|
+
'robots_raw',
|
|
38
|
+
'og_title',
|
|
39
|
+
'og_description',
|
|
40
|
+
'twitter_title',
|
|
41
|
+
'twitter_description',
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
/**
|
|
46
|
+
* Populates `text_refs` from every text-shaped column across `anchors`,
|
|
47
|
+
* `images`, and `pages` (issue #191).
|
|
48
|
+
*
|
|
49
|
+
* Rules:
|
|
50
|
+
*
|
|
51
|
+
* - **Content-hash dedup contract**: identical text produces one row. The
|
|
52
|
+
* hash is derived by {@link computeContentHash} (currently SHA-256,
|
|
53
|
+
* matching `page_html_blobs.hash`; see that function's docs for the
|
|
54
|
+
* algorithm-choice rationale).
|
|
55
|
+
* - **Empty and null are skipped** — an empty `<a>` tag adds no text to
|
|
56
|
+
* the dictionary. Anchors with no text still get an `anchor_edges` row
|
|
57
|
+
* in 0.13, just with `first_text_id = NULL`.
|
|
58
|
+
* - **INSERT OR IGNORE on (hash, text)** — the composite UNIQUE from the
|
|
59
|
+
* 0.13 DDL — makes the step idempotent across partial-failure
|
|
60
|
+
* restarts.
|
|
61
|
+
*
|
|
62
|
+
* Peak memory is bounded by the count of distinct texts (all texts are
|
|
63
|
+
* held in a Map before insert). On the reference archive this Map is
|
|
64
|
+
* about 5 MB of anchor textContent + a few MB of page meta text — well
|
|
65
|
+
* within the migration process budget.
|
|
66
|
+
* @param trx - Knex instance or transaction connected to the archive DB.
|
|
67
|
+
* @param onProgress - Optional sink for periodic progress lines (one per
|
|
68
|
+
* ~5% of each source table scanned); see {@link ../create-progress-reporter.ts}.
|
|
69
|
+
* @example
|
|
70
|
+
* await knex.transaction(async (trx) => {
|
|
71
|
+
* await populateTextRefs(trx);
|
|
72
|
+
* });
|
|
73
|
+
*/
|
|
74
|
+
export async function populateTextRefs(trx, onProgress) {
|
|
75
|
+
const seen = new Map();
|
|
76
|
+
for (const source of TEXT_SOURCES) {
|
|
77
|
+
const hasTable = await trx.schema.hasTable(source.table);
|
|
78
|
+
if (!hasTable) {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
const presentColumns = [];
|
|
82
|
+
for (const column of source.columns) {
|
|
83
|
+
if (await trx.schema.hasColumn(source.table, column)) {
|
|
84
|
+
presentColumns.push(column);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (presentColumns.length === 0) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const countRows = await trx(source.table).count({ n: '*' });
|
|
91
|
+
const total = Number(countRows[0]?.n ?? 0);
|
|
92
|
+
const report = createProgressReporter(`text_refs (${source.table})`, total, onProgress);
|
|
93
|
+
let processed = 0;
|
|
94
|
+
let cursor = 0;
|
|
95
|
+
while (true) {
|
|
96
|
+
const rows = await trx(source.table)
|
|
97
|
+
.select('id', ...presentColumns)
|
|
98
|
+
.where('id', '>', cursor)
|
|
99
|
+
.orderBy('id', 'asc')
|
|
100
|
+
.limit(READ_CHUNK_SIZE);
|
|
101
|
+
if (rows.length === 0) {
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
cursor = rows.at(-1).id;
|
|
105
|
+
processed += rows.length;
|
|
106
|
+
report(processed);
|
|
107
|
+
for (const row of rows) {
|
|
108
|
+
for (const column of presentColumns) {
|
|
109
|
+
const value = row[column];
|
|
110
|
+
if (typeof value !== 'string' || value === '') {
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
const hash = computeContentHash(value);
|
|
114
|
+
const key = hash.toString('hex');
|
|
115
|
+
if (!seen.has(key)) {
|
|
116
|
+
seen.set(key, value);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (seen.size === 0) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const inserts = [];
|
|
126
|
+
for (const [hex, text] of seen) {
|
|
127
|
+
inserts.push({ hash: Buffer.from(hex, 'hex'), text });
|
|
128
|
+
}
|
|
129
|
+
for (let index = 0; index < inserts.length; index += INSERT_CHUNK_SIZE) {
|
|
130
|
+
const chunk = inserts.slice(index, index + INSERT_CHUNK_SIZE);
|
|
131
|
+
await trx('text_refs').insert(chunk).onConflict(['hash', 'text']).ignore();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ProgressCallback } from '../create-progress-reporter.js';
|
|
2
|
+
import type { Knex } from 'knex';
|
|
3
|
+
/**
|
|
4
|
+
* Populates `url_refs` from every URL-shaped column across `pages`,
|
|
5
|
+
* `resources`, and `images` (issue #191).
|
|
6
|
+
*
|
|
7
|
+
* Runs two passes per source table:
|
|
8
|
+
*
|
|
9
|
+
* 1. **Collect distinct URLs** into an in-process `Set<string>`, streaming
|
|
10
|
+
* rows from each source table by keyset pagination on `id`. All the
|
|
11
|
+
* table's URL columns are read in a single SELECT so the pages scan
|
|
12
|
+
* is O(rows), not O(rows × columns). Peak memory is bounded by the
|
|
13
|
+
* count of distinct URLs, not the row count.
|
|
14
|
+
* 2. **Bulk-insert** into `url_refs` in chunks of {@link INSERT_CHUNK_SIZE},
|
|
15
|
+
* with the decomposed columns (`scheme` / `host` / `port` / `path` /
|
|
16
|
+
* `query_hash` / `fragment`) derived in JS by {@link decomposeUrl}.
|
|
17
|
+
*
|
|
18
|
+
* `INSERT OR IGNORE` on `url_refs.url` makes the step idempotent —
|
|
19
|
+
* repeated invocations after partial failure only add new URLs.
|
|
20
|
+
* @param trx - Knex instance or transaction connected to the archive DB.
|
|
21
|
+
* @param onProgress - Optional sink for periodic progress lines (one per
|
|
22
|
+
* ~5% of each source table scanned); see {@link ../create-progress-reporter.ts}.
|
|
23
|
+
* @example
|
|
24
|
+
* await knex.transaction(async (trx) => {
|
|
25
|
+
* await populateUrlRefs(trx);
|
|
26
|
+
* });
|
|
27
|
+
*/
|
|
28
|
+
export declare function populateUrlRefs(trx: Knex, onProgress?: ProgressCallback): Promise<void>;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { createProgressReporter } from '../create-progress-reporter.js';
|
|
2
|
+
import { DATA_URI_URL_REFS_LIMIT } from './data-uri-url-refs-limit.js';
|
|
3
|
+
import { decomposeUrl } from './decompose-url.js';
|
|
4
|
+
/**
|
|
5
|
+
* Rows inserted per `INSERT INTO url_refs ... VALUES (...)` statement. Kept
|
|
6
|
+
* well under SQLite's `SQLITE_MAX_VARIABLE_NUMBER` (default 32766 on
|
|
7
|
+
* modern builds) — each row binds 7 parameters (url + scheme + host +
|
|
8
|
+
* port + path + query_hash + fragment), so 500 rows = 3500 params.
|
|
9
|
+
*/
|
|
10
|
+
const INSERT_CHUNK_SIZE = 500;
|
|
11
|
+
/**
|
|
12
|
+
* Rows scanned per keyset-paginated `SELECT` chunk. One SELECT reads all
|
|
13
|
+
* URL columns for the source table's chunk simultaneously so the pages
|
|
14
|
+
* table is scanned exactly once per populate call, not N-times-once-
|
|
15
|
+
* per-URL-column — a per-column scan would multiply migration wall-clock
|
|
16
|
+
* by the count of URL-shaped columns.
|
|
17
|
+
*/
|
|
18
|
+
const READ_CHUNK_SIZE = 5000;
|
|
19
|
+
/**
|
|
20
|
+
* Source table + its URL-shaped columns. Each column is scanned in
|
|
21
|
+
* lock-step per row, then filtered through
|
|
22
|
+
* {@link routeDataUriAwayFromUrlRefs} so large data URIs skip `url_refs`
|
|
23
|
+
* and route to `blob_refs` instead (handled by
|
|
24
|
+
* {@link ./populate-blob-refs.ts}).
|
|
25
|
+
*
|
|
26
|
+
* The filter is applied to EVERY URL column (not just image columns):
|
|
27
|
+
* `og:image`, `icon_href`, `apple-touch-icon`, `twitter:image`, and even
|
|
28
|
+
* `og:url` / `canonical` can legally hold data URIs in the wild, and a
|
|
29
|
+
* >512-byte data URI in any of those must land in `blob_refs`, not
|
|
30
|
+
* pollute the URL dictionary.
|
|
31
|
+
*/
|
|
32
|
+
const URL_SOURCES = [
|
|
33
|
+
{
|
|
34
|
+
table: 'pages',
|
|
35
|
+
columns: [
|
|
36
|
+
'url',
|
|
37
|
+
'canonical',
|
|
38
|
+
'og_url',
|
|
39
|
+
'og_image',
|
|
40
|
+
'icon_href',
|
|
41
|
+
'appleTouchIcon_href',
|
|
42
|
+
'amphtml',
|
|
43
|
+
'manifest',
|
|
44
|
+
'twitter_image',
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
{ table: 'resources', columns: ['url'] },
|
|
48
|
+
{ table: 'images', columns: ['src', 'currentSrc'] },
|
|
49
|
+
];
|
|
50
|
+
/**
|
|
51
|
+
* Predicate applied to every URL column value: keep the value in the
|
|
52
|
+
* `url_refs` stream unless it is a data URI larger than
|
|
53
|
+
* {@link DATA_URI_URL_REFS_LIMIT}. Large data URIs route to `blob_refs`
|
|
54
|
+
* instead (via {@link ./populate-blob-refs.ts}).
|
|
55
|
+
* @param value - Raw column value (non-null, non-empty by contract).
|
|
56
|
+
* @returns `true` if the value belongs in `url_refs`.
|
|
57
|
+
*/
|
|
58
|
+
function routeDataUriAwayFromUrlRefs(value) {
|
|
59
|
+
if (!value.startsWith('data:')) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
return value.length <= DATA_URI_URL_REFS_LIMIT;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Populates `url_refs` from every URL-shaped column across `pages`,
|
|
66
|
+
* `resources`, and `images` (issue #191).
|
|
67
|
+
*
|
|
68
|
+
* Runs two passes per source table:
|
|
69
|
+
*
|
|
70
|
+
* 1. **Collect distinct URLs** into an in-process `Set<string>`, streaming
|
|
71
|
+
* rows from each source table by keyset pagination on `id`. All the
|
|
72
|
+
* table's URL columns are read in a single SELECT so the pages scan
|
|
73
|
+
* is O(rows), not O(rows × columns). Peak memory is bounded by the
|
|
74
|
+
* count of distinct URLs, not the row count.
|
|
75
|
+
* 2. **Bulk-insert** into `url_refs` in chunks of {@link INSERT_CHUNK_SIZE},
|
|
76
|
+
* with the decomposed columns (`scheme` / `host` / `port` / `path` /
|
|
77
|
+
* `query_hash` / `fragment`) derived in JS by {@link decomposeUrl}.
|
|
78
|
+
*
|
|
79
|
+
* `INSERT OR IGNORE` on `url_refs.url` makes the step idempotent —
|
|
80
|
+
* repeated invocations after partial failure only add new URLs.
|
|
81
|
+
* @param trx - Knex instance or transaction connected to the archive DB.
|
|
82
|
+
* @param onProgress - Optional sink for periodic progress lines (one per
|
|
83
|
+
* ~5% of each source table scanned); see {@link ../create-progress-reporter.ts}.
|
|
84
|
+
* @example
|
|
85
|
+
* await knex.transaction(async (trx) => {
|
|
86
|
+
* await populateUrlRefs(trx);
|
|
87
|
+
* });
|
|
88
|
+
*/
|
|
89
|
+
export async function populateUrlRefs(trx, onProgress) {
|
|
90
|
+
const seen = new Set();
|
|
91
|
+
for (const source of URL_SOURCES) {
|
|
92
|
+
const hasTable = await trx.schema.hasTable(source.table);
|
|
93
|
+
if (!hasTable) {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
const presentColumns = [];
|
|
97
|
+
for (const column of source.columns) {
|
|
98
|
+
if (await trx.schema.hasColumn(source.table, column)) {
|
|
99
|
+
presentColumns.push(column);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (presentColumns.length === 0) {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const countRows = await trx(source.table).count({ n: '*' });
|
|
106
|
+
const total = Number(countRows[0]?.n ?? 0);
|
|
107
|
+
const report = createProgressReporter(`url_refs (${source.table})`, total, onProgress);
|
|
108
|
+
let processed = 0;
|
|
109
|
+
let cursor = 0;
|
|
110
|
+
while (true) {
|
|
111
|
+
const rows = await trx(source.table)
|
|
112
|
+
.select('id', ...presentColumns)
|
|
113
|
+
.where('id', '>', cursor)
|
|
114
|
+
.orderBy('id', 'asc')
|
|
115
|
+
.limit(READ_CHUNK_SIZE);
|
|
116
|
+
if (rows.length === 0) {
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
cursor = rows.at(-1).id;
|
|
120
|
+
processed += rows.length;
|
|
121
|
+
report(processed);
|
|
122
|
+
for (const row of rows) {
|
|
123
|
+
for (const column of presentColumns) {
|
|
124
|
+
const value = row[column];
|
|
125
|
+
if (typeof value !== 'string' || value === '') {
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (!routeDataUriAwayFromUrlRefs(value)) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
seen.add(value);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (seen.size === 0) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const inserts = [];
|
|
140
|
+
for (const url of seen) {
|
|
141
|
+
const decomposed = decomposeUrl(url);
|
|
142
|
+
inserts.push({ url, ...decomposed });
|
|
143
|
+
}
|
|
144
|
+
for (let index = 0; index < inserts.length; index += INSERT_CHUNK_SIZE) {
|
|
145
|
+
const chunk = inserts.slice(index, index + INSERT_CHUNK_SIZE);
|
|
146
|
+
await trx('url_refs').insert(chunk).onConflict('url').ignore();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
/**
|
|
3
|
+
* Runs `SELECT count(?) FROM <table>` and returns the count as a plain
|
|
4
|
+
* JS number. Exists purely to keep spec files inside populate-ref-tables/ compliant
|
|
5
|
+
* with `unicorn/no-await-expression-member` — inlining
|
|
6
|
+
* `Number((await db(t).count(...))[0]!.n)` reads fine but violates the
|
|
7
|
+
* rule at every callsite.
|
|
8
|
+
* @param db - Knex instance (typically a spec-local in-memory DB).
|
|
9
|
+
* @param table - Table name.
|
|
10
|
+
* @param countColumn - Column to count; defaults to `'id'` because every
|
|
11
|
+
* populate-refs table except `header_set_entries` / `header_flags` uses
|
|
12
|
+
* that PK name. Pass `'header_set_id'` for the two exceptions.
|
|
13
|
+
* @returns Row count.
|
|
14
|
+
*/
|
|
15
|
+
export declare function countRows(db: Knex, table: string, countColumn?: string): Promise<number>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runs `SELECT count(?) FROM <table>` and returns the count as a plain
|
|
3
|
+
* JS number. Exists purely to keep spec files inside populate-ref-tables/ compliant
|
|
4
|
+
* with `unicorn/no-await-expression-member` — inlining
|
|
5
|
+
* `Number((await db(t).count(...))[0]!.n)` reads fine but violates the
|
|
6
|
+
* rule at every callsite.
|
|
7
|
+
* @param db - Knex instance (typically a spec-local in-memory DB).
|
|
8
|
+
* @param table - Table name.
|
|
9
|
+
* @param countColumn - Column to count; defaults to `'id'` because every
|
|
10
|
+
* populate-refs table except `header_set_entries` / `header_flags` uses
|
|
11
|
+
* that PK name. Pass `'header_set_id'` for the two exceptions.
|
|
12
|
+
* @returns Row count.
|
|
13
|
+
*/
|
|
14
|
+
export async function countRows(db, table, countColumn = 'id') {
|
|
15
|
+
const rows = await db(table).count({ n: countColumn });
|
|
16
|
+
return Number(rows[0].n);
|
|
17
|
+
}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain types for the 0.13 population step (issue #191). Every
|
|
3
|
+
* shared interface / type alias lives here per the repo-wide
|
|
4
|
+
* `型は types.ts に集約` rule; implementation modules export functions
|
|
5
|
+
* only.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Decomposed URL components that populate `url_refs.{scheme,host,port,path,
|
|
9
|
+
* query_hash,fragment}`. All slots are populated in a single pass over the
|
|
10
|
+
* `url` string so callers do not have to re-parse per column.
|
|
11
|
+
*/
|
|
12
|
+
export interface DecomposedUrl {
|
|
13
|
+
/**
|
|
14
|
+
* URL scheme without the trailing colon (`https`, `http`, `mailto`, ...).
|
|
15
|
+
* `null` for URLs that fail `new URL(...)` parsing.
|
|
16
|
+
*/
|
|
17
|
+
scheme: string | null;
|
|
18
|
+
/**
|
|
19
|
+
* Host lower-cased (`www.example.com`). `null` when the URL has no
|
|
20
|
+
* `authority` component (e.g. `mailto:`, `data:`, `javascript:`), and
|
|
21
|
+
* `null` on parse failure.
|
|
22
|
+
*/
|
|
23
|
+
host: string | null;
|
|
24
|
+
/**
|
|
25
|
+
* TCP port when explicit in the URL; `null` when the URL uses the
|
|
26
|
+
* scheme default (WHATWG URL normalises default ports away — we do NOT
|
|
27
|
+
* synthesise a default here because two rows differing only by explicit
|
|
28
|
+
* vs implicit `:443` should hash to the same URL, and `url_refs.url` is
|
|
29
|
+
* the natural key, not this column).
|
|
30
|
+
*/
|
|
31
|
+
port: number | null;
|
|
32
|
+
/**
|
|
33
|
+
* Path portion (`/foo/bar`). `null` when the URL has no path or the
|
|
34
|
+
* URL uses an opaque scheme whose "pathname" is really an in-band
|
|
35
|
+
* payload (`data:`, `blob:`, `javascript:`) — see
|
|
36
|
+
* {@link ./decompose-url.ts} for the opaque-scheme handling.
|
|
37
|
+
*/
|
|
38
|
+
path: string | null;
|
|
39
|
+
/**
|
|
40
|
+
* 32-byte content hash of the raw query string exactly as it appears in
|
|
41
|
+
* the URL (`?a=1&b=2` — the leading `?` is stripped before hashing).
|
|
42
|
+
* `null` when the URL has no query string, when the query string is
|
|
43
|
+
* empty, or on parse failure.
|
|
44
|
+
*
|
|
45
|
+
* Storing the raw query would defeat dedup on tracker URLs whose
|
|
46
|
+
* per-request query keys blow up dictionary size; the hash retains the
|
|
47
|
+
* same-URL-⇒-same-row property without the payload.
|
|
48
|
+
*/
|
|
49
|
+
query_hash: Buffer | null;
|
|
50
|
+
/**
|
|
51
|
+
* Fragment (`#section-2`) with the leading `#` stripped. `null` when
|
|
52
|
+
* the URL has no fragment or on parse failure.
|
|
53
|
+
*/
|
|
54
|
+
fragment: string | null;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Successful decode of a `data:` URI: the raw payload bytes.
|
|
58
|
+
*/
|
|
59
|
+
export interface DecodedDataUri {
|
|
60
|
+
/** Payload bytes after base64 or percent-decoding. */
|
|
61
|
+
bytes: Buffer;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* One header entry after decomposition — flattened out of the parsed JSON
|
|
65
|
+
* `Record<name, string | string[]>` so that:
|
|
66
|
+
*
|
|
67
|
+
* - Multiple values for the same name (e.g. two `Set-Cookie` lines) each
|
|
68
|
+
* get their own entry with a distinct `occurrence` ordinal starting at 1.
|
|
69
|
+
* - `isVolatile` is pre-computed once per entry (rather than re-looked-up
|
|
70
|
+
* at hash time) so both `stableHash` and the `header_set_entries`
|
|
71
|
+
* inserts see identical classification.
|
|
72
|
+
*/
|
|
73
|
+
export interface HeaderEntry {
|
|
74
|
+
/** Lower-cased header name; comparison and dedup keys always use this form. */
|
|
75
|
+
name: string;
|
|
76
|
+
/** Raw header value (each element of `string[]` inputs becomes one entry). */
|
|
77
|
+
value: string;
|
|
78
|
+
/**
|
|
79
|
+
* 1-based ordinal among entries sharing the same `name` within one
|
|
80
|
+
* response. Always `1` for single-value headers; ≥ 2 when a name
|
|
81
|
+
* repeats (e.g. multiple `Set-Cookie` lines).
|
|
82
|
+
*/
|
|
83
|
+
occurrence: number;
|
|
84
|
+
/** Pre-computed volatility. */
|
|
85
|
+
isVolatile: boolean;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Result of decomposing one raw `responseHeaders` JSON string into the
|
|
89
|
+
* shape required for `header_sets`, `header_set_entries`, and
|
|
90
|
+
* `header_flags` inserts. `null` results from the decompose helper
|
|
91
|
+
* indicate "no header set to insert" (null / `{}` / parse failure);
|
|
92
|
+
* callers write `header_set_id = null` to the referring row.
|
|
93
|
+
*/
|
|
94
|
+
export interface DecomposedHeaderSet {
|
|
95
|
+
/**
|
|
96
|
+
* 32-byte hash of the raw JSON string exactly as stored on the source
|
|
97
|
+
* row. Populates `header_sets.raw_json_hash` — a temporary column used
|
|
98
|
+
* by the 0.13 lookup to map an old `pages.responseHeaders` /
|
|
99
|
+
* `resources.responseHeaders` value back to its `header_sets.id`
|
|
100
|
+
* without any SQL function call.
|
|
101
|
+
*/
|
|
102
|
+
rawJsonHash: Buffer;
|
|
103
|
+
/**
|
|
104
|
+
* 32-byte hash of the sorted `name=value` pairs of **all** entries
|
|
105
|
+
* (stable + volatile). Populates `header_sets.raw_hash` — a UNIQUE
|
|
106
|
+
* column so a JS-side upsert can dedup on identical decoded sets.
|
|
107
|
+
*/
|
|
108
|
+
rawHash: Buffer;
|
|
109
|
+
/**
|
|
110
|
+
* 32-byte hash of the sorted `name=value` pairs of stable entries
|
|
111
|
+
* only. Populates `header_sets.stable_hash` — indexed so 0.13
|
|
112
|
+
* readers can answer "how many responses share this stable header
|
|
113
|
+
* profile" without scanning every entry.
|
|
114
|
+
*/
|
|
115
|
+
stableHash: Buffer;
|
|
116
|
+
/**
|
|
117
|
+
* 32-byte hash of the sorted `name=value` pairs of volatile entries
|
|
118
|
+
* only, or `null` when the set has no volatile entries. Populates
|
|
119
|
+
* `header_sets.volatile_hash`.
|
|
120
|
+
*/
|
|
121
|
+
volatileHash: Buffer | null;
|
|
122
|
+
/** Every decomposed entry, ordered by (name, occurrence). */
|
|
123
|
+
entries: readonly HeaderEntry[];
|
|
124
|
+
/** Total entry count — matches `header_sets.entry_count`. */
|
|
125
|
+
entryCount: number;
|
|
126
|
+
/**
|
|
127
|
+
* Number of stable entries — matches `header_sets.stable_entry_count`.
|
|
128
|
+
* `volatile_entry_count` is derived as `entry_count - stable_entry_count`
|
|
129
|
+
* and not stored separately.
|
|
130
|
+
*/
|
|
131
|
+
stableEntryCount: number;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Shape written into `header_flags` for one `header_set_id`. `has_*`
|
|
135
|
+
* columns are `INTEGER NOT NULL` (0/1) per the 0.13 DDL;
|
|
136
|
+
* `cache_policy` is nullable and holds a compact summary of the
|
|
137
|
+
* `Cache-Control` value (or `null` when absent).
|
|
138
|
+
*/
|
|
139
|
+
export interface HeaderFlagsRow {
|
|
140
|
+
/** `1` when at least one entry's name equals `content-security-policy`. */
|
|
141
|
+
has_csp: 0 | 1;
|
|
142
|
+
/** `1` when at least one entry's name equals `x-frame-options`. */
|
|
143
|
+
has_x_frame_options: 0 | 1;
|
|
144
|
+
/** `1` when at least one entry's name equals `x-content-type-options`. */
|
|
145
|
+
has_x_content_type_options: 0 | 1;
|
|
146
|
+
/** `1` when at least one entry's name equals `strict-transport-security`. */
|
|
147
|
+
has_hsts: 0 | 1;
|
|
148
|
+
/** `1` when at least one entry's name equals `referrer-policy`. */
|
|
149
|
+
has_referrer_policy: 0 | 1;
|
|
150
|
+
/** `1` when at least one entry's name equals `permissions-policy`. */
|
|
151
|
+
has_permissions_policy: 0 | 1;
|
|
152
|
+
/** `1` when at least one entry's name equals `set-cookie`. */
|
|
153
|
+
has_set_cookie: 0 | 1;
|
|
154
|
+
/**
|
|
155
|
+
* The `cache-control` value, verbatim, when present; `null` when
|
|
156
|
+
* absent. Multi-value `Cache-Control` headers are joined with `, ` so
|
|
157
|
+
* the summary captures every directive without losing per-occurrence
|
|
158
|
+
* context.
|
|
159
|
+
*/
|
|
160
|
+
cache_policy: string | null;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* In-process caches shared by every header-table upsert against one
|
|
164
|
+
* archive connection. The three id-maps resolve `header_name_refs.id` /
|
|
165
|
+
* `header_value_refs.id` / `header_sets.id` without hitting the DB once
|
|
166
|
+
* a value has been seen (or preloaded from existing rows).
|
|
167
|
+
*
|
|
168
|
+
* `setIdsProcessedThisRun` tracks the subset of `setIdByRawJsonHash` /
|
|
169
|
+
* `setIdByRawHash` that the current process has already written
|
|
170
|
+
* entries + flags for. A preloaded id from a prior run is present in the
|
|
171
|
+
* id caches but NOT in this set — so the entries + flags inserts still
|
|
172
|
+
* run once (safe under `INSERT OR IGNORE`) to repair any missing rows
|
|
173
|
+
* left by a crashed writer. Once entries + flags for a given setId have
|
|
174
|
+
* been written this run, the shortcut skips redundant no-op inserts.
|
|
175
|
+
*/
|
|
176
|
+
export interface HeaderTableCaches {
|
|
177
|
+
/** `lower-cased name → header_name_refs.id`. */
|
|
178
|
+
readonly nameIdCache: Map<string, number>;
|
|
179
|
+
/** `hexHash|value → header_value_refs.id`. */
|
|
180
|
+
readonly valueIdCache: Map<string, number>;
|
|
181
|
+
/** `hex(raw_json_hash) → header_sets.id`. */
|
|
182
|
+
readonly setIdByRawJsonHash: Map<string, number>;
|
|
183
|
+
/** `hex(raw_hash) → header_sets.id`. */
|
|
184
|
+
readonly setIdByRawHash: Map<string, number>;
|
|
185
|
+
/** `header_sets.id` values already fully processed by this process. */
|
|
186
|
+
readonly setIdsProcessedThisRun: Set<number>;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Category label attached to each content-type rule. Mirrors the union
|
|
190
|
+
* `ContentTypeCategory` in `@nitpicker/query/src/types.ts` — kept as a
|
|
191
|
+
* plain string literal here so `@nitpicker/archive`'s 0.13 step
|
|
192
|
+
* does not need to depend on `@nitpicker/query` (which itself depends
|
|
193
|
+
* on this package). If the two copies drift, `classify-content-type.spec.ts`
|
|
194
|
+
* here and `content-type-rules.spec.ts` on the query side will disagree
|
|
195
|
+
* on the same fixture.
|
|
196
|
+
*/
|
|
197
|
+
export type ContentTypeCategory = 'html' | 'pdf' | 'csv' | 'word' | 'excel' | 'powerpoint' | 'image' | 'audio' | 'video' | 'font' | 'css' | 'javascript' | 'json' | 'xml' | 'archive' | 'text' | 'other' | 'unknown';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { DecomposedHeaderSet, HeaderTableCaches } from './types.js';
|
|
2
|
+
import type { Knex } from 'knex';
|
|
3
|
+
/**
|
|
4
|
+
* Upserts one decomposed header set and its entries + flags, returning
|
|
5
|
+
* the `header_sets.id`. Shared by the bulk archive populate
|
|
6
|
+
* ({@link ./populate-header-tables.ts}) and the crawler's per-response
|
|
7
|
+
* write path, so both produce byte-identical header rows for the same
|
|
8
|
+
* raw `responseHeaders` value.
|
|
9
|
+
*
|
|
10
|
+
* Set-id resolution order:
|
|
11
|
+
*
|
|
12
|
+
* 1. `raw_json_hash` cache — same JSON key ordering as a previous row.
|
|
13
|
+
* 2. `raw_hash` cache — same sorted-entries identity, different JSON key
|
|
14
|
+
* ordering. This branch links the new `raw_json_hash` to the existing
|
|
15
|
+
* setId in the in-process map so subsequent same-JSON hits fast-path.
|
|
16
|
+
* 3. Otherwise INSERT a new `header_sets` row.
|
|
17
|
+
*
|
|
18
|
+
* Entries + flags are inserted once per `setId` per process (guarded by
|
|
19
|
+
* `setIdsProcessedThisRun`); already-inserted rows short-circuit
|
|
20
|
+
* cheaply, and preloaded-but-unprocessed setIds (partial prior run) get
|
|
21
|
+
* their entries / flags repaired via `INSERT OR IGNORE`.
|
|
22
|
+
* @param trx - Knex instance or transaction connected to the archive DB.
|
|
23
|
+
* @param decomposed - Result of `decomposeHeaderSet` (never `null` — the
|
|
24
|
+
* caller short-circuits null decompositions to `header_set_id = null`).
|
|
25
|
+
* @param caches - The in-process caches, mutated in place. Create via
|
|
26
|
+
* {@link ./create-header-table-caches.ts}.
|
|
27
|
+
* @returns The `header_sets.id` for this set.
|
|
28
|
+
* @example
|
|
29
|
+
* const decomposed = decomposeHeaderSet(rawJson);
|
|
30
|
+
* if (decomposed !== null) {
|
|
31
|
+
* const setId = await upsertOneHeaderSet(knex, decomposed, caches);
|
|
32
|
+
* }
|
|
33
|
+
*/
|
|
34
|
+
export declare function upsertOneHeaderSet(trx: Knex, decomposed: DecomposedHeaderSet, caches: HeaderTableCaches): Promise<number>;
|