@gscdump/engine 3.7.0 → 4.0.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/dist/THIRD-PARTY-LICENSES.md +2 -2
- package/dist/adapters/filesystem.mjs +52 -19
- package/dist/adapters/hyparquet.d.mts +2 -2
- package/dist/adapters/hyparquet.mjs +6 -6
- package/dist/adapters/node.d.mts +2 -2
- package/dist/adapters/parquet-attach.d.mts +11 -4
- package/dist/adapters/parquet-attach.mjs +18 -5
- package/dist/adapters/r2-manifest.mjs +47 -27
- package/dist/analysis-range.d.mts +58 -1
- package/dist/analysis-range.mjs +102 -1
- package/dist/analysis-types.d.mts +42 -1
- package/dist/analysis-types.mjs +8 -1
- package/dist/analyzer/dispatch.mjs +21 -4
- package/dist/engine.mjs +5 -4
- package/dist/entities/inspection.d.mts +11 -0
- package/dist/entities/inspection.mjs +17 -0
- package/dist/entities/sitemap-list.d.mts +37 -0
- package/dist/entities/sitemap-list.mjs +23 -0
- package/dist/entities.d.mts +3 -2
- package/dist/entities.mjs +3 -2
- package/dist/entity-keys.d.mts +2 -0
- package/dist/entity-keys.mjs +4 -1
- package/dist/iceberg/catalog.d.mts +2 -2
- package/dist/iceberg/catalog.mjs +2 -2
- package/dist/ingest.d.mts +11 -2
- package/dist/ingest.mjs +19 -12
- package/dist/node_modules/.pnpm/hyparquet-compressors@1.1.2/node_modules/hyparquet-compressors/src/brotli.bitreader.mjs +93 -0
- package/dist/node_modules/.pnpm/{hyparquet-compressors@1.1.1 → hyparquet-compressors@1.1.2}/node_modules/hyparquet-compressors/src/brotli.huffman.mjs +19 -15
- package/dist/node_modules/.pnpm/{hyparquet-compressors@1.1.1 → hyparquet-compressors@1.1.2}/node_modules/hyparquet-compressors/src/brotli.mjs +5 -13
- package/dist/node_modules/.pnpm/hyparquet-compressors@1.1.2/node_modules/hyparquet-compressors/src/brotli.streams.mjs +25 -0
- package/dist/node_modules/.pnpm/{hyparquet-compressors@1.1.1 → hyparquet-compressors@1.1.2}/node_modules/hyparquet-compressors/src/brotli.transform.mjs +9 -7
- package/dist/node_modules/.pnpm/{hyparquet-compressors@1.1.1 → hyparquet-compressors@1.1.2}/node_modules/hyparquet-compressors/src/gzip.mjs +1 -4
- package/dist/node_modules/.pnpm/{hyparquet-compressors@1.1.1 → hyparquet-compressors@1.1.2}/node_modules/hyparquet-compressors/src/lz4.mjs +2 -1
- package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/bloom.mjs +1 -1
- package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/column.mjs +5 -4
- package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/datapage.mjs +1 -1
- package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/delta.mjs +21 -6
- package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/dremel.mjs +1 -1
- package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/indexes.mjs +1 -1
- package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/metadata.mjs +2 -2
- package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/parquet-writer.mjs +1 -1
- package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/types.d.mts +1 -1
- package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/unconvert.mjs +2 -2
- package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/types/index.d.mts +1 -1
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f/node_modules/hyparquet-writer/types/parquet-writer.d.mts +2 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f/node_modules/hyparquet-writer/types/schema.d.mts +2 -0
- package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/filter.mjs +1 -1
- package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/index.mjs +2 -2
- package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/indexes.mjs +3 -3
- package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/metadata.mjs +2 -2
- package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/node.mjs +2 -2
- package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/rowgroup.mjs +7 -7
- package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/types.d.mts +9 -1
- package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/utils.mjs +18 -1
- package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/types/index.d.mts +2 -1
- package/dist/node_modules/.pnpm/hyparquet@1.31.1/node_modules/hyparquet/types/node.d.mts +3 -0
- package/dist/node_modules/.pnpm/icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/src/avro/avro.metadata.mjs +2 -0
- package/dist/node_modules/.pnpm/icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/src/avro/avro.read.mjs +5 -0
- package/dist/node_modules/.pnpm/icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/src/avro/avro.write.mjs +2 -0
- package/dist/node_modules/.pnpm/icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/src/fetch.mjs +9 -0
- package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/index.mjs +1 -1
- package/dist/node_modules/.pnpm/icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/src/read.mjs +12 -0
- package/dist/node_modules/.pnpm/icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/src/s3.mjs +3 -0
- package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/sql/icebergDataSource.mjs +1 -1
- package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/sql/icebergQuery.mjs +1 -1
- package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/types.d.mts +4 -4
- package/dist/node_modules/.pnpm/icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/src/write/parquet.mjs +5 -0
- package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/write/rewrite.mjs +1 -1
- package/dist/node_modules/.pnpm/icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/types/fetch.d.mts +2 -0
- package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/types/index.d.mts +1 -1
- package/dist/node_modules/.pnpm/icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/types/read.d.mts +3 -0
- package/dist/node_modules/.pnpm/icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/types/sql/icebergDataSource.d.mts +2 -0
- package/dist/node_modules/.pnpm/icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/types/sql/icebergQuery.d.mts +2 -0
- package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/plan/plan.mjs +1 -0
- package/dist/report/types.d.mts +8 -1
- package/dist/resolver/fragments.mjs +6 -4
- package/dist/schema.d.mts +4 -2
- package/dist/storage.d.mts +15 -5
- package/dist/vendor/hysnappy-purejs.mjs +1 -1
- package/package.json +12 -12
- package/dist/node_modules/.pnpm/hyparquet-compressors@1.1.1/node_modules/hyparquet-compressors/src/brotli.bitreader.mjs +0 -88
- package/dist/node_modules/.pnpm/hyparquet-compressors@1.1.1/node_modules/hyparquet-compressors/src/brotli.streams.mjs +0 -21
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f/node_modules/hyparquet-writer/types/parquet-writer.d.mts +0 -2
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f/node_modules/hyparquet-writer/types/schema.d.mts +0 -2
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/assemble.mjs +0 -3
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/bloom.mjs +0 -69
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/column.mjs +0 -8
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/convert.mjs +0 -3
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/datapage.mjs +0 -6
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/delta.mjs +0 -2
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/encoding.mjs +0 -2
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/filter.mjs +0 -4
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/geoparquet.mjs +0 -1
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/index.mjs +0 -8
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/indexes.mjs +0 -5
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/metadata.mjs +0 -7
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/node.mjs +0 -3
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/plain.mjs +0 -1
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/plan.mjs +0 -6
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/read.mjs +0 -7
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/rowgroup.mjs +0 -7
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/scan.mjs +0 -6
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/schema.mjs +0 -54
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/snappy.mjs +0 -1
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/thrift.mjs +0 -1
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/types.d.mts +0 -8
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/utils.mjs +0 -19
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/variant.mjs +0 -3
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/src/wkb.mjs +0 -1
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/types/index.d.mts +0 -9
- package/dist/node_modules/.pnpm/hyparquet@1.29.2/node_modules/hyparquet/types/node.d.mts +0 -3
- package/dist/node_modules/.pnpm/hyparquet@1.30.0/node_modules/hyparquet/src/constants.mjs +0 -80
- package/dist/node_modules/.pnpm/hyparquet@1.30.0/node_modules/hyparquet/src/query.mjs +0 -3
- package/dist/node_modules/.pnpm/hyparquet@1.30.0/node_modules/hyparquet/src/xxhash.mjs +0 -68
- package/dist/node_modules/.pnpm/hyparquet@1.30.0/node_modules/hyparquet/types/indexes.d.mts +0 -1
- package/dist/node_modules/.pnpm/hyparquet@1.30.0/node_modules/hyparquet/types/node.d.mts +0 -3
- package/dist/node_modules/.pnpm/hyparquet@1.30.0/node_modules/hyparquet/types/query.d.mts +0 -1
- package/dist/node_modules/.pnpm/hyparquet@1.30.0/node_modules/hyparquet/types/read.d.mts +0 -1
- package/dist/node_modules/.pnpm/hyparquet@1.30.0/node_modules/hyparquet/types/scan.d.mts +0 -1
- package/dist/node_modules/.pnpm/hyparquet@1.30.0/node_modules/hyparquet/types/snappy.d.mts +0 -1
- package/dist/node_modules/.pnpm/hyparquet@1.30.0/node_modules/hyparquet/types/utils.d.mts +0 -1
- package/dist/node_modules/.pnpm/icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/src/avro/avro.metadata.mjs +0 -1
- package/dist/node_modules/.pnpm/icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/src/avro/avro.read.mjs +0 -4
- package/dist/node_modules/.pnpm/icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/src/avro/avro.write.mjs +0 -2
- package/dist/node_modules/.pnpm/icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/src/fetch.mjs +0 -9
- package/dist/node_modules/.pnpm/icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/src/read.mjs +0 -12
- package/dist/node_modules/.pnpm/icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/src/s3.mjs +0 -3
- package/dist/node_modules/.pnpm/icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/src/write/parquet.mjs +0 -5
- package/dist/node_modules/.pnpm/icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/types/fetch.d.mts +0 -2
- package/dist/node_modules/.pnpm/icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/types/metadata.d.mts +0 -1
- package/dist/node_modules/.pnpm/icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/types/read.d.mts +0 -3
- package/dist/node_modules/.pnpm/icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/types/sql/icebergDataSource.d.mts +0 -2
- package/dist/node_modules/.pnpm/icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird/types/sql/icebergQuery.d.mts +0 -2
- /package/dist/node_modules/.pnpm/{hyparquet-compressors@1.1.1 → hyparquet-compressors@1.1.2}/node_modules/hyparquet-compressors/src/brotli.blocks.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-compressors@1.1.1 → hyparquet-compressors@1.1.2}/node_modules/hyparquet-compressors/src/brotli.context.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-compressors@1.1.1 → hyparquet-compressors@1.1.2}/node_modules/hyparquet-compressors/src/brotli.contextmap.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-compressors@1.1.1 → hyparquet-compressors@1.1.2}/node_modules/hyparquet-compressors/src/brotli.dictionary.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-compressors@1.1.1 → hyparquet-compressors@1.1.2}/node_modules/hyparquet-compressors/src/brotli.prefix.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-compressors@1.1.1 → hyparquet-compressors@1.1.2}/node_modules/hyparquet-compressors/src/compressors.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-compressors@1.1.1 → hyparquet-compressors@1.1.2}/node_modules/hyparquet-compressors/src/gzip.huffman.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-compressors@1.1.1 → hyparquet-compressors@1.1.2}/node_modules/hyparquet-compressors/src/index.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/bytewriter.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/dictionary.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/encoding.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/geospatial.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/index.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/node.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/plain.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/schema.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/snappy.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/splitstream.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/thrift.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/variant.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/wkb.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/write-rows.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/src/write.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/types/bytewriter.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/types/node.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/types/wkb.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/types/write-rows.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet-writer@0.16.9_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f → hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f}/node_modules/hyparquet-writer/types/write.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/assemble.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/bloom.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/column.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.29.2 → hyparquet@1.31.1}/node_modules/hyparquet/src/constants.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/convert.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/datapage.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/delta.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/encoding.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/geoparquet.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/plain.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/plan.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.29.2 → hyparquet@1.31.1}/node_modules/hyparquet/src/query.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/read.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/scan.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/schema.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/snappy.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/thrift.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/variant.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.30.0 → hyparquet@1.31.1}/node_modules/hyparquet/src/wkb.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.29.2 → hyparquet@1.31.1}/node_modules/hyparquet/src/xxhash.mjs +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.29.2 → hyparquet@1.31.1}/node_modules/hyparquet/types/indexes.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.29.2 → hyparquet@1.31.1}/node_modules/hyparquet/types/metadata.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.29.2 → hyparquet@1.31.1}/node_modules/hyparquet/types/query.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.29.2 → hyparquet@1.31.1}/node_modules/hyparquet/types/read.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.29.2 → hyparquet@1.31.1}/node_modules/hyparquet/types/scan.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.29.2 → hyparquet@1.31.1}/node_modules/hyparquet/types/snappy.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.29.2 → hyparquet@1.31.1}/node_modules/hyparquet/types/utils.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/catalog/file.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/catalog/loadTable.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/catalog/rest.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/create.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/delete.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/json.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/manifest.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/metadata.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/prune.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/puffin/deletion-vector.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/puffin/puffin.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/puffin/roaring.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/schema.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/sigv4.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/sql/whereFilter.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/utils.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/write/commit.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/write/conversions.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/write/delete-file.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/write/geospatial.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/write/manifest-list.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/write/manifest.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/write/partition.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/write/serde.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/write/snapshot.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/write/sort.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/write/stage-deletion-vector.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/write/stage-position-delete.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/write/stage.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/write/stats.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/write/transform.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/src/write/write.mjs +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/types/catalog/file.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/types/catalog/rest.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/types/create.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/types/manifest.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{hyparquet@1.30.0/node_modules/hyparquet → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae/node_modules/icebird}/types/metadata.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/types/s3.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{icebird@0.8.28_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae → icebird@0.8.30_patch_hash_fddf140b38d2e0cf41ed74c5b5eb5cac324d0a6ac428572f1df7a967dcb19cae}/node_modules/icebird/types/write/write.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/ast.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/backend/batch.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/backend/batchAdapters.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/backend/dataSource.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/execute/accumulator.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/execute/aggregates.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/execute/batchResults.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/execute/batches.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/execute/execute.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/execute/fold.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/execute/join.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/execute/rowScope.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/execute/scanColumn.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/execute/sort.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/execute/streamingAggregate.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/execute/utils.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/execute/window.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/execute/yield.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/expression/alias.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/expression/batch.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/expression/binary.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/expression/date.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/expression/evaluate.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/expression/math.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/expression/regexp.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/expression/scalar.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/expression/strings.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/index.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/index.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/parse/expression.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/parse/extractTables.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/parse/functions.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/parse/joins.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/parse/parse.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/parse/primary.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/parse/state.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/parse/tokenize.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/parse/types.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/plan/columns.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/plan/types.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/spatial/bbox.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/spatial/equality.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/spatial/operations.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/spatial/pointRelations.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/spatial/primitives.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/spatial/segments.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/spatial/spatial.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/spatial/wkt.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/types.d.mts +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/validation/aggregates.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/validation/executionErrors.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/validation/functions.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/validation/keywords.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/validation/parseErrors.mjs +0 -0
- /package/dist/node_modules/.pnpm/{squirreling@0.16.4 → squirreling@0.16.6}/node_modules/squirreling/src/validation/tables.mjs +0 -0
|
@@ -35,11 +35,11 @@ Repository: https://github.com/101arrowz/fzstd
|
|
|
35
35
|
|
|
36
36
|
---------------------------------------
|
|
37
37
|
|
|
38
|
-
## hyparquet, hyparquet
|
|
38
|
+
## hyparquet, hyparquet-compressors, hyparquet-writer, icebird, squirreling
|
|
39
39
|
|
|
40
40
|
License: MIT
|
|
41
41
|
By: Hyperparam
|
|
42
|
-
Repositories: https://github.com/hyparam/hyparquet, https://github.com/hyparam/hyparquet
|
|
42
|
+
Repositories: https://github.com/hyparam/hyparquet, https://github.com/hyparam/hyparquet-compressors, https://github.com/hyparam/hyparquet-writer, https://github.com/hyparam/icebird, https://github.com/hyparam/squirreling
|
|
43
43
|
|
|
44
44
|
> The MIT License (MIT)
|
|
45
45
|
>
|
|
@@ -130,10 +130,48 @@ function lockFileFor(locksDir, scope) {
|
|
|
130
130
|
const safe = `${scope.userId}|${scope.siteId ?? ""}|${scope.table}|${scope.partition}`.replace(/[^\w.-]/g, "_");
|
|
131
131
|
return join(locksDir, `${safe}.lock`);
|
|
132
132
|
}
|
|
133
|
+
const inProcessLockTails = /* @__PURE__ */ new Map();
|
|
134
|
+
async function withInProcessQueue(path, fn) {
|
|
135
|
+
const previous = inProcessLockTails.get(path) ?? Promise.resolve();
|
|
136
|
+
let release;
|
|
137
|
+
const current = new Promise((resolve) => {
|
|
138
|
+
release = resolve;
|
|
139
|
+
});
|
|
140
|
+
const tail = previous.then(() => current);
|
|
141
|
+
inProcessLockTails.set(path, tail);
|
|
142
|
+
await previous;
|
|
143
|
+
try {
|
|
144
|
+
return await fn();
|
|
145
|
+
} finally {
|
|
146
|
+
release();
|
|
147
|
+
if (inProcessLockTails.get(path) === tail) inProcessLockTails.delete(path);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
133
150
|
function createFilesystemManifestStore(opts) {
|
|
134
151
|
const manifestPath = resolve(opts.path);
|
|
135
152
|
const locksDir = join(dirname(manifestPath), "locks");
|
|
136
153
|
const readyDirectories = /* @__PURE__ */ new Map();
|
|
154
|
+
async function withFileLock(path, fn) {
|
|
155
|
+
await writeFile(path, "", { flag: "a" }).catch(async (error) => {
|
|
156
|
+
if (error.code !== "ENOENT") throw error;
|
|
157
|
+
readyDirectories.delete(locksDir);
|
|
158
|
+
await ensureDirectory(locksDir);
|
|
159
|
+
await writeFile(path, "", { flag: "a" });
|
|
160
|
+
});
|
|
161
|
+
const release = await lock(path, {
|
|
162
|
+
realpath: false,
|
|
163
|
+
stale: 3e4,
|
|
164
|
+
retries: {
|
|
165
|
+
retries: 20,
|
|
166
|
+
minTimeout: 50,
|
|
167
|
+
maxTimeout: 500,
|
|
168
|
+
factor: 1.5
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
return await fn().finally(() => release().catch((releaseErr) => {
|
|
172
|
+
console.warn(`[gscdump/engine] failed to release lock ${path}; it will go stale after 30000ms`, releaseErr);
|
|
173
|
+
}));
|
|
174
|
+
}
|
|
137
175
|
async function ensureDirectory(path) {
|
|
138
176
|
let pending = readyDirectories.get(path);
|
|
139
177
|
if (!pending) {
|
|
@@ -247,28 +285,23 @@ function createFilesystemManifestStore(opts) {
|
|
|
247
285
|
await save(data);
|
|
248
286
|
});
|
|
249
287
|
},
|
|
288
|
+
async setSyncStates(scopes, state, detail) {
|
|
289
|
+
if (scopes.length === 0) return;
|
|
290
|
+
return enqueue(async () => {
|
|
291
|
+
const data = await load();
|
|
292
|
+
const byKey = new Map((data.syncStates ?? []).map((s) => [syncStateKey(s), s]));
|
|
293
|
+
for (const scope of scopes) {
|
|
294
|
+
const key = syncStateKey(scope);
|
|
295
|
+
byKey.set(key, mergeSyncState(byKey.get(key), scope, state, detail));
|
|
296
|
+
}
|
|
297
|
+
data.syncStates = Array.from(byKey.values());
|
|
298
|
+
await save(data);
|
|
299
|
+
});
|
|
300
|
+
},
|
|
250
301
|
async withLock(scope, fn) {
|
|
251
302
|
await ensureDirectory(locksDir);
|
|
252
303
|
const path = lockFileFor(locksDir, scope);
|
|
253
|
-
|
|
254
|
-
if (error.code !== "ENOENT") throw error;
|
|
255
|
-
readyDirectories.delete(locksDir);
|
|
256
|
-
await ensureDirectory(locksDir);
|
|
257
|
-
await writeFile(path, "", { flag: "a" });
|
|
258
|
-
});
|
|
259
|
-
const release = await lock(path, {
|
|
260
|
-
realpath: false,
|
|
261
|
-
stale: 3e4,
|
|
262
|
-
retries: {
|
|
263
|
-
retries: 20,
|
|
264
|
-
minTimeout: 50,
|
|
265
|
-
maxTimeout: 500,
|
|
266
|
-
factor: 1.5
|
|
267
|
-
}
|
|
268
|
-
});
|
|
269
|
-
return await fn().finally(() => release().catch((releaseErr) => {
|
|
270
|
-
console.warn(`[gscdump/engine] failed to release lock ${path}; it will go stale after 30000ms`, releaseErr);
|
|
271
|
-
}));
|
|
304
|
+
return withInProcessQueue(path, () => withFileLock(path, fn));
|
|
272
305
|
},
|
|
273
306
|
async purgeTenant(filter) {
|
|
274
307
|
return enqueue(async () => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ParquetQueryFilter } from "../node_modules/.pnpm/hyparquet@1.
|
|
2
|
-
import "../node_modules/.pnpm/hyparquet@1.
|
|
1
|
+
import { ParquetQueryFilter } from "../node_modules/.pnpm/hyparquet@1.31.1/node_modules/hyparquet/types/index.mjs";
|
|
2
|
+
import "../node_modules/.pnpm/hyparquet@1.31.1/node_modules/hyparquet/types/node.mjs";
|
|
3
3
|
import { CodecCtx, DataSource, ParquetCodec, Row, TableName } from "../storage.mjs";
|
|
4
4
|
import { ColumnDef } from "../schema.mjs";
|
|
5
5
|
export declare function encodeRowsToParquet(table: TableName, rows: readonly Row[]): Uint8Array;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { TABLE_METADATA } from "../drizzle-schema.mjs";
|
|
2
2
|
import { SCHEMAS } from "../schema.mjs";
|
|
3
|
-
import { parquetMetadataAsync, parquetSchema } from "../node_modules/.pnpm/hyparquet@1.
|
|
4
|
-
import { parquetReadObjects } from "../node_modules/.pnpm/hyparquet@1.
|
|
5
|
-
import "../node_modules/.pnpm/hyparquet@1.
|
|
6
|
-
import { ByteWriter } from "../node_modules/.pnpm/hyparquet-writer@0.16.
|
|
7
|
-
import { parquetWriteRows } from "../node_modules/.pnpm/hyparquet-writer@0.16.
|
|
8
|
-
import "../node_modules/.pnpm/hyparquet-writer@0.16.
|
|
3
|
+
import { parquetMetadataAsync, parquetSchema } from "../node_modules/.pnpm/hyparquet@1.31.1/node_modules/hyparquet/src/metadata.mjs";
|
|
4
|
+
import { parquetReadObjects } from "../node_modules/.pnpm/hyparquet@1.31.1/node_modules/hyparquet/src/read.mjs";
|
|
5
|
+
import "../node_modules/.pnpm/hyparquet@1.31.1/node_modules/hyparquet/src/node.mjs";
|
|
6
|
+
import { ByteWriter } from "../node_modules/.pnpm/hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f/node_modules/hyparquet-writer/src/bytewriter.mjs";
|
|
7
|
+
import { parquetWriteRows } from "../node_modules/.pnpm/hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f/node_modules/hyparquet-writer/src/write-rows.mjs";
|
|
8
|
+
import "../node_modules/.pnpm/hyparquet-writer@0.16.10_patch_hash_d26d002aede61ad95dd633d6557b56897cdcbc45dfc3a5d93fa0e9075ad5425f/node_modules/hyparquet-writer/src/node.mjs";
|
|
9
9
|
const ROW_GROUP_SIZE = 25e3;
|
|
10
10
|
const DEFAULT_COMPACTION_READ_CONCURRENCY = 8;
|
|
11
11
|
const MAX_COMPACTION_READ_CONCURRENCY = 32;
|
package/dist/adapters/node.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { NodeDuckDBOptions, createNodeDuckDBHandle, resetNodeDuckDB } from "./duckdb-node.mjs";
|
|
2
2
|
import { NodeHarness, NodeHarnessOptions, createNodeHarness } from "./node-harness.mjs";
|
|
3
3
|
import { AttachSnapshotOptions, AttachSnapshotResult, SnapshotQueryRunner, attachSnapshotIndex, snapshotAlias } from "./snapshot-attach.mjs";
|
|
4
|
-
import { AttachParquetIndexOptions, AttachParquetIndexResult, attachParquetIndex } from "./parquet-attach.mjs";
|
|
5
|
-
export { type AttachParquetIndexOptions, type AttachParquetIndexResult, type AttachSnapshotOptions, type AttachSnapshotResult, type NodeDuckDBOptions, type NodeHarness, type NodeHarnessOptions, type SnapshotQueryRunner, attachParquetIndex, attachSnapshotIndex, createNodeDuckDBHandle, createNodeHarness, resetNodeDuckDB, snapshotAlias };
|
|
4
|
+
import { AttachParquetIndexOptions, AttachParquetIndexResult, ParquetFileGroup, attachParquetIndex } from "./parquet-attach.mjs";
|
|
5
|
+
export { type AttachParquetIndexOptions, type AttachParquetIndexResult, type AttachSnapshotOptions, type AttachSnapshotResult, type NodeDuckDBOptions, type NodeHarness, type NodeHarnessOptions, type ParquetFileGroup, type SnapshotQueryRunner, attachParquetIndex, attachSnapshotIndex, createNodeDuckDBHandle, createNodeHarness, resetNodeDuckDB, snapshotAlias };
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import { SnapshotQueryRunner } from "./snapshot-attach.mjs";
|
|
2
|
+
/** Files that share constant column values, such as one Site and search type. */
|
|
3
|
+
export interface ParquetFileGroup {
|
|
4
|
+
urls: string[];
|
|
5
|
+
/** Column name → VARCHAR value added to every row of this group. */
|
|
6
|
+
constants?: Record<string, string>;
|
|
7
|
+
}
|
|
2
8
|
export interface AttachParquetIndexOptions {
|
|
3
9
|
/**
|
|
4
|
-
* Map of table name → list of Parquet URLs or local paths
|
|
5
|
-
* compacted files and per-day files — DuckDB
|
|
6
|
-
* `union_by_name = true`. Empty lists
|
|
10
|
+
* Map of table name → list of Parquet URLs or local paths, or groups of
|
|
11
|
+
* them. A list may mix monthly compacted files and per-day files — DuckDB
|
|
12
|
+
* scans all of them with `union_by_name = true`. Empty lists and groups
|
|
13
|
+
* are skipped; a table with no files gets no view.
|
|
7
14
|
*/
|
|
8
|
-
tables: Record<string, string[]>;
|
|
15
|
+
tables: Record<string, string[] | ParquetFileGroup[]>;
|
|
9
16
|
/** Schema the views land under. Default `main`. */
|
|
10
17
|
schema?: string;
|
|
11
18
|
/**
|
|
@@ -1,11 +1,24 @@
|
|
|
1
1
|
const IDENT_RE = /^[A-Z_][\w$]*$/i;
|
|
2
2
|
const REMOTE_URL_RE = /^(?:https?|s3):\/\//i;
|
|
3
|
+
function toGroups(value) {
|
|
4
|
+
return value.every((item) => typeof item === "string") ? [{ urls: value }] : value;
|
|
5
|
+
}
|
|
6
|
+
function quote(value) {
|
|
7
|
+
return `'${value.replace(/'/g, "''")}'`;
|
|
8
|
+
}
|
|
9
|
+
function groupSelect(group) {
|
|
10
|
+
return `SELECT ${Object.entries(group.constants ?? {}).map(([name, value]) => `${quote(value)}::VARCHAR AS ${name}, `).join("")}* FROM read_parquet([${group.urls.map(quote).join(", ")}], union_by_name = true)`;
|
|
11
|
+
}
|
|
3
12
|
async function attachParquetIndex(runner, opts) {
|
|
4
13
|
const schema = opts.schema ?? "main";
|
|
5
14
|
const forceDownload = opts.forceDownload !== false;
|
|
6
15
|
if (!IDENT_RE.test(schema)) throw new TypeError(`attachParquetIndex: invalid schema identifier ${JSON.stringify(schema)}`);
|
|
7
|
-
|
|
8
|
-
|
|
16
|
+
const tables = Object.entries(opts.tables).map(([table, value]) => [table, toGroups(value).filter((group) => group.urls.length > 0)]);
|
|
17
|
+
for (const [table, groups] of tables) {
|
|
18
|
+
if (!IDENT_RE.test(table)) throw new TypeError(`attachParquetIndex: invalid table identifier ${JSON.stringify(table)}`);
|
|
19
|
+
for (const name of groups.flatMap((group) => Object.keys(group.constants ?? {}))) if (!IDENT_RE.test(name)) throw new TypeError(`attachParquetIndex: invalid column identifier ${JSON.stringify(name)}`);
|
|
20
|
+
}
|
|
21
|
+
if (tables.some(([, groups]) => groups.some((group) => group.urls.some((url) => REMOTE_URL_RE.test(url))))) {
|
|
9
22
|
await runner("LOAD httpfs").catch((cause) => {
|
|
10
23
|
throw new Error("Remote files require the DuckDB httpfs extension. Install httpfs before attaching remote files.", { cause });
|
|
11
24
|
});
|
|
@@ -13,9 +26,9 @@ async function attachParquetIndex(runner, opts) {
|
|
|
13
26
|
}
|
|
14
27
|
await runner(`CREATE SCHEMA IF NOT EXISTS ${schema}`);
|
|
15
28
|
const created = [];
|
|
16
|
-
for (const [table,
|
|
17
|
-
if (
|
|
18
|
-
await runner(`CREATE OR REPLACE VIEW ${schema}.${table} AS
|
|
29
|
+
for (const [table, groups] of tables) {
|
|
30
|
+
if (groups.length === 0) continue;
|
|
31
|
+
await runner(`CREATE OR REPLACE VIEW ${schema}.${table} AS ${groups.map(groupSelect).join(" UNION ALL BY NAME ")}`);
|
|
19
32
|
created.push(table);
|
|
20
33
|
}
|
|
21
34
|
return {
|
|
@@ -54,6 +54,34 @@ function shardScopesFromEntries(entries) {
|
|
|
54
54
|
}
|
|
55
55
|
return out;
|
|
56
56
|
}
|
|
57
|
+
function applySyncState(snap, scope, state, at, detail) {
|
|
58
|
+
const scopeSearchType = inferSearchType(scope);
|
|
59
|
+
const idx = snap.syncStates.findIndex((s) => s.userId === scope.userId && s.siteId === scope.siteId && s.table === scope.table && s.date === scope.date && inferSearchType(s) === scopeSearchType);
|
|
60
|
+
if (idx === -1) {
|
|
61
|
+
snap.syncStates.push({
|
|
62
|
+
userId: scope.userId,
|
|
63
|
+
siteId: scope.siteId,
|
|
64
|
+
table: scope.table,
|
|
65
|
+
date: scope.date,
|
|
66
|
+
state,
|
|
67
|
+
updatedAt: at,
|
|
68
|
+
attempts: 1,
|
|
69
|
+
error: detail?.error,
|
|
70
|
+
...scope.searchType !== void 0 ? { searchType: scope.searchType } : {}
|
|
71
|
+
});
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const prev = snap.syncStates[idx];
|
|
75
|
+
const attempts = state === "inflight" && prev.state !== "inflight" ? prev.attempts + 1 : prev.attempts;
|
|
76
|
+
const error = state === "done" ? void 0 : detail?.error ?? prev.error;
|
|
77
|
+
snap.syncStates[idx] = {
|
|
78
|
+
...prev,
|
|
79
|
+
state,
|
|
80
|
+
updatedAt: at,
|
|
81
|
+
attempts,
|
|
82
|
+
error
|
|
83
|
+
};
|
|
84
|
+
}
|
|
57
85
|
function createR2ManifestStore(opts) {
|
|
58
86
|
const { bucket, userId } = opts;
|
|
59
87
|
const newSnapshotId = opts.newSnapshotId ?? defaultSnapshotId;
|
|
@@ -298,34 +326,26 @@ function createR2ManifestStore(opts) {
|
|
|
298
326
|
assertScopedUser(scope.userId, "setSyncState");
|
|
299
327
|
if (scope.siteId === void 0) throw new Error("R2 manifest store requires sync states to carry siteId");
|
|
300
328
|
const at = detail?.at ?? now();
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
error: detail?.error,
|
|
314
|
-
...scope.searchType !== void 0 ? { searchType: scope.searchType } : {}
|
|
315
|
-
});
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
|
-
const prev = snap.syncStates[idx];
|
|
319
|
-
const attempts = state === "inflight" && prev.state !== "inflight" ? prev.attempts + 1 : prev.attempts;
|
|
320
|
-
const error = state === "done" ? void 0 : detail?.error ?? prev.error;
|
|
321
|
-
snap.syncStates[idx] = {
|
|
322
|
-
...prev,
|
|
323
|
-
state,
|
|
324
|
-
updatedAt: at,
|
|
325
|
-
attempts,
|
|
326
|
-
error
|
|
329
|
+
await mutateShard(scope.siteId, scope.table, (snap) => applySyncState(snap, scope, state, at, detail));
|
|
330
|
+
},
|
|
331
|
+
async setSyncStates(scopes, state, detail) {
|
|
332
|
+
const byShard = /* @__PURE__ */ new Map();
|
|
333
|
+
for (const scope of scopes) {
|
|
334
|
+
assertScopedUser(scope.userId, "setSyncStates");
|
|
335
|
+
if (scope.siteId === void 0) throw new Error("R2 manifest store requires sync states to carry siteId");
|
|
336
|
+
const key = `${scope.siteId}|${scope.table}`;
|
|
337
|
+
const shard = byShard.get(key) ?? {
|
|
338
|
+
siteId: scope.siteId,
|
|
339
|
+
table: scope.table,
|
|
340
|
+
scopes: []
|
|
327
341
|
};
|
|
328
|
-
|
|
342
|
+
shard.scopes.push(scope);
|
|
343
|
+
byShard.set(key, shard);
|
|
344
|
+
}
|
|
345
|
+
const at = detail?.at ?? now();
|
|
346
|
+
await mapWithConcurrency([...byShard.values()], SHARD_IO_CONCURRENCY, async (shard) => mutateShard(shard.siteId, shard.table, (snap) => {
|
|
347
|
+
for (const scope of shard.scopes) applySyncState(snap, scope, state, at, detail);
|
|
348
|
+
}));
|
|
329
349
|
},
|
|
330
350
|
async withLock(_scope, fn) {
|
|
331
351
|
return fn();
|
|
@@ -1,6 +1,63 @@
|
|
|
1
1
|
import { AnalysisParams } from "./analysis-types.mjs";
|
|
2
|
+
import { SearchType } from "gscdump/query";
|
|
2
3
|
export interface AnalysisCoverageRange {
|
|
3
4
|
start: string;
|
|
4
5
|
end: string;
|
|
5
6
|
}
|
|
6
|
-
export declare function analysisRequestedRange(params: AnalysisParams, onInvalidFilter?: (error: unknown) => void): AnalysisCoverageRange | null;
|
|
7
|
+
export declare function analysisRequestedRange(params: AnalysisParams, onInvalidFilter?: (error: unknown) => void): AnalysisCoverageRange | null;
|
|
8
|
+
export interface DateSpan {
|
|
9
|
+
start: string;
|
|
10
|
+
end: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Where a host reads synced dates from. gscdump.com reads its ingest
|
|
14
|
+
* ledger; the CLI reads the Store's sync states. `table` is a string so a
|
|
15
|
+
* host can name its own derived tables.
|
|
16
|
+
*/
|
|
17
|
+
export interface CoverageReader {
|
|
18
|
+
datesForTable: (opts: {
|
|
19
|
+
table: string;
|
|
20
|
+
searchType: SearchType;
|
|
21
|
+
start: string;
|
|
22
|
+
end: string;
|
|
23
|
+
}) => Promise<readonly string[]>;
|
|
24
|
+
}
|
|
25
|
+
export interface CoveragePlanTable {
|
|
26
|
+
table: string;
|
|
27
|
+
required: boolean;
|
|
28
|
+
coveredSpans: DateSpan[];
|
|
29
|
+
gaps: DateSpan[];
|
|
30
|
+
}
|
|
31
|
+
export interface CoveragePlan {
|
|
32
|
+
searchType: SearchType;
|
|
33
|
+
requested: DateSpan;
|
|
34
|
+
tables: CoveragePlanTable[];
|
|
35
|
+
/** Every required table covers the requested range (less the tail grace). */
|
|
36
|
+
complete: boolean;
|
|
37
|
+
/** Hash of the covered spans. It changes when coverage changes. */
|
|
38
|
+
coverageVersion: string;
|
|
39
|
+
}
|
|
40
|
+
export interface BuildCoveragePlanOptions {
|
|
41
|
+
searchType: SearchType;
|
|
42
|
+
requested: DateSpan;
|
|
43
|
+
tables: readonly (string | {
|
|
44
|
+
table: string;
|
|
45
|
+
required?: boolean;
|
|
46
|
+
})[];
|
|
47
|
+
reader: CoverageReader;
|
|
48
|
+
/** Ignore the still-restating tail when deciding whether coverage is complete. */
|
|
49
|
+
tailGraceDays?: number;
|
|
50
|
+
/** Tables read at once. Default 3. */
|
|
51
|
+
concurrency?: number;
|
|
52
|
+
}
|
|
53
|
+
/** Sorted, merged spans of consecutive dates. */
|
|
54
|
+
export declare function consolidateDatesToSpans(dates: readonly string[]): DateSpan[];
|
|
55
|
+
/** The parts of `requested` that no span covers. Spans must be sorted and disjoint. */
|
|
56
|
+
export declare function gapsForRange(coveredSpans: readonly DateSpan[], requested: DateSpan): DateSpan[];
|
|
57
|
+
/** Days in a span, both ends included. */
|
|
58
|
+
export declare function spanDays(span: DateSpan): number;
|
|
59
|
+
/**
|
|
60
|
+
* Per-table coverage of one requested range. Pure over the reader: the
|
|
61
|
+
* host decides where synced dates live.
|
|
62
|
+
*/
|
|
63
|
+
export declare function buildCoveragePlan(opts: BuildCoveragePlanOptions): Promise<CoveragePlan>;
|
package/dist/analysis-range.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { addDays } from "gscdump/dates";
|
|
1
2
|
import { extractDateRange, normalizeFilter } from "gscdump/query";
|
|
2
3
|
const ISO_DATE_RE = /^\d{4}-\d{2}-\d{2}$/;
|
|
3
4
|
function addRange(ranges, start, end) {
|
|
@@ -31,4 +32,104 @@ function analysisRequestedRange(params, onInvalidFilter) {
|
|
|
31
32
|
end: next.end > range.end ? next.end : range.end
|
|
32
33
|
}));
|
|
33
34
|
}
|
|
34
|
-
|
|
35
|
+
function consolidateDatesToSpans(dates) {
|
|
36
|
+
if (dates.length === 0) return [];
|
|
37
|
+
const sorted = [...new Set(dates)].sort();
|
|
38
|
+
const out = [];
|
|
39
|
+
let start = sorted[0];
|
|
40
|
+
let end = sorted[0];
|
|
41
|
+
for (const date of sorted.slice(1)) {
|
|
42
|
+
if (date === addDays(end, 1)) {
|
|
43
|
+
end = date;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
out.push({
|
|
47
|
+
start,
|
|
48
|
+
end
|
|
49
|
+
});
|
|
50
|
+
start = date;
|
|
51
|
+
end = date;
|
|
52
|
+
}
|
|
53
|
+
out.push({
|
|
54
|
+
start,
|
|
55
|
+
end
|
|
56
|
+
});
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
function gapsForRange(coveredSpans, requested) {
|
|
60
|
+
const gaps = [];
|
|
61
|
+
let cursor = requested.start;
|
|
62
|
+
for (const span of coveredSpans) {
|
|
63
|
+
if (span.end < cursor) continue;
|
|
64
|
+
if (span.start > requested.end) break;
|
|
65
|
+
if (span.start > cursor) gaps.push({
|
|
66
|
+
start: cursor,
|
|
67
|
+
end: addDays(span.start, -1)
|
|
68
|
+
});
|
|
69
|
+
if (span.end >= requested.end) return gaps;
|
|
70
|
+
cursor = addDays(span.end, 1);
|
|
71
|
+
}
|
|
72
|
+
if (cursor <= requested.end) gaps.push({
|
|
73
|
+
start: cursor,
|
|
74
|
+
end: requested.end
|
|
75
|
+
});
|
|
76
|
+
return gaps;
|
|
77
|
+
}
|
|
78
|
+
function spanDays(span) {
|
|
79
|
+
return Math.round((Date.parse(`${span.end}T00:00:00Z`) - Date.parse(`${span.start}T00:00:00Z`)) / 864e5) + 1;
|
|
80
|
+
}
|
|
81
|
+
async function mapLimit(items, limit, fn) {
|
|
82
|
+
const out = Array.from({ length: items.length });
|
|
83
|
+
let next = 0;
|
|
84
|
+
const worker = async () => {
|
|
85
|
+
while (next < items.length) {
|
|
86
|
+
const index = next++;
|
|
87
|
+
out[index] = await fn(items[index]);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
await Promise.all(Array.from({ length: Math.max(1, Math.min(limit, items.length)) }, worker));
|
|
91
|
+
return out;
|
|
92
|
+
}
|
|
93
|
+
async function hashCoverage(parts) {
|
|
94
|
+
const data = new TextEncoder().encode(parts.sort().join("\n"));
|
|
95
|
+
const digest = await crypto.subtle.digest("SHA-256", data);
|
|
96
|
+
return [...new Uint8Array(digest).slice(0, 16)].map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
97
|
+
}
|
|
98
|
+
async function buildCoveragePlan(opts) {
|
|
99
|
+
const { requested, searchType } = opts;
|
|
100
|
+
const graceEnd = opts.tailGraceDays && opts.tailGraceDays > 0 ? addDays(requested.end, -opts.tailGraceDays) : requested.end;
|
|
101
|
+
const gate = {
|
|
102
|
+
start: requested.start,
|
|
103
|
+
end: graceEnd < requested.start ? requested.start : graceEnd
|
|
104
|
+
};
|
|
105
|
+
const tables = await mapLimit(opts.tables, opts.concurrency ?? 3, async (raw) => {
|
|
106
|
+
const input = typeof raw === "string" ? {
|
|
107
|
+
table: raw,
|
|
108
|
+
required: true
|
|
109
|
+
} : {
|
|
110
|
+
table: raw.table,
|
|
111
|
+
required: raw.required ?? true
|
|
112
|
+
};
|
|
113
|
+
const coveredSpans = consolidateDatesToSpans((await opts.reader.datesForTable({
|
|
114
|
+
table: input.table,
|
|
115
|
+
searchType,
|
|
116
|
+
start: requested.start,
|
|
117
|
+
end: requested.end
|
|
118
|
+
})).filter((date) => date >= requested.start && date <= requested.end));
|
|
119
|
+
return {
|
|
120
|
+
table: input.table,
|
|
121
|
+
required: input.required,
|
|
122
|
+
coveredSpans,
|
|
123
|
+
gaps: gapsForRange(coveredSpans, requested)
|
|
124
|
+
};
|
|
125
|
+
});
|
|
126
|
+
const required = tables.filter((table) => table.required);
|
|
127
|
+
return {
|
|
128
|
+
searchType,
|
|
129
|
+
requested: { ...requested },
|
|
130
|
+
tables,
|
|
131
|
+
complete: required.length > 0 && required.every((table) => gapsForRange(table.coveredSpans, gate).length === 0),
|
|
132
|
+
coverageVersion: await hashCoverage(tables.flatMap((table) => table.coveredSpans.map((span) => `${table.table}\0${span.start}\0${span.end}`)))
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
export { analysisRequestedRange, buildCoveragePlan, consolidateDatesToSpans, gapsForRange, spanDays };
|
|
@@ -7,8 +7,18 @@ export interface AnalysisParams {
|
|
|
7
7
|
prevStartDate?: string;
|
|
8
8
|
prevEndDate?: string;
|
|
9
9
|
brandTerms?: string[];
|
|
10
|
+
/**
|
|
11
|
+
* Output cap: how many result rows the analyzer returns. It never bounds
|
|
12
|
+
* the rows an analyzer reads. Use `fetchBudget` for that.
|
|
13
|
+
*/
|
|
10
14
|
limit?: number;
|
|
11
15
|
offset?: number;
|
|
16
|
+
/**
|
|
17
|
+
* Row-plan fetch cap per query, in rows. Defaults to
|
|
18
|
+
* `DEFAULT_FETCH_BUDGET` (one GSC page). SQL plans ignore it. When a fetch
|
|
19
|
+
* reaches the budget, the result meta reports `coverage.kind: 'truncated'`.
|
|
20
|
+
*/
|
|
21
|
+
fetchBudget?: number;
|
|
12
22
|
/**
|
|
13
23
|
* movers: select a single direction and paginate within it. When set, the
|
|
14
24
|
* analyzer filters to that direction, reports `meta.total` as the full
|
|
@@ -48,9 +58,40 @@ export interface AnalysisParams {
|
|
|
48
58
|
/** GSC slice the analysis is scoped to. Undefined = analyzer runs cross-type (today's behaviour for web-only sites). */
|
|
49
59
|
searchType?: SearchType;
|
|
50
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Whether an analyzer read every matching row. `truncated` means at least one
|
|
63
|
+
* row query stopped at its fetch budget, so totals and rankings can be wrong.
|
|
64
|
+
* `fetched` is the row count of the largest truncated query.
|
|
65
|
+
*/
|
|
66
|
+
export type AnalyzerCoverage = {
|
|
67
|
+
kind: 'complete';
|
|
68
|
+
} | {
|
|
69
|
+
kind: 'truncated';
|
|
70
|
+
fetched: number;
|
|
71
|
+
};
|
|
51
72
|
export interface AnalysisResult {
|
|
52
73
|
results: Record<string, unknown>[];
|
|
53
|
-
meta: Record<string, unknown
|
|
74
|
+
meta: Record<string, unknown> & {
|
|
75
|
+
coverage?: AnalyzerCoverage;
|
|
76
|
+
};
|
|
54
77
|
}
|
|
78
|
+
/** One GSC Search Analytics page. The default row-plan fetch cap. */
|
|
79
|
+
export declare const DEFAULT_FETCH_BUDGET = 25000;
|
|
80
|
+
/** Upper bound for an opt-in fetch budget. Larger pulls exhaust GSC quota. */
|
|
81
|
+
export declare const MAX_FETCH_BUDGET = 100000;
|
|
82
|
+
declare const fetchBudgetBrand: unique symbol;
|
|
83
|
+
/**
|
|
84
|
+
* Rows a row plan may fetch per query. Branded so an output `limit` cannot
|
|
85
|
+
* be passed where a fetch cap is expected. Build one with `fetchBudgetOf`.
|
|
86
|
+
*/
|
|
87
|
+
export type FetchBudget = number & {
|
|
88
|
+
readonly [fetchBudgetBrand]: true;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Resolve the fetch budget for a run: `params.fetchBudget` clamped to
|
|
92
|
+
* `[1, MAX_FETCH_BUDGET]`, else `DEFAULT_FETCH_BUDGET`. It never reads
|
|
93
|
+
* `params.limit`.
|
|
94
|
+
*/
|
|
95
|
+
export declare function fetchBudgetOf(params: Pick<AnalysisParams, 'fetchBudget'>): FetchBudget;
|
|
55
96
|
/** Coerce arbitrary value (number, bigint, string, null) to number, defaulting to 0. */
|
|
56
97
|
export declare function num(v: unknown): number;
|
package/dist/analysis-types.mjs
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
|
+
const DEFAULT_FETCH_BUDGET = 25e3;
|
|
2
|
+
const MAX_FETCH_BUDGET = 1e5;
|
|
3
|
+
function fetchBudgetOf(params) {
|
|
4
|
+
const raw = params.fetchBudget;
|
|
5
|
+
if (raw == null || !Number.isFinite(raw) || raw < 1) return DEFAULT_FETCH_BUDGET;
|
|
6
|
+
return Math.min(Math.floor(raw), MAX_FETCH_BUDGET);
|
|
7
|
+
}
|
|
1
8
|
function num(v) {
|
|
2
9
|
if (typeof v === "number") return v;
|
|
3
10
|
if (typeof v === "bigint") return Number(v);
|
|
4
11
|
if (v == null) return 0;
|
|
5
12
|
return Number(v);
|
|
6
13
|
}
|
|
7
|
-
export { num };
|
|
14
|
+
export { DEFAULT_FETCH_BUDGET, MAX_FETCH_BUDGET, fetchBudgetOf, num };
|
|
@@ -47,16 +47,32 @@ async function runAnalyzerFromSource(source, params, registry) {
|
|
|
47
47
|
if (plan.kind === "rows") return runRowsPlanAgainstSource(source, analyzer, plan, params);
|
|
48
48
|
return runSqlPlanAgainstSource(source, analyzer, plan, params);
|
|
49
49
|
}
|
|
50
|
+
async function fetchPlanRows(source, state) {
|
|
51
|
+
const rows = await source.queryRows(state);
|
|
52
|
+
return {
|
|
53
|
+
rows,
|
|
54
|
+
truncated: state.rowLimit != null && rows.length >= state.rowLimit
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function coverageOf(fetches) {
|
|
58
|
+
const truncated = fetches.filter((f) => f.truncated);
|
|
59
|
+
if (truncated.length === 0) return { kind: "complete" };
|
|
60
|
+
return {
|
|
61
|
+
kind: "truncated",
|
|
62
|
+
fetched: Math.max(...truncated.map((f) => f.rows.length))
|
|
63
|
+
};
|
|
64
|
+
}
|
|
50
65
|
async function runRowsPlanAgainstSource(source, analyzer, plan, params) {
|
|
51
66
|
const entries = Object.entries(plan.queries);
|
|
52
|
-
const
|
|
53
|
-
const rowMap = Object.fromEntries(
|
|
67
|
+
const fetched = await Promise.all(entries.map(async ([k, q]) => [k, await fetchPlanRows(source, q.state)]));
|
|
68
|
+
const rowMap = Object.fromEntries(fetched.map(([k, f]) => [k, f.rows]));
|
|
54
69
|
const { results, meta } = analyzer.reduce(rowMap, { params });
|
|
55
70
|
return {
|
|
56
71
|
results,
|
|
57
72
|
meta: {
|
|
58
73
|
tool: params.type,
|
|
59
|
-
...meta
|
|
74
|
+
...meta,
|
|
75
|
+
coverage: coverageOf(fetched.map(([, f]) => f))
|
|
60
76
|
}
|
|
61
77
|
};
|
|
62
78
|
}
|
|
@@ -85,7 +101,8 @@ async function runSqlPlanAgainstSource(source, analyzer, plan, params) {
|
|
|
85
101
|
meta: {
|
|
86
102
|
tool: params.type,
|
|
87
103
|
...sourceMeta,
|
|
88
|
-
...meta
|
|
104
|
+
...meta,
|
|
105
|
+
coverage: { kind: "complete" }
|
|
89
106
|
}
|
|
90
107
|
};
|
|
91
108
|
}
|
package/dist/engine.mjs
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { dayPartition, hourPartition, inferSearchType, objectKey, tenantPrefix } from "./layout.mjs";
|
|
2
|
-
import { SCHEMAS, currentSchemaVersion
|
|
2
|
+
import { SCHEMAS, currentSchemaVersion } from "./schema.mjs";
|
|
3
3
|
import { compactTieredImpl, dedupeOverlappingTiers, splitOverlappingTiers } from "./compaction.mjs";
|
|
4
4
|
import { compileLogicalQueryPlan } from "./parquet-plan.mjs";
|
|
5
5
|
import { gcOrphansImpl } from "./gc.mjs";
|
|
6
|
+
import { sumByStoredKey } from "./ingest.mjs";
|
|
6
7
|
import { extractParquetPushdown } from "./parquet-pushdown.mjs";
|
|
7
8
|
import { buildLogicalPlan } from "gscdump/query/plan";
|
|
8
9
|
import { normalizeUrl } from "gscdump/normalize";
|
|
@@ -60,7 +61,7 @@ function createStorageEngine(opts) {
|
|
|
60
61
|
partitions: [partition],
|
|
61
62
|
searchType: inferSearchType({ searchType })
|
|
62
63
|
});
|
|
63
|
-
const normalizedRows =
|
|
64
|
+
const normalizedRows = sumByStoredKey(ctx.table, rows.map((r) => normalizeRow(ctx.table, r)));
|
|
64
65
|
const key = objectKey(ctx, ctx.table, partition, now, searchType);
|
|
65
66
|
const { bytes: writtenBytes, rowCount } = await codec.writeRows({ table: ctx.table }, normalizedRows, key, dataSource);
|
|
66
67
|
let bytes = writtenBytes;
|
|
@@ -128,8 +129,7 @@ function createStorageEngine(opts) {
|
|
|
128
129
|
const k = `${String(r.url ?? "")}\0${String(r.hour ?? "")}`;
|
|
129
130
|
dedup.set(k, r);
|
|
130
131
|
}
|
|
131
|
-
for (const
|
|
132
|
-
const normalized = normalizeRow(ctx.table, r);
|
|
132
|
+
for (const normalized of sumByStoredKey(ctx.table, rows.map((r) => normalizeRow(ctx.table, r)))) {
|
|
133
133
|
const k = `${String(normalized.url ?? "")}\0${String(normalized.hour ?? "")}`;
|
|
134
134
|
dedup.set(k, normalized);
|
|
135
135
|
}
|
|
@@ -381,6 +381,7 @@ function createStorageEngine(opts) {
|
|
|
381
381
|
getWatermarks: (filter) => manifestStore.getWatermarks(filter),
|
|
382
382
|
getSyncStates: (filter) => manifestStore.getSyncStates(filter),
|
|
383
383
|
setSyncState: (scope, state, detail) => manifestStore.setSyncState(scope, state, detail),
|
|
384
|
+
setSyncStates: (scopes, state, detail) => manifestStore.setSyncStates(scopes, state, detail),
|
|
384
385
|
readObject: (key) => dataSource.read(key)
|
|
385
386
|
};
|
|
386
387
|
}
|
|
@@ -155,6 +155,12 @@ export interface InspectionStore {
|
|
|
155
155
|
* `undefined` if the month has no shards.
|
|
156
156
|
*/
|
|
157
157
|
loadHistory: (ctx: TenantCtx, yearMonth: string) => Promise<InspectionHistoryShard | undefined>;
|
|
158
|
+
/**
|
|
159
|
+
* Month buckets (`YYYY-MM`, or `unknown`) that hold at least one history
|
|
160
|
+
* shard, sorted ascending. Pair with {@link InspectionStore.loadHistory} to
|
|
161
|
+
* read the full history.
|
|
162
|
+
*/
|
|
163
|
+
listHistoryMonths: (ctx: TenantCtx) => Promise<string[]>;
|
|
158
164
|
/**
|
|
159
165
|
* Encode caller-provided rows into the inspections parquet sidecar at
|
|
160
166
|
* `entities/inspections/index.parquet`. Sorted by `urlHash` so DuckDB
|
|
@@ -171,6 +177,11 @@ export interface InspectionStore {
|
|
|
171
177
|
rowCount: number;
|
|
172
178
|
bytes: number;
|
|
173
179
|
}>;
|
|
180
|
+
/**
|
|
181
|
+
* Rows of the inspections parquet sidecar that {@link InspectionStore.materialize}
|
|
182
|
+
* wrote last, or `undefined` if it was never written.
|
|
183
|
+
*/
|
|
184
|
+
loadMaterialized: (ctx: TenantCtx) => Promise<InspectionParquetRow[] | undefined>;
|
|
174
185
|
/**
|
|
175
186
|
* Append a batch of inspection results as an immutable per-batch parquet
|
|
176
187
|
* under `events/<YYYY-MM>/<batchId>.parquet`, partitioned by the `YYYY-MM`
|