@nitpicker/archive 0.0.0 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +191 -0
- package/README.md +106 -0
- package/lib/apply-connection-pragmas.d.ts +18 -0
- package/lib/apply-connection-pragmas.js +40 -0
- package/lib/archive-accessor.d.ts +265 -0
- package/lib/archive-accessor.js +477 -0
- package/lib/archive-lock.d.ts +45 -0
- package/lib/archive-lock.js +154 -0
- package/lib/archive.d.ts +736 -0
- package/lib/archive.js +1056 -0
- package/lib/body-hash/compute-body-hash.d.ts +32 -0
- package/lib/body-hash/compute-body-hash.js +35 -0
- package/lib/cache/clear-archive-cache-entry.d.ts +18 -0
- package/lib/cache/clear-archive-cache-entry.js +24 -0
- package/lib/cache/clear-archive-cache-root.d.ts +26 -0
- package/lib/cache/clear-archive-cache-root.js +32 -0
- package/lib/cache/compute-archive-cache-key.d.ts +39 -0
- package/lib/cache/compute-archive-cache-key.js +95 -0
- package/lib/cache/extract-archive-to-cache.d.ts +57 -0
- package/lib/cache/extract-archive-to-cache.js +326 -0
- package/lib/cache/get-archive-cache-root.d.ts +20 -0
- package/lib/cache/get-archive-cache-root.js +53 -0
- package/lib/cache/is-archive-cache-disabled.d.ts +24 -0
- package/lib/cache/is-archive-cache-disabled.js +34 -0
- package/lib/cache/list-archive-cache-entries.d.ts +23 -0
- package/lib/cache/list-archive-cache-entries.js +130 -0
- package/lib/cache/path-exists.d.ts +9 -0
- package/lib/cache/path-exists.js +18 -0
- package/lib/cache/resolve-archive-cache-dir.d.ts +26 -0
- package/lib/cache/resolve-archive-cache-dir.js +32 -0
- package/lib/cache/types.d.ts +33 -0
- package/lib/cache/types.js +1 -0
- package/lib/content-type/is-html-content-type.d.ts +17 -0
- package/lib/content-type/is-html-content-type.js +19 -0
- package/lib/content-type/normalize-content-type.d.ts +14 -0
- package/lib/content-type/normalize-content-type.js +20 -0
- package/lib/create-adjunct-tables.d.ts +66 -0
- package/lib/create-adjunct-tables.js +510 -0
- package/lib/create-entity-tables.d.ts +191 -0
- package/lib/create-entity-tables.js +387 -0
- package/lib/create-progress-reporter.d.ts +30 -0
- package/lib/create-progress-reporter.js +38 -0
- package/lib/create-ref-tables.d.ts +35 -0
- package/lib/create-ref-tables.js +185 -0
- package/lib/create-template-tables.d.ts +28 -0
- package/lib/create-template-tables.js +92 -0
- package/lib/database.d.ts +549 -0
- package/lib/database.js +804 -0
- package/lib/db-ops/_shared/clear-write-ref-caches.d.ts +27 -0
- package/lib/db-ops/_shared/clear-write-ref-caches.js +35 -0
- package/lib/db-ops/_shared/compress-payload.d.ts +26 -0
- package/lib/db-ops/_shared/compress-payload.js +30 -0
- package/lib/db-ops/_shared/create-write-ref-caches.d.ts +17 -0
- package/lib/db-ops/_shared/create-write-ref-caches.js +27 -0
- package/lib/db-ops/_shared/decode-json-ref.d.ts +17 -0
- package/lib/db-ops/_shared/decode-json-ref.js +31 -0
- package/lib/db-ops/_shared/keyset-paginate-by-id.d.ts +49 -0
- package/lib/db-ops/_shared/keyset-paginate-by-id.js +69 -0
- package/lib/db-ops/_shared/load-response-headers-by-set-ids.d.ts +20 -0
- package/lib/db-ops/_shared/load-response-headers-by-set-ids.js +53 -0
- package/lib/db-ops/_shared/resolve-content-item-id.d.ts +62 -0
- package/lib/db-ops/_shared/resolve-content-item-id.js +143 -0
- package/lib/db-ops/_shared/resolve-url-or-blob.d.ts +23 -0
- package/lib/db-ops/_shared/resolve-url-or-blob.js +29 -0
- package/lib/db-ops/_shared/retry-setting.d.ts +16 -0
- package/lib/db-ops/_shared/retry-setting.js +18 -0
- package/lib/db-ops/_shared/safe-parse-json.d.ts +11 -0
- package/lib/db-ops/_shared/safe-parse-json.js +18 -0
- package/lib/db-ops/_shared/types.d.ts +94 -0
- package/lib/db-ops/_shared/types.js +1 -0
- package/lib/db-ops/_shared/upsert-blob-ref.d.ts +25 -0
- package/lib/db-ops/_shared/upsert-blob-ref.js +48 -0
- package/lib/db-ops/_shared/upsert-content-type-ref.d.ts +30 -0
- package/lib/db-ops/_shared/upsert-content-type-ref.js +45 -0
- package/lib/db-ops/_shared/upsert-json-ref.d.ts +22 -0
- package/lib/db-ops/_shared/upsert-json-ref.js +41 -0
- package/lib/db-ops/_shared/upsert-response-headers.d.ts +35 -0
- package/lib/db-ops/_shared/upsert-response-headers.js +49 -0
- package/lib/db-ops/_shared/upsert-url-ref.d.ts +39 -0
- package/lib/db-ops/_shared/upsert-url-ref.js +62 -0
- package/lib/db-ops/anchors/get-anchors-on-page.d.ts +10 -0
- package/lib/db-ops/anchors/get-anchors-on-page.js +21 -0
- package/lib/db-ops/config/get-base-url.d.ts +8 -0
- package/lib/db-ops/config/get-base-url.js +14 -0
- package/lib/db-ops/config/get-config.d.ts +10 -0
- package/lib/db-ops/config/get-config.js +29 -0
- package/lib/db-ops/config/get-created-cwd.d.ts +11 -0
- package/lib/db-ops/config/get-created-cwd.js +13 -0
- package/lib/db-ops/config/get-name.d.ts +8 -0
- package/lib/db-ops/config/get-name.js +14 -0
- package/lib/db-ops/config/info-column-allowlist.d.ts +7 -0
- package/lib/db-ops/config/info-column-allowlist.js +29 -0
- package/lib/db-ops/config/info-json-columns.d.ts +5 -0
- package/lib/db-ops/config/info-json-columns.js +11 -0
- package/lib/db-ops/config/set-config.d.ts +12 -0
- package/lib/db-ops/config/set-config.js +21 -0
- package/lib/db-ops/config/update-config.d.ts +17 -0
- package/lib/db-ops/config/update-config.js +36 -0
- package/lib/db-ops/console-logs/compute-console-log-hash.d.ts +19 -0
- package/lib/db-ops/console-logs/compute-console-log-hash.js +30 -0
- package/lib/db-ops/console-logs/replace-console-logs.d.ts +34 -0
- package/lib/db-ops/console-logs/replace-console-logs.js +123 -0
- package/lib/db-ops/console-logs/stringify-console-log-args.d.ts +16 -0
- package/lib/db-ops/console-logs/stringify-console-log-args.js +26 -0
- package/lib/db-ops/console-logs/types.d.ts +38 -0
- package/lib/db-ops/console-logs/types.js +1 -0
- package/lib/db-ops/console-logs/upsert-console-log-item.d.ts +29 -0
- package/lib/db-ops/console-logs/upsert-console-log-item.js +52 -0
- package/lib/db-ops/dedupe-cap/accumulate-dedupe-cap-rejected-count.d.ts +18 -0
- package/lib/db-ops/dedupe-cap/accumulate-dedupe-cap-rejected-count.js +23 -0
- package/lib/db-ops/dedupe-cap/finalize-dedupe-cap-event.d.ts +12 -0
- package/lib/db-ops/dedupe-cap/finalize-dedupe-cap-event.js +15 -0
- package/lib/db-ops/dedupe-cap/insert-dedupe-cap-event.d.ts +14 -0
- package/lib/db-ops/dedupe-cap/insert-dedupe-cap-event.js +30 -0
- package/lib/db-ops/dedupe-cap/list-dedupe-cap-observations.d.ts +57 -0
- package/lib/db-ops/dedupe-cap/list-dedupe-cap-observations.js +87 -0
- package/lib/db-ops/dedupe-cap/list-dedupe-cap-shape-keys.d.ts +21 -0
- package/lib/db-ops/dedupe-cap/list-dedupe-cap-shape-keys.js +27 -0
- package/lib/db-ops/errors/insert-crawl-error.d.ts +15 -0
- package/lib/db-ops/errors/insert-crawl-error.js +21 -0
- package/lib/db-ops/errors/insert-page-error.d.ts +21 -0
- package/lib/db-ops/errors/insert-page-error.js +30 -0
- package/lib/db-ops/errors/list-dns-burned-host-candidates.d.ts +33 -0
- package/lib/db-ops/errors/list-dns-burned-host-candidates.js +158 -0
- package/lib/db-ops/html/read-page-html-blob.d.ts +17 -0
- package/lib/db-ops/html/read-page-html-blob.js +20 -0
- package/lib/db-ops/lifecycle/checkpoint.d.ts +8 -0
- package/lib/db-ops/lifecycle/checkpoint.js +9 -0
- package/lib/db-ops/lifecycle/destroy.d.ts +6 -0
- package/lib/db-ops/lifecycle/destroy.js +7 -0
- package/lib/db-ops/lifecycle/init.d.ts +58 -0
- package/lib/db-ops/lifecycle/init.js +122 -0
- package/lib/db-ops/list-reconcile/record-list-reconcile-run.d.ts +22 -0
- package/lib/db-ops/list-reconcile/record-list-reconcile-run.js +41 -0
- package/lib/db-ops/meta/get-audios-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-audios-of-page.js +15 -0
- package/lib/db-ops/meta/get-buttons-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-buttons-of-page.js +15 -0
- package/lib/db-ops/meta/get-canvases-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-canvases-of-page.js +15 -0
- package/lib/db-ops/meta/get-custom-elements-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-custom-elements-of-page.js +15 -0
- package/lib/db-ops/meta/get-headings-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-headings-of-page.js +15 -0
- package/lib/db-ops/meta/get-iframes-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-iframes-of-page.js +15 -0
- package/lib/db-ops/meta/get-jsonld-of-page.d.ts +13 -0
- package/lib/db-ops/meta/get-jsonld-of-page.js +27 -0
- package/lib/db-ops/meta/get-main-content-images-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-main-content-images-of-page.js +15 -0
- package/lib/db-ops/meta/get-main-content-tables-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-main-content-tables-of-page.js +15 -0
- package/lib/db-ops/meta/get-page-technologies-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-page-technologies-of-page.js +15 -0
- package/lib/db-ops/meta/get-technology-signals-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-technology-signals-of-page.js +15 -0
- package/lib/db-ops/meta/get-videos-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-videos-of-page.js +15 -0
- package/lib/db-ops/outages/close-network-outage.d.ts +12 -0
- package/lib/db-ops/outages/close-network-outage.js +15 -0
- package/lib/db-ops/outages/close-stale-open-network-outages.d.ts +26 -0
- package/lib/db-ops/outages/close-stale-open-network-outages.js +42 -0
- package/lib/db-ops/outages/compute-outage-clamp-timestamp.d.ts +26 -0
- package/lib/db-ops/outages/compute-outage-clamp-timestamp.js +31 -0
- package/lib/db-ops/outages/insert-network-outage.d.ts +14 -0
- package/lib/db-ops/outages/insert-network-outage.js +29 -0
- package/lib/db-ops/outages/list-network-outages.d.ts +28 -0
- package/lib/db-ops/outages/list-network-outages.js +42 -0
- package/lib/db-ops/pages/order/set-url-order.d.ts +13 -0
- package/lib/db-ops/pages/order/set-url-order.js +38 -0
- package/lib/db-ops/pages/read/build-page-query.d.ts +18 -0
- package/lib/db-ops/pages/read/build-page-query.js +40 -0
- package/lib/db-ops/pages/read/get-crawling-state.d.ts +117 -0
- package/lib/db-ops/pages/read/get-crawling-state.js +161 -0
- package/lib/db-ops/pages/read/get-existing-page-urls.d.ts +15 -0
- package/lib/db-ops/pages/read/get-existing-page-urls.js +30 -0
- package/lib/db-ops/pages/read/get-page-count.d.ts +12 -0
- package/lib/db-ops/pages/read/get-page-count.js +21 -0
- package/lib/db-ops/pages/read/get-page-source-by-url.d.ts +24 -0
- package/lib/db-ops/pages/read/get-page-source-by-url.js +28 -0
- package/lib/db-ops/pages/read/get-pages-with-rels.d.ts +38 -0
- package/lib/db-ops/pages/read/get-pages-with-rels.js +107 -0
- package/lib/db-ops/pages/read/get-pages.d.ts +11 -0
- package/lib/db-ops/pages/read/get-pages.js +51 -0
- package/lib/db-ops/pages/read/get-scraped-html-page-count.d.ts +18 -0
- package/lib/db-ops/pages/read/get-scraped-html-page-count.js +25 -0
- package/lib/db-ops/pages/read/reconstruct-page-rows.d.ts +31 -0
- package/lib/db-ops/pages/read/reconstruct-page-rows.js +32 -0
- package/lib/db-ops/pages/reset/clear-page-derived-rows.d.ts +20 -0
- package/lib/db-ops/pages/reset/clear-page-derived-rows.js +37 -0
- package/lib/db-ops/pages/reset/repromote-external-pages.d.ts +30 -0
- package/lib/db-ops/pages/reset/repromote-external-pages.js +91 -0
- package/lib/db-ops/pages/reset/reset-failed-pages.d.ts +88 -0
- package/lib/db-ops/pages/reset/reset-failed-pages.js +216 -0
- package/lib/db-ops/pages/reset/reset-pages-by-urls.d.ts +80 -0
- package/lib/db-ops/pages/reset/reset-pages-by-urls.js +151 -0
- package/lib/db-ops/pages/reset/retryable-image-scan-codes.d.ts +24 -0
- package/lib/db-ops/pages/reset/retryable-image-scan-codes.js +24 -0
- package/lib/db-ops/pages/write/insert-audios.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-audios.js +25 -0
- package/lib/db-ops/pages/write/insert-buttons.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-buttons.js +29 -0
- package/lib/db-ops/pages/write/insert-canvases.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-canvases.js +26 -0
- package/lib/db-ops/pages/write/insert-custom-elements.d.ts +27 -0
- package/lib/db-ops/pages/write/insert-custom-elements.js +40 -0
- package/lib/db-ops/pages/write/insert-headings.d.ts +15 -0
- package/lib/db-ops/pages/write/insert-headings.js +27 -0
- package/lib/db-ops/pages/write/insert-iframes.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-iframes.js +28 -0
- package/lib/db-ops/pages/write/insert-inventory-content-items.d.ts +38 -0
- package/lib/db-ops/pages/write/insert-inventory-content-items.js +60 -0
- package/lib/db-ops/pages/write/insert-inventory-seeds.d.ts +36 -0
- package/lib/db-ops/pages/write/insert-inventory-seeds.js +48 -0
- package/lib/db-ops/pages/write/insert-inventory-skipped-pages.d.ts +42 -0
- package/lib/db-ops/pages/write/insert-inventory-skipped-pages.js +56 -0
- package/lib/db-ops/pages/write/insert-jsonld.d.ts +17 -0
- package/lib/db-ops/pages/write/insert-jsonld.js +49 -0
- package/lib/db-ops/pages/write/insert-main-content-images.d.ts +20 -0
- package/lib/db-ops/pages/write/insert-main-content-images.js +32 -0
- package/lib/db-ops/pages/write/insert-main-content-tables.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-main-content-tables.js +29 -0
- package/lib/db-ops/pages/write/insert-page.d.ts +56 -0
- package/lib/db-ops/pages/write/insert-page.js +259 -0
- package/lib/db-ops/pages/write/insert-technologies.d.ts +25 -0
- package/lib/db-ops/pages/write/insert-technologies.js +45 -0
- package/lib/db-ops/pages/write/insert-videos.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-videos.js +28 -0
- package/lib/db-ops/pages/write/link-redirect-sources.d.ts +42 -0
- package/lib/db-ops/pages/write/link-redirect-sources.js +101 -0
- package/lib/db-ops/pages/write/record-redirect.d.ts +35 -0
- package/lib/db-ops/pages/write/record-redirect.js +100 -0
- package/lib/db-ops/pages/write/set-skipped-page.d.ts +13 -0
- package/lib/db-ops/pages/write/set-skipped-page.js +24 -0
- package/lib/db-ops/pages/write/update-page.d.ts +40 -0
- package/lib/db-ops/pages/write/update-page.js +419 -0
- package/lib/db-ops/pages/write/write-page-html-blob.d.ts +19 -0
- package/lib/db-ops/pages/write/write-page-html-blob.js +41 -0
- package/lib/db-ops/referrers/get-redirects-for-pages.d.ts +9 -0
- package/lib/db-ops/referrers/get-redirects-for-pages.js +15 -0
- package/lib/db-ops/referrers/get-referrers-of-page.d.ts +17 -0
- package/lib/db-ops/referrers/get-referrers-of-page.js +32 -0
- package/lib/db-ops/referrers/get-referrers-of-resource.d.ts +8 -0
- package/lib/db-ops/referrers/get-referrers-of-resource.js +15 -0
- package/lib/db-ops/resources/build-resource-query.d.ts +25 -0
- package/lib/db-ops/resources/build-resource-query.js +29 -0
- package/lib/db-ops/resources/get-existing-resource-urls.d.ts +9 -0
- package/lib/db-ops/resources/get-existing-resource-urls.js +24 -0
- package/lib/db-ops/resources/get-resource-by-url.d.ts +13 -0
- package/lib/db-ops/resources/get-resource-by-url.js +22 -0
- package/lib/db-ops/resources/get-resource-url-list.d.ts +17 -0
- package/lib/db-ops/resources/get-resource-url-list.js +26 -0
- package/lib/db-ops/resources/get-resources.d.ts +8 -0
- package/lib/db-ops/resources/get-resources.js +11 -0
- package/lib/db-ops/resources/insert-inventory-resources.d.ts +24 -0
- package/lib/db-ops/resources/insert-inventory-resources.js +64 -0
- package/lib/db-ops/resources/insert-resource-referrers.d.ts +15 -0
- package/lib/db-ops/resources/insert-resource-referrers.js +54 -0
- package/lib/db-ops/resources/insert-resource.d.ts +34 -0
- package/lib/db-ops/resources/insert-resource.js +73 -0
- package/lib/db-ops/resources/reconstruct-resource-rows.d.ts +26 -0
- package/lib/db-ops/resources/reconstruct-resource-rows.js +30 -0
- package/lib/db-ops/templates/assign-template-labels.d.ts +60 -0
- package/lib/db-ops/templates/assign-template-labels.js +187 -0
- package/lib/db-ops/templates/replace-page-templates.d.ts +44 -0
- package/lib/db-ops/templates/replace-page-templates.js +174 -0
- package/lib/db-ops/templates/serialize-template-cluster-reason.d.ts +16 -0
- package/lib/db-ops/templates/serialize-template-cluster-reason.js +17 -0
- package/lib/db-ops/templates/types.d.ts +103 -0
- package/lib/db-ops/templates/types.js +1 -0
- package/lib/debug.d.ts +8 -0
- package/lib/debug.js +9 -0
- package/lib/decode-html-blob.d.ts +20 -0
- package/lib/decode-html-blob.js +23 -0
- package/lib/decode-page-html-blob-bytes.d.ts +25 -0
- package/lib/decode-page-html-blob-bytes.js +29 -0
- package/lib/decode-stored-blob-bytes.d.ts +25 -0
- package/lib/decode-stored-blob-bytes.js +47 -0
- package/lib/derive-lineage-from-parent.d.ts +37 -0
- package/lib/derive-lineage-from-parent.js +42 -0
- package/lib/drop-legacy-tables.d.ts +45 -0
- package/lib/drop-legacy-tables.js +56 -0
- package/lib/error-kind/classify-error-kind.d.ts +20 -0
- package/lib/error-kind/classify-error-kind.js +136 -0
- package/lib/error-kind/network-related-error-kinds.d.ts +23 -0
- package/lib/error-kind/network-related-error-kinds.js +28 -0
- package/lib/error-kind/permanent-error-kinds.d.ts +48 -0
- package/lib/error-kind/permanent-error-kinds.js +54 -0
- package/lib/error-kind/types.d.ts +54 -0
- package/lib/error-kind/types.js +1 -0
- package/lib/filesystem/append-text.d.ts +9 -0
- package/lib/filesystem/append-text.js +14 -0
- package/lib/filesystem/copy-dir-sync.d.ts +6 -0
- package/lib/filesystem/copy-dir-sync.js +9 -0
- package/lib/filesystem/copy-dir.d.ts +7 -0
- package/lib/filesystem/copy-dir.js +13 -0
- package/lib/filesystem/copy-file-with-progress.d.ts +20 -0
- package/lib/filesystem/copy-file-with-progress.js +34 -0
- package/lib/filesystem/exists.d.ts +6 -0
- package/lib/filesystem/exists.js +9 -0
- package/lib/filesystem/get-file-list.d.ts +8 -0
- package/lib/filesystem/get-file-list.js +12 -0
- package/lib/filesystem/is-dir.d.ts +6 -0
- package/lib/filesystem/is-dir.js +10 -0
- package/lib/filesystem/mkdir.d.ts +8 -0
- package/lib/filesystem/mkdir.js +15 -0
- package/lib/filesystem/output-binary.d.ts +12 -0
- package/lib/filesystem/output-binary.js +17 -0
- package/lib/filesystem/output-json.d.ts +9 -0
- package/lib/filesystem/output-json.js +14 -0
- package/lib/filesystem/output-text.d.ts +11 -0
- package/lib/filesystem/output-text.js +32 -0
- package/lib/filesystem/parse-pax-path.d.ts +18 -0
- package/lib/filesystem/parse-pax-path.js +47 -0
- package/lib/filesystem/parse-tar-size-field.d.ts +13 -0
- package/lib/filesystem/parse-tar-size-field.js +40 -0
- package/lib/filesystem/peek-tar-top-dir.d.ts +35 -0
- package/lib/filesystem/peek-tar-top-dir.js +215 -0
- package/lib/filesystem/read-json.d.ts +7 -0
- package/lib/filesystem/read-json.js +11 -0
- package/lib/filesystem/read-text.d.ts +6 -0
- package/lib/filesystem/read-text.js +10 -0
- package/lib/filesystem/readline.d.ts +11 -0
- package/lib/filesystem/readline.js +26 -0
- package/lib/filesystem/remove.d.ts +5 -0
- package/lib/filesystem/remove.js +10 -0
- package/lib/filesystem/rename.d.ts +16 -0
- package/lib/filesystem/rename.js +48 -0
- package/lib/filesystem/tar.d.ts +23 -0
- package/lib/filesystem/tar.js +78 -0
- package/lib/filesystem/untar.d.ts +33 -0
- package/lib/filesystem/untar.js +84 -0
- package/lib/get-failed-page-messages.d.ts +56 -0
- package/lib/get-failed-page-messages.js +146 -0
- package/lib/get-json.d.ts +10 -0
- package/lib/get-json.js +25 -0
- package/lib/html-snapshot/match-selector-html.d.ts +25 -0
- package/lib/html-snapshot/match-selector-html.js +28 -0
- package/lib/html-snapshot/match-selector-snapshots.d.ts +33 -0
- package/lib/html-snapshot/match-selector-snapshots.js +33 -0
- package/lib/html-snapshot/search-html-document.d.ts +29 -0
- package/lib/html-snapshot/search-html-document.js +27 -0
- package/lib/html-snapshot/search-html-snapshots.d.ts +36 -0
- package/lib/html-snapshot/search-html-snapshots.js +35 -0
- package/lib/html-snapshot/types.d.ts +111 -0
- package/lib/html-snapshot/types.js +7 -0
- package/lib/html-snapshot/validate-search-pattern.d.ts +15 -0
- package/lib/html-snapshot/validate-search-pattern.js +17 -0
- package/lib/init-schema.d.ts +48 -0
- package/lib/init-schema.js +124 -0
- package/lib/is-inventory-source.d.ts +21 -0
- package/lib/is-inventory-source.js +22 -0
- package/lib/is-within-outage-window.d.ts +49 -0
- package/lib/is-within-outage-window.js +33 -0
- package/lib/isolated-cluster/create-isolated-cluster-run.d.ts +24 -0
- package/lib/isolated-cluster/create-isolated-cluster-run.js +26 -0
- package/lib/libsql-dialect.d.ts +115 -0
- package/lib/libsql-dialect.js +116 -0
- package/lib/limited-page-ids.d.ts +9 -0
- package/lib/limited-page-ids.js +18 -0
- package/lib/meta/assert-compatible-version.d.ts +60 -0
- package/lib/meta/assert-compatible-version.js +93 -0
- package/lib/meta/classify-jsonld-type.d.ts +23 -0
- package/lib/meta/classify-jsonld-type.js +43 -0
- package/lib/meta/compare-semver.d.ts +23 -0
- package/lib/meta/compare-semver.js +51 -0
- package/lib/meta/compute-main-contents-denormalized.d.ts +41 -0
- package/lib/meta/compute-main-contents-denormalized.js +88 -0
- package/lib/meta/compute-page-denormalized.d.ts +20 -0
- package/lib/meta/compute-page-denormalized.js +35 -0
- package/lib/meta/derive-flat-from-meta.d.ts +34 -0
- package/lib/meta/derive-flat-from-meta.js +158 -0
- package/lib/meta/derive-meta-extras.d.ts +20 -0
- package/lib/meta/derive-meta-extras.js +23 -0
- package/lib/meta/extract-tags-for-archive.d.ts +17 -0
- package/lib/meta/extract-tags-for-archive.js +36 -0
- package/lib/meta/parse-main-content-class-list.d.ts +19 -0
- package/lib/meta/parse-main-content-class-list.js +34 -0
- package/lib/meta/summarize-jsonld.d.ts +17 -0
- package/lib/meta/summarize-jsonld.js +29 -0
- package/lib/meta/technologies/combine-technology-confidence.d.ts +46 -0
- package/lib/meta/technologies/combine-technology-confidence.js +93 -0
- package/lib/meta/technologies/convert-legacy-page-tags-to-inserts.d.ts +45 -0
- package/lib/meta/technologies/convert-legacy-page-tags-to-inserts.js +53 -0
- package/lib/meta/technologies/convert-tag-row-to-wappalyzer-signal.d.ts +33 -0
- package/lib/meta/technologies/convert-tag-row-to-wappalyzer-signal.js +46 -0
- package/lib/meta/technologies/extract-technologies-for-archive.d.ts +33 -0
- package/lib/meta/technologies/extract-technologies-for-archive.js +30 -0
- package/lib/meta/technologies/match-js-license-comment-signal.d.ts +21 -0
- package/lib/meta/technologies/match-js-license-comment-signal.js +23 -0
- package/lib/meta/technologies/match-structural-technology-signals.d.ts +26 -0
- package/lib/meta/technologies/match-structural-technology-signals.js +48 -0
- package/lib/meta/technologies/normalize-wappalyzer-entries.d.ts +25 -0
- package/lib/meta/technologies/normalize-wappalyzer-entries.js +35 -0
- package/lib/meta/technologies/technology-signal-definitions.d.ts +44 -0
- package/lib/meta/technologies/technology-signal-definitions.js +60 -0
- package/lib/meta/technologies/types.d.ts +70 -0
- package/lib/meta/technologies/types.js +13 -0
- package/lib/meta/types.d.ts +1490 -0
- package/lib/meta/types.js +65 -0
- package/lib/migrate-content-items-alias-of-id.d.ts +52 -0
- package/lib/migrate-content-items-alias-of-id.js +69 -0
- package/lib/migrate-content-items-dedupe-cap-event-id.d.ts +46 -0
- package/lib/migrate-content-items-dedupe-cap-event-id.js +62 -0
- package/lib/migrate-content-items-is-metadata-only.d.ts +44 -0
- package/lib/migrate-content-items-is-metadata-only.js +60 -0
- package/lib/migrate-entity-tables.d.ts +55 -0
- package/lib/migrate-entity-tables.js +66 -0
- package/lib/migrate-info-created-cwd.d.ts +17 -0
- package/lib/migrate-info-created-cwd.js +36 -0
- package/lib/migrate-info-main-content-selector.d.ts +16 -0
- package/lib/migrate-info-main-content-selector.js +35 -0
- package/lib/migrate-info-request-header-names.d.ts +16 -0
- package/lib/migrate-info-request-header-names.js +35 -0
- package/lib/migrate-info-roots.d.ts +20 -0
- package/lib/migrate-info-roots.js +52 -0
- package/lib/migrate-inventory-runs-to-list-reconcile-runs.d.ts +34 -0
- package/lib/migrate-inventory-runs-to-list-reconcile-runs.js +51 -0
- package/lib/migrate-list-reconcile-runs-exclude-skipped.d.ts +25 -0
- package/lib/migrate-list-reconcile-runs-exclude-skipped.js +44 -0
- package/lib/migrate-list-reconcile-runs-invalid-skipped.d.ts +16 -0
- package/lib/migrate-list-reconcile-runs-invalid-skipped.js +35 -0
- package/lib/migrate-main-contents-columns.d.ts +26 -0
- package/lib/migrate-main-contents-columns.js +61 -0
- package/lib/migrate-page-meta-body-hash.d.ts +44 -0
- package/lib/migrate-page-meta-body-hash.js +63 -0
- package/lib/migrate-page-meta-console-error-count.d.ts +27 -0
- package/lib/migrate-page-meta-console-error-count.js +45 -0
- package/lib/migrate-page-meta-custom-element-count.d.ts +33 -0
- package/lib/migrate-page-meta-custom-element-count.js +51 -0
- package/lib/migrate-page-meta-image-scan.d.ts +27 -0
- package/lib/migrate-page-meta-image-scan.js +52 -0
- package/lib/migrate-page-tags-to-page-technologies.d.ts +39 -0
- package/lib/migrate-page-tags-to-page-technologies.js +79 -0
- package/lib/migrate-ref-tables.d.ts +25 -0
- package/lib/migrate-ref-tables.js +38 -0
- package/lib/native-executor/check-native-executor-config.d.ts +17 -0
- package/lib/native-executor/check-native-executor-config.js +20 -0
- package/lib/page-meta-column-maps.d.ts +32 -0
- package/lib/page-meta-column-maps.js +43 -0
- package/lib/page.d.ts +546 -0
- package/lib/page.js +764 -0
- package/lib/peek-archive-lock.d.ts +40 -0
- package/lib/peek-archive-lock.js +62 -0
- package/lib/populate-entity-tables/collapse-anchor-rows.d.ts +41 -0
- package/lib/populate-entity-tables/collapse-anchor-rows.js +87 -0
- package/lib/populate-entity-tables/derive-dom-path.d.ts +35 -0
- package/lib/populate-entity-tables/derive-dom-path.js +72 -0
- package/lib/populate-entity-tables/is-blob-ref-value.d.ts +16 -0
- package/lib/populate-entity-tables/is-blob-ref-value.js +19 -0
- package/lib/populate-entity-tables/match-images-to-dom-paths.d.ts +66 -0
- package/lib/populate-entity-tables/match-images-to-dom-paths.js +96 -0
- package/lib/populate-entity-tables/populate-anchor-edges.d.ts +33 -0
- package/lib/populate-entity-tables/populate-anchor-edges.js +153 -0
- package/lib/populate-entity-tables/populate-content-items.d.ts +40 -0
- package/lib/populate-entity-tables/populate-content-items.js +141 -0
- package/lib/populate-entity-tables/populate-entities.d.ts +81 -0
- package/lib/populate-entity-tables/populate-entities.js +110 -0
- package/lib/populate-entity-tables/populate-image-items.d.ts +91 -0
- package/lib/populate-entity-tables/populate-image-items.js +226 -0
- package/lib/populate-entity-tables/populate-page-meta.d.ts +33 -0
- package/lib/populate-entity-tables/populate-page-meta.js +267 -0
- package/lib/populate-entity-tables/populate-resource-items.d.ts +22 -0
- package/lib/populate-entity-tables/populate-resource-items.js +114 -0
- package/lib/populate-entity-tables/populate-resource-ref-edges.d.ts +31 -0
- package/lib/populate-entity-tables/populate-resource-ref-edges.js +33 -0
- package/lib/populate-entity-tables/resolve-blob-refs.d.ts +31 -0
- package/lib/populate-entity-tables/resolve-blob-refs.js +100 -0
- package/lib/populate-entity-tables/resolve-content-type-refs.d.ts +22 -0
- package/lib/populate-entity-tables/resolve-content-type-refs.js +27 -0
- package/lib/populate-entity-tables/resolve-header-sets.d.ts +49 -0
- package/lib/populate-entity-tables/resolve-header-sets.js +122 -0
- package/lib/populate-entity-tables/resolve-json-refs.d.ts +25 -0
- package/lib/populate-entity-tables/resolve-json-refs.js +67 -0
- package/lib/populate-entity-tables/resolve-text-refs.d.ts +30 -0
- package/lib/populate-entity-tables/resolve-text-refs.js +61 -0
- package/lib/populate-entity-tables/resolve-url-or-blob-from-maps.d.ts +21 -0
- package/lib/populate-entity-tables/resolve-url-or-blob-from-maps.js +27 -0
- package/lib/populate-entity-tables/resolve-url-refs.d.ts +33 -0
- package/lib/populate-entity-tables/resolve-url-refs.js +60 -0
- package/lib/populate-entity-tables/test-utils/count-rows.d.ts +17 -0
- package/lib/populate-entity-tables/test-utils/count-rows.js +20 -0
- package/lib/populate-entity-tables/test-utils/seed-content-items.d.ts +25 -0
- package/lib/populate-entity-tables/test-utils/seed-content-items.js +42 -0
- package/lib/populate-entity-tables/test-utils/setup-entities-db.d.ts +30 -0
- package/lib/populate-entity-tables/test-utils/setup-entities-db.js +175 -0
- package/lib/populate-entity-tables/types.d.ts +157 -0
- package/lib/populate-entity-tables/types.js +12 -0
- package/lib/populate-entity-tables/upsert-text-refs.d.ts +38 -0
- package/lib/populate-entity-tables/upsert-text-refs.js +78 -0
- package/lib/populate-ref-tables/classify-content-type.d.ts +16 -0
- package/lib/populate-ref-tables/classify-content-type.js +52 -0
- package/lib/populate-ref-tables/compute-content-hash.d.ts +22 -0
- package/lib/populate-ref-tables/compute-content-hash.js +26 -0
- package/lib/populate-ref-tables/compute-header-flags.d.ts +16 -0
- package/lib/populate-ref-tables/compute-header-flags.js +70 -0
- package/lib/populate-ref-tables/content-type-rules.d.ts +38 -0
- package/lib/populate-ref-tables/content-type-rules.js +133 -0
- package/lib/populate-ref-tables/create-header-table-caches.d.ts +25 -0
- package/lib/populate-ref-tables/create-header-table-caches.js +49 -0
- package/lib/populate-ref-tables/data-uri-url-refs-limit.d.ts +15 -0
- package/lib/populate-ref-tables/data-uri-url-refs-limit.js +15 -0
- package/lib/populate-ref-tables/decode-data-uri.d.ts +21 -0
- package/lib/populate-ref-tables/decode-data-uri.js +126 -0
- package/lib/populate-ref-tables/decompose-header-set.d.ts +29 -0
- package/lib/populate-ref-tables/decompose-header-set.js +157 -0
- package/lib/populate-ref-tables/decompose-url.d.ts +25 -0
- package/lib/populate-ref-tables/decompose-url.js +70 -0
- package/lib/populate-ref-tables/header-stability.d.ts +19 -0
- package/lib/populate-ref-tables/header-stability.js +22 -0
- package/lib/populate-ref-tables/header-value-cache-key.d.ts +17 -0
- package/lib/populate-ref-tables/header-value-cache-key.js +19 -0
- package/lib/populate-ref-tables/normalize-mime.d.ts +24 -0
- package/lib/populate-ref-tables/normalize-mime.js +36 -0
- package/lib/populate-ref-tables/populate-blob-refs.d.ts +38 -0
- package/lib/populate-ref-tables/populate-blob-refs.js +134 -0
- package/lib/populate-ref-tables/populate-content-type-refs.d.ts +27 -0
- package/lib/populate-ref-tables/populate-content-type-refs.js +70 -0
- package/lib/populate-ref-tables/populate-header-tables.d.ts +35 -0
- package/lib/populate-ref-tables/populate-header-tables.js +80 -0
- package/lib/populate-ref-tables/populate-json-refs.d.ts +29 -0
- package/lib/populate-ref-tables/populate-json-refs.js +101 -0
- package/lib/populate-ref-tables/populate-refs.d.ts +51 -0
- package/lib/populate-ref-tables/populate-refs.js +62 -0
- package/lib/populate-ref-tables/populate-text-refs.d.ts +32 -0
- package/lib/populate-ref-tables/populate-text-refs.js +133 -0
- package/lib/populate-ref-tables/populate-url-refs.d.ts +28 -0
- package/lib/populate-ref-tables/populate-url-refs.js +148 -0
- package/lib/populate-ref-tables/test-utils/count-rows.d.ts +15 -0
- package/lib/populate-ref-tables/test-utils/count-rows.js +17 -0
- package/lib/populate-ref-tables/types.d.ts +197 -0
- package/lib/populate-ref-tables/types.js +7 -0
- package/lib/populate-ref-tables/upsert-one-header-set.d.ts +34 -0
- package/lib/populate-ref-tables/upsert-one-header-set.js +208 -0
- package/lib/populate-ref-tables/volatile-header-names.d.ts +20 -0
- package/lib/populate-ref-tables/volatile-header-names.js +33 -0
- package/lib/redirect-table.d.ts +9 -0
- package/lib/redirect-table.js +28 -0
- package/lib/release-finished-statements.d.ts +42 -0
- package/lib/release-finished-statements.js +45 -0
- package/lib/resolve-redirect-chain.d.ts +33 -0
- package/lib/resolve-redirect-chain.js +27 -0
- package/lib/resource.d.ts +46 -0
- package/lib/resource.js +62 -0
- package/lib/retarget-legacy-fk-tables.d.ts +61 -0
- package/lib/retarget-legacy-fk-tables.js +137 -0
- package/lib/safe-path.d.ts +9 -0
- package/lib/safe-path.js +17 -0
- package/lib/scope/build-scope-map.d.ts +21 -0
- package/lib/scope/build-scope-map.js +32 -0
- package/lib/scope/find-scope-entry.d.ts +25 -0
- package/lib/scope/find-scope-entry.js +45 -0
- package/lib/template-classification/classify-archive-page-templates.d.ts +42 -0
- package/lib/template-classification/classify-archive-page-templates.js +70 -0
- package/lib/template-classification/classify-page-templates.d.ts +33 -0
- package/lib/template-classification/classify-page-templates.js +60 -0
- package/lib/template-classification/collect-page-ids-with-html.d.ts +24 -0
- package/lib/template-classification/collect-page-ids-with-html.js +30 -0
- package/lib/template-classification/collect-page-stylesheet-urls.d.ts +32 -0
- package/lib/template-classification/collect-page-stylesheet-urls.js +130 -0
- package/lib/template-classification/create-content-root-hint.d.ts +41 -0
- package/lib/template-classification/create-content-root-hint.js +51 -0
- package/lib/template-classification/create-page-cluster-factory.d.ts +36 -0
- package/lib/template-classification/create-page-cluster-factory.js +52 -0
- package/lib/template-classification/load-page-cluster-candidates.d.ts +32 -0
- package/lib/template-classification/load-page-cluster-candidates.js +93 -0
- package/lib/template-classification/page-cluster/resolve-page-cluster-keys.d.ts +34 -0
- package/lib/template-classification/page-cluster/resolve-page-cluster-keys.js +236 -0
- package/lib/template-classification/page-cluster/types.d.ts +123 -0
- package/lib/template-classification/page-cluster/types.js +1 -0
- package/lib/template-classification/types.d.ts +234 -0
- package/lib/template-classification/types.js +1 -0
- package/lib/test-utils/build-full-schema-test-db.d.ts +34 -0
- package/lib/test-utils/build-full-schema-test-db.js +74 -0
- package/lib/test-utils/create-legacy-analysis-tables.d.ts +13 -0
- package/lib/test-utils/create-legacy-analysis-tables.js +37 -0
- package/lib/test-utils/fk-parent-tables.d.ts +15 -0
- package/lib/test-utils/fk-parent-tables.js +19 -0
- package/lib/test-utils/seed-content-item.d.ts +35 -0
- package/lib/test-utils/seed-content-item.js +42 -0
- package/lib/test-utils/setup-legacy-fk-db.d.ts +34 -0
- package/lib/test-utils/setup-legacy-fk-db.js +271 -0
- package/lib/transfer/attach-source-database.d.ts +31 -0
- package/lib/transfer/attach-source-database.js +40 -0
- package/lib/transfer/build-split-config.d.ts +30 -0
- package/lib/transfer/build-split-config.js +42 -0
- package/lib/transfer/clear-replaced-page-rows.d.ts +23 -0
- package/lib/transfer/clear-replaced-page-rows.js +61 -0
- package/lib/transfer/concat-archives.d.ts +55 -0
- package/lib/transfer/concat-archives.js +95 -0
- package/lib/transfer/concat-source-transfer-phases.d.ts +10 -0
- package/lib/transfer/concat-source-transfer-phases.js +17 -0
- package/lib/transfer/content-item-rank-sql.d.ts +21 -0
- package/lib/transfer/content-item-rank-sql.js +23 -0
- package/lib/transfer/copy-anchor-edges.d.ts +28 -0
- package/lib/transfer/copy-anchor-edges.js +42 -0
- package/lib/transfer/copy-dictionaries-for-concat.d.ts +39 -0
- package/lib/transfer/copy-dictionaries-for-concat.js +81 -0
- package/lib/transfer/copy-dictionaries-for-split.d.ts +29 -0
- package/lib/transfer/copy-dictionaries-for-split.js +224 -0
- package/lib/transfer/copy-header-set-children.d.ts +27 -0
- package/lib/transfer/copy-header-set-children.js +51 -0
- package/lib/transfer/copy-image-items.d.ts +21 -0
- package/lib/transfer/copy-image-items.js +62 -0
- package/lib/transfer/copy-inventory-source-lists.d.ts +30 -0
- package/lib/transfer/copy-inventory-source-lists.js +61 -0
- package/lib/transfer/copy-journal-tables.d.ts +30 -0
- package/lib/transfer/copy-journal-tables.js +56 -0
- package/lib/transfer/copy-page-console-logs.d.ts +16 -0
- package/lib/transfer/copy-page-console-logs.js +27 -0
- package/lib/transfer/copy-page-html-blobs.d.ts +31 -0
- package/lib/transfer/copy-page-html-blobs.js +43 -0
- package/lib/transfer/copy-page-meta.d.ts +27 -0
- package/lib/transfer/copy-page-meta.js +68 -0
- package/lib/transfer/copy-page-template-clusters.d.ts +31 -0
- package/lib/transfer/copy-page-template-clusters.js +56 -0
- package/lib/transfer/copy-page-template-labels.d.ts +34 -0
- package/lib/transfer/copy-page-template-labels.js +88 -0
- package/lib/transfer/copy-resource-items.d.ts +29 -0
- package/lib/transfer/copy-resource-items.js +89 -0
- package/lib/transfer/copy-resource-ref-edges.d.ts +20 -0
- package/lib/transfer/copy-resource-ref-edges.js +33 -0
- package/lib/transfer/copy-simple-page-scoped-tables.d.ts +15 -0
- package/lib/transfer/copy-simple-page-scoped-tables.js +34 -0
- package/lib/transfer/count-external-pages-in-scope.d.ts +26 -0
- package/lib/transfer/count-external-pages-in-scope.js +40 -0
- package/lib/transfer/create-transfer-temp-tables.d.ts +30 -0
- package/lib/transfer/create-transfer-temp-tables.js +59 -0
- package/lib/transfer/dictionary-copy-specs.d.ts +32 -0
- package/lib/transfer/dictionary-copy-specs.js +28 -0
- package/lib/transfer/drop-transfer-temp-tables.d.ts +9 -0
- package/lib/transfer/drop-transfer-temp-tables.js +18 -0
- package/lib/transfer/flatten-redirect-chains.d.ts +44 -0
- package/lib/transfer/flatten-redirect-chains.js +74 -0
- package/lib/transfer/insert-content-items.d.ts +35 -0
- package/lib/transfer/insert-content-items.js +116 -0
- package/lib/transfer/list-transfer-columns.d.ts +35 -0
- package/lib/transfer/list-transfer-columns.js +45 -0
- package/lib/transfer/mark-in-scope-content-items.d.ts +31 -0
- package/lib/transfer/mark-in-scope-content-items.js +54 -0
- package/lib/transfer/merge-archive-configs.d.ts +51 -0
- package/lib/transfer/merge-archive-configs.js +85 -0
- package/lib/transfer/plan-content-items-for-concat.d.ts +33 -0
- package/lib/transfer/plan-content-items-for-concat.js +51 -0
- package/lib/transfer/plan-content-items-for-split.d.ts +42 -0
- package/lib/transfer/plan-content-items-for-split.js +83 -0
- package/lib/transfer/plan-resource-items.d.ts +40 -0
- package/lib/transfer/plan-resource-items.js +69 -0
- package/lib/transfer/quote-transfer-identifier.d.ts +18 -0
- package/lib/transfer/quote-transfer-identifier.js +20 -0
- package/lib/transfer/reclassify-resource-externality.d.ts +37 -0
- package/lib/transfer/reclassify-resource-externality.js +66 -0
- package/lib/transfer/remap-redirect-dest-ids.d.ts +34 -0
- package/lib/transfer/remap-redirect-dest-ids.js +51 -0
- package/lib/transfer/replace-content-items.d.ts +39 -0
- package/lib/transfer/replace-content-items.js +83 -0
- package/lib/transfer/simple-page-scoped-tables.d.ts +25 -0
- package/lib/transfer/simple-page-scoped-tables.js +38 -0
- package/lib/transfer/split-archive.d.ts +55 -0
- package/lib/transfer/split-archive.js +98 -0
- package/lib/transfer/split-source-transfer-phases.d.ts +11 -0
- package/lib/transfer/split-source-transfer-phases.js +18 -0
- package/lib/transfer/transfer-action.d.ts +34 -0
- package/lib/transfer/transfer-action.js +32 -0
- package/lib/transfer/transfer-archive-rows.d.ts +65 -0
- package/lib/transfer/transfer-archive-rows.js +156 -0
- package/lib/transfer/transfer-dictionary-tables.d.ts +12 -0
- package/lib/transfer/transfer-dictionary-tables.js +22 -0
- package/lib/transfer/transfer-post-phases.d.ts +10 -0
- package/lib/transfer/transfer-post-phases.js +13 -0
- package/lib/transfer/transfer-source-alias.d.ts +9 -0
- package/lib/transfer/transfer-source-alias.js +9 -0
- package/lib/transfer/types.d.ts +111 -0
- package/lib/transfer/types.js +35 -0
- package/lib/types.d.ts +772 -0
- package/lib/types.js +1 -0
- package/lib/url-alias/compute-tier-a-alias-key.d.ts +44 -0
- package/lib/url-alias/compute-tier-a-alias-key.js +47 -0
- package/lib/url-alias/compute-tier-b-alias-key.d.ts +23 -0
- package/lib/url-alias/compute-tier-b-alias-key.js +26 -0
- package/lib/url-alias/group-alias-candidates.d.ts +27 -0
- package/lib/url-alias/group-alias-candidates.js +29 -0
- package/lib/url-alias/types.d.ts +12 -0
- package/lib/url-alias/types.js +1 -0
- package/lib/url-pattern/compute-shape-key.d.ts +58 -0
- package/lib/url-pattern/compute-shape-key.js +129 -0
- package/lib/url-pattern/decompose-url.d.ts +33 -0
- package/lib/url-pattern/decompose-url.js +79 -0
- package/lib/url-pattern/reconstruct-url.d.ts +15 -0
- package/lib/url-pattern/reconstruct-url.js +33 -0
- package/lib/url-sort/compute-url-sort-ranks.d.ts +30 -0
- package/lib/url-sort/compute-url-sort-ranks.js +33 -0
- package/lib/utils/array/each-splitted.d.ts +10 -0
- package/lib/utils/array/each-splitted.js +14 -0
- package/lib/utils/debug.d.ts +8 -0
- package/lib/utils/debug.js +8 -0
- package/lib/utils/error/emit-error-with-retry.d.ts +40 -0
- package/lib/utils/error/emit-error-with-retry.js +44 -0
- package/lib/utils/error/emit-error.d.ts +39 -0
- package/lib/utils/error/emit-error.js +41 -0
- package/lib/utils/object/parse-response-headers.d.ts +12 -0
- package/lib/utils/object/parse-response-headers.js +26 -0
- package/lib/utils/object/redact-request-headers.d.ts +15 -0
- package/lib/utils/object/redact-request-headers.js +27 -0
- package/lib/utils/types/types.d.ts +383 -0
- package/lib/utils/types/types.js +1 -0
- package/lib/verify-migration/capture-rejection.d.ts +24 -0
- package/lib/verify-migration/capture-rejection.js +31 -0
- package/lib/verify-migration/check-anchor-edges-count.d.ts +34 -0
- package/lib/verify-migration/check-anchor-edges-count.js +72 -0
- package/lib/verify-migration/check-anchor-edges-sum.d.ts +13 -0
- package/lib/verify-migration/check-anchor-edges-sum.js +27 -0
- package/lib/verify-migration/check-content-items-count.d.ts +16 -0
- package/lib/verify-migration/check-content-items-count.js +30 -0
- package/lib/verify-migration/check-content-type-preservation.d.ts +22 -0
- package/lib/verify-migration/check-content-type-preservation.js +40 -0
- package/lib/verify-migration/check-foreign-key-integrity.d.ts +31 -0
- package/lib/verify-migration/check-foreign-key-integrity.js +47 -0
- package/lib/verify-migration/check-image-items-count.d.ts +12 -0
- package/lib/verify-migration/check-image-items-count.js +26 -0
- package/lib/verify-migration/check-page-meta-count.d.ts +15 -0
- package/lib/verify-migration/check-page-meta-count.js +31 -0
- package/lib/verify-migration/check-reader-parity.d.ts +23 -0
- package/lib/verify-migration/check-reader-parity.js +182 -0
- package/lib/verify-migration/check-resource-items-count.d.ts +17 -0
- package/lib/verify-migration/check-resource-items-count.js +33 -0
- package/lib/verify-migration/check-url-round-trip.d.ts +43 -0
- package/lib/verify-migration/check-url-round-trip.js +112 -0
- package/lib/verify-migration/types.d.ts +70 -0
- package/lib/verify-migration/types.js +63 -0
- package/lib/verify-migration/verify-migration.d.ts +41 -0
- package/lib/verify-migration/verify-migration.js +120 -0
- package/lib/with-bulk-write-pragmas.d.ts +51 -0
- package/lib/with-bulk-write-pragmas.js +132 -0
- package/lib/write-queue.d.ts +32 -0
- package/lib/write-queue.js +55 -0
- package/package.json +350 -3
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { compareSemver } from './compare-semver.js';
|
|
2
|
+
import { IncompatibleArchiveError } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Minimum `info.version` this build accepts. Archives older than this must
|
|
5
|
+
* be upgraded by running the matching migration script before they can be
|
|
6
|
+
* opened (see {@link IncompatibleArchiveError}'s message for the mapping
|
|
7
|
+
* from archive version to script).
|
|
8
|
+
*
|
|
9
|
+
* This value tracks the **archive format cut**, not the npm `pkg.version`:
|
|
10
|
+
* a format-breaking change bumps it ahead of the corresponding release,
|
|
11
|
+
* and releases that do not cut the format leave it unchanged. The crawler
|
|
12
|
+
* writes this exact value into every new archive's `info.version`.
|
|
13
|
+
*
|
|
14
|
+
* History:
|
|
15
|
+
*
|
|
16
|
+
* - **pre-0.10**: HTML snapshots in `snapshot-html.zip` (#75), then
|
|
17
|
+
* relocated to `page_html_blobs` (#84); pages table has flat `noindex`,
|
|
18
|
+
* `og:type`-style columns derived from beholder 2.x's flat `Meta`.
|
|
19
|
+
* - **0.10.0**: `page_html_blobs` BLOB storage (#75/#84) +
|
|
20
|
+
* nested-`Meta`-derived flat columns, `meta_extras` JSON, `page_tags` /
|
|
21
|
+
* `page_jsonld` tables, denormalised aggregates (#85).
|
|
22
|
+
* - **0.13.0**: this build. Write-model refactor (epic #103) —
|
|
23
|
+
* `content_items` / `page_meta` / `resource_items` / `anchor_edges` /
|
|
24
|
+
* `resource_ref_edges` / `image_items` entity tables plus `url_refs` /
|
|
25
|
+
* `text_refs` / `content_type_refs` / `json_refs` / `blob_refs` /
|
|
26
|
+
* `header_flags` ref tables. Readers query the new tables exclusively;
|
|
27
|
+
* pre-0.13 archives must be upgraded with `scripts/migrate-to-0.13.mjs`
|
|
28
|
+
* which bumps `info.version` to `0.13.0` on completion.
|
|
29
|
+
* @example
|
|
30
|
+
* import { REQUIRED_FORMAT_VERSION } from '@nitpicker/archive/meta/assert-compatible-version';
|
|
31
|
+
*
|
|
32
|
+
* // Warn an operator before attempting to open an old archive:
|
|
33
|
+
* if (compareSemver(archiveInfo.version, REQUIRED_FORMAT_VERSION) < 0) {
|
|
34
|
+
* console.error(`Archive needs migration to format ${REQUIRED_FORMAT_VERSION}`);
|
|
35
|
+
* }
|
|
36
|
+
*/
|
|
37
|
+
export const REQUIRED_FORMAT_VERSION = '0.13.0';
|
|
38
|
+
/**
|
|
39
|
+
* Verifies that the archive's on-disk format is compatible with this build.
|
|
40
|
+
*
|
|
41
|
+
* Compares the archive's `info.version` (a semver string written by
|
|
42
|
+
* `setConfig` at archive-create time, or by the migration script) against
|
|
43
|
+
* {@link REQUIRED_FORMAT_VERSION}. Older archives throw
|
|
44
|
+
* {@link IncompatibleArchiveError} pointing the operator at the migration
|
|
45
|
+
* script.
|
|
46
|
+
*
|
|
47
|
+
* Called from `Database.#init` for both writer and read-only (stub viewer)
|
|
48
|
+
* connections so old `._nitpicker-*` stubs surface the error too. New
|
|
49
|
+
* archives where the `info` table does not yet exist are tolerated —
|
|
50
|
+
* `initSchema` will fill them in next.
|
|
51
|
+
*
|
|
52
|
+
* The check is intentionally version-string-only, not schema-shape-based:
|
|
53
|
+
* `info.version` is the single declared source of truth, and a v0.10
|
|
54
|
+
* `migrate-to-0.10.mjs` run bumps it explicitly so the assertion passes
|
|
55
|
+
* once migration completes.
|
|
56
|
+
* @param instance - The Knex query builder for the archive's libsql connection.
|
|
57
|
+
* @throws {IncompatibleArchiveError} when `info.version` is older than
|
|
58
|
+
* {@link REQUIRED_FORMAT_VERSION}, or missing entirely on a non-empty
|
|
59
|
+
* archive.
|
|
60
|
+
*/
|
|
61
|
+
export async function assertCompatibleVersion(instance) {
|
|
62
|
+
const hasInfo = await instance.schema.hasTable('info');
|
|
63
|
+
if (!hasInfo) {
|
|
64
|
+
// Brand-new archive — `initSchema` will create `info` and fill in
|
|
65
|
+
// the version next.
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const hasVersionColumn = await instance.schema.hasColumn('info', 'version');
|
|
69
|
+
if (!hasVersionColumn) {
|
|
70
|
+
// Pre-version-tracked archive (very old). The column did not exist
|
|
71
|
+
// before the version was added to the info schema; reject with
|
|
72
|
+
// `'unknown'` so the operator runs the migration script.
|
|
73
|
+
throw new IncompatibleArchiveError('unknown', REQUIRED_FORMAT_VERSION);
|
|
74
|
+
}
|
|
75
|
+
const row = await instance
|
|
76
|
+
.from('info')
|
|
77
|
+
.select('version')
|
|
78
|
+
.first();
|
|
79
|
+
if (row === undefined) {
|
|
80
|
+
// `Archive.create()` calls `Database.connect` (which runs
|
|
81
|
+
// `initSchema` to create the info table) BEFORE `setConfig` writes
|
|
82
|
+
// the initial row. The transient empty-info state is a normal step
|
|
83
|
+
// of archive creation, not a corrupted pre-0.10 archive.
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const archiveVersion = row.version ?? null;
|
|
87
|
+
if (archiveVersion === null || archiveVersion === '') {
|
|
88
|
+
throw new IncompatibleArchiveError('unknown', REQUIRED_FORMAT_VERSION);
|
|
89
|
+
}
|
|
90
|
+
if (compareSemver(archiveVersion, REQUIRED_FORMAT_VERSION) < 0) {
|
|
91
|
+
throw new IncompatibleArchiveError(archiveVersion, REQUIRED_FORMAT_VERSION);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { JsonLdEntry } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Extracts the top-level `@type` from a parsed {@link JsonLdEntry}, normalised
|
|
4
|
+
* to a single string suitable for an indexed SQL column.
|
|
5
|
+
*
|
|
6
|
+
* JSON-LD `@type` has four shapes in the wild:
|
|
7
|
+
*
|
|
8
|
+
* - **String** — common single-type case (e.g. `"Product"`).
|
|
9
|
+
* - **Array** — multi-type entries (e.g. `["Product", "Offer"]`). The first
|
|
10
|
+
* element is taken; the rest are recoverable from `parsed`.
|
|
11
|
+
* - **Missing** — top-level object without an `@type` (often a `@graph`
|
|
12
|
+
* wrapper). Returns `null` so the column is filterable but does not over-
|
|
13
|
+
* fit a single type.
|
|
14
|
+
* - **Parse error** — `parsed === undefined` because beholder set
|
|
15
|
+
* `parseError`. Returns `null`.
|
|
16
|
+
*
|
|
17
|
+
* `@graph` entries deliberately return `null` rather than `'@graph'` — a
|
|
18
|
+
* graph is a container, not a type, and consumers grouping by `@type` would
|
|
19
|
+
* see noise.
|
|
20
|
+
* @param entry - One JSON-LD entry as captured by beholder.
|
|
21
|
+
* @returns The normalised `@type` string, or `null` when not extractable.
|
|
22
|
+
*/
|
|
23
|
+
export declare function classifyJsonLdType(entry: JsonLdEntry): string | null;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extracts the top-level `@type` from a parsed {@link JsonLdEntry}, normalised
|
|
3
|
+
* to a single string suitable for an indexed SQL column.
|
|
4
|
+
*
|
|
5
|
+
* JSON-LD `@type` has four shapes in the wild:
|
|
6
|
+
*
|
|
7
|
+
* - **String** — common single-type case (e.g. `"Product"`).
|
|
8
|
+
* - **Array** — multi-type entries (e.g. `["Product", "Offer"]`). The first
|
|
9
|
+
* element is taken; the rest are recoverable from `parsed`.
|
|
10
|
+
* - **Missing** — top-level object without an `@type` (often a `@graph`
|
|
11
|
+
* wrapper). Returns `null` so the column is filterable but does not over-
|
|
12
|
+
* fit a single type.
|
|
13
|
+
* - **Parse error** — `parsed === undefined` because beholder set
|
|
14
|
+
* `parseError`. Returns `null`.
|
|
15
|
+
*
|
|
16
|
+
* `@graph` entries deliberately return `null` rather than `'@graph'` — a
|
|
17
|
+
* graph is a container, not a type, and consumers grouping by `@type` would
|
|
18
|
+
* see noise.
|
|
19
|
+
* @param entry - One JSON-LD entry as captured by beholder.
|
|
20
|
+
* @returns The normalised `@type` string, or `null` when not extractable.
|
|
21
|
+
*/
|
|
22
|
+
export function classifyJsonLdType(entry) {
|
|
23
|
+
if (entry.parsed === undefined || entry.parsed === null)
|
|
24
|
+
return null;
|
|
25
|
+
if (typeof entry.parsed !== 'object')
|
|
26
|
+
return null;
|
|
27
|
+
const obj = entry.parsed;
|
|
28
|
+
const rawType = obj['@type'];
|
|
29
|
+
if (typeof rawType === 'string') {
|
|
30
|
+
const trimmed = rawType.trim();
|
|
31
|
+
return trimmed === '' ? null : trimmed;
|
|
32
|
+
}
|
|
33
|
+
if (Array.isArray(rawType)) {
|
|
34
|
+
for (const t of rawType) {
|
|
35
|
+
if (typeof t === 'string') {
|
|
36
|
+
const trimmed = t.trim();
|
|
37
|
+
if (trimmed !== '')
|
|
38
|
+
return trimmed;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compares two semver-like version strings.
|
|
3
|
+
*
|
|
4
|
+
* Only the major / minor / patch numeric components are considered;
|
|
5
|
+
* pre-release tags (`-alpha.1`) and build metadata (`+sha.abc`) are
|
|
6
|
+
* dropped before comparison so `"0.10.0-alpha.1"` compares equal to
|
|
7
|
+
* `"0.10.0"`. Missing components default to `0`, so `"0.10"` compares
|
|
8
|
+
* equal to `"0.10.0"`.
|
|
9
|
+
*
|
|
10
|
+
* Designed for `assertCompatibleVersion`'s
|
|
11
|
+
* "is the archive's `info.version` at least the required format
|
|
12
|
+
* version?" check — we do not need full semver semantics there, and
|
|
13
|
+
* pulling in the `semver` package would be overkill for one numeric
|
|
14
|
+
* comparison.
|
|
15
|
+
* @param a - The left-hand version string.
|
|
16
|
+
* @param b - The right-hand version string.
|
|
17
|
+
* @returns Negative when `a < b`, positive when `a > b`, zero when equal.
|
|
18
|
+
* @example
|
|
19
|
+
* compareSemver('0.9.0', '0.10.0') // → -1
|
|
20
|
+
* compareSemver('0.10.0', '0.10.0') // → 0
|
|
21
|
+
* compareSemver('0.10.5-alpha.1', '0.10.0') // → +5
|
|
22
|
+
*/
|
|
23
|
+
export declare function compareSemver(a: string, b: string): number;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compares two semver-like version strings.
|
|
3
|
+
*
|
|
4
|
+
* Only the major / minor / patch numeric components are considered;
|
|
5
|
+
* pre-release tags (`-alpha.1`) and build metadata (`+sha.abc`) are
|
|
6
|
+
* dropped before comparison so `"0.10.0-alpha.1"` compares equal to
|
|
7
|
+
* `"0.10.0"`. Missing components default to `0`, so `"0.10"` compares
|
|
8
|
+
* equal to `"0.10.0"`.
|
|
9
|
+
*
|
|
10
|
+
* Designed for `assertCompatibleVersion`'s
|
|
11
|
+
* "is the archive's `info.version` at least the required format
|
|
12
|
+
* version?" check — we do not need full semver semantics there, and
|
|
13
|
+
* pulling in the `semver` package would be overkill for one numeric
|
|
14
|
+
* comparison.
|
|
15
|
+
* @param a - The left-hand version string.
|
|
16
|
+
* @param b - The right-hand version string.
|
|
17
|
+
* @returns Negative when `a < b`, positive when `a > b`, zero when equal.
|
|
18
|
+
* @example
|
|
19
|
+
* compareSemver('0.9.0', '0.10.0') // → -1
|
|
20
|
+
* compareSemver('0.10.0', '0.10.0') // → 0
|
|
21
|
+
* compareSemver('0.10.5-alpha.1', '0.10.0') // → +5
|
|
22
|
+
*/
|
|
23
|
+
export function compareSemver(a, b) {
|
|
24
|
+
const pa = parseComponents(a);
|
|
25
|
+
const pb = parseComponents(b);
|
|
26
|
+
for (let i = 0; i < 3; i++) {
|
|
27
|
+
const diff = (pa[i] ?? 0) - (pb[i] ?? 0);
|
|
28
|
+
if (diff !== 0)
|
|
29
|
+
return diff;
|
|
30
|
+
}
|
|
31
|
+
return 0;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Strips pre-release / build metadata and parses the first three numeric
|
|
35
|
+
* components. Missing components default to `0`. Non-numeric components
|
|
36
|
+
* collapse to `0` rather than throwing — `assertCompatibleVersion` needs
|
|
37
|
+
* defensive behavior against hand-edited `info.version` strings.
|
|
38
|
+
* @param version
|
|
39
|
+
*/
|
|
40
|
+
function parseComponents(version) {
|
|
41
|
+
const core = version.split(/[-+]/)[0] ?? '';
|
|
42
|
+
const parts = core.split('.');
|
|
43
|
+
const major = Number.parseInt(parts[0] ?? '0', 10);
|
|
44
|
+
const minor = Number.parseInt(parts[1] ?? '0', 10);
|
|
45
|
+
const patch = Number.parseInt(parts[2] ?? '0', 10);
|
|
46
|
+
return [
|
|
47
|
+
Number.isFinite(major) ? major : 0,
|
|
48
|
+
Number.isFinite(minor) ? minor : 0,
|
|
49
|
+
Number.isFinite(patch) ? patch : 0,
|
|
50
|
+
];
|
|
51
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { ImageScanColumns, MainContentsDenormalizedColumns } from './types.js';
|
|
2
|
+
import type { MainContentsData, ScrollHeightData } from '../utils/types/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Computes the `page_meta.main_content_*` / `scroll_height_*` denormalised
|
|
5
|
+
* aggregate columns from beholder's `MainContentsData` / `ScrollHeightData`.
|
|
6
|
+
*
|
|
7
|
+
* `mainContents` is `null` for pages that were not fully rendered (external,
|
|
8
|
+
* non-HTML, or metadata-only scrapes) — in that case every column is `null`.
|
|
9
|
+
* This mirrors {@link import('./compute-page-denormalized.js').computePageDenormalized}'s
|
|
10
|
+
* write-once-at-scrape-time pattern so list / detail reads never re-derive
|
|
11
|
+
* counts from the `page_main_content_*` child tables.
|
|
12
|
+
*
|
|
13
|
+
* Accepts `undefined` as well as `null`: `PageData` declares `mainContents`
|
|
14
|
+
* as required, but test fixtures across the codebase predate this field and
|
|
15
|
+
* omit it (`.spec.ts` files are excluded from the `tsc` build, so this goes
|
|
16
|
+
* uncaught at compile time) — `== null` tolerates both without forcing every
|
|
17
|
+
* fixture to be updated.
|
|
18
|
+
*
|
|
19
|
+
* `customElementCount` is a separate parameter, not read off `mainContents`,
|
|
20
|
+
* because it is not one of beholder's `MainContentsData` categories —
|
|
21
|
+
* nitpicker captures Web Components itself (`@nitpicker/crawler`'s `crawler/capture-custom-elements.ts`)
|
|
22
|
+
* after `scrapeStart` returns. It carries three distinct states:
|
|
23
|
+
* `undefined`/capture-not-attempted and capture-failure both collapse to
|
|
24
|
+
* `null` (unknown — NOT the same as "captured, zero found"), while any
|
|
25
|
+
* number (including `0`) means capture succeeded.
|
|
26
|
+
* `imageScan` follows the same independent-of-`mainContents` shape as
|
|
27
|
+
* `scrollHeight` (both are per-viewport beholder scan outcomes, not derived
|
|
28
|
+
* from the main-content region) — it is typed as a plain `number | null`
|
|
29
|
+
* pair here rather than beholder's `ImageScanCode` so this function does not
|
|
30
|
+
* require a `@d-zero/beholder` version that exports it; the caller narrows.
|
|
31
|
+
* @param mainContents - Beholder's per-page main-content metrics, or `null`/`undefined`.
|
|
32
|
+
* @param scrollHeight - Beholder's per-page scroll-height measurements, or `null`/`undefined`.
|
|
33
|
+
* @param customElementCount - Count of Web Components nitpicker captured in
|
|
34
|
+
* the main-content region, or `null`/`undefined` when capture was not
|
|
35
|
+
* attempted or failed.
|
|
36
|
+
* @param imageScan - Beholder's per-viewport `<img>` scan outcome codes, or
|
|
37
|
+
* `null`/`undefined` when not attempted (page not fully rendered, or the
|
|
38
|
+
* scraper version does not report it yet).
|
|
39
|
+
* @returns The twenty denormalised columns.
|
|
40
|
+
*/
|
|
41
|
+
export declare function computeMainContentsDenormalized(mainContents: MainContentsData | null | undefined, scrollHeight: ScrollHeightData | null | undefined, customElementCount?: number | null, imageScan?: ImageScanColumns | null): MainContentsDenormalizedColumns;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Computes the `page_meta.main_content_*` / `scroll_height_*` denormalised
|
|
3
|
+
* aggregate columns from beholder's `MainContentsData` / `ScrollHeightData`.
|
|
4
|
+
*
|
|
5
|
+
* `mainContents` is `null` for pages that were not fully rendered (external,
|
|
6
|
+
* non-HTML, or metadata-only scrapes) — in that case every column is `null`.
|
|
7
|
+
* This mirrors {@link import('./compute-page-denormalized.js').computePageDenormalized}'s
|
|
8
|
+
* write-once-at-scrape-time pattern so list / detail reads never re-derive
|
|
9
|
+
* counts from the `page_main_content_*` child tables.
|
|
10
|
+
*
|
|
11
|
+
* Accepts `undefined` as well as `null`: `PageData` declares `mainContents`
|
|
12
|
+
* as required, but test fixtures across the codebase predate this field and
|
|
13
|
+
* omit it (`.spec.ts` files are excluded from the `tsc` build, so this goes
|
|
14
|
+
* uncaught at compile time) — `== null` tolerates both without forcing every
|
|
15
|
+
* fixture to be updated.
|
|
16
|
+
*
|
|
17
|
+
* `customElementCount` is a separate parameter, not read off `mainContents`,
|
|
18
|
+
* because it is not one of beholder's `MainContentsData` categories —
|
|
19
|
+
* nitpicker captures Web Components itself (`@nitpicker/crawler`'s `crawler/capture-custom-elements.ts`)
|
|
20
|
+
* after `scrapeStart` returns. It carries three distinct states:
|
|
21
|
+
* `undefined`/capture-not-attempted and capture-failure both collapse to
|
|
22
|
+
* `null` (unknown — NOT the same as "captured, zero found"), while any
|
|
23
|
+
* number (including `0`) means capture succeeded.
|
|
24
|
+
* `imageScan` follows the same independent-of-`mainContents` shape as
|
|
25
|
+
* `scrollHeight` (both are per-viewport beholder scan outcomes, not derived
|
|
26
|
+
* from the main-content region) — it is typed as a plain `number | null`
|
|
27
|
+
* pair here rather than beholder's `ImageScanCode` so this function does not
|
|
28
|
+
* require a `@d-zero/beholder` version that exports it; the caller narrows.
|
|
29
|
+
* @param mainContents - Beholder's per-page main-content metrics, or `null`/`undefined`.
|
|
30
|
+
* @param scrollHeight - Beholder's per-page scroll-height measurements, or `null`/`undefined`.
|
|
31
|
+
* @param customElementCount - Count of Web Components nitpicker captured in
|
|
32
|
+
* the main-content region, or `null`/`undefined` when capture was not
|
|
33
|
+
* attempted or failed.
|
|
34
|
+
* @param imageScan - Beholder's per-viewport `<img>` scan outcome codes, or
|
|
35
|
+
* `null`/`undefined` when not attempted (page not fully rendered, or the
|
|
36
|
+
* scraper version does not report it yet).
|
|
37
|
+
* @returns The twenty denormalised columns.
|
|
38
|
+
*/
|
|
39
|
+
export function computeMainContentsDenormalized(mainContents, scrollHeight, customElementCount, imageScan) {
|
|
40
|
+
if (mainContents == null) {
|
|
41
|
+
return {
|
|
42
|
+
main_content_node_name: null,
|
|
43
|
+
main_content_id: null,
|
|
44
|
+
main_content_role: null,
|
|
45
|
+
main_content_selector: null,
|
|
46
|
+
main_content_class_list: null,
|
|
47
|
+
main_content_word_count: null,
|
|
48
|
+
main_content_body_word_count: null,
|
|
49
|
+
main_content_heading_count: null,
|
|
50
|
+
main_content_image_count: null,
|
|
51
|
+
main_content_table_count: null,
|
|
52
|
+
main_content_button_count: null,
|
|
53
|
+
main_content_iframe_count: null,
|
|
54
|
+
main_content_video_count: null,
|
|
55
|
+
main_content_audio_count: null,
|
|
56
|
+
main_content_canvas_count: null,
|
|
57
|
+
main_content_custom_element_count: null,
|
|
58
|
+
scroll_height_desktop: null,
|
|
59
|
+
scroll_height_mobile: null,
|
|
60
|
+
image_scan_desktop: null,
|
|
61
|
+
image_scan_mobile: null,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
main_content_node_name: mainContents.main?.nodeName ?? null,
|
|
66
|
+
main_content_id: mainContents.main?.id ?? null,
|
|
67
|
+
main_content_role: mainContents.main?.role ?? null,
|
|
68
|
+
main_content_selector: mainContents.main?.selector ?? null,
|
|
69
|
+
main_content_class_list: mainContents.main
|
|
70
|
+
? JSON.stringify(mainContents.main.classList)
|
|
71
|
+
: null,
|
|
72
|
+
main_content_word_count: mainContents.wordCount,
|
|
73
|
+
main_content_body_word_count: mainContents.bodyWordCount,
|
|
74
|
+
main_content_heading_count: mainContents.headings.length,
|
|
75
|
+
main_content_image_count: mainContents.images.length,
|
|
76
|
+
main_content_table_count: mainContents.tables.length,
|
|
77
|
+
main_content_button_count: mainContents.buttons.length,
|
|
78
|
+
main_content_iframe_count: mainContents.iframes.length,
|
|
79
|
+
main_content_video_count: mainContents.videos.length,
|
|
80
|
+
main_content_audio_count: mainContents.audios.length,
|
|
81
|
+
main_content_canvas_count: mainContents.canvases.length,
|
|
82
|
+
main_content_custom_element_count: customElementCount ?? null,
|
|
83
|
+
scroll_height_desktop: scrollHeight?.desktop ?? null,
|
|
84
|
+
scroll_height_mobile: scrollHeight?.mobile ?? null,
|
|
85
|
+
image_scan_desktop: imageScan?.desktop ?? null,
|
|
86
|
+
image_scan_mobile: imageScan?.mobile ?? null,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { PageDenormalizedColumns, Meta } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Computes the denormalised aggregate columns stored on the `pages` table at
|
|
4
|
+
* write time: `tag_count`, `jsonld_count`, `tags_providers_csv`.
|
|
5
|
+
*
|
|
6
|
+
* Why denormalise: the Sheets report and the `get-page-detail` summary need
|
|
7
|
+
* "how many JSON-LD entries?" and "which Wappalyzer providers?" for every
|
|
8
|
+
* page row. Computing those at read time forces either a per-page sub-query
|
|
9
|
+
* (N+1) or a site-wide `GROUP BY` (heavy on 1M-page archives). Writing them
|
|
10
|
+
* once at scrape time keeps the read path to a single `pages` projection.
|
|
11
|
+
*
|
|
12
|
+
* `tags_providers_csv` uses comma as separator (no escaping). Wappalyzer
|
|
13
|
+
* provider names do not contain commas in practice; if that ever changes,
|
|
14
|
+
* switch to a JSON array column or use `\x1f` as separator. The CSV form
|
|
15
|
+
* exists because Sheets / Google Spreadsheet renders comma-separated lists
|
|
16
|
+
* natively without unwrapping JSON.
|
|
17
|
+
* @param meta - Beholder-derived metadata for the page.
|
|
18
|
+
* @returns The three denormalised columns.
|
|
19
|
+
*/
|
|
20
|
+
export declare function computePageDenormalized(meta: Meta): PageDenormalizedColumns;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Computes the denormalised aggregate columns stored on the `pages` table at
|
|
3
|
+
* write time: `tag_count`, `jsonld_count`, `tags_providers_csv`.
|
|
4
|
+
*
|
|
5
|
+
* Why denormalise: the Sheets report and the `get-page-detail` summary need
|
|
6
|
+
* "how many JSON-LD entries?" and "which Wappalyzer providers?" for every
|
|
7
|
+
* page row. Computing those at read time forces either a per-page sub-query
|
|
8
|
+
* (N+1) or a site-wide `GROUP BY` (heavy on 1M-page archives). Writing them
|
|
9
|
+
* once at scrape time keeps the read path to a single `pages` projection.
|
|
10
|
+
*
|
|
11
|
+
* `tags_providers_csv` uses comma as separator (no escaping). Wappalyzer
|
|
12
|
+
* provider names do not contain commas in practice; if that ever changes,
|
|
13
|
+
* switch to a JSON array column or use `\x1f` as separator. The CSV form
|
|
14
|
+
* exists because Sheets / Google Spreadsheet renders comma-separated lists
|
|
15
|
+
* natively without unwrapping JSON.
|
|
16
|
+
* @param meta - Beholder-derived metadata for the page.
|
|
17
|
+
* @returns The three denormalised columns.
|
|
18
|
+
*/
|
|
19
|
+
export function computePageDenormalized(meta) {
|
|
20
|
+
// `??` guards tolerate the legacy "minimal meta" shape (`{ title: 'X' }`)
|
|
21
|
+
// produced by older test fixtures. Real beholder 3.0.0 always populates
|
|
22
|
+
// these required fields; the guards only matter for test fixtures that
|
|
23
|
+
// pre-date the v2 schema.
|
|
24
|
+
const tagEntries = meta.tags?.entries ?? [];
|
|
25
|
+
const jsonLd = meta.jsonLd ?? [];
|
|
26
|
+
const speculationRules = meta.speculationRules ?? [];
|
|
27
|
+
const tag_count = tagEntries.length;
|
|
28
|
+
const jsonld_count = jsonLd.length + speculationRules.length;
|
|
29
|
+
const providers = new Set();
|
|
30
|
+
for (const entry of tagEntries) {
|
|
31
|
+
providers.add(entry.provider);
|
|
32
|
+
}
|
|
33
|
+
const tags_providers_csv = [...providers].toSorted().join(',');
|
|
34
|
+
return { tag_count, jsonld_count, tags_providers_csv };
|
|
35
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { FlatPageMetaColumns, Meta } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Derives the {@link FlatPageMetaColumns} (`pages` table flat columns) from a
|
|
4
|
+
* beholder {@link Meta} object.
|
|
5
|
+
*
|
|
6
|
+
* Handles three concerns the database layer should not re-implement:
|
|
7
|
+
*
|
|
8
|
+
* 1. **Null-safe traversal** of the new nested Meta shape
|
|
9
|
+
* (`meta.og?.title`, `meta.robots?.noindex`, `meta.link?.canonical`, etc.).
|
|
10
|
+
* All optional sub-objects are guarded so an absent meta tag becomes
|
|
11
|
+
* `null` rather than a runtime crash.
|
|
12
|
+
*
|
|
13
|
+
* 2. **URL absolutisation** for every URL-shaped column. beholder 3.0.0
|
|
14
|
+
* extracts link/og href values via `link.getAttribute('href')`, which
|
|
15
|
+
* preserves relative URLs as-written. `find-mismatches` compares
|
|
16
|
+
* `canonical != url` directly, so we must resolve everything against the
|
|
17
|
+
* page URL (or `<base href>` if present) before persistence. Malformed
|
|
18
|
+
* URLs become `null` rather than blowing up the entire insert.
|
|
19
|
+
*
|
|
20
|
+
* 3. **Boolean → integer coercion** for SQLite-style boolean columns
|
|
21
|
+
* (`robots_*`, `formatDetection_telephone`). `undefined` and unparseable
|
|
22
|
+
* values map to `null`.
|
|
23
|
+
*
|
|
24
|
+
* URL-shaped columns: `canonical`, `og_url`, `og_image`, `amphtml`,
|
|
25
|
+
* `manifest`, `icon_href`, `appleTouchIcon_href`, `twitter_image`.
|
|
26
|
+
* @param meta - Beholder-derived metadata for the page.
|
|
27
|
+
* @param pageUrl - Absolute URL of the page being persisted. Used as the
|
|
28
|
+
* fallback base when `meta.baseHref` is absent or relative.
|
|
29
|
+
* @returns A flat object whose keys map 1:1 to `pages` table columns.
|
|
30
|
+
* @example
|
|
31
|
+
* deriveFlatFromMeta(meta, 'https://example.com/about')
|
|
32
|
+
* // → { canonical: 'https://example.com/about', og_title: '...', ... }
|
|
33
|
+
*/
|
|
34
|
+
export declare function deriveFlatFromMeta(meta: Meta, pageUrl: string): FlatPageMetaColumns;
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derives the {@link FlatPageMetaColumns} (`pages` table flat columns) from a
|
|
3
|
+
* beholder {@link Meta} object.
|
|
4
|
+
*
|
|
5
|
+
* Handles three concerns the database layer should not re-implement:
|
|
6
|
+
*
|
|
7
|
+
* 1. **Null-safe traversal** of the new nested Meta shape
|
|
8
|
+
* (`meta.og?.title`, `meta.robots?.noindex`, `meta.link?.canonical`, etc.).
|
|
9
|
+
* All optional sub-objects are guarded so an absent meta tag becomes
|
|
10
|
+
* `null` rather than a runtime crash.
|
|
11
|
+
*
|
|
12
|
+
* 2. **URL absolutisation** for every URL-shaped column. beholder 3.0.0
|
|
13
|
+
* extracts link/og href values via `link.getAttribute('href')`, which
|
|
14
|
+
* preserves relative URLs as-written. `find-mismatches` compares
|
|
15
|
+
* `canonical != url` directly, so we must resolve everything against the
|
|
16
|
+
* page URL (or `<base href>` if present) before persistence. Malformed
|
|
17
|
+
* URLs become `null` rather than blowing up the entire insert.
|
|
18
|
+
*
|
|
19
|
+
* 3. **Boolean → integer coercion** for SQLite-style boolean columns
|
|
20
|
+
* (`robots_*`, `formatDetection_telephone`). `undefined` and unparseable
|
|
21
|
+
* values map to `null`.
|
|
22
|
+
*
|
|
23
|
+
* URL-shaped columns: `canonical`, `og_url`, `og_image`, `amphtml`,
|
|
24
|
+
* `manifest`, `icon_href`, `appleTouchIcon_href`, `twitter_image`.
|
|
25
|
+
* @param meta - Beholder-derived metadata for the page.
|
|
26
|
+
* @param pageUrl - Absolute URL of the page being persisted. Used as the
|
|
27
|
+
* fallback base when `meta.baseHref` is absent or relative.
|
|
28
|
+
* @returns A flat object whose keys map 1:1 to `pages` table columns.
|
|
29
|
+
* @example
|
|
30
|
+
* deriveFlatFromMeta(meta, 'https://example.com/about')
|
|
31
|
+
* // → { canonical: 'https://example.com/about', og_title: '...', ... }
|
|
32
|
+
*/
|
|
33
|
+
export function deriveFlatFromMeta(meta, pageUrl) {
|
|
34
|
+
const base = resolveBase(meta.baseHref, pageUrl);
|
|
35
|
+
const robots = meta.robots;
|
|
36
|
+
const og = meta.og;
|
|
37
|
+
const ogArticle = og?.article;
|
|
38
|
+
const twitter = meta.twitter;
|
|
39
|
+
const link = meta.link;
|
|
40
|
+
const formatDetection = meta.formatDetection;
|
|
41
|
+
return {
|
|
42
|
+
// Document basics
|
|
43
|
+
lang: nullableString(meta.lang),
|
|
44
|
+
dir: nullableString(meta.dir),
|
|
45
|
+
charset: nullableString(meta.charset),
|
|
46
|
+
baseHref: absolutizeUrl(meta.baseHref, pageUrl),
|
|
47
|
+
viewport_raw: nullableString(meta.viewport?.raw),
|
|
48
|
+
themeColor: nullableString(meta.themeColor),
|
|
49
|
+
applicationName: nullableString(meta.applicationName),
|
|
50
|
+
author: nullableString(meta.author),
|
|
51
|
+
generator: nullableString(meta.generator),
|
|
52
|
+
publisher: nullableString(meta.publisher),
|
|
53
|
+
// Robots
|
|
54
|
+
robots_raw: nullableString(robots?.raw),
|
|
55
|
+
robots_noindex: booleanToInt(robots?.noindex),
|
|
56
|
+
robots_nofollow: booleanToInt(robots?.nofollow),
|
|
57
|
+
robots_noarchive: booleanToInt(robots?.noarchive),
|
|
58
|
+
robots_noimageindex: booleanToInt(robots?.noimageindex),
|
|
59
|
+
googlebot: nullableString(meta.googlebot),
|
|
60
|
+
// Link (1:1 only)
|
|
61
|
+
canonical: absolutizeUrl(link?.canonical, base),
|
|
62
|
+
amphtml: absolutizeUrl(link?.amphtml, base),
|
|
63
|
+
manifest: absolutizeUrl(link?.manifest, base),
|
|
64
|
+
icon_href: absolutizeUrl(link?.icon?.href, base),
|
|
65
|
+
appleTouchIcon_href: absolutizeUrl(link?.appleTouchIcon?.href, base),
|
|
66
|
+
// Open Graph
|
|
67
|
+
og_type: nullableString(og?.type),
|
|
68
|
+
og_title: nullableString(og?.title),
|
|
69
|
+
og_url: absolutizeUrl(og?.url, base),
|
|
70
|
+
og_site_name: nullableString(og?.siteName),
|
|
71
|
+
og_description: nullableString(og?.description),
|
|
72
|
+
og_image: absolutizeUrl(og?.imageUrl ?? og?.image?.[0], base),
|
|
73
|
+
og_image_alt: nullableString(og?.imageAlt),
|
|
74
|
+
og_image_width: nullableString(og?.imageWidth),
|
|
75
|
+
og_image_height: nullableString(og?.imageHeight),
|
|
76
|
+
og_locale: nullableString(og?.locale),
|
|
77
|
+
og_article_published_time: nullableString(ogArticle?.publishedTime),
|
|
78
|
+
og_article_modified_time: nullableString(ogArticle?.modifiedTime),
|
|
79
|
+
// Twitter
|
|
80
|
+
twitter_card: nullableString(twitter?.card),
|
|
81
|
+
twitter_site: nullableString(twitter?.site),
|
|
82
|
+
twitter_creator: nullableString(twitter?.creator),
|
|
83
|
+
twitter_title: nullableString(twitter?.title),
|
|
84
|
+
twitter_description: nullableString(twitter?.description),
|
|
85
|
+
twitter_image: absolutizeUrl(twitter?.image ?? twitter?.imageSrc, base),
|
|
86
|
+
// One-offs
|
|
87
|
+
fb_app_id: nullableString(meta.fb?.appId),
|
|
88
|
+
verification_google: nullableString(meta.verification?.google),
|
|
89
|
+
formatDetection_telephone: booleanToInt(formatDetection?.telephone),
|
|
90
|
+
// Title / description / keywords (top-level Meta fields)
|
|
91
|
+
title: nullableString(meta.title),
|
|
92
|
+
description: nullableString(meta.description),
|
|
93
|
+
keywords: nullableString(meta.keywords),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Resolves the effective base URL for relative-URL absolutisation.
|
|
98
|
+
*
|
|
99
|
+
* Falls back to `pageUrl` when `baseHref` is absent. When `baseHref` itself
|
|
100
|
+
* is a relative URL (rare but spec-permitted), resolves it against
|
|
101
|
+
* `pageUrl` first so subsequent `new URL(value, base)` calls see an
|
|
102
|
+
* absolute base.
|
|
103
|
+
* @param baseHref
|
|
104
|
+
* @param pageUrl
|
|
105
|
+
*/
|
|
106
|
+
function resolveBase(baseHref, pageUrl) {
|
|
107
|
+
if (!baseHref)
|
|
108
|
+
return pageUrl;
|
|
109
|
+
try {
|
|
110
|
+
return new URL(baseHref, pageUrl).href;
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return pageUrl;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Resolves a possibly-relative URL against a base.
|
|
118
|
+
*
|
|
119
|
+
* Returns `null` for `undefined` / empty string / unparseable input so a
|
|
120
|
+
* malformed page does not abort the entire `#insertPage` call.
|
|
121
|
+
* @param value
|
|
122
|
+
* @param base
|
|
123
|
+
*/
|
|
124
|
+
function absolutizeUrl(value, base) {
|
|
125
|
+
if (value === undefined || value === null || value === '')
|
|
126
|
+
return null;
|
|
127
|
+
try {
|
|
128
|
+
return new URL(value, base).href;
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Normalises optional / empty strings to `null` so SQL `IS NULL` queries
|
|
136
|
+
* behave consistently. Trim is intentional — leading/trailing whitespace in
|
|
137
|
+
* `<meta content=>` is meaningless for downstream consumers.
|
|
138
|
+
* @param value
|
|
139
|
+
*/
|
|
140
|
+
function nullableString(value) {
|
|
141
|
+
if (value === undefined || value === null)
|
|
142
|
+
return null;
|
|
143
|
+
const trimmed = value.trim();
|
|
144
|
+
return trimmed === '' ? null : trimmed;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Converts an optional boolean to SQLite's 0/1 integer representation. Any
|
|
148
|
+
* non-boolean (`undefined`, non-boolean string from `boolean-true` keys)
|
|
149
|
+
* becomes `null`.
|
|
150
|
+
* @param value
|
|
151
|
+
*/
|
|
152
|
+
function booleanToInt(value) {
|
|
153
|
+
if (value === true)
|
|
154
|
+
return 1;
|
|
155
|
+
if (value === false)
|
|
156
|
+
return 0;
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Meta } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Derives the `meta_extras` JSON payload from a beholder {@link Meta} object.
|
|
4
|
+
*
|
|
5
|
+
* Strategy: pass-through everything except data that lives in dedicated
|
|
6
|
+
* tables (`page_jsonld`, `page_tags`) or that is debug-only
|
|
7
|
+
* (`_raw`). Flat columns are intentionally **not** stripped — the modest
|
|
8
|
+
* storage duplication is preferred over a fragile field-by-field denylist
|
|
9
|
+
* that breaks every time beholder grows new Meta fields.
|
|
10
|
+
*
|
|
11
|
+
* The output is JSON-stringified by the caller (`#insertPage`) and stored in
|
|
12
|
+
* `pages.meta_extras`. Consumers read it back via `get-page-detail` and the
|
|
13
|
+
* Page wrapper's `metaExtras` getter.
|
|
14
|
+
*
|
|
15
|
+
* Plan note: "ファイルサイズが多少増えてもいいから取り出しパフォーマンスを優先" — this is exactly that
|
|
16
|
+
* trade-off. Future Meta fields are auto-captured without code change.
|
|
17
|
+
* @param meta - Beholder-derived metadata for the page.
|
|
18
|
+
* @returns Plain object suitable for `JSON.stringify`.
|
|
19
|
+
*/
|
|
20
|
+
export declare function deriveMetaExtras(meta: Meta): Record<string, unknown>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derives the `meta_extras` JSON payload from a beholder {@link Meta} object.
|
|
3
|
+
*
|
|
4
|
+
* Strategy: pass-through everything except data that lives in dedicated
|
|
5
|
+
* tables (`page_jsonld`, `page_tags`) or that is debug-only
|
|
6
|
+
* (`_raw`). Flat columns are intentionally **not** stripped — the modest
|
|
7
|
+
* storage duplication is preferred over a fragile field-by-field denylist
|
|
8
|
+
* that breaks every time beholder grows new Meta fields.
|
|
9
|
+
*
|
|
10
|
+
* The output is JSON-stringified by the caller (`#insertPage`) and stored in
|
|
11
|
+
* `pages.meta_extras`. Consumers read it back via `get-page-detail` and the
|
|
12
|
+
* Page wrapper's `metaExtras` getter.
|
|
13
|
+
*
|
|
14
|
+
* Plan note: "ファイルサイズが多少増えてもいいから取り出しパフォーマンスを優先" — this is exactly that
|
|
15
|
+
* trade-off. Future Meta fields are auto-captured without code change.
|
|
16
|
+
* @param meta - Beholder-derived metadata for the page.
|
|
17
|
+
* @returns Plain object suitable for `JSON.stringify`.
|
|
18
|
+
*/
|
|
19
|
+
export function deriveMetaExtras(meta) {
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars -- we destructure to omit these from the spread
|
|
21
|
+
const { jsonLd, speculationRules, tags, _raw, ...rest } = meta;
|
|
22
|
+
return rest;
|
|
23
|
+
}
|