@gscdump/lakehouse 7.6.0 → 7.8.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/README.md +103 -0
- package/dist/_virtual/node_modules/.pnpm/hyparquet-compressors@1.1.2_patch_hash=3f8f44805c034b2563763dcd5d37050ea6b1d5d45b46ea37adc4a721e748a1c5/node_modules/hyparquet-compressors/src/gzip.mjs +196 -0
- package/dist/_virtual/node_modules/.pnpm/hyparquet@1.31.1/node_modules/hyparquet/src/column.mjs +1 -1
- package/dist/_virtual/node_modules/.pnpm/hyparquet@1.31.1/node_modules/hyparquet/src/datapage.mjs +1 -1
- package/dist/_virtual/node_modules/.pnpm/hyparquet@1.31.1/node_modules/hyparquet/src/index.mjs +1 -1
- package/dist/_virtual/node_modules/.pnpm/hyparquet@1.31.1/node_modules/hyparquet/src/indexes.mjs +1 -1
- package/dist/_virtual/node_modules/.pnpm/hyparquet@1.31.1/node_modules/hyparquet/src/metadata.mjs +1 -1
- package/dist/_virtual/node_modules/.pnpm/hyparquet@1.31.1/node_modules/hyparquet/src/node.mjs +1 -1
- package/dist/_virtual/node_modules/.pnpm/icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471/node_modules/icebird/src/avro/avro.budget.mjs +115 -0
- package/dist/_virtual/node_modules/.pnpm/icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471/node_modules/icebird/src/avro/avro.metadata.mjs +97 -0
- package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/avro/avro.read.mjs +67 -26
- package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/fetch.mjs +39 -40
- package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/manifest.mjs +49 -27
- package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/read.mjs +2 -2
- package/dist/_virtual/node_modules/.pnpm/icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471/node_modules/icebird/types/fetch.d.mts +2 -0
- package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/types/index.d.mts +1 -1
- package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/types/manifest.d.mts +18 -2
- package/dist/catalog.d.mts +13 -5
- package/dist/catalog.mjs +28 -13
- package/dist/dataset-runtime.mjs +2 -2
- package/dist/dataset.d.mts +4 -0
- package/dist/dataset.mjs +4 -1
- package/dist/index.d.mts +3 -1
- package/dist/manifest-merge.mjs +6 -6
- package/dist/manifest-read-limits.d.mts +2 -0
- package/dist/manifest-read-limits.mjs +26 -0
- package/dist/orphan-sweep.mjs +3 -3
- package/dist/resolver-byte-cache.mjs +85 -0
- package/dist/unsafe-raw.d.mts +6 -6
- package/dist/unsafe-raw.mjs +5 -5
- package/package.json +1 -1
- package/dist/_virtual/node_modules/.pnpm/hyparquet-compressors@1.1.2/node_modules/hyparquet-compressors/src/gzip.mjs +0 -173
- package/dist/_virtual/node_modules/.pnpm/icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f/node_modules/icebird/src/avro/avro.metadata.mjs +0 -65
- package/dist/_virtual/node_modules/.pnpm/icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f/node_modules/icebird/types/fetch.d.mts +0 -36
- /package/dist/_virtual/node_modules/.pnpm/{hyparquet-compressors@1.1.2 → hyparquet-compressors@1.1.2_patch_hash=3f8f44805c034b2563763dcd5d37050ea6b1d5d45b46ea37adc4a721e748a1c5}/node_modules/hyparquet-compressors/src/brotli.bitreader.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{hyparquet-compressors@1.1.2 → hyparquet-compressors@1.1.2_patch_hash=3f8f44805c034b2563763dcd5d37050ea6b1d5d45b46ea37adc4a721e748a1c5}/node_modules/hyparquet-compressors/src/brotli.blocks.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{hyparquet-compressors@1.1.2 → hyparquet-compressors@1.1.2_patch_hash=3f8f44805c034b2563763dcd5d37050ea6b1d5d45b46ea37adc4a721e748a1c5}/node_modules/hyparquet-compressors/src/brotli.context.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{hyparquet-compressors@1.1.2 → hyparquet-compressors@1.1.2_patch_hash=3f8f44805c034b2563763dcd5d37050ea6b1d5d45b46ea37adc4a721e748a1c5}/node_modules/hyparquet-compressors/src/brotli.contextmap.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{hyparquet-compressors@1.1.2 → hyparquet-compressors@1.1.2_patch_hash=3f8f44805c034b2563763dcd5d37050ea6b1d5d45b46ea37adc4a721e748a1c5}/node_modules/hyparquet-compressors/src/brotli.dictionary.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{hyparquet-compressors@1.1.2 → hyparquet-compressors@1.1.2_patch_hash=3f8f44805c034b2563763dcd5d37050ea6b1d5d45b46ea37adc4a721e748a1c5}/node_modules/hyparquet-compressors/src/brotli.huffman.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{hyparquet-compressors@1.1.2 → hyparquet-compressors@1.1.2_patch_hash=3f8f44805c034b2563763dcd5d37050ea6b1d5d45b46ea37adc4a721e748a1c5}/node_modules/hyparquet-compressors/src/brotli.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{hyparquet-compressors@1.1.2 → hyparquet-compressors@1.1.2_patch_hash=3f8f44805c034b2563763dcd5d37050ea6b1d5d45b46ea37adc4a721e748a1c5}/node_modules/hyparquet-compressors/src/brotli.prefix.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{hyparquet-compressors@1.1.2 → hyparquet-compressors@1.1.2_patch_hash=3f8f44805c034b2563763dcd5d37050ea6b1d5d45b46ea37adc4a721e748a1c5}/node_modules/hyparquet-compressors/src/brotli.streams.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{hyparquet-compressors@1.1.2 → hyparquet-compressors@1.1.2_patch_hash=3f8f44805c034b2563763dcd5d37050ea6b1d5d45b46ea37adc4a721e748a1c5}/node_modules/hyparquet-compressors/src/brotli.transform.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{hyparquet-compressors@1.1.2 → hyparquet-compressors@1.1.2_patch_hash=3f8f44805c034b2563763dcd5d37050ea6b1d5d45b46ea37adc4a721e748a1c5}/node_modules/hyparquet-compressors/src/compressors.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{hyparquet-compressors@1.1.2 → hyparquet-compressors@1.1.2_patch_hash=3f8f44805c034b2563763dcd5d37050ea6b1d5d45b46ea37adc4a721e748a1c5}/node_modules/hyparquet-compressors/src/gzip.huffman.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{hyparquet-compressors@1.1.2 → hyparquet-compressors@1.1.2_patch_hash=3f8f44805c034b2563763dcd5d37050ea6b1d5d45b46ea37adc4a721e748a1c5}/node_modules/hyparquet-compressors/src/index.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{hyparquet-compressors@1.1.2 → hyparquet-compressors@1.1.2_patch_hash=3f8f44805c034b2563763dcd5d37050ea6b1d5d45b46ea37adc4a721e748a1c5}/node_modules/hyparquet-compressors/src/lz4.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/avro/avro.write.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/catalog/file.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/catalog/loadTable.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/catalog/rest.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/create.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/delete.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/index.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/json.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/metadata.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/prune.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/puffin/deletion-vector.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/puffin/puffin.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/puffin/roaring.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/s3.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/schema.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/sigv4.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/sql/icebergDataSource.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/sql/icebergQuery.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/sql/whereFilter.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/types.d.mts +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/utils.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/write/commit.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/write/conversions.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/write/delete-file.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/write/geospatial.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/write/manifest-list.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/write/manifest.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/write/parquet.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/write/partition.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/write/rewrite.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/write/serde.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/write/snapshot.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/write/sort.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/write/stage-deletion-vector.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/write/stage-position-delete.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/write/stage.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/write/stats.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/write/transform.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/src/write/write.mjs +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/types/catalog/file.d.mts +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/types/catalog/rest.d.mts +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/types/create.d.mts +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/types/metadata.d.mts +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/types/read.d.mts +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/types/s3.d.mts +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/types/sql/icebergDataSource.d.mts +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/types/sql/icebergQuery.d.mts +0 -0
- /package/dist/_virtual/node_modules/.pnpm/{icebird@0.8.30_patch_hash=a400e343a199b1ca18601f96348011745ac6518fc07ffa71d5adfdd2ccc7d14f → icebird@0.8.30_patch_hash=1359a91da68522a736babe444880ae391f19455fbe47c346f76cec92c5c2e471}/node_modules/icebird/types/write/write.d.mts +0 -0
package/README.md
CHANGED
|
@@ -45,6 +45,109 @@ For retry decisions, import `isCommitRateLimited`, `isCommitServerError`, or
|
|
|
45
45
|
Use the dataset registry to define datasets.
|
|
46
46
|
Raw Icebird table creation and append functions live under `unsafe-raw` for package adapters and diagnostics.
|
|
47
47
|
|
|
48
|
+
## Opt-in manifest read limits
|
|
49
|
+
|
|
50
|
+
`icebergManifests` on `@gscdump/lakehouse/unsafe-raw` accepts an optional
|
|
51
|
+
`readLimits: ManifestReadLimits`. Omission preserves the existing reader and
|
|
52
|
+
caller-owned manifest cache behavior. No file resolver or host automatically
|
|
53
|
+
enables these limits.
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
import { icebergManifests } from '@gscdump/lakehouse/unsafe-raw'
|
|
57
|
+
|
|
58
|
+
const manifests = await icebergManifests({
|
|
59
|
+
metadata,
|
|
60
|
+
resolver,
|
|
61
|
+
readLimits: {
|
|
62
|
+
maxObjectBytes: 2 * 1024 * 1024,
|
|
63
|
+
maxTotalObjectBytes: 8 * 1024 * 1024,
|
|
64
|
+
maxManifests: 8,
|
|
65
|
+
maxEntries: 128,
|
|
66
|
+
maxInflatedBlockBytes: 2 * 1024 * 1024,
|
|
67
|
+
maxTotalInflatedBytes: 8 * 1024 * 1024,
|
|
68
|
+
maxValueBytes: 1024 * 1024,
|
|
69
|
+
maxDecodedValues: 100_000,
|
|
70
|
+
maxHeaderBytes: 64 * 1024,
|
|
71
|
+
maxSchemaDepth: 32,
|
|
72
|
+
},
|
|
73
|
+
})
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
These are example admission values, not defaults or a total JavaScript heap
|
|
77
|
+
guarantee. Every field is required and must be a positive safe integer;
|
|
78
|
+
`maxSchemaDepth` must also be at most 128. The reader copies and validates the
|
|
79
|
+
policy before its first asynchronous read. Unknown fields are rejected.
|
|
80
|
+
|
|
81
|
+
The per-object and cumulative source-byte checks happen after `resolver.reader`
|
|
82
|
+
reports `byteLength`, **before** the reader requests `slice(0, byteLength)`.
|
|
83
|
+
Declared manifest lengths and returned slice lengths must match. An injected
|
|
84
|
+
resolver can allocate or fetch inside `reader` itself; those operations are
|
|
85
|
+
outside this boundary and need their own transport limits and immutable-object
|
|
86
|
+
identity checks. No HEAD, catalog JSON, network-request, or freshness bound is
|
|
87
|
+
implied by this option.
|
|
88
|
+
|
|
89
|
+
Manifest-list counts are admitted before record materialization and pruning;
|
|
90
|
+
entry counts accumulate across all fetched manifests and blocks. V1 inline
|
|
91
|
+
manifest counts are admitted before reads, with each file decoded once in a
|
|
92
|
+
private per-call cache. Supplying `manifestCache` with `readLimits` is rejected:
|
|
93
|
+
previously decoded cache entries carry no verifiable budget provenance. Defaults
|
|
94
|
+
retain their existing cache behavior.
|
|
95
|
+
|
|
96
|
+
For Avro `null` and raw `deflate` blocks, decoded block bytes and their cumulative
|
|
97
|
+
total are bounded. The existing pure-JavaScript inflater checks output growth
|
|
98
|
+
before allocating or writing past that limit. Bounded DEFLATE returns an exact-size
|
|
99
|
+
backing buffer so byte views do not retain spare inflater capacity; growth and
|
|
100
|
+
final-copy buffers can temporarily overlap. Header framing is byte-bounded
|
|
101
|
+
before JSON parsing; schema depth/work is checked before recursive compilation.
|
|
102
|
+
Variable and fixed values are checked before views or UTF-8 decoding, and
|
|
103
|
+
`maxDecodedValues` bounds decoding work across header/schema nodes and decoded
|
|
104
|
+
value visits, including arrays of zero-byte nulls. Strict reads also reject
|
|
105
|
+
invalid counts, varints, indexes, truncated values and inconsistent block sizes.
|
|
106
|
+
|
|
107
|
+
These limits do not measure JavaScript object/string overhead, the JSON parser's
|
|
108
|
+
internal allocations, inflater tables, caller-retained output, injected resolver
|
|
109
|
+
caches or total process memory. Output remains an eager array within the chosen
|
|
110
|
+
count/byte/work policy. A refusal rejects the complete call; there is no eager
|
|
111
|
+
fallback or partial success. Already-dispatched resolver reads cannot be
|
|
112
|
+
physically cancelled by the AsyncBuffer interface, but a first failure stops new
|
|
113
|
+
dispatches and prevents late responses from being decoded. Choose compatible
|
|
114
|
+
limits and validate the complete consumer path before enabling them.
|
|
115
|
+
|
|
116
|
+
The same optional `readLimits` can be passed to `resolveIcebergDataFiles`,
|
|
117
|
+
`dataset.resolveDataFiles(..., { readLimits })`, and the engine's
|
|
118
|
+
`listIcebergDataFiles`. These wrappers capture and validate all ten values before
|
|
119
|
+
catalog reads or lazy imports, then perform one bounded manifest walk. Per-object
|
|
120
|
+
and aggregate limits remain independent upper bounds; a smaller aggregate limit
|
|
121
|
+
does not expand the per-object allowance. Invalid, missing or unknown values are
|
|
122
|
+
rejected even when the table has no current snapshot.
|
|
123
|
+
|
|
124
|
+
In this opt-in mode, decoded manifest, resolved-file and month caches are neither
|
|
125
|
+
read nor populated: old cache entries cannot establish compliance with a new
|
|
126
|
+
policy. The existing catalog configuration, snapshot pointer and table metadata
|
|
127
|
+
caches remain in use, with their existing identity/freshness rules. Catalog JSON
|
|
128
|
+
and those metadata caches are outside the Avro allocation bound. Existing
|
|
129
|
+
partition, Site, search-type, date pruning and output ordering are unchanged.
|
|
130
|
+
|
|
131
|
+
This has an explicit warm-read cost. A default exact-range cache hit can avoid
|
|
132
|
+
all Avro reads; a default month hit can need only the manifest list. A bounded
|
|
133
|
+
call reads the list and every selected manifest again (subject to any injected
|
|
134
|
+
resolver's own byte cache).
|
|
135
|
+
|
|
136
|
+
A connection from `connectIcebergCatalog` keeps the objects it reads in a
|
|
137
|
+
per-connection byte cache. That cache holds at most 16 MiB of fetched bytes.
|
|
138
|
+
If a read takes it over 16 MiB, it evicts the least recently read object
|
|
139
|
+
first. It does not keep an object larger than 16 MiB, and it does not keep a
|
|
140
|
+
failed read. Concurrent reads of one path share one S3 request. A successful
|
|
141
|
+
write or delete of a path evicts that path. A bounded call reads through the uncached
|
|
142
|
+
S3 resolver instead, so the connection keeps none of its manifest bytes after
|
|
143
|
+
the call. It also does not reuse bytes that earlier unbounded calls cached. If
|
|
144
|
+
you replace `connection.resolver`, the bounded call uses your resolver, and your
|
|
145
|
+
resolver owns its retention. Each concurrent bounded call owns its own limits;
|
|
146
|
+
the option does not impose a connection-wide or process-wide budget. There is
|
|
147
|
+
no automatic fallback to cached or unbounded results after refusal. Validate
|
|
148
|
+
retained files and request costs before enabling a policy in a host; this does
|
|
149
|
+
not bound a remote SQL provider's internal manifest planner.
|
|
150
|
+
|
|
48
151
|
## Append retries
|
|
49
152
|
|
|
50
153
|
Supply a durable `commitRetry.appendId` when a dataset append belongs to a job or receipt.
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { fixedDistance, fixedDistanceExtraBits, fixedDistanceMap, fixedLength, fixedLengthExtraBits, fixedLengthMap, huffMap } from "./gzip.huffman.mjs";
|
|
2
|
+
const codeLengthIndexMap = new Uint8Array([
|
|
3
|
+
16,
|
|
4
|
+
17,
|
|
5
|
+
18,
|
|
6
|
+
0,
|
|
7
|
+
8,
|
|
8
|
+
7,
|
|
9
|
+
9,
|
|
10
|
+
6,
|
|
11
|
+
10,
|
|
12
|
+
5,
|
|
13
|
+
11,
|
|
14
|
+
4,
|
|
15
|
+
12,
|
|
16
|
+
3,
|
|
17
|
+
13,
|
|
18
|
+
2,
|
|
19
|
+
14,
|
|
20
|
+
1,
|
|
21
|
+
15
|
|
22
|
+
]);
|
|
23
|
+
function bits(input, pos, mask) {
|
|
24
|
+
const o = pos / 8 | 0;
|
|
25
|
+
return (input[o] | input[o + 1] << 8) >> (pos & 7) & mask;
|
|
26
|
+
}
|
|
27
|
+
function bits16(d, p) {
|
|
28
|
+
const o = p / 8 | 0;
|
|
29
|
+
return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);
|
|
30
|
+
}
|
|
31
|
+
function shft(p) {
|
|
32
|
+
return (p + 7) / 8 | 0;
|
|
33
|
+
}
|
|
34
|
+
function gzipStart(input, i) {
|
|
35
|
+
if (input[i++] !== 31 || input[i++] !== 139 || input[i++] !== 8) return 0;
|
|
36
|
+
const flag = input[i++];
|
|
37
|
+
if (flag & 224) throw new Error("invalid gzip header flags");
|
|
38
|
+
i += 6;
|
|
39
|
+
if (flag & 4) i += (input[i] | input[i + 1] << 8) + 2;
|
|
40
|
+
for (let zs = (flag >> 3 & 1) + (flag >> 4 & 1); zs > 0; zs -= Number(!input[i++]));
|
|
41
|
+
return i + (flag & 2);
|
|
42
|
+
}
|
|
43
|
+
function gunzip(input, output, inputIndex = 0, outputIndex = 0, limits) {
|
|
44
|
+
const maximum = limits?.maxOutputBytes;
|
|
45
|
+
if (limits && (limits.raw !== true || !Number.isSafeInteger(maximum) || maximum < 0 || output || inputIndex !== 0 || outputIndex !== 0)) throw new RangeError("Invalid bounded raw DEFLATE options");
|
|
46
|
+
let out = output ?? new Uint8Array(limits ? Math.min(1024, maximum) : 1024);
|
|
47
|
+
if (limits && !input.length) throw new Error("unexpected EOF");
|
|
48
|
+
if (!(input.length - inputIndex)) return out;
|
|
49
|
+
const totalBits = input.length * 8;
|
|
50
|
+
function ensureSize(length) {
|
|
51
|
+
if (limits && (!Number.isSafeInteger(length) || length > maximum)) throw new RangeError("DEFLATE output byte limit exceeded");
|
|
52
|
+
if (!output && length > out.length) {
|
|
53
|
+
const old = out;
|
|
54
|
+
out = new Uint8Array(limits ? Math.min(maximum, Math.max(old.length * 2, length)) : Math.max(old.length * 2, length));
|
|
55
|
+
out.set(old);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
let memberStart = inputIndex;
|
|
59
|
+
for (;;) {
|
|
60
|
+
const payloadStart = limits ? 0 : gzipStart(input, memberStart);
|
|
61
|
+
const isGzip = !limits && payloadStart > 0;
|
|
62
|
+
if (isGzip && payloadStart === input.length - 8) break;
|
|
63
|
+
if (isGzip && payloadStart > input.length - 8) throw new Error("unexpected EOF");
|
|
64
|
+
const pos = inflate(payloadStart * 8);
|
|
65
|
+
if (limits && Math.ceil(pos / 8) !== input.length) throw new Error("trailing raw DEFLATE bytes");
|
|
66
|
+
if (!isGzip || output && outputIndex >= out.length) break;
|
|
67
|
+
const nextBlock = Math.ceil(pos / 8) + 8;
|
|
68
|
+
if (nextBlock > input.length) throw new Error("unexpected EOF");
|
|
69
|
+
if (nextBlock === input.length) break;
|
|
70
|
+
if (input[nextBlock] !== 31 || input[nextBlock + 1] !== 139 || input[nextBlock + 2] !== 8) throw new Error("invalid gzip member");
|
|
71
|
+
memberStart = nextBlock;
|
|
72
|
+
}
|
|
73
|
+
function inflate(pos) {
|
|
74
|
+
let final = 0;
|
|
75
|
+
let lengthBits = 0;
|
|
76
|
+
let distBits = 0;
|
|
77
|
+
let lengthMap;
|
|
78
|
+
let distMap;
|
|
79
|
+
do {
|
|
80
|
+
if (!lengthMap) {
|
|
81
|
+
final = bits(input, pos, 1);
|
|
82
|
+
const type = bits(input, pos + 1, 3);
|
|
83
|
+
pos += 3;
|
|
84
|
+
if (!type) {
|
|
85
|
+
const s = shft(pos) + 4;
|
|
86
|
+
const l = input[s - 4] | input[s - 3] << 8;
|
|
87
|
+
if (limits && (s > input.length || ((input[s - 2] | input[s - 1] << 8) ^ l) !== 65535)) throw new Error("invalid stored block length");
|
|
88
|
+
const t = s + l;
|
|
89
|
+
if (t > input.length) throw new Error("unexpected EOF");
|
|
90
|
+
ensureSize(outputIndex + l);
|
|
91
|
+
out.set(input.subarray(s, t), outputIndex);
|
|
92
|
+
outputIndex += l;
|
|
93
|
+
pos = t * 8;
|
|
94
|
+
continue;
|
|
95
|
+
} else if (type === 1) {
|
|
96
|
+
lengthMap = fixedLengthMap;
|
|
97
|
+
distMap = fixedDistanceMap;
|
|
98
|
+
lengthBits = 9;
|
|
99
|
+
distBits = 5;
|
|
100
|
+
} else if (type === 2) {
|
|
101
|
+
const hLiteral = bits(input, pos, 31) + 257;
|
|
102
|
+
const hcLengths = bits(input, pos + 10, 15) + 4;
|
|
103
|
+
const tl = hLiteral + bits(input, pos + 5, 31) + 1;
|
|
104
|
+
pos += 14;
|
|
105
|
+
const lengthDistanceTree = new Uint8Array(tl);
|
|
106
|
+
const codeLengthTree = /* @__PURE__ */ new Uint8Array(19);
|
|
107
|
+
for (let i = 0; i < hcLengths; ++i) codeLengthTree[codeLengthIndexMap[i]] = bits(input, pos + i * 3, 7);
|
|
108
|
+
pos += hcLengths * 3;
|
|
109
|
+
const codeLengthBits = Math.max(...codeLengthTree);
|
|
110
|
+
const clbMask = (1 << codeLengthBits) - 1;
|
|
111
|
+
const codeLengthMap = huffMap(codeLengthTree, codeLengthBits, 1);
|
|
112
|
+
for (let i = 0; i < tl;) {
|
|
113
|
+
const r = codeLengthMap[bits(input, pos, clbMask)];
|
|
114
|
+
if (limits && !r) throw new Error("invalid code length");
|
|
115
|
+
pos += r & 15;
|
|
116
|
+
const symbol = r >> 4;
|
|
117
|
+
if (symbol < 16) lengthDistanceTree[i++] = symbol;
|
|
118
|
+
else {
|
|
119
|
+
let copy = 0;
|
|
120
|
+
let n = 0;
|
|
121
|
+
if (symbol === 16) {
|
|
122
|
+
if (limits && i === 0) throw new Error("invalid code length repeat");
|
|
123
|
+
n = 3 + bits(input, pos, 3);
|
|
124
|
+
pos += 2;
|
|
125
|
+
copy = lengthDistanceTree[i - 1];
|
|
126
|
+
} else if (symbol === 17) {
|
|
127
|
+
n = 3 + bits(input, pos, 7);
|
|
128
|
+
pos += 3;
|
|
129
|
+
} else if (symbol === 18) {
|
|
130
|
+
n = 11 + bits(input, pos, 127);
|
|
131
|
+
pos += 7;
|
|
132
|
+
}
|
|
133
|
+
if (limits && i + n > tl) throw new Error("invalid code length repeat");
|
|
134
|
+
while (n--) lengthDistanceTree[i++] = copy;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const lengthTree = lengthDistanceTree.subarray(0, hLiteral);
|
|
138
|
+
const distanceTree = lengthDistanceTree.subarray(hLiteral);
|
|
139
|
+
lengthBits = Math.max(...lengthTree);
|
|
140
|
+
distBits = Math.max(...distanceTree);
|
|
141
|
+
lengthMap = huffMap(lengthTree, lengthBits, 1);
|
|
142
|
+
distMap = huffMap(distanceTree, distBits, 1);
|
|
143
|
+
} else throw new Error("invalid block type");
|
|
144
|
+
if (pos > totalBits) throw new Error("unexpected EOF");
|
|
145
|
+
}
|
|
146
|
+
ensureSize(limits ? Math.min(maximum, outputIndex + 131072) : outputIndex + 131072);
|
|
147
|
+
const lms = (1 << lengthBits) - 1;
|
|
148
|
+
const dms = (1 << distBits) - 1;
|
|
149
|
+
for (;;) {
|
|
150
|
+
const code = lengthMap[bits16(input, pos) & lms];
|
|
151
|
+
const sym = code >> 4;
|
|
152
|
+
pos += code & 15;
|
|
153
|
+
if (pos > totalBits) throw new Error("unexpected EOF");
|
|
154
|
+
if (!code) throw new Error("invalid length/literal");
|
|
155
|
+
if (sym < 256) {
|
|
156
|
+
if (limits) ensureSize(outputIndex + 1);
|
|
157
|
+
out[outputIndex++] = sym;
|
|
158
|
+
} else if (sym === 256) {
|
|
159
|
+
lengthMap = void 0;
|
|
160
|
+
break;
|
|
161
|
+
} else {
|
|
162
|
+
let add = sym - 254;
|
|
163
|
+
if (sym > 264) {
|
|
164
|
+
const index = sym - 257;
|
|
165
|
+
const b = fixedLengthExtraBits[index];
|
|
166
|
+
add = bits(input, pos, (1 << b) - 1) + fixedLength[index];
|
|
167
|
+
pos += b;
|
|
168
|
+
}
|
|
169
|
+
if (!distMap) throw new Error("invalid distance map");
|
|
170
|
+
const d = distMap[bits16(input, pos) & dms];
|
|
171
|
+
const dsym = d >> 4;
|
|
172
|
+
if (!d) throw new Error("invalid distance");
|
|
173
|
+
if (limits && dsym > 29) throw new Error("invalid distance symbol");
|
|
174
|
+
pos += d & 15;
|
|
175
|
+
let dt = fixedDistance[dsym];
|
|
176
|
+
if (dsym > 3) {
|
|
177
|
+
const b = fixedDistanceExtraBits[dsym];
|
|
178
|
+
dt += bits16(input, pos) & (1 << b) - 1;
|
|
179
|
+
pos += b;
|
|
180
|
+
}
|
|
181
|
+
if (pos > totalBits) throw new Error("unexpected EOF");
|
|
182
|
+
const end = outputIndex + add;
|
|
183
|
+
if (outputIndex < dt) throw new Error("unexpected dictionary case");
|
|
184
|
+
ensureSize(end);
|
|
185
|
+
for (; outputIndex < end; outputIndex++) out[outputIndex] = out[outputIndex - dt];
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
if (lengthMap) final = 1;
|
|
189
|
+
} while (!final);
|
|
190
|
+
return pos;
|
|
191
|
+
}
|
|
192
|
+
if (limits && outputIndex !== out.length) return out.slice(0, outputIndex);
|
|
193
|
+
if (!output) return out.subarray(0, outputIndex);
|
|
194
|
+
return out;
|
|
195
|
+
}
|
|
196
|
+
export { gunzip };
|
package/dist/_virtual/node_modules/.pnpm/hyparquet@1.31.1/node_modules/hyparquet/src/column.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Encodings, PageTypes } from "./constants.mjs";
|
|
2
1
|
import { convert, convertWithDictionary } from "./convert.mjs";
|
|
2
|
+
import { Encodings, PageTypes } from "./constants.mjs";
|
|
3
3
|
import { isFlatColumn } from "./schema.mjs";
|
|
4
4
|
import { deserializeTCompactProtocol } from "./thrift.mjs";
|
|
5
5
|
import { assembleLists } from "./assemble.mjs";
|
package/dist/_virtual/node_modules/.pnpm/hyparquet@1.31.1/node_modules/hyparquet/src/datapage.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { snappyUncompress } from "./snappy.mjs";
|
|
1
2
|
import { getMaxDefinitionLevel, getMaxRepetitionLevel } from "./schema.mjs";
|
|
2
3
|
import { deltaBinaryUnpack, deltaByteArray, deltaLengthByteArray } from "./delta.mjs";
|
|
3
4
|
import { byteStreamSplit, readRleBitPackedHybrid } from "./encoding.mjs";
|
|
4
5
|
import { readPlain } from "./plain.mjs";
|
|
5
|
-
import { snappyUncompress } from "./snappy.mjs";
|
|
6
6
|
function readDataPage(bytes, daph, { type, element, schemaPath }) {
|
|
7
7
|
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
8
8
|
const reader = {
|
package/dist/_virtual/node_modules/.pnpm/hyparquet@1.31.1/node_modules/hyparquet/src/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import "./snappy.mjs";
|
|
1
2
|
import { parquetMetadataAsync, parquetSchema } from "./metadata.mjs";
|
|
2
3
|
import "./indexes.mjs";
|
|
3
4
|
import { asyncBufferFromUrl, cachedAsyncBuffer, toJson } from "./utils.mjs";
|
|
4
|
-
import "./snappy.mjs";
|
|
5
5
|
import { parquetScan } from "./scan.mjs";
|
|
6
6
|
import { parquetReadObjects } from "./read.mjs";
|
|
7
7
|
import "./query.mjs";
|
package/dist/_virtual/node_modules/.pnpm/hyparquet@1.31.1/node_modules/hyparquet/src/indexes.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BoundaryOrders } from "./constants.mjs";
|
|
2
1
|
import { DEFAULT_PARSERS } from "./convert.mjs";
|
|
2
|
+
import { BoundaryOrders } from "./constants.mjs";
|
|
3
3
|
import { deserializeTCompactProtocol } from "./thrift.mjs";
|
|
4
4
|
import { convertMetadata } from "./metadata.mjs";
|
|
5
5
|
function readColumnIndex(reader, schema, parsers = void 0) {
|
package/dist/_virtual/node_modules/.pnpm/hyparquet@1.31.1/node_modules/hyparquet/src/metadata.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { CompressionCodecs, ConvertedTypes, EdgeInterpolationAlgorithms, Encodings, FieldRepetitionTypes, PageTypes, ParquetTypes } from "./constants.mjs";
|
|
2
1
|
import { DEFAULT_PARSERS, parseDecimal, parseFloat16 } from "./convert.mjs";
|
|
2
|
+
import { CompressionCodecs, ConvertedTypes, EdgeInterpolationAlgorithms, Encodings, FieldRepetitionTypes, PageTypes, ParquetTypes } from "./constants.mjs";
|
|
3
3
|
import { getSchemaPath } from "./schema.mjs";
|
|
4
4
|
import { deserializeTCompactProtocol } from "./thrift.mjs";
|
|
5
5
|
import { markGeoColumns } from "./geoparquet.mjs";
|
package/dist/_virtual/node_modules/.pnpm/hyparquet@1.31.1/node_modules/hyparquet/src/node.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import "./snappy.mjs";
|
|
1
2
|
import { parquetMetadataAsync, parquetSchema } from "./metadata.mjs";
|
|
2
3
|
import "./indexes.mjs";
|
|
3
4
|
import { asyncBufferFromUrl, cachedAsyncBuffer, toJson } from "./utils.mjs";
|
|
4
|
-
import "./snappy.mjs";
|
|
5
5
|
import { parquetScan } from "./scan.mjs";
|
|
6
6
|
import { parquetReadObjects } from "./read.mjs";
|
|
7
7
|
import "./index.mjs";
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
const fields = [
|
|
2
|
+
"maxObjectBytes",
|
|
3
|
+
"maxTotalObjectBytes",
|
|
4
|
+
"maxManifests",
|
|
5
|
+
"maxEntries",
|
|
6
|
+
"maxInflatedBlockBytes",
|
|
7
|
+
"maxTotalInflatedBytes",
|
|
8
|
+
"maxValueBytes",
|
|
9
|
+
"maxDecodedValues",
|
|
10
|
+
"maxHeaderBytes",
|
|
11
|
+
"maxSchemaDepth"
|
|
12
|
+
];
|
|
13
|
+
function createAvroBudget(options) {
|
|
14
|
+
if (options === void 0) return void 0;
|
|
15
|
+
if (!options || typeof options !== "object" || Array.isArray(options)) throw new TypeError("Invalid manifest read limits");
|
|
16
|
+
const limits = {};
|
|
17
|
+
for (const key of Object.keys(options)) if (!fields.includes(key)) throw new TypeError(`Unknown manifest read limit: ${key}`);
|
|
18
|
+
for (const key of fields) {
|
|
19
|
+
const value = options[key];
|
|
20
|
+
if (!Number.isSafeInteger(value) || value <= 0) throw new RangeError(`Invalid manifest read limit: ${key}`);
|
|
21
|
+
limits[key] = value;
|
|
22
|
+
}
|
|
23
|
+
if (limits.maxSchemaDepth > 128) throw new RangeError("Manifest schema depth must not exceed 128");
|
|
24
|
+
Object.freeze(limits);
|
|
25
|
+
const used = {
|
|
26
|
+
objectBytes: 0,
|
|
27
|
+
inflatedBytes: 0,
|
|
28
|
+
manifests: 0,
|
|
29
|
+
entries: 0,
|
|
30
|
+
values: 0
|
|
31
|
+
};
|
|
32
|
+
let failed = false, failure;
|
|
33
|
+
const check = () => {
|
|
34
|
+
if (failed) throw failure;
|
|
35
|
+
};
|
|
36
|
+
const fail = (error) => {
|
|
37
|
+
if (!failed) {
|
|
38
|
+
failed = true;
|
|
39
|
+
failure = error;
|
|
40
|
+
}
|
|
41
|
+
throw failure;
|
|
42
|
+
};
|
|
43
|
+
const bound = (value, max, label) => {
|
|
44
|
+
check();
|
|
45
|
+
if (!Number.isSafeInteger(value) || value < 0 || value > max) fail(/* @__PURE__ */ new RangeError(`Manifest read limit exceeded: ${label}`));
|
|
46
|
+
};
|
|
47
|
+
const charge = (key, value, max) => {
|
|
48
|
+
bound(value, max - used[key], key);
|
|
49
|
+
used[key] += value;
|
|
50
|
+
};
|
|
51
|
+
return Object.freeze({
|
|
52
|
+
limits,
|
|
53
|
+
check,
|
|
54
|
+
fail,
|
|
55
|
+
bound,
|
|
56
|
+
object(bytes) {
|
|
57
|
+
bound(bytes, limits.maxObjectBytes, "objectBytes");
|
|
58
|
+
charge("objectBytes", bytes, limits.maxTotalObjectBytes);
|
|
59
|
+
},
|
|
60
|
+
records(count, kind) {
|
|
61
|
+
charge(kind, count, kind === "manifests" ? limits.maxManifests : limits.maxEntries);
|
|
62
|
+
},
|
|
63
|
+
values(count) {
|
|
64
|
+
charge("values", count, limits.maxDecodedValues);
|
|
65
|
+
},
|
|
66
|
+
availableValues(count) {
|
|
67
|
+
bound(count, limits.maxDecodedValues - used.values, "values");
|
|
68
|
+
},
|
|
69
|
+
inflateLimit() {
|
|
70
|
+
check();
|
|
71
|
+
return Math.min(limits.maxInflatedBlockBytes, limits.maxTotalInflatedBytes - used.inflatedBytes);
|
|
72
|
+
},
|
|
73
|
+
inflated(bytes) {
|
|
74
|
+
bound(bytes, limits.maxInflatedBlockBytes, "inflatedBlockBytes");
|
|
75
|
+
charge("inflatedBytes", bytes, limits.maxTotalInflatedBytes);
|
|
76
|
+
},
|
|
77
|
+
schema(value) {
|
|
78
|
+
const stack = [{
|
|
79
|
+
value,
|
|
80
|
+
depth: 0
|
|
81
|
+
}];
|
|
82
|
+
while (stack.length) {
|
|
83
|
+
const next = stack.pop();
|
|
84
|
+
bound(next.depth, limits.maxSchemaDepth, "schemaDepth");
|
|
85
|
+
charge("values", 1, limits.maxDecodedValues);
|
|
86
|
+
if (next.value && typeof next.value === "object") {
|
|
87
|
+
const keys = Object.keys(next.value);
|
|
88
|
+
bound(stack.length + keys.length, limits.maxDecodedValues - used.values, "schemaValues");
|
|
89
|
+
for (const key of keys) stack.push({
|
|
90
|
+
value: next.value[key],
|
|
91
|
+
depth: next.depth + 1
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
function boundedBytes(reader, length, max) {
|
|
99
|
+
const budget = reader.budget;
|
|
100
|
+
budget?.bound(length, max ?? budget.limits.maxValueBytes, "valueBytes");
|
|
101
|
+
budget?.bound(reader.offset + length, reader.headerEnd ?? reader.view.byteLength, "encodedBytes");
|
|
102
|
+
return new Uint8Array(reader.view.buffer, reader.view.byteOffset + reader.offset, length);
|
|
103
|
+
}
|
|
104
|
+
function boundedLong(reader) {
|
|
105
|
+
let value = 0n;
|
|
106
|
+
for (let shift = 0; shift < 70; shift += 7) {
|
|
107
|
+
reader.budget.bound(reader.offset + 1, reader.headerEnd ?? reader.view.byteLength, "varintBytes");
|
|
108
|
+
const byte = reader.view.getUint8(reader.offset++);
|
|
109
|
+
if (shift === 63 && byte > 1) reader.budget.fail(/* @__PURE__ */ new RangeError("Invalid Avro long"));
|
|
110
|
+
value |= BigInt(byte & 127) << BigInt(shift);
|
|
111
|
+
if (!(byte & 128)) return value >> 1n ^ -(value & 1n);
|
|
112
|
+
}
|
|
113
|
+
return reader.budget.fail(/* @__PURE__ */ new RangeError("Invalid Avro long"));
|
|
114
|
+
}
|
|
115
|
+
export { boundedBytes, boundedLong, createAvroBudget };
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { boundedBytes, boundedLong } from "./avro.budget.mjs";
|
|
2
|
+
const smallLongs = Array.from({ length: 128 }, (_, i) => BigInt(i >>> 1 ^ -(i & 1)));
|
|
3
|
+
function readZigZag(reader) {
|
|
4
|
+
if (reader.budget) {
|
|
5
|
+
const value = Number(boundedLong(reader));
|
|
6
|
+
if (!Number.isSafeInteger(value)) reader.budget.fail(/* @__PURE__ */ new RangeError("Avro integer exceeds safe range"));
|
|
7
|
+
return value;
|
|
8
|
+
}
|
|
9
|
+
let result = 0;
|
|
10
|
+
let shift = 0;
|
|
11
|
+
while (true) {
|
|
12
|
+
const byte = reader.view.getUint8(reader.offset++);
|
|
13
|
+
result |= (byte & 127) << shift;
|
|
14
|
+
if (!(byte & 128)) return result >>> 1 ^ -(result & 1);
|
|
15
|
+
shift += 7;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function readZigZagBigInt(reader) {
|
|
19
|
+
if (reader.budget) return boundedLong(reader);
|
|
20
|
+
const first = reader.view.getUint8(reader.offset++);
|
|
21
|
+
if (first < 128) return smallLongs[first];
|
|
22
|
+
let prefix = first & 127;
|
|
23
|
+
for (let shift = 7; shift < 28; shift += 7) {
|
|
24
|
+
const byte = reader.view.getUint8(reader.offset++);
|
|
25
|
+
prefix |= (byte & 127) << shift;
|
|
26
|
+
if (!(byte & 128)) return BigInt(prefix >>> 1 ^ -(prefix & 1));
|
|
27
|
+
}
|
|
28
|
+
let high = 0;
|
|
29
|
+
let factor = 1;
|
|
30
|
+
while (true) {
|
|
31
|
+
const byte = reader.view.getUint8(reader.offset++);
|
|
32
|
+
high += (byte & 127) * factor;
|
|
33
|
+
if (!(byte & 128)) {
|
|
34
|
+
const result = BigInt(high) << 27n | BigInt(prefix >>> 1);
|
|
35
|
+
return prefix & 1 ? ~result : result;
|
|
36
|
+
}
|
|
37
|
+
factor *= 128;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function readBlockEnd(reader) {
|
|
41
|
+
const size = readZigZag(reader);
|
|
42
|
+
if (!reader.budget) return void 0;
|
|
43
|
+
reader.budget.bound(size, reader.view.byteLength, "containerBlockBytes");
|
|
44
|
+
const end = reader.offset + size;
|
|
45
|
+
reader.budget.bound(end, reader.headerEnd ?? reader.view.byteLength, "containerBlockEnd");
|
|
46
|
+
return end;
|
|
47
|
+
}
|
|
48
|
+
function checkBlockEnd(reader, end) {
|
|
49
|
+
if (end !== void 0 && reader.offset !== end) reader.budget.fail(/* @__PURE__ */ new RangeError("Avro container block length mismatch"));
|
|
50
|
+
}
|
|
51
|
+
function readAvroString(reader) {
|
|
52
|
+
const length = readZigZag(reader);
|
|
53
|
+
const bytes = boundedBytes(reader, length);
|
|
54
|
+
reader.budget?.values(1);
|
|
55
|
+
reader.offset += length;
|
|
56
|
+
return new TextDecoder().decode(bytes);
|
|
57
|
+
}
|
|
58
|
+
function avroMetadata(reader) {
|
|
59
|
+
if (reader.budget) reader.headerEnd = Math.min(reader.view.byteLength, reader.offset + reader.budget.limits.maxHeaderBytes);
|
|
60
|
+
reader.budget?.bound(reader.offset + 4, reader.headerEnd, "headerBytes");
|
|
61
|
+
if (reader.view.getUint32(reader.offset) !== 1331849729) throw new Error("avro invalid magic bytes");
|
|
62
|
+
reader.offset += 4;
|
|
63
|
+
const metadata = {};
|
|
64
|
+
let mapCount = readZigZag(reader);
|
|
65
|
+
while (mapCount !== 0) {
|
|
66
|
+
let end;
|
|
67
|
+
if (mapCount < 0) {
|
|
68
|
+
mapCount = -mapCount;
|
|
69
|
+
end = readBlockEnd(reader);
|
|
70
|
+
}
|
|
71
|
+
reader.budget?.availableValues(mapCount * 2);
|
|
72
|
+
for (let i = 0; i < mapCount; i++) {
|
|
73
|
+
const key = readAvroString(reader);
|
|
74
|
+
metadata[key] = readAvroString(reader);
|
|
75
|
+
}
|
|
76
|
+
checkBlockEnd(reader, end);
|
|
77
|
+
mapCount = readZigZag(reader);
|
|
78
|
+
}
|
|
79
|
+
metadata["avro.schema"] = JSON.parse(metadata["avro.schema"]);
|
|
80
|
+
reader.budget?.schema(metadata["avro.schema"]);
|
|
81
|
+
if (metadata["schema"]) {
|
|
82
|
+
metadata["schema"] = JSON.parse(metadata["schema"]);
|
|
83
|
+
reader.budget?.schema(metadata["schema"]);
|
|
84
|
+
}
|
|
85
|
+
if (metadata["iceberg.schema"]) {
|
|
86
|
+
metadata["iceberg.schema"] = JSON.parse(metadata["iceberg.schema"]);
|
|
87
|
+
reader.budget?.schema(metadata["iceberg.schema"]);
|
|
88
|
+
}
|
|
89
|
+
const syncMarker = boundedBytes(reader, 16, reader.budget?.limits.maxHeaderBytes);
|
|
90
|
+
reader.offset += 16;
|
|
91
|
+
delete reader.headerEnd;
|
|
92
|
+
return {
|
|
93
|
+
metadata,
|
|
94
|
+
syncMarker
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
export { avroMetadata, checkBlockEnd, readBlockEnd, readZigZag, readZigZagBigInt };
|