@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,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Computes a content hash of a page's `<body>`, after normalizing away the
|
|
3
|
+
* kinds of incidental variance that would otherwise make two structurally
|
|
4
|
+
* identical pages hash differently: `/index.{ext}` URL-suffix forms and
|
|
5
|
+
* embedded dynamic tokens (cache-busting hashes, session/order ids, per-build
|
|
6
|
+
* CSS-module suffixes).
|
|
7
|
+
*
|
|
8
|
+
* Only the resulting hash is persisted (`page_meta.body_hash`) — the masked
|
|
9
|
+
* intermediate string is never stored. The unmasked original HTML remains
|
|
10
|
+
* fully recoverable from `page_html_blobs`, so nothing is lost by discarding
|
|
11
|
+
* it here.
|
|
12
|
+
*
|
|
13
|
+
* The computation runs in the native addon (`@nitpicker/core`). The
|
|
14
|
+
* JavaScript stages next to this file (`extract-body.ts`,
|
|
15
|
+
* `normalize-url-like-strings.ts`, `mask-dynamic-ids.ts`) are not called
|
|
16
|
+
* from here and are excluded from the build: they exist only as the oracle
|
|
17
|
+
* for `compute-body-hash.parity.spec.ts`, which pins the addon to their
|
|
18
|
+
* output and so to the values existing archives already hold.
|
|
19
|
+
* @param html - A full HTML document (or fragment): a string, or its UTF-8
|
|
20
|
+
* bytes — pass bytes when they are already at hand (a stored blob via
|
|
21
|
+
* `decodeStoredBlobBytes`) to skip a decode/re-encode round-trip. Strings
|
|
22
|
+
* are encoded as `Buffer.from(html, 'utf8')` does, lone surrogates as U+FFFD.
|
|
23
|
+
* @returns 32-byte SHA-256 hash of the masked `<body>` content, ready to
|
|
24
|
+
* insert into a `BLOB` column.
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* const hashA = computeBodyHash('<body><a href="/p/a1b2c3d4">x</a></body>');
|
|
28
|
+
* const hashB = computeBodyHash('<body><a href="/p/z9y8x7w6">x</a></body>');
|
|
29
|
+
* hashA.equals(hashB); // true — the differing token is masked before hashing
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare function computeBodyHash(html: string | Uint8Array): Buffer;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { computeBodyHash as computeBodyHashNative } from '@nitpicker/core/compute-body-hash';
|
|
2
|
+
/**
|
|
3
|
+
* Computes a content hash of a page's `<body>`, after normalizing away the
|
|
4
|
+
* kinds of incidental variance that would otherwise make two structurally
|
|
5
|
+
* identical pages hash differently: `/index.{ext}` URL-suffix forms and
|
|
6
|
+
* embedded dynamic tokens (cache-busting hashes, session/order ids, per-build
|
|
7
|
+
* CSS-module suffixes).
|
|
8
|
+
*
|
|
9
|
+
* Only the resulting hash is persisted (`page_meta.body_hash`) — the masked
|
|
10
|
+
* intermediate string is never stored. The unmasked original HTML remains
|
|
11
|
+
* fully recoverable from `page_html_blobs`, so nothing is lost by discarding
|
|
12
|
+
* it here.
|
|
13
|
+
*
|
|
14
|
+
* The computation runs in the native addon (`@nitpicker/core`). The
|
|
15
|
+
* JavaScript stages next to this file (`extract-body.ts`,
|
|
16
|
+
* `normalize-url-like-strings.ts`, `mask-dynamic-ids.ts`) are not called
|
|
17
|
+
* from here and are excluded from the build: they exist only as the oracle
|
|
18
|
+
* for `compute-body-hash.parity.spec.ts`, which pins the addon to their
|
|
19
|
+
* output and so to the values existing archives already hold.
|
|
20
|
+
* @param html - A full HTML document (or fragment): a string, or its UTF-8
|
|
21
|
+
* bytes — pass bytes when they are already at hand (a stored blob via
|
|
22
|
+
* `decodeStoredBlobBytes`) to skip a decode/re-encode round-trip. Strings
|
|
23
|
+
* are encoded as `Buffer.from(html, 'utf8')` does, lone surrogates as U+FFFD.
|
|
24
|
+
* @returns 32-byte SHA-256 hash of the masked `<body>` content, ready to
|
|
25
|
+
* insert into a `BLOB` column.
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* const hashA = computeBodyHash('<body><a href="/p/a1b2c3d4">x</a></body>');
|
|
29
|
+
* const hashB = computeBodyHash('<body><a href="/p/z9y8x7w6">x</a></body>');
|
|
30
|
+
* hashA.equals(hashB); // true — the differing token is masked before hashing
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export function computeBodyHash(html) {
|
|
34
|
+
return computeBodyHashNative(typeof html === 'string' ? Buffer.from(html, 'utf8') : html);
|
|
35
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remove a single archive cache entry (one directory previously resolved by
|
|
3
|
+
* {@link import('./resolve-archive-cache-dir.js').resolveArchiveCacheDir}).
|
|
4
|
+
*
|
|
5
|
+
* Deliberately scoped to exactly `cacheDir` — it never touches sibling
|
|
6
|
+
* entries under the same cache root (in particular, other archives'
|
|
7
|
+
* tar-cache entries must survive a per-archive clear).
|
|
8
|
+
* @param cacheDir - Absolute path to the single cache entry to remove.
|
|
9
|
+
* @returns `true` if `cacheDir` existed and was removed, `false` if it was
|
|
10
|
+
* already absent.
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* const cacheKey = await computeArchiveCacheKey(archivePath);
|
|
14
|
+
* const cacheDir = resolveArchiveCacheDir(cacheRoot, cacheKey, archivePath);
|
|
15
|
+
* const removed = await clearArchiveCacheEntry(cacheDir);
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare function clearArchiveCacheEntry(cacheDir: string): Promise<boolean>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import { pathExists } from './path-exists.js';
|
|
3
|
+
/**
|
|
4
|
+
* Remove a single archive cache entry (one directory previously resolved by
|
|
5
|
+
* {@link import('./resolve-archive-cache-dir.js').resolveArchiveCacheDir}).
|
|
6
|
+
*
|
|
7
|
+
* Deliberately scoped to exactly `cacheDir` — it never touches sibling
|
|
8
|
+
* entries under the same cache root (in particular, other archives'
|
|
9
|
+
* tar-cache entries must survive a per-archive clear).
|
|
10
|
+
* @param cacheDir - Absolute path to the single cache entry to remove.
|
|
11
|
+
* @returns `true` if `cacheDir` existed and was removed, `false` if it was
|
|
12
|
+
* already absent.
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* const cacheKey = await computeArchiveCacheKey(archivePath);
|
|
16
|
+
* const cacheDir = resolveArchiveCacheDir(cacheRoot, cacheKey, archivePath);
|
|
17
|
+
* const removed = await clearArchiveCacheEntry(cacheDir);
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export async function clearArchiveCacheEntry(cacheDir) {
|
|
21
|
+
const existedBefore = await pathExists(cacheDir);
|
|
22
|
+
await fs.rm(cacheDir, { recursive: true, force: true });
|
|
23
|
+
return existedBefore;
|
|
24
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remove an entire archive cache root, including every tar-cache entry and
|
|
3
|
+
* any sibling directory living under it (e.g. a leftover `table` scratch
|
|
4
|
+
* directory from an earlier version).
|
|
5
|
+
*
|
|
6
|
+
* Pure: takes `cacheRoot` as a parameter and never resolves it itself, so
|
|
7
|
+
* tests can point it at a throwaway directory instead of the real OS temp
|
|
8
|
+
* cache. Mirrors the "manual `rm -rf` is safe" contract already documented
|
|
9
|
+
* for the tar cache (ARCHITECTURE.md) — no confirmation, no lock check.
|
|
10
|
+
*
|
|
11
|
+
* Why not lock-aware: a concurrent `extractArchiveToCache` elsewhere may be
|
|
12
|
+
* holding `<cacheDir>.lock` / writing `<cacheDir>.staging` inside this root
|
|
13
|
+
* when it is removed, which can surface as an ENOENT in that extraction (or,
|
|
14
|
+
* rarely, a second extractor racing into a freshly recreated `.staging`
|
|
15
|
+
* path). This is the same exposure a manual `rm -rf` already has today —
|
|
16
|
+
* this function does not add new risk, it just makes that pre-existing,
|
|
17
|
+
* accepted risk reachable via a single explicit command.
|
|
18
|
+
* @param cacheRoot - Absolute path to the cache root to remove.
|
|
19
|
+
* @returns `true` if `cacheRoot` existed and was removed, `false` if it was
|
|
20
|
+
* already absent.
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* const removed = await clearArchiveCacheRoot(getArchiveCacheRoot());
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function clearArchiveCacheRoot(cacheRoot: string): Promise<boolean>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import { pathExists } from './path-exists.js';
|
|
3
|
+
/**
|
|
4
|
+
* Remove an entire archive cache root, including every tar-cache entry and
|
|
5
|
+
* any sibling directory living under it (e.g. a leftover `table` scratch
|
|
6
|
+
* directory from an earlier version).
|
|
7
|
+
*
|
|
8
|
+
* Pure: takes `cacheRoot` as a parameter and never resolves it itself, so
|
|
9
|
+
* tests can point it at a throwaway directory instead of the real OS temp
|
|
10
|
+
* cache. Mirrors the "manual `rm -rf` is safe" contract already documented
|
|
11
|
+
* for the tar cache (ARCHITECTURE.md) — no confirmation, no lock check.
|
|
12
|
+
*
|
|
13
|
+
* Why not lock-aware: a concurrent `extractArchiveToCache` elsewhere may be
|
|
14
|
+
* holding `<cacheDir>.lock` / writing `<cacheDir>.staging` inside this root
|
|
15
|
+
* when it is removed, which can surface as an ENOENT in that extraction (or,
|
|
16
|
+
* rarely, a second extractor racing into a freshly recreated `.staging`
|
|
17
|
+
* path). This is the same exposure a manual `rm -rf` already has today —
|
|
18
|
+
* this function does not add new risk, it just makes that pre-existing,
|
|
19
|
+
* accepted risk reachable via a single explicit command.
|
|
20
|
+
* @param cacheRoot - Absolute path to the cache root to remove.
|
|
21
|
+
* @returns `true` if `cacheRoot` existed and was removed, `false` if it was
|
|
22
|
+
* already absent.
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* const removed = await clearArchiveCacheRoot(getArchiveCacheRoot());
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export async function clearArchiveCacheRoot(cacheRoot) {
|
|
29
|
+
const existedBefore = await pathExists(cacheRoot);
|
|
30
|
+
await fs.rm(cacheRoot, { recursive: true, force: true });
|
|
31
|
+
return existedBefore;
|
|
32
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derive a stable cache key from a `.nitpicker` file's inode metadata
|
|
3
|
+
* plus a head+tail content sample.
|
|
4
|
+
*
|
|
5
|
+
* Metadata fields:
|
|
6
|
+
*
|
|
7
|
+
* - `size` covers the bulk of accidental cache collision risk in O(1).
|
|
8
|
+
* - `mtime` (mod time) changes whenever the file's content is rewritten,
|
|
9
|
+
* which is the common case (`crawl --append`, `crawl --retry-failed`,
|
|
10
|
+
* `cp -f`, rsync).
|
|
11
|
+
* - `ctime` (inode change time) closes the `touch -m -t <past>` loophole:
|
|
12
|
+
* even if a user resets `mtime` to fake "unchanged", the act of touching
|
|
13
|
+
* bumps `ctime` on POSIX so the key still rolls.
|
|
14
|
+
*
|
|
15
|
+
* Head + tail digest:
|
|
16
|
+
*
|
|
17
|
+
* - On filesystems with low-resolution timestamps (FAT / exFAT / NFSv3 /
|
|
18
|
+
* some Docker volume mounts where mtime/ctime are second-granular and
|
|
19
|
+
* sometimes don't move on small appends), `size + mtime + ctime`
|
|
20
|
+
* alone can stay identical across an in-place rewrite.
|
|
21
|
+
* - We hash the first {@link HEAD_TAIL_HASH_BYTES} bytes and the last
|
|
22
|
+
* {@link HEAD_TAIL_HASH_BYTES} bytes to detect this. For tar archives
|
|
23
|
+
* the head holds the first entry's header (which moves when the inner
|
|
24
|
+
* directory's name changes) and the tail holds the last entry's data
|
|
25
|
+
* (which always moves on `crawl --append` because the appended pages
|
|
26
|
+
* land near the end of the tar stream).
|
|
27
|
+
* - Full-content sha256 was rejected: ~20-30 s on a 10 GB archive,
|
|
28
|
+
* which is slower than the untar this cache is meant to avoid.
|
|
29
|
+
*
|
|
30
|
+
* The key is stable across symlinks (the caller resolves via
|
|
31
|
+
* `fs.realpath` upstream) but **not** across hardlinks pointing at a
|
|
32
|
+
* mutated inode — that is intentional, hardlinking is a power-user
|
|
33
|
+
* move and the user is expected to know the cache will share an entry.
|
|
34
|
+
* @param archivePath - Absolute path to the `.nitpicker` file.
|
|
35
|
+
* @returns A string of the form
|
|
36
|
+
* `<size>-<mtime_ns>-<ctime_ns>-<headHex>-<tailHex>` suitable for use
|
|
37
|
+
* as a directory-name component.
|
|
38
|
+
*/
|
|
39
|
+
export declare function computeArchiveCacheKey(archivePath: string): Promise<string>;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { createReadStream } from 'node:fs';
|
|
3
|
+
import fs from 'node:fs/promises';
|
|
4
|
+
/**
|
|
5
|
+
* Number of bytes hashed from each end of the file to corner the case
|
|
6
|
+
* where two different archives share `size + mtime + ctime` by accident.
|
|
7
|
+
*
|
|
8
|
+
* 64 KiB is a sweet spot: on a 10 GB archive it reads 0.0006 % of the
|
|
9
|
+
* file (~1 ms on an SSD, ~5 ms on a spinning disk) while reliably
|
|
10
|
+
* sampling enough of both the tar leading header AND the tail (which
|
|
11
|
+
* for tar archives contains the last-written entry's data, so any real
|
|
12
|
+
* mutation moves at least one of the two windows).
|
|
13
|
+
*/
|
|
14
|
+
const HEAD_TAIL_HASH_BYTES = 64 * 1024;
|
|
15
|
+
/**
|
|
16
|
+
* Cache-key segment substituted when a file is smaller than the
|
|
17
|
+
* head+tail sample window. In that case the head segment alone already
|
|
18
|
+
* spans the whole file (size column also rolls), so a separate tail
|
|
19
|
+
* digest is meaningless and we encode that explicitly rather than
|
|
20
|
+
* silently overlapping reads.
|
|
21
|
+
*/
|
|
22
|
+
const TAIL_NOT_NEEDED = 'short';
|
|
23
|
+
/**
|
|
24
|
+
* Derive a stable cache key from a `.nitpicker` file's inode metadata
|
|
25
|
+
* plus a head+tail content sample.
|
|
26
|
+
*
|
|
27
|
+
* Metadata fields:
|
|
28
|
+
*
|
|
29
|
+
* - `size` covers the bulk of accidental cache collision risk in O(1).
|
|
30
|
+
* - `mtime` (mod time) changes whenever the file's content is rewritten,
|
|
31
|
+
* which is the common case (`crawl --append`, `crawl --retry-failed`,
|
|
32
|
+
* `cp -f`, rsync).
|
|
33
|
+
* - `ctime` (inode change time) closes the `touch -m -t <past>` loophole:
|
|
34
|
+
* even if a user resets `mtime` to fake "unchanged", the act of touching
|
|
35
|
+
* bumps `ctime` on POSIX so the key still rolls.
|
|
36
|
+
*
|
|
37
|
+
* Head + tail digest:
|
|
38
|
+
*
|
|
39
|
+
* - On filesystems with low-resolution timestamps (FAT / exFAT / NFSv3 /
|
|
40
|
+
* some Docker volume mounts where mtime/ctime are second-granular and
|
|
41
|
+
* sometimes don't move on small appends), `size + mtime + ctime`
|
|
42
|
+
* alone can stay identical across an in-place rewrite.
|
|
43
|
+
* - We hash the first {@link HEAD_TAIL_HASH_BYTES} bytes and the last
|
|
44
|
+
* {@link HEAD_TAIL_HASH_BYTES} bytes to detect this. For tar archives
|
|
45
|
+
* the head holds the first entry's header (which moves when the inner
|
|
46
|
+
* directory's name changes) and the tail holds the last entry's data
|
|
47
|
+
* (which always moves on `crawl --append` because the appended pages
|
|
48
|
+
* land near the end of the tar stream).
|
|
49
|
+
* - Full-content sha256 was rejected: ~20-30 s on a 10 GB archive,
|
|
50
|
+
* which is slower than the untar this cache is meant to avoid.
|
|
51
|
+
*
|
|
52
|
+
* The key is stable across symlinks (the caller resolves via
|
|
53
|
+
* `fs.realpath` upstream) but **not** across hardlinks pointing at a
|
|
54
|
+
* mutated inode — that is intentional, hardlinking is a power-user
|
|
55
|
+
* move and the user is expected to know the cache will share an entry.
|
|
56
|
+
* @param archivePath - Absolute path to the `.nitpicker` file.
|
|
57
|
+
* @returns A string of the form
|
|
58
|
+
* `<size>-<mtime_ns>-<ctime_ns>-<headHex>-<tailHex>` suitable for use
|
|
59
|
+
* as a directory-name component.
|
|
60
|
+
*/
|
|
61
|
+
export async function computeArchiveCacheKey(archivePath) {
|
|
62
|
+
const stats = await fs.stat(archivePath, { bigint: true });
|
|
63
|
+
const fileSize = Number(stats.size);
|
|
64
|
+
const headHex = await sha256OfRange(archivePath, 0, Math.min(HEAD_TAIL_HASH_BYTES, fileSize));
|
|
65
|
+
const tailHex = fileSize > HEAD_TAIL_HASH_BYTES
|
|
66
|
+
? await sha256OfRange(archivePath, fileSize - HEAD_TAIL_HASH_BYTES, HEAD_TAIL_HASH_BYTES)
|
|
67
|
+
: TAIL_NOT_NEEDED;
|
|
68
|
+
return `${stats.size}-${stats.mtimeNs}-${stats.ctimeNs}-${headHex}-${tailHex}`;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* SHA-256 the requested byte range of a file via a single read stream.
|
|
72
|
+
* Truncated to 16 hex chars (64 bits) because the digest only needs to
|
|
73
|
+
* disambiguate within a `(size, mtime, ctime)` bucket — full 256-bit
|
|
74
|
+
* fingerprints would only waste filesystem path budget.
|
|
75
|
+
* @param filePath - Absolute path to the file.
|
|
76
|
+
* @param start - Inclusive byte offset to begin reading at.
|
|
77
|
+
* @param length - Number of bytes to read; 0 returns the empty-input digest.
|
|
78
|
+
* @returns A 16-character hex string.
|
|
79
|
+
*/
|
|
80
|
+
async function sha256OfRange(filePath, start, length) {
|
|
81
|
+
const hash = createHash('sha256');
|
|
82
|
+
if (length === 0) {
|
|
83
|
+
return hash.digest('hex').slice(0, 16);
|
|
84
|
+
}
|
|
85
|
+
await new Promise((resolve, reject) => {
|
|
86
|
+
const stream = createReadStream(filePath, {
|
|
87
|
+
start,
|
|
88
|
+
end: start + length - 1,
|
|
89
|
+
});
|
|
90
|
+
stream.on('data', (chunk) => hash.update(chunk));
|
|
91
|
+
stream.on('end', () => resolve());
|
|
92
|
+
stream.on('error', (error) => reject(error));
|
|
93
|
+
});
|
|
94
|
+
return hash.digest('hex').slice(0, 16);
|
|
95
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Untar a `.nitpicker` archive into the given cache directory.
|
|
3
|
+
*
|
|
4
|
+
* Concurrency / re-entry contract:
|
|
5
|
+
*
|
|
6
|
+
* - Two viewers opening the same archive race for the cache lock; the
|
|
7
|
+
* loser waits and recheck-loops until the winner writes the ready
|
|
8
|
+
* marker, then short-circuits.
|
|
9
|
+
* - Same-process concurrent callers dedupe through
|
|
10
|
+
* `inFlightByCacheDir` so they share one extraction promise.
|
|
11
|
+
*
|
|
12
|
+
* Per-archive staging:
|
|
13
|
+
*
|
|
14
|
+
* - The tar's inner directory is extracted into `${cacheDir}.staging/`
|
|
15
|
+
* first, then atomically renamed into `cacheDir`. Crucially, the
|
|
16
|
+
* staging path is keyed off `cacheDir` (not the tar's inner directory
|
|
17
|
+
* name) so two archives that happen to share an inner-dir name never
|
|
18
|
+
* collide on the same staging slot.
|
|
19
|
+
*
|
|
20
|
+
* Integrity guard:
|
|
21
|
+
*
|
|
22
|
+
* - After rename, we run the writer-side `Database.connect` so all
|
|
23
|
+
* migrations apply (column adds, new tables) and the version check
|
|
24
|
+
* fires before the ready marker is written. A corrupt or incompatible
|
|
25
|
+
* archive therefore poisons no cache entry — the cacheDir is removed
|
|
26
|
+
* and the next caller retries from scratch.
|
|
27
|
+
*
|
|
28
|
+
* TOCTOU guard:
|
|
29
|
+
*
|
|
30
|
+
* - The cache key is recomputed from the file's stat AFTER the untar
|
|
31
|
+
* completes. If the file changed mid-flight (a concurrent
|
|
32
|
+
* `crawl --append` rewrote it), the freshly-landed cache contents do
|
|
33
|
+
* not correspond to the original key, so we abort and remove the
|
|
34
|
+
* cacheDir so the caller upstream sees the inconsistency rather than
|
|
35
|
+
* serving misattributed data.
|
|
36
|
+
* @param archivePath - Absolute path to the source `.nitpicker` file.
|
|
37
|
+
* @param cacheRoot - Absolute path to the cache root directory.
|
|
38
|
+
* @param cacheDir - Absolute path the extracted contents should end up at.
|
|
39
|
+
* @param cacheKey - The cache key used to derive `cacheDir`. Recomputed
|
|
40
|
+
* after extraction to detect concurrent writers; must match.
|
|
41
|
+
* @param onExtractProgress - Called during the untar step with bytes read
|
|
42
|
+
* so far and the archive's total size (issue #294: a cold cache on a
|
|
43
|
+
* large archive can take tens of seconds with no other signal it isn't
|
|
44
|
+
* hung). Never called on a cache hit — {@link isCacheDirReady} short-
|
|
45
|
+
* circuits before `untar` runs — so callers can treat "never invoked" as
|
|
46
|
+
* the definition of a hit and skip printing a phase label until the
|
|
47
|
+
* first call actually arrives. Only the first concurrent caller for a
|
|
48
|
+
* given `cacheDir` sees callbacks; same-`cacheDir` callers deduped
|
|
49
|
+
* through {@link inFlightByCacheDir} just await the shared promise.
|
|
50
|
+
* @param onLog - Forwarded to the cache-miss writer connection
|
|
51
|
+
* (`runMigrationsOnCacheDir`'s `Database.connect`) so a legacy archive's
|
|
52
|
+
* self-healing schema migrations do not fall back to a bare
|
|
53
|
+
* `console.error` mid-redraw of a caller's display (issue #294). Omit for
|
|
54
|
+
* that fallback — see `Archive.openCached`'s own `onLog` doc.
|
|
55
|
+
* @returns Resolves once `cacheDir` is ready to be opened read-only.
|
|
56
|
+
*/
|
|
57
|
+
export declare function extractArchiveToCache(archivePath: string, cacheRoot: string, cacheDir: string, cacheKey: string, onExtractProgress?: (readBytes: number, totalBytes: number) => void, onLog?: (message: string) => void): Promise<void>;
|