@gscdump/engine 1.3.2 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/duckdb-node.d.mts +7 -0
- package/dist/adapters/duckdb-node.mjs +94 -0
- package/dist/adapters/filesystem.d.mts +1 -1
- package/dist/adapters/filesystem.mjs +1 -1
- package/dist/adapters/hyparquet.d.mts +4 -3
- package/dist/adapters/hyparquet.mjs +7 -3
- package/dist/adapters/node-harness.d.mts +38 -0
- package/dist/adapters/node-harness.mjs +47 -0
- package/dist/adapters/node.d.mts +4 -100
- package/dist/adapters/node.mjs +4 -240
- package/dist/adapters/parquet-attach.d.mts +23 -0
- package/dist/adapters/parquet-attach.mjs +21 -0
- package/dist/adapters/r2-manifest.d.mts +82 -0
- package/dist/adapters/r2-manifest.mjs +364 -0
- package/dist/adapters/r2.d.mts +1 -1
- package/dist/adapters/read-optional.mjs +15 -0
- package/dist/adapters/snapshot-attach.d.mts +38 -0
- package/dist/adapters/snapshot-attach.mjs +85 -0
- package/dist/analysis-types.d.mts +56 -1
- package/dist/analyzer/define.d.mts +48 -0
- package/dist/analyzer/define.mjs +60 -0
- package/dist/analyzer/dispatch.d.mts +17 -0
- package/dist/analyzer/index.d.mts +4 -14
- package/dist/analyzer/index.mjs +4 -112
- package/dist/analyzer/registry.d.mts +33 -0
- package/dist/analyzer/registry.mjs +49 -0
- package/dist/analyzer/types.d.mts +95 -0
- package/dist/analyzer/types.mjs +5 -0
- package/dist/coerce.d.mts +4 -0
- package/dist/compaction.d.mts +14 -0
- package/dist/{_chunks/parquet-plan.mjs → compaction.mjs} +2 -138
- package/dist/contracts.d.mts +1 -2
- package/dist/{_chunks/schema.d.mts → drizzle-schema.d.mts} +22 -54
- package/dist/{_chunks/schema.mjs → drizzle-schema.mjs} +2 -78
- package/dist/{_chunks/snapshot.d.mts → duckdb.d.mts} +1 -14
- package/dist/duckdb.mjs +207 -0
- package/dist/engine.d.mts +4 -0
- package/dist/engine.mjs +385 -0
- package/dist/entities.d.mts +3 -52
- package/dist/entities.mjs +867 -2
- package/dist/errors.d.mts +114 -1
- package/dist/gc.mjs +92 -0
- package/dist/iceberg/append-sink.d.mts +14 -0
- package/dist/iceberg/append-sink.mjs +142 -0
- package/dist/iceberg/catalog.d.mts +71 -0
- package/dist/iceberg/catalog.mjs +109 -0
- package/dist/iceberg/index.d.mts +4 -13
- package/dist/iceberg/index.mjs +3 -244
- package/dist/iceberg/overwrite-writer.d.mts +161 -0
- package/dist/iceberg/overwrite-writer.mjs +102 -0
- package/dist/iceberg/pyiceberg-runtime.mjs +34 -0
- package/dist/iceberg/schema.d.mts +69 -0
- package/dist/{_chunks/schema2.mjs → iceberg/schema.mjs} +3 -2
- package/dist/index.d.mts +14 -190
- package/dist/index.mjs +10 -645
- package/dist/ingest-accumulator.d.mts +1 -1
- package/dist/ingest.d.mts +1 -1
- package/dist/layout.d.mts +31 -0
- package/dist/node_modules/.pnpm/hyparquet-compressors@1.1.1/node_modules/hyparquet-compressors/src/brotli.bitreader.mjs +88 -0
- package/dist/node_modules/.pnpm/hyparquet-compressors@1.1.1/node_modules/hyparquet-compressors/src/brotli.blocks.mjs +120 -0
- package/dist/node_modules/.pnpm/hyparquet-compressors@1.1.1/node_modules/hyparquet-compressors/src/brotli.context.mjs +1805 -0
- package/dist/node_modules/.pnpm/hyparquet-compressors@1.1.1/node_modules/hyparquet-compressors/src/brotli.contextmap.mjs +49 -0
- package/dist/node_modules/.pnpm/hyparquet-compressors@1.1.1/node_modules/hyparquet-compressors/src/brotli.dictionary.mjs +984 -0
- package/dist/node_modules/.pnpm/hyparquet-compressors@1.1.1/node_modules/hyparquet-compressors/src/brotli.huffman.mjs +266 -0
- package/dist/node_modules/.pnpm/hyparquet-compressors@1.1.1/node_modules/hyparquet-compressors/src/brotli.mjs +340 -0
- package/dist/node_modules/.pnpm/hyparquet-compressors@1.1.1/node_modules/hyparquet-compressors/src/brotli.prefix.mjs +109 -0
- package/dist/node_modules/.pnpm/hyparquet-compressors@1.1.1/node_modules/hyparquet-compressors/src/brotli.streams.mjs +21 -0
- package/dist/node_modules/.pnpm/hyparquet-compressors@1.1.1/node_modules/hyparquet-compressors/src/brotli.transform.mjs +190 -0
- package/dist/node_modules/.pnpm/hyparquet-compressors@1.1.1/node_modules/hyparquet-compressors/src/compressors.mjs +7 -0
- package/dist/node_modules/.pnpm/hyparquet-compressors@1.1.1/node_modules/hyparquet-compressors/src/gzip.huffman.mjs +121 -0
- package/dist/node_modules/.pnpm/hyparquet-compressors@1.1.1/node_modules/hyparquet-compressors/src/gzip.mjs +176 -0
- package/dist/node_modules/.pnpm/hyparquet-compressors@1.1.1/node_modules/hyparquet-compressors/src/index.mjs +7 -0
- package/dist/node_modules/.pnpm/hyparquet-compressors@1.1.1/node_modules/hyparquet-compressors/src/lz4.mjs +52 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/bloom.mjs +93 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/bytewriter.mjs +91 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/column.mjs +186 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/datapage.mjs +113 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/delta.mjs +111 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/dictionary.mjs +99 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/dremel.mjs +116 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/encoding.mjs +51 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/geospatial.mjs +84 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/index.mjs +7 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/indexes.mjs +31 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/metadata.mjs +138 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/node.mjs +8 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/parquet-writer.mjs +139 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/plain.mjs +68 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/schema.mjs +254 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/snappy.mjs +125 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/splitstream.mjs +38 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/thrift.mjs +79 -0
- package/dist/{_chunks/libs/hyparquet-writer.d.mts → node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/types.d.mts} +2 -2
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/unconvert.mjs +247 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/variant.mjs +321 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/wkb.mjs +79 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/write-rows.mjs +122 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/src/write.mjs +5 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/types/bytewriter.d.mts +1 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/types/index.d.mts +10 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/types/node.d.mts +3 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/types/parquet-writer.d.mts +2 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/types/schema.d.mts +2 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/types/wkb.d.mts +1 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/types/write-rows.d.mts +1 -0
- package/dist/node_modules/.pnpm/hyparquet-writer@0.16.1_patch_hash_7a5e451ac7634d7546ac56bcc5eadacf7715a6241640c2b5a5bc0cfc9763b8ec/node_modules/hyparquet-writer/types/write.d.mts +1 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/assemble.mjs +3 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/bloom.mjs +69 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/column.mjs +8 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/constants.mjs +80 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/convert.mjs +3 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/datapage.mjs +6 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/delta.mjs +2 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/encoding.mjs +2 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/filter.mjs +3 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/geoparquet.mjs +1 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/index.mjs +7 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/indexes.mjs +5 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/metadata.mjs +7 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/node.mjs +3 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/plain.mjs +1 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/plan.mjs +5 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/query.mjs +3 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/read.mjs +6 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/rowgroup.mjs +7 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/schema.mjs +54 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/snappy.mjs +1 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/thrift.mjs +1 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/types.d.mts +1 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/utils.mjs +19 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/variant.mjs +3 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/wkb.mjs +1 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/src/xxhash.mjs +68 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/types/index.d.mts +7 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/types/indexes.d.mts +1 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/types/metadata.d.mts +1 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/types/node.d.mts +2 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/types/query.d.mts +1 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/types/read.d.mts +1 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/types/snappy.d.mts +1 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.1/node_modules/hyparquet/types/utils.d.mts +1 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/assemble.mjs +144 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/bloom.mjs +124 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/column.mjs +127 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/constants.mjs +75 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/convert.mjs +118 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/datapage.mjs +144 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/delta.mjs +65 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/encoding.mjs +76 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/filter.mjs +98 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/geoparquet.mjs +24 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/index.mjs +7 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/indexes.mjs +16 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/metadata.mjs +235 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/node.mjs +7 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/plain.mjs +78 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/plan.mjs +147 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/query.mjs +3 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/read.mjs +106 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/rowgroup.mjs +154 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/schema.mjs +75 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/snappy.mjs +70 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/thrift.mjs +86 -0
- package/dist/{_chunks/libs/hyparquet.d.mts → node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/types.d.mts} +6 -8
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/utils.mjs +31 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/variant.mjs +225 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/wkb.mjs +94 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/src/xxhash.mjs +68 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/types/index.d.mts +10 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/types/indexes.d.mts +1 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/types/metadata.d.mts +1 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/types/node.d.mts +3 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/types/query.d.mts +1 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/types/read.d.mts +1 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/types/snappy.d.mts +1 -0
- package/dist/node_modules/.pnpm/hyparquet@1.26.2/node_modules/hyparquet/types/utils.d.mts +1 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/avro/avro.metadata.mjs +1 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/avro/avro.read.mjs +4 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/avro/avro.write.mjs +2 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/catalog/file.mjs +1 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/catalog/loadTable.mjs +3 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/catalog/rest.mjs +73 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/create.mjs +67 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/delete.mjs +2 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/fetch.mjs +8 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/index.mjs +13 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/json.mjs +147 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/manifest.mjs +2 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/metadata.mjs +3 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/prune.mjs +4 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/puffin/deletion-vector.mjs +2 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/puffin/puffin.mjs +2 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/puffin/roaring.mjs +1 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/read.mjs +9 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/s3.mjs +3 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/schema.mjs +76 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/sigv4.mjs +2 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/sql/icebergDataSource.mjs +8 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/sql/icebergQuery.mjs +5 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/sql/whereFilter.mjs +1 -0
- package/dist/{_chunks/libs/icebird.d.mts → node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/types.d.mts} +5 -33
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/utils.mjs +8 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/write/commit.mjs +5 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/write/conversions.mjs +19 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/write/delete-file.mjs +3 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/write/geospatial.mjs +1 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/write/manifest-list.mjs +2 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/write/manifest.mjs +3 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/write/parquet.mjs +5 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/write/partition.mjs +75 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/write/rewrite.mjs +10 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/write/serde.mjs +2 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/write/snapshot.mjs +5 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/write/sort.mjs +3 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/write/stage-deletion-vector.mjs +11 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/write/stage-position-delete.mjs +8 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/write/stage.mjs +10 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/write/stats.mjs +4 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/write/transform.mjs +60 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/src/write/write.mjs +45 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/types/catalog/file.d.mts +1 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/types/catalog/rest.d.mts +1 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/types/create.d.mts +1 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/types/fetch.d.mts +1 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/types/index.d.mts +13 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/types/manifest.d.mts +1 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/types/metadata.d.mts +1 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/types/read.d.mts +2 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/types/s3.d.mts +1 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/types/sql/icebergDataSource.d.mts +2 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/types/sql/icebergQuery.d.mts +2 -0
- package/dist/node_modules/.pnpm/icebird@0.8.15_patch_hash_d1902372376af18885e7c7dce807f1ecab86c2f86a9d1ff65d51e3b63b64b057/node_modules/icebird/types/write/write.d.mts +32 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/ast.d.mts +1 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/backend/dataSource.mjs +1 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/execute/accumulator.mjs +2 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/execute/aggregates.mjs +10 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/execute/execute.mjs +15 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/execute/join.mjs +5 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/execute/scanColumn.mjs +1 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/execute/sort.mjs +5 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/execute/streamingAggregate.mjs +9 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/execute/utils.mjs +1 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/execute/window.mjs +5 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/execute/yield.mjs +17 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/expression/alias.mjs +1 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/expression/binary.mjs +1 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/expression/date.mjs +1 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/expression/evaluate.mjs +15 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/expression/math.mjs +1 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/expression/regexp.mjs +2 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/expression/strings.mjs +3 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/index.d.mts +1 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/index.mjs +9 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/parse/expression.mjs +6 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/parse/extractTables.mjs +1 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/parse/functions.mjs +5 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/parse/joins.mjs +7 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/parse/parse.mjs +10 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/parse/primary.mjs +8 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/parse/state.mjs +2 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/parse/tokenize.mjs +3 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/parse/types.d.mts +1 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/plan/columns.mjs +3 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/plan/plan.mjs +7 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/plan/types.d.mts +1 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/spatial/bbox.mjs +2 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/spatial/equality.mjs +2 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/spatial/operations.mjs +5 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/spatial/pointRelations.mjs +2 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/spatial/primitives.mjs +2 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/spatial/segments.mjs +2 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/spatial/spatial.mjs +6 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/spatial/wkt.mjs +1 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/types.d.mts +3 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/validation/aggregates.mjs +3 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/validation/executionErrors.mjs +2 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/validation/functions.mjs +2 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/validation/keywords.mjs +1 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/validation/parseErrors.mjs +2 -0
- package/dist/node_modules/.pnpm/squirreling@0.15.0/node_modules/squirreling/src/validation/tables.mjs +2 -0
- package/dist/parquet-plan.d.mts +15 -0
- package/dist/parquet-plan.mjs +139 -0
- package/dist/parquet-pushdown.mjs +58 -0
- package/dist/period/index.d.mts +52 -1
- package/dist/planner.d.mts +2 -14
- package/dist/planner.mjs +2 -1
- package/dist/profile.d.mts +21 -0
- package/dist/profile.mjs +27 -0
- package/dist/query-dim.d.mts +54 -0
- package/dist/query-dim.mjs +91 -0
- package/dist/report/define.d.mts +8 -0
- package/dist/report/define.mjs +15 -0
- package/dist/report/hash.d.mts +13 -0
- package/dist/report/hash.mjs +29 -0
- package/dist/report/index.d.mts +4 -170
- package/dist/report/index.mjs +3 -55
- package/dist/report/registry.d.mts +18 -0
- package/dist/report/registry.mjs +14 -0
- package/dist/report/types.d.mts +139 -0
- package/dist/resolver/adapter.d.mts +13 -0
- package/dist/resolver/adapter.mjs +27 -0
- package/dist/resolver/canonical-source.d.mts +5 -0
- package/dist/resolver/canonical-source.mjs +14 -0
- package/dist/resolver/compile.d.mts +15 -0
- package/dist/resolver/compile.mjs +396 -0
- package/dist/resolver/datasets.d.mts +16 -0
- package/dist/resolver/datasets.mjs +159 -0
- package/dist/resolver/extras-overlay.d.mts +37 -0
- package/dist/resolver/extras-overlay.mjs +17 -0
- package/dist/resolver/filter-utils.d.mts +10 -0
- package/dist/resolver/filter-utils.mjs +59 -0
- package/dist/resolver/fragments.d.mts +60 -0
- package/dist/resolver/fragments.mjs +206 -0
- package/dist/resolver/index.d.mts +11 -371
- package/dist/resolver/index.mjs +10 -1
- package/dist/resolver/pg-adapter.d.mts +56 -0
- package/dist/resolver/pg-adapter.mjs +110 -0
- package/dist/resolver/run-query.d.mts +172 -0
- package/dist/resolver/run-query.mjs +241 -0
- package/dist/resolver/schema-drift.d.mts +15 -0
- package/dist/resolver/schema-drift.mjs +12 -0
- package/dist/rollups.d.mts +4 -4
- package/dist/rollups.mjs +3 -2
- package/dist/schedule.mjs +100 -0
- package/dist/schema.d.mts +34 -1
- package/dist/schema.mjs +78 -1
- package/dist/sink-node.d.mts +1 -159
- package/dist/sink-node.mjs +1 -133
- package/dist/sink.d.mts +125 -0
- package/dist/sinks/in-memory-sink.d.mts +25 -0
- package/dist/sinks/in-memory-sink.mjs +61 -0
- package/dist/sinks/index.d.mts +2 -0
- package/dist/sinks/index.mjs +2 -0
- package/dist/snapshot.d.mts +14 -0
- package/dist/source/attached-table.d.mts +45 -0
- package/dist/source/attached-table.mjs +55 -0
- package/dist/source/create-sql-query-source.d.mts +24 -0
- package/dist/source/create-sql-query-source.mjs +28 -0
- package/dist/source/index.d.mts +6 -66
- package/dist/source/index.mjs +9 -82
- package/dist/source/source-types.d.mts +49 -0
- package/dist/{_chunks/storage.d.mts → storage.d.mts} +4 -14
- package/dist/sync-config.d.mts +36 -0
- package/dist/sync-config.mjs +98 -0
- package/dist/vendor/hysnappy-purejs.mjs +12 -1
- package/package.json +4 -4
- package/dist/_chunks/analysis-types.d.mts +0 -57
- package/dist/_chunks/contracts.d.mts +0 -1
- package/dist/_chunks/engine.mjs +0 -731
- package/dist/_chunks/entities.mjs +0 -967
- package/dist/_chunks/errors.d.mts +0 -115
- package/dist/_chunks/index.d.mts +0 -53
- package/dist/_chunks/libs/hyparquet-compressors.mjs +0 -2796
- package/dist/_chunks/libs/hyparquet-writer.mjs +0 -2524
- package/dist/_chunks/libs/hyparquet.mjs +0 -2596
- package/dist/_chunks/libs/icebird.mjs +0 -564
- package/dist/_chunks/registry.d.mts +0 -213
- package/dist/_chunks/resolver.mjs +0 -1220
- package/dist/_chunks/sink.d.mts +0 -257
- /package/dist/{_chunks → analyzer}/dispatch.mjs +0 -0
- /package/dist/{_chunks/coerce.mjs → coerce.mjs} +0 -0
- /package/dist/{_chunks/layout.mjs → layout.mjs} +0 -0
- /package/dist/{_chunks/manifest-store-utils.mjs → manifest-store-utils.mjs} +0 -0
- /package/dist/{_chunks/libs/fzstd.mjs → node_modules/.pnpm/fzstd@0.1.1/node_modules/fzstd/esm/index.mjs} +0 -0
- /package/dist/{_chunks → resolver}/types.d.mts +0 -0
- /package/dist/{_chunks/schedule.d.mts → schedule.d.mts} +0 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { dimensionToColumn } from "./schema.mjs";
|
|
2
|
+
import { enumeratePartitions } from "./compaction.mjs";
|
|
3
|
+
import { METRIC_EXPR, escapeLike, topLevelPagePredicateSql } from "./sql-fragments.mjs";
|
|
4
|
+
import { buildLogicalPlan } from "gscdump/query/plan";
|
|
5
|
+
const FILES_PLACEHOLDER = "{{FILES}}";
|
|
6
|
+
function buildDimensionWhere(filters, table) {
|
|
7
|
+
const clauses = [];
|
|
8
|
+
const params = [];
|
|
9
|
+
for (const filter of filters) {
|
|
10
|
+
const column = dimensionToColumn(filter.dimension, table);
|
|
11
|
+
switch (filter.operator) {
|
|
12
|
+
case "equals":
|
|
13
|
+
clauses.push(`${column} = ?`);
|
|
14
|
+
params.push(filter.expression);
|
|
15
|
+
break;
|
|
16
|
+
case "notEquals":
|
|
17
|
+
clauses.push(`${column} != ?`);
|
|
18
|
+
params.push(filter.expression);
|
|
19
|
+
break;
|
|
20
|
+
case "contains":
|
|
21
|
+
clauses.push(`${column} LIKE ? ESCAPE '\\'`);
|
|
22
|
+
params.push(`%${escapeLike(filter.expression)}%`);
|
|
23
|
+
break;
|
|
24
|
+
case "notContains":
|
|
25
|
+
clauses.push(`${column} NOT LIKE ? ESCAPE '\\'`);
|
|
26
|
+
params.push(`%${escapeLike(filter.expression)}%`);
|
|
27
|
+
break;
|
|
28
|
+
case "includingRegex":
|
|
29
|
+
clauses.push(`regexp_matches(${column}, ?)`);
|
|
30
|
+
params.push(filter.expression);
|
|
31
|
+
break;
|
|
32
|
+
case "excludingRegex":
|
|
33
|
+
clauses.push(`NOT regexp_matches(${column}, ?)`);
|
|
34
|
+
params.push(filter.expression);
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
clause: clauses.join(" AND "),
|
|
40
|
+
params
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function buildTopLevelWhere(plan, table) {
|
|
44
|
+
if (!plan.specialFilters.topLevel) return "";
|
|
45
|
+
return topLevelPagePredicateSql(dimensionToColumn("page", table));
|
|
46
|
+
}
|
|
47
|
+
function buildHaving(filters) {
|
|
48
|
+
if (filters.length === 0) return {
|
|
49
|
+
clause: "",
|
|
50
|
+
params: []
|
|
51
|
+
};
|
|
52
|
+
const clauses = [];
|
|
53
|
+
const params = [];
|
|
54
|
+
for (const filter of filters) {
|
|
55
|
+
const expr = METRIC_EXPR[filter.metric];
|
|
56
|
+
switch (filter.operator) {
|
|
57
|
+
case "metricGte":
|
|
58
|
+
clauses.push(`${expr} >= ?`);
|
|
59
|
+
params.push(filter.expression);
|
|
60
|
+
break;
|
|
61
|
+
case "metricGt":
|
|
62
|
+
clauses.push(`${expr} > ?`);
|
|
63
|
+
params.push(filter.expression);
|
|
64
|
+
break;
|
|
65
|
+
case "metricLte":
|
|
66
|
+
clauses.push(`${expr} <= ?`);
|
|
67
|
+
params.push(filter.expression);
|
|
68
|
+
break;
|
|
69
|
+
case "metricLt":
|
|
70
|
+
clauses.push(`${expr} < ?`);
|
|
71
|
+
params.push(filter.expression);
|
|
72
|
+
break;
|
|
73
|
+
case "metricBetween":
|
|
74
|
+
clauses.push(`${expr} >= ? AND ${expr} <= ?`);
|
|
75
|
+
params.push(filter.expression, filter.expression2 ?? filter.expression);
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
clause: clauses.length > 0 ? `HAVING ${clauses.join(" AND ")}` : "",
|
|
81
|
+
params
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function compileLogicalQueryPlan(plan, table = plan.dataset) {
|
|
85
|
+
const partitions = enumeratePartitions(plan.dateRange.startDate, plan.dateRange.endDate);
|
|
86
|
+
const metricSelects = plan.metrics.map((metric) => `${METRIC_EXPR[metric]} AS ${metric}`);
|
|
87
|
+
const dimSelects = plan.groupByDimensions.map((dimension) => {
|
|
88
|
+
const column = dimensionToColumn(dimension, table);
|
|
89
|
+
return column !== dimension ? `${column} AS ${dimension}` : dimension;
|
|
90
|
+
});
|
|
91
|
+
const whereClauses = ["date >= ?", "date <= ?"];
|
|
92
|
+
const whereParams = [plan.dateRange.startDate, plan.dateRange.endDate];
|
|
93
|
+
const dimWhere = buildDimensionWhere(plan.dimensionFilters, table);
|
|
94
|
+
if (dimWhere.clause) {
|
|
95
|
+
whereClauses.push(dimWhere.clause);
|
|
96
|
+
whereParams.push(...dimWhere.params);
|
|
97
|
+
}
|
|
98
|
+
const topLevelClause = buildTopLevelWhere(plan, table);
|
|
99
|
+
if (topLevelClause) whereClauses.push(topLevelClause);
|
|
100
|
+
const having = buildHaving(plan.metricFilters);
|
|
101
|
+
const groupByCols = [...plan.groupByDimensions.map((dimension) => dimensionToColumn(dimension, table)), ...plan.hasDate ? ["date"] : []];
|
|
102
|
+
const groupBy = groupByCols.length > 0 ? `GROUP BY ${groupByCols.join(", ")}` : "";
|
|
103
|
+
const orderBy = plan.orderBy ? `ORDER BY ${plan.orderBy.column} ${plan.orderBy.dir.toUpperCase()}` : "ORDER BY clicks DESC";
|
|
104
|
+
const limit = `LIMIT ${plan.rowLimit ?? 1e3}`;
|
|
105
|
+
const offset = plan.startRow ? `OFFSET ${plan.startRow}` : "";
|
|
106
|
+
return {
|
|
107
|
+
sql: [
|
|
108
|
+
`SELECT ${[
|
|
109
|
+
...dimSelects,
|
|
110
|
+
...plan.hasDate ? ["date"] : [],
|
|
111
|
+
...metricSelects
|
|
112
|
+
].join(", ")}`,
|
|
113
|
+
`FROM read_parquet(${FILES_PLACEHOLDER}, union_by_name = true)`,
|
|
114
|
+
`WHERE ${whereClauses.join(" AND ")}`,
|
|
115
|
+
groupBy,
|
|
116
|
+
having.clause,
|
|
117
|
+
orderBy,
|
|
118
|
+
limit,
|
|
119
|
+
offset
|
|
120
|
+
].filter(Boolean).join(" ").replace(/\s+/g, " ").trim(),
|
|
121
|
+
params: [...whereParams, ...having.params],
|
|
122
|
+
partitions,
|
|
123
|
+
table,
|
|
124
|
+
filesPlaceholder: FILES_PLACEHOLDER
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
function resolveParquetSQL(state, table) {
|
|
128
|
+
const plan = buildLogicalPlan(state, { regex: true });
|
|
129
|
+
return compileLogicalQueryPlan(plan, table ?? plan.dataset);
|
|
130
|
+
}
|
|
131
|
+
function fileList(keys) {
|
|
132
|
+
return keys.length === 0 ? "[]" : `[${keys.map((key) => `'${key.replace(/'/g, "''")}'`).join(", ")}]`;
|
|
133
|
+
}
|
|
134
|
+
function substituteNamedFiles(sql, sets) {
|
|
135
|
+
let out = sql;
|
|
136
|
+
for (const [name, keys] of Object.entries(sets)) out = out.replace(new RegExp(`\\{\\{${name}\\}\\}`, "g"), fileList(keys));
|
|
137
|
+
return out;
|
|
138
|
+
}
|
|
139
|
+
export { FILES_PLACEHOLDER, compileLogicalQueryPlan, resolveParquetSQL, substituteNamedFiles };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { SCHEMAS } from "./schema.mjs";
|
|
2
|
+
const PUSHABLE_COLUMN = {
|
|
3
|
+
country: "country",
|
|
4
|
+
query: "query",
|
|
5
|
+
searchAppearance: "searchAppearance"
|
|
6
|
+
};
|
|
7
|
+
function txLeaf(leaf, columns) {
|
|
8
|
+
if (leaf.operator !== "equals") return null;
|
|
9
|
+
const column = PUSHABLE_COLUMN[leaf.dimension];
|
|
10
|
+
if (!column || !columns.has(column)) return null;
|
|
11
|
+
return { [column]: { $eq: leaf.expression } };
|
|
12
|
+
}
|
|
13
|
+
function combineFilters(parts, groupType) {
|
|
14
|
+
const first = parts[0];
|
|
15
|
+
if (!first) return null;
|
|
16
|
+
if (parts.length === 1) return first;
|
|
17
|
+
return groupType === "or" ? { $or: [...parts] } : { $and: [...parts] };
|
|
18
|
+
}
|
|
19
|
+
function txExact(node, columns) {
|
|
20
|
+
const groupType = node._groupType ?? "and";
|
|
21
|
+
const leafParts = [];
|
|
22
|
+
for (const leaf of node._filters) {
|
|
23
|
+
const t = txLeaf(leaf, columns);
|
|
24
|
+
if (!t) return null;
|
|
25
|
+
leafParts.push(t);
|
|
26
|
+
}
|
|
27
|
+
if (groupType === "or") {
|
|
28
|
+
if (node._nestedGroups?.length || leafParts.length === 0) return null;
|
|
29
|
+
return combineFilters(leafParts, "or");
|
|
30
|
+
}
|
|
31
|
+
const parts = leafParts;
|
|
32
|
+
for (const group of node._nestedGroups ?? []) {
|
|
33
|
+
const t = txExact(group, columns);
|
|
34
|
+
if (!t) return null;
|
|
35
|
+
parts.push(t);
|
|
36
|
+
}
|
|
37
|
+
if (parts.length === 0) return null;
|
|
38
|
+
return combineFilters(parts, "and");
|
|
39
|
+
}
|
|
40
|
+
function extractParquetPushdown(state, table) {
|
|
41
|
+
const filter = state?.filter;
|
|
42
|
+
const schema = SCHEMAS[table];
|
|
43
|
+
if (!filter || !schema) return void 0;
|
|
44
|
+
const columns = new Set(schema.columns.map((c) => c.name));
|
|
45
|
+
if ((filter._groupType ?? "and") === "or") return txExact(filter, columns) ?? void 0;
|
|
46
|
+
const parts = [];
|
|
47
|
+
for (const leaf of filter._filters) {
|
|
48
|
+
const t = txLeaf(leaf, columns);
|
|
49
|
+
if (t) parts.push(t);
|
|
50
|
+
}
|
|
51
|
+
for (const group of filter._nestedGroups ?? []) {
|
|
52
|
+
const t = txExact(group, columns);
|
|
53
|
+
if (t) parts.push(t);
|
|
54
|
+
}
|
|
55
|
+
if (parts.length === 0) return void 0;
|
|
56
|
+
return combineFilters(parts, "and") ?? void 0;
|
|
57
|
+
}
|
|
58
|
+
export { extractParquetPushdown };
|
package/dist/period/index.d.mts
CHANGED
|
@@ -1,2 +1,53 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AnalysisParams } from "../analysis-types.mjs";
|
|
2
|
+
type WindowPreset = 'last-7d' | 'last-28d' | 'last-30d' | 'last-90d' | 'last-180d' | 'last-365d' | 'mtd' | 'ytd' | 'custom';
|
|
3
|
+
type ComparisonMode = 'none' | 'prev-period' | 'yoy';
|
|
4
|
+
interface ResolveWindowOptions {
|
|
5
|
+
preset: WindowPreset;
|
|
6
|
+
comparison?: ComparisonMode;
|
|
7
|
+
anchor?: string;
|
|
8
|
+
start?: string;
|
|
9
|
+
end?: string;
|
|
10
|
+
}
|
|
11
|
+
interface ResolvedWindow {
|
|
12
|
+
start: string;
|
|
13
|
+
end: string;
|
|
14
|
+
days: number;
|
|
15
|
+
comparison?: {
|
|
16
|
+
start: string;
|
|
17
|
+
end: string;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
interface AnalysisPeriod {
|
|
21
|
+
startDate: string;
|
|
22
|
+
endDate: string;
|
|
23
|
+
}
|
|
24
|
+
interface ComparisonPeriod {
|
|
25
|
+
current: AnalysisPeriod;
|
|
26
|
+
previous: AnalysisPeriod;
|
|
27
|
+
}
|
|
28
|
+
declare function defaultEndDate(): string;
|
|
29
|
+
declare function periodOf(params: AnalysisParams): AnalysisPeriod;
|
|
30
|
+
declare function comparisonOf(params: AnalysisParams): ComparisonPeriod;
|
|
31
|
+
declare function resolveWindow(opts: ResolveWindowOptions): ResolvedWindow;
|
|
32
|
+
interface PadTimeseriesOptions<T> {
|
|
33
|
+
/** ISO date (YYYY-MM-DD), inclusive lower bound. */
|
|
34
|
+
startDate: string;
|
|
35
|
+
/** ISO date (YYYY-MM-DD), inclusive upper bound. */
|
|
36
|
+
endDate: string;
|
|
37
|
+
/**
|
|
38
|
+
* Row to insert for missing dates. Defaults to `{ clicks: 0, impressions: 0, ctr: 0, position: 0 }`.
|
|
39
|
+
* The `date` field is set automatically.
|
|
40
|
+
*/
|
|
41
|
+
fill?: Omit<T, 'date'>;
|
|
42
|
+
/** Row-field that carries the ISO date. Defaults to `date`. */
|
|
43
|
+
dateKey?: string;
|
|
44
|
+
}
|
|
45
|
+
type DateRowShape = Record<string, unknown> & {
|
|
46
|
+
date?: unknown;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Pad rows so every calendar day in `[startDate, endDate]` appears at least
|
|
50
|
+
* once. Existing dates keep all their rows (grouped timeseries safe).
|
|
51
|
+
*/
|
|
52
|
+
declare function padTimeseries<T extends DateRowShape = DateRowShape>(rows: readonly T[], options: PadTimeseriesOptions<T>): T[];
|
|
2
53
|
export { AnalysisPeriod, ComparisonMode, ComparisonPeriod, PadTimeseriesOptions, ResolveWindowOptions, ResolvedWindow, WindowPreset, comparisonOf, defaultEndDate, padTimeseries, periodOf, resolveWindow };
|
package/dist/planner.d.mts
CHANGED
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { BuilderState } from "gscdump/query";
|
|
4
|
-
interface ResolvedQuery {
|
|
5
|
-
sql: string;
|
|
6
|
-
params: unknown[];
|
|
7
|
-
partitions: string[];
|
|
8
|
-
table: TableName;
|
|
9
|
-
filesPlaceholder: string;
|
|
10
|
-
}
|
|
11
|
-
declare const FILES_PLACEHOLDER = "{{FILES}}";
|
|
12
|
-
declare function compileLogicalQueryPlan(plan: LogicalQueryPlan, table?: TableName): ResolvedQuery;
|
|
13
|
-
declare function resolveParquetSQL(state: BuilderState, table?: TableName): ResolvedQuery;
|
|
14
|
-
declare function substituteNamedFiles(sql: string, sets: Record<string, string[]>): string;
|
|
1
|
+
import { enumeratePartitions } from "./compaction.mjs";
|
|
2
|
+
import { FILES_PLACEHOLDER, ResolvedQuery, compileLogicalQueryPlan, resolveParquetSQL, substituteNamedFiles } from "./parquet-plan.mjs";
|
|
15
3
|
export { FILES_PLACEHOLDER, type ResolvedQuery, compileLogicalQueryPlan, enumeratePartitions, resolveParquetSQL, substituteNamedFiles };
|
package/dist/planner.mjs
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { enumeratePartitions } from "./compaction.mjs";
|
|
2
|
+
import { FILES_PLACEHOLDER, compileLogicalQueryPlan, resolveParquetSQL, substituteNamedFiles } from "./parquet-plan.mjs";
|
|
2
3
|
export { FILES_PLACEHOLDER, compileLogicalQueryPlan, enumeratePartitions, resolveParquetSQL, substituteNamedFiles };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { QueryProfiler, QuerySpan } from "./storage.mjs";
|
|
2
|
+
/**
|
|
3
|
+
* Build a {@link QueryProfiler} that records each closed span to `sink`.
|
|
4
|
+
*
|
|
5
|
+
* `start(name, meta)` stamps the open time and returns an `end` thunk; calling
|
|
6
|
+
* `end(extra)` records `{ name, ms, meta }` with `extra` merged over the
|
|
7
|
+
* open-time `meta` (so completion-only facts — row counts, buffered-file
|
|
8
|
+
* counts — land on the same span). `now` is injectable for deterministic
|
|
9
|
+
* tests; it defaults to `Date.now`.
|
|
10
|
+
*/
|
|
11
|
+
declare function createQueryProfiler(sink: (span: QuerySpan) => void, now?: () => number): QueryProfiler;
|
|
12
|
+
/**
|
|
13
|
+
* A profiler that accumulates closed spans into an array — for tests, the CLI
|
|
14
|
+
* `query` command, or any ad-hoc "where did the time go" probe. The returned
|
|
15
|
+
* `spans` array is filled as spans close, in completion order.
|
|
16
|
+
*/
|
|
17
|
+
declare function collectSpans(now?: () => number): {
|
|
18
|
+
profiler: QueryProfiler;
|
|
19
|
+
spans: QuerySpan[];
|
|
20
|
+
};
|
|
21
|
+
export { collectSpans, createQueryProfiler };
|
package/dist/profile.mjs
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
function createQueryProfiler(sink, now = () => Date.now()) {
|
|
2
|
+
return { start(name, meta) {
|
|
3
|
+
const t0 = now();
|
|
4
|
+
return (extra) => {
|
|
5
|
+
const merged = meta || extra ? {
|
|
6
|
+
...meta,
|
|
7
|
+
...extra
|
|
8
|
+
} : void 0;
|
|
9
|
+
sink(merged ? {
|
|
10
|
+
name,
|
|
11
|
+
ms: now() - t0,
|
|
12
|
+
meta: merged
|
|
13
|
+
} : {
|
|
14
|
+
name,
|
|
15
|
+
ms: now() - t0
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
} };
|
|
19
|
+
}
|
|
20
|
+
function collectSpans(now) {
|
|
21
|
+
const spans = [];
|
|
22
|
+
return {
|
|
23
|
+
profiler: createQueryProfiler((s) => spans.push(s), now),
|
|
24
|
+
spans
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export { collectSpans, createQueryProfiler };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { DataSource } from "./storage.mjs";
|
|
2
|
+
import { queryDimMetaKey, queryDimParquetKey } from "./entity-keys.mjs";
|
|
3
|
+
import { TenantCtx } from "@gscdump/contracts";
|
|
4
|
+
interface QueryDimRecord {
|
|
5
|
+
query: string;
|
|
6
|
+
/** Lexical canonical, never empty: NULL/'' folds to the raw query. */
|
|
7
|
+
query_canonical: string;
|
|
8
|
+
/** Packed search-intent code (see `@gscdump/analysis` `encodeIntent`). */
|
|
9
|
+
intent_code: number;
|
|
10
|
+
normalizer_version: number;
|
|
11
|
+
intent_version: number;
|
|
12
|
+
}
|
|
13
|
+
/** JSON sidecar: versions + freshness, readable without decoding the parquet. */
|
|
14
|
+
interface QueryDimMeta {
|
|
15
|
+
version: 1;
|
|
16
|
+
builtAt: number;
|
|
17
|
+
rowCount: number;
|
|
18
|
+
normalizerVersion: number;
|
|
19
|
+
intentVersion: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Injected derivation. `engine` never imports `@gscdump/analysis`; the host
|
|
23
|
+
* passes `normalizeQuery` / `classifyIntentCode` (e.g. `encodeIntent ∘
|
|
24
|
+
* classifyQueryIntent`) plus their version constants.
|
|
25
|
+
*/
|
|
26
|
+
interface QueryDimDeps {
|
|
27
|
+
normalizeQuery: (query: string) => string;
|
|
28
|
+
normalizerVersion: number;
|
|
29
|
+
/** Returns the packed intent code for a raw query. */
|
|
30
|
+
classifyIntentCode: (query: string) => number;
|
|
31
|
+
intentVersion: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Pure: distinct raw queries → dimension records. De-dupes, drops empties, and
|
|
35
|
+
* folds an empty/whitespace canonical back to the raw query so the dimension
|
|
36
|
+
* is total for read-time joins.
|
|
37
|
+
*/
|
|
38
|
+
declare function buildQueryDimRecords(queries: Iterable<string>, deps: QueryDimDeps): QueryDimRecord[];
|
|
39
|
+
interface QueryDimStore {
|
|
40
|
+
parquetKey: (ctx: TenantCtx) => string;
|
|
41
|
+
/** Write the parquet + JSON sidecar. Last-write-wins; no history. */
|
|
42
|
+
write: (ctx: TenantCtx, records: readonly QueryDimRecord[], builtAt: number) => Promise<{
|
|
43
|
+
parquetKey: string;
|
|
44
|
+
rowCount: number;
|
|
45
|
+
}>;
|
|
46
|
+
/** Read the sidecar (versions + freshness), or null on first build. */
|
|
47
|
+
loadMeta: (ctx: TenantCtx) => Promise<QueryDimMeta | null>;
|
|
48
|
+
/** Decode the dimension rows (test/inspection; reads JOIN the parquet by key). */
|
|
49
|
+
loadRecords: (ctx: TenantCtx) => Promise<QueryDimRecord[]>;
|
|
50
|
+
}
|
|
51
|
+
declare function createQueryDimStore({ dataSource }: {
|
|
52
|
+
dataSource: DataSource;
|
|
53
|
+
}): QueryDimStore;
|
|
54
|
+
export { QueryDimDeps, QueryDimMeta, QueryDimRecord, QueryDimStore, buildQueryDimRecords, createQueryDimStore };
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { queryDimMetaKey, queryDimParquetKey } from "./entity-keys.mjs";
|
|
2
|
+
import { decodeParquetToRows, encodeRowsToParquetFlex } from "./adapters/hyparquet.mjs";
|
|
3
|
+
import { readOptional } from "./adapters/read-optional.mjs";
|
|
4
|
+
import { encodeJsonBigintSafe } from "@gscdump/lakehouse/bigint";
|
|
5
|
+
const QUERY_DIM_COLUMNS = [
|
|
6
|
+
{
|
|
7
|
+
name: "query",
|
|
8
|
+
type: "VARCHAR",
|
|
9
|
+
nullable: false
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
name: "query_canonical",
|
|
13
|
+
type: "VARCHAR",
|
|
14
|
+
nullable: false
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: "intent_code",
|
|
18
|
+
type: "INTEGER",
|
|
19
|
+
nullable: false
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: "normalizer_version",
|
|
23
|
+
type: "INTEGER",
|
|
24
|
+
nullable: false
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: "intent_version",
|
|
28
|
+
type: "INTEGER",
|
|
29
|
+
nullable: false
|
|
30
|
+
}
|
|
31
|
+
];
|
|
32
|
+
function buildQueryDimRecords(queries, deps) {
|
|
33
|
+
const seen = /* @__PURE__ */ new Set();
|
|
34
|
+
const out = [];
|
|
35
|
+
for (const raw of queries) {
|
|
36
|
+
const query = String(raw);
|
|
37
|
+
if (query.trim() === "" || seen.has(query)) continue;
|
|
38
|
+
seen.add(query);
|
|
39
|
+
const canonical = deps.normalizeQuery(query);
|
|
40
|
+
out.push({
|
|
41
|
+
query,
|
|
42
|
+
query_canonical: canonical === "" ? query : canonical,
|
|
43
|
+
intent_code: deps.classifyIntentCode(query),
|
|
44
|
+
normalizer_version: deps.normalizerVersion,
|
|
45
|
+
intent_version: deps.intentVersion
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
function createQueryDimStore({ dataSource }) {
|
|
51
|
+
return {
|
|
52
|
+
parquetKey: queryDimParquetKey,
|
|
53
|
+
async write(ctx, records, builtAt) {
|
|
54
|
+
const parquetKey = queryDimParquetKey(ctx);
|
|
55
|
+
const bytes = encodeRowsToParquetFlex(records, {
|
|
56
|
+
columns: QUERY_DIM_COLUMNS,
|
|
57
|
+
sortKey: ["query"]
|
|
58
|
+
});
|
|
59
|
+
await dataSource.write(parquetKey, bytes);
|
|
60
|
+
const meta = {
|
|
61
|
+
version: 1,
|
|
62
|
+
builtAt,
|
|
63
|
+
rowCount: records.length,
|
|
64
|
+
normalizerVersion: records[0]?.normalizer_version ?? 0,
|
|
65
|
+
intentVersion: records[0]?.intent_version ?? 0
|
|
66
|
+
};
|
|
67
|
+
await dataSource.write(queryDimMetaKey(ctx), encodeJsonBigintSafe(meta));
|
|
68
|
+
return {
|
|
69
|
+
parquetKey,
|
|
70
|
+
rowCount: records.length
|
|
71
|
+
};
|
|
72
|
+
},
|
|
73
|
+
async loadMeta(ctx) {
|
|
74
|
+
const bytes = await readOptional(dataSource, queryDimMetaKey(ctx));
|
|
75
|
+
if (!bytes) return null;
|
|
76
|
+
return JSON.parse(new TextDecoder().decode(bytes));
|
|
77
|
+
},
|
|
78
|
+
async loadRecords(ctx) {
|
|
79
|
+
const bytes = await readOptional(dataSource, queryDimParquetKey(ctx));
|
|
80
|
+
if (!bytes) return [];
|
|
81
|
+
return (await decodeParquetToRows(bytes)).map((r) => ({
|
|
82
|
+
query: String(r.query),
|
|
83
|
+
query_canonical: String(r.query_canonical),
|
|
84
|
+
intent_code: Number(r.intent_code),
|
|
85
|
+
normalizer_version: Number(r.normalizer_version),
|
|
86
|
+
intent_version: Number(r.intent_version)
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
export { buildQueryDimRecords, createQueryDimStore };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { DefineReportOptions, DefinedReport, ReportParams } from "./types.mjs";
|
|
2
|
+
/**
|
|
3
|
+
* Mirror of `defineAnalyzer`. Pure factory: validates required fields,
|
|
4
|
+
* fills default `argsSpec`. No runtime behaviour — `runReport` consumes
|
|
5
|
+
* the returned object.
|
|
6
|
+
*/
|
|
7
|
+
declare function defineReport<P extends ReportParams = ReportParams>(opts: DefineReportOptions<P>): DefinedReport<P>;
|
|
8
|
+
export { defineReport };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
function defineReport(opts) {
|
|
2
|
+
if (!opts.id) throw new Error("defineReport: id is required");
|
|
3
|
+
if (!opts.plan) throw new Error(`defineReport(${opts.id}): plan is required`);
|
|
4
|
+
if (!opts.reduce) throw new Error(`defineReport(${opts.id}): reduce is required`);
|
|
5
|
+
return {
|
|
6
|
+
id: opts.id,
|
|
7
|
+
description: opts.description,
|
|
8
|
+
defaultPeriod: opts.defaultPeriod,
|
|
9
|
+
defaultComparison: opts.defaultComparison,
|
|
10
|
+
argsSpec: opts.argsSpec ?? {},
|
|
11
|
+
plan: opts.plan,
|
|
12
|
+
reduce: opts.reduce
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export { defineReport };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ResolvedWindow } from "../period/index.mjs";
|
|
2
|
+
import { ReportParams } from "./types.mjs";
|
|
3
|
+
interface InputHashSeeds {
|
|
4
|
+
id: string;
|
|
5
|
+
site: string;
|
|
6
|
+
window: ResolvedWindow;
|
|
7
|
+
params: ReportParams;
|
|
8
|
+
registryVersion: string;
|
|
9
|
+
}
|
|
10
|
+
/** Stable JSON: sorts object keys at every level. Arrays preserve order. */
|
|
11
|
+
declare function canonicalize(value: unknown): unknown;
|
|
12
|
+
declare function computeInputHash(seeds: InputHashSeeds): Promise<string>;
|
|
13
|
+
export { InputHashSeeds, canonicalize, computeInputHash };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
function canonicalize(value) {
|
|
2
|
+
if (value == null || typeof value !== "object") return value;
|
|
3
|
+
if (Array.isArray(value)) return value.map(canonicalize);
|
|
4
|
+
const out = {};
|
|
5
|
+
for (const k of Object.keys(value).sort()) out[k] = canonicalize(value[k]);
|
|
6
|
+
return out;
|
|
7
|
+
}
|
|
8
|
+
async function computeInputHash(seeds) {
|
|
9
|
+
const payload = JSON.stringify(canonicalize({
|
|
10
|
+
id: seeds.id,
|
|
11
|
+
site: seeds.site,
|
|
12
|
+
window: {
|
|
13
|
+
start: seeds.window.start,
|
|
14
|
+
end: seeds.window.end,
|
|
15
|
+
comparison: seeds.window.comparison ?? null
|
|
16
|
+
},
|
|
17
|
+
params: seeds.params,
|
|
18
|
+
registryVersion: seeds.registryVersion
|
|
19
|
+
}));
|
|
20
|
+
const bytes = new TextEncoder().encode(payload);
|
|
21
|
+
return bufferToHex(await globalThis.crypto.subtle.digest("SHA-256", bytes));
|
|
22
|
+
}
|
|
23
|
+
function bufferToHex(buffer) {
|
|
24
|
+
const bytes = new Uint8Array(buffer);
|
|
25
|
+
let out = "";
|
|
26
|
+
for (let i = 0; i < bytes.length; i++) out += bytes[i].toString(16).padStart(2, "0");
|
|
27
|
+
return out;
|
|
28
|
+
}
|
|
29
|
+
export { canonicalize, computeInputHash };
|