@nitpicker/archive 0.0.0 → 0.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +191 -0
- package/README.md +106 -0
- package/lib/apply-connection-pragmas.d.ts +18 -0
- package/lib/apply-connection-pragmas.js +40 -0
- package/lib/archive-accessor.d.ts +265 -0
- package/lib/archive-accessor.js +477 -0
- package/lib/archive-lock.d.ts +45 -0
- package/lib/archive-lock.js +154 -0
- package/lib/archive.d.ts +736 -0
- package/lib/archive.js +1055 -0
- package/lib/body-hash/compute-body-hash.d.ts +32 -0
- package/lib/body-hash/compute-body-hash.js +35 -0
- package/lib/cache/clear-archive-cache-entry.d.ts +18 -0
- package/lib/cache/clear-archive-cache-entry.js +24 -0
- package/lib/cache/clear-archive-cache-root.d.ts +26 -0
- package/lib/cache/clear-archive-cache-root.js +32 -0
- package/lib/cache/compute-archive-cache-key.d.ts +39 -0
- package/lib/cache/compute-archive-cache-key.js +95 -0
- package/lib/cache/extract-archive-to-cache.d.ts +57 -0
- package/lib/cache/extract-archive-to-cache.js +326 -0
- package/lib/cache/get-archive-cache-root.d.ts +20 -0
- package/lib/cache/get-archive-cache-root.js +53 -0
- package/lib/cache/is-archive-cache-disabled.d.ts +24 -0
- package/lib/cache/is-archive-cache-disabled.js +34 -0
- package/lib/cache/list-archive-cache-entries.d.ts +23 -0
- package/lib/cache/list-archive-cache-entries.js +130 -0
- package/lib/cache/path-exists.d.ts +9 -0
- package/lib/cache/path-exists.js +18 -0
- package/lib/cache/resolve-archive-cache-dir.d.ts +26 -0
- package/lib/cache/resolve-archive-cache-dir.js +32 -0
- package/lib/cache/types.d.ts +33 -0
- package/lib/cache/types.js +1 -0
- package/lib/content-type/is-html-content-type.d.ts +17 -0
- package/lib/content-type/is-html-content-type.js +19 -0
- package/lib/content-type/normalize-content-type.d.ts +14 -0
- package/lib/content-type/normalize-content-type.js +20 -0
- package/lib/create-adjunct-tables.d.ts +66 -0
- package/lib/create-adjunct-tables.js +510 -0
- package/lib/create-entity-tables.d.ts +191 -0
- package/lib/create-entity-tables.js +387 -0
- package/lib/create-progress-reporter.d.ts +30 -0
- package/lib/create-progress-reporter.js +38 -0
- package/lib/create-ref-tables.d.ts +35 -0
- package/lib/create-ref-tables.js +185 -0
- package/lib/create-template-tables.d.ts +28 -0
- package/lib/create-template-tables.js +92 -0
- package/lib/database.d.ts +549 -0
- package/lib/database.js +803 -0
- package/lib/db-ops/_shared/clear-write-ref-caches.d.ts +27 -0
- package/lib/db-ops/_shared/clear-write-ref-caches.js +35 -0
- package/lib/db-ops/_shared/compress-payload.d.ts +26 -0
- package/lib/db-ops/_shared/compress-payload.js +30 -0
- package/lib/db-ops/_shared/create-write-ref-caches.d.ts +17 -0
- package/lib/db-ops/_shared/create-write-ref-caches.js +27 -0
- package/lib/db-ops/_shared/decode-json-ref.d.ts +17 -0
- package/lib/db-ops/_shared/decode-json-ref.js +31 -0
- package/lib/db-ops/_shared/keyset-paginate-by-id.d.ts +49 -0
- package/lib/db-ops/_shared/keyset-paginate-by-id.js +69 -0
- package/lib/db-ops/_shared/load-response-headers-by-set-ids.d.ts +20 -0
- package/lib/db-ops/_shared/load-response-headers-by-set-ids.js +53 -0
- package/lib/db-ops/_shared/resolve-content-item-id.d.ts +62 -0
- package/lib/db-ops/_shared/resolve-content-item-id.js +143 -0
- package/lib/db-ops/_shared/resolve-url-or-blob.d.ts +23 -0
- package/lib/db-ops/_shared/resolve-url-or-blob.js +29 -0
- package/lib/db-ops/_shared/retry-setting.d.ts +16 -0
- package/lib/db-ops/_shared/retry-setting.js +18 -0
- package/lib/db-ops/_shared/safe-parse-json.d.ts +11 -0
- package/lib/db-ops/_shared/safe-parse-json.js +18 -0
- package/lib/db-ops/_shared/types.d.ts +94 -0
- package/lib/db-ops/_shared/types.js +1 -0
- package/lib/db-ops/_shared/upsert-blob-ref.d.ts +25 -0
- package/lib/db-ops/_shared/upsert-blob-ref.js +48 -0
- package/lib/db-ops/_shared/upsert-content-type-ref.d.ts +30 -0
- package/lib/db-ops/_shared/upsert-content-type-ref.js +45 -0
- package/lib/db-ops/_shared/upsert-json-ref.d.ts +22 -0
- package/lib/db-ops/_shared/upsert-json-ref.js +41 -0
- package/lib/db-ops/_shared/upsert-response-headers.d.ts +35 -0
- package/lib/db-ops/_shared/upsert-response-headers.js +49 -0
- package/lib/db-ops/_shared/upsert-url-ref.d.ts +39 -0
- package/lib/db-ops/_shared/upsert-url-ref.js +62 -0
- package/lib/db-ops/anchors/get-anchors-on-page.d.ts +10 -0
- package/lib/db-ops/anchors/get-anchors-on-page.js +21 -0
- package/lib/db-ops/config/get-base-url.d.ts +8 -0
- package/lib/db-ops/config/get-base-url.js +14 -0
- package/lib/db-ops/config/get-config.d.ts +10 -0
- package/lib/db-ops/config/get-config.js +29 -0
- package/lib/db-ops/config/get-created-cwd.d.ts +11 -0
- package/lib/db-ops/config/get-created-cwd.js +13 -0
- package/lib/db-ops/config/get-name.d.ts +8 -0
- package/lib/db-ops/config/get-name.js +14 -0
- package/lib/db-ops/config/info-column-allowlist.d.ts +7 -0
- package/lib/db-ops/config/info-column-allowlist.js +29 -0
- package/lib/db-ops/config/info-json-columns.d.ts +5 -0
- package/lib/db-ops/config/info-json-columns.js +11 -0
- package/lib/db-ops/config/set-config.d.ts +12 -0
- package/lib/db-ops/config/set-config.js +21 -0
- package/lib/db-ops/config/update-config.d.ts +17 -0
- package/lib/db-ops/config/update-config.js +36 -0
- package/lib/db-ops/console-logs/compute-console-log-hash.d.ts +19 -0
- package/lib/db-ops/console-logs/compute-console-log-hash.js +30 -0
- package/lib/db-ops/console-logs/replace-console-logs.d.ts +34 -0
- package/lib/db-ops/console-logs/replace-console-logs.js +123 -0
- package/lib/db-ops/console-logs/stringify-console-log-args.d.ts +16 -0
- package/lib/db-ops/console-logs/stringify-console-log-args.js +26 -0
- package/lib/db-ops/console-logs/types.d.ts +38 -0
- package/lib/db-ops/console-logs/types.js +1 -0
- package/lib/db-ops/console-logs/upsert-console-log-item.d.ts +29 -0
- package/lib/db-ops/console-logs/upsert-console-log-item.js +52 -0
- package/lib/db-ops/dedupe-cap/accumulate-dedupe-cap-rejected-count.d.ts +18 -0
- package/lib/db-ops/dedupe-cap/accumulate-dedupe-cap-rejected-count.js +23 -0
- package/lib/db-ops/dedupe-cap/finalize-dedupe-cap-event.d.ts +12 -0
- package/lib/db-ops/dedupe-cap/finalize-dedupe-cap-event.js +15 -0
- package/lib/db-ops/dedupe-cap/insert-dedupe-cap-event.d.ts +14 -0
- package/lib/db-ops/dedupe-cap/insert-dedupe-cap-event.js +30 -0
- package/lib/db-ops/dedupe-cap/list-dedupe-cap-observations.d.ts +57 -0
- package/lib/db-ops/dedupe-cap/list-dedupe-cap-observations.js +87 -0
- package/lib/db-ops/dedupe-cap/list-dedupe-cap-shape-keys.d.ts +21 -0
- package/lib/db-ops/dedupe-cap/list-dedupe-cap-shape-keys.js +27 -0
- package/lib/db-ops/errors/insert-crawl-error.d.ts +15 -0
- package/lib/db-ops/errors/insert-crawl-error.js +21 -0
- package/lib/db-ops/errors/insert-page-error.d.ts +21 -0
- package/lib/db-ops/errors/insert-page-error.js +30 -0
- package/lib/db-ops/errors/list-dns-burned-host-candidates.d.ts +33 -0
- package/lib/db-ops/errors/list-dns-burned-host-candidates.js +158 -0
- package/lib/db-ops/html/read-page-html-blob.d.ts +17 -0
- package/lib/db-ops/html/read-page-html-blob.js +20 -0
- package/lib/db-ops/lifecycle/checkpoint.d.ts +8 -0
- package/lib/db-ops/lifecycle/checkpoint.js +9 -0
- package/lib/db-ops/lifecycle/destroy.d.ts +6 -0
- package/lib/db-ops/lifecycle/destroy.js +7 -0
- package/lib/db-ops/lifecycle/init.d.ts +58 -0
- package/lib/db-ops/lifecycle/init.js +122 -0
- package/lib/db-ops/list-reconcile/record-list-reconcile-run.d.ts +22 -0
- package/lib/db-ops/list-reconcile/record-list-reconcile-run.js +41 -0
- package/lib/db-ops/meta/get-audios-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-audios-of-page.js +15 -0
- package/lib/db-ops/meta/get-buttons-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-buttons-of-page.js +15 -0
- package/lib/db-ops/meta/get-canvases-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-canvases-of-page.js +15 -0
- package/lib/db-ops/meta/get-custom-elements-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-custom-elements-of-page.js +15 -0
- package/lib/db-ops/meta/get-headings-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-headings-of-page.js +15 -0
- package/lib/db-ops/meta/get-iframes-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-iframes-of-page.js +15 -0
- package/lib/db-ops/meta/get-jsonld-of-page.d.ts +13 -0
- package/lib/db-ops/meta/get-jsonld-of-page.js +27 -0
- package/lib/db-ops/meta/get-main-content-images-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-main-content-images-of-page.js +15 -0
- package/lib/db-ops/meta/get-main-content-tables-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-main-content-tables-of-page.js +15 -0
- package/lib/db-ops/meta/get-page-technologies-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-page-technologies-of-page.js +15 -0
- package/lib/db-ops/meta/get-technology-signals-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-technology-signals-of-page.js +15 -0
- package/lib/db-ops/meta/get-videos-of-page.d.ts +11 -0
- package/lib/db-ops/meta/get-videos-of-page.js +15 -0
- package/lib/db-ops/outages/close-network-outage.d.ts +12 -0
- package/lib/db-ops/outages/close-network-outage.js +15 -0
- package/lib/db-ops/outages/close-stale-open-network-outages.d.ts +26 -0
- package/lib/db-ops/outages/close-stale-open-network-outages.js +42 -0
- package/lib/db-ops/outages/compute-outage-clamp-timestamp.d.ts +26 -0
- package/lib/db-ops/outages/compute-outage-clamp-timestamp.js +31 -0
- package/lib/db-ops/outages/insert-network-outage.d.ts +14 -0
- package/lib/db-ops/outages/insert-network-outage.js +29 -0
- package/lib/db-ops/outages/list-network-outages.d.ts +28 -0
- package/lib/db-ops/outages/list-network-outages.js +42 -0
- package/lib/db-ops/pages/order/set-url-order.d.ts +13 -0
- package/lib/db-ops/pages/order/set-url-order.js +38 -0
- package/lib/db-ops/pages/read/build-page-query.d.ts +18 -0
- package/lib/db-ops/pages/read/build-page-query.js +40 -0
- package/lib/db-ops/pages/read/get-crawling-state.d.ts +117 -0
- package/lib/db-ops/pages/read/get-crawling-state.js +161 -0
- package/lib/db-ops/pages/read/get-existing-page-urls.d.ts +15 -0
- package/lib/db-ops/pages/read/get-existing-page-urls.js +30 -0
- package/lib/db-ops/pages/read/get-page-count.d.ts +12 -0
- package/lib/db-ops/pages/read/get-page-count.js +21 -0
- package/lib/db-ops/pages/read/get-page-source-by-url.d.ts +24 -0
- package/lib/db-ops/pages/read/get-page-source-by-url.js +28 -0
- package/lib/db-ops/pages/read/get-pages-with-rels.d.ts +38 -0
- package/lib/db-ops/pages/read/get-pages-with-rels.js +107 -0
- package/lib/db-ops/pages/read/get-pages.d.ts +11 -0
- package/lib/db-ops/pages/read/get-pages.js +51 -0
- package/lib/db-ops/pages/read/get-scraped-html-page-count.d.ts +18 -0
- package/lib/db-ops/pages/read/get-scraped-html-page-count.js +25 -0
- package/lib/db-ops/pages/read/reconstruct-page-rows.d.ts +31 -0
- package/lib/db-ops/pages/read/reconstruct-page-rows.js +32 -0
- package/lib/db-ops/pages/reset/clear-page-derived-rows.d.ts +20 -0
- package/lib/db-ops/pages/reset/clear-page-derived-rows.js +37 -0
- package/lib/db-ops/pages/reset/repromote-external-pages.d.ts +30 -0
- package/lib/db-ops/pages/reset/repromote-external-pages.js +91 -0
- package/lib/db-ops/pages/reset/reset-failed-pages.d.ts +88 -0
- package/lib/db-ops/pages/reset/reset-failed-pages.js +216 -0
- package/lib/db-ops/pages/reset/reset-pages-by-urls.d.ts +80 -0
- package/lib/db-ops/pages/reset/reset-pages-by-urls.js +151 -0
- package/lib/db-ops/pages/reset/retryable-image-scan-codes.d.ts +24 -0
- package/lib/db-ops/pages/reset/retryable-image-scan-codes.js +24 -0
- package/lib/db-ops/pages/write/insert-audios.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-audios.js +25 -0
- package/lib/db-ops/pages/write/insert-buttons.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-buttons.js +29 -0
- package/lib/db-ops/pages/write/insert-canvases.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-canvases.js +26 -0
- package/lib/db-ops/pages/write/insert-custom-elements.d.ts +27 -0
- package/lib/db-ops/pages/write/insert-custom-elements.js +40 -0
- package/lib/db-ops/pages/write/insert-headings.d.ts +15 -0
- package/lib/db-ops/pages/write/insert-headings.js +27 -0
- package/lib/db-ops/pages/write/insert-iframes.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-iframes.js +28 -0
- package/lib/db-ops/pages/write/insert-inventory-content-items.d.ts +38 -0
- package/lib/db-ops/pages/write/insert-inventory-content-items.js +60 -0
- package/lib/db-ops/pages/write/insert-inventory-seeds.d.ts +36 -0
- package/lib/db-ops/pages/write/insert-inventory-seeds.js +48 -0
- package/lib/db-ops/pages/write/insert-inventory-skipped-pages.d.ts +42 -0
- package/lib/db-ops/pages/write/insert-inventory-skipped-pages.js +56 -0
- package/lib/db-ops/pages/write/insert-jsonld.d.ts +17 -0
- package/lib/db-ops/pages/write/insert-jsonld.js +49 -0
- package/lib/db-ops/pages/write/insert-main-content-images.d.ts +20 -0
- package/lib/db-ops/pages/write/insert-main-content-images.js +32 -0
- package/lib/db-ops/pages/write/insert-main-content-tables.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-main-content-tables.js +29 -0
- package/lib/db-ops/pages/write/insert-page.d.ts +56 -0
- package/lib/db-ops/pages/write/insert-page.js +259 -0
- package/lib/db-ops/pages/write/insert-technologies.d.ts +25 -0
- package/lib/db-ops/pages/write/insert-technologies.js +45 -0
- package/lib/db-ops/pages/write/insert-videos.d.ts +14 -0
- package/lib/db-ops/pages/write/insert-videos.js +28 -0
- package/lib/db-ops/pages/write/link-redirect-sources.d.ts +42 -0
- package/lib/db-ops/pages/write/link-redirect-sources.js +101 -0
- package/lib/db-ops/pages/write/record-redirect.d.ts +35 -0
- package/lib/db-ops/pages/write/record-redirect.js +100 -0
- package/lib/db-ops/pages/write/set-skipped-page.d.ts +13 -0
- package/lib/db-ops/pages/write/set-skipped-page.js +24 -0
- package/lib/db-ops/pages/write/update-page.d.ts +40 -0
- package/lib/db-ops/pages/write/update-page.js +419 -0
- package/lib/db-ops/pages/write/write-page-html-blob.d.ts +19 -0
- package/lib/db-ops/pages/write/write-page-html-blob.js +41 -0
- package/lib/db-ops/referrers/get-redirects-for-pages.d.ts +9 -0
- package/lib/db-ops/referrers/get-redirects-for-pages.js +15 -0
- package/lib/db-ops/referrers/get-referrers-of-page.d.ts +17 -0
- package/lib/db-ops/referrers/get-referrers-of-page.js +32 -0
- package/lib/db-ops/referrers/get-referrers-of-resource.d.ts +8 -0
- package/lib/db-ops/referrers/get-referrers-of-resource.js +15 -0
- package/lib/db-ops/resources/build-resource-query.d.ts +25 -0
- package/lib/db-ops/resources/build-resource-query.js +29 -0
- package/lib/db-ops/resources/get-existing-resource-urls.d.ts +9 -0
- package/lib/db-ops/resources/get-existing-resource-urls.js +24 -0
- package/lib/db-ops/resources/get-resource-by-url.d.ts +13 -0
- package/lib/db-ops/resources/get-resource-by-url.js +22 -0
- package/lib/db-ops/resources/get-resource-url-list.d.ts +17 -0
- package/lib/db-ops/resources/get-resource-url-list.js +26 -0
- package/lib/db-ops/resources/get-resources.d.ts +8 -0
- package/lib/db-ops/resources/get-resources.js +11 -0
- package/lib/db-ops/resources/insert-inventory-resources.d.ts +24 -0
- package/lib/db-ops/resources/insert-inventory-resources.js +64 -0
- package/lib/db-ops/resources/insert-resource-referrers.d.ts +15 -0
- package/lib/db-ops/resources/insert-resource-referrers.js +54 -0
- package/lib/db-ops/resources/insert-resource.d.ts +34 -0
- package/lib/db-ops/resources/insert-resource.js +73 -0
- package/lib/db-ops/resources/reconstruct-resource-rows.d.ts +26 -0
- package/lib/db-ops/resources/reconstruct-resource-rows.js +30 -0
- package/lib/db-ops/templates/assign-template-labels.d.ts +60 -0
- package/lib/db-ops/templates/assign-template-labels.js +187 -0
- package/lib/db-ops/templates/replace-page-templates.d.ts +44 -0
- package/lib/db-ops/templates/replace-page-templates.js +174 -0
- package/lib/db-ops/templates/serialize-template-cluster-reason.d.ts +16 -0
- package/lib/db-ops/templates/serialize-template-cluster-reason.js +17 -0
- package/lib/db-ops/templates/types.d.ts +103 -0
- package/lib/db-ops/templates/types.js +1 -0
- package/lib/debug.d.ts +8 -0
- package/lib/debug.js +9 -0
- package/lib/decode-html-blob.d.ts +20 -0
- package/lib/decode-html-blob.js +23 -0
- package/lib/decode-page-html-blob-bytes.d.ts +25 -0
- package/lib/decode-page-html-blob-bytes.js +29 -0
- package/lib/decode-stored-blob-bytes.d.ts +25 -0
- package/lib/decode-stored-blob-bytes.js +47 -0
- package/lib/derive-lineage-from-parent.d.ts +37 -0
- package/lib/derive-lineage-from-parent.js +42 -0
- package/lib/drop-legacy-tables.d.ts +45 -0
- package/lib/drop-legacy-tables.js +56 -0
- package/lib/error-kind/classify-error-kind.d.ts +20 -0
- package/lib/error-kind/classify-error-kind.js +136 -0
- package/lib/error-kind/network-related-error-kinds.d.ts +23 -0
- package/lib/error-kind/network-related-error-kinds.js +28 -0
- package/lib/error-kind/permanent-error-kinds.d.ts +48 -0
- package/lib/error-kind/permanent-error-kinds.js +54 -0
- package/lib/error-kind/types.d.ts +54 -0
- package/lib/error-kind/types.js +1 -0
- package/lib/filesystem/append-text.d.ts +9 -0
- package/lib/filesystem/append-text.js +14 -0
- package/lib/filesystem/copy-dir-sync.d.ts +6 -0
- package/lib/filesystem/copy-dir-sync.js +9 -0
- package/lib/filesystem/copy-dir.d.ts +7 -0
- package/lib/filesystem/copy-dir.js +13 -0
- package/lib/filesystem/copy-file-with-progress.d.ts +20 -0
- package/lib/filesystem/copy-file-with-progress.js +34 -0
- package/lib/filesystem/exists.d.ts +6 -0
- package/lib/filesystem/exists.js +9 -0
- package/lib/filesystem/get-file-list.d.ts +8 -0
- package/lib/filesystem/get-file-list.js +12 -0
- package/lib/filesystem/is-dir.d.ts +6 -0
- package/lib/filesystem/is-dir.js +10 -0
- package/lib/filesystem/mkdir.d.ts +8 -0
- package/lib/filesystem/mkdir.js +15 -0
- package/lib/filesystem/output-binary.d.ts +12 -0
- package/lib/filesystem/output-binary.js +17 -0
- package/lib/filesystem/output-json.d.ts +9 -0
- package/lib/filesystem/output-json.js +14 -0
- package/lib/filesystem/output-text.d.ts +11 -0
- package/lib/filesystem/output-text.js +32 -0
- package/lib/filesystem/parse-pax-path.d.ts +18 -0
- package/lib/filesystem/parse-pax-path.js +45 -0
- package/lib/filesystem/parse-tar-size-field.d.ts +13 -0
- package/lib/filesystem/parse-tar-size-field.js +37 -0
- package/lib/filesystem/peek-tar-top-dir.d.ts +35 -0
- package/lib/filesystem/peek-tar-top-dir.js +215 -0
- package/lib/filesystem/read-json.d.ts +7 -0
- package/lib/filesystem/read-json.js +11 -0
- package/lib/filesystem/read-text.d.ts +6 -0
- package/lib/filesystem/read-text.js +10 -0
- package/lib/filesystem/readline.d.ts +11 -0
- package/lib/filesystem/readline.js +26 -0
- package/lib/filesystem/remove.d.ts +5 -0
- package/lib/filesystem/remove.js +10 -0
- package/lib/filesystem/rename.d.ts +16 -0
- package/lib/filesystem/rename.js +48 -0
- package/lib/filesystem/tar.d.ts +23 -0
- package/lib/filesystem/tar.js +78 -0
- package/lib/filesystem/untar.d.ts +33 -0
- package/lib/filesystem/untar.js +84 -0
- package/lib/get-failed-page-messages.d.ts +56 -0
- package/lib/get-failed-page-messages.js +146 -0
- package/lib/get-json.d.ts +10 -0
- package/lib/get-json.js +25 -0
- package/lib/html-snapshot/match-selector-html.d.ts +25 -0
- package/lib/html-snapshot/match-selector-html.js +28 -0
- package/lib/html-snapshot/match-selector-snapshots.d.ts +33 -0
- package/lib/html-snapshot/match-selector-snapshots.js +33 -0
- package/lib/html-snapshot/search-html-document.d.ts +29 -0
- package/lib/html-snapshot/search-html-document.js +27 -0
- package/lib/html-snapshot/search-html-snapshots.d.ts +36 -0
- package/lib/html-snapshot/search-html-snapshots.js +35 -0
- package/lib/html-snapshot/types.d.ts +111 -0
- package/lib/html-snapshot/types.js +7 -0
- package/lib/html-snapshot/validate-search-pattern.d.ts +15 -0
- package/lib/html-snapshot/validate-search-pattern.js +17 -0
- package/lib/init-schema.d.ts +48 -0
- package/lib/init-schema.js +124 -0
- package/lib/is-inventory-source.d.ts +21 -0
- package/lib/is-inventory-source.js +22 -0
- package/lib/is-within-outage-window.d.ts +49 -0
- package/lib/is-within-outage-window.js +33 -0
- package/lib/isolated-cluster/create-isolated-cluster-run.d.ts +24 -0
- package/lib/isolated-cluster/create-isolated-cluster-run.js +26 -0
- package/lib/libsql-dialect.d.ts +115 -0
- package/lib/libsql-dialect.js +116 -0
- package/lib/limited-page-ids.d.ts +9 -0
- package/lib/limited-page-ids.js +18 -0
- package/lib/meta/assert-compatible-version.d.ts +60 -0
- package/lib/meta/assert-compatible-version.js +93 -0
- package/lib/meta/classify-jsonld-type.d.ts +23 -0
- package/lib/meta/classify-jsonld-type.js +43 -0
- package/lib/meta/compare-semver.d.ts +23 -0
- package/lib/meta/compare-semver.js +51 -0
- package/lib/meta/compute-main-contents-denormalized.d.ts +41 -0
- package/lib/meta/compute-main-contents-denormalized.js +88 -0
- package/lib/meta/compute-page-denormalized.d.ts +20 -0
- package/lib/meta/compute-page-denormalized.js +35 -0
- package/lib/meta/derive-flat-from-meta.d.ts +34 -0
- package/lib/meta/derive-flat-from-meta.js +158 -0
- package/lib/meta/derive-meta-extras.d.ts +20 -0
- package/lib/meta/derive-meta-extras.js +23 -0
- package/lib/meta/extract-tags-for-archive.d.ts +17 -0
- package/lib/meta/extract-tags-for-archive.js +36 -0
- package/lib/meta/parse-main-content-class-list.d.ts +19 -0
- package/lib/meta/parse-main-content-class-list.js +34 -0
- package/lib/meta/summarize-jsonld.d.ts +17 -0
- package/lib/meta/summarize-jsonld.js +29 -0
- package/lib/meta/technologies/combine-technology-confidence.d.ts +46 -0
- package/lib/meta/technologies/combine-technology-confidence.js +93 -0
- package/lib/meta/technologies/convert-legacy-page-tags-to-inserts.d.ts +45 -0
- package/lib/meta/technologies/convert-legacy-page-tags-to-inserts.js +53 -0
- package/lib/meta/technologies/convert-tag-row-to-wappalyzer-signal.d.ts +33 -0
- package/lib/meta/technologies/convert-tag-row-to-wappalyzer-signal.js +46 -0
- package/lib/meta/technologies/extract-technologies-for-archive.d.ts +33 -0
- package/lib/meta/technologies/extract-technologies-for-archive.js +30 -0
- package/lib/meta/technologies/match-js-license-comment-signal.d.ts +21 -0
- package/lib/meta/technologies/match-js-license-comment-signal.js +23 -0
- package/lib/meta/technologies/match-structural-technology-signals.d.ts +26 -0
- package/lib/meta/technologies/match-structural-technology-signals.js +48 -0
- package/lib/meta/technologies/normalize-wappalyzer-entries.d.ts +25 -0
- package/lib/meta/technologies/normalize-wappalyzer-entries.js +35 -0
- package/lib/meta/technologies/technology-signal-definitions.d.ts +44 -0
- package/lib/meta/technologies/technology-signal-definitions.js +60 -0
- package/lib/meta/technologies/types.d.ts +70 -0
- package/lib/meta/technologies/types.js +13 -0
- package/lib/meta/types.d.ts +1490 -0
- package/lib/meta/types.js +65 -0
- package/lib/migrate-content-items-alias-of-id.d.ts +52 -0
- package/lib/migrate-content-items-alias-of-id.js +69 -0
- package/lib/migrate-content-items-dedupe-cap-event-id.d.ts +46 -0
- package/lib/migrate-content-items-dedupe-cap-event-id.js +62 -0
- package/lib/migrate-content-items-is-metadata-only.d.ts +44 -0
- package/lib/migrate-content-items-is-metadata-only.js +60 -0
- package/lib/migrate-entity-tables.d.ts +55 -0
- package/lib/migrate-entity-tables.js +66 -0
- package/lib/migrate-info-created-cwd.d.ts +17 -0
- package/lib/migrate-info-created-cwd.js +36 -0
- package/lib/migrate-info-main-content-selector.d.ts +16 -0
- package/lib/migrate-info-main-content-selector.js +35 -0
- package/lib/migrate-info-request-header-names.d.ts +16 -0
- package/lib/migrate-info-request-header-names.js +35 -0
- package/lib/migrate-info-roots.d.ts +20 -0
- package/lib/migrate-info-roots.js +52 -0
- package/lib/migrate-inventory-runs-to-list-reconcile-runs.d.ts +34 -0
- package/lib/migrate-inventory-runs-to-list-reconcile-runs.js +51 -0
- package/lib/migrate-list-reconcile-runs-exclude-skipped.d.ts +25 -0
- package/lib/migrate-list-reconcile-runs-exclude-skipped.js +44 -0
- package/lib/migrate-list-reconcile-runs-invalid-skipped.d.ts +16 -0
- package/lib/migrate-list-reconcile-runs-invalid-skipped.js +35 -0
- package/lib/migrate-main-contents-columns.d.ts +26 -0
- package/lib/migrate-main-contents-columns.js +61 -0
- package/lib/migrate-page-meta-body-hash.d.ts +44 -0
- package/lib/migrate-page-meta-body-hash.js +63 -0
- package/lib/migrate-page-meta-console-error-count.d.ts +27 -0
- package/lib/migrate-page-meta-console-error-count.js +45 -0
- package/lib/migrate-page-meta-custom-element-count.d.ts +33 -0
- package/lib/migrate-page-meta-custom-element-count.js +51 -0
- package/lib/migrate-page-meta-image-scan.d.ts +27 -0
- package/lib/migrate-page-meta-image-scan.js +52 -0
- package/lib/migrate-page-tags-to-page-technologies.d.ts +39 -0
- package/lib/migrate-page-tags-to-page-technologies.js +79 -0
- package/lib/migrate-ref-tables.d.ts +25 -0
- package/lib/migrate-ref-tables.js +38 -0
- package/lib/native-executor/check-native-executor-config.d.ts +17 -0
- package/lib/native-executor/check-native-executor-config.js +20 -0
- package/lib/page-meta-column-maps.d.ts +32 -0
- package/lib/page-meta-column-maps.js +43 -0
- package/lib/page.d.ts +546 -0
- package/lib/page.js +764 -0
- package/lib/peek-archive-lock.d.ts +40 -0
- package/lib/peek-archive-lock.js +62 -0
- package/lib/populate-entity-tables/collapse-anchor-rows.d.ts +41 -0
- package/lib/populate-entity-tables/collapse-anchor-rows.js +87 -0
- package/lib/populate-entity-tables/derive-dom-path.d.ts +35 -0
- package/lib/populate-entity-tables/derive-dom-path.js +72 -0
- package/lib/populate-entity-tables/is-blob-ref-value.d.ts +16 -0
- package/lib/populate-entity-tables/is-blob-ref-value.js +19 -0
- package/lib/populate-entity-tables/match-images-to-dom-paths.d.ts +66 -0
- package/lib/populate-entity-tables/match-images-to-dom-paths.js +96 -0
- package/lib/populate-entity-tables/populate-anchor-edges.d.ts +33 -0
- package/lib/populate-entity-tables/populate-anchor-edges.js +153 -0
- package/lib/populate-entity-tables/populate-content-items.d.ts +40 -0
- package/lib/populate-entity-tables/populate-content-items.js +141 -0
- package/lib/populate-entity-tables/populate-entities.d.ts +81 -0
- package/lib/populate-entity-tables/populate-entities.js +110 -0
- package/lib/populate-entity-tables/populate-image-items.d.ts +91 -0
- package/lib/populate-entity-tables/populate-image-items.js +226 -0
- package/lib/populate-entity-tables/populate-page-meta.d.ts +33 -0
- package/lib/populate-entity-tables/populate-page-meta.js +267 -0
- package/lib/populate-entity-tables/populate-resource-items.d.ts +22 -0
- package/lib/populate-entity-tables/populate-resource-items.js +114 -0
- package/lib/populate-entity-tables/populate-resource-ref-edges.d.ts +31 -0
- package/lib/populate-entity-tables/populate-resource-ref-edges.js +33 -0
- package/lib/populate-entity-tables/resolve-blob-refs.d.ts +31 -0
- package/lib/populate-entity-tables/resolve-blob-refs.js +100 -0
- package/lib/populate-entity-tables/resolve-content-type-refs.d.ts +22 -0
- package/lib/populate-entity-tables/resolve-content-type-refs.js +27 -0
- package/lib/populate-entity-tables/resolve-header-sets.d.ts +49 -0
- package/lib/populate-entity-tables/resolve-header-sets.js +122 -0
- package/lib/populate-entity-tables/resolve-json-refs.d.ts +25 -0
- package/lib/populate-entity-tables/resolve-json-refs.js +67 -0
- package/lib/populate-entity-tables/resolve-text-refs.d.ts +30 -0
- package/lib/populate-entity-tables/resolve-text-refs.js +61 -0
- package/lib/populate-entity-tables/resolve-url-or-blob-from-maps.d.ts +21 -0
- package/lib/populate-entity-tables/resolve-url-or-blob-from-maps.js +27 -0
- package/lib/populate-entity-tables/resolve-url-refs.d.ts +33 -0
- package/lib/populate-entity-tables/resolve-url-refs.js +60 -0
- package/lib/populate-entity-tables/test-utils/count-rows.d.ts +17 -0
- package/lib/populate-entity-tables/test-utils/count-rows.js +20 -0
- package/lib/populate-entity-tables/test-utils/seed-content-items.d.ts +25 -0
- package/lib/populate-entity-tables/test-utils/seed-content-items.js +42 -0
- package/lib/populate-entity-tables/test-utils/setup-entities-db.d.ts +30 -0
- package/lib/populate-entity-tables/test-utils/setup-entities-db.js +175 -0
- package/lib/populate-entity-tables/types.d.ts +157 -0
- package/lib/populate-entity-tables/types.js +12 -0
- package/lib/populate-entity-tables/upsert-text-refs.d.ts +38 -0
- package/lib/populate-entity-tables/upsert-text-refs.js +78 -0
- package/lib/populate-ref-tables/classify-content-type.d.ts +16 -0
- package/lib/populate-ref-tables/classify-content-type.js +52 -0
- package/lib/populate-ref-tables/compute-content-hash.d.ts +22 -0
- package/lib/populate-ref-tables/compute-content-hash.js +26 -0
- package/lib/populate-ref-tables/compute-header-flags.d.ts +16 -0
- package/lib/populate-ref-tables/compute-header-flags.js +70 -0
- package/lib/populate-ref-tables/content-type-rules.d.ts +38 -0
- package/lib/populate-ref-tables/content-type-rules.js +133 -0
- package/lib/populate-ref-tables/create-header-table-caches.d.ts +25 -0
- package/lib/populate-ref-tables/create-header-table-caches.js +49 -0
- package/lib/populate-ref-tables/data-uri-url-refs-limit.d.ts +15 -0
- package/lib/populate-ref-tables/data-uri-url-refs-limit.js +15 -0
- package/lib/populate-ref-tables/decode-data-uri.d.ts +21 -0
- package/lib/populate-ref-tables/decode-data-uri.js +126 -0
- package/lib/populate-ref-tables/decompose-header-set.d.ts +29 -0
- package/lib/populate-ref-tables/decompose-header-set.js +157 -0
- package/lib/populate-ref-tables/decompose-url.d.ts +25 -0
- package/lib/populate-ref-tables/decompose-url.js +70 -0
- package/lib/populate-ref-tables/header-stability.d.ts +19 -0
- package/lib/populate-ref-tables/header-stability.js +22 -0
- package/lib/populate-ref-tables/header-value-cache-key.d.ts +17 -0
- package/lib/populate-ref-tables/header-value-cache-key.js +19 -0
- package/lib/populate-ref-tables/normalize-mime.d.ts +24 -0
- package/lib/populate-ref-tables/normalize-mime.js +36 -0
- package/lib/populate-ref-tables/populate-blob-refs.d.ts +38 -0
- package/lib/populate-ref-tables/populate-blob-refs.js +134 -0
- package/lib/populate-ref-tables/populate-content-type-refs.d.ts +27 -0
- package/lib/populate-ref-tables/populate-content-type-refs.js +70 -0
- package/lib/populate-ref-tables/populate-header-tables.d.ts +35 -0
- package/lib/populate-ref-tables/populate-header-tables.js +80 -0
- package/lib/populate-ref-tables/populate-json-refs.d.ts +29 -0
- package/lib/populate-ref-tables/populate-json-refs.js +101 -0
- package/lib/populate-ref-tables/populate-refs.d.ts +51 -0
- package/lib/populate-ref-tables/populate-refs.js +62 -0
- package/lib/populate-ref-tables/populate-text-refs.d.ts +32 -0
- package/lib/populate-ref-tables/populate-text-refs.js +133 -0
- package/lib/populate-ref-tables/populate-url-refs.d.ts +28 -0
- package/lib/populate-ref-tables/populate-url-refs.js +148 -0
- package/lib/populate-ref-tables/test-utils/count-rows.d.ts +15 -0
- package/lib/populate-ref-tables/test-utils/count-rows.js +17 -0
- package/lib/populate-ref-tables/types.d.ts +197 -0
- package/lib/populate-ref-tables/types.js +7 -0
- package/lib/populate-ref-tables/upsert-one-header-set.d.ts +34 -0
- package/lib/populate-ref-tables/upsert-one-header-set.js +208 -0
- package/lib/populate-ref-tables/volatile-header-names.d.ts +20 -0
- package/lib/populate-ref-tables/volatile-header-names.js +33 -0
- package/lib/redirect-table.d.ts +9 -0
- package/lib/redirect-table.js +28 -0
- package/lib/release-finished-statements.d.ts +42 -0
- package/lib/release-finished-statements.js +45 -0
- package/lib/resolve-redirect-chain.d.ts +33 -0
- package/lib/resolve-redirect-chain.js +27 -0
- package/lib/resource.d.ts +46 -0
- package/lib/resource.js +62 -0
- package/lib/retarget-legacy-fk-tables.d.ts +61 -0
- package/lib/retarget-legacy-fk-tables.js +137 -0
- package/lib/safe-path.d.ts +9 -0
- package/lib/safe-path.js +17 -0
- package/lib/scope/build-scope-map.d.ts +21 -0
- package/lib/scope/build-scope-map.js +32 -0
- package/lib/scope/find-scope-entry.d.ts +25 -0
- package/lib/scope/find-scope-entry.js +45 -0
- package/lib/template-classification/classify-archive-page-templates.d.ts +42 -0
- package/lib/template-classification/classify-archive-page-templates.js +70 -0
- package/lib/template-classification/classify-page-templates.d.ts +33 -0
- package/lib/template-classification/classify-page-templates.js +60 -0
- package/lib/template-classification/collect-page-ids-with-html.d.ts +24 -0
- package/lib/template-classification/collect-page-ids-with-html.js +30 -0
- package/lib/template-classification/collect-page-stylesheet-urls.d.ts +32 -0
- package/lib/template-classification/collect-page-stylesheet-urls.js +132 -0
- package/lib/template-classification/create-content-root-hint.d.ts +41 -0
- package/lib/template-classification/create-content-root-hint.js +51 -0
- package/lib/template-classification/create-page-cluster-factory.d.ts +36 -0
- package/lib/template-classification/create-page-cluster-factory.js +52 -0
- package/lib/template-classification/load-page-cluster-candidates.d.ts +32 -0
- package/lib/template-classification/load-page-cluster-candidates.js +93 -0
- package/lib/template-classification/page-cluster/resolve-page-cluster-keys.d.ts +34 -0
- package/lib/template-classification/page-cluster/resolve-page-cluster-keys.js +236 -0
- package/lib/template-classification/page-cluster/types.d.ts +123 -0
- package/lib/template-classification/page-cluster/types.js +1 -0
- package/lib/template-classification/types.d.ts +234 -0
- package/lib/template-classification/types.js +1 -0
- package/lib/test-utils/build-full-schema-test-db.d.ts +34 -0
- package/lib/test-utils/build-full-schema-test-db.js +74 -0
- package/lib/test-utils/compare-strings.d.ts +12 -0
- package/lib/test-utils/compare-strings.js +14 -0
- package/lib/test-utils/create-legacy-analysis-tables.d.ts +13 -0
- package/lib/test-utils/create-legacy-analysis-tables.js +37 -0
- package/lib/test-utils/fk-parent-tables.d.ts +15 -0
- package/lib/test-utils/fk-parent-tables.js +19 -0
- package/lib/test-utils/seed-content-item.d.ts +35 -0
- package/lib/test-utils/seed-content-item.js +42 -0
- package/lib/test-utils/setup-legacy-fk-db.d.ts +34 -0
- package/lib/test-utils/setup-legacy-fk-db.js +271 -0
- package/lib/transfer/attach-source-database.d.ts +31 -0
- package/lib/transfer/attach-source-database.js +40 -0
- package/lib/transfer/build-split-config.d.ts +30 -0
- package/lib/transfer/build-split-config.js +42 -0
- package/lib/transfer/clear-replaced-page-rows.d.ts +23 -0
- package/lib/transfer/clear-replaced-page-rows.js +61 -0
- package/lib/transfer/concat-archives.d.ts +55 -0
- package/lib/transfer/concat-archives.js +95 -0
- package/lib/transfer/concat-source-transfer-phases.d.ts +10 -0
- package/lib/transfer/concat-source-transfer-phases.js +17 -0
- package/lib/transfer/content-item-rank-sql.d.ts +21 -0
- package/lib/transfer/content-item-rank-sql.js +23 -0
- package/lib/transfer/copy-anchor-edges.d.ts +28 -0
- package/lib/transfer/copy-anchor-edges.js +42 -0
- package/lib/transfer/copy-dictionaries-for-concat.d.ts +39 -0
- package/lib/transfer/copy-dictionaries-for-concat.js +81 -0
- package/lib/transfer/copy-dictionaries-for-split.d.ts +29 -0
- package/lib/transfer/copy-dictionaries-for-split.js +224 -0
- package/lib/transfer/copy-header-set-children.d.ts +27 -0
- package/lib/transfer/copy-header-set-children.js +51 -0
- package/lib/transfer/copy-image-items.d.ts +21 -0
- package/lib/transfer/copy-image-items.js +62 -0
- package/lib/transfer/copy-inventory-source-lists.d.ts +30 -0
- package/lib/transfer/copy-inventory-source-lists.js +61 -0
- package/lib/transfer/copy-journal-tables.d.ts +30 -0
- package/lib/transfer/copy-journal-tables.js +56 -0
- package/lib/transfer/copy-page-console-logs.d.ts +16 -0
- package/lib/transfer/copy-page-console-logs.js +27 -0
- package/lib/transfer/copy-page-html-blobs.d.ts +31 -0
- package/lib/transfer/copy-page-html-blobs.js +43 -0
- package/lib/transfer/copy-page-meta.d.ts +27 -0
- package/lib/transfer/copy-page-meta.js +68 -0
- package/lib/transfer/copy-page-template-clusters.d.ts +31 -0
- package/lib/transfer/copy-page-template-clusters.js +56 -0
- package/lib/transfer/copy-page-template-labels.d.ts +34 -0
- package/lib/transfer/copy-page-template-labels.js +88 -0
- package/lib/transfer/copy-resource-items.d.ts +29 -0
- package/lib/transfer/copy-resource-items.js +89 -0
- package/lib/transfer/copy-resource-ref-edges.d.ts +20 -0
- package/lib/transfer/copy-resource-ref-edges.js +33 -0
- package/lib/transfer/copy-simple-page-scoped-tables.d.ts +15 -0
- package/lib/transfer/copy-simple-page-scoped-tables.js +34 -0
- package/lib/transfer/count-external-pages-in-scope.d.ts +26 -0
- package/lib/transfer/count-external-pages-in-scope.js +40 -0
- package/lib/transfer/create-transfer-temp-tables.d.ts +30 -0
- package/lib/transfer/create-transfer-temp-tables.js +59 -0
- package/lib/transfer/dictionary-copy-specs.d.ts +32 -0
- package/lib/transfer/dictionary-copy-specs.js +28 -0
- package/lib/transfer/drop-transfer-temp-tables.d.ts +9 -0
- package/lib/transfer/drop-transfer-temp-tables.js +18 -0
- package/lib/transfer/flatten-redirect-chains.d.ts +44 -0
- package/lib/transfer/flatten-redirect-chains.js +74 -0
- package/lib/transfer/insert-content-items.d.ts +35 -0
- package/lib/transfer/insert-content-items.js +116 -0
- package/lib/transfer/list-transfer-columns.d.ts +35 -0
- package/lib/transfer/list-transfer-columns.js +45 -0
- package/lib/transfer/mark-in-scope-content-items.d.ts +31 -0
- package/lib/transfer/mark-in-scope-content-items.js +54 -0
- package/lib/transfer/merge-archive-configs.d.ts +51 -0
- package/lib/transfer/merge-archive-configs.js +85 -0
- package/lib/transfer/plan-content-items-for-concat.d.ts +33 -0
- package/lib/transfer/plan-content-items-for-concat.js +51 -0
- package/lib/transfer/plan-content-items-for-split.d.ts +42 -0
- package/lib/transfer/plan-content-items-for-split.js +83 -0
- package/lib/transfer/plan-resource-items.d.ts +40 -0
- package/lib/transfer/plan-resource-items.js +69 -0
- package/lib/transfer/quote-transfer-identifier.d.ts +18 -0
- package/lib/transfer/quote-transfer-identifier.js +20 -0
- package/lib/transfer/reclassify-resource-externality.d.ts +37 -0
- package/lib/transfer/reclassify-resource-externality.js +66 -0
- package/lib/transfer/remap-redirect-dest-ids.d.ts +34 -0
- package/lib/transfer/remap-redirect-dest-ids.js +51 -0
- package/lib/transfer/replace-content-items.d.ts +39 -0
- package/lib/transfer/replace-content-items.js +83 -0
- package/lib/transfer/simple-page-scoped-tables.d.ts +25 -0
- package/lib/transfer/simple-page-scoped-tables.js +38 -0
- package/lib/transfer/split-archive.d.ts +55 -0
- package/lib/transfer/split-archive.js +98 -0
- package/lib/transfer/split-source-transfer-phases.d.ts +11 -0
- package/lib/transfer/split-source-transfer-phases.js +18 -0
- package/lib/transfer/transfer-action.d.ts +34 -0
- package/lib/transfer/transfer-action.js +32 -0
- package/lib/transfer/transfer-archive-rows.d.ts +65 -0
- package/lib/transfer/transfer-archive-rows.js +156 -0
- package/lib/transfer/transfer-dictionary-tables.d.ts +12 -0
- package/lib/transfer/transfer-dictionary-tables.js +22 -0
- package/lib/transfer/transfer-post-phases.d.ts +10 -0
- package/lib/transfer/transfer-post-phases.js +13 -0
- package/lib/transfer/transfer-source-alias.d.ts +9 -0
- package/lib/transfer/transfer-source-alias.js +9 -0
- package/lib/transfer/types.d.ts +111 -0
- package/lib/transfer/types.js +35 -0
- package/lib/types.d.ts +772 -0
- package/lib/types.js +1 -0
- package/lib/url-alias/compute-tier-a-alias-key.d.ts +44 -0
- package/lib/url-alias/compute-tier-a-alias-key.js +47 -0
- package/lib/url-alias/compute-tier-b-alias-key.d.ts +23 -0
- package/lib/url-alias/compute-tier-b-alias-key.js +26 -0
- package/lib/url-alias/group-alias-candidates.d.ts +27 -0
- package/lib/url-alias/group-alias-candidates.js +29 -0
- package/lib/url-alias/types.d.ts +12 -0
- package/lib/url-alias/types.js +1 -0
- package/lib/url-pattern/compute-shape-key.d.ts +58 -0
- package/lib/url-pattern/compute-shape-key.js +129 -0
- package/lib/url-pattern/decompose-url.d.ts +33 -0
- package/lib/url-pattern/decompose-url.js +79 -0
- package/lib/url-pattern/reconstruct-url.d.ts +15 -0
- package/lib/url-pattern/reconstruct-url.js +33 -0
- package/lib/url-sort/compute-url-sort-ranks.d.ts +30 -0
- package/lib/url-sort/compute-url-sort-ranks.js +33 -0
- package/lib/utils/array/each-splitted.d.ts +10 -0
- package/lib/utils/array/each-splitted.js +14 -0
- package/lib/utils/debug.d.ts +8 -0
- package/lib/utils/debug.js +8 -0
- package/lib/utils/error/emit-error-with-retry.d.ts +40 -0
- package/lib/utils/error/emit-error-with-retry.js +44 -0
- package/lib/utils/error/emit-error.d.ts +39 -0
- package/lib/utils/error/emit-error.js +41 -0
- package/lib/utils/object/parse-response-headers.d.ts +12 -0
- package/lib/utils/object/parse-response-headers.js +26 -0
- package/lib/utils/object/redact-request-headers.d.ts +15 -0
- package/lib/utils/object/redact-request-headers.js +27 -0
- package/lib/utils/types/types.d.ts +383 -0
- package/lib/utils/types/types.js +1 -0
- package/lib/verify-migration/capture-rejection.d.ts +24 -0
- package/lib/verify-migration/capture-rejection.js +31 -0
- package/lib/verify-migration/check-anchor-edges-count.d.ts +34 -0
- package/lib/verify-migration/check-anchor-edges-count.js +72 -0
- package/lib/verify-migration/check-anchor-edges-sum.d.ts +13 -0
- package/lib/verify-migration/check-anchor-edges-sum.js +27 -0
- package/lib/verify-migration/check-content-items-count.d.ts +16 -0
- package/lib/verify-migration/check-content-items-count.js +30 -0
- package/lib/verify-migration/check-content-type-preservation.d.ts +22 -0
- package/lib/verify-migration/check-content-type-preservation.js +40 -0
- package/lib/verify-migration/check-foreign-key-integrity.d.ts +31 -0
- package/lib/verify-migration/check-foreign-key-integrity.js +47 -0
- package/lib/verify-migration/check-image-items-count.d.ts +12 -0
- package/lib/verify-migration/check-image-items-count.js +26 -0
- package/lib/verify-migration/check-page-meta-count.d.ts +15 -0
- package/lib/verify-migration/check-page-meta-count.js +31 -0
- package/lib/verify-migration/check-reader-parity.d.ts +23 -0
- package/lib/verify-migration/check-reader-parity.js +182 -0
- package/lib/verify-migration/check-resource-items-count.d.ts +17 -0
- package/lib/verify-migration/check-resource-items-count.js +33 -0
- package/lib/verify-migration/check-url-round-trip.d.ts +43 -0
- package/lib/verify-migration/check-url-round-trip.js +112 -0
- package/lib/verify-migration/types.d.ts +70 -0
- package/lib/verify-migration/types.js +63 -0
- package/lib/verify-migration/verify-migration.d.ts +41 -0
- package/lib/verify-migration/verify-migration.js +120 -0
- package/lib/with-bulk-write-pragmas.d.ts +51 -0
- package/lib/with-bulk-write-pragmas.js +132 -0
- package/lib/write-queue.d.ts +32 -0
- package/lib/write-queue.js +55 -0
- package/package.json +350 -3
|
@@ -0,0 +1,510 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates the adjunct tables that hang off `content_items` (plus the two
|
|
3
|
+
* standalone log tables), guarded per-table so partially-provisioned
|
|
4
|
+
* archives converge to the full set:
|
|
5
|
+
*
|
|
6
|
+
* - `page_errors` — partial scrape failures, FK → `content_items(id)`
|
|
7
|
+
* - `crawl_errors` — crawler-level error channel (no FK; the URL may be
|
|
8
|
+
* an external link that failed DNS, or null for a process-level error)
|
|
9
|
+
* - `technology_signals` — one un-combined technology-detection signal
|
|
10
|
+
* (Wappalyzer or structural) per row, FK → `content_items(id)`
|
|
11
|
+
* - `page_technologies` — confidence-combined roll-up of
|
|
12
|
+
* `technology_signals`, one row per (page, technology), FK →
|
|
13
|
+
* `content_items(id)`. Supersedes the removed `page_tags` (Wappalyzer-only)
|
|
14
|
+
* - `technology_js_scan_cache` — resource-scoped cache for the post-crawl
|
|
15
|
+
* JS license-comment scan, FK → `resource_items(id)`
|
|
16
|
+
* - `page_jsonld` — JSON-LD / SpeculationRules, FK → `content_items(id)`
|
|
17
|
+
* - `page_main_content_headings` / `_images` / `_tables` / `_buttons` /
|
|
18
|
+
* `_iframes` / `_videos` / `_audios` / `_canvases` — beholder
|
|
19
|
+
* `MainContentsData` sub-entity arrays, one row per DOM element, FK →
|
|
20
|
+
* `content_items(id)`
|
|
21
|
+
* - `page_main_content_custom_elements` — Web Components (custom elements)
|
|
22
|
+
* found in the main-content region, one row per DOM element, FK →
|
|
23
|
+
* `content_items(id)`. Unlike its eight siblings above, captured by
|
|
24
|
+
* nitpicker itself (`@nitpicker/crawler`'s `crawler/capture-custom-elements.ts`), not beholder
|
|
25
|
+
* - `list_reconcile_runs` — `--inventory` / `--recrawl` audit log (no FK;
|
|
26
|
+
* append-only)
|
|
27
|
+
* - `network_outages` — operator-network-outage journal (no FK; append-only
|
|
28
|
+
* except `ended_at`, which is written once on recovery)
|
|
29
|
+
* - `dedupe_cap_events` — `--dedupe-cap` same-cluster soft-cap audit log (no
|
|
30
|
+
* FK; append-only except `rejected_count`, which is written once at
|
|
31
|
+
* `crawlEnd`)
|
|
32
|
+
* - `page_html_blobs` + `page_html_ref` — content-addressable HTML
|
|
33
|
+
* snapshots, FK → `content_items(id)`
|
|
34
|
+
* - `console_log_items` — content-addressable dictionary of distinct
|
|
35
|
+
* console messages / page errors (no FK; hash-deduplicated across every
|
|
36
|
+
* page in the archive, mirroring `text_refs` / `json_refs`)
|
|
37
|
+
* - `page_console_logs` — one row per (page, console log) occurrence, FK →
|
|
38
|
+
* `content_items(id)` and `console_log_items(id)`
|
|
39
|
+
*
|
|
40
|
+
* The DDL is shared between fresh-archive provisioning ({@link initSchema}
|
|
41
|
+
* calls this right after `createEntityTables`) and the migration script
|
|
42
|
+
* (`scripts/migrate-to-0.13.mjs` calls it before retargeting FK
|
|
43
|
+
* declarations and dropping the legacy tables). Keeping the schema in one
|
|
44
|
+
* function guarantees both origin points produce identical tables — the
|
|
45
|
+
* pre-0.13 era kept per-table copies of this DDL in separate lazy-migration
|
|
46
|
+
* modules, and those copies drifted: they declared `REFERENCES pages(id)`
|
|
47
|
+
* while `initSchema` had moved on to `content_items(id)`, leaving migrated
|
|
48
|
+
* archives with stale FK targets that only `scripts/migrate-to-0.13.mjs`'s
|
|
49
|
+
* rename-copy-drop pass can now repair.
|
|
50
|
+
*
|
|
51
|
+
* Unlike `createRefTables` / `createEntityTables` (whose callers guard with
|
|
52
|
+
* a single sentinel table), each table here is guarded individually because
|
|
53
|
+
* the migration-script caller sees archives where any subset may already
|
|
54
|
+
* exist (e.g. `page_jsonld` from the 0.10 migration but no `list_reconcile_runs`).
|
|
55
|
+
* Index creation stays inside each guard: an existing table keeps whatever
|
|
56
|
+
* indexes its creation path declared.
|
|
57
|
+
* @param instance - The Knex query builder instance connected to the database.
|
|
58
|
+
* @example
|
|
59
|
+
* // Must run after createEntityTables — the page-scoped tables FK into
|
|
60
|
+
* // content_items(id).
|
|
61
|
+
* await createRefTables(db);
|
|
62
|
+
* await createEntityTables(db);
|
|
63
|
+
* await createAdjunctTables(db);
|
|
64
|
+
*/
|
|
65
|
+
export async function createAdjunctTables(instance) {
|
|
66
|
+
if (!(await instance.schema.hasTable('page_errors'))) {
|
|
67
|
+
await instance.schema.createTable('page_errors', (t) => {
|
|
68
|
+
// Records partial scrape failures (e.g. a viewport switch that
|
|
69
|
+
// detaches the frame and trips beholder's @retryable into the
|
|
70
|
+
// `retryExhausted` phase). A page can have zero or more rows here
|
|
71
|
+
// in addition to its normal `content_items` entry — the page
|
|
72
|
+
// itself is considered successfully scraped, but image capture or
|
|
73
|
+
// another secondary step failed for at least one device preset.
|
|
74
|
+
t.increments('id');
|
|
75
|
+
t.integer('pageId').notNullable().unsigned().references('content_items.id');
|
|
76
|
+
t.string('phase').notNullable();
|
|
77
|
+
t.text('message').notNullable();
|
|
78
|
+
t.integer('createdAt').notNullable();
|
|
79
|
+
t.index('pageId');
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
if (!(await instance.schema.hasTable('crawl_errors'))) {
|
|
83
|
+
await instance.schema.createTable('crawl_errors', (t) => {
|
|
84
|
+
// Structured form of the crawler-level `error` channel that otherwise
|
|
85
|
+
// only lands in `error.log`. Unlike `page_errors` these are not tied to
|
|
86
|
+
// a scraped page (the URL may be an external link that failed DNS, or
|
|
87
|
+
// null for a process-level error), so there is no `pageId` FK and `url`
|
|
88
|
+
// is nullable. The cause is NOT stored — it is classified on read from
|
|
89
|
+
// `message` so older archives (which only have `error.log`) classify the
|
|
90
|
+
// same way.
|
|
91
|
+
t.increments('id');
|
|
92
|
+
t.string('url', 8190).nullable();
|
|
93
|
+
t.boolean('isExternal');
|
|
94
|
+
t.text('message').notNullable();
|
|
95
|
+
t.integer('createdAt').notNullable();
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
if (!(await instance.schema.hasTable('technology_signals'))) {
|
|
99
|
+
await instance.schema.createTable('technology_signals', (t) => {
|
|
100
|
+
// One un-combined signal for one technology on one page — the
|
|
101
|
+
// source-of-truth granular evidence `page_technologies` rolls up.
|
|
102
|
+
// Supersedes `page_tags` (Wappalyzer-only; removed): `signalType`
|
|
103
|
+
// covers Wappalyzer AND nitpicker's own structural detections
|
|
104
|
+
// (URL patterns, HTML markers, scoped attributes, meta generator,
|
|
105
|
+
// JS license comments) in one unified model. See
|
|
106
|
+
// `archive/meta/technologies/`.
|
|
107
|
+
t.increments('id');
|
|
108
|
+
t.integer('pageId')
|
|
109
|
+
.notNullable()
|
|
110
|
+
.unsigned()
|
|
111
|
+
.references('content_items.id')
|
|
112
|
+
.onDelete('CASCADE');
|
|
113
|
+
t.string('technology').notNullable();
|
|
114
|
+
t.string('signalType').notNullable();
|
|
115
|
+
t.text('evidence');
|
|
116
|
+
t.integer('weight').notNullable();
|
|
117
|
+
t.index('pageId');
|
|
118
|
+
});
|
|
119
|
+
await instance.raw('CREATE INDEX technology_signals_tech_type ON technology_signals(technology, signalType)');
|
|
120
|
+
}
|
|
121
|
+
if (!(await instance.schema.hasTable('page_technologies'))) {
|
|
122
|
+
await instance.schema.createTable('page_technologies', (t) => {
|
|
123
|
+
// Confidence-combined roll-up of `technology_signals`, one row
|
|
124
|
+
// per (page, technology) — the read-optimised projection every
|
|
125
|
+
// query/viewer/MCP consumer reads instead of re-combining
|
|
126
|
+
// `technology_signals` on every request. Always written in the
|
|
127
|
+
// same transaction as its `technology_signals` rows; see
|
|
128
|
+
// ARCHITECTURE.md's invariant that the two tables are updated
|
|
129
|
+
// as a pair.
|
|
130
|
+
t.increments('id');
|
|
131
|
+
t.integer('pageId')
|
|
132
|
+
.notNullable()
|
|
133
|
+
.unsigned()
|
|
134
|
+
.references('content_items.id')
|
|
135
|
+
.onDelete('CASCADE');
|
|
136
|
+
t.string('technology').notNullable();
|
|
137
|
+
t.string('category');
|
|
138
|
+
t.string('version');
|
|
139
|
+
t.integer('confidence').notNullable();
|
|
140
|
+
t.integer('signalCount').notNullable();
|
|
141
|
+
t.unique(['pageId', 'technology']);
|
|
142
|
+
t.index('technology');
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
if (!(await instance.schema.hasTable('technology_js_scan_cache'))) {
|
|
146
|
+
await instance.schema.createTable('technology_js_scan_cache', (t) => {
|
|
147
|
+
// Resource-scoped cache preventing "JSスキャン・エンリッチメント"
|
|
148
|
+
// (post-crawl network enrichment, see ARCHITECTURE.md) from
|
|
149
|
+
// re-fetching the same JS resource on `--append`/`--retry-failed`.
|
|
150
|
+
// `resourceId` is the PK (one scan outcome per resource, ever);
|
|
151
|
+
// `technology`/`evidence` are `null` on a non-match.
|
|
152
|
+
t.integer('resourceId')
|
|
153
|
+
.primary()
|
|
154
|
+
.unsigned()
|
|
155
|
+
.references('resource_items.id')
|
|
156
|
+
.onDelete('CASCADE');
|
|
157
|
+
t.integer('scannedAt').notNullable();
|
|
158
|
+
t.string('technology');
|
|
159
|
+
t.text('evidence');
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
if (!(await instance.schema.hasTable('page_jsonld'))) {
|
|
163
|
+
await instance.schema.createTable('page_jsonld', (t) => {
|
|
164
|
+
// JSON-LD and SpeculationRules entries captured from
|
|
165
|
+
// `<script type="application/ld+json">` and
|
|
166
|
+
// `<script type="speculationrules">`. `kind` discriminates; `type`
|
|
167
|
+
// is the top-level `@type` extracted by classify-jsonld-type for
|
|
168
|
+
// indexable filtering. `raw` is stored uncompressed; SQLite
|
|
169
|
+
// overflow pages handle multi-KB JSON bodies transparently.
|
|
170
|
+
t.increments('id');
|
|
171
|
+
t.integer('pageId')
|
|
172
|
+
.notNullable()
|
|
173
|
+
.unsigned()
|
|
174
|
+
.references('content_items.id')
|
|
175
|
+
.onDelete('CASCADE');
|
|
176
|
+
t.string('kind').notNullable();
|
|
177
|
+
t.string('type');
|
|
178
|
+
t.text('raw').notNullable();
|
|
179
|
+
t.json('parsed');
|
|
180
|
+
t.text('parseError');
|
|
181
|
+
t.index('pageId');
|
|
182
|
+
t.index('type');
|
|
183
|
+
});
|
|
184
|
+
// Compound `(type, pageId)` accelerates streaming
|
|
185
|
+
// `list_pages_by_jsonld_type` JOINs.
|
|
186
|
+
await instance.raw('CREATE INDEX page_jsonld_type_pageId ON page_jsonld(type, pageId)');
|
|
187
|
+
}
|
|
188
|
+
// Beholder `MainContentsData` sub-entities, one adjunct table per array
|
|
189
|
+
// (headings/images/tables/buttons/iframes/videos/audios/canvases), plus
|
|
190
|
+
// `page_main_content_custom_elements` (Web Components) — the sole
|
|
191
|
+
// exception, captured by nitpicker itself rather than beholder (see
|
|
192
|
+
// `create-entity-tables.ts`'s `main_content_custom_element_count` JSDoc
|
|
193
|
+
// for why). Same shape as `page_tags` / `page_jsonld`: `pageId` FK →
|
|
194
|
+
// `content_items(id)` ON DELETE CASCADE, individually guarded so any
|
|
195
|
+
// subset can pre-exist. `order` preserves the DOM traversal order the
|
|
196
|
+
// source array is captured in (0-based); it is not itself an index
|
|
197
|
+
// target since these tables are always read whole-page via
|
|
198
|
+
// `WHERE pageId = ? ORDER BY "order"`.
|
|
199
|
+
if (!(await instance.schema.hasTable('page_main_content_headings'))) {
|
|
200
|
+
await instance.schema.createTable('page_main_content_headings', (t) => {
|
|
201
|
+
t.increments('id');
|
|
202
|
+
t.integer('pageId')
|
|
203
|
+
.notNullable()
|
|
204
|
+
.unsigned()
|
|
205
|
+
.references('content_items.id')
|
|
206
|
+
.onDelete('CASCADE');
|
|
207
|
+
t.integer('order').notNullable();
|
|
208
|
+
t.text('text');
|
|
209
|
+
t.integer('level').notNullable();
|
|
210
|
+
t.index('pageId');
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
if (!(await instance.schema.hasTable('page_main_content_images'))) {
|
|
214
|
+
await instance.schema.createTable('page_main_content_images', (t) => {
|
|
215
|
+
t.increments('id');
|
|
216
|
+
t.integer('pageId')
|
|
217
|
+
.notNullable()
|
|
218
|
+
.unsigned()
|
|
219
|
+
.references('content_items.id')
|
|
220
|
+
.onDelete('CASCADE');
|
|
221
|
+
t.integer('order').notNullable();
|
|
222
|
+
t.string('src', 8190).notNullable();
|
|
223
|
+
t.text('alt').notNullable();
|
|
224
|
+
t.index('pageId');
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
if (!(await instance.schema.hasTable('page_main_content_tables'))) {
|
|
228
|
+
await instance.schema.createTable('page_main_content_tables', (t) => {
|
|
229
|
+
t.increments('id');
|
|
230
|
+
t.integer('pageId')
|
|
231
|
+
.notNullable()
|
|
232
|
+
.unsigned()
|
|
233
|
+
.references('content_items.id')
|
|
234
|
+
.onDelete('CASCADE');
|
|
235
|
+
t.integer('order').notNullable();
|
|
236
|
+
t.integer('rows').notNullable();
|
|
237
|
+
t.integer('cols').notNullable();
|
|
238
|
+
t.boolean('hasHeader').notNullable();
|
|
239
|
+
t.boolean('hasFooter').notNullable();
|
|
240
|
+
t.boolean('hasMergedCell').notNullable();
|
|
241
|
+
t.index('pageId');
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
if (!(await instance.schema.hasTable('page_main_content_buttons'))) {
|
|
245
|
+
await instance.schema.createTable('page_main_content_buttons', (t) => {
|
|
246
|
+
t.increments('id');
|
|
247
|
+
t.integer('pageId')
|
|
248
|
+
.notNullable()
|
|
249
|
+
.unsigned()
|
|
250
|
+
.references('content_items.id')
|
|
251
|
+
.onDelete('CASCADE');
|
|
252
|
+
t.integer('order').notNullable();
|
|
253
|
+
t.string('nodeName').notNullable();
|
|
254
|
+
t.string('role');
|
|
255
|
+
t.string('type');
|
|
256
|
+
t.text('text');
|
|
257
|
+
t.boolean('disabled').notNullable();
|
|
258
|
+
t.index('pageId');
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
if (!(await instance.schema.hasTable('page_main_content_iframes'))) {
|
|
262
|
+
await instance.schema.createTable('page_main_content_iframes', (t) => {
|
|
263
|
+
t.increments('id');
|
|
264
|
+
t.integer('pageId')
|
|
265
|
+
.notNullable()
|
|
266
|
+
.unsigned()
|
|
267
|
+
.references('content_items.id')
|
|
268
|
+
.onDelete('CASCADE');
|
|
269
|
+
t.integer('order').notNullable();
|
|
270
|
+
t.string('src', 8190).notNullable();
|
|
271
|
+
t.text('title');
|
|
272
|
+
t.string('width');
|
|
273
|
+
t.string('height');
|
|
274
|
+
t.index('pageId');
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
if (!(await instance.schema.hasTable('page_main_content_videos'))) {
|
|
278
|
+
await instance.schema.createTable('page_main_content_videos', (t) => {
|
|
279
|
+
t.increments('id');
|
|
280
|
+
t.integer('pageId')
|
|
281
|
+
.notNullable()
|
|
282
|
+
.unsigned()
|
|
283
|
+
.references('content_items.id')
|
|
284
|
+
.onDelete('CASCADE');
|
|
285
|
+
t.integer('order').notNullable();
|
|
286
|
+
t.string('src', 8190).notNullable();
|
|
287
|
+
t.string('poster', 8190);
|
|
288
|
+
t.integer('width').notNullable();
|
|
289
|
+
t.integer('height').notNullable();
|
|
290
|
+
t.index('pageId');
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
if (!(await instance.schema.hasTable('page_main_content_audios'))) {
|
|
294
|
+
await instance.schema.createTable('page_main_content_audios', (t) => {
|
|
295
|
+
t.increments('id');
|
|
296
|
+
t.integer('pageId')
|
|
297
|
+
.notNullable()
|
|
298
|
+
.unsigned()
|
|
299
|
+
.references('content_items.id')
|
|
300
|
+
.onDelete('CASCADE');
|
|
301
|
+
t.integer('order').notNullable();
|
|
302
|
+
t.string('src', 8190).notNullable();
|
|
303
|
+
t.index('pageId');
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
if (!(await instance.schema.hasTable('page_main_content_canvases'))) {
|
|
307
|
+
await instance.schema.createTable('page_main_content_canvases', (t) => {
|
|
308
|
+
t.increments('id');
|
|
309
|
+
t.integer('pageId')
|
|
310
|
+
.notNullable()
|
|
311
|
+
.unsigned()
|
|
312
|
+
.references('content_items.id')
|
|
313
|
+
.onDelete('CASCADE');
|
|
314
|
+
t.integer('order').notNullable();
|
|
315
|
+
t.integer('width').notNullable();
|
|
316
|
+
t.integer('height').notNullable();
|
|
317
|
+
t.index('pageId');
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
if (!(await instance.schema.hasTable('page_main_content_custom_elements'))) {
|
|
321
|
+
await instance.schema.createTable('page_main_content_custom_elements', (t) => {
|
|
322
|
+
t.increments('id');
|
|
323
|
+
t.integer('pageId')
|
|
324
|
+
.notNullable()
|
|
325
|
+
.unsigned()
|
|
326
|
+
.references('content_items.id')
|
|
327
|
+
.onDelete('CASCADE');
|
|
328
|
+
t.integer('order').notNullable();
|
|
329
|
+
t.string('nodeName').notNullable();
|
|
330
|
+
t.string('elementId');
|
|
331
|
+
t.text('classList');
|
|
332
|
+
t.index('pageId');
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
if (!(await instance.schema.hasTable('list_reconcile_runs'))) {
|
|
336
|
+
await instance.schema.createTable('list_reconcile_runs', (t) => {
|
|
337
|
+
// One row per successful `--inventory <list>` or `--recrawl
|
|
338
|
+
// <list>` invocation — both reconcile a URL list against the
|
|
339
|
+
// archive via the same ingestion path. The archive's audit log
|
|
340
|
+
// of "when did we apply which list at what scale". `.bak` is
|
|
341
|
+
// removed on success so this table is the only durable
|
|
342
|
+
// provenance record. Column semantics live on the
|
|
343
|
+
// `ListReconcileRunMeta` interface in `archive/types.ts`.
|
|
344
|
+
t.increments('id');
|
|
345
|
+
t.string('ran_at').notNullable();
|
|
346
|
+
t.string('list_label').nullable();
|
|
347
|
+
t.string('source_file_sha256', 64).nullable();
|
|
348
|
+
t.integer('total_lines').nullable();
|
|
349
|
+
t.integer('new_pages').nullable();
|
|
350
|
+
t.integer('new_resources').nullable();
|
|
351
|
+
t.integer('scope_skipped').nullable();
|
|
352
|
+
t.integer('exclude_skipped').nullable();
|
|
353
|
+
t.integer('invalid_skipped').nullable();
|
|
354
|
+
t.text('notes').nullable();
|
|
355
|
+
t.index('ran_at');
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
if (!(await instance.schema.hasTable('network_outages'))) {
|
|
359
|
+
await instance.schema.createTable('network_outages', (t) => {
|
|
360
|
+
// One row per detected operator-network outage. The archive's
|
|
361
|
+
// evidence that a run of `dns`/`local-network`-shaped failures
|
|
362
|
+
// was caused by the crawl operator's own connectivity, not the
|
|
363
|
+
// target sites — used to retroactively re-classify `crawl_errors`
|
|
364
|
+
// / `page_errors` rows whose `createdAt` falls inside a window
|
|
365
|
+
// (see `is-within-outage-window.ts`). No index: a crawl session
|
|
366
|
+
// produces at most a handful of these rows, so a full in-memory
|
|
367
|
+
// scan by every consumer is cheaper than maintaining a B-tree
|
|
368
|
+
// that few queries would use (`ARCHITECTURE.md`'s
|
|
369
|
+
// perf-index-is-not-free / evidence-before-indexing rules).
|
|
370
|
+
t.increments('id');
|
|
371
|
+
// Backdated to the earliest error still inside the detector's
|
|
372
|
+
// sliding window at trigger time, NOT the trigger instant —
|
|
373
|
+
// see `NetworkOutageDetector`'s `OutageSuspect.startedAt`.
|
|
374
|
+
t.integer('started_at').notNullable();
|
|
375
|
+
// When the sliding window actually crossed both thresholds.
|
|
376
|
+
t.integer('detected_at').notNullable();
|
|
377
|
+
// NULL until a recovery probe succeeds. A row can also be left
|
|
378
|
+
// NULL forever if the crawl process is killed mid-outage; readers
|
|
379
|
+
// MUST NOT treat a NULL `ended_at` as an unbounded window (that
|
|
380
|
+
// would retroactively cover every later error as
|
|
381
|
+
// network-caused) — see `is-within-outage-window.ts` and the
|
|
382
|
+
// writer-side clamp-on-next-open in `db-ops/outages/`.
|
|
383
|
+
t.integer('ended_at').nullable();
|
|
384
|
+
t.string('probe_host').nullable();
|
|
385
|
+
t.integer('trigger_error_count').notNullable();
|
|
386
|
+
t.integer('trigger_host_count').notNullable();
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
if (!(await instance.schema.hasTable('dedupe_cap_events'))) {
|
|
390
|
+
await instance.schema.createTable('dedupe_cap_events', (t) => {
|
|
391
|
+
// One row per URL shape the `--dedupe-cap` same-cluster soft cap
|
|
392
|
+
// (`DedupeCapTracker`) confirmed as a trap during this crawl. No
|
|
393
|
+
// index: a crawl produces at most a handful of these rows (same
|
|
394
|
+
// reasoning as `network_outages`, above).
|
|
395
|
+
t.increments('id');
|
|
396
|
+
// The URL shape key (`computeShapeKey`) that capped — a template
|
|
397
|
+
// with placeholders (e.g. `example.com/news/date/{n}/`), not a
|
|
398
|
+
// literal URL.
|
|
399
|
+
t.string('shape_key').notNullable();
|
|
400
|
+
// One concrete URL matching this shape, captured at cap time so a
|
|
401
|
+
// human reading the audit log can identify what was being
|
|
402
|
+
// crawled — `shape_key` alone is a template, not a navigable URL.
|
|
403
|
+
t.string('sample_url').notNullable();
|
|
404
|
+
// `computeBodyHash` result recorded at cap time. Nullable only in
|
|
405
|
+
// the sense that BLOB columns are nullable by default; every row
|
|
406
|
+
// this feature writes populates it (a page with no rendered
|
|
407
|
+
// `<body>` never reaches the tracker — see `Crawler#handleResult`).
|
|
408
|
+
t.binary('body_hash').nullable();
|
|
409
|
+
// The Misra-Gries threshold that actually triggered the cap,
|
|
410
|
+
// after halving for the `body_hash`-match / `og:url`-mismatch
|
|
411
|
+
// confidence signals — NOT necessarily equal to `--dedupe-cap`'s
|
|
412
|
+
// raw value.
|
|
413
|
+
t.integer('effective_threshold').notNullable();
|
|
414
|
+
// The tracker's Misra-Gries counter value at cap time: a LOWER
|
|
415
|
+
// BOUND on the number of matching-signature pages seen for this
|
|
416
|
+
// shape, not an exact observation count (see `DedupeCapTracker`).
|
|
417
|
+
t.integer('observed_count').notNullable();
|
|
418
|
+
t.integer('detected_at').notNullable();
|
|
419
|
+
// NULL until `crawlEnd` finalizes it (see
|
|
420
|
+
// `Crawler#getDedupeCapRejections`). Unlike `network_outages.ended_at`,
|
|
421
|
+
// a NULL here has no ambiguous "still ongoing" reading — a
|
|
422
|
+
// crawl that never reached `crawlEnd` simply left the count
|
|
423
|
+
// undetermined, so no boot-time reconciliation pass is needed
|
|
424
|
+
// (readers display "unknown", not "0" or "unbounded").
|
|
425
|
+
t.integer('rejected_count').nullable();
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
// Content-addressable HTML blob storage. Knex's schema builder doesn't
|
|
429
|
+
// expose a WITHOUT ROWID toggle, so the BLOB tables are created via raw
|
|
430
|
+
// SQL. WITHOUT ROWID keeps the rows packed inside the b-tree leaves
|
|
431
|
+
// (no hidden rowid + secondary index pair), which matters for the blob
|
|
432
|
+
// table where a 32-byte hash PK + multi-KB body is the dominant row
|
|
433
|
+
// shape.
|
|
434
|
+
if (!(await instance.schema.hasTable('page_html_blobs'))) {
|
|
435
|
+
await instance.raw(`
|
|
436
|
+
CREATE TABLE page_html_blobs (
|
|
437
|
+
hash BLOB PRIMARY KEY,
|
|
438
|
+
body BLOB NOT NULL,
|
|
439
|
+
codec TEXT NOT NULL CHECK(codec IN ('zstd', 'none')),
|
|
440
|
+
size_raw INTEGER NOT NULL,
|
|
441
|
+
size_stored INTEGER NOT NULL
|
|
442
|
+
) WITHOUT ROWID
|
|
443
|
+
`);
|
|
444
|
+
}
|
|
445
|
+
if (!(await instance.schema.hasTable('page_html_ref'))) {
|
|
446
|
+
await instance.raw(`
|
|
447
|
+
CREATE TABLE page_html_ref (
|
|
448
|
+
page_id INTEGER PRIMARY KEY REFERENCES content_items(id) ON DELETE CASCADE,
|
|
449
|
+
hash BLOB NOT NULL REFERENCES page_html_blobs(hash)
|
|
450
|
+
) WITHOUT ROWID
|
|
451
|
+
`);
|
|
452
|
+
await instance.raw('CREATE INDEX idx_page_html_ref_hash ON page_html_ref(hash)');
|
|
453
|
+
}
|
|
454
|
+
// Content-addressable dictionary of distinct console messages / page
|
|
455
|
+
// errors (beholder's `ConsoleLogEntry`, issue #228). `hash` is
|
|
456
|
+
// SHA-256 over a canonical tuple of every content field (type, text,
|
|
457
|
+
// args JSON, location, stack) — the same identical warning emitted by
|
|
458
|
+
// a shared framework on every page therefore collapses to one row
|
|
459
|
+
// regardless of how many pages or how many times it fires, mirroring
|
|
460
|
+
// `text_refs` / `json_refs`. `args_json_id` is nullable because a
|
|
461
|
+
// call with no arguments (or one whose args failed to
|
|
462
|
+
// `JSON.stringify`, e.g. a circular reference) has nothing to store.
|
|
463
|
+
// `text_id` is nullable too: `text_refs` never stores the empty
|
|
464
|
+
// string (its dictionary upsert treats `''` as "nothing to dedupe"),
|
|
465
|
+
// so a call like `console.log()` with zero arguments — whose
|
|
466
|
+
// `text` beholder reports as `''` — has no `text_refs` row to point
|
|
467
|
+
// at; `text_id = NULL` there means "empty text", read back as `''`.
|
|
468
|
+
// `type` keeps its own index for the Console Logs view's type filter.
|
|
469
|
+
if (!(await instance.schema.hasTable('console_log_items'))) {
|
|
470
|
+
await instance.raw(`
|
|
471
|
+
CREATE TABLE console_log_items (
|
|
472
|
+
id INTEGER PRIMARY KEY,
|
|
473
|
+
hash BLOB NOT NULL UNIQUE,
|
|
474
|
+
type TEXT NOT NULL,
|
|
475
|
+
text_id INTEGER REFERENCES text_refs(id),
|
|
476
|
+
args_json_id INTEGER REFERENCES json_refs(id),
|
|
477
|
+
loc_url_id INTEGER REFERENCES url_refs(id),
|
|
478
|
+
loc_line INTEGER,
|
|
479
|
+
loc_column INTEGER,
|
|
480
|
+
stack_text_id INTEGER REFERENCES text_refs(id)
|
|
481
|
+
)
|
|
482
|
+
`);
|
|
483
|
+
await instance.raw('CREATE INDEX idx_console_log_items_type ON console_log_items(type)');
|
|
484
|
+
}
|
|
485
|
+
// One row per (page, console log) occurrence — beholder captures a
|
|
486
|
+
// `ts` per firing, so the same message logged 3 times on one page
|
|
487
|
+
// yields 3 rows (unlike `anchor_edges`' first-wins dedup: an
|
|
488
|
+
// occurrence count matters here, not just presence). Replaced
|
|
489
|
+
// wholesale per page on every non-empty scrape by
|
|
490
|
+
// `replaceConsoleLogs`, the same Scoped-Replace pattern as
|
|
491
|
+
// `anchor_edges` / `image_items` — there is no natural key to UPDATE
|
|
492
|
+
// a specific prior occurrence against.
|
|
493
|
+
if (!(await instance.schema.hasTable('page_console_logs'))) {
|
|
494
|
+
await instance.schema.createTable('page_console_logs', (t) => {
|
|
495
|
+
t.increments('id');
|
|
496
|
+
t.integer('pageId')
|
|
497
|
+
.notNullable()
|
|
498
|
+
.unsigned()
|
|
499
|
+
.references('content_items.id')
|
|
500
|
+
.onDelete('CASCADE');
|
|
501
|
+
t.integer('consoleLogId')
|
|
502
|
+
.notNullable()
|
|
503
|
+
.unsigned()
|
|
504
|
+
.references('console_log_items.id');
|
|
505
|
+
t.integer('ts').notNullable();
|
|
506
|
+
t.index('pageId');
|
|
507
|
+
t.index('consoleLogId');
|
|
508
|
+
});
|
|
509
|
+
}
|
|
510
|
+
}
|