@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,17 @@
|
|
|
1
|
+
import type { TagRowForInsert, TagsMeta } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Flattens {@link TagsMeta.entries} (per provider × external-id tuple) into
|
|
4
|
+
* insert-ready rows for the `page_tags` table.
|
|
5
|
+
*
|
|
6
|
+
* One Wappalyzer entry → one row. `entry.id` becomes `externalId`. `category`
|
|
7
|
+
* is the first element of `categories`; the full list is preserved in the
|
|
8
|
+
* `categories` JSON column. `sources` is preserved verbatim as a JSON column.
|
|
9
|
+
*
|
|
10
|
+
* `pageId` is **not** filled here — the database layer injects it because the
|
|
11
|
+
* page row is `INSERT`-ed in the same transaction and its ID is known only at
|
|
12
|
+
* insert time.
|
|
13
|
+
* @param tags - The `meta.tags` object from beholder.
|
|
14
|
+
* @returns Rows ready for the `page_tags` insert; empty array when no tags
|
|
15
|
+
* were detected.
|
|
16
|
+
*/
|
|
17
|
+
export declare function extractTagsForArchive(tags: TagsMeta | undefined): ReadonlyArray<Omit<TagRowForInsert, 'pageId'>>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flattens {@link TagsMeta.entries} (per provider × external-id tuple) into
|
|
3
|
+
* insert-ready rows for the `page_tags` table.
|
|
4
|
+
*
|
|
5
|
+
* One Wappalyzer entry → one row. `entry.id` becomes `externalId`. `category`
|
|
6
|
+
* is the first element of `categories`; the full list is preserved in the
|
|
7
|
+
* `categories` JSON column. `sources` is preserved verbatim as a JSON column.
|
|
8
|
+
*
|
|
9
|
+
* `pageId` is **not** filled here — the database layer injects it because the
|
|
10
|
+
* page row is `INSERT`-ed in the same transaction and its ID is known only at
|
|
11
|
+
* insert time.
|
|
12
|
+
* @param tags - The `meta.tags` object from beholder.
|
|
13
|
+
* @returns Rows ready for the `page_tags` insert; empty array when no tags
|
|
14
|
+
* were detected.
|
|
15
|
+
*/
|
|
16
|
+
export function extractTagsForArchive(tags) {
|
|
17
|
+
// `tags` can be undefined when fed legacy minimal-Meta test fixtures.
|
|
18
|
+
// Real beholder 3.0.0 always populates this required field.
|
|
19
|
+
const entries = tags?.entries ?? [];
|
|
20
|
+
if (entries.length === 0)
|
|
21
|
+
return [];
|
|
22
|
+
return entries.map((entry) => ({
|
|
23
|
+
provider: entry.provider,
|
|
24
|
+
category: entry.categories[0] ?? null,
|
|
25
|
+
externalId: entry.id ?? null,
|
|
26
|
+
version: entry.version ?? null,
|
|
27
|
+
confidence: entry.confidence ?? null,
|
|
28
|
+
categories: [...entry.categories],
|
|
29
|
+
sources: entry.sources.map((s) => ({
|
|
30
|
+
type: s.type,
|
|
31
|
+
src: s.src,
|
|
32
|
+
location: s.location,
|
|
33
|
+
globalName: s.globalName,
|
|
34
|
+
})),
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decodes the `page_meta.main_content_class_list` column — the detected
|
|
3
|
+
* main-content element's CSS classes, stored as a JSON array — shared by
|
|
4
|
+
* `Page.mainContentClassList` and template classification's page loader so
|
|
5
|
+
* both read the column the same way.
|
|
6
|
+
*
|
|
7
|
+
* The crawler writes the column with `JSON.stringify` on a string array, so
|
|
8
|
+
* anything else is a corrupt archive; it throws rather than guessing, since
|
|
9
|
+
* a silently dropped class list would change which template a page lands in.
|
|
10
|
+
* @param raw - The column value; `null` when no main region was detected.
|
|
11
|
+
* @returns The class names, or `null` when no main region was detected.
|
|
12
|
+
* @throws {Error} When the value is not a JSON array of strings.
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* parseMainContentClassList('["spc","wide"]'); // ['spc', 'wide']
|
|
16
|
+
* parseMainContentClassList(null); // null
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare function parseMainContentClassList(raw: string | null): string[] | null;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decodes the `page_meta.main_content_class_list` column — the detected
|
|
3
|
+
* main-content element's CSS classes, stored as a JSON array — shared by
|
|
4
|
+
* `Page.mainContentClassList` and template classification's page loader so
|
|
5
|
+
* both read the column the same way.
|
|
6
|
+
*
|
|
7
|
+
* The crawler writes the column with `JSON.stringify` on a string array, so
|
|
8
|
+
* anything else is a corrupt archive; it throws rather than guessing, since
|
|
9
|
+
* a silently dropped class list would change which template a page lands in.
|
|
10
|
+
* @param raw - The column value; `null` when no main region was detected.
|
|
11
|
+
* @returns The class names, or `null` when no main region was detected.
|
|
12
|
+
* @throws {Error} When the value is not a JSON array of strings.
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* parseMainContentClassList('["spc","wide"]'); // ['spc', 'wide']
|
|
16
|
+
* parseMainContentClassList(null); // null
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export function parseMainContentClassList(raw) {
|
|
20
|
+
if (raw === null) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
let parsed;
|
|
24
|
+
try {
|
|
25
|
+
parsed = JSON.parse(raw);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
throw new Error(`main_content_class_list is not valid JSON: ${raw}`);
|
|
29
|
+
}
|
|
30
|
+
if (!Array.isArray(parsed) || parsed.some((name) => typeof name !== 'string')) {
|
|
31
|
+
throw new Error(`main_content_class_list is not a JSON array of strings: ${raw}`);
|
|
32
|
+
}
|
|
33
|
+
return parsed;
|
|
34
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { JsonLdRow, JsonLdSummary } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Builds the {@link JsonLdSummary} object returned by `get-page-detail` from a
|
|
4
|
+
* page's JSON-LD rows.
|
|
5
|
+
*
|
|
6
|
+
* Why summary: the raw payload of a single page's JSON-LD can reach several
|
|
7
|
+
* MB on e-commerce sites (Amazon product page = 50 schemas × 50KB). Returning
|
|
8
|
+
* that inline blows up MCP / LLM token budgets. The summary preserves the
|
|
9
|
+
* shape of the data (counts + unique types + parse error count) so consumers
|
|
10
|
+
* can decide whether to drill in via `get-page-jsonld(url)`.
|
|
11
|
+
*
|
|
12
|
+
* Entries with `type === null` are surfaced as `'(unknown)'` so the type
|
|
13
|
+
* list is enumerable without sentinel handling on the consumer side.
|
|
14
|
+
* @param rows - All `page_jsonld` rows for one page.
|
|
15
|
+
* @returns Summary with `count`, sorted unique `types[]`, and `parseErrorCount`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function summarizeJsonLd(rows: readonly JsonLdRow[]): JsonLdSummary;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds the {@link JsonLdSummary} object returned by `get-page-detail` from a
|
|
3
|
+
* page's JSON-LD rows.
|
|
4
|
+
*
|
|
5
|
+
* Why summary: the raw payload of a single page's JSON-LD can reach several
|
|
6
|
+
* MB on e-commerce sites (Amazon product page = 50 schemas × 50KB). Returning
|
|
7
|
+
* that inline blows up MCP / LLM token budgets. The summary preserves the
|
|
8
|
+
* shape of the data (counts + unique types + parse error count) so consumers
|
|
9
|
+
* can decide whether to drill in via `get-page-jsonld(url)`.
|
|
10
|
+
*
|
|
11
|
+
* Entries with `type === null` are surfaced as `'(unknown)'` so the type
|
|
12
|
+
* list is enumerable without sentinel handling on the consumer side.
|
|
13
|
+
* @param rows - All `page_jsonld` rows for one page.
|
|
14
|
+
* @returns Summary with `count`, sorted unique `types[]`, and `parseErrorCount`.
|
|
15
|
+
*/
|
|
16
|
+
export function summarizeJsonLd(rows) {
|
|
17
|
+
const types = new Set();
|
|
18
|
+
let parseErrorCount = 0;
|
|
19
|
+
for (const row of rows) {
|
|
20
|
+
types.add(row.type ?? '(unknown)');
|
|
21
|
+
if (row.parseError !== null)
|
|
22
|
+
parseErrorCount++;
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
count: rows.length,
|
|
26
|
+
types: [...types].toSorted(),
|
|
27
|
+
parseErrorCount,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { PageTechnologyPartial, TechnologySignalPartial } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Options for {@link combineTechnologyConfidence}.
|
|
4
|
+
*/
|
|
5
|
+
export interface CombineTechnologyConfidenceOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Skip the `TECHNOLOGY_CONFIDENCE_THRESHOLD` drop. Set by the `page_tags`
|
|
8
|
+
* legacy-migration callers (`migrate-page-tags-to-page-technologies.ts`,
|
|
9
|
+
* `retarget-legacy-fk-tables.ts`): the threshold exists to filter noisy
|
|
10
|
+
* NEW detections at crawl time, but migration is converting Wappalyzer
|
|
11
|
+
* detections the old `page_tags`-based API already returned
|
|
12
|
+
* unconditionally (including low-confidence ones) — dropping them here
|
|
13
|
+
* would silently and permanently lose data with no recovery path (v0.x
|
|
14
|
+
* policy is read-time migration only, no retroactive re-crawl).
|
|
15
|
+
*/
|
|
16
|
+
skipThreshold?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Combines every signal detected for one technology on one page into a
|
|
20
|
+
* single confidence score via noisy-OR:
|
|
21
|
+
*
|
|
22
|
+
* ```
|
|
23
|
+
* confidence = round(100 * (1 - Π (1 - weight/100)))
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* over each DISTINCT `signalType` present (same signal type appearing
|
|
27
|
+
* twice — e.g. two different `url-pattern` definitions both matching —
|
|
28
|
+
* counts once, at its highest weight; compounding only happens ACROSS
|
|
29
|
+
* signal types, which is what makes this "multiple independent signals
|
|
30
|
+
* agree" rather than "one noisy signal repeated"). A single signal's
|
|
31
|
+
* result equals its own weight exactly (`1 - (1 - w/100) = w/100`).
|
|
32
|
+
*
|
|
33
|
+
* Technologies whose combined confidence falls below
|
|
34
|
+
* `TECHNOLOGY_CONFIDENCE_THRESHOLD` are dropped entirely — a lone weak
|
|
35
|
+
* signal (e.g. `id="app"`, weight 15) is noise, not a detection, and
|
|
36
|
+
* `page_technologies` has no `isDetected` column to hide it behind; the
|
|
37
|
+
* row simply is not written. Pass `options.skipThreshold` to keep every
|
|
38
|
+
* technology regardless of confidence (see its docs for why).
|
|
39
|
+
* @param signals - Every signal detected for a single page, across all
|
|
40
|
+
* technologies (this function groups by `technology` internally).
|
|
41
|
+
* @param options - See {@link CombineTechnologyConfidenceOptions}.
|
|
42
|
+
* @returns One {@link PageTechnologyPartial} per technology (filtered by
|
|
43
|
+
* the confidence threshold unless `options.skipThreshold` is set), in no
|
|
44
|
+
* particular order.
|
|
45
|
+
*/
|
|
46
|
+
export declare function combineTechnologyConfidence(signals: readonly TechnologySignalPartial[], options?: CombineTechnologyConfidenceOptions): PageTechnologyPartial[];
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { TECHNOLOGY_CONFIDENCE_THRESHOLD } from './technology-signal-definitions.js';
|
|
2
|
+
/**
|
|
3
|
+
* Priority order for picking which signal's `category`/`version` wins when
|
|
4
|
+
* more than one signal for the same technology supplies one. `wappalyzer`
|
|
5
|
+
* wins first — it is the only source with a real Wappalyzer-reported
|
|
6
|
+
* `version`; `meta-generator` second — also carries a real version
|
|
7
|
+
* (`<meta name="generator" content="Astro v4.2.0">`); the rest never
|
|
8
|
+
* carry a version and are listed only so the `.find()` below terminates
|
|
9
|
+
* deterministically regardless of definition order.
|
|
10
|
+
*/
|
|
11
|
+
const CATEGORY_VERSION_SOURCE_PRIORITY = [
|
|
12
|
+
'wappalyzer',
|
|
13
|
+
'meta-generator',
|
|
14
|
+
'html-marker',
|
|
15
|
+
'url-pattern',
|
|
16
|
+
'scoped-attr',
|
|
17
|
+
'js-license-comment',
|
|
18
|
+
'weak-marker',
|
|
19
|
+
];
|
|
20
|
+
/**
|
|
21
|
+
* Combines every signal detected for one technology on one page into a
|
|
22
|
+
* single confidence score via noisy-OR:
|
|
23
|
+
*
|
|
24
|
+
* ```
|
|
25
|
+
* confidence = round(100 * (1 - Π (1 - weight/100)))
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* over each DISTINCT `signalType` present (same signal type appearing
|
|
29
|
+
* twice — e.g. two different `url-pattern` definitions both matching —
|
|
30
|
+
* counts once, at its highest weight; compounding only happens ACROSS
|
|
31
|
+
* signal types, which is what makes this "multiple independent signals
|
|
32
|
+
* agree" rather than "one noisy signal repeated"). A single signal's
|
|
33
|
+
* result equals its own weight exactly (`1 - (1 - w/100) = w/100`).
|
|
34
|
+
*
|
|
35
|
+
* Technologies whose combined confidence falls below
|
|
36
|
+
* `TECHNOLOGY_CONFIDENCE_THRESHOLD` are dropped entirely — a lone weak
|
|
37
|
+
* signal (e.g. `id="app"`, weight 15) is noise, not a detection, and
|
|
38
|
+
* `page_technologies` has no `isDetected` column to hide it behind; the
|
|
39
|
+
* row simply is not written. Pass `options.skipThreshold` to keep every
|
|
40
|
+
* technology regardless of confidence (see its docs for why).
|
|
41
|
+
* @param signals - Every signal detected for a single page, across all
|
|
42
|
+
* technologies (this function groups by `technology` internally).
|
|
43
|
+
* @param options - See {@link CombineTechnologyConfidenceOptions}.
|
|
44
|
+
* @returns One {@link PageTechnologyPartial} per technology (filtered by
|
|
45
|
+
* the confidence threshold unless `options.skipThreshold` is set), in no
|
|
46
|
+
* particular order.
|
|
47
|
+
*/
|
|
48
|
+
export function combineTechnologyConfidence(signals, options = {}) {
|
|
49
|
+
const byTechnology = new Map();
|
|
50
|
+
for (const signal of signals) {
|
|
51
|
+
const group = byTechnology.get(signal.technology);
|
|
52
|
+
if (group) {
|
|
53
|
+
group.push(signal);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
byTechnology.set(signal.technology, [signal]);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const results = [];
|
|
60
|
+
for (const [technology, group] of byTechnology) {
|
|
61
|
+
const maxWeightByType = new Map();
|
|
62
|
+
for (const signal of group) {
|
|
63
|
+
const current = maxWeightByType.get(signal.signalType);
|
|
64
|
+
if (current === undefined || signal.weight > current) {
|
|
65
|
+
maxWeightByType.set(signal.signalType, signal.weight);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const product = [...maxWeightByType.values()].reduce((acc, weight) => acc * (1 - weight / 100), 1);
|
|
69
|
+
const confidence = Math.round(100 * (1 - product));
|
|
70
|
+
if (!options.skipThreshold && confidence < TECHNOLOGY_CONFIDENCE_THRESHOLD)
|
|
71
|
+
continue;
|
|
72
|
+
let categorySource;
|
|
73
|
+
let versionSource;
|
|
74
|
+
for (const type of CATEGORY_VERSION_SOURCE_PRIORITY) {
|
|
75
|
+
if (!categorySource) {
|
|
76
|
+
categorySource = group.find((s) => s.signalType === type && s.category != null);
|
|
77
|
+
}
|
|
78
|
+
if (!versionSource) {
|
|
79
|
+
versionSource = group.find((s) => s.signalType === type && s.version != null);
|
|
80
|
+
}
|
|
81
|
+
if (categorySource && versionSource)
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
results.push({
|
|
85
|
+
technology,
|
|
86
|
+
category: categorySource?.category ?? null,
|
|
87
|
+
version: versionSource?.version ?? null,
|
|
88
|
+
confidence,
|
|
89
|
+
signalCount: maxWeightByType.size,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return results;
|
|
93
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { LegacyTagRowLike } from './convert-tag-row-to-wappalyzer-signal.js';
|
|
2
|
+
/** One `technology_signals` row ready for insertion, `pageId` already resolved. */
|
|
3
|
+
export interface LegacyTechnologySignalInsert {
|
|
4
|
+
pageId: number;
|
|
5
|
+
technology: string;
|
|
6
|
+
signalType: string;
|
|
7
|
+
evidence: string | null;
|
|
8
|
+
weight: number;
|
|
9
|
+
}
|
|
10
|
+
/** One `page_technologies` row ready for insertion, `pageId` already resolved. */
|
|
11
|
+
export interface LegacyPageTechnologyInsert {
|
|
12
|
+
pageId: number;
|
|
13
|
+
technology: string;
|
|
14
|
+
category: string | null;
|
|
15
|
+
version: string | null;
|
|
16
|
+
confidence: number;
|
|
17
|
+
signalCount: number;
|
|
18
|
+
}
|
|
19
|
+
/** Result of {@link convertLegacyPageTagsToInserts}. */
|
|
20
|
+
export interface LegacyPageTagsConversion {
|
|
21
|
+
signalInserts: LegacyTechnologySignalInsert[];
|
|
22
|
+
technologyInserts: LegacyPageTechnologyInsert[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Converts every persisted (legacy) `page_tags` row into the `pageId`-keyed
|
|
26
|
+
* `technology_signals` + `page_technologies` insert rows for that page's
|
|
27
|
+
* whole tag set — shared by both `page_tags` migration paths
|
|
28
|
+
* (`migrate-page-tags-to-page-technologies.ts` for archives already on the
|
|
29
|
+
* current schema, `retarget-legacy-fk-tables.ts` for the 0.10→0.13 upgrade)
|
|
30
|
+
* so a `page_tags` row converts identically regardless of which path
|
|
31
|
+
* produced it, and a future fix to the conversion only needs to change one
|
|
32
|
+
* place.
|
|
33
|
+
*
|
|
34
|
+
* Uses `combineTechnologyConfidence(signals, { skipThreshold: true })` —
|
|
35
|
+
* migration preserves every historical Wappalyzer detection the old
|
|
36
|
+
* `page_tags`-based API returned unconditionally, rather than applying the
|
|
37
|
+
* confidence-noise filter meant for fresh crawl-time detections (see that
|
|
38
|
+
* option's docs).
|
|
39
|
+
* @param rows - Every `page_tags` row, in any order (grouped internally by
|
|
40
|
+
* `pageId`).
|
|
41
|
+
* @returns The two insert-ready row sets, empty arrays if `rows` is empty.
|
|
42
|
+
*/
|
|
43
|
+
export declare function convertLegacyPageTagsToInserts(rows: readonly (LegacyTagRowLike & {
|
|
44
|
+
pageId: number;
|
|
45
|
+
})[]): LegacyPageTagsConversion;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { combineTechnologyConfidence } from './combine-technology-confidence.js';
|
|
2
|
+
import { convertTagRowToWappalyzerSignal } from './convert-tag-row-to-wappalyzer-signal.js';
|
|
3
|
+
/**
|
|
4
|
+
* Converts every persisted (legacy) `page_tags` row into the `pageId`-keyed
|
|
5
|
+
* `technology_signals` + `page_technologies` insert rows for that page's
|
|
6
|
+
* whole tag set — shared by both `page_tags` migration paths
|
|
7
|
+
* (`migrate-page-tags-to-page-technologies.ts` for archives already on the
|
|
8
|
+
* current schema, `retarget-legacy-fk-tables.ts` for the 0.10→0.13 upgrade)
|
|
9
|
+
* so a `page_tags` row converts identically regardless of which path
|
|
10
|
+
* produced it, and a future fix to the conversion only needs to change one
|
|
11
|
+
* place.
|
|
12
|
+
*
|
|
13
|
+
* Uses `combineTechnologyConfidence(signals, { skipThreshold: true })` —
|
|
14
|
+
* migration preserves every historical Wappalyzer detection the old
|
|
15
|
+
* `page_tags`-based API returned unconditionally, rather than applying the
|
|
16
|
+
* confidence-noise filter meant for fresh crawl-time detections (see that
|
|
17
|
+
* option's docs).
|
|
18
|
+
* @param rows - Every `page_tags` row, in any order (grouped internally by
|
|
19
|
+
* `pageId`).
|
|
20
|
+
* @returns The two insert-ready row sets, empty arrays if `rows` is empty.
|
|
21
|
+
*/
|
|
22
|
+
export function convertLegacyPageTagsToInserts(rows) {
|
|
23
|
+
const signalsByPage = new Map();
|
|
24
|
+
for (const row of rows) {
|
|
25
|
+
const signal = convertTagRowToWappalyzerSignal(row);
|
|
26
|
+
const group = signalsByPage.get(row.pageId);
|
|
27
|
+
if (group) {
|
|
28
|
+
group.push(signal);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
signalsByPage.set(row.pageId, [signal]);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const signalInserts = [];
|
|
35
|
+
const technologyInserts = [];
|
|
36
|
+
for (const [pageId, signals] of signalsByPage) {
|
|
37
|
+
for (const signal of signals) {
|
|
38
|
+
signalInserts.push({
|
|
39
|
+
pageId,
|
|
40
|
+
technology: signal.technology,
|
|
41
|
+
signalType: signal.signalType,
|
|
42
|
+
evidence: signal.evidence,
|
|
43
|
+
weight: signal.weight,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
for (const technology of combineTechnologyConfidence(signals, {
|
|
47
|
+
skipThreshold: true,
|
|
48
|
+
})) {
|
|
49
|
+
technologyInserts.push({ pageId, ...technology });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return { signalInserts, technologyInserts };
|
|
53
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { TechnologySignalPartial } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Minimal shape this function needs from a persisted (legacy) `page_tags`
|
|
4
|
+
* row. Deliberately narrower than the old `TagRow` — only the columns a
|
|
5
|
+
* `wappalyzer` signal can use. `categories` accepts `unknown` because
|
|
6
|
+
* callers read it via two different paths that disagree on whether the
|
|
7
|
+
* driver already parsed the `json()` column: raw `SELECT` (still a JSON
|
|
8
|
+
* string) vs. knex's typed row mapping (already an array on some drivers).
|
|
9
|
+
*/
|
|
10
|
+
export interface LegacyTagRowLike {
|
|
11
|
+
provider: string;
|
|
12
|
+
version: string | null;
|
|
13
|
+
confidence: number | null;
|
|
14
|
+
categories: unknown;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Converts one persisted (legacy) `page_tags` row into a `wappalyzer`
|
|
18
|
+
* technology signal — the shared core `migrate-page-tags-to-page-technologies.ts`
|
|
19
|
+
* (read-time migration for archives already on the current schema) and
|
|
20
|
+
* `retarget-legacy-fk-tables.ts` (0.10→0.13 upgrade path) both call, so a
|
|
21
|
+
* `page_tags` row converts identically regardless of which migration path
|
|
22
|
+
* produced it.
|
|
23
|
+
*
|
|
24
|
+
* Mirrors `normalize-wappalyzer-entries.ts`'s live-beholder conversion, but
|
|
25
|
+
* reads from the OLD persisted row shape (`provider`/`version`/`confidence`/
|
|
26
|
+
* `categories`) instead of beholder's live `TagEntry` (`provider`/`version`/
|
|
27
|
+
* `confidence`/`categories`/`id`/`sources`) — structurally similar, but
|
|
28
|
+
* `page_tags` has no `id` (externalId) to use as `evidence`, so the provider
|
|
29
|
+
* name is used instead.
|
|
30
|
+
* @param row - The persisted `page_tags` row (or an equivalent shape).
|
|
31
|
+
* @returns The equivalent `wappalyzer` signal.
|
|
32
|
+
*/
|
|
33
|
+
export declare function convertTagRowToWappalyzerSignal(row: LegacyTagRowLike): TechnologySignalPartial;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { WAPPALYZER_PROVIDER_TO_TECHNOLOGY, WAPPALYZER_SIGNAL_WEIGHT, } from './technology-signal-definitions.js';
|
|
2
|
+
/**
|
|
3
|
+
* Converts one persisted (legacy) `page_tags` row into a `wappalyzer`
|
|
4
|
+
* technology signal — the shared core `migrate-page-tags-to-page-technologies.ts`
|
|
5
|
+
* (read-time migration for archives already on the current schema) and
|
|
6
|
+
* `retarget-legacy-fk-tables.ts` (0.10→0.13 upgrade path) both call, so a
|
|
7
|
+
* `page_tags` row converts identically regardless of which migration path
|
|
8
|
+
* produced it.
|
|
9
|
+
*
|
|
10
|
+
* Mirrors `normalize-wappalyzer-entries.ts`'s live-beholder conversion, but
|
|
11
|
+
* reads from the OLD persisted row shape (`provider`/`version`/`confidence`/
|
|
12
|
+
* `categories`) instead of beholder's live `TagEntry` (`provider`/`version`/
|
|
13
|
+
* `confidence`/`categories`/`id`/`sources`) — structurally similar, but
|
|
14
|
+
* `page_tags` has no `id` (externalId) to use as `evidence`, so the provider
|
|
15
|
+
* name is used instead.
|
|
16
|
+
* @param row - The persisted `page_tags` row (or an equivalent shape).
|
|
17
|
+
* @returns The equivalent `wappalyzer` signal.
|
|
18
|
+
*/
|
|
19
|
+
export function convertTagRowToWappalyzerSignal(row) {
|
|
20
|
+
const categories = parseCategories(row.categories);
|
|
21
|
+
return {
|
|
22
|
+
technology: WAPPALYZER_PROVIDER_TO_TECHNOLOGY[row.provider] ?? row.provider,
|
|
23
|
+
signalType: 'wappalyzer',
|
|
24
|
+
evidence: row.provider,
|
|
25
|
+
weight: row.confidence ?? WAPPALYZER_SIGNAL_WEIGHT,
|
|
26
|
+
category: categories[0] ?? null,
|
|
27
|
+
version: row.version ?? null,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* @param raw
|
|
32
|
+
*/
|
|
33
|
+
function parseCategories(raw) {
|
|
34
|
+
if (Array.isArray(raw))
|
|
35
|
+
return raw;
|
|
36
|
+
if (typeof raw === 'string' && raw.length > 0) {
|
|
37
|
+
try {
|
|
38
|
+
const parsed = JSON.parse(raw);
|
|
39
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { PageTechnologyPartial, TechnologySignalPartial } from './types.js';
|
|
2
|
+
import type { PageData } from '../../utils/types/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* The result of one page's technology-signal extraction: every raw signal
|
|
5
|
+
* (for `technology_signals`, MCP/query signal-level lookups, and per-page
|
|
6
|
+
* "why was this detected" drill-down) plus the confidence-combined roll-up
|
|
7
|
+
* (for `page_technologies`).
|
|
8
|
+
*/
|
|
9
|
+
export interface ExtractedTechnologies {
|
|
10
|
+
signals: TechnologySignalPartial[];
|
|
11
|
+
technologies: PageTechnologyPartial[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Extracts every technology signal for one page — structural (HTML markers,
|
|
15
|
+
* URL path fragments, scoped attributes, `<meta name="generator">`) plus
|
|
16
|
+
* Wappalyzer (beholder's `meta.tags.entries`) — and combines them into
|
|
17
|
+
* confidence-scored technology rows.
|
|
18
|
+
*
|
|
19
|
+
* Crawl-time, synchronous, zero extra network cost — the direct replacement
|
|
20
|
+
* for `extract-tags-for-archive.ts` in the live crawl write path (that file
|
|
21
|
+
* itself is untouched; `scripts/migrate-to-0.10.mjs` still depends on it).
|
|
22
|
+
* JS-license-comment signals from external JS files are NOT produced here —
|
|
23
|
+
* they require an extra network fetch per JS resource and are added
|
|
24
|
+
* afterward, once per crawl, by `scan-js-resources-for-technology-signals.ts`
|
|
25
|
+
* ("JSスキャン・エンリッチメント", a distinct post-crawl category — see
|
|
26
|
+
* ARCHITECTURE.md). A license banner inside the page's own HTML (an inline
|
|
27
|
+
* `<script>`) is matched here, since the structural list applies every
|
|
28
|
+
* definition, `js-license-comment` included, to the HTML.
|
|
29
|
+
* @param html - The page's raw HTML string.
|
|
30
|
+
* @param meta - `PageData.meta` (for `generator` and `tags.entries`).
|
|
31
|
+
* @returns Raw signals and their confidence-combined roll-up.
|
|
32
|
+
*/
|
|
33
|
+
export declare function extractTechnologiesForArchive(html: string, meta: PageData['meta']): ExtractedTechnologies;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { combineTechnologyConfidence } from './combine-technology-confidence.js';
|
|
2
|
+
import { matchStructuralTechnologySignals } from './match-structural-technology-signals.js';
|
|
3
|
+
import { normalizeWappalyzerEntries } from './normalize-wappalyzer-entries.js';
|
|
4
|
+
/**
|
|
5
|
+
* Extracts every technology signal for one page — structural (HTML markers,
|
|
6
|
+
* URL path fragments, scoped attributes, `<meta name="generator">`) plus
|
|
7
|
+
* Wappalyzer (beholder's `meta.tags.entries`) — and combines them into
|
|
8
|
+
* confidence-scored technology rows.
|
|
9
|
+
*
|
|
10
|
+
* Crawl-time, synchronous, zero extra network cost — the direct replacement
|
|
11
|
+
* for `extract-tags-for-archive.ts` in the live crawl write path (that file
|
|
12
|
+
* itself is untouched; `scripts/migrate-to-0.10.mjs` still depends on it).
|
|
13
|
+
* JS-license-comment signals from external JS files are NOT produced here —
|
|
14
|
+
* they require an extra network fetch per JS resource and are added
|
|
15
|
+
* afterward, once per crawl, by `scan-js-resources-for-technology-signals.ts`
|
|
16
|
+
* ("JSスキャン・エンリッチメント", a distinct post-crawl category — see
|
|
17
|
+
* ARCHITECTURE.md). A license banner inside the page's own HTML (an inline
|
|
18
|
+
* `<script>`) is matched here, since the structural list applies every
|
|
19
|
+
* definition, `js-license-comment` included, to the HTML.
|
|
20
|
+
* @param html - The page's raw HTML string.
|
|
21
|
+
* @param meta - `PageData.meta` (for `generator` and `tags.entries`).
|
|
22
|
+
* @returns Raw signals and their confidence-combined roll-up.
|
|
23
|
+
*/
|
|
24
|
+
export function extractTechnologiesForArchive(html, meta) {
|
|
25
|
+
const structuralSignals = matchStructuralTechnologySignals(html, meta.generator);
|
|
26
|
+
const wappalyzerSignals = normalizeWappalyzerEntries(meta.tags?.entries);
|
|
27
|
+
const signals = [...structuralSignals, ...wappalyzerSignals];
|
|
28
|
+
const technologies = combineTechnologyConfidence(signals);
|
|
29
|
+
return { signals, technologies };
|
|
30
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { TechnologySignalPartial } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Tests a JS resource's leading bytes against the structural fingerprint
|
|
4
|
+
* list's `js-license-comment` definitions (such as Vue's leading license
|
|
5
|
+
* banner), returning the first that matches. The same definitions
|
|
6
|
+
* `matchStructuralTechnologySignals` applies to page HTML; the list lives
|
|
7
|
+
* in `@nitpicker/core`'s `crates/nitpicker_tech_detect`, and the crawler
|
|
8
|
+
* reaches it through this function because it does not import the addon
|
|
9
|
+
* directly.
|
|
10
|
+
* @param script - The resource's leading bytes as fetched (a byte-capped
|
|
11
|
+
* prefix, so possibly cut inside a character — such bytes read as U+FFFD,
|
|
12
|
+
* as `Buffer.prototype.toString('utf8')` decodes them).
|
|
13
|
+
* @returns The first matching signal, or `null` when none matches.
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* matchJsLicenseCommentSignal(Buffer.from('/*!\n * Vue.js v3.4.0\n *\/'));
|
|
17
|
+
* // { technology: 'Vue', signalType: 'js-license-comment',
|
|
18
|
+
* // evidence: '/*!\n * Vue.js v3', weight: 55, category: 'JavaScript frameworks' }
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare function matchJsLicenseCommentSignal(script: Uint8Array): TechnologySignalPartial | null;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { matchJsLicenseCommentSignal as matchJsLicenseCommentSignalNative } from '@nitpicker/core/match-js-license-comment-signal';
|
|
2
|
+
/**
|
|
3
|
+
* Tests a JS resource's leading bytes against the structural fingerprint
|
|
4
|
+
* list's `js-license-comment` definitions (such as Vue's leading license
|
|
5
|
+
* banner), returning the first that matches. The same definitions
|
|
6
|
+
* `matchStructuralTechnologySignals` applies to page HTML; the list lives
|
|
7
|
+
* in `@nitpicker/core`'s `crates/nitpicker_tech_detect`, and the crawler
|
|
8
|
+
* reaches it through this function because it does not import the addon
|
|
9
|
+
* directly.
|
|
10
|
+
* @param script - The resource's leading bytes as fetched (a byte-capped
|
|
11
|
+
* prefix, so possibly cut inside a character — such bytes read as U+FFFD,
|
|
12
|
+
* as `Buffer.prototype.toString('utf8')` decodes them).
|
|
13
|
+
* @returns The first matching signal, or `null` when none matches.
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* matchJsLicenseCommentSignal(Buffer.from('/*!\n * Vue.js v3.4.0\n *\/'));
|
|
17
|
+
* // { technology: 'Vue', signalType: 'js-license-comment',
|
|
18
|
+
* // evidence: '/*!\n * Vue.js v3', weight: 55, category: 'JavaScript frameworks' }
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export function matchJsLicenseCommentSignal(script) {
|
|
22
|
+
return matchJsLicenseCommentSignalNative(script);
|
|
23
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { TechnologySignalPartial } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Detects the structural fingerprint list (`@nitpicker/core`'s
|
|
4
|
+
* `crates/nitpicker_tech_detect`) against a page's raw HTML, plus
|
|
5
|
+
* `<meta name="generator">` prefix matches against the already-extracted
|
|
6
|
+
* `generator` field. Pure and synchronous — no network I/O, no Wappalyzer
|
|
7
|
+
* data (see `normalize-wappalyzer-entries.ts` for that source).
|
|
8
|
+
*
|
|
9
|
+
* The HTML match runs in the native addon, which scans the page once for
|
|
10
|
+
* every fingerprint. The JavaScript regular expressions it was ported from
|
|
11
|
+
* stay in `structural-signal-definitions.ts`, excluded from the build, as
|
|
12
|
+
* the oracle for `match-structural-technology-signals.parity.spec.ts`.
|
|
13
|
+
* @param html - The page's raw HTML string (empty for external or
|
|
14
|
+
* metadata-only scrapes, which then match nothing).
|
|
15
|
+
* @param generator - `page_meta.generator` (already extracted by
|
|
16
|
+
* `derive-flat-from-meta.ts` from beholder's `Meta`), or `null`/`undefined`.
|
|
17
|
+
* @returns Un-combined structural signals, one per matched fingerprint in
|
|
18
|
+
* the list's order, then one per matched generator prefix.
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* matchStructuralTechnologySignals('<div data-v-1a2b3c4d></div>', 'Nuxt 3.8');
|
|
22
|
+
* // [{ technology: 'Vue', signalType: 'scoped-attr', ... },
|
|
23
|
+
* // { technology: 'Nuxt', signalType: 'meta-generator', version: '3.8', ... }]
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function matchStructuralTechnologySignals(html: string, generator: string | null | undefined): TechnologySignalPartial[];
|