@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
@@ -5,13 +5,31 @@
5
5
  // Forked from https://github.com/kbajalc/parquets under MIT license
6
6
 
7
7
  import {decodeValues as decodeRleValues} from './rle';
8
+ import {encodeValues as encodeRleValues} from './rle';
9
+ import type {PrimitiveType} from '../schema/declare';
10
+ import type {ParquetCodecOptions} from './declare';
8
11
 
9
12
  export function decodeValues(type, cursor, count, opts) {
10
- opts.bitWidth = cursor.buffer.slice(cursor.offset, cursor.offset + 1).readInt8(0);
13
+ const bitWidth = cursor.buffer[cursor.offset];
11
14
  cursor.offset += 1;
12
- return decodeRleValues(type, cursor, count, {...opts, disableEnvelope: true});
15
+ return decodeRleValues(type, cursor, count, {...opts, bitWidth, disableEnvelope: true});
13
16
  }
14
17
 
15
- export function encodeValues(type, cursor, count, opts) {
16
- throw new Error('Encode dictionary functionality is not supported');
18
+ /** Encodes dictionary indexes as a bit width followed by the RLE/bit-packed hybrid stream. */
19
+ export function encodeValues(
20
+ _type: PrimitiveType,
21
+ values: number[],
22
+ options: ParquetCodecOptions
23
+ ): Uint8Array {
24
+ if (options.bitWidth === undefined) {
25
+ throw new Error('bitWidth is required for dictionary encoding');
26
+ }
27
+ const encodedIndices = encodeRleValues('INT32', values, {
28
+ bitWidth: options.bitWidth,
29
+ disableEnvelope: true
30
+ });
31
+ const output = new Uint8Array(encodedIndices.length + 1);
32
+ output[0] = options.bitWidth;
33
+ output.set(encodedIndices, 1);
34
+ return output;
17
35
  }
@@ -9,6 +9,8 @@ import type {ParquetCodecKit} from './declare';
9
9
  import * as PLAIN from './plain';
10
10
  import * as RLE from './rle';
11
11
  import * as DICTIONARY from './dictionary';
12
+ import * as DELTA from './delta';
13
+ import * as BYTE_STREAM_SPLIT from './byte-stream-split';
12
14
 
13
15
  export * from './declare';
14
16
 
@@ -21,6 +23,10 @@ export const PARQUET_CODECS: Record<ParquetCodec, ParquetCodecKit> = {
21
23
  encodeValues: RLE.encodeValues,
22
24
  decodeValues: RLE.decodeValues
23
25
  },
26
+ BIT_PACKED: {
27
+ encodeValues: RLE.encodeBitPackedValues,
28
+ decodeValues: RLE.decodeBitPackedValues
29
+ },
24
30
  // Using the PLAIN_DICTIONARY enum value is deprecated in the Parquet 2.0 specification.
25
31
  PLAIN_DICTIONARY: {
26
32
  // @ts-ignore
@@ -32,5 +38,21 @@ export const PARQUET_CODECS: Record<ParquetCodec, ParquetCodecKit> = {
32
38
  // @ts-ignore
33
39
  encodeValues: DICTIONARY.encodeValues,
34
40
  decodeValues: DICTIONARY.decodeValues
41
+ },
42
+ DELTA_BINARY_PACKED: {
43
+ encodeValues: DELTA.encodeDeltaBinaryPackedValues,
44
+ decodeValues: DELTA.decodeDeltaBinaryPackedValues
45
+ },
46
+ DELTA_LENGTH_BYTE_ARRAY: {
47
+ encodeValues: DELTA.encodeDeltaLengthByteArrayValues,
48
+ decodeValues: DELTA.decodeDeltaLengthByteArrayValues
49
+ },
50
+ DELTA_BYTE_ARRAY: {
51
+ encodeValues: DELTA.encodeDeltaByteArrayValues,
52
+ decodeValues: DELTA.decodeDeltaByteArrayValues
53
+ },
54
+ BYTE_STREAM_SPLIT: {
55
+ encodeValues: BYTE_STREAM_SPLIT.encodeValues,
56
+ decodeValues: BYTE_STREAM_SPLIT.decodeValues
35
57
  }
36
58
  };
@@ -6,14 +6,38 @@
6
6
 
7
7
  /* eslint-disable camelcase */
8
8
  import type {PrimitiveType} from '../schema/declare';
9
- import type {CursorBuffer, ParquetCodecOptions} from './declare';
10
- import INT53 from 'int53';
9
+ import {
10
+ getParquetValueOutput,
11
+ reserveParquetByteArrayOutput,
12
+ type CursorBuffer,
13
+ type ParquetCodecOptions,
14
+ type ParquetValueBuffer
15
+ } from './declare';
16
+ import {
17
+ concatUint8Arrays,
18
+ copyUint8Array,
19
+ encodeUtf8,
20
+ toUint8Array,
21
+ writeDoubleLE,
22
+ writeFloatLE,
23
+ writeInt32LE,
24
+ writeInt64LE,
25
+ writeUInt32LE
26
+ } from '../utils/binary-utils';
27
+
28
+ const JULIAN_DAY_UNIX_EPOCH = 2440588n;
29
+ const NANOSECONDS_PER_DAY = 86_400_000_000_000n;
30
+ const INT64_MIN = -(1n << 63n);
31
+ const INT64_MAX = (1n << 63n) - 1n;
32
+ const IS_LITTLE_ENDIAN = new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;
33
+ /** Largest byte value copied inline to avoid a temporary TypedArray view. */
34
+ const MAXIMUM_INLINE_BYTE_COPY_LENGTH = 7;
11
35
 
12
36
  export function encodeValues(
13
37
  type: PrimitiveType,
14
38
  values: any[],
15
- opts: ParquetCodecOptions
16
- ): Buffer {
39
+ opts: ParquetCodecOptions = {}
40
+ ): Uint8Array {
17
41
  switch (type) {
18
42
  case 'BOOLEAN':
19
43
  return encodeValues_BOOLEAN(values);
@@ -22,7 +46,7 @@ export function encodeValues(
22
46
  case 'INT64':
23
47
  return encodeValues_INT64(values);
24
48
  case 'INT96':
25
- return encodeValues_INT96(values);
49
+ return encodeValues_INT96(values, opts.int96AsTimestamp);
26
50
  case 'FLOAT':
27
51
  return encodeValues_FLOAT(values);
28
52
  case 'DOUBLE':
@@ -41,22 +65,22 @@ export function decodeValues(
41
65
  cursor: CursorBuffer,
42
66
  count: number,
43
67
  opts: ParquetCodecOptions
44
- ): any[] {
68
+ ): ParquetValueBuffer {
45
69
  switch (type) {
46
70
  case 'BOOLEAN':
47
- return decodeValues_BOOLEAN(cursor, count);
71
+ return decodeValues_BOOLEAN(cursor, count, opts);
48
72
  case 'INT32':
49
- return decodeValues_INT32(cursor, count);
73
+ return decodeValues_INT32(cursor, count, opts);
50
74
  case 'INT64':
51
- return decodeValues_INT64(cursor, count);
75
+ return decodeValues_INT64(cursor, count, opts);
52
76
  case 'INT96':
53
- return decodeValues_INT96(cursor, count);
77
+ return decodeValues_INT96(cursor, count, opts);
54
78
  case 'FLOAT':
55
- return decodeValues_FLOAT(cursor, count);
79
+ return decodeValues_FLOAT(cursor, count, opts);
56
80
  case 'DOUBLE':
57
- return decodeValues_DOUBLE(cursor, count);
81
+ return decodeValues_DOUBLE(cursor, count, opts);
58
82
  case 'BYTE_ARRAY':
59
- return decodeValues_BYTE_ARRAY(cursor, count);
83
+ return decodeValues_BYTE_ARRAY(cursor, count, opts);
60
84
  case 'FIXED_LEN_BYTE_ARRAY':
61
85
  return decodeValues_FIXED_LEN_BYTE_ARRAY(cursor, count, opts);
62
86
  default:
@@ -64,9 +88,8 @@ export function decodeValues(
64
88
  }
65
89
  }
66
90
 
67
- function encodeValues_BOOLEAN(values: boolean[]): Buffer {
68
- const buf = Buffer.alloc(Math.ceil(values.length / 8));
69
- buf.fill(0);
91
+ function encodeValues_BOOLEAN(values: boolean[]): Uint8Array {
92
+ const buf = new Uint8Array(Math.ceil(values.length / 8));
70
93
  for (let i = 0; i < values.length; i++) {
71
94
  if (values[i]) {
72
95
  buf[Math.floor(i / 8)] |= 1 << (i % 8);
@@ -75,168 +98,373 @@ function encodeValues_BOOLEAN(values: boolean[]): Buffer {
75
98
  return buf;
76
99
  }
77
100
 
78
- function decodeValues_BOOLEAN(cursor: CursorBuffer, count: number): boolean[] {
79
- const values: boolean[] = [];
101
+ function decodeValues_BOOLEAN(
102
+ cursor: CursorBuffer,
103
+ count: number,
104
+ options: ParquetCodecOptions
105
+ ): ParquetValueBuffer {
106
+ const {output, outputOffset} = getParquetValueOutput(options, count);
80
107
  for (let i = 0; i < count; i++) {
81
108
  const b = cursor.buffer[cursor.offset + Math.floor(i / 8)];
82
- values.push((b & (1 << (i % 8))) > 0);
109
+ const value = (b & (1 << (i % 8))) > 0;
110
+ output[outputOffset + i] = output instanceof Uint8Array ? Number(value) : value;
83
111
  }
84
112
  cursor.offset += Math.ceil(count / 8);
85
- return values;
113
+ return output;
86
114
  }
87
115
 
88
- function encodeValues_INT32(values: number[]): Buffer {
89
- const buf = Buffer.alloc(4 * values.length);
116
+ function encodeValues_INT32(values: number[]): Uint8Array {
117
+ const buf = new Uint8Array(4 * values.length);
90
118
  for (let i = 0; i < values.length; i++) {
91
- buf.writeInt32LE(values[i], i * 4);
119
+ writeInt32LE(buf, values[i], i * 4);
92
120
  }
93
121
  return buf;
94
122
  }
95
123
 
96
- function decodeValues_INT32(cursor: CursorBuffer, count: number): number[] {
97
- const values: number[] = [];
124
+ function decodeValues_INT32(
125
+ cursor: CursorBuffer,
126
+ count: number,
127
+ options: ParquetCodecOptions
128
+ ): ParquetValueBuffer {
129
+ const {output, outputOffset} = getParquetValueOutput(options, count);
130
+ if (output instanceof Int32Array && copyPlainTypedValues(cursor, output, outputOffset, count)) {
131
+ return output;
132
+ }
133
+ const dataView = getCursorDataView(cursor);
98
134
  for (let i = 0; i < count; i++) {
99
- values.push(cursor.buffer.readInt32LE(cursor.offset));
135
+ output[outputOffset + i] = dataView.getInt32(cursor.offset, true);
100
136
  cursor.offset += 4;
101
137
  }
102
- return values;
138
+ return output;
103
139
  }
104
140
 
105
- function encodeValues_INT64(values: number[]): Buffer {
106
- const buf = Buffer.alloc(8 * values.length);
141
+ function encodeValues_INT64(values: Array<number | bigint>): Uint8Array {
142
+ const buf = new Uint8Array(8 * values.length);
107
143
  for (let i = 0; i < values.length; i++) {
108
- INT53.writeInt64LE(values[i], buf, i * 8);
144
+ writeInt64LE(buf, values[i], i * 8);
109
145
  }
110
146
  return buf;
111
147
  }
112
148
 
113
- function decodeValues_INT64(cursor: CursorBuffer, count: number): number[] {
114
- const values: number[] = [];
149
+ function decodeValues_INT64(
150
+ cursor: CursorBuffer,
151
+ count: number,
152
+ options: ParquetCodecOptions
153
+ ): ParquetValueBuffer {
154
+ const {output, outputOffset} = getParquetValueOutput(options, count);
155
+ if (
156
+ options.int64AsBigInt &&
157
+ output instanceof BigInt64Array &&
158
+ copyPlainTypedValues(cursor, output, outputOffset, count)
159
+ ) {
160
+ return output;
161
+ }
162
+ const dataView = getCursorDataView(cursor);
115
163
  for (let i = 0; i < count; i++) {
116
- values.push(INT53.readInt64LE(cursor.buffer, cursor.offset));
164
+ const value = dataView.getBigInt64(cursor.offset, true);
165
+ output[outputOffset + i] = options.int64AsBigInt ? value : Number(value);
117
166
  cursor.offset += 8;
118
167
  }
119
- return values;
168
+ return output;
120
169
  }
121
170
 
122
- function encodeValues_INT96(values: number[]): Buffer {
123
- const buf = Buffer.alloc(12 * values.length);
171
+ function encodeValues_INT96(values: Array<number | bigint>, asTimestamp = false): Uint8Array {
172
+ const buf = new Uint8Array(12 * values.length);
124
173
  for (let i = 0; i < values.length; i++) {
125
- if (values[i] >= 0) {
126
- INT53.writeInt64LE(values[i], buf, i * 12);
127
- buf.writeUInt32LE(0, i * 12 + 8); // truncate to 64 actual precision
128
- } else {
129
- INT53.writeInt64LE(~-values[i] + 1, buf, i * 12);
130
- buf.writeUInt32LE(0xffffffff, i * 12 + 8); // truncate to 64 actual precision
174
+ if (!asTimestamp) {
175
+ writeInt64LE(buf, values[i], i * 12);
176
+ writeUInt32LE(buf, values[i] >= 0 ? 0 : 0xffffffff, i * 12 + 8);
177
+ continue;
178
+ }
179
+ const epochNanoseconds = BigInt(values[i]);
180
+ if (epochNanoseconds < INT64_MIN || epochNanoseconds > INT64_MAX) {
181
+ throw new Error(`INT96 timestamp is outside the signed 64-bit range: ${epochNanoseconds}`);
131
182
  }
183
+ const julianDayOffset = floorDivide(epochNanoseconds, NANOSECONDS_PER_DAY);
184
+ const nanosecondsOfDay = epochNanoseconds - julianDayOffset * NANOSECONDS_PER_DAY;
185
+ const julianDay = JULIAN_DAY_UNIX_EPOCH + julianDayOffset;
186
+ if (julianDay < -2147483648n || julianDay > 2147483647n) {
187
+ throw new Error(`INT96 timestamp has an unsupported Julian day: ${julianDay}`);
188
+ }
189
+ writeInt64LE(buf, nanosecondsOfDay, i * 12);
190
+ writeInt32LE(buf, Number(julianDay), i * 12 + 8);
132
191
  }
133
192
  return buf;
134
193
  }
135
194
 
136
- function decodeValues_INT96(cursor: CursorBuffer, count: number): number[] {
137
- const values: number[] = [];
195
+ function floorDivide(value: bigint, divisor: bigint): bigint {
196
+ const quotient = value / divisor;
197
+ const remainder = value % divisor;
198
+ return remainder < 0n ? quotient - 1n : quotient;
199
+ }
200
+
201
+ function decodeValues_INT96(
202
+ cursor: CursorBuffer,
203
+ count: number,
204
+ options: ParquetCodecOptions
205
+ ): ParquetValueBuffer {
206
+ const {output, outputOffset} = getParquetValueOutput(options, count);
207
+ const dataView = getCursorDataView(cursor);
138
208
  for (let i = 0; i < count; i++) {
139
- const low = INT53.readInt64LE(cursor.buffer, cursor.offset);
140
- const high = cursor.buffer.readUInt32LE(cursor.offset + 8);
141
- if (high === 0xffffffff) {
142
- values.push(~-low + 1); // truncate to 64 actual precision
209
+ if (options.int96AsTimestamp) {
210
+ const nanosecondsOfDay = dataView.getBigUint64(cursor.offset, true);
211
+ if (nanosecondsOfDay >= NANOSECONDS_PER_DAY) {
212
+ throw new Error(`Invalid INT96 nanoseconds of day: ${nanosecondsOfDay}`);
213
+ }
214
+ const julianDay = BigInt(dataView.getInt32(cursor.offset + 8, true));
215
+ const epochNanoseconds =
216
+ (julianDay - JULIAN_DAY_UNIX_EPOCH) * NANOSECONDS_PER_DAY + nanosecondsOfDay;
217
+ if (epochNanoseconds < INT64_MIN || epochNanoseconds > INT64_MAX) {
218
+ throw new Error(`INT96 timestamp is outside the signed 64-bit range: ${epochNanoseconds}`);
219
+ }
220
+ output[outputOffset + i] = epochNanoseconds;
143
221
  } else {
144
- values.push(low); // truncate to 64 actual precision
222
+ const low = Number(dataView.getBigInt64(cursor.offset, true));
223
+ const high = dataView.getUint32(cursor.offset + 8, true);
224
+ if (high === 0xffffffff) {
225
+ output[outputOffset + i] = ~-low + 1; // truncate to 64 actual precision
226
+ } else {
227
+ output[outputOffset + i] = low; // truncate to 64 actual precision
228
+ }
145
229
  }
146
230
  cursor.offset += 12;
147
231
  }
148
- return values;
232
+ return output;
149
233
  }
150
234
 
151
- function encodeValues_FLOAT(values: number[]): Buffer {
152
- const buf = Buffer.alloc(4 * values.length);
235
+ function encodeValues_FLOAT(values: number[]): Uint8Array {
236
+ const buf = new Uint8Array(4 * values.length);
153
237
  for (let i = 0; i < values.length; i++) {
154
- buf.writeFloatLE(values[i], i * 4);
238
+ writeFloatLE(buf, values[i], i * 4);
155
239
  }
156
240
  return buf;
157
241
  }
158
242
 
159
- function decodeValues_FLOAT(cursor: CursorBuffer, count: number): number[] {
160
- const values: number[] = [];
243
+ function decodeValues_FLOAT(
244
+ cursor: CursorBuffer,
245
+ count: number,
246
+ options: ParquetCodecOptions
247
+ ): ParquetValueBuffer {
248
+ const {output, outputOffset} = getParquetValueOutput(options, count);
249
+ if (output instanceof Float32Array && copyPlainTypedValues(cursor, output, outputOffset, count)) {
250
+ return output;
251
+ }
252
+ const dataView = getCursorDataView(cursor);
161
253
  for (let i = 0; i < count; i++) {
162
- values.push(cursor.buffer.readFloatLE(cursor.offset));
254
+ output[outputOffset + i] = dataView.getFloat32(cursor.offset, true);
163
255
  cursor.offset += 4;
164
256
  }
165
- return values;
257
+ return output;
166
258
  }
167
259
 
168
- function encodeValues_DOUBLE(values: number[]): Buffer {
169
- const buf = Buffer.alloc(8 * values.length);
260
+ function encodeValues_DOUBLE(values: number[]): Uint8Array {
261
+ const buf = new Uint8Array(8 * values.length);
170
262
  for (let i = 0; i < values.length; i++) {
171
- buf.writeDoubleLE(values[i], i * 8);
263
+ writeDoubleLE(buf, values[i], i * 8);
172
264
  }
173
265
  return buf;
174
266
  }
175
267
 
176
- function decodeValues_DOUBLE(cursor: CursorBuffer, count: number): number[] {
177
- const values: number[] = [];
268
+ function decodeValues_DOUBLE(
269
+ cursor: CursorBuffer,
270
+ count: number,
271
+ options: ParquetCodecOptions
272
+ ): ParquetValueBuffer {
273
+ const {output, outputOffset} = getParquetValueOutput(options, count);
274
+ if (output instanceof Float64Array && copyPlainTypedValues(cursor, output, outputOffset, count)) {
275
+ return output;
276
+ }
277
+ const dataView = getCursorDataView(cursor);
178
278
  for (let i = 0; i < count; i++) {
179
- values.push(cursor.buffer.readDoubleLE(cursor.offset));
279
+ output[outputOffset + i] = dataView.getFloat64(cursor.offset, true);
180
280
  cursor.offset += 8;
181
281
  }
182
- return values;
282
+ return output;
183
283
  }
184
284
 
185
- function encodeValues_BYTE_ARRAY(values: Buffer[]): Buffer {
285
+ function encodeValues_BYTE_ARRAY(values: any[]): Uint8Array {
286
+ const byteValues = values.map(toPrimitiveBytes);
186
287
  // tslint:disable-next-line:variable-name
187
288
  let buf_len = 0;
188
- for (let i = 0; i < values.length; i++) {
189
- values[i] = Buffer.from(values[i]);
190
- buf_len += 4 + values[i].length;
289
+ for (let i = 0; i < byteValues.length; i++) {
290
+ buf_len += 4 + byteValues[i].length;
191
291
  }
192
- const buf = Buffer.alloc(buf_len);
292
+ const buf = new Uint8Array(buf_len);
193
293
  // tslint:disable-next-line:variable-name
194
294
  let buf_pos = 0;
195
- for (let i = 0; i < values.length; i++) {
196
- buf.writeUInt32LE(values[i].length, buf_pos);
197
- values[i].copy(buf as Uint8Array, buf_pos + 4);
198
- buf_pos += 4 + values[i].length;
295
+ for (let i = 0; i < byteValues.length; i++) {
296
+ writeUInt32LE(buf, byteValues[i].length, buf_pos);
297
+ buf.set(byteValues[i], buf_pos + 4);
298
+ buf_pos += 4 + byteValues[i].length;
199
299
  }
200
300
  return buf;
201
301
  }
202
302
 
203
- function decodeValues_BYTE_ARRAY(cursor: CursorBuffer, count: number): Buffer[] {
204
- const values: Buffer[] = [];
303
+ function decodeValues_BYTE_ARRAY(
304
+ cursor: CursorBuffer,
305
+ count: number,
306
+ options: ParquetCodecOptions
307
+ ): ParquetValueBuffer {
308
+ if (options.byteArrayOutput) {
309
+ return decodeByteArraysToContiguousOutput(cursor, count, options);
310
+ }
311
+ const {output, outputOffset} = getParquetValueOutput(options, count);
312
+ const dataView = getCursorDataView(cursor);
205
313
  for (let i = 0; i < count; i++) {
206
- const len = cursor.buffer.readUInt32LE(cursor.offset);
314
+ const len = dataView.getUint32(cursor.offset, true);
207
315
  cursor.offset += 4;
208
- // values.push(cursor.buffer.buffer.slice(cursor.offset, cursor.offset + len));
209
- values.push(cursor.buffer.slice(cursor.offset, cursor.offset + len));
210
- cursor.offset += len;
316
+ output[outputOffset + i] = readByteArray(cursor, len, options.retainByteArrayViews);
211
317
  }
212
- return values;
318
+ return output;
213
319
  }
214
320
 
215
- function encodeValues_FIXED_LEN_BYTE_ARRAY(values: Buffer[], opts: ParquetCodecOptions): Buffer {
321
+ /** Decodes length-prefixed PLAIN values directly into one Arrow-compatible byte buffer. */
322
+ function decodeByteArraysToContiguousOutput(
323
+ cursor: CursorBuffer,
324
+ count: number,
325
+ options: ParquetCodecOptions
326
+ ): ParquetValueBuffer {
327
+ const byteArrayOutput = options.byteArrayOutput!;
328
+ const outputOffset = options.outputOffset || 0;
329
+ const dataView = getCursorDataView(cursor);
330
+ let byteOffset = byteArrayOutput.byteLength;
331
+ byteArrayOutput.valueOffsets[outputOffset] = byteOffset;
332
+ const remainingByteLength = (cursor.size ?? cursor.buffer.byteLength) - cursor.offset;
333
+ if (remainingByteLength < 0) {
334
+ throw new Error('PLAIN BYTE_ARRAY cursor exceeds the page buffer');
335
+ }
336
+ // PLAIN's remaining encoded bytes are an upper bound for its decoded payload because each value
337
+ // drops a four-byte length prefix. Reserve once per page instead of checking capacity per value.
338
+ reserveParquetByteArrayOutput(byteArrayOutput, remainingByteLength);
339
+ for (let valueIndex = 0; valueIndex < count; valueIndex++) {
340
+ const byteLength = dataView.getUint32(cursor.offset, true);
341
+ cursor.offset += 4;
342
+ const sourceEnd = cursor.offset + byteLength;
343
+ const destinationEnd = byteOffset + byteLength;
344
+ if (sourceEnd > (cursor.size ?? cursor.buffer.byteLength)) {
345
+ throw new Error('PLAIN BYTE_ARRAY value exceeds the page buffer');
346
+ }
347
+ if (byteLength <= MAXIMUM_INLINE_BYTE_COPY_LENGTH) {
348
+ for (let byteIndex = 0; byteIndex < byteLength; byteIndex++) {
349
+ byteArrayOutput.data[byteOffset + byteIndex] = cursor.buffer[cursor.offset + byteIndex];
350
+ }
351
+ } else {
352
+ byteArrayOutput.data.set(cursor.buffer.subarray(cursor.offset, sourceEnd), byteOffset);
353
+ }
354
+ cursor.offset = sourceEnd;
355
+ byteOffset = destinationEnd;
356
+ byteArrayOutput.valueOffsets[outputOffset + valueIndex + 1] = byteOffset;
357
+ }
358
+ byteArrayOutput.byteLength = byteOffset;
359
+ return options.output || [];
360
+ }
361
+
362
+ function encodeValues_FIXED_LEN_BYTE_ARRAY(values: any[], opts: ParquetCodecOptions): Uint8Array {
216
363
  if (!opts.typeLength) {
217
364
  throw new Error('missing option: typeLength (required for FIXED_LEN_BYTE_ARRAY)');
218
365
  }
366
+ const byteValues = values.map(toPrimitiveBytes);
219
367
  for (let i = 0; i < values.length; i++) {
220
- values[i] = Buffer.from(values[i]);
221
- if (values[i].length !== opts.typeLength) {
368
+ if (byteValues[i].length !== opts.typeLength) {
222
369
  throw new Error(`invalid value for FIXED_LEN_BYTE_ARRAY: ${values[i]}`);
223
370
  }
224
371
  }
225
- return Buffer.concat(values as Uint8Array[]);
372
+ return concatUint8Arrays(byteValues);
226
373
  }
227
374
 
228
375
  function decodeValues_FIXED_LEN_BYTE_ARRAY(
229
376
  cursor: CursorBuffer,
230
377
  count: number,
231
378
  opts: ParquetCodecOptions
232
- ): Buffer[] {
233
- const values: Buffer[] = [];
379
+ ): ParquetValueBuffer {
234
380
  if (!opts.typeLength) {
235
381
  throw new Error('missing option: typeLength (required for FIXED_LEN_BYTE_ARRAY)');
236
382
  }
383
+ if (opts.byteArrayOutput) {
384
+ return decodeFixedLengthByteArraysToContiguousOutput(cursor, count, opts.typeLength, opts);
385
+ }
386
+ const {output, outputOffset} = getParquetValueOutput(opts, count);
237
387
  for (let i = 0; i < count; i++) {
238
- values.push(cursor.buffer.slice(cursor.offset, cursor.offset + opts.typeLength));
239
- cursor.offset += opts.typeLength;
388
+ output[outputOffset + i] = readByteArray(cursor, opts.typeLength, opts.retainByteArrayViews);
240
389
  }
241
- return values;
390
+ return output;
391
+ }
392
+
393
+ /** Exposes one fixed-width PLAIN payload directly as Arrow-compatible bytes and offsets. */
394
+ function decodeFixedLengthByteArraysToContiguousOutput(
395
+ cursor: CursorBuffer,
396
+ count: number,
397
+ typeLength: number,
398
+ options: ParquetCodecOptions
399
+ ): ParquetValueBuffer {
400
+ const byteArrayOutput = options.byteArrayOutput!;
401
+ const outputOffset = options.outputOffset || 0;
402
+ const payloadByteLength = count * typeLength;
403
+ const inputEnd = cursor.offset + payloadByteLength;
404
+ if (inputEnd > (cursor.size ?? cursor.buffer.byteLength)) {
405
+ throw new Error('PLAIN FIXED_LEN_BYTE_ARRAY values exceed the page buffer');
406
+ }
407
+
408
+ let byteOffset = byteArrayOutput.byteLength;
409
+ byteArrayOutput.valueOffsets[outputOffset] = byteOffset;
410
+ if (byteOffset === 0) {
411
+ // The common single-page case can retain the original Parquet bytes without allocating either
412
+ // one view per value or a second payload buffer. A later page falls back to append-and-copy.
413
+ byteArrayOutput.data = cursor.buffer.subarray(cursor.offset, inputEnd);
414
+ } else {
415
+ reserveParquetByteArrayOutput(byteArrayOutput, payloadByteLength);
416
+ byteArrayOutput.data.set(cursor.buffer.subarray(cursor.offset, inputEnd), byteOffset);
417
+ }
418
+ cursor.offset = inputEnd;
419
+ for (let valueIndex = 0; valueIndex < count; valueIndex++) {
420
+ byteOffset += typeLength;
421
+ byteArrayOutput.valueOffsets[outputOffset + valueIndex + 1] = byteOffset;
422
+ }
423
+ byteArrayOutput.byteLength = byteOffset;
424
+ return options.output || [];
425
+ }
426
+
427
+ /** Reads one byte-array value, optionally retaining a view into the decoded page buffer. */
428
+ function readByteArray(
429
+ cursor: CursorBuffer,
430
+ byteLength: number,
431
+ retainByteArrayView: boolean | undefined
432
+ ): Uint8Array {
433
+ const value = cursor.buffer.subarray(cursor.offset, cursor.offset + byteLength);
434
+ cursor.offset += byteLength;
435
+ return retainByteArrayView ? value : copyUint8Array(value);
436
+ }
437
+
438
+ /** Creates one reusable DataView for all primitive reads from a codec cursor. */
439
+ function getCursorDataView(cursor: CursorBuffer): DataView {
440
+ return new DataView(cursor.buffer.buffer, cursor.buffer.byteOffset, cursor.buffer.byteLength);
441
+ }
442
+
443
+ /** Copies little-endian PLAIN values directly into an identical typed destination. */
444
+ function copyPlainTypedValues(
445
+ cursor: CursorBuffer,
446
+ output: Int32Array | BigInt64Array | Float32Array | Float64Array,
447
+ outputOffset: number,
448
+ count: number
449
+ ): boolean {
450
+ if (!IS_LITTLE_ENDIAN) {
451
+ return false;
452
+ }
453
+ const byteLength = count * output.BYTES_PER_ELEMENT;
454
+ const inputEnd = cursor.offset + byteLength;
455
+ if (inputEnd > (cursor.size ?? cursor.buffer.length) || outputOffset + count > output.length) {
456
+ throw new Error('Unexpected end of Parquet PLAIN values');
457
+ }
458
+ const outputBytes = new Uint8Array(
459
+ output.buffer,
460
+ output.byteOffset + outputOffset * output.BYTES_PER_ELEMENT,
461
+ byteLength
462
+ );
463
+ outputBytes.set(cursor.buffer.subarray(cursor.offset, inputEnd));
464
+ cursor.offset = inputEnd;
465
+ return true;
466
+ }
467
+
468
+ function toPrimitiveBytes(value: any): Uint8Array {
469
+ return typeof value === 'string' ? encodeUtf8(value) : toUint8Array(value);
242
470
  }