@loaders.gl/parquet 4.4.5 → 5.0.0-alpha.2

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 (674) 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/geoparquet-loader-with-parser.d.ts +33 -0
  7. package/dist/geoparquet-loader-with-parser.d.ts.map +1 -0
  8. package/dist/geoparquet-loader-with-parser.js +52 -0
  9. package/dist/geoparquet-loader-with-parser.js.map +1 -0
  10. package/dist/geoparquet-loader.d.ts +59 -0
  11. package/dist/geoparquet-loader.d.ts.map +1 -0
  12. package/dist/geoparquet-loader.js +30 -0
  13. package/dist/geoparquet-loader.js.map +1 -0
  14. package/dist/index.cjs +25873 -4776
  15. package/dist/index.cjs.map +3 -4
  16. package/dist/index.d.ts +10 -7
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +7 -11
  19. package/dist/index.js.map +1 -1
  20. package/dist/lib/arrow/convert-columns-to-row-group.js +3 -0
  21. package/dist/lib/arrow/convert-columns-to-row-group.js.map +1 -1
  22. package/dist/lib/arrow/convert-schema-from-parquet.d.ts.map +1 -1
  23. package/dist/lib/arrow/convert-schema-from-parquet.js +86 -26
  24. package/dist/lib/arrow/convert-schema-from-parquet.js.map +1 -1
  25. package/dist/lib/arrow/convert-schema-to-parquet.d.ts.map +1 -1
  26. package/dist/lib/arrow/convert-schema-to-parquet.js +16 -7
  27. package/dist/lib/arrow/convert-schema-to-parquet.js.map +1 -1
  28. package/dist/lib/arrow/create-nested-arrow-vector.d.ts +8 -0
  29. package/dist/lib/arrow/create-nested-arrow-vector.d.ts.map +1 -0
  30. package/dist/lib/arrow/create-nested-arrow-vector.js +396 -0
  31. package/dist/lib/arrow/create-nested-arrow-vector.js.map +1 -0
  32. package/dist/lib/constants.d.ts +0 -1
  33. package/dist/lib/constants.d.ts.map +1 -1
  34. package/dist/lib/constants.js +1 -2
  35. package/dist/lib/constants.js.map +1 -1
  36. package/dist/lib/encoders/encode-arrow-to-parquet.d.ts +2 -2
  37. package/dist/lib/encoders/encode-arrow-to-parquet.d.ts.map +1 -1
  38. package/dist/lib/encoders/encode-arrow-to-parquet.js +3 -10
  39. package/dist/lib/encoders/encode-arrow-to-parquet.js.map +1 -1
  40. package/dist/lib/encoders/encode-table-to-parquet-js.d.ts +5 -0
  41. package/dist/lib/encoders/encode-table-to-parquet-js.d.ts.map +1 -0
  42. package/dist/lib/encoders/encode-table-to-parquet-js.js +199 -0
  43. package/dist/lib/encoders/encode-table-to-parquet-js.js.map +1 -0
  44. package/dist/lib/geo/geospatial-metadata.d.ts +67 -0
  45. package/dist/lib/geo/geospatial-metadata.d.ts.map +1 -0
  46. package/dist/lib/geo/geospatial-metadata.js +338 -0
  47. package/dist/lib/geo/geospatial-metadata.js.map +1 -0
  48. package/dist/lib/parquet-page-index.d.ts +62 -0
  49. package/dist/lib/parquet-page-index.d.ts.map +1 -0
  50. package/dist/lib/parquet-page-index.js +377 -0
  51. package/dist/lib/parquet-page-index.js.map +1 -0
  52. package/dist/lib/parquet-predicate.d.ts +17 -0
  53. package/dist/lib/parquet-predicate.d.ts.map +1 -0
  54. package/dist/lib/parquet-predicate.js +300 -0
  55. package/dist/lib/parquet-predicate.js.map +1 -0
  56. package/dist/lib/parquet-source-worker-client.d.ts +6 -0
  57. package/dist/lib/parquet-source-worker-client.d.ts.map +1 -0
  58. package/dist/lib/parquet-source-worker-client.js +22 -0
  59. package/dist/lib/parquet-source-worker-client.js.map +1 -0
  60. package/dist/lib/parquet-source-worker-decoder.d.ts +4 -0
  61. package/dist/lib/parquet-source-worker-decoder.d.ts.map +1 -0
  62. package/dist/lib/parquet-source-worker-decoder.js +115 -0
  63. package/dist/lib/parquet-source-worker-decoder.js.map +1 -0
  64. package/dist/lib/parquet-source-worker-file.d.ts +24 -0
  65. package/dist/lib/parquet-source-worker-file.d.ts.map +1 -0
  66. package/dist/lib/parquet-source-worker-file.js +40 -0
  67. package/dist/lib/parquet-source-worker-file.js.map +1 -0
  68. package/dist/lib/parquet-source-worker-types.d.ts +97 -0
  69. package/dist/lib/parquet-source-worker-types.d.ts.map +1 -0
  70. package/dist/lib/parquet-source-worker-types.js +5 -0
  71. package/dist/lib/parquet-source-worker-types.js.map +1 -0
  72. package/dist/lib/parquet-worker-transport.d.ts +8 -0
  73. package/dist/lib/parquet-worker-transport.d.ts.map +1 -0
  74. package/dist/lib/parquet-worker-transport.js +40 -0
  75. package/dist/lib/parquet-worker-transport.js.map +1 -0
  76. package/dist/lib/parsers/convert-parquet-tables.d.ts +16 -0
  77. package/dist/lib/parsers/convert-parquet-tables.d.ts.map +1 -0
  78. package/dist/lib/parsers/convert-parquet-tables.js +30 -0
  79. package/dist/lib/parsers/convert-parquet-tables.js.map +1 -0
  80. package/dist/lib/parsers/get-parquet-schema.d.ts.map +1 -1
  81. package/dist/lib/parsers/get-parquet-schema.js +3 -1
  82. package/dist/lib/parsers/get-parquet-schema.js.map +1 -1
  83. package/dist/lib/parsers/parse-geoparquet-to-geojson.d.ts +4 -4
  84. package/dist/lib/parsers/parse-geoparquet-to-geojson.d.ts.map +1 -1
  85. package/dist/lib/parsers/parse-geoparquet-to-geojson.js +19 -6
  86. package/dist/lib/parsers/parse-geoparquet-to-geojson.js.map +1 -1
  87. package/dist/lib/parsers/parse-parquet-tables.d.ts +37 -0
  88. package/dist/lib/parsers/parse-parquet-tables.d.ts.map +1 -0
  89. package/dist/lib/parsers/parse-parquet-tables.js +50 -0
  90. package/dist/lib/parsers/parse-parquet-tables.js.map +1 -0
  91. package/dist/lib/parsers/parse-parquet-to-arrow-js.d.ts +19 -0
  92. package/dist/lib/parsers/parse-parquet-to-arrow-js.d.ts.map +1 -0
  93. package/dist/lib/parsers/parse-parquet-to-arrow-js.js +608 -0
  94. package/dist/lib/parsers/parse-parquet-to-arrow-js.js.map +1 -0
  95. package/dist/lib/parsers/parse-parquet-to-arrow.d.ts +7 -7
  96. package/dist/lib/parsers/parse-parquet-to-arrow.d.ts.map +1 -1
  97. package/dist/lib/parsers/parse-parquet-to-arrow.js +45 -32
  98. package/dist/lib/parsers/parse-parquet-to-arrow.js.map +1 -1
  99. package/dist/lib/parsers/parse-parquet-to-columns.d.ts +3 -3
  100. package/dist/lib/parsers/parse-parquet-to-columns.d.ts.map +1 -1
  101. package/dist/lib/parsers/parse-parquet-to-columns.js +1 -4
  102. package/dist/lib/parsers/parse-parquet-to-columns.js.map +1 -1
  103. package/dist/lib/parsers/parse-parquet-to-json.d.ts +3 -3
  104. package/dist/lib/parsers/parse-parquet-to-json.d.ts.map +1 -1
  105. package/dist/lib/parsers/parse-parquet-to-json.js +77 -26
  106. package/dist/lib/parsers/parse-parquet-to-json.js.map +1 -1
  107. package/dist/lib/sources/parquet-range-file.d.ts +80 -0
  108. package/dist/lib/sources/parquet-range-file.d.ts.map +1 -0
  109. package/dist/lib/sources/parquet-range-file.js +261 -0
  110. package/dist/lib/sources/parquet-range-file.js.map +1 -0
  111. package/dist/lib/sources/single-batch-queue.d.ts +24 -0
  112. package/dist/lib/sources/single-batch-queue.d.ts.map +1 -0
  113. package/dist/lib/sources/single-batch-queue.js +91 -0
  114. package/dist/lib/sources/single-batch-queue.js.map +1 -0
  115. package/dist/lib/utils/load-wasm-node.d.ts +3 -0
  116. package/dist/lib/utils/load-wasm-node.d.ts.map +1 -0
  117. package/dist/lib/utils/load-wasm-node.js +23 -0
  118. package/dist/lib/utils/load-wasm-node.js.map +1 -0
  119. package/dist/lib/utils/load-wasm.d.ts +2 -2
  120. package/dist/lib/utils/load-wasm.d.ts.map +1 -1
  121. package/dist/lib/utils/load-wasm.js +28 -12
  122. package/dist/lib/utils/load-wasm.js.map +1 -1
  123. package/dist/lib/utils/make-stream-iterator.d.ts +2 -0
  124. package/dist/lib/utils/make-stream-iterator.d.ts.map +1 -1
  125. package/dist/lib/utils/make-stream-iterator.js +123 -14
  126. package/dist/lib/utils/make-stream-iterator.js.map +1 -1
  127. package/dist/lib/utils/normalize-parquet-options.d.ts +5 -0
  128. package/dist/lib/utils/normalize-parquet-options.d.ts.map +1 -0
  129. package/dist/lib/utils/normalize-parquet-options.js +11 -0
  130. package/dist/lib/utils/normalize-parquet-options.js.map +1 -0
  131. package/dist/parquet-dataset-source.cjs +26413 -0
  132. package/dist/parquet-dataset-source.cjs.map +6 -0
  133. package/dist/parquet-dataset-source.d.ts +54 -0
  134. package/dist/parquet-dataset-source.d.ts.map +1 -0
  135. package/dist/parquet-dataset-source.js +380 -0
  136. package/dist/parquet-dataset-source.js.map +1 -0
  137. package/dist/parquet-format.d.ts +2 -0
  138. package/dist/parquet-format.d.ts.map +1 -1
  139. package/dist/parquet-format.js +2 -0
  140. package/dist/parquet-format.js.map +1 -1
  141. package/dist/parquet-js-loader-types.d.ts +57 -0
  142. package/dist/parquet-js-loader-types.d.ts.map +1 -0
  143. package/dist/parquet-js-loader-types.js +33 -0
  144. package/dist/parquet-js-loader-types.js.map +1 -0
  145. package/dist/parquet-js-loader.d.ts +32 -0
  146. package/dist/parquet-js-loader.d.ts.map +1 -0
  147. package/dist/parquet-js-loader.js +58 -0
  148. package/dist/parquet-js-loader.js.map +1 -0
  149. package/dist/parquet-js-writer.d.ts +44 -0
  150. package/dist/parquet-js-writer.d.ts.map +1 -0
  151. package/dist/parquet-js-writer.js +28 -0
  152. package/dist/parquet-js-writer.js.map +1 -0
  153. package/dist/parquet-loader-base.d.ts +25 -0
  154. package/dist/parquet-loader-base.d.ts.map +1 -0
  155. package/dist/parquet-loader-base.js +23 -0
  156. package/dist/parquet-loader-base.js.map +1 -0
  157. package/dist/parquet-loader-options.d.ts +44 -0
  158. package/dist/parquet-loader-options.d.ts.map +1 -0
  159. package/dist/parquet-loader-options.js +10 -0
  160. package/dist/parquet-loader-options.js.map +1 -0
  161. package/dist/parquet-loader-types.d.ts +61 -0
  162. package/dist/parquet-loader-types.d.ts.map +1 -0
  163. package/dist/parquet-loader-types.js +17 -0
  164. package/dist/parquet-loader-types.js.map +1 -0
  165. package/dist/parquet-loader.d.ts +42 -0
  166. package/dist/parquet-loader.d.ts.map +1 -0
  167. package/dist/parquet-loader.js +68 -0
  168. package/dist/parquet-loader.js.map +1 -0
  169. package/dist/parquet-source-capabilities.d.ts +36 -0
  170. package/dist/parquet-source-capabilities.d.ts.map +1 -0
  171. package/dist/parquet-source-capabilities.js +22 -0
  172. package/dist/parquet-source-capabilities.js.map +1 -0
  173. package/dist/parquet-source-loader-types.d.ts +72 -0
  174. package/dist/parquet-source-loader-types.d.ts.map +1 -0
  175. package/dist/parquet-source-loader-types.js +74 -0
  176. package/dist/parquet-source-loader-types.js.map +1 -0
  177. package/dist/parquet-source-loader.cjs +25975 -0
  178. package/dist/parquet-source-loader.cjs.map +6 -0
  179. package/dist/parquet-source-loader.d.ts +120 -0
  180. package/dist/parquet-source-loader.d.ts.map +1 -0
  181. package/dist/parquet-source-loader.js +812 -0
  182. package/dist/parquet-source-loader.js.map +1 -0
  183. package/dist/parquet-source-types.d.ts +384 -0
  184. package/dist/parquet-source-types.d.ts.map +1 -0
  185. package/dist/parquet-source-types.js +5 -0
  186. package/dist/parquet-source-types.js.map +1 -0
  187. package/dist/parquet-source-worker-url.d.ts +3 -0
  188. package/dist/parquet-source-worker-url.d.ts.map +1 -0
  189. package/dist/parquet-source-worker-url.js +22 -0
  190. package/dist/parquet-source-worker-url.js.map +1 -0
  191. package/dist/parquet-source-worker.js +38491 -0
  192. package/dist/parquet-source-worker.js.map +7 -0
  193. package/dist/parquet-worker-node.cjs +54779 -0
  194. package/dist/parquet-worker-node.cjs.map +7 -0
  195. package/dist/parquet-worker-url.d.ts +3 -0
  196. package/dist/parquet-worker-url.d.ts.map +1 -0
  197. package/dist/parquet-worker-url.js +15 -0
  198. package/dist/parquet-worker-url.js.map +1 -0
  199. package/dist/parquet-worker.js +19920 -0
  200. package/dist/parquet-worker.js.map +7 -0
  201. package/dist/parquet-writer.d.ts +10 -0
  202. package/dist/parquet-writer.d.ts.map +1 -0
  203. package/dist/parquet-writer.js +27 -0
  204. package/dist/parquet-writer.js.map +1 -0
  205. package/dist/parquet_wasm_bg.wasm +0 -0
  206. package/dist/parquetjs/codecs/byte-stream-split.d.ts +9 -0
  207. package/dist/parquetjs/codecs/byte-stream-split.d.ts.map +1 -0
  208. package/dist/parquetjs/codecs/byte-stream-split.js +159 -0
  209. package/dist/parquetjs/codecs/byte-stream-split.js.map +1 -0
  210. package/dist/parquetjs/codecs/declare.d.ts +20 -3
  211. package/dist/parquetjs/codecs/declare.d.ts.map +1 -1
  212. package/dist/parquetjs/codecs/declare.js +7 -1
  213. package/dist/parquetjs/codecs/declare.js.map +1 -1
  214. package/dist/parquetjs/codecs/delta.d.ts +17 -0
  215. package/dist/parquetjs/codecs/delta.d.ts.map +1 -0
  216. package/dist/parquetjs/codecs/delta.js +439 -0
  217. package/dist/parquetjs/codecs/delta.js.map +1 -0
  218. package/dist/parquetjs/codecs/dictionary.d.ts +5 -2
  219. package/dist/parquetjs/codecs/dictionary.d.ts.map +1 -1
  220. package/dist/parquetjs/codecs/dictionary.js +16 -4
  221. package/dist/parquetjs/codecs/dictionary.js.map +1 -1
  222. package/dist/parquetjs/codecs/index.d.ts.map +1 -1
  223. package/dist/parquetjs/codecs/index.js +18 -0
  224. package/dist/parquetjs/codecs/index.js.map +1 -1
  225. package/dist/parquetjs/codecs/plain.d.ts +3 -3
  226. package/dist/parquetjs/codecs/plain.d.ts.map +1 -1
  227. package/dist/parquetjs/codecs/plain.js +88 -76
  228. package/dist/parquetjs/codecs/plain.js.map +1 -1
  229. package/dist/parquetjs/codecs/rle.d.ts +3 -3
  230. package/dist/parquetjs/codecs/rle.d.ts.map +1 -1
  231. package/dist/parquetjs/codecs/rle.js +196 -68
  232. package/dist/parquetjs/codecs/rle.js.map +1 -1
  233. package/dist/parquetjs/compression.d.ts +7 -8
  234. package/dist/parquetjs/compression.d.ts.map +1 -1
  235. package/dist/parquetjs/compression.js +95 -141
  236. package/dist/parquetjs/compression.js.map +1 -1
  237. package/dist/parquetjs/encoder/dictionary-planner.d.ts +17 -0
  238. package/dist/parquetjs/encoder/dictionary-planner.d.ts.map +1 -0
  239. package/dist/parquetjs/encoder/dictionary-planner.js +64 -0
  240. package/dist/parquetjs/encoder/dictionary-planner.js.map +1 -0
  241. package/dist/parquetjs/encoder/page-planner.d.ts +11 -0
  242. package/dist/parquetjs/encoder/page-planner.d.ts.map +1 -0
  243. package/dist/parquetjs/encoder/page-planner.js +60 -0
  244. package/dist/parquetjs/encoder/page-planner.js.map +1 -0
  245. package/dist/parquetjs/encoder/parquet-encoder.d.ts +11 -4
  246. package/dist/parquetjs/encoder/parquet-encoder.d.ts.map +1 -1
  247. package/dist/parquetjs/encoder/parquet-encoder.js +259 -52
  248. package/dist/parquetjs/encoder/parquet-encoder.js.map +1 -1
  249. package/dist/parquetjs/parquet-thrift/BsonType.d.ts +1 -1
  250. package/dist/parquetjs/parquet-thrift/BsonType.d.ts.map +1 -1
  251. package/dist/parquetjs/parquet-thrift/BsonType.js +1 -1
  252. package/dist/parquetjs/parquet-thrift/BsonType.js.map +1 -1
  253. package/dist/parquetjs/parquet-thrift/ColumnChunk.d.ts +2 -2
  254. package/dist/parquetjs/parquet-thrift/ColumnChunk.d.ts.map +1 -1
  255. package/dist/parquetjs/parquet-thrift/ColumnChunk.js +2 -2
  256. package/dist/parquetjs/parquet-thrift/ColumnChunk.js.map +1 -1
  257. package/dist/parquetjs/parquet-thrift/ColumnIndex.d.ts +6 -6
  258. package/dist/parquetjs/parquet-thrift/ColumnIndex.d.ts.map +1 -1
  259. package/dist/parquetjs/parquet-thrift/ColumnIndex.js +3 -3
  260. package/dist/parquetjs/parquet-thrift/ColumnIndex.js.map +1 -1
  261. package/dist/parquetjs/parquet-thrift/ColumnMetaData.d.ts +2 -2
  262. package/dist/parquetjs/parquet-thrift/ColumnMetaData.d.ts.map +1 -1
  263. package/dist/parquetjs/parquet-thrift/ColumnMetaData.js +2 -2
  264. package/dist/parquetjs/parquet-thrift/ColumnMetaData.js.map +1 -1
  265. package/dist/parquetjs/parquet-thrift/ColumnOrder.d.ts +1 -1
  266. package/dist/parquetjs/parquet-thrift/ColumnOrder.d.ts.map +1 -1
  267. package/dist/parquetjs/parquet-thrift/ColumnOrder.js +1 -1
  268. package/dist/parquetjs/parquet-thrift/ColumnOrder.js.map +1 -1
  269. package/dist/parquetjs/parquet-thrift/DataPageHeader.d.ts +1 -1
  270. package/dist/parquetjs/parquet-thrift/DataPageHeader.d.ts.map +1 -1
  271. package/dist/parquetjs/parquet-thrift/DataPageHeader.js +1 -1
  272. package/dist/parquetjs/parquet-thrift/DataPageHeader.js.map +1 -1
  273. package/dist/parquetjs/parquet-thrift/DataPageHeaderV2.d.ts +1 -1
  274. package/dist/parquetjs/parquet-thrift/DataPageHeaderV2.d.ts.map +1 -1
  275. package/dist/parquetjs/parquet-thrift/DataPageHeaderV2.js +1 -1
  276. package/dist/parquetjs/parquet-thrift/DataPageHeaderV2.js.map +1 -1
  277. package/dist/parquetjs/parquet-thrift/DateType.d.ts +1 -1
  278. package/dist/parquetjs/parquet-thrift/DateType.d.ts.map +1 -1
  279. package/dist/parquetjs/parquet-thrift/DateType.js +1 -1
  280. package/dist/parquetjs/parquet-thrift/DateType.js.map +1 -1
  281. package/dist/parquetjs/parquet-thrift/DecimalType.d.ts +1 -1
  282. package/dist/parquetjs/parquet-thrift/DecimalType.d.ts.map +1 -1
  283. package/dist/parquetjs/parquet-thrift/DecimalType.js +1 -1
  284. package/dist/parquetjs/parquet-thrift/DecimalType.js.map +1 -1
  285. package/dist/parquetjs/parquet-thrift/DictionaryPageHeader.d.ts +1 -1
  286. package/dist/parquetjs/parquet-thrift/DictionaryPageHeader.d.ts.map +1 -1
  287. package/dist/parquetjs/parquet-thrift/DictionaryPageHeader.js +1 -1
  288. package/dist/parquetjs/parquet-thrift/DictionaryPageHeader.js.map +1 -1
  289. package/dist/parquetjs/parquet-thrift/EdgeInterpolationAlgorithm.d.ts +8 -0
  290. package/dist/parquetjs/parquet-thrift/EdgeInterpolationAlgorithm.d.ts.map +1 -0
  291. package/dist/parquetjs/parquet-thrift/EdgeInterpolationAlgorithm.js +14 -0
  292. package/dist/parquetjs/parquet-thrift/EdgeInterpolationAlgorithm.js.map +1 -0
  293. package/dist/parquetjs/parquet-thrift/Encoding.d.ts +2 -1
  294. package/dist/parquetjs/parquet-thrift/Encoding.d.ts.map +1 -1
  295. package/dist/parquetjs/parquet-thrift/Encoding.js +1 -0
  296. package/dist/parquetjs/parquet-thrift/Encoding.js.map +1 -1
  297. package/dist/parquetjs/parquet-thrift/EnumType.d.ts +1 -1
  298. package/dist/parquetjs/parquet-thrift/EnumType.d.ts.map +1 -1
  299. package/dist/parquetjs/parquet-thrift/EnumType.js +1 -1
  300. package/dist/parquetjs/parquet-thrift/EnumType.js.map +1 -1
  301. package/dist/parquetjs/parquet-thrift/FileMetaData.d.ts +2 -2
  302. package/dist/parquetjs/parquet-thrift/FileMetaData.d.ts.map +1 -1
  303. package/dist/parquetjs/parquet-thrift/FileMetaData.js +2 -2
  304. package/dist/parquetjs/parquet-thrift/FileMetaData.js.map +1 -1
  305. package/dist/parquetjs/parquet-thrift/Float16Type.d.ts +9 -0
  306. package/dist/parquetjs/parquet-thrift/Float16Type.d.ts.map +1 -0
  307. package/dist/parquetjs/parquet-thrift/Float16Type.js +27 -0
  308. package/dist/parquetjs/parquet-thrift/Float16Type.js.map +1 -0
  309. package/dist/parquetjs/parquet-thrift/GeographyType.d.ts +14 -0
  310. package/dist/parquetjs/parquet-thrift/GeographyType.d.ts.map +1 -0
  311. package/dist/parquetjs/parquet-thrift/GeographyType.js +51 -0
  312. package/dist/parquetjs/parquet-thrift/GeographyType.js.map +1 -0
  313. package/dist/parquetjs/parquet-thrift/GeometryType.d.ts +11 -0
  314. package/dist/parquetjs/parquet-thrift/GeometryType.d.ts.map +1 -0
  315. package/dist/parquetjs/parquet-thrift/GeometryType.js +41 -0
  316. package/dist/parquetjs/parquet-thrift/GeometryType.js.map +1 -0
  317. package/dist/parquetjs/parquet-thrift/IndexPageHeader.d.ts +1 -1
  318. package/dist/parquetjs/parquet-thrift/IndexPageHeader.d.ts.map +1 -1
  319. package/dist/parquetjs/parquet-thrift/IndexPageHeader.js +1 -1
  320. package/dist/parquetjs/parquet-thrift/IndexPageHeader.js.map +1 -1
  321. package/dist/parquetjs/parquet-thrift/IntType.d.ts +1 -1
  322. package/dist/parquetjs/parquet-thrift/IntType.d.ts.map +1 -1
  323. package/dist/parquetjs/parquet-thrift/IntType.js +1 -1
  324. package/dist/parquetjs/parquet-thrift/IntType.js.map +1 -1
  325. package/dist/parquetjs/parquet-thrift/JsonType.d.ts +1 -1
  326. package/dist/parquetjs/parquet-thrift/JsonType.d.ts.map +1 -1
  327. package/dist/parquetjs/parquet-thrift/JsonType.js +1 -1
  328. package/dist/parquetjs/parquet-thrift/JsonType.js.map +1 -1
  329. package/dist/parquetjs/parquet-thrift/KeyValue.d.ts +1 -1
  330. package/dist/parquetjs/parquet-thrift/KeyValue.d.ts.map +1 -1
  331. package/dist/parquetjs/parquet-thrift/KeyValue.js +1 -1
  332. package/dist/parquetjs/parquet-thrift/KeyValue.js.map +1 -1
  333. package/dist/parquetjs/parquet-thrift/ListType.d.ts +1 -1
  334. package/dist/parquetjs/parquet-thrift/ListType.d.ts.map +1 -1
  335. package/dist/parquetjs/parquet-thrift/ListType.js +1 -1
  336. package/dist/parquetjs/parquet-thrift/ListType.js.map +1 -1
  337. package/dist/parquetjs/parquet-thrift/LogicalType.d.ts +17 -1
  338. package/dist/parquetjs/parquet-thrift/LogicalType.d.ts.map +1 -1
  339. package/dist/parquetjs/parquet-thrift/LogicalType.js +97 -1
  340. package/dist/parquetjs/parquet-thrift/LogicalType.js.map +1 -1
  341. package/dist/parquetjs/parquet-thrift/MapType.d.ts +1 -1
  342. package/dist/parquetjs/parquet-thrift/MapType.d.ts.map +1 -1
  343. package/dist/parquetjs/parquet-thrift/MapType.js +1 -1
  344. package/dist/parquetjs/parquet-thrift/MapType.js.map +1 -1
  345. package/dist/parquetjs/parquet-thrift/MicroSeconds.d.ts +1 -1
  346. package/dist/parquetjs/parquet-thrift/MicroSeconds.d.ts.map +1 -1
  347. package/dist/parquetjs/parquet-thrift/MicroSeconds.js +1 -1
  348. package/dist/parquetjs/parquet-thrift/MicroSeconds.js.map +1 -1
  349. package/dist/parquetjs/parquet-thrift/MilliSeconds.d.ts +1 -1
  350. package/dist/parquetjs/parquet-thrift/MilliSeconds.d.ts.map +1 -1
  351. package/dist/parquetjs/parquet-thrift/MilliSeconds.js +1 -1
  352. package/dist/parquetjs/parquet-thrift/MilliSeconds.js.map +1 -1
  353. package/dist/parquetjs/parquet-thrift/NanoSeconds.d.ts +9 -0
  354. package/dist/parquetjs/parquet-thrift/NanoSeconds.d.ts.map +1 -0
  355. package/dist/parquetjs/parquet-thrift/NanoSeconds.js +27 -0
  356. package/dist/parquetjs/parquet-thrift/NanoSeconds.js.map +1 -0
  357. package/dist/parquetjs/parquet-thrift/NullType.d.ts +1 -1
  358. package/dist/parquetjs/parquet-thrift/NullType.d.ts.map +1 -1
  359. package/dist/parquetjs/parquet-thrift/NullType.js +1 -1
  360. package/dist/parquetjs/parquet-thrift/NullType.js.map +1 -1
  361. package/dist/parquetjs/parquet-thrift/OffsetIndex.d.ts +1 -1
  362. package/dist/parquetjs/parquet-thrift/OffsetIndex.d.ts.map +1 -1
  363. package/dist/parquetjs/parquet-thrift/OffsetIndex.js +1 -1
  364. package/dist/parquetjs/parquet-thrift/OffsetIndex.js.map +1 -1
  365. package/dist/parquetjs/parquet-thrift/PageEncodingStats.d.ts +1 -1
  366. package/dist/parquetjs/parquet-thrift/PageEncodingStats.d.ts.map +1 -1
  367. package/dist/parquetjs/parquet-thrift/PageEncodingStats.js +1 -1
  368. package/dist/parquetjs/parquet-thrift/PageEncodingStats.js.map +1 -1
  369. package/dist/parquetjs/parquet-thrift/PageHeader.d.ts +1 -1
  370. package/dist/parquetjs/parquet-thrift/PageHeader.d.ts.map +1 -1
  371. package/dist/parquetjs/parquet-thrift/PageHeader.js +1 -1
  372. package/dist/parquetjs/parquet-thrift/PageHeader.js.map +1 -1
  373. package/dist/parquetjs/parquet-thrift/PageLocation.d.ts +2 -2
  374. package/dist/parquetjs/parquet-thrift/PageLocation.d.ts.map +1 -1
  375. package/dist/parquetjs/parquet-thrift/PageLocation.js +2 -2
  376. package/dist/parquetjs/parquet-thrift/PageLocation.js.map +1 -1
  377. package/dist/parquetjs/parquet-thrift/RowGroup.d.ts +2 -2
  378. package/dist/parquetjs/parquet-thrift/RowGroup.d.ts.map +1 -1
  379. package/dist/parquetjs/parquet-thrift/RowGroup.js +2 -2
  380. package/dist/parquetjs/parquet-thrift/RowGroup.js.map +1 -1
  381. package/dist/parquetjs/parquet-thrift/SchemaElement.d.ts +1 -1
  382. package/dist/parquetjs/parquet-thrift/SchemaElement.d.ts.map +1 -1
  383. package/dist/parquetjs/parquet-thrift/SchemaElement.js +1 -1
  384. package/dist/parquetjs/parquet-thrift/SchemaElement.js.map +1 -1
  385. package/dist/parquetjs/parquet-thrift/SortingColumn.d.ts +1 -1
  386. package/dist/parquetjs/parquet-thrift/SortingColumn.d.ts.map +1 -1
  387. package/dist/parquetjs/parquet-thrift/SortingColumn.js +1 -1
  388. package/dist/parquetjs/parquet-thrift/SortingColumn.js.map +1 -1
  389. package/dist/parquetjs/parquet-thrift/Statistics.d.ts +14 -10
  390. package/dist/parquetjs/parquet-thrift/Statistics.d.ts.map +1 -1
  391. package/dist/parquetjs/parquet-thrift/Statistics.js +38 -2
  392. package/dist/parquetjs/parquet-thrift/Statistics.js.map +1 -1
  393. package/dist/parquetjs/parquet-thrift/StringType.d.ts +1 -1
  394. package/dist/parquetjs/parquet-thrift/StringType.d.ts.map +1 -1
  395. package/dist/parquetjs/parquet-thrift/StringType.js +1 -1
  396. package/dist/parquetjs/parquet-thrift/StringType.js.map +1 -1
  397. package/dist/parquetjs/parquet-thrift/TimeType.d.ts +1 -1
  398. package/dist/parquetjs/parquet-thrift/TimeType.d.ts.map +1 -1
  399. package/dist/parquetjs/parquet-thrift/TimeType.js +1 -1
  400. package/dist/parquetjs/parquet-thrift/TimeType.js.map +1 -1
  401. package/dist/parquetjs/parquet-thrift/TimeUnit.d.ts +5 -1
  402. package/dist/parquetjs/parquet-thrift/TimeUnit.d.ts.map +1 -1
  403. package/dist/parquetjs/parquet-thrift/TimeUnit.js +25 -1
  404. package/dist/parquetjs/parquet-thrift/TimeUnit.js.map +1 -1
  405. package/dist/parquetjs/parquet-thrift/TimestampType.d.ts +1 -1
  406. package/dist/parquetjs/parquet-thrift/TimestampType.d.ts.map +1 -1
  407. package/dist/parquetjs/parquet-thrift/TimestampType.js +1 -1
  408. package/dist/parquetjs/parquet-thrift/TimestampType.js.map +1 -1
  409. package/dist/parquetjs/parquet-thrift/TypeDefinedOrder.d.ts +1 -1
  410. package/dist/parquetjs/parquet-thrift/TypeDefinedOrder.d.ts.map +1 -1
  411. package/dist/parquetjs/parquet-thrift/TypeDefinedOrder.js +1 -1
  412. package/dist/parquetjs/parquet-thrift/TypeDefinedOrder.js.map +1 -1
  413. package/dist/parquetjs/parquet-thrift/UUIDType.d.ts +1 -1
  414. package/dist/parquetjs/parquet-thrift/UUIDType.d.ts.map +1 -1
  415. package/dist/parquetjs/parquet-thrift/UUIDType.js +1 -1
  416. package/dist/parquetjs/parquet-thrift/UUIDType.js.map +1 -1
  417. package/dist/parquetjs/parquet-thrift/VariantType.d.ts +11 -0
  418. package/dist/parquetjs/parquet-thrift/VariantType.d.ts.map +1 -0
  419. package/dist/parquetjs/parquet-thrift/VariantType.js +41 -0
  420. package/dist/parquetjs/parquet-thrift/VariantType.js.map +1 -0
  421. package/dist/parquetjs/parquet-thrift/index.d.ts +6 -2
  422. package/dist/parquetjs/parquet-thrift/index.d.ts.map +1 -1
  423. package/dist/parquetjs/parquet-thrift/index.js +6 -2
  424. package/dist/parquetjs/parquet-thrift/index.js.map +1 -1
  425. package/dist/parquetjs/parser/decoders.d.ts +14 -3
  426. package/dist/parquetjs/parser/decoders.d.ts.map +1 -1
  427. package/dist/parquetjs/parser/decoders.js +381 -117
  428. package/dist/parquetjs/parser/decoders.js.map +1 -1
  429. package/dist/parquetjs/parser/parquet-reader.d.ts +35 -10
  430. package/dist/parquetjs/parser/parquet-reader.d.ts.map +1 -1
  431. package/dist/parquetjs/parser/parquet-reader.js +179 -59
  432. package/dist/parquetjs/parser/parquet-reader.js.map +1 -1
  433. package/dist/parquetjs/schema/declare.d.ts +62 -8
  434. package/dist/parquetjs/schema/declare.d.ts.map +1 -1
  435. package/dist/parquetjs/schema/declare.js.map +1 -1
  436. package/dist/parquetjs/schema/schema.d.ts +3 -0
  437. package/dist/parquetjs/schema/schema.d.ts.map +1 -1
  438. package/dist/parquetjs/schema/schema.js +21 -3
  439. package/dist/parquetjs/schema/schema.js.map +1 -1
  440. package/dist/parquetjs/schema/shred.d.ts +2 -0
  441. package/dist/parquetjs/schema/shred.d.ts.map +1 -1
  442. package/dist/parquetjs/schema/shred.js +71 -23
  443. package/dist/parquetjs/schema/shred.js.map +1 -1
  444. package/dist/parquetjs/schema/types.d.ts.map +1 -1
  445. package/dist/parquetjs/schema/types.js +272 -51
  446. package/dist/parquetjs/schema/types.js.map +1 -1
  447. package/dist/parquetjs/utils/binary-utils.d.ts +41 -0
  448. package/dist/parquetjs/utils/binary-utils.d.ts.map +1 -0
  449. package/dist/parquetjs/utils/binary-utils.js +106 -0
  450. package/dist/parquetjs/utils/binary-utils.js.map +1 -0
  451. package/dist/parquetjs/utils/file-utils.d.ts +1 -1
  452. package/dist/parquetjs/utils/file-utils.d.ts.map +1 -1
  453. package/dist/parquetjs/utils/file-utils.js +3 -3
  454. package/dist/parquetjs/utils/file-utils.js.map +1 -1
  455. package/dist/parquetjs/utils/read-utils.d.ts +14 -6
  456. package/dist/parquetjs/utils/read-utils.d.ts.map +1 -1
  457. package/dist/parquetjs/utils/read-utils.js +46 -39
  458. package/dist/parquetjs/utils/read-utils.js.map +1 -1
  459. package/dist/parquetjs/utils/thrift-runtime.d.ts +106 -0
  460. package/dist/parquetjs/utils/thrift-runtime.d.ts.map +1 -0
  461. package/dist/parquetjs/utils/thrift-runtime.js +50 -0
  462. package/dist/parquetjs/utils/thrift-runtime.js.map +1 -0
  463. package/dist/parquetjs/utils/uint8-array-compact-protocol-writer.d.ts +78 -0
  464. package/dist/parquetjs/utils/uint8-array-compact-protocol-writer.d.ts.map +1 -0
  465. package/dist/parquetjs/utils/uint8-array-compact-protocol-writer.js +213 -0
  466. package/dist/parquetjs/utils/uint8-array-compact-protocol-writer.js.map +1 -0
  467. package/dist/parquetjs/utils/uint8-array-compact-protocol.d.ts +80 -0
  468. package/dist/parquetjs/utils/uint8-array-compact-protocol.d.ts.map +1 -0
  469. package/dist/parquetjs/utils/uint8-array-compact-protocol.js +276 -0
  470. package/dist/parquetjs/utils/uint8-array-compact-protocol.js.map +1 -0
  471. package/dist/parquetjs/utils/uint8-array-transport.d.ts +25 -0
  472. package/dist/parquetjs/utils/uint8-array-transport.d.ts.map +1 -0
  473. package/dist/parquetjs/utils/uint8-array-transport.js +62 -0
  474. package/dist/parquetjs/utils/uint8-array-transport.js.map +1 -0
  475. package/dist/polyfills/process.d.ts +12 -0
  476. package/dist/polyfills/process.d.ts.map +1 -0
  477. package/dist/polyfills/process.js +17 -0
  478. package/dist/polyfills/process.js.map +1 -0
  479. package/dist/unbundled.d.ts +9 -0
  480. package/dist/unbundled.d.ts.map +1 -0
  481. package/dist/unbundled.js +10 -0
  482. package/dist/unbundled.js.map +1 -0
  483. package/dist/wasm.d.ts +3 -0
  484. package/dist/wasm.d.ts.map +1 -0
  485. package/dist/wasm.js +6 -0
  486. package/dist/wasm.js.map +1 -0
  487. package/dist/workers/parquet-source-worker.d.ts +2 -0
  488. package/dist/workers/parquet-source-worker.d.ts.map +1 -0
  489. package/dist/workers/parquet-source-worker.js +17 -0
  490. package/dist/workers/parquet-source-worker.js.map +1 -0
  491. package/dist/workers/parquet-worker-node.d.ts +2 -0
  492. package/dist/workers/parquet-worker-node.d.ts.map +1 -0
  493. package/dist/workers/parquet-worker-node.js +5 -0
  494. package/dist/workers/parquet-worker-node.js.map +1 -0
  495. package/dist/workers/parquet-worker.d.ts +2 -0
  496. package/dist/workers/parquet-worker.d.ts.map +1 -0
  497. package/dist/workers/parquet-worker.js +27 -0
  498. package/dist/workers/parquet-worker.js.map +1 -0
  499. package/package.json +63 -33
  500. package/src/bundled.ts +33 -0
  501. package/src/geoparquet-loader-with-parser.ts +95 -0
  502. package/src/geoparquet-loader.ts +54 -0
  503. package/src/index.ts +49 -23
  504. package/src/lib/arrow/convert-columns-to-row-group.ts +3 -0
  505. package/src/lib/arrow/convert-schema-from-parquet.ts +97 -30
  506. package/src/lib/arrow/convert-schema-to-parquet.ts +16 -7
  507. package/src/lib/arrow/create-nested-arrow-vector.ts +589 -0
  508. package/src/lib/constants.ts +0 -2
  509. package/src/lib/encoders/encode-arrow-to-parquet.ts +10 -16
  510. package/src/lib/encoders/encode-table-to-parquet-js.ts +261 -0
  511. package/src/lib/geo/geospatial-metadata.ts +457 -0
  512. package/src/lib/parquet-page-index.ts +581 -0
  513. package/src/lib/parquet-predicate.ts +374 -0
  514. package/src/lib/parquet-source-worker-client.ts +39 -0
  515. package/src/lib/parquet-source-worker-decoder.ts +156 -0
  516. package/src/lib/parquet-source-worker-file.ts +56 -0
  517. package/src/lib/parquet-source-worker-types.ts +107 -0
  518. package/src/lib/parquet-worker-transport.ts +57 -0
  519. package/src/lib/parsers/convert-parquet-tables.ts +39 -0
  520. package/src/lib/parsers/get-parquet-schema.ts +3 -1
  521. package/src/lib/parsers/parse-geoparquet-to-geojson.ts +27 -14
  522. package/src/lib/parsers/parse-parquet-tables.ts +82 -0
  523. package/src/lib/parsers/parse-parquet-to-arrow-js.ts +829 -0
  524. package/src/lib/parsers/parse-parquet-to-arrow.ts +63 -36
  525. package/src/lib/parsers/parse-parquet-to-columns.ts +6 -7
  526. package/src/lib/parsers/parse-parquet-to-json.ts +101 -33
  527. package/src/lib/sources/parquet-range-file.ts +359 -0
  528. package/src/lib/sources/single-batch-queue.ts +95 -0
  529. package/src/lib/utils/load-wasm-node.ts +25 -0
  530. package/src/lib/utils/load-wasm.ts +36 -13
  531. package/src/lib/utils/make-stream-iterator.ts +126 -14
  532. package/src/lib/utils/normalize-parquet-options.ts +14 -0
  533. package/src/parquet-dataset-source.ts +488 -0
  534. package/src/parquet-format.ts +2 -0
  535. package/src/parquet-js-loader-types.ts +52 -0
  536. package/src/parquet-js-loader.ts +83 -0
  537. package/src/parquet-js-writer.ts +68 -0
  538. package/src/parquet-loader-base.ts +34 -0
  539. package/src/parquet-loader-options.ts +51 -0
  540. package/src/parquet-loader-types.ts +35 -0
  541. package/src/parquet-loader.ts +115 -0
  542. package/src/parquet-source-capabilities.ts +56 -0
  543. package/src/parquet-source-loader-types.ts +87 -0
  544. package/src/parquet-source-loader.ts +1265 -0
  545. package/src/parquet-source-types.ts +458 -0
  546. package/src/parquet-source-worker-url.ts +23 -0
  547. package/src/parquet-worker-url.ts +18 -0
  548. package/src/parquet-writer.ts +42 -0
  549. package/src/parquetjs/LICENSE +23 -1
  550. package/src/parquetjs/codecs/byte-stream-split.ts +221 -0
  551. package/src/parquetjs/codecs/declare.ts +35 -3
  552. package/src/parquetjs/codecs/delta.ts +587 -0
  553. package/src/parquetjs/codecs/dictionary.ts +22 -4
  554. package/src/parquetjs/codecs/index.ts +18 -0
  555. package/src/parquetjs/codecs/plain.ts +149 -87
  556. package/src/parquetjs/codecs/rle.ts +268 -82
  557. package/src/parquetjs/compression.ts +110 -155
  558. package/src/parquetjs/encoder/dictionary-planner.ts +99 -0
  559. package/src/parquetjs/encoder/page-planner.ts +83 -0
  560. package/src/parquetjs/encoder/parquet-encoder.ts +378 -77
  561. package/src/parquetjs/parquet-thrift/BsonType.ts +1 -1
  562. package/src/parquetjs/parquet-thrift/ColumnChunk.ts +2 -2
  563. package/src/parquetjs/parquet-thrift/ColumnIndex.ts +13 -13
  564. package/src/parquetjs/parquet-thrift/ColumnMetaData.ts +2 -2
  565. package/src/parquetjs/parquet-thrift/ColumnOrder.ts +1 -1
  566. package/src/parquetjs/parquet-thrift/DataPageHeader.ts +1 -1
  567. package/src/parquetjs/parquet-thrift/DataPageHeaderV2.ts +1 -1
  568. package/src/parquetjs/parquet-thrift/DateType.ts +1 -1
  569. package/src/parquetjs/parquet-thrift/DecimalType.ts +1 -1
  570. package/src/parquetjs/parquet-thrift/DictionaryPageHeader.ts +1 -1
  571. package/src/parquetjs/parquet-thrift/EdgeInterpolationAlgorithm.ts +13 -0
  572. package/src/parquetjs/parquet-thrift/Encoding.ts +2 -1
  573. package/src/parquetjs/parquet-thrift/EnumType.ts +1 -1
  574. package/src/parquetjs/parquet-thrift/FileMetaData.ts +2 -2
  575. package/src/parquetjs/parquet-thrift/Float16Type.ts +28 -0
  576. package/src/parquetjs/parquet-thrift/GeographyType.ts +54 -0
  577. package/src/parquetjs/parquet-thrift/GeometryType.ts +43 -0
  578. package/src/parquetjs/parquet-thrift/IndexPageHeader.ts +1 -1
  579. package/src/parquetjs/parquet-thrift/IntType.ts +1 -1
  580. package/src/parquetjs/parquet-thrift/JsonType.ts +1 -1
  581. package/src/parquetjs/parquet-thrift/KeyValue.ts +1 -1
  582. package/src/parquetjs/parquet-thrift/ListType.ts +1 -1
  583. package/src/parquetjs/parquet-thrift/LogicalType.ts +97 -1
  584. package/src/parquetjs/parquet-thrift/MapType.ts +1 -1
  585. package/src/parquetjs/parquet-thrift/MicroSeconds.ts +1 -1
  586. package/src/parquetjs/parquet-thrift/MilliSeconds.ts +1 -1
  587. package/src/parquetjs/parquet-thrift/NanoSeconds.ts +28 -0
  588. package/src/parquetjs/parquet-thrift/NullType.ts +1 -1
  589. package/src/parquetjs/parquet-thrift/OffsetIndex.ts +1 -1
  590. package/src/parquetjs/parquet-thrift/PageEncodingStats.ts +1 -1
  591. package/src/parquetjs/parquet-thrift/PageHeader.ts +1 -1
  592. package/src/parquetjs/parquet-thrift/PageLocation.ts +2 -2
  593. package/src/parquetjs/parquet-thrift/RowGroup.ts +2 -2
  594. package/src/parquetjs/parquet-thrift/SchemaElement.ts +1 -1
  595. package/src/parquetjs/parquet-thrift/SortingColumn.ts +1 -1
  596. package/src/parquetjs/parquet-thrift/Statistics.ts +50 -14
  597. package/src/parquetjs/parquet-thrift/StringType.ts +1 -1
  598. package/src/parquetjs/parquet-thrift/TimeType.ts +1 -1
  599. package/src/parquetjs/parquet-thrift/TimeUnit.ts +25 -1
  600. package/src/parquetjs/parquet-thrift/TimestampType.ts +1 -1
  601. package/src/parquetjs/parquet-thrift/TypeDefinedOrder.ts +1 -1
  602. package/src/parquetjs/parquet-thrift/UUIDType.ts +1 -1
  603. package/src/parquetjs/parquet-thrift/VariantType.ts +43 -0
  604. package/src/parquetjs/parquet-thrift/index.ts +6 -4
  605. package/src/parquetjs/parser/decoders.ts +487 -133
  606. package/src/parquetjs/parser/parquet-reader.ts +297 -71
  607. package/src/parquetjs/schema/declare.ts +99 -7
  608. package/src/parquetjs/schema/schema.ts +23 -3
  609. package/src/parquetjs/schema/shred.ts +112 -35
  610. package/src/parquetjs/schema/types.ts +294 -61
  611. package/src/parquetjs/utils/binary-utils.ts +132 -0
  612. package/src/parquetjs/utils/file-utils.ts +4 -4
  613. package/src/parquetjs/utils/read-utils.ts +56 -55
  614. package/src/parquetjs/utils/thrift-runtime.ts +109 -0
  615. package/src/parquetjs/utils/uint8-array-compact-protocol-writer.ts +254 -0
  616. package/src/parquetjs/utils/uint8-array-compact-protocol.ts +322 -0
  617. package/src/parquetjs/utils/uint8-array-transport.ts +79 -0
  618. package/src/polyfills/process.ts +17 -0
  619. package/src/unbundled.ts +33 -0
  620. package/src/wasm.ts +6 -0
  621. package/src/workers/parquet-source-worker.ts +21 -0
  622. package/src/workers/parquet-worker-node.ts +5 -0
  623. package/src/workers/parquet-worker.ts +31 -0
  624. package/dist/parquet-arrow-loader.d.ts +0 -43
  625. package/dist/parquet-arrow-loader.d.ts.map +0 -1
  626. package/dist/parquet-arrow-loader.js +0 -49
  627. package/dist/parquet-arrow-loader.js.map +0 -1
  628. package/dist/parquet-arrow-writer.d.ts +0 -9
  629. package/dist/parquet-arrow-writer.d.ts.map +0 -1
  630. package/dist/parquet-arrow-writer.js +0 -23
  631. package/dist/parquet-arrow-writer.js.map +0 -1
  632. package/dist/parquet-json-loader.d.ts +0 -148
  633. package/dist/parquet-json-loader.d.ts.map +0 -1
  634. package/dist/parquet-json-loader.js +0 -106
  635. package/dist/parquet-json-loader.js.map +0 -1
  636. package/dist/parquet-json-writer.d.ts +0 -19
  637. package/dist/parquet-json-writer.d.ts.map +0 -1
  638. package/dist/parquet-json-writer.js +0 -20
  639. package/dist/parquet-json-writer.js.map +0 -1
  640. package/dist/polyfills/buffer/buffer-polyfill.browser.d.ts +0 -3
  641. package/dist/polyfills/buffer/buffer-polyfill.browser.d.ts.map +0 -1
  642. package/dist/polyfills/buffer/buffer-polyfill.browser.js +0 -12
  643. package/dist/polyfills/buffer/buffer-polyfill.browser.js.map +0 -1
  644. package/dist/polyfills/buffer/buffer-polyfill.node.d.ts +0 -3
  645. package/dist/polyfills/buffer/buffer-polyfill.node.d.ts.map +0 -1
  646. package/dist/polyfills/buffer/buffer-polyfill.node.js +0 -17
  647. package/dist/polyfills/buffer/buffer-polyfill.node.js.map +0 -1
  648. package/dist/polyfills/buffer/buffer.d.ts +0 -222
  649. package/dist/polyfills/buffer/buffer.d.ts.map +0 -1
  650. package/dist/polyfills/buffer/buffer.js +0 -1868
  651. package/dist/polyfills/buffer/buffer.js.map +0 -1
  652. package/dist/polyfills/buffer/index.d.ts +0 -4
  653. package/dist/polyfills/buffer/index.d.ts.map +0 -1
  654. package/dist/polyfills/buffer/index.js +0 -9
  655. package/dist/polyfills/buffer/index.js.map +0 -1
  656. package/dist/polyfills/buffer/install-buffer-polyfill.d.ts +0 -2
  657. package/dist/polyfills/buffer/install-buffer-polyfill.d.ts.map +0 -1
  658. package/dist/polyfills/buffer/install-buffer-polyfill.js +0 -10
  659. package/dist/polyfills/buffer/install-buffer-polyfill.js.map +0 -1
  660. package/dist/workers/parquet-json-worker.d.ts +0 -2
  661. package/dist/workers/parquet-json-worker.d.ts.map +0 -1
  662. package/dist/workers/parquet-json-worker.js +0 -7
  663. package/dist/workers/parquet-json-worker.js.map +0 -1
  664. package/src/parquet-arrow-loader.ts +0 -74
  665. package/src/parquet-arrow-writer.ts +0 -33
  666. package/src/parquet-json-loader.ts +0 -160
  667. package/src/parquet-json-writer.ts +0 -27
  668. package/src/parquetjs/modules.d.ts +0 -25
  669. package/src/polyfills/buffer/buffer-polyfill.browser.ts +0 -14
  670. package/src/polyfills/buffer/buffer-polyfill.node.ts +0 -19
  671. package/src/polyfills/buffer/buffer.ts +0 -2205
  672. package/src/polyfills/buffer/index.ts +0 -11
  673. package/src/polyfills/buffer/install-buffer-polyfill.ts +0 -12
  674. package/src/workers/parquet-json-worker.ts +0 -8
@@ -17,19 +17,44 @@ import {
17
17
  ParquetCompression,
18
18
  ParquetColumnChunk,
19
19
  PrimitiveType,
20
- ParquetReaderContext
20
+ ParquetReaderContext,
21
+ type ParquetLevelBuffer
21
22
  } from '../schema/declare';
22
23
  import {decodeFileMetadata, getThriftEnum, fieldIndexOf} from '../utils/read-utils';
24
+ import {decodeString, readUInt32LE, toUint8Array} from '../utils/binary-utils';
25
+ import {CompactInt64} from '../utils/uint8-array-compact-protocol';
26
+ import type {
27
+ ParquetDataPageLocation,
28
+ ParquetPageLocations,
29
+ ParquetRowRange
30
+ } from '../../lib/parquet-page-index';
31
+
32
+ /** Bounds concurrent range requests when a row group contains unusually many selected columns. */
33
+ const MAXIMUM_CONCURRENT_COLUMN_READS = 16;
23
34
 
24
35
  export type ParquetReaderProps = {
36
+ /** Maximum dictionary-page read size. */
25
37
  defaultDictionarySize?: number;
38
+ /** Preserve BYTE_ARRAY values instead of decoding them as strings. */
26
39
  preserveBinary?: boolean;
40
+ /** Retain byte arrays as views into decoded page buffers for direct materialization. */
41
+ retainByteArrayViews?: boolean;
42
+ /** Decode supported primitive columns into typed buffers instead of boxed JavaScript arrays. */
43
+ useTypedValueBuffers?: boolean;
44
+ /** Decode repetition and definition levels into compact unsigned typed arrays. */
45
+ useTypedLevelBuffers?: boolean;
46
+ /** Abort signal forwarded to every underlying random-access read. */
47
+ signal?: AbortSignal;
27
48
  };
28
49
 
29
50
  /** Properties for initializing a ParquetRowGroupReader */
30
51
  export type ParquetIterationProps = {
31
52
  /** Filter allowing some columns to be dropped */
32
53
  columnList?: string[] | string[][];
54
+ /** Zero-based row-group indexes to read, in output order. */
55
+ rowGroups?: number[];
56
+ /** Abort signal forwarded to row-group and column-chunk reads. */
57
+ signal?: AbortSignal;
33
58
  };
34
59
 
35
60
  /**
@@ -39,15 +64,21 @@ export type ParquetIterationProps = {
39
64
  * rows from a parquet file use the ParquetReader instead
40
65
  */
41
66
  export class ParquetReader {
42
- static defaultProps: Required<ParquetReaderProps> = {
67
+ static defaultProps: Required<Omit<ParquetReaderProps, 'signal'>> & {signal?: AbortSignal} = {
43
68
  // max ArrayBuffer size in js is 2Gb
44
69
  defaultDictionarySize: 2147483648,
45
- preserveBinary: false
70
+ preserveBinary: false,
71
+ retainByteArrayViews: false,
72
+ useTypedValueBuffers: false,
73
+ useTypedLevelBuffers: false,
74
+ signal: undefined
46
75
  };
47
76
 
48
- props: Required<ParquetReaderProps>;
77
+ props: Required<Omit<ParquetReaderProps, 'signal'>> & {signal?: AbortSignal};
49
78
  file: ReadableFile;
50
79
  metadata: Promise<FileMetaData> | null = null;
80
+ /** Parsed Parquet schema shared by metadata, iteration, and materialization paths. */
81
+ private schema: Promise<ParquetSchema> | null = null;
51
82
 
52
83
  constructor(file: ReadableFile, props?: ParquetReaderProps) {
53
84
  this.file = file;
@@ -82,36 +113,41 @@ export class ParquetReader {
82
113
  /** Iterate over the raw row groups */
83
114
  async *rowGroupIterator(props?: ParquetIterationProps) {
84
115
  // Ensure strings are nested in arrays
85
- const columnList: string[][] = (props?.columnList || []).map((x) =>
86
- Array.isArray(x) ? x : [x]
87
- );
116
+ const columnList: string[][] = (props?.columnList || []).map(x => (Array.isArray(x) ? x : [x]));
88
117
 
89
- const metadata = await this.getFileMetadata();
90
- const schema = await this.getSchema();
118
+ const metadata = await this.getFileMetadata(props?.signal);
119
+ const schema = await this.getSchema(props?.signal);
91
120
 
92
121
  const rowGroupCount = metadata?.row_groups.length || 0;
122
+ const rowGroupIndices =
123
+ props?.rowGroups || Array.from({length: rowGroupCount}, (_, index) => index);
93
124
 
94
- for (let rowGroupIndex = 0; rowGroupIndex < rowGroupCount; rowGroupIndex++) {
125
+ for (const rowGroupIndex of rowGroupIndices) {
126
+ if (!Number.isInteger(rowGroupIndex) || rowGroupIndex < 0 || rowGroupIndex >= rowGroupCount) {
127
+ throw new Error(`Invalid Parquet row-group index ${rowGroupIndex}`);
128
+ }
95
129
  const rowGroup = await this.readRowGroup(
96
130
  schema,
97
131
  metadata.row_groups[rowGroupIndex],
98
- columnList
132
+ columnList,
133
+ props?.signal
99
134
  );
100
135
  yield rowGroup;
101
136
  }
102
137
  }
103
138
 
104
- async getRowCount(): Promise<number> {
105
- const metadata = await this.getFileMetadata();
139
+ async getRowCount(signal?: AbortSignal): Promise<number> {
140
+ const metadata = await this.getFileMetadata(signal);
106
141
  return Number(metadata.num_rows);
107
142
  }
108
143
 
109
- async getSchema(): Promise<ParquetSchema> {
110
- const metadata = await this.getFileMetadata();
111
- const root = metadata.schema[0];
112
- const {schema: schemaDefinition} = decodeSchema(metadata.schema, 1, root.num_children!);
113
- const schema = new ParquetSchema(schemaDefinition);
114
- return schema;
144
+ async getSchema(signal?: AbortSignal): Promise<ParquetSchema> {
145
+ this.schema ||= this.getFileMetadata(signal).then(metadata => {
146
+ const root = metadata.schema[0];
147
+ const {schema: schemaDefinition} = decodeSchema(metadata.schema, 1, root.num_children!);
148
+ return new ParquetSchema(schemaDefinition);
149
+ });
150
+ return await this.schema;
115
151
  }
116
152
 
117
153
  /**
@@ -127,10 +163,10 @@ export class ParquetReader {
127
163
  return md;
128
164
  }
129
165
 
130
- async getFileMetadata(): Promise<FileMetaData> {
166
+ async getFileMetadata(signal?: AbortSignal): Promise<FileMetaData> {
131
167
  if (!this.metadata) {
132
- await this.readHeader();
133
- this.metadata = this.readFooter();
168
+ await this.readHeader(signal);
169
+ this.metadata = this.readFooter(signal);
134
170
  }
135
171
  return this.metadata;
136
172
  }
@@ -138,10 +174,9 @@ export class ParquetReader {
138
174
  // LOW LEVEL METHODS
139
175
 
140
176
  /** Metadata is stored in the footer */
141
- async readHeader(): Promise<void> {
142
- const arrayBuffer = await this.file.read(0, PARQUET_MAGIC.length);
143
- const buffer = Buffer.from(arrayBuffer);
144
- const magic = buffer.toString();
177
+ async readHeader(signal?: AbortSignal): Promise<void> {
178
+ const arrayBuffer = await this.file.read(0, PARQUET_MAGIC.length, signal ?? this.props.signal);
179
+ const magic = decodeString(toUint8Array(arrayBuffer));
145
180
  switch (magic) {
146
181
  case PARQUET_MAGIC:
147
182
  break;
@@ -153,24 +188,32 @@ export class ParquetReader {
153
188
  }
154
189
 
155
190
  /** Metadata is stored in the footer */
156
- async readFooter(): Promise<FileMetaData> {
191
+ async readFooter(signal?: AbortSignal): Promise<FileMetaData> {
157
192
  const trailerLen = PARQUET_MAGIC.length + 4;
158
- const arrayBuffer = await this.file.read(this.file.size - trailerLen, trailerLen);
159
- const trailerBuf = Buffer.from(arrayBuffer);
193
+ const arrayBuffer = await this.file.read(
194
+ this.file.size - trailerLen,
195
+ trailerLen,
196
+ signal ?? this.props.signal
197
+ );
198
+ const trailer = toUint8Array(arrayBuffer);
160
199
 
161
- const magic = trailerBuf.slice(4).toString();
200
+ const magic = decodeString(trailer, 4);
162
201
  if (magic !== PARQUET_MAGIC) {
163
202
  throw new Error(`Not a valid parquet file (magic="${magic})`);
164
203
  }
165
204
 
166
- const metadataSize = trailerBuf.readUInt32LE(0);
205
+ const metadataSize = readUInt32LE(trailer, 0);
167
206
  const metadataOffset = this.file.size - metadataSize - trailerLen;
168
207
  if (metadataOffset < PARQUET_MAGIC.length) {
169
208
  throw new Error(`Invalid metadata size ${metadataOffset}`);
170
209
  }
171
210
 
172
- const arrayBuffer2 = await this.file.read(metadataOffset, metadataSize);
173
- const metadataBuf = Buffer.from(arrayBuffer2);
211
+ const arrayBuffer2 = await this.file.read(
212
+ metadataOffset,
213
+ metadataSize,
214
+ signal ?? this.props.signal
215
+ );
216
+ const metadataBuf = toUint8Array(arrayBuffer2);
174
217
  // let metadata = new parquet_thrift.FileMetaData();
175
218
  // parquet_util.decodeThrift(metadata, metadataBuf);
176
219
 
@@ -182,27 +225,83 @@ export class ParquetReader {
182
225
  async readRowGroup(
183
226
  schema: ParquetSchema,
184
227
  rowGroup: RowGroup,
185
- columnList: string[][]
228
+ columnList: string[][],
229
+ signal?: AbortSignal
186
230
  ): Promise<ParquetRowGroup> {
187
- const buffer: ParquetRowGroup = {
231
+ const selectedColumnChunks = rowGroup.columns.filter(columnChunk => {
232
+ const columnKey = columnChunk.meta_data?.path_in_schema;
233
+ return columnList.length === 0 || fieldIndexOf(columnList, columnKey!) >= 0;
234
+ });
235
+ const columnEntries: Array<readonly [string, ParquetColumnChunk]> = [];
236
+ for (
237
+ let batchStart = 0;
238
+ batchStart < selectedColumnChunks.length;
239
+ batchStart += MAXIMUM_CONCURRENT_COLUMN_READS
240
+ ) {
241
+ const columnBatch = selectedColumnChunks.slice(
242
+ batchStart,
243
+ batchStart + MAXIMUM_CONCURRENT_COLUMN_READS
244
+ );
245
+ columnEntries.push(
246
+ ...(await Promise.all(
247
+ columnBatch.map(async columnChunk => {
248
+ const columnKey = columnChunk.meta_data!.path_in_schema.join();
249
+ const columnData = await this.readColumnChunk(schema, columnChunk, signal);
250
+ return [columnKey, columnData] as const;
251
+ })
252
+ ))
253
+ );
254
+ }
255
+ return {
188
256
  rowCount: Number(rowGroup.num_rows),
189
- columnData: {}
257
+ columnData: Object.fromEntries(columnEntries)
258
+ };
259
+ }
260
+
261
+ /** Reads independently materializable flat columns for one logical row range using page indexes. */
262
+ async readRowGroupRange(
263
+ schema: ParquetSchema,
264
+ rowGroup: RowGroup,
265
+ columnList: string[][],
266
+ rowRange: ParquetRowRange,
267
+ pageLocations: ParquetPageLocations,
268
+ signal?: AbortSignal
269
+ ): Promise<ParquetRowGroup> {
270
+ const selectedColumnChunks = rowGroup.columns.filter(columnChunk => {
271
+ const columnKey = columnChunk.meta_data?.path_in_schema;
272
+ return columnList.length === 0 || fieldIndexOf(columnList, columnKey!) >= 0;
273
+ });
274
+ const columnEntries = await Promise.all(
275
+ selectedColumnChunks.map(async columnChunk => {
276
+ const columnKey = columnChunk.meta_data!.path_in_schema.join();
277
+ const pages = pageLocations[columnChunk.meta_data!.path_in_schema.join('.')];
278
+ if (!pages) {
279
+ throw new Error(`Parquet offset index missing for ${columnKey}`);
280
+ }
281
+ const columnData = await this.readColumnChunkRange(
282
+ schema,
283
+ columnChunk,
284
+ rowRange,
285
+ pages,
286
+ signal
287
+ );
288
+ return [columnKey, columnData] as const;
289
+ })
290
+ );
291
+ return {
292
+ rowCount: rowRange.end - rowRange.start,
293
+ columnData: Object.fromEntries(columnEntries)
190
294
  };
191
- for (const colChunk of rowGroup.columns) {
192
- const colMetadata = colChunk.meta_data;
193
- const colKey = colMetadata?.path_in_schema;
194
- if (columnList.length > 0 && fieldIndexOf(columnList, colKey!) < 0) {
195
- continue; // eslint-disable-line no-continue
196
- }
197
- buffer.columnData[colKey!.join()] = await this.readColumnChunk(schema, colChunk);
198
- }
199
- return buffer;
200
295
  }
201
296
 
202
297
  /**
203
298
  * Each row group contains column chunks for all the columns.
204
299
  */
205
- async readColumnChunk(schema: ParquetSchema, colChunk: ColumnChunk): Promise<ParquetColumnChunk> {
300
+ async readColumnChunk(
301
+ schema: ParquetSchema,
302
+ colChunk: ColumnChunk,
303
+ signal?: AbortSignal
304
+ ): Promise<ParquetColumnChunk> {
206
305
  if (colChunk.file_path !== undefined && colChunk.file_path !== null) {
207
306
  throw new Error('external references are not supported');
208
307
  }
@@ -220,14 +319,21 @@ export class ParquetReader {
220
319
  ) as any;
221
320
 
222
321
  const pagesOffset = Number(colChunk.meta_data?.data_page_offset!);
223
- let pagesSize = Number(colChunk.meta_data?.total_compressed_size!);
224
-
225
- if (!colChunk.file_path) {
226
- pagesSize = Math.min(
227
- this.file.size - pagesOffset,
228
- Number(colChunk.meta_data?.total_compressed_size)
229
- );
230
- }
322
+ const dictionaryPageOffset = colChunk.meta_data?.dictionary_page_offset;
323
+ const validDictionaryPageOffset =
324
+ dictionaryPageOffset !== undefined && Number(dictionaryPageOffset) > 0
325
+ ? Number(dictionaryPageOffset)
326
+ : undefined;
327
+ const chunkOffset = Math.min(pagesOffset, validDictionaryPageOffset ?? pagesOffset);
328
+ const chunkEnd = chunkOffset + Number(colChunk.meta_data?.total_compressed_size!);
329
+ const chunkSize = Math.min(this.file.size - chunkOffset, Math.max(0, chunkEnd - chunkOffset));
330
+ const arrayBuffer = await this.file.read(chunkOffset, chunkSize, signal ?? this.props.signal);
331
+ const chunkBuffer = toUint8Array(arrayBuffer);
332
+ const pagesRelativeOffset = pagesOffset - chunkOffset;
333
+ const pagesSize = Math.min(
334
+ chunkBuffer.length - pagesRelativeOffset,
335
+ Math.max(0, chunkEnd - pagesOffset)
336
+ );
231
337
 
232
338
  const context: ParquetReaderContext = {
233
339
  type,
@@ -238,25 +344,98 @@ export class ParquetReader {
238
344
  numValues: colChunk.meta_data?.num_values,
239
345
  dictionary: [],
240
346
  // Options - TBD is this the right place for these?
241
- preserveBinary: this.props.preserveBinary
347
+ preserveBinary: this.props.preserveBinary,
348
+ retainByteArrayViews: this.props.retainByteArrayViews,
349
+ useTypedValueBuffers: this.props.useTypedValueBuffers,
350
+ useTypedLevelBuffers: this.props.useTypedLevelBuffers
242
351
  };
243
352
 
244
- let dictionary;
353
+ let dictionary: any[] | undefined;
245
354
 
246
- const dictionaryPageOffset = colChunk?.meta_data?.dictionary_page_offset;
247
-
248
- if (dictionaryPageOffset) {
249
- const dictionaryOffset = Number(dictionaryPageOffset);
250
- // Getting dictionary from column chunk to iterate all over indexes to get dataPage values.
251
- dictionary = await this.getDictionary(dictionaryOffset, context, pagesOffset);
355
+ if (validDictionaryPageOffset !== undefined) {
356
+ const dictionaryRelativeOffset = validDictionaryPageOffset - chunkOffset;
357
+ const dictionarySize = Math.min(
358
+ Math.max(0, pagesOffset - validDictionaryPageOffset),
359
+ chunkBuffer.length - dictionaryRelativeOffset,
360
+ this.props.defaultDictionarySize
361
+ );
362
+ const dictionaryBuffer = chunkBuffer.subarray(
363
+ dictionaryRelativeOffset,
364
+ dictionaryRelativeOffset + dictionarySize
365
+ );
366
+ dictionary = await decodeDictionaryBuffer(dictionaryBuffer, context);
252
367
  }
253
368
 
254
369
  dictionary = context.dictionary?.length ? context.dictionary : dictionary;
255
- const arrayBuffer = await this.file.read(pagesOffset, pagesSize);
256
- const pagesBuf = Buffer.from(arrayBuffer);
370
+ const pagesBuf = chunkBuffer.subarray(pagesRelativeOffset, pagesRelativeOffset + pagesSize);
257
371
  return await decodeDataPages(pagesBuf, {...context, dictionary});
258
372
  }
259
373
 
374
+ /** Reads and decodes only the contiguous data pages overlapping one flat-column row range. */
375
+ async readColumnChunkRange(
376
+ schema: ParquetSchema,
377
+ columnChunk: ColumnChunk,
378
+ rowRange: ParquetRowRange,
379
+ pages: readonly ParquetDataPageLocation[],
380
+ signal?: AbortSignal
381
+ ): Promise<ParquetColumnChunk> {
382
+ if (columnChunk.file_path !== undefined && columnChunk.file_path !== null) {
383
+ throw new Error('external references are not supported');
384
+ }
385
+ const columnMetadata = columnChunk.meta_data!;
386
+ const field = schema.findField(columnMetadata.path_in_schema);
387
+ if (field.path.length !== 1 || field.repetitionType === 'REPEATED' || field.rLevelMax !== 0) {
388
+ throw new Error('Selective Parquet page reads currently require flat primitive columns');
389
+ }
390
+ const type: PrimitiveType = getThriftEnum(Type, columnMetadata.type) as any;
391
+ if (type !== field.primitiveType) {
392
+ throw new Error(`chunk type not matching schema: ${type}`);
393
+ }
394
+ const compression: ParquetCompression = getThriftEnum(
395
+ CompressionCodec,
396
+ columnMetadata.codec
397
+ ) as any;
398
+ const overlappingPages = pages.filter(
399
+ page => page.endRowIndex > rowRange.start && page.firstRowIndex < rowRange.end
400
+ );
401
+ if (!overlappingPages.length) {
402
+ throw new Error('Parquet page plan does not overlap the requested row range');
403
+ }
404
+ const firstPage = overlappingPages[0];
405
+ const lastPage = overlappingPages[overlappingPages.length - 1];
406
+ const context: ParquetReaderContext = {
407
+ type,
408
+ rLevelMax: field.rLevelMax,
409
+ dLevelMax: field.dLevelMax,
410
+ compression,
411
+ column: field,
412
+ numValues: new CompactInt64(lastPage.endRowIndex - firstPage.firstRowIndex),
413
+ dictionary: [],
414
+ preserveBinary: this.props.preserveBinary,
415
+ retainByteArrayViews: this.props.retainByteArrayViews,
416
+ useTypedValueBuffers: this.props.useTypedValueBuffers
417
+ };
418
+
419
+ let dictionary: any[] | undefined;
420
+ const dictionaryPageOffset = Number(columnMetadata.dictionary_page_offset);
421
+ if (Number.isSafeInteger(dictionaryPageOffset) && dictionaryPageOffset > 0) {
422
+ const dictionaryLength = Math.max(0, pages[0].offset - dictionaryPageOffset);
423
+ const dictionaryBuffer = toUint8Array(
424
+ await this.file.read(dictionaryPageOffset, dictionaryLength, signal ?? this.props.signal)
425
+ );
426
+ dictionary = await decodeDictionaryBuffer(dictionaryBuffer, context);
427
+ }
428
+
429
+ const dataLength = lastPage.offset + lastPage.compressedByteLength - firstPage.offset;
430
+ const dataBuffer = toUint8Array(
431
+ await this.file.read(firstPage.offset, dataLength, signal ?? this.props.signal)
432
+ );
433
+ const decoded = await decodeDataPages(dataBuffer, {...context, dictionary});
434
+ const relativeStart = rowRange.start - firstPage.firstRowIndex;
435
+ const relativeEnd = relativeStart + rowRange.end - rowRange.start;
436
+ return sliceFlatColumnChunk(decoded, field.dLevelMax, relativeStart, relativeEnd);
437
+ }
438
+
260
439
  /**
261
440
  * Getting dictionary for allows to flatten values by indices.
262
441
  * @param dictionaryPageOffset
@@ -267,8 +446,9 @@ export class ParquetReader {
267
446
  async getDictionary(
268
447
  dictionaryPageOffset: number,
269
448
  context: ParquetReaderContext,
270
- pagesOffset: number
271
- ): Promise<string[]> {
449
+ pagesOffset: number,
450
+ signal?: AbortSignal
451
+ ): Promise<any[]> {
272
452
  if (dictionaryPageOffset === 0) {
273
453
  // dictionarySize = Math.min(this.fileSize - pagesOffset, this.defaultDictionarySize);
274
454
  // pagesBuf = await this.read(pagesOffset, dictionarySize);
@@ -281,15 +461,61 @@ export class ParquetReader {
281
461
  }
282
462
 
283
463
  const dictionarySize = Math.min(
464
+ Math.max(0, pagesOffset - dictionaryPageOffset),
284
465
  this.file.size - dictionaryPageOffset,
285
466
  this.props.defaultDictionarySize
286
467
  );
287
- const arrayBuffer = await this.file.read(dictionaryPageOffset, dictionarySize);
288
- const pagesBuf = Buffer.from(arrayBuffer);
468
+ const arrayBuffer = await this.file.read(
469
+ dictionaryPageOffset,
470
+ dictionarySize,
471
+ signal ?? this.props.signal
472
+ );
473
+ const pagesBuf = toUint8Array(arrayBuffer);
474
+ return await decodeDictionaryBuffer(pagesBuf, context);
475
+ }
476
+ }
477
+
478
+ /** Decodes one dictionary page from an already-read column-chunk range. */
479
+ async function decodeDictionaryBuffer(
480
+ dictionaryBuffer: Uint8Array,
481
+ context: ParquetReaderContext
482
+ ): Promise<any[]> {
483
+ const cursor = {buffer: dictionaryBuffer, offset: 0, size: dictionaryBuffer.length};
484
+ const decodedPage = await decodePage(cursor, context);
485
+ return decodedPage.dictionary!;
486
+ }
289
487
 
290
- const cursor = {buffer: pagesBuf, offset: 0, size: pagesBuf.length};
291
- const decodedPage = await decodePage(cursor, context);
488
+ /** Slices one decoded flat column chunk while preserving optional-value alignment. */
489
+ function sliceFlatColumnChunk(
490
+ columnChunk: ParquetColumnChunk,
491
+ definitionLevelMaximum: number,
492
+ start: number,
493
+ end: number
494
+ ): ParquetColumnChunk {
495
+ const valueStart = countDefinedValues(columnChunk.dlevels, definitionLevelMaximum, 0, start);
496
+ const valueEnd =
497
+ valueStart + countDefinedValues(columnChunk.dlevels, definitionLevelMaximum, start, end);
498
+ return {
499
+ rlevels: columnChunk.rlevels.slice(start, end),
500
+ dlevels: columnChunk.dlevels.slice(start, end),
501
+ values: columnChunk.values.slice(valueStart, valueEnd) as typeof columnChunk.values,
502
+ count: end - start,
503
+ pageHeaders: columnChunk.pageHeaders
504
+ };
505
+ }
292
506
 
293
- return decodedPage.dictionary!;
507
+ /** Counts defined primitive values represented by one flat level interval. */
508
+ function countDefinedValues(
509
+ definitionLevels: ParquetLevelBuffer,
510
+ definitionLevelMaximum: number,
511
+ start: number,
512
+ end: number
513
+ ): number {
514
+ let count = 0;
515
+ for (let index = start; index < Math.min(end, definitionLevels.length); index++) {
516
+ if (definitionLevels[index] === definitionLevelMaximum) {
517
+ count++;
518
+ }
294
519
  }
520
+ return count;
295
521
  }
@@ -4,10 +4,19 @@
4
4
  // Copyright (c) 2017 ironSource Ltd.
5
5
  // Forked from https://github.com/kbajalc/parquets under MIT license
6
6
 
7
- import Int64 from 'node-int64';
7
+ import {CompactInt64 as Int64} from '../utils/uint8-array-compact-protocol';
8
8
  import type {PageHeader} from '../parquet-thrift';
9
+ import type {ParquetValueBuffer} from '../codecs/declare';
9
10
 
10
- export type ParquetCodec = 'PLAIN' | 'RLE' | 'PLAIN_DICTIONARY';
11
+ export type ParquetCodec =
12
+ | 'PLAIN'
13
+ | 'RLE'
14
+ | 'PLAIN_DICTIONARY'
15
+ | 'RLE_DICTIONARY'
16
+ | 'DELTA_BINARY_PACKED'
17
+ | 'DELTA_LENGTH_BYTE_ARRAY'
18
+ | 'DELTA_BYTE_ARRAY'
19
+ | 'BYTE_STREAM_SPLIT';
11
20
  export type ParquetCompression =
12
21
  | 'UNCOMPRESSED'
13
22
  | 'GZIP'
@@ -52,8 +61,10 @@ export type OriginalType =
52
61
  | 'DATE' // 6
53
62
  | 'TIME_MILLIS' // 7
54
63
  | 'TIME_MICROS' // 8
64
+ | 'TIME_NANOS'
55
65
  | 'TIMESTAMP_MILLIS' // 9
56
66
  | 'TIMESTAMP_MICROS' // 10
67
+ | 'TIMESTAMP_NANOS'
57
68
  | 'UINT_8' // 11
58
69
  | 'UINT_16' // 12
59
70
  | 'UINT_32' // 13
@@ -62,11 +73,65 @@ export type OriginalType =
62
73
  | 'INT_16' // 16
63
74
  | 'INT_32' // 17
64
75
  | 'INT_64' // 18
76
+ | 'ENUM'
77
+ | 'UUID'
78
+ | 'FLOAT16'
79
+ | 'UNKNOWN'
80
+ | 'VARIANT'
81
+ | 'GEOMETRY'
82
+ | 'GEOGRAPHY'
65
83
  | 'JSON' // 19
66
84
  | 'BSON' // 20
67
85
  | 'INTERVAL'; // 21
68
86
 
69
- export type ParquetDictionary = string[];
87
+ /** Units carried by Parquet TIME and TIMESTAMP logical type annotations. */
88
+ export type ParquetTimeUnit = 'MILLIS' | 'MICROS' | 'NANOS';
89
+
90
+ /** Logical type names defined by the Parquet 2.13 format. */
91
+ export type ParquetLogicalTypeName =
92
+ | 'STRING'
93
+ | 'MAP'
94
+ | 'LIST'
95
+ | 'ENUM'
96
+ | 'DECIMAL'
97
+ | 'DATE'
98
+ | 'TIME'
99
+ | 'TIMESTAMP'
100
+ | 'INTEGER'
101
+ | 'UNKNOWN'
102
+ | 'JSON'
103
+ | 'BSON'
104
+ | 'UUID'
105
+ | 'FLOAT16'
106
+ | 'VARIANT'
107
+ | 'GEOMETRY'
108
+ | 'GEOGRAPHY';
109
+
110
+ /** Serializable representation of one Parquet logical type annotation. */
111
+ export interface ParquetLogicalType {
112
+ /** Logical type discriminator. */
113
+ type: ParquetLogicalTypeName;
114
+ /** Integer width for INTEGER annotations. */
115
+ bitWidth?: 8 | 16 | 32 | 64;
116
+ /** Whether an INTEGER annotation is signed. */
117
+ isSigned?: boolean;
118
+ /** Time unit for TIME and TIMESTAMP annotations. */
119
+ unit?: ParquetTimeUnit;
120
+ /** Whether a TIME or TIMESTAMP value represents a UTC-normalized instant. */
121
+ isAdjustedToUTC?: boolean;
122
+ /** Decimal precision. */
123
+ precision?: number;
124
+ /** Decimal scale. */
125
+ scale?: number;
126
+ /** Variant specification version. */
127
+ specificationVersion?: number;
128
+ /** Coordinate reference system for geospatial logical types. */
129
+ crs?: string;
130
+ /** Edge interpolation algorithm for GEOGRAPHY values. */
131
+ algorithm?: string;
132
+ }
133
+
134
+ export type ParquetDictionary = any[];
70
135
 
71
136
  export interface SchemaDefinition {
72
137
  [string: string]: FieldDefinition;
@@ -74,9 +139,18 @@ export interface SchemaDefinition {
74
139
 
75
140
  export interface FieldDefinition {
76
141
  type?: ParquetType;
142
+ /** Physical type declared by the file, retained independently from its logical type. */
143
+ physicalType?: PrimitiveType;
77
144
  typeLength?: number;
145
+ /** @deprecated Use `precision`. */
78
146
  presision?: number;
147
+ /** Decimal precision. */
148
+ precision?: number;
79
149
  scale?: number;
150
+ /** Modern Parquet logical type annotation. */
151
+ logicalType?: ParquetLogicalType;
152
+ /** Stable field identifier declared by the Parquet schema. */
153
+ fieldId?: number;
80
154
  encoding?: ParquetCodec;
81
155
  compression?: ParquetCompression;
82
156
  optional?: boolean;
@@ -90,9 +164,16 @@ export interface ParquetField {
90
164
  key: string;
91
165
  primitiveType?: PrimitiveType;
92
166
  originalType?: OriginalType;
167
+ /** Modern Parquet logical type annotation. */
168
+ logicalType?: ParquetLogicalType;
169
+ /** Stable field identifier declared by the Parquet schema. */
170
+ fieldId?: number;
93
171
  repetitionType: RepetitionType;
94
172
  typeLength?: number;
173
+ /** @deprecated Use `precision`. */
95
174
  presision?: number;
175
+ /** Decimal precision. */
176
+ precision?: number;
96
177
  scale?: number;
97
178
  encoding?: ParquetCodec;
98
179
  compression?: ParquetCompression;
@@ -114,13 +195,24 @@ export interface ParquetReaderContext {
114
195
  dictionary?: ParquetDictionary;
115
196
  /** If true, binary values are not converted to strings */
116
197
  preserveBinary?: boolean;
198
+ /** Retain byte arrays as views into decoded page buffers for direct materialization. */
199
+ retainByteArrayViews?: boolean;
200
+ /** Decode primitive values into typed column buffers when their physical type permits it. */
201
+ useTypedValueBuffers?: boolean;
202
+ /** Decode repetition and definition levels into compact unsigned typed arrays. */
203
+ useTypedLevelBuffers?: boolean;
117
204
  }
118
205
 
206
+ /** Mutable storage for decoded Parquet repetition and definition levels. */
207
+ export type ParquetLevelBuffer = number[] | Uint8Array | Uint16Array | Uint32Array;
208
+
119
209
  export interface ParquetPageData {
120
210
  dlevels: number[];
121
211
  rlevels: number[];
122
212
  /** Actual column chunks */
123
- values: any[]; // ArrayLike<any>;
213
+ values: ParquetValueBuffer;
214
+ /** Number of values written directly into the column destination, if one was supplied. */
215
+ directValuesWritten?: number;
124
216
  count: number;
125
217
  dictionary?: ParquetDictionary;
126
218
  /** The "raw" page header from the file */
@@ -147,9 +239,9 @@ export class ParquetRowGroup {
147
239
 
148
240
  /** Holds the data for one column chunk */
149
241
  export interface ParquetColumnChunk {
150
- dlevels: number[];
151
- rlevels: number[];
152
- values: any[];
242
+ dlevels: ParquetLevelBuffer;
243
+ rlevels: ParquetLevelBuffer;
244
+ values: ParquetValueBuffer;
153
245
  count: number;
154
246
  pageHeaders: PageHeader[];
155
247
  }