@loaders.gl/parquet 4.5.3 → 5.0.0-alpha.10

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.
Files changed (790) hide show
  1. package/LICENSE +14 -3
  2. package/dist/bundled.d.ts +9 -0
  3. package/dist/bundled.d.ts.map +1 -0
  4. package/dist/bundled.js +10 -0
  5. package/dist/bundled.js.map +1 -0
  6. package/dist/delta-format.d.ts +9 -0
  7. package/dist/delta-format.d.ts.map +1 -0
  8. package/dist/delta-format.js +12 -0
  9. package/dist/delta-format.js.map +1 -0
  10. package/dist/delta-source-loader-types.d.ts +27 -0
  11. package/dist/delta-source-loader-types.d.ts.map +1 -0
  12. package/dist/delta-source-loader-types.js +28 -0
  13. package/dist/delta-source-loader-types.js.map +1 -0
  14. package/dist/delta-source.d.ts +48 -0
  15. package/dist/delta-source.d.ts.map +1 -0
  16. package/dist/delta-source.js +222 -0
  17. package/dist/delta-source.js.map +1 -0
  18. package/dist/delta-types.d.ts +38 -0
  19. package/dist/delta-types.d.ts.map +1 -0
  20. package/dist/delta-types.js +5 -0
  21. package/dist/delta-types.js.map +1 -0
  22. package/dist/geoparquet-loader-with-parser.d.ts +33 -0
  23. package/dist/geoparquet-loader-with-parser.d.ts.map +1 -0
  24. package/dist/geoparquet-loader-with-parser.js +52 -0
  25. package/dist/geoparquet-loader-with-parser.js.map +1 -0
  26. package/dist/geoparquet-loader.d.ts +59 -0
  27. package/dist/geoparquet-loader.d.ts.map +1 -0
  28. package/dist/geoparquet-loader.js +30 -0
  29. package/dist/geoparquet-loader.js.map +1 -0
  30. package/dist/iceberg-rest-catalog.d.ts +49 -0
  31. package/dist/iceberg-rest-catalog.d.ts.map +1 -0
  32. package/dist/iceberg-rest-catalog.js +78 -0
  33. package/dist/iceberg-rest-catalog.js.map +1 -0
  34. package/dist/iceberg-table-source.d.ts +63 -0
  35. package/dist/iceberg-table-source.d.ts.map +1 -0
  36. package/dist/iceberg-table-source.js +797 -0
  37. package/dist/iceberg-table-source.js.map +1 -0
  38. package/dist/iceberg-types.d.ts +150 -0
  39. package/dist/iceberg-types.d.ts.map +1 -0
  40. package/dist/iceberg-types.js +5 -0
  41. package/dist/iceberg-types.js.map +1 -0
  42. package/dist/index.cjs +41568 -6781
  43. package/dist/index.cjs.map +3 -4
  44. package/dist/index.d.ts +15 -9
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +11 -12
  47. package/dist/index.js.map +1 -1
  48. package/dist/lib/arrow/convert-columns-to-row-group.js +3 -0
  49. package/dist/lib/arrow/convert-columns-to-row-group.js.map +1 -1
  50. package/dist/lib/arrow/convert-schema-from-parquet.d.ts +3 -1
  51. package/dist/lib/arrow/convert-schema-from-parquet.d.ts.map +1 -1
  52. package/dist/lib/arrow/convert-schema-from-parquet.js +164 -29
  53. package/dist/lib/arrow/convert-schema-from-parquet.js.map +1 -1
  54. package/dist/lib/arrow/convert-schema-to-parquet.d.ts.map +1 -1
  55. package/dist/lib/arrow/convert-schema-to-parquet.js +16 -7
  56. package/dist/lib/arrow/convert-schema-to-parquet.js.map +1 -1
  57. package/dist/lib/arrow/create-nested-arrow-vector.d.ts +8 -0
  58. package/dist/lib/arrow/create-nested-arrow-vector.d.ts.map +1 -0
  59. package/dist/lib/arrow/create-nested-arrow-vector.js +485 -0
  60. package/dist/lib/arrow/create-nested-arrow-vector.js.map +1 -0
  61. package/dist/lib/constants.d.ts +0 -1
  62. package/dist/lib/constants.d.ts.map +1 -1
  63. package/dist/lib/constants.js +1 -2
  64. package/dist/lib/constants.js.map +1 -1
  65. package/dist/lib/encoders/encode-arrow-to-parquet.d.ts +2 -2
  66. package/dist/lib/encoders/encode-arrow-to-parquet.d.ts.map +1 -1
  67. package/dist/lib/encoders/encode-arrow-to-parquet.js +3 -10
  68. package/dist/lib/encoders/encode-arrow-to-parquet.js.map +1 -1
  69. package/dist/lib/encoders/encode-table-to-parquet-js.d.ts +5 -0
  70. package/dist/lib/encoders/encode-table-to-parquet-js.d.ts.map +1 -0
  71. package/dist/lib/encoders/encode-table-to-parquet-js.js +394 -0
  72. package/dist/lib/encoders/encode-table-to-parquet-js.js.map +1 -0
  73. package/dist/lib/geo/geoparquet-covering.d.ts +19 -0
  74. package/dist/lib/geo/geoparquet-covering.d.ts.map +1 -0
  75. package/dist/lib/geo/geoparquet-covering.js +137 -0
  76. package/dist/lib/geo/geoparquet-covering.js.map +1 -0
  77. package/dist/lib/geo/geospatial-metadata.d.ts +67 -0
  78. package/dist/lib/geo/geospatial-metadata.d.ts.map +1 -0
  79. package/dist/lib/geo/geospatial-metadata.js +412 -0
  80. package/dist/lib/geo/geospatial-metadata.js.map +1 -0
  81. package/dist/lib/parquet-bloom-filter-planner.d.ts +16 -0
  82. package/dist/lib/parquet-bloom-filter-planner.d.ts.map +1 -0
  83. package/dist/lib/parquet-bloom-filter-planner.js +57 -0
  84. package/dist/lib/parquet-bloom-filter-planner.js.map +1 -0
  85. package/dist/lib/parquet-bloom-filter.d.ts +30 -0
  86. package/dist/lib/parquet-bloom-filter.d.ts.map +1 -0
  87. package/dist/lib/parquet-bloom-filter.js +289 -0
  88. package/dist/lib/parquet-bloom-filter.js.map +1 -0
  89. package/dist/lib/parquet-encryption.d.ts +80 -0
  90. package/dist/lib/parquet-encryption.d.ts.map +1 -0
  91. package/dist/lib/parquet-encryption.js +190 -0
  92. package/dist/lib/parquet-encryption.js.map +1 -0
  93. package/dist/lib/parquet-page-index.d.ts +91 -0
  94. package/dist/lib/parquet-page-index.d.ts.map +1 -0
  95. package/dist/lib/parquet-page-index.js +463 -0
  96. package/dist/lib/parquet-page-index.js.map +1 -0
  97. package/dist/lib/parquet-predicate.d.ts +21 -0
  98. package/dist/lib/parquet-predicate.d.ts.map +1 -0
  99. package/dist/lib/parquet-predicate.js +328 -0
  100. package/dist/lib/parquet-predicate.js.map +1 -0
  101. package/dist/lib/parquet-source-worker-client.d.ts +6 -0
  102. package/dist/lib/parquet-source-worker-client.d.ts.map +1 -0
  103. package/dist/lib/parquet-source-worker-client.js +24 -0
  104. package/dist/lib/parquet-source-worker-client.js.map +1 -0
  105. package/dist/lib/parquet-source-worker-decoder.d.ts +7 -0
  106. package/dist/lib/parquet-source-worker-decoder.d.ts.map +1 -0
  107. package/dist/lib/parquet-source-worker-decoder.js +181 -0
  108. package/dist/lib/parquet-source-worker-decoder.js.map +1 -0
  109. package/dist/lib/parquet-source-worker-file.d.ts +24 -0
  110. package/dist/lib/parquet-source-worker-file.d.ts.map +1 -0
  111. package/dist/lib/parquet-source-worker-file.js +40 -0
  112. package/dist/lib/parquet-source-worker-file.js.map +1 -0
  113. package/dist/lib/parquet-source-worker-types.d.ts +121 -0
  114. package/dist/lib/parquet-source-worker-types.d.ts.map +1 -0
  115. package/dist/lib/parquet-source-worker-types.js +5 -0
  116. package/dist/lib/parquet-source-worker-types.js.map +1 -0
  117. package/dist/lib/parquet-worker-transport.d.ts +8 -0
  118. package/dist/lib/parquet-worker-transport.d.ts.map +1 -0
  119. package/dist/lib/parquet-worker-transport.js +40 -0
  120. package/dist/lib/parquet-worker-transport.js.map +1 -0
  121. package/dist/lib/parsers/convert-parquet-tables.d.ts +16 -0
  122. package/dist/lib/parsers/convert-parquet-tables.d.ts.map +1 -0
  123. package/dist/lib/parsers/convert-parquet-tables.js +30 -0
  124. package/dist/lib/parsers/convert-parquet-tables.js.map +1 -0
  125. package/dist/lib/parsers/get-parquet-schema.d.ts.map +1 -1
  126. package/dist/lib/parsers/get-parquet-schema.js +6 -2
  127. package/dist/lib/parsers/get-parquet-schema.js.map +1 -1
  128. package/dist/lib/parsers/parse-geoparquet-to-geojson.d.ts +4 -4
  129. package/dist/lib/parsers/parse-geoparquet-to-geojson.d.ts.map +1 -1
  130. package/dist/lib/parsers/parse-geoparquet-to-geojson.js +19 -6
  131. package/dist/lib/parsers/parse-geoparquet-to-geojson.js.map +1 -1
  132. package/dist/lib/parsers/parse-parquet-tables.d.ts +37 -0
  133. package/dist/lib/parsers/parse-parquet-tables.d.ts.map +1 -0
  134. package/dist/lib/parsers/parse-parquet-tables.js +50 -0
  135. package/dist/lib/parsers/parse-parquet-tables.js.map +1 -0
  136. package/dist/lib/parsers/parse-parquet-to-arrow-js.d.ts +19 -0
  137. package/dist/lib/parsers/parse-parquet-to-arrow-js.d.ts.map +1 -0
  138. package/dist/lib/parsers/parse-parquet-to-arrow-js.js +921 -0
  139. package/dist/lib/parsers/parse-parquet-to-arrow-js.js.map +1 -0
  140. package/dist/lib/parsers/parse-parquet-to-arrow.d.ts +7 -7
  141. package/dist/lib/parsers/parse-parquet-to-arrow.d.ts.map +1 -1
  142. package/dist/lib/parsers/parse-parquet-to-arrow.js +45 -32
  143. package/dist/lib/parsers/parse-parquet-to-arrow.js.map +1 -1
  144. package/dist/lib/parsers/parse-parquet-to-columns.d.ts +3 -3
  145. package/dist/lib/parsers/parse-parquet-to-columns.d.ts.map +1 -1
  146. package/dist/lib/parsers/parse-parquet-to-columns.js +4 -5
  147. package/dist/lib/parsers/parse-parquet-to-columns.js.map +1 -1
  148. package/dist/lib/parsers/parse-parquet-to-json.d.ts +3 -3
  149. package/dist/lib/parsers/parse-parquet-to-json.d.ts.map +1 -1
  150. package/dist/lib/parsers/parse-parquet-to-json.js +95 -28
  151. package/dist/lib/parsers/parse-parquet-to-json.js.map +1 -1
  152. package/dist/lib/slice-parquet-batch.d.ts +9 -0
  153. package/dist/lib/slice-parquet-batch.d.ts.map +1 -0
  154. package/dist/lib/slice-parquet-batch.js +28 -0
  155. package/dist/lib/slice-parquet-batch.js.map +1 -0
  156. package/dist/lib/sources/parquet-range-file.d.ts +80 -0
  157. package/dist/lib/sources/parquet-range-file.d.ts.map +1 -0
  158. package/dist/lib/sources/parquet-range-file.js +267 -0
  159. package/dist/lib/sources/parquet-range-file.js.map +1 -0
  160. package/dist/lib/sources/single-batch-queue.d.ts +24 -0
  161. package/dist/lib/sources/single-batch-queue.d.ts.map +1 -0
  162. package/dist/lib/sources/single-batch-queue.js +91 -0
  163. package/dist/lib/sources/single-batch-queue.js.map +1 -0
  164. package/dist/lib/utils/load-wasm-node.d.ts +3 -0
  165. package/dist/lib/utils/load-wasm-node.d.ts.map +1 -0
  166. package/dist/lib/utils/load-wasm-node.js +23 -0
  167. package/dist/lib/utils/load-wasm-node.js.map +1 -0
  168. package/dist/lib/utils/load-wasm.d.ts +2 -2
  169. package/dist/lib/utils/load-wasm.d.ts.map +1 -1
  170. package/dist/lib/utils/load-wasm.js +28 -12
  171. package/dist/lib/utils/load-wasm.js.map +1 -1
  172. package/dist/lib/utils/make-stream-iterator.d.ts +2 -0
  173. package/dist/lib/utils/make-stream-iterator.d.ts.map +1 -1
  174. package/dist/lib/utils/make-stream-iterator.js +123 -14
  175. package/dist/lib/utils/make-stream-iterator.js.map +1 -1
  176. package/dist/lib/utils/normalize-parquet-options.d.ts +5 -0
  177. package/dist/lib/utils/normalize-parquet-options.d.ts.map +1 -0
  178. package/dist/lib/utils/normalize-parquet-options.js +25 -0
  179. package/dist/lib/utils/normalize-parquet-options.js.map +1 -0
  180. package/dist/parquet-dataset-source.cjs +38974 -0
  181. package/dist/parquet-dataset-source.cjs.map +6 -0
  182. package/dist/parquet-dataset-source.d.ts +81 -0
  183. package/dist/parquet-dataset-source.d.ts.map +1 -0
  184. package/dist/parquet-dataset-source.js +602 -0
  185. package/dist/parquet-dataset-source.js.map +1 -0
  186. package/dist/parquet-encoded-page-types.d.ts +108 -0
  187. package/dist/parquet-encoded-page-types.d.ts.map +1 -0
  188. package/dist/parquet-encoded-page-types.js +5 -0
  189. package/dist/parquet-encoded-page-types.js.map +1 -0
  190. package/dist/parquet-format.d.ts +2 -0
  191. package/dist/parquet-format.d.ts.map +1 -1
  192. package/dist/parquet-format.js +2 -0
  193. package/dist/parquet-format.js.map +1 -1
  194. package/dist/parquet-js-loader-types.d.ts +59 -0
  195. package/dist/parquet-js-loader-types.d.ts.map +1 -0
  196. package/dist/parquet-js-loader-types.js +34 -0
  197. package/dist/parquet-js-loader-types.js.map +1 -0
  198. package/dist/parquet-js-loader.d.ts +18 -22
  199. package/dist/parquet-js-loader.d.ts.map +1 -1
  200. package/dist/parquet-js-loader.js +53 -14
  201. package/dist/parquet-js-loader.js.map +1 -1
  202. package/dist/parquet-js-writer.d.ts +65 -0
  203. package/dist/parquet-js-writer.d.ts.map +1 -0
  204. package/dist/parquet-js-writer.js +28 -0
  205. package/dist/parquet-js-writer.js.map +1 -0
  206. package/dist/parquet-loader-base.d.ts +25 -0
  207. package/dist/parquet-loader-base.d.ts.map +1 -0
  208. package/dist/parquet-loader-base.js +23 -0
  209. package/dist/parquet-loader-base.js.map +1 -0
  210. package/dist/parquet-loader-options.d.ts +55 -0
  211. package/dist/parquet-loader-options.d.ts.map +1 -0
  212. package/dist/parquet-loader-options.js +10 -0
  213. package/dist/parquet-loader-options.js.map +1 -0
  214. package/dist/parquet-loader-types.d.ts +61 -0
  215. package/dist/parquet-loader-types.d.ts.map +1 -0
  216. package/dist/parquet-loader-types.js +17 -0
  217. package/dist/parquet-loader-types.js.map +1 -0
  218. package/dist/parquet-loader.d.ts +42 -0
  219. package/dist/parquet-loader.d.ts.map +1 -0
  220. package/dist/parquet-loader.js +68 -0
  221. package/dist/parquet-loader.js.map +1 -0
  222. package/dist/parquet-source-capabilities.d.ts +43 -0
  223. package/dist/parquet-source-capabilities.d.ts.map +1 -0
  224. package/dist/parquet-source-capabilities.js +32 -0
  225. package/dist/parquet-source-capabilities.js.map +1 -0
  226. package/dist/parquet-source-loader-types.d.ts +82 -0
  227. package/dist/parquet-source-loader-types.d.ts.map +1 -0
  228. package/dist/parquet-source-loader-types.js +84 -0
  229. package/dist/parquet-source-loader-types.js.map +1 -0
  230. package/dist/parquet-source-loader.cjs +38261 -0
  231. package/dist/parquet-source-loader.cjs.map +6 -0
  232. package/dist/parquet-source-loader.d.ts +167 -0
  233. package/dist/parquet-source-loader.d.ts.map +1 -0
  234. package/dist/parquet-source-loader.js +1438 -0
  235. package/dist/parquet-source-loader.js.map +1 -0
  236. package/dist/parquet-source-types.d.ts +534 -0
  237. package/dist/parquet-source-types.d.ts.map +1 -0
  238. package/dist/parquet-source-types.js +5 -0
  239. package/dist/parquet-source-types.js.map +1 -0
  240. package/dist/parquet-source-worker-factory.d.ts +4 -0
  241. package/dist/parquet-source-worker-factory.d.ts.map +1 -0
  242. package/dist/parquet-source-worker-factory.js +6 -0
  243. package/dist/parquet-source-worker-factory.js.map +1 -0
  244. package/dist/parquet-source-worker-url.d.ts +3 -0
  245. package/dist/parquet-source-worker-url.d.ts.map +1 -0
  246. package/dist/parquet-source-worker-url.js +22 -0
  247. package/dist/parquet-source-worker-url.js.map +1 -0
  248. package/dist/parquet-source-worker.js +38871 -0
  249. package/dist/parquet-source-worker.js.map +7 -0
  250. package/dist/parquet-worker-node.cjs +78507 -0
  251. package/dist/parquet-worker-node.cjs.map +7 -0
  252. package/dist/parquet-worker-url.d.ts +3 -0
  253. package/dist/parquet-worker-url.d.ts.map +1 -0
  254. package/dist/parquet-worker-url.js +19 -0
  255. package/dist/parquet-worker-url.js.map +1 -0
  256. package/dist/parquet-worker.js +20094 -0
  257. package/dist/parquet-worker.js.map +7 -0
  258. package/dist/parquet-writer.d.ts +10 -0
  259. package/dist/parquet-writer.d.ts.map +1 -0
  260. package/dist/parquet-writer.js +27 -0
  261. package/dist/parquet-writer.js.map +1 -0
  262. package/dist/parquet_wasm_bg.wasm +0 -0
  263. package/dist/parquetjs/codecs/byte-stream-split.d.ts +9 -0
  264. package/dist/parquetjs/codecs/byte-stream-split.d.ts.map +1 -0
  265. package/dist/parquetjs/codecs/byte-stream-split.js +159 -0
  266. package/dist/parquetjs/codecs/byte-stream-split.js.map +1 -0
  267. package/dist/parquetjs/codecs/declare.d.ts +35 -3
  268. package/dist/parquetjs/codecs/declare.d.ts.map +1 -1
  269. package/dist/parquetjs/codecs/declare.js +17 -1
  270. package/dist/parquetjs/codecs/declare.js.map +1 -1
  271. package/dist/parquetjs/codecs/delta.d.ts +17 -0
  272. package/dist/parquetjs/codecs/delta.d.ts.map +1 -0
  273. package/dist/parquetjs/codecs/delta.js +788 -0
  274. package/dist/parquetjs/codecs/delta.js.map +1 -0
  275. package/dist/parquetjs/codecs/dictionary.d.ts +5 -2
  276. package/dist/parquetjs/codecs/dictionary.d.ts.map +1 -1
  277. package/dist/parquetjs/codecs/dictionary.js +16 -4
  278. package/dist/parquetjs/codecs/dictionary.js.map +1 -1
  279. package/dist/parquetjs/codecs/index.d.ts.map +1 -1
  280. package/dist/parquetjs/codecs/index.js +22 -0
  281. package/dist/parquetjs/codecs/index.js.map +1 -1
  282. package/dist/parquetjs/codecs/plain.d.ts +3 -3
  283. package/dist/parquetjs/codecs/plain.d.ts.map +1 -1
  284. package/dist/parquetjs/codecs/plain.js +231 -78
  285. package/dist/parquetjs/codecs/plain.js.map +1 -1
  286. package/dist/parquetjs/codecs/rle.d.ts +7 -3
  287. package/dist/parquetjs/codecs/rle.d.ts.map +1 -1
  288. package/dist/parquetjs/codecs/rle.js +613 -69
  289. package/dist/parquetjs/codecs/rle.js.map +1 -1
  290. package/dist/parquetjs/compression.d.ts +16 -8
  291. package/dist/parquetjs/compression.d.ts.map +1 -1
  292. package/dist/parquetjs/compression.js +114 -141
  293. package/dist/parquetjs/compression.js.map +1 -1
  294. package/dist/parquetjs/encoder/dictionary-planner.d.ts +17 -0
  295. package/dist/parquetjs/encoder/dictionary-planner.d.ts.map +1 -0
  296. package/dist/parquetjs/encoder/dictionary-planner.js +67 -0
  297. package/dist/parquetjs/encoder/dictionary-planner.js.map +1 -0
  298. package/dist/parquetjs/encoder/page-planner.d.ts +11 -0
  299. package/dist/parquetjs/encoder/page-planner.d.ts.map +1 -0
  300. package/dist/parquetjs/encoder/page-planner.js +60 -0
  301. package/dist/parquetjs/encoder/page-planner.js.map +1 -0
  302. package/dist/parquetjs/encoder/parquet-encoder.d.ts +54 -5
  303. package/dist/parquetjs/encoder/parquet-encoder.d.ts.map +1 -1
  304. package/dist/parquetjs/encoder/parquet-encoder.js +930 -66
  305. package/dist/parquetjs/encoder/parquet-encoder.js.map +1 -1
  306. package/dist/parquetjs/parquet-thrift/BoundingBox.d.ts +29 -0
  307. package/dist/parquetjs/parquet-thrift/BoundingBox.d.ts.map +1 -0
  308. package/dist/parquetjs/parquet-thrift/BoundingBox.js +85 -0
  309. package/dist/parquetjs/parquet-thrift/BoundingBox.js.map +1 -0
  310. package/dist/parquetjs/parquet-thrift/BsonType.d.ts +1 -1
  311. package/dist/parquetjs/parquet-thrift/BsonType.d.ts.map +1 -1
  312. package/dist/parquetjs/parquet-thrift/BsonType.js +1 -1
  313. package/dist/parquetjs/parquet-thrift/BsonType.js.map +1 -1
  314. package/dist/parquetjs/parquet-thrift/ColumnChunk.d.ts +7 -2
  315. package/dist/parquetjs/parquet-thrift/ColumnChunk.d.ts.map +1 -1
  316. package/dist/parquetjs/parquet-thrift/ColumnChunk.js +37 -2
  317. package/dist/parquetjs/parquet-thrift/ColumnChunk.js.map +1 -1
  318. package/dist/parquetjs/parquet-thrift/ColumnCryptoMetaData.d.ts +35 -0
  319. package/dist/parquetjs/parquet-thrift/ColumnCryptoMetaData.d.ts.map +1 -0
  320. package/dist/parquetjs/parquet-thrift/ColumnCryptoMetaData.js +135 -0
  321. package/dist/parquetjs/parquet-thrift/ColumnCryptoMetaData.js.map +1 -0
  322. package/dist/parquetjs/parquet-thrift/ColumnIndex.d.ts +6 -6
  323. package/dist/parquetjs/parquet-thrift/ColumnIndex.d.ts.map +1 -1
  324. package/dist/parquetjs/parquet-thrift/ColumnIndex.js +3 -3
  325. package/dist/parquetjs/parquet-thrift/ColumnIndex.js.map +1 -1
  326. package/dist/parquetjs/parquet-thrift/ColumnMetaData.d.ts +12 -2
  327. package/dist/parquetjs/parquet-thrift/ColumnMetaData.d.ts.map +1 -1
  328. package/dist/parquetjs/parquet-thrift/ColumnMetaData.js +75 -2
  329. package/dist/parquetjs/parquet-thrift/ColumnMetaData.js.map +1 -1
  330. package/dist/parquetjs/parquet-thrift/ColumnOrder.d.ts +1 -1
  331. package/dist/parquetjs/parquet-thrift/ColumnOrder.d.ts.map +1 -1
  332. package/dist/parquetjs/parquet-thrift/ColumnOrder.js +1 -1
  333. package/dist/parquetjs/parquet-thrift/ColumnOrder.js.map +1 -1
  334. package/dist/parquetjs/parquet-thrift/DataPageHeader.d.ts +1 -1
  335. package/dist/parquetjs/parquet-thrift/DataPageHeader.d.ts.map +1 -1
  336. package/dist/parquetjs/parquet-thrift/DataPageHeader.js +1 -1
  337. package/dist/parquetjs/parquet-thrift/DataPageHeader.js.map +1 -1
  338. package/dist/parquetjs/parquet-thrift/DataPageHeaderV2.d.ts +1 -1
  339. package/dist/parquetjs/parquet-thrift/DataPageHeaderV2.d.ts.map +1 -1
  340. package/dist/parquetjs/parquet-thrift/DataPageHeaderV2.js +1 -1
  341. package/dist/parquetjs/parquet-thrift/DataPageHeaderV2.js.map +1 -1
  342. package/dist/parquetjs/parquet-thrift/DateType.d.ts +1 -1
  343. package/dist/parquetjs/parquet-thrift/DateType.d.ts.map +1 -1
  344. package/dist/parquetjs/parquet-thrift/DateType.js +1 -1
  345. package/dist/parquetjs/parquet-thrift/DateType.js.map +1 -1
  346. package/dist/parquetjs/parquet-thrift/DecimalType.d.ts +1 -1
  347. package/dist/parquetjs/parquet-thrift/DecimalType.d.ts.map +1 -1
  348. package/dist/parquetjs/parquet-thrift/DecimalType.js +1 -1
  349. package/dist/parquetjs/parquet-thrift/DecimalType.js.map +1 -1
  350. package/dist/parquetjs/parquet-thrift/DictionaryPageHeader.d.ts +1 -1
  351. package/dist/parquetjs/parquet-thrift/DictionaryPageHeader.d.ts.map +1 -1
  352. package/dist/parquetjs/parquet-thrift/DictionaryPageHeader.js +1 -1
  353. package/dist/parquetjs/parquet-thrift/DictionaryPageHeader.js.map +1 -1
  354. package/dist/parquetjs/parquet-thrift/EdgeInterpolationAlgorithm.d.ts +8 -0
  355. package/dist/parquetjs/parquet-thrift/EdgeInterpolationAlgorithm.d.ts.map +1 -0
  356. package/dist/parquetjs/parquet-thrift/EdgeInterpolationAlgorithm.js +14 -0
  357. package/dist/parquetjs/parquet-thrift/EdgeInterpolationAlgorithm.js.map +1 -0
  358. package/dist/parquetjs/parquet-thrift/Encoding.d.ts +2 -1
  359. package/dist/parquetjs/parquet-thrift/Encoding.d.ts.map +1 -1
  360. package/dist/parquetjs/parquet-thrift/Encoding.js +1 -0
  361. package/dist/parquetjs/parquet-thrift/Encoding.js.map +1 -1
  362. package/dist/parquetjs/parquet-thrift/EncryptionAlgorithm.d.ts +22 -0
  363. package/dist/parquetjs/parquet-thrift/EncryptionAlgorithm.d.ts.map +1 -0
  364. package/dist/parquetjs/parquet-thrift/EncryptionAlgorithm.js +111 -0
  365. package/dist/parquetjs/parquet-thrift/EncryptionAlgorithm.js.map +1 -0
  366. package/dist/parquetjs/parquet-thrift/EnumType.d.ts +1 -1
  367. package/dist/parquetjs/parquet-thrift/EnumType.d.ts.map +1 -1
  368. package/dist/parquetjs/parquet-thrift/EnumType.js +1 -1
  369. package/dist/parquetjs/parquet-thrift/EnumType.js.map +1 -1
  370. package/dist/parquetjs/parquet-thrift/FileCryptoMetaData.d.ts +16 -0
  371. package/dist/parquetjs/parquet-thrift/FileCryptoMetaData.d.ts.map +1 -0
  372. package/dist/parquetjs/parquet-thrift/FileCryptoMetaData.js +57 -0
  373. package/dist/parquetjs/parquet-thrift/FileCryptoMetaData.js.map +1 -0
  374. package/dist/parquetjs/parquet-thrift/FileMetaData.d.ts +7 -2
  375. package/dist/parquetjs/parquet-thrift/FileMetaData.d.ts.map +1 -1
  376. package/dist/parquetjs/parquet-thrift/FileMetaData.js +37 -2
  377. package/dist/parquetjs/parquet-thrift/FileMetaData.js.map +1 -1
  378. package/dist/parquetjs/parquet-thrift/Float16Type.d.ts +9 -0
  379. package/dist/parquetjs/parquet-thrift/Float16Type.d.ts.map +1 -0
  380. package/dist/parquetjs/parquet-thrift/Float16Type.js +27 -0
  381. package/dist/parquetjs/parquet-thrift/Float16Type.js.map +1 -0
  382. package/dist/parquetjs/parquet-thrift/GeographyType.d.ts +14 -0
  383. package/dist/parquetjs/parquet-thrift/GeographyType.d.ts.map +1 -0
  384. package/dist/parquetjs/parquet-thrift/GeographyType.js +51 -0
  385. package/dist/parquetjs/parquet-thrift/GeographyType.js.map +1 -0
  386. package/dist/parquetjs/parquet-thrift/GeometryType.d.ts +11 -0
  387. package/dist/parquetjs/parquet-thrift/GeometryType.d.ts.map +1 -0
  388. package/dist/parquetjs/parquet-thrift/GeometryType.js +41 -0
  389. package/dist/parquetjs/parquet-thrift/GeometryType.js.map +1 -0
  390. package/dist/parquetjs/parquet-thrift/GeospatialStatistics.d.ts +18 -0
  391. package/dist/parquetjs/parquet-thrift/GeospatialStatistics.d.ts.map +1 -0
  392. package/dist/parquetjs/parquet-thrift/GeospatialStatistics.js +62 -0
  393. package/dist/parquetjs/parquet-thrift/GeospatialStatistics.js.map +1 -0
  394. package/dist/parquetjs/parquet-thrift/IndexPageHeader.d.ts +1 -1
  395. package/dist/parquetjs/parquet-thrift/IndexPageHeader.d.ts.map +1 -1
  396. package/dist/parquetjs/parquet-thrift/IndexPageHeader.js +1 -1
  397. package/dist/parquetjs/parquet-thrift/IndexPageHeader.js.map +1 -1
  398. package/dist/parquetjs/parquet-thrift/IntType.d.ts +1 -1
  399. package/dist/parquetjs/parquet-thrift/IntType.d.ts.map +1 -1
  400. package/dist/parquetjs/parquet-thrift/IntType.js +1 -1
  401. package/dist/parquetjs/parquet-thrift/IntType.js.map +1 -1
  402. package/dist/parquetjs/parquet-thrift/JsonType.d.ts +1 -1
  403. package/dist/parquetjs/parquet-thrift/JsonType.d.ts.map +1 -1
  404. package/dist/parquetjs/parquet-thrift/JsonType.js +1 -1
  405. package/dist/parquetjs/parquet-thrift/JsonType.js.map +1 -1
  406. package/dist/parquetjs/parquet-thrift/KeyValue.d.ts +1 -1
  407. package/dist/parquetjs/parquet-thrift/KeyValue.d.ts.map +1 -1
  408. package/dist/parquetjs/parquet-thrift/KeyValue.js +1 -1
  409. package/dist/parquetjs/parquet-thrift/KeyValue.js.map +1 -1
  410. package/dist/parquetjs/parquet-thrift/ListType.d.ts +1 -1
  411. package/dist/parquetjs/parquet-thrift/ListType.d.ts.map +1 -1
  412. package/dist/parquetjs/parquet-thrift/ListType.js +1 -1
  413. package/dist/parquetjs/parquet-thrift/ListType.js.map +1 -1
  414. package/dist/parquetjs/parquet-thrift/LogicalType.d.ts +17 -1
  415. package/dist/parquetjs/parquet-thrift/LogicalType.d.ts.map +1 -1
  416. package/dist/parquetjs/parquet-thrift/LogicalType.js +97 -1
  417. package/dist/parquetjs/parquet-thrift/LogicalType.js.map +1 -1
  418. package/dist/parquetjs/parquet-thrift/MapType.d.ts +1 -1
  419. package/dist/parquetjs/parquet-thrift/MapType.d.ts.map +1 -1
  420. package/dist/parquetjs/parquet-thrift/MapType.js +1 -1
  421. package/dist/parquetjs/parquet-thrift/MapType.js.map +1 -1
  422. package/dist/parquetjs/parquet-thrift/MicroSeconds.d.ts +1 -1
  423. package/dist/parquetjs/parquet-thrift/MicroSeconds.d.ts.map +1 -1
  424. package/dist/parquetjs/parquet-thrift/MicroSeconds.js +1 -1
  425. package/dist/parquetjs/parquet-thrift/MicroSeconds.js.map +1 -1
  426. package/dist/parquetjs/parquet-thrift/MilliSeconds.d.ts +1 -1
  427. package/dist/parquetjs/parquet-thrift/MilliSeconds.d.ts.map +1 -1
  428. package/dist/parquetjs/parquet-thrift/MilliSeconds.js +1 -1
  429. package/dist/parquetjs/parquet-thrift/MilliSeconds.js.map +1 -1
  430. package/dist/parquetjs/parquet-thrift/NanoSeconds.d.ts +9 -0
  431. package/dist/parquetjs/parquet-thrift/NanoSeconds.d.ts.map +1 -0
  432. package/dist/parquetjs/parquet-thrift/NanoSeconds.js +27 -0
  433. package/dist/parquetjs/parquet-thrift/NanoSeconds.js.map +1 -0
  434. package/dist/parquetjs/parquet-thrift/NullType.d.ts +1 -1
  435. package/dist/parquetjs/parquet-thrift/NullType.d.ts.map +1 -1
  436. package/dist/parquetjs/parquet-thrift/NullType.js +1 -1
  437. package/dist/parquetjs/parquet-thrift/NullType.js.map +1 -1
  438. package/dist/parquetjs/parquet-thrift/OffsetIndex.d.ts +1 -1
  439. package/dist/parquetjs/parquet-thrift/OffsetIndex.d.ts.map +1 -1
  440. package/dist/parquetjs/parquet-thrift/OffsetIndex.js +1 -1
  441. package/dist/parquetjs/parquet-thrift/OffsetIndex.js.map +1 -1
  442. package/dist/parquetjs/parquet-thrift/PageEncodingStats.d.ts +1 -1
  443. package/dist/parquetjs/parquet-thrift/PageEncodingStats.d.ts.map +1 -1
  444. package/dist/parquetjs/parquet-thrift/PageEncodingStats.js +1 -1
  445. package/dist/parquetjs/parquet-thrift/PageEncodingStats.js.map +1 -1
  446. package/dist/parquetjs/parquet-thrift/PageHeader.d.ts +1 -1
  447. package/dist/parquetjs/parquet-thrift/PageHeader.d.ts.map +1 -1
  448. package/dist/parquetjs/parquet-thrift/PageHeader.js +1 -1
  449. package/dist/parquetjs/parquet-thrift/PageHeader.js.map +1 -1
  450. package/dist/parquetjs/parquet-thrift/PageLocation.d.ts +2 -2
  451. package/dist/parquetjs/parquet-thrift/PageLocation.d.ts.map +1 -1
  452. package/dist/parquetjs/parquet-thrift/PageLocation.js +2 -2
  453. package/dist/parquetjs/parquet-thrift/PageLocation.js.map +1 -1
  454. package/dist/parquetjs/parquet-thrift/RowGroup.d.ts +2 -2
  455. package/dist/parquetjs/parquet-thrift/RowGroup.d.ts.map +1 -1
  456. package/dist/parquetjs/parquet-thrift/RowGroup.js +2 -2
  457. package/dist/parquetjs/parquet-thrift/RowGroup.js.map +1 -1
  458. package/dist/parquetjs/parquet-thrift/SchemaElement.d.ts +1 -1
  459. package/dist/parquetjs/parquet-thrift/SchemaElement.d.ts.map +1 -1
  460. package/dist/parquetjs/parquet-thrift/SchemaElement.js +1 -1
  461. package/dist/parquetjs/parquet-thrift/SchemaElement.js.map +1 -1
  462. package/dist/parquetjs/parquet-thrift/SizeStatistics.d.ts +26 -0
  463. package/dist/parquetjs/parquet-thrift/SizeStatistics.d.ts.map +1 -0
  464. package/dist/parquetjs/parquet-thrift/SizeStatistics.js +85 -0
  465. package/dist/parquetjs/parquet-thrift/SizeStatistics.js.map +1 -0
  466. package/dist/parquetjs/parquet-thrift/SortingColumn.d.ts +1 -1
  467. package/dist/parquetjs/parquet-thrift/SortingColumn.d.ts.map +1 -1
  468. package/dist/parquetjs/parquet-thrift/SortingColumn.js +1 -1
  469. package/dist/parquetjs/parquet-thrift/SortingColumn.js.map +1 -1
  470. package/dist/parquetjs/parquet-thrift/Statistics.d.ts +14 -10
  471. package/dist/parquetjs/parquet-thrift/Statistics.d.ts.map +1 -1
  472. package/dist/parquetjs/parquet-thrift/Statistics.js +38 -2
  473. package/dist/parquetjs/parquet-thrift/Statistics.js.map +1 -1
  474. package/dist/parquetjs/parquet-thrift/StringType.d.ts +1 -1
  475. package/dist/parquetjs/parquet-thrift/StringType.d.ts.map +1 -1
  476. package/dist/parquetjs/parquet-thrift/StringType.js +1 -1
  477. package/dist/parquetjs/parquet-thrift/StringType.js.map +1 -1
  478. package/dist/parquetjs/parquet-thrift/TimeType.d.ts +1 -1
  479. package/dist/parquetjs/parquet-thrift/TimeType.d.ts.map +1 -1
  480. package/dist/parquetjs/parquet-thrift/TimeType.js +1 -1
  481. package/dist/parquetjs/parquet-thrift/TimeType.js.map +1 -1
  482. package/dist/parquetjs/parquet-thrift/TimeUnit.d.ts +5 -1
  483. package/dist/parquetjs/parquet-thrift/TimeUnit.d.ts.map +1 -1
  484. package/dist/parquetjs/parquet-thrift/TimeUnit.js +25 -1
  485. package/dist/parquetjs/parquet-thrift/TimeUnit.js.map +1 -1
  486. package/dist/parquetjs/parquet-thrift/TimestampType.d.ts +1 -1
  487. package/dist/parquetjs/parquet-thrift/TimestampType.d.ts.map +1 -1
  488. package/dist/parquetjs/parquet-thrift/TimestampType.js +1 -1
  489. package/dist/parquetjs/parquet-thrift/TimestampType.js.map +1 -1
  490. package/dist/parquetjs/parquet-thrift/TypeDefinedOrder.d.ts +1 -1
  491. package/dist/parquetjs/parquet-thrift/TypeDefinedOrder.d.ts.map +1 -1
  492. package/dist/parquetjs/parquet-thrift/TypeDefinedOrder.js +1 -1
  493. package/dist/parquetjs/parquet-thrift/TypeDefinedOrder.js.map +1 -1
  494. package/dist/parquetjs/parquet-thrift/UUIDType.d.ts +1 -1
  495. package/dist/parquetjs/parquet-thrift/UUIDType.d.ts.map +1 -1
  496. package/dist/parquetjs/parquet-thrift/UUIDType.js +1 -1
  497. package/dist/parquetjs/parquet-thrift/UUIDType.js.map +1 -1
  498. package/dist/parquetjs/parquet-thrift/VariantType.d.ts +11 -0
  499. package/dist/parquetjs/parquet-thrift/VariantType.d.ts.map +1 -0
  500. package/dist/parquetjs/parquet-thrift/VariantType.js +41 -0
  501. package/dist/parquetjs/parquet-thrift/VariantType.js.map +1 -0
  502. package/dist/parquetjs/parquet-thrift/index.d.ts +12 -2
  503. package/dist/parquetjs/parquet-thrift/index.d.ts.map +1 -1
  504. package/dist/parquetjs/parquet-thrift/index.js +12 -2
  505. package/dist/parquetjs/parquet-thrift/index.js.map +1 -1
  506. package/dist/parquetjs/parser/decoders.d.ts +23 -3
  507. package/dist/parquetjs/parser/decoders.d.ts.map +1 -1
  508. package/dist/parquetjs/parser/decoders.js +687 -119
  509. package/dist/parquetjs/parser/decoders.js.map +1 -1
  510. package/dist/parquetjs/parser/encoded-pages.d.ts +24 -0
  511. package/dist/parquetjs/parser/encoded-pages.d.ts.map +1 -0
  512. package/dist/parquetjs/parser/encoded-pages.js +206 -0
  513. package/dist/parquetjs/parser/encoded-pages.js.map +1 -0
  514. package/dist/parquetjs/parser/parquet-reader.d.ts +111 -10
  515. package/dist/parquetjs/parser/parquet-reader.d.ts.map +1 -1
  516. package/dist/parquetjs/parser/parquet-reader.js +836 -69
  517. package/dist/parquetjs/parser/parquet-reader.js.map +1 -1
  518. package/dist/parquetjs/schema/declare.d.ts +83 -10
  519. package/dist/parquetjs/schema/declare.d.ts.map +1 -1
  520. package/dist/parquetjs/schema/declare.js.map +1 -1
  521. package/dist/parquetjs/schema/schema.d.ts +3 -0
  522. package/dist/parquetjs/schema/schema.d.ts.map +1 -1
  523. package/dist/parquetjs/schema/schema.js +31 -3
  524. package/dist/parquetjs/schema/schema.js.map +1 -1
  525. package/dist/parquetjs/schema/shred.d.ts +2 -0
  526. package/dist/parquetjs/schema/shred.d.ts.map +1 -1
  527. package/dist/parquetjs/schema/shred.js +285 -29
  528. package/dist/parquetjs/schema/shred.js.map +1 -1
  529. package/dist/parquetjs/schema/types.d.ts.map +1 -1
  530. package/dist/parquetjs/schema/types.js +290 -71
  531. package/dist/parquetjs/schema/types.js.map +1 -1
  532. package/dist/parquetjs/schema/variant.d.ts +3 -0
  533. package/dist/parquetjs/schema/variant.d.ts.map +1 -0
  534. package/dist/parquetjs/schema/variant.js +248 -0
  535. package/dist/parquetjs/schema/variant.js.map +1 -0
  536. package/dist/parquetjs/utils/binary-utils.d.ts +41 -0
  537. package/dist/parquetjs/utils/binary-utils.d.ts.map +1 -0
  538. package/dist/parquetjs/utils/binary-utils.js +106 -0
  539. package/dist/parquetjs/utils/binary-utils.js.map +1 -0
  540. package/dist/parquetjs/utils/crc32.d.ts +3 -0
  541. package/dist/parquetjs/utils/crc32.d.ts.map +1 -0
  542. package/dist/parquetjs/utils/crc32.js +15 -0
  543. package/dist/parquetjs/utils/crc32.js.map +1 -0
  544. package/dist/parquetjs/utils/file-utils.d.ts +1 -1
  545. package/dist/parquetjs/utils/file-utils.d.ts.map +1 -1
  546. package/dist/parquetjs/utils/file-utils.js +3 -3
  547. package/dist/parquetjs/utils/file-utils.js.map +1 -1
  548. package/dist/parquetjs/utils/read-utils.d.ts +25 -7
  549. package/dist/parquetjs/utils/read-utils.d.ts.map +1 -1
  550. package/dist/parquetjs/utils/read-utils.js +66 -39
  551. package/dist/parquetjs/utils/read-utils.js.map +1 -1
  552. package/dist/parquetjs/utils/thrift-runtime.d.ts +106 -0
  553. package/dist/parquetjs/utils/thrift-runtime.d.ts.map +1 -0
  554. package/dist/parquetjs/utils/thrift-runtime.js +50 -0
  555. package/dist/parquetjs/utils/thrift-runtime.js.map +1 -0
  556. package/dist/parquetjs/utils/uint8-array-compact-protocol-writer.d.ts +78 -0
  557. package/dist/parquetjs/utils/uint8-array-compact-protocol-writer.d.ts.map +1 -0
  558. package/dist/parquetjs/utils/uint8-array-compact-protocol-writer.js +213 -0
  559. package/dist/parquetjs/utils/uint8-array-compact-protocol-writer.js.map +1 -0
  560. package/dist/parquetjs/utils/uint8-array-compact-protocol.d.ts +80 -0
  561. package/dist/parquetjs/utils/uint8-array-compact-protocol.d.ts.map +1 -0
  562. package/dist/parquetjs/utils/uint8-array-compact-protocol.js +276 -0
  563. package/dist/parquetjs/utils/uint8-array-compact-protocol.js.map +1 -0
  564. package/dist/parquetjs/utils/uint8-array-transport.d.ts +25 -0
  565. package/dist/parquetjs/utils/uint8-array-transport.d.ts.map +1 -0
  566. package/dist/parquetjs/utils/uint8-array-transport.js +62 -0
  567. package/dist/parquetjs/utils/uint8-array-transport.js.map +1 -0
  568. package/dist/polyfills/process.d.ts +12 -0
  569. package/dist/polyfills/process.d.ts.map +1 -0
  570. package/dist/polyfills/process.js +17 -0
  571. package/dist/polyfills/process.js.map +1 -0
  572. package/dist/unbundled.d.ts +10 -0
  573. package/dist/unbundled.d.ts.map +1 -0
  574. package/dist/unbundled.js +11 -0
  575. package/dist/unbundled.js.map +1 -0
  576. package/dist/wasm.d.ts +3 -0
  577. package/dist/wasm.d.ts.map +1 -0
  578. package/dist/wasm.js +6 -0
  579. package/dist/wasm.js.map +1 -0
  580. package/dist/workers/parquet-source-worker.d.ts +2 -0
  581. package/dist/workers/parquet-source-worker.d.ts.map +1 -0
  582. package/dist/workers/parquet-source-worker.js +17 -0
  583. package/dist/workers/parquet-source-worker.js.map +1 -0
  584. package/dist/workers/parquet-worker-node.d.ts +2 -0
  585. package/dist/workers/parquet-worker-node.d.ts.map +1 -0
  586. package/dist/workers/parquet-worker-node.js +5 -0
  587. package/dist/workers/parquet-worker-node.js.map +1 -0
  588. package/dist/workers/parquet-worker.d.ts +2 -0
  589. package/dist/workers/parquet-worker.d.ts.map +1 -0
  590. package/dist/workers/parquet-worker.js +27 -0
  591. package/dist/workers/parquet-worker.js.map +1 -0
  592. package/package.json +84 -40
  593. package/src/bundled.ts +43 -0
  594. package/src/delta-format.ts +12 -0
  595. package/src/delta-source-loader-types.ts +40 -0
  596. package/src/delta-source.ts +305 -0
  597. package/src/delta-types.ts +40 -0
  598. package/src/geoparquet-loader-with-parser.ts +95 -0
  599. package/src/geoparquet-loader.ts +54 -0
  600. package/src/iceberg-rest-catalog.ts +122 -0
  601. package/src/iceberg-table-source.ts +1037 -0
  602. package/src/iceberg-types.ts +165 -0
  603. package/src/index.ts +105 -26
  604. package/src/lib/arrow/convert-columns-to-row-group.ts +3 -0
  605. package/src/lib/arrow/convert-schema-from-parquet.ts +193 -32
  606. package/src/lib/arrow/convert-schema-to-parquet.ts +16 -7
  607. package/src/lib/arrow/create-nested-arrow-vector.ts +705 -0
  608. package/src/lib/constants.ts +0 -2
  609. package/src/lib/encoders/encode-arrow-to-parquet.ts +10 -16
  610. package/src/lib/encoders/encode-table-to-parquet-js.ts +526 -0
  611. package/src/lib/geo/geoparquet-covering.ts +201 -0
  612. package/src/lib/geo/geospatial-metadata.ts +547 -0
  613. package/src/lib/parquet-bloom-filter-planner.ts +86 -0
  614. package/src/lib/parquet-bloom-filter.ts +345 -0
  615. package/src/lib/parquet-encryption.ts +344 -0
  616. package/src/lib/parquet-page-index.ts +727 -0
  617. package/src/lib/parquet-predicate.ts +410 -0
  618. package/src/lib/parquet-source-worker-client.ts +41 -0
  619. package/src/lib/parquet-source-worker-decoder.ts +252 -0
  620. package/src/lib/parquet-source-worker-file.ts +56 -0
  621. package/src/lib/parquet-source-worker-types.ts +132 -0
  622. package/src/lib/parquet-worker-transport.ts +57 -0
  623. package/src/lib/parsers/convert-parquet-tables.ts +39 -0
  624. package/src/lib/parsers/get-parquet-schema.ts +6 -2
  625. package/src/lib/parsers/parse-geoparquet-to-geojson.ts +27 -14
  626. package/src/lib/parsers/parse-parquet-tables.ts +82 -0
  627. package/src/lib/parsers/parse-parquet-to-arrow-js.ts +1213 -0
  628. package/src/lib/parsers/parse-parquet-to-arrow.ts +62 -36
  629. package/src/lib/parsers/parse-parquet-to-columns.ts +9 -8
  630. package/src/lib/parsers/parse-parquet-to-json.ts +119 -35
  631. package/src/lib/slice-parquet-batch.ts +32 -0
  632. package/src/lib/sources/parquet-range-file.ts +365 -0
  633. package/src/lib/sources/single-batch-queue.ts +95 -0
  634. package/src/lib/utils/load-wasm-node.ts +25 -0
  635. package/src/lib/utils/load-wasm.ts +36 -13
  636. package/src/lib/utils/make-stream-iterator.ts +126 -14
  637. package/src/lib/utils/normalize-parquet-options.ts +30 -0
  638. package/src/parquet-dataset-source.ts +800 -0
  639. package/src/parquet-encoded-page-types.ts +122 -0
  640. package/src/parquet-format.ts +2 -0
  641. package/src/parquet-js-loader-types.ts +53 -0
  642. package/src/parquet-js-loader.ts +76 -19
  643. package/src/parquet-js-writer.ts +98 -0
  644. package/src/parquet-loader-base.ts +34 -0
  645. package/src/parquet-loader-options.ts +62 -0
  646. package/src/parquet-loader-types.ts +35 -0
  647. package/src/parquet-loader.ts +115 -0
  648. package/src/parquet-source-capabilities.ts +73 -0
  649. package/src/parquet-source-loader-types.ts +97 -0
  650. package/src/parquet-source-loader.ts +2254 -0
  651. package/src/parquet-source-types.ts +627 -0
  652. package/src/parquet-source-worker-factory.ts +8 -0
  653. package/src/parquet-source-worker-url.ts +23 -0
  654. package/src/parquet-worker-url.ts +23 -0
  655. package/src/parquet-writer.ts +42 -0
  656. package/src/parquetjs/LICENSE +23 -1
  657. package/src/parquetjs/codecs/byte-stream-split.ts +221 -0
  658. package/src/parquetjs/codecs/declare.ts +62 -3
  659. package/src/parquetjs/codecs/delta.ts +1047 -0
  660. package/src/parquetjs/codecs/dictionary.ts +22 -4
  661. package/src/parquetjs/codecs/index.ts +22 -0
  662. package/src/parquetjs/codecs/plain.ts +317 -89
  663. package/src/parquetjs/codecs/rle.ts +852 -82
  664. package/src/parquetjs/compression.ts +137 -156
  665. package/src/parquetjs/encoder/dictionary-planner.ts +104 -0
  666. package/src/parquetjs/encoder/page-planner.ts +83 -0
  667. package/src/parquetjs/encoder/parquet-encoder.ts +1374 -95
  668. package/src/parquetjs/parquet-thrift/BoundingBox.ts +108 -0
  669. package/src/parquetjs/parquet-thrift/BsonType.ts +1 -1
  670. package/src/parquetjs/parquet-thrift/ColumnChunk.ts +37 -2
  671. package/src/parquetjs/parquet-thrift/ColumnCryptoMetaData.ts +139 -0
  672. package/src/parquetjs/parquet-thrift/ColumnIndex.ts +13 -13
  673. package/src/parquetjs/parquet-thrift/ColumnMetaData.ts +75 -2
  674. package/src/parquetjs/parquet-thrift/ColumnOrder.ts +1 -1
  675. package/src/parquetjs/parquet-thrift/DataPageHeader.ts +1 -1
  676. package/src/parquetjs/parquet-thrift/DataPageHeaderV2.ts +1 -1
  677. package/src/parquetjs/parquet-thrift/DateType.ts +1 -1
  678. package/src/parquetjs/parquet-thrift/DecimalType.ts +1 -1
  679. package/src/parquetjs/parquet-thrift/DictionaryPageHeader.ts +1 -1
  680. package/src/parquetjs/parquet-thrift/EdgeInterpolationAlgorithm.ts +13 -0
  681. package/src/parquetjs/parquet-thrift/Encoding.ts +2 -1
  682. package/src/parquetjs/parquet-thrift/EncryptionAlgorithm.ts +127 -0
  683. package/src/parquetjs/parquet-thrift/EnumType.ts +1 -1
  684. package/src/parquetjs/parquet-thrift/FileCryptoMetaData.ts +60 -0
  685. package/src/parquetjs/parquet-thrift/FileMetaData.ts +37 -2
  686. package/src/parquetjs/parquet-thrift/Float16Type.ts +28 -0
  687. package/src/parquetjs/parquet-thrift/GeographyType.ts +54 -0
  688. package/src/parquetjs/parquet-thrift/GeometryType.ts +43 -0
  689. package/src/parquetjs/parquet-thrift/GeospatialStatistics.ts +68 -0
  690. package/src/parquetjs/parquet-thrift/IndexPageHeader.ts +1 -1
  691. package/src/parquetjs/parquet-thrift/IntType.ts +1 -1
  692. package/src/parquetjs/parquet-thrift/JsonType.ts +1 -1
  693. package/src/parquetjs/parquet-thrift/KeyValue.ts +1 -1
  694. package/src/parquetjs/parquet-thrift/ListType.ts +1 -1
  695. package/src/parquetjs/parquet-thrift/LogicalType.ts +97 -1
  696. package/src/parquetjs/parquet-thrift/MapType.ts +1 -1
  697. package/src/parquetjs/parquet-thrift/MicroSeconds.ts +1 -1
  698. package/src/parquetjs/parquet-thrift/MilliSeconds.ts +1 -1
  699. package/src/parquetjs/parquet-thrift/NanoSeconds.ts +28 -0
  700. package/src/parquetjs/parquet-thrift/NullType.ts +1 -1
  701. package/src/parquetjs/parquet-thrift/OffsetIndex.ts +1 -1
  702. package/src/parquetjs/parquet-thrift/PageEncodingStats.ts +1 -1
  703. package/src/parquetjs/parquet-thrift/PageHeader.ts +1 -1
  704. package/src/parquetjs/parquet-thrift/PageLocation.ts +2 -2
  705. package/src/parquetjs/parquet-thrift/RowGroup.ts +2 -2
  706. package/src/parquetjs/parquet-thrift/SchemaElement.ts +1 -1
  707. package/src/parquetjs/parquet-thrift/SizeStatistics.ts +98 -0
  708. package/src/parquetjs/parquet-thrift/SortingColumn.ts +1 -1
  709. package/src/parquetjs/parquet-thrift/Statistics.ts +50 -14
  710. package/src/parquetjs/parquet-thrift/StringType.ts +1 -1
  711. package/src/parquetjs/parquet-thrift/TimeType.ts +1 -1
  712. package/src/parquetjs/parquet-thrift/TimeUnit.ts +25 -1
  713. package/src/parquetjs/parquet-thrift/TimestampType.ts +1 -1
  714. package/src/parquetjs/parquet-thrift/TypeDefinedOrder.ts +1 -1
  715. package/src/parquetjs/parquet-thrift/UUIDType.ts +1 -1
  716. package/src/parquetjs/parquet-thrift/VariantType.ts +43 -0
  717. package/src/parquetjs/parquet-thrift/index.ts +12 -4
  718. package/src/parquetjs/parser/decoders.ts +922 -143
  719. package/src/parquetjs/parser/encoded-pages.ts +278 -0
  720. package/src/parquetjs/parser/parquet-reader.ts +1334 -83
  721. package/src/parquetjs/schema/declare.ts +121 -9
  722. package/src/parquetjs/schema/schema.ts +33 -3
  723. package/src/parquetjs/schema/shred.ts +345 -41
  724. package/src/parquetjs/schema/types.ts +308 -84
  725. package/src/parquetjs/schema/variant.ts +313 -0
  726. package/src/parquetjs/utils/binary-utils.ts +132 -0
  727. package/src/parquetjs/utils/crc32.ts +15 -0
  728. package/src/parquetjs/utils/file-utils.ts +4 -4
  729. package/src/parquetjs/utils/read-utils.ts +77 -51
  730. package/src/parquetjs/utils/thrift-runtime.ts +109 -0
  731. package/src/parquetjs/utils/uint8-array-compact-protocol-writer.ts +254 -0
  732. package/src/parquetjs/utils/uint8-array-compact-protocol.ts +322 -0
  733. package/src/parquetjs/utils/uint8-array-transport.ts +79 -0
  734. package/src/polyfills/process.ts +17 -0
  735. package/src/unbundled.ts +47 -0
  736. package/src/wasm.ts +6 -0
  737. package/src/workers/parquet-source-worker.ts +21 -0
  738. package/src/workers/parquet-worker-node.ts +5 -0
  739. package/src/workers/parquet-worker.ts +31 -0
  740. package/dist/parquet-arrow-loader.d.ts +0 -43
  741. package/dist/parquet-arrow-loader.d.ts.map +0 -1
  742. package/dist/parquet-arrow-loader.js +0 -49
  743. package/dist/parquet-arrow-loader.js.map +0 -1
  744. package/dist/parquet-arrow-writer.d.ts +0 -9
  745. package/dist/parquet-arrow-writer.d.ts.map +0 -1
  746. package/dist/parquet-arrow-writer.js +0 -23
  747. package/dist/parquet-arrow-writer.js.map +0 -1
  748. package/dist/parquet-json-loader.d.ts +0 -148
  749. package/dist/parquet-json-loader.d.ts.map +0 -1
  750. package/dist/parquet-json-loader.js +0 -106
  751. package/dist/parquet-json-loader.js.map +0 -1
  752. package/dist/parquet-json-writer.d.ts +0 -19
  753. package/dist/parquet-json-writer.d.ts.map +0 -1
  754. package/dist/parquet-json-writer.js +0 -20
  755. package/dist/parquet-json-writer.js.map +0 -1
  756. package/dist/polyfills/buffer/buffer-polyfill.browser.d.ts +0 -3
  757. package/dist/polyfills/buffer/buffer-polyfill.browser.d.ts.map +0 -1
  758. package/dist/polyfills/buffer/buffer-polyfill.browser.js +0 -12
  759. package/dist/polyfills/buffer/buffer-polyfill.browser.js.map +0 -1
  760. package/dist/polyfills/buffer/buffer-polyfill.node.d.ts +0 -3
  761. package/dist/polyfills/buffer/buffer-polyfill.node.d.ts.map +0 -1
  762. package/dist/polyfills/buffer/buffer-polyfill.node.js +0 -17
  763. package/dist/polyfills/buffer/buffer-polyfill.node.js.map +0 -1
  764. package/dist/polyfills/buffer/buffer.d.ts +0 -222
  765. package/dist/polyfills/buffer/buffer.d.ts.map +0 -1
  766. package/dist/polyfills/buffer/buffer.js +0 -1868
  767. package/dist/polyfills/buffer/buffer.js.map +0 -1
  768. package/dist/polyfills/buffer/index.d.ts +0 -4
  769. package/dist/polyfills/buffer/index.d.ts.map +0 -1
  770. package/dist/polyfills/buffer/index.js +0 -9
  771. package/dist/polyfills/buffer/index.js.map +0 -1
  772. package/dist/polyfills/buffer/install-buffer-polyfill.d.ts +0 -2
  773. package/dist/polyfills/buffer/install-buffer-polyfill.d.ts.map +0 -1
  774. package/dist/polyfills/buffer/install-buffer-polyfill.js +0 -10
  775. package/dist/polyfills/buffer/install-buffer-polyfill.js.map +0 -1
  776. package/dist/workers/parquet-json-worker.d.ts +0 -2
  777. package/dist/workers/parquet-json-worker.d.ts.map +0 -1
  778. package/dist/workers/parquet-json-worker.js +0 -7
  779. package/dist/workers/parquet-json-worker.js.map +0 -1
  780. package/src/parquet-arrow-loader.ts +0 -74
  781. package/src/parquet-arrow-writer.ts +0 -33
  782. package/src/parquet-json-loader.ts +0 -160
  783. package/src/parquet-json-writer.ts +0 -27
  784. package/src/parquetjs/modules.d.ts +0 -25
  785. package/src/polyfills/buffer/buffer-polyfill.browser.ts +0 -14
  786. package/src/polyfills/buffer/buffer-polyfill.node.ts +0 -19
  787. package/src/polyfills/buffer/buffer.ts +0 -2205
  788. package/src/polyfills/buffer/index.ts +0 -11
  789. package/src/polyfills/buffer/install-buffer-polyfill.ts +0 -12
  790. package/src/workers/parquet-json-worker.ts +0 -8
@@ -0,0 +1,289 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { Uint8ArrayCompactProtocol } from "../parquetjs/utils/uint8-array-compact-protocol.js";
5
+ import { Uint8ArrayTransport } from "../parquetjs/utils/uint8-array-transport.js";
6
+ import { Uint8ArrayCompactProtocolWriter } from "../parquetjs/utils/uint8-array-compact-protocol-writer.js";
7
+ import { Thrift } from "../parquetjs/utils/thrift-runtime.js";
8
+ import { concatUint8Arrays } from "../parquetjs/utils/binary-utils.js";
9
+ const UINT64_MASK = 0xffffffffffffffffn;
10
+ const PRIME1 = 0x9e3779b185ebca87n;
11
+ const PRIME2 = 0xc2b2ae3d27d4eb4fn;
12
+ const PRIME3 = 0x165667b19e3779f9n;
13
+ const PRIME4 = 0x85ebca77c2b2ae63n;
14
+ const PRIME5 = 0x27d4eb2f165667c5n;
15
+ const SALTS = [
16
+ 0x47b6137b, 0x44974d91, 0x8824ad5b, 0xa2b7289d, 0x705495c7, 0x2df1424b, 0x9efc4947, 0x5c6bfb31
17
+ ];
18
+ /** Builds an uncompressed Parquet split-block Bloom filter for one column chunk. */
19
+ export function encodeParquetSplitBlockBloomFilter(values, physicalType, typeLength) {
20
+ if (values.length === 0)
21
+ return undefined;
22
+ // Ten bits per value is the Parquet recommendation. Split-block filters are composed of
23
+ // 256-bit blocks, so round up to the next whole block and keep a useful minimum for tiny groups.
24
+ const targetBitCount = Math.max(256, values.length * 10);
25
+ const blockCount = Math.max(1, Math.ceil(targetBitCount / 256));
26
+ const bitset = new Uint8Array(blockCount * 32);
27
+ for (const value of values) {
28
+ const encoded = encodeParquetBloomFilterValue(value, physicalType, typeLength);
29
+ insertParquetSplitBlockBloomFilter(bitset, hashParquetBloomFilterValue(encoded));
30
+ }
31
+ const headerWriter = new Uint8ArrayCompactProtocolWriter();
32
+ headerWriter.writeStructBegin('BloomFilterHeader');
33
+ headerWriter.writeFieldBegin('numBytes', Thrift.Type.I32, 1);
34
+ headerWriter.writeI32(bitset.byteLength);
35
+ headerWriter.writeFieldEnd();
36
+ writeBloomFilterUnion(headerWriter, 'algorithm', 2, 'BLOCK');
37
+ writeBloomFilterUnion(headerWriter, 'hash', 3, 'XXHASH');
38
+ writeBloomFilterUnion(headerWriter, 'compression', 4, 'UNCOMPRESSED');
39
+ headerWriter.writeFieldStop();
40
+ headerWriter.writeStructEnd();
41
+ return concatUint8Arrays([headerWriter.getBytes(), bitset]);
42
+ }
43
+ /** Encodes one scalar using the Parquet PLAIN representation used by Bloom filters. */
44
+ export function encodeParquetBloomFilterValue(value, physicalType, typeLength) {
45
+ switch (physicalType) {
46
+ case 'BOOLEAN':
47
+ if (typeof value !== 'boolean')
48
+ throw new Error('Parquet BOOLEAN Bloom value must be boolean');
49
+ return Uint8Array.of(value ? 1 : 0);
50
+ case 'INT32': {
51
+ if (typeof value !== 'number' || !Number.isInteger(value)) {
52
+ throw new Error('Parquet INT32 Bloom value must be an integer number');
53
+ }
54
+ const bytes = new Uint8Array(4);
55
+ new DataView(bytes.buffer).setInt32(0, value, true);
56
+ return bytes;
57
+ }
58
+ case 'INT64': {
59
+ if (typeof value !== 'number' && typeof value !== 'bigint' && typeof value !== 'string') {
60
+ throw new Error('Parquet INT64 Bloom value must be an integer number, bigint, or string');
61
+ }
62
+ const integerValue = typeof value === 'bigint' ? value : BigInt(value);
63
+ const bytes = new Uint8Array(8);
64
+ new DataView(bytes.buffer).setBigInt64(0, integerValue, true);
65
+ return bytes;
66
+ }
67
+ case 'FLOAT': {
68
+ if (typeof value !== 'number')
69
+ throw new Error('Parquet FLOAT Bloom value must be a number');
70
+ const bytes = new Uint8Array(4);
71
+ new DataView(bytes.buffer).setFloat32(0, value, true);
72
+ return bytes;
73
+ }
74
+ case 'DOUBLE': {
75
+ if (typeof value !== 'number')
76
+ throw new Error('Parquet DOUBLE Bloom value must be a number');
77
+ const bytes = new Uint8Array(8);
78
+ new DataView(bytes.buffer).setFloat64(0, value, true);
79
+ return bytes;
80
+ }
81
+ case 'BYTE_ARRAY': {
82
+ if (typeof value !== 'string' && !(value instanceof Uint8Array)) {
83
+ throw new Error('Parquet BYTE_ARRAY Bloom value must be a string or Uint8Array');
84
+ }
85
+ const payload = typeof value === 'string' ? new TextEncoder().encode(value) : value;
86
+ return payload.slice();
87
+ }
88
+ case 'FIXED_LEN_BYTE_ARRAY': {
89
+ if (!(value instanceof Uint8Array) ||
90
+ typeLength === undefined ||
91
+ value.byteLength !== typeLength) {
92
+ throw new Error('Parquet FIXED_LEN_BYTE_ARRAY Bloom value must match typeLength');
93
+ }
94
+ return value.slice();
95
+ }
96
+ default:
97
+ throw new Error(`Unsupported Parquet Bloom-filter physical type: ${physicalType}`);
98
+ }
99
+ }
100
+ /** Parses a Parquet Bloom-filter header and returns its uncompressed split-block bitset. */
101
+ export function decodeParquetSplitBlockBloomFilter(data) {
102
+ const transport = new Uint8ArrayTransport(data);
103
+ const protocol = new Uint8ArrayCompactProtocol(transport);
104
+ protocol.readStructBegin();
105
+ let bitsetByteLength;
106
+ let algorithm;
107
+ let hash;
108
+ let compression;
109
+ while (true) {
110
+ const field = protocol.readFieldBegin();
111
+ if (field.ftype === Thrift.Type.STOP) {
112
+ break;
113
+ }
114
+ if (field.fid === 1 && field.ftype === Thrift.Type.I32) {
115
+ bitsetByteLength = protocol.readI32();
116
+ }
117
+ else if (field.fid === 2 && field.ftype === Thrift.Type.STRUCT) {
118
+ algorithm = readBloomFilterUnion(protocol, 1) ? 'BLOCK' : undefined;
119
+ }
120
+ else if (field.fid === 3 && field.ftype === Thrift.Type.STRUCT) {
121
+ hash = readBloomFilterUnion(protocol, 1) ? 'XXHASH' : undefined;
122
+ }
123
+ else if (field.fid === 4 && field.ftype === Thrift.Type.STRUCT) {
124
+ compression = readBloomFilterUnion(protocol, 1) ? 'UNCOMPRESSED' : undefined;
125
+ }
126
+ else {
127
+ protocol.skip(field.ftype);
128
+ }
129
+ protocol.readFieldEnd();
130
+ }
131
+ protocol.readStructEnd();
132
+ if (bitsetByteLength === undefined || bitsetByteLength <= 0 || bitsetByteLength % 32 !== 0) {
133
+ throw new Error('Invalid Parquet split-block Bloom filter bitset length');
134
+ }
135
+ const bitsetOffset = transport.readPos;
136
+ if (data.byteLength - bitsetOffset < bitsetByteLength) {
137
+ throw new Error('Truncated Parquet split-block Bloom filter bitset');
138
+ }
139
+ return {
140
+ bitsetByteLength,
141
+ headerByteLength: bitsetOffset,
142
+ bitset: data.subarray(bitsetOffset, bitsetOffset + bitsetByteLength),
143
+ algorithm,
144
+ hash,
145
+ compression
146
+ };
147
+ }
148
+ function readBloomFilterUnion(protocol, expectedFieldId) {
149
+ protocol.readStructBegin();
150
+ let matches = false;
151
+ while (true) {
152
+ const field = protocol.readFieldBegin();
153
+ if (field.ftype === Thrift.Type.STOP)
154
+ break;
155
+ matches = field.fid === expectedFieldId && field.ftype === Thrift.Type.STRUCT;
156
+ protocol.skip(field.ftype);
157
+ protocol.readFieldEnd();
158
+ }
159
+ protocol.readStructEnd();
160
+ return matches;
161
+ }
162
+ /** Writes one Bloom-filter Thrift union using the compact protocol. */
163
+ function writeBloomFilterUnion(writer, fieldName, fieldId, variantName) {
164
+ writer.writeFieldBegin(fieldName, Thrift.Type.STRUCT, fieldId);
165
+ writer.writeStructBegin(variantName);
166
+ writer.writeFieldBegin(variantName, Thrift.Type.STRUCT, 1);
167
+ writer.writeStructBegin(variantName);
168
+ writer.writeFieldStop();
169
+ writer.writeStructEnd();
170
+ writer.writeFieldEnd();
171
+ writer.writeFieldStop();
172
+ writer.writeStructEnd();
173
+ writer.writeFieldEnd();
174
+ }
175
+ /** Returns whether a serialized Parquet split-block Bloom filter may contain a hash. */
176
+ export function checkParquetSplitBlockBloomFilter(bitset, hash) {
177
+ const blockCount = bitset.byteLength / 32;
178
+ if (!Number.isInteger(blockCount) || blockCount < 1 || blockCount >= 2 ** 31) {
179
+ return false;
180
+ }
181
+ const blockIndex = Number(((hash >> 32n) * BigInt(blockCount)) >> 32n);
182
+ const blockOffset = blockIndex * 32;
183
+ const lowerHash = Number(hash & 0xffffffffn) >>> 0;
184
+ for (let wordIndex = 0; wordIndex < 8; wordIndex++) {
185
+ const bit = Math.imul(lowerHash, SALTS[wordIndex]) >>> 27;
186
+ const word = readUint32LE(bitset, blockOffset + wordIndex * 4);
187
+ if ((word & (1 << bit)) === 0) {
188
+ return false;
189
+ }
190
+ }
191
+ return true;
192
+ }
193
+ /** Adds a hash to a mutable serialized Parquet split-block Bloom filter bitset. */
194
+ export function insertParquetSplitBlockBloomFilter(bitset, hash) {
195
+ const blockCount = bitset.byteLength / 32;
196
+ if (!Number.isInteger(blockCount) || blockCount < 1 || blockCount >= 2 ** 31) {
197
+ throw new Error('Parquet split-block Bloom filter bitset must contain one or more 32-byte blocks');
198
+ }
199
+ const blockIndex = Number(((hash >> 32n) * BigInt(blockCount)) >> 32n);
200
+ const blockOffset = blockIndex * 32;
201
+ const lowerHash = Number(hash & 0xffffffffn) >>> 0;
202
+ for (let wordIndex = 0; wordIndex < 8; wordIndex++) {
203
+ const bit = Math.imul(lowerHash, SALTS[wordIndex]) >>> 27;
204
+ const offset = blockOffset + wordIndex * 4;
205
+ writeUint32LE(bitset, offset, readUint32LE(bitset, offset) | (1 << bit));
206
+ }
207
+ }
208
+ /** Computes the Parquet Bloom-filter XXH64 hash for plain-encoded value bytes. */
209
+ export function hashParquetBloomFilterValue(value) {
210
+ let offset = 0;
211
+ let hash;
212
+ if (value.byteLength >= 32) {
213
+ let value1 = PRIME1 + PRIME2;
214
+ let value2 = PRIME2;
215
+ let value3 = 0n;
216
+ let value4 = -PRIME1;
217
+ const limit = value.byteLength - 32;
218
+ while (offset <= limit) {
219
+ value1 = roundXxHash64(value1, readUint64LE(value, offset));
220
+ value2 = roundXxHash64(value2, readUint64LE(value, offset + 8));
221
+ value3 = roundXxHash64(value3, readUint64LE(value, offset + 16));
222
+ value4 = roundXxHash64(value4, readUint64LE(value, offset + 24));
223
+ offset += 32;
224
+ }
225
+ hash =
226
+ rotateLeft(value1, 1) +
227
+ rotateLeft(value2, 7) +
228
+ rotateLeft(value3, 12) +
229
+ rotateLeft(value4, 18);
230
+ hash = mergeXxHash64(hash, value1);
231
+ hash = mergeXxHash64(hash, value2);
232
+ hash = mergeXxHash64(hash, value3);
233
+ hash = mergeXxHash64(hash, value4);
234
+ }
235
+ else {
236
+ hash = PRIME5;
237
+ }
238
+ hash = (hash + BigInt(value.byteLength)) & UINT64_MASK;
239
+ while (offset + 8 <= value.byteLength) {
240
+ const lane = (readUint64LE(value, offset) * PRIME2) & UINT64_MASK;
241
+ hash ^= (rotateLeft(lane, 31) * PRIME1) & UINT64_MASK;
242
+ hash = (rotateLeft(hash, 27) * PRIME1 + PRIME4) & UINT64_MASK;
243
+ offset += 8;
244
+ }
245
+ if (offset + 4 <= value.byteLength) {
246
+ hash ^= (BigInt(readUint32LE(value, offset)) * PRIME1) & UINT64_MASK;
247
+ hash = (rotateLeft(hash, 23) * PRIME2 + PRIME3) & UINT64_MASK;
248
+ offset += 4;
249
+ }
250
+ while (offset < value.byteLength) {
251
+ hash ^= (BigInt(value[offset++]) * PRIME5) & UINT64_MASK;
252
+ hash = (rotateLeft(hash, 11) * PRIME1) & UINT64_MASK;
253
+ }
254
+ hash ^= hash >> 33n;
255
+ hash = (hash * PRIME2) & UINT64_MASK;
256
+ hash ^= hash >> 29n;
257
+ hash = (hash * PRIME3) & UINT64_MASK;
258
+ hash ^= hash >> 32n;
259
+ return hash & UINT64_MASK;
260
+ }
261
+ function roundXxHash64(accumulator, lane) {
262
+ return (rotateLeft((accumulator + lane * PRIME2) & UINT64_MASK, 31) * PRIME1) & UINT64_MASK;
263
+ }
264
+ function mergeXxHash64(accumulator, value) {
265
+ let result = accumulator ^ roundXxHash64(0n, value);
266
+ result = (result * PRIME1 + PRIME4) & UINT64_MASK;
267
+ return result;
268
+ }
269
+ function rotateLeft(value, bits) {
270
+ const shift = BigInt(bits);
271
+ return ((value << shift) | (value >> (64n - shift))) & UINT64_MASK;
272
+ }
273
+ function readUint32LE(value, offset) {
274
+ return ((value[offset] |
275
+ (value[offset + 1] << 8) |
276
+ (value[offset + 2] << 16) |
277
+ (value[offset + 3] << 24)) >>>
278
+ 0);
279
+ }
280
+ function writeUint32LE(value, offset, numberValue) {
281
+ value[offset] = numberValue;
282
+ value[offset + 1] = numberValue >>> 8;
283
+ value[offset + 2] = numberValue >>> 16;
284
+ value[offset + 3] = numberValue >>> 24;
285
+ }
286
+ function readUint64LE(value, offset) {
287
+ return BigInt(readUint32LE(value, offset)) | (BigInt(readUint32LE(value, offset + 4)) << 32n);
288
+ }
289
+ //# sourceMappingURL=parquet-bloom-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parquet-bloom-filter.js","sourceRoot":"","sources":["../../src/lib/parquet-bloom-filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /** Algorithms defined by the Parquet modular-encryption specification. */
2
+ export type ParquetEncryptionAlgorithm = 'AES_GCM_V1' | 'AES_GCM_CTR_V1';
3
+ /** Identifies one encrypted Parquet module in its authenticated-data suffix. */
4
+ export type ParquetEncryptionModule = 'footer' | 'column-metadata' | 'data-page' | 'dictionary-page' | 'data-page-header' | 'dictionary-page-header' | 'column-index' | 'offset-index' | 'bloom-filter-header' | 'bloom-filter-bitset';
5
+ /** Supplies a 128-bit, 192-bit, or 256-bit key for a Parquet module. */
6
+ export type ParquetKeyRetriever = (keyMetadata: Uint8Array | undefined, context: {
7
+ algorithm: ParquetEncryptionAlgorithm;
8
+ aad: Uint8Array;
9
+ }) => Promise<ArrayBuffer | ArrayBufferView> | ArrayBuffer | ArrayBufferView;
10
+ /** Writer configuration for an encrypted Parquet footer. */
11
+ export type ParquetWriterEncryptionOptions = {
12
+ /** Encryption algorithm used for the footer and advertised in FileCryptoMetaData. */
13
+ algorithm?: ParquetEncryptionAlgorithm;
14
+ /** Optional key metadata passed to the key retriever and stored in FileCryptoMetaData. */
15
+ keyMetadata?: Uint8Array;
16
+ /** AAD prefix included in the file crypto metadata when provided. */
17
+ aadPrefix?: Uint8Array;
18
+ /** Eight-byte file identifier used in module AAD; generated when omitted. */
19
+ fileUnique?: Uint8Array;
20
+ /** Encrypt all data columns, or only the named top-level columns, with the footer key. */
21
+ encryptColumns?: boolean | Record<string, boolean>;
22
+ /** Optional per-column key metadata, enabling column-key encryption and key rotation. */
23
+ columnKeyMetadata?: Record<string, Uint8Array>;
24
+ /** Resolves the footer key without putting key material in writer options. */
25
+ keyRetriever: ParquetKeyRetriever;
26
+ };
27
+ /** Writer configuration for a plaintext footer authenticated by a Parquet signature. */
28
+ export type ParquetWriterFooterSignatureOptions = {
29
+ /** Algorithm used to authenticate the footer signature. */
30
+ algorithm?: ParquetEncryptionAlgorithm;
31
+ /** Key metadata stored in FileMetaData and supplied to the key retriever. */
32
+ keyMetadata: Uint8Array;
33
+ /** AAD prefix included in the signature AAD when provided. */
34
+ aadPrefix?: Uint8Array;
35
+ /** Eight-byte file identifier used in the signature AAD; generated when omitted. */
36
+ fileUnique?: Uint8Array;
37
+ /** Resolves the signing key without putting key material in writer options. */
38
+ keyRetriever: ParquetKeyRetriever;
39
+ };
40
+ /** Options used when decrypting one serialized Parquet module. */
41
+ export type ParquetDecryptModuleOptions = {
42
+ /** Encryption algorithm selected by the file crypto metadata. */
43
+ algorithm: ParquetEncryptionAlgorithm;
44
+ /** Authentication data constructed from the file AAD prefix and module suffix. */
45
+ aad: Uint8Array;
46
+ /** Optional key metadata passed to the caller's key retriever. */
47
+ keyMetadata?: Uint8Array;
48
+ /** Resolves the key without making key material part of source options. */
49
+ keyRetriever: ParquetKeyRetriever;
50
+ /** True for a page encrypted with AES-CTR under AES_GCM_CTR_V1. */
51
+ page?: boolean;
52
+ };
53
+ /** Reads one length-prefixed encrypted Parquet module from a serialized range. */
54
+ export declare function readParquetEncryptedModule(buffer: Uint8Array, offset?: number): {
55
+ bytes: Uint8Array;
56
+ nextOffset: number;
57
+ };
58
+ /** Builds the AAD required by the Parquet modular-encryption specification. */
59
+ export declare function createParquetModuleAad(aadPrefix: Uint8Array | undefined, fileUnique: Uint8Array, module: ParquetEncryptionModule, rowGroupOrdinal?: number, columnOrdinal?: number, pageOrdinal?: number): Uint8Array;
60
+ /** Decrypts a Parquet module serialized as `[length][nonce][ciphertext][tag]`. */
61
+ export declare function decryptParquetModule(encryptedModule: ArrayBuffer | ArrayBufferView, options: ParquetDecryptModuleOptions): Promise<Uint8Array>;
62
+ /** Encrypts one Parquet footer module as nonce-prefixed AES-GCM bytes. */
63
+ export declare function encryptParquetModule(plaintext: ArrayBuffer | ArrayBufferView, options: {
64
+ algorithm: ParquetEncryptionAlgorithm;
65
+ aad: Uint8Array;
66
+ keyMetadata?: Uint8Array;
67
+ keyRetriever: ParquetKeyRetriever;
68
+ /** Use AES-CTR for page data under AES_GCM_CTR_V1. */
69
+ page?: boolean;
70
+ }): Promise<Uint8Array>;
71
+ /** Verifies a plaintext-footer signature by authenticating the serialized footer bytes. */
72
+ export declare function verifyParquetFooterSignature(footerBytes: Uint8Array, signature: Uint8Array, options: {
73
+ algorithm: ParquetEncryptionAlgorithm;
74
+ aad: Uint8Array;
75
+ keyMetadata?: Uint8Array;
76
+ keyRetriever: ParquetKeyRetriever;
77
+ }): Promise<void>;
78
+ /** Creates the nonce and authentication tag used by a plaintext-footer signature. */
79
+ export declare function createParquetFooterSignature(footerBytes: Uint8Array, options: ParquetWriterFooterSignatureOptions): Promise<Uint8Array>;
80
+ //# sourceMappingURL=parquet-encryption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parquet-encryption.d.ts","sourceRoot":"","sources":["../../src/lib/parquet-encryption.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,190 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ /** Reads one length-prefixed encrypted Parquet module from a serialized range. */
5
+ export function readParquetEncryptedModule(buffer, offset = 0) {
6
+ if (offset + 4 > buffer.length) {
7
+ throw new Error('Invalid encrypted Parquet module: missing module length');
8
+ }
9
+ const length = new DataView(buffer.buffer, buffer.byteOffset + offset, 4).getUint32(0, true);
10
+ const moduleStart = offset + 4;
11
+ const moduleEnd = moduleStart + length;
12
+ if (length < 12 || moduleEnd > buffer.length) {
13
+ throw new Error('Invalid encrypted Parquet module: truncated module');
14
+ }
15
+ return { bytes: buffer.subarray(moduleStart, moduleEnd), nextOffset: moduleEnd };
16
+ }
17
+ /** Builds the AAD required by the Parquet modular-encryption specification. */
18
+ export function createParquetModuleAad(aadPrefix, fileUnique, module, rowGroupOrdinal, columnOrdinal, pageOrdinal) {
19
+ const moduleType = [
20
+ 'footer',
21
+ 'column-metadata',
22
+ 'data-page',
23
+ 'dictionary-page',
24
+ 'data-page-header',
25
+ 'dictionary-page-header',
26
+ 'column-index',
27
+ 'offset-index',
28
+ 'bloom-filter-header',
29
+ 'bloom-filter-bitset'
30
+ ].indexOf(module);
31
+ if (moduleType < 0)
32
+ throw new Error(`Unknown Parquet encryption module ${module}`);
33
+ const isPageModule = module === 'data-page' || module === 'data-page-header';
34
+ const suffixLength = fileUnique.length + (module === 'footer' ? 1 : isPageModule ? 7 : 5);
35
+ const suffix = new Uint8Array(suffixLength);
36
+ suffix.set(fileUnique);
37
+ suffix[fileUnique.length] = moduleType;
38
+ if (module !== 'footer') {
39
+ new DataView(suffix.buffer).setInt16(fileUnique.length + 1, rowGroupOrdinal ?? 0, true);
40
+ new DataView(suffix.buffer).setInt16(fileUnique.length + 3, columnOrdinal ?? 0, true);
41
+ if (isPageModule)
42
+ new DataView(suffix.buffer).setInt16(fileUnique.length + 5, pageOrdinal ?? 0, true);
43
+ }
44
+ const prefix = aadPrefix || new Uint8Array(0);
45
+ const aad = new Uint8Array(prefix.length + suffix.length);
46
+ aad.set(prefix);
47
+ aad.set(suffix, prefix.length);
48
+ return aad;
49
+ }
50
+ /** Decrypts a Parquet module serialized as `[length][nonce][ciphertext][tag]`. */
51
+ export async function decryptParquetModule(encryptedModule, options) {
52
+ const bytes = toUint8Array(encryptedModule);
53
+ const buffer = hasLengthPrefix(bytes) ? bytes.subarray(4) : bytes;
54
+ const nonceLength = 12;
55
+ if (buffer.length < nonceLength + (options.page ? 0 : 16)) {
56
+ throw new Error('Invalid Parquet encrypted module: truncated nonce or authentication tag');
57
+ }
58
+ const nonce = buffer.subarray(0, nonceLength);
59
+ const ciphertext = buffer.subarray(nonceLength);
60
+ const keyMaterial = await options.keyRetriever(options.keyMetadata, {
61
+ algorithm: options.algorithm,
62
+ aad: options.aad
63
+ });
64
+ const cryptoKey = await getCryptoKey(keyMaterial, options.algorithm, options.page);
65
+ const cryptoProvider = getCryptoProvider();
66
+ const plaintext = options.page && options.algorithm === 'AES_GCM_CTR_V1'
67
+ ? await cryptoProvider.decrypt({ name: 'AES-CTR', counter: makeCounter(nonce), length: 32 }, cryptoKey, ciphertext)
68
+ : await cryptoProvider.decrypt({
69
+ name: 'AES-GCM',
70
+ iv: nonce,
71
+ additionalData: options.aad
72
+ }, cryptoKey, ciphertext);
73
+ return new Uint8Array(plaintext);
74
+ }
75
+ /** Encrypts one Parquet footer module as nonce-prefixed AES-GCM bytes. */
76
+ export async function encryptParquetModule(plaintext, options) {
77
+ const keyMaterial = await options.keyRetriever(options.keyMetadata, {
78
+ algorithm: options.algorithm,
79
+ aad: options.aad
80
+ });
81
+ const cryptoKey = await getCryptoKey(keyMaterial, options.algorithm, false, ['encrypt']);
82
+ const nonce = new Uint8Array(12);
83
+ const cryptoProvider = getCryptoProvider();
84
+ getCryptoRandomValues(nonce);
85
+ const isCtrPage = options.page && options.algorithm === 'AES_GCM_CTR_V1';
86
+ const pageCryptoKey = isCtrPage
87
+ ? await getCryptoKey(keyMaterial, options.algorithm, true, ['encrypt'])
88
+ : cryptoKey;
89
+ const ciphertext = new Uint8Array(await cryptoProvider.encrypt(isCtrPage
90
+ ? { name: 'AES-CTR', counter: makeCounter(nonce), length: 32 }
91
+ : {
92
+ name: 'AES-GCM',
93
+ iv: nonce,
94
+ additionalData: options.aad
95
+ }, pageCryptoKey, toUint8Array(plaintext)));
96
+ const encryptedModule = new Uint8Array(nonce.byteLength + ciphertext.byteLength);
97
+ encryptedModule.set(nonce);
98
+ encryptedModule.set(ciphertext, nonce.byteLength);
99
+ return encryptedModule;
100
+ }
101
+ /** Verifies a plaintext-footer signature by authenticating the serialized footer bytes. */
102
+ export async function verifyParquetFooterSignature(footerBytes, signature, options) {
103
+ if (signature.byteLength !== 28) {
104
+ throw new Error(`Invalid Parquet plaintext-footer signature length ${signature.byteLength}; expected 28`);
105
+ }
106
+ const keyMaterial = await options.keyRetriever(options.keyMetadata, {
107
+ algorithm: options.algorithm,
108
+ aad: options.aad
109
+ });
110
+ const cryptoKey = await getCryptoKey(keyMaterial, options.algorithm, false, ['encrypt']);
111
+ const encryptedFooter = new Uint8Array(await getCryptoProvider().encrypt({
112
+ name: 'AES-GCM',
113
+ iv: signature.subarray(0, 12),
114
+ additionalData: options.aad
115
+ }, cryptoKey, footerBytes));
116
+ const calculatedTag = encryptedFooter.subarray(encryptedFooter.byteLength - 16);
117
+ for (let index = 0; index < 16; index++) {
118
+ if (calculatedTag[index] !== signature[12 + index]) {
119
+ throw new Error('Parquet plaintext-footer signature verification failed');
120
+ }
121
+ }
122
+ }
123
+ /** Creates the nonce and authentication tag used by a plaintext-footer signature. */
124
+ export async function createParquetFooterSignature(footerBytes, options) {
125
+ const algorithm = options.algorithm ?? 'AES_GCM_V1';
126
+ const fileUnique = options.fileUnique ? new Uint8Array(options.fileUnique) : createFileUnique();
127
+ if (fileUnique.byteLength !== 8) {
128
+ throw new Error('Parquet plaintext-footer signature file_unique must be 8 bytes');
129
+ }
130
+ const aad = createParquetModuleAad(options.aadPrefix, fileUnique, 'footer');
131
+ const keyMaterial = await options.keyRetriever(options.keyMetadata, { algorithm, aad });
132
+ const cryptoKey = await getCryptoKey(keyMaterial, algorithm, false, ['encrypt']);
133
+ const nonce = new Uint8Array(12);
134
+ getCryptoRandomValues(nonce);
135
+ const encryptedFooter = new Uint8Array(await getCryptoProvider().encrypt({
136
+ name: 'AES-GCM',
137
+ iv: nonce,
138
+ additionalData: aad
139
+ }, cryptoKey, footerBytes));
140
+ const signature = new Uint8Array(28);
141
+ signature.set(nonce);
142
+ signature.set(encryptedFooter.subarray(encryptedFooter.byteLength - 16), nonce.byteLength);
143
+ return signature;
144
+ }
145
+ function hasLengthPrefix(bytes) {
146
+ if (bytes.length < 4)
147
+ return false;
148
+ const length = new DataView(bytes.buffer, bytes.byteOffset, 4).getUint32(0, true);
149
+ return length === bytes.length - 4;
150
+ }
151
+ function createFileUnique() {
152
+ const fileUnique = new Uint8Array(8);
153
+ getCryptoRandomValues(fileUnique);
154
+ return fileUnique;
155
+ }
156
+ function makeCounter(nonce) {
157
+ const counter = new Uint8Array(16);
158
+ counter.set(nonce);
159
+ counter[15] = 1;
160
+ return counter;
161
+ }
162
+ async function getCryptoKey(keyMaterial, algorithm, page, usages = ['decrypt']) {
163
+ const keyBytes = toUint8Array(keyMaterial);
164
+ if (keyBytes.byteLength !== 16 && keyBytes.byteLength !== 24 && keyBytes.byteLength !== 32) {
165
+ throw new Error(`Invalid Parquet encryption key length ${keyBytes.byteLength}`);
166
+ }
167
+ return await getCryptoProvider().importKey('raw', keyBytes, page && algorithm === 'AES_GCM_CTR_V1' ? { name: 'AES-CTR' } : { name: 'AES-GCM' }, false, usages);
168
+ }
169
+ function getCryptoProvider() {
170
+ const cryptoProvider = globalThis.crypto?.subtle;
171
+ if (!cryptoProvider)
172
+ throw new Error('Parquet encryption requires Web Crypto support');
173
+ return cryptoProvider;
174
+ }
175
+ /** Fills a nonce with cryptographically secure random bytes. */
176
+ function getCryptoRandomValues(array) {
177
+ const cryptoProvider = globalThis.crypto;
178
+ if (!cryptoProvider?.getRandomValues) {
179
+ throw new Error('Parquet encryption requires Web Crypto random values');
180
+ }
181
+ const getRandomValues = cryptoProvider.getRandomValues.bind(cryptoProvider);
182
+ getRandomValues(array);
183
+ return array;
184
+ }
185
+ function toUint8Array(value) {
186
+ return value instanceof ArrayBuffer
187
+ ? new Uint8Array(value)
188
+ : new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
189
+ }
190
+ //# sourceMappingURL=parquet-encryption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parquet-encryption.js","sourceRoot":"","sources":["../../src/lib/parquet-encryption.ts"],"names":[],"mappings":"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"}