@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
@@ -0,0 +1,829 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import * as arrow from 'apache-arrow';
6
+ import type {ReadableFile} from '@loaders.gl/loader-utils';
7
+ import type {
8
+ ArrayType,
9
+ ArrowTable,
10
+ ArrowTableBatch,
11
+ DataType,
12
+ Field,
13
+ ObjectRowTable,
14
+ Schema,
15
+ SchemaMetadata
16
+ } from '@loaders.gl/schema';
17
+ import {convertTable, deserializeArrowType} from '@loaders.gl/schema-utils';
18
+
19
+ import type {ParquetJSLoaderOptions} from '../../parquet-loader-options';
20
+ import {preloadCompressions} from '../../parquetjs/compression';
21
+ import {ParquetReader} from '../../parquetjs/parser/parquet-reader';
22
+ import type {
23
+ ParquetColumnChunk,
24
+ ParquetField,
25
+ ParquetRowGroup
26
+ } from '../../parquetjs/schema/declare';
27
+ import type {ParquetSchema} from '../../parquetjs/schema/schema';
28
+ import {materializeColumn, materializeRows} from '../../parquetjs/schema/shred';
29
+ import {createNestedArrowVector} from '../arrow/create-nested-arrow-vector';
30
+ import {getSchemaFromParquetReader} from './get-parquet-schema';
31
+
32
+ /** Largest byte value copied inline to avoid TypedArray#set call overhead. */
33
+ const MAXIMUM_INLINE_BYTE_COPY_LENGTH = 7;
34
+
35
+ /** Primitive Arrow type instances used by serialized Parquet schemas. */
36
+ const PARQUET_ARROW_PRIMITIVE_TYPES: Partial<Record<Extract<DataType, string>, arrow.DataType>> = {
37
+ binary: new arrow.Binary(),
38
+ bool: new arrow.Bool(),
39
+ float32: new arrow.Float32(),
40
+ float64: new arrow.Float64(),
41
+ int8: new arrow.Int8(),
42
+ int16: new arrow.Int16(),
43
+ int32: new arrow.Int32(),
44
+ int64: new arrow.Int64(),
45
+ uint8: new arrow.Uint8(),
46
+ uint16: new arrow.Uint16(),
47
+ uint32: new arrow.Uint32(),
48
+ uint64: new arrow.Uint64(),
49
+ utf8: new arrow.Utf8()
50
+ };
51
+
52
+ /** Inputs accepted by Apache Arrow's overloaded `Schema.assign` method. */
53
+ type ArrowSchemaAssignment = arrow.Schema | arrow.Field | arrow.Field[];
54
+
55
+ /** Arrow schema that preserves identity when Apache Arrow assigns its existing fields. */
56
+ class ParquetArrowSchema extends arrow.Schema {
57
+ /** Whether the next exact field assignment may reuse this schema. */
58
+ private reuseIdentityAssignment = false;
59
+
60
+ /** Enables identity reuse for one synchronous Arrow RecordBatch construction. */
61
+ enableIdentityAssignmentReuse(): void {
62
+ this.reuseIdentityAssignment = true;
63
+ }
64
+
65
+ /** Restores Apache Arrow's normal public assignment semantics. */
66
+ disableIdentityAssignmentReuse(): void {
67
+ this.reuseIdentityAssignment = false;
68
+ }
69
+
70
+ /**
71
+ * Avoids cloning fields and merging metadata when assignment is already an exact match.
72
+ * @param assignments schemas or fields to merge into this schema
73
+ * @returns this schema for an identity assignment, otherwise Apache Arrow's assigned schema
74
+ */
75
+ override assign(...assignments: ArrowSchemaAssignment[]): arrow.Schema {
76
+ const firstAssignment = assignments[0];
77
+ if (
78
+ this.reuseIdentityAssignment &&
79
+ assignments.length === 1 &&
80
+ Array.isArray(firstAssignment) &&
81
+ firstAssignment.length === this.fields.length &&
82
+ firstAssignment.every((field, index) => field === this.fields[index])
83
+ ) {
84
+ return this;
85
+ }
86
+ const assignedSchema =
87
+ assignments.length === 1 && firstAssignment instanceof arrow.Schema
88
+ ? super.assign(firstAssignment)
89
+ : super.assign(...(assignments as Array<arrow.Field | arrow.Field[]>));
90
+ return new ParquetArrowSchema(
91
+ assignedSchema.fields,
92
+ assignedSchema.metadata,
93
+ assignedSchema.dictionaries,
94
+ assignedSchema.metadataVersion
95
+ );
96
+ }
97
+ }
98
+
99
+ /**
100
+ * Parses a Parquet file with the TypeScript implementation directly into Arrow batches.
101
+ * @param file readable Parquet file
102
+ * @param options loader options applied before Arrow conversion
103
+ * @returns Arrow table containing the decoded rows
104
+ */
105
+ export async function parseParquetFileToArrowWithJs(
106
+ file: ReadableFile,
107
+ options?: ParquetJSLoaderOptions
108
+ ): Promise<ArrowTable> {
109
+ const recordBatches: arrow.RecordBatch[] = [];
110
+ let schema: Schema | undefined;
111
+
112
+ for await (const batch of parseParquetFileToArrowInBatchesWithJs(file, options)) {
113
+ schema ||= batch.schema;
114
+ recordBatches.push(...batch.data.batches);
115
+ }
116
+
117
+ schema ||= await readProjectedSchema(file, options);
118
+ const table = recordBatches.length
119
+ ? new arrow.Table(recordBatches)
120
+ : new arrow.Table(createParquetArrowSchema(schema), []);
121
+ return {shape: 'arrow-table', data: table, schema};
122
+ }
123
+
124
+ /** Reads the projected loaders.gl schema when row selection produces no Arrow record batches. */
125
+ async function readProjectedSchema(
126
+ file: ReadableFile,
127
+ options?: ParquetJSLoaderOptions
128
+ ): Promise<Schema> {
129
+ const reader = new ParquetReader(file, {
130
+ preserveBinary: options?.parquet?.preserveBinary
131
+ });
132
+ return projectSchema(await getSchemaFromParquetReader(reader), options?.parquet?.columns);
133
+ }
134
+
135
+ /**
136
+ * Parses a Parquet file in batches with the TypeScript implementation and materializes Arrow directly
137
+ * from decoded columns whenever the selected schema is flat.
138
+ * @param file readable Parquet file
139
+ * @param options loader options applied before Arrow conversion
140
+ * @returns asynchronous Arrow table batches
141
+ */
142
+ export async function* parseParquetFileToArrowInBatchesWithJs(
143
+ file: ReadableFile,
144
+ options?: ParquetJSLoaderOptions
145
+ ): AsyncIterable<ArrowTableBatch> {
146
+ await preloadCompressions(options);
147
+
148
+ const reader = new ParquetReader(file, {
149
+ preserveBinary: options?.parquet?.preserveBinary,
150
+ retainByteArrayViews: true,
151
+ useTypedValueBuffers: true,
152
+ useTypedLevelBuffers: true
153
+ });
154
+ const schema = projectSchema(await getSchemaFromParquetReader(reader), options?.parquet?.columns);
155
+ const arrowSchema = createParquetArrowSchema(schema);
156
+ const parquetSchema = await reader.getSchema();
157
+ const rowGroups = reader.rowGroupIterator(getParquetIterationProps(options));
158
+ const rowOffset = Math.max(0, options?.parquet?.offset || 0);
159
+ const rowLimit = options?.parquet?.limit;
160
+ const requestedBatchSize = options?.parquet?.batchSize;
161
+ let rowsVisited = 0;
162
+ let rowsYielded = 0;
163
+
164
+ for await (const rowGroup of rowGroups) {
165
+ const selectionStart = Math.min(rowGroup.rowCount, Math.max(0, rowOffset - rowsVisited));
166
+ const availableRowCount = rowGroup.rowCount - selectionStart;
167
+ const remainingRowCount =
168
+ rowLimit === undefined
169
+ ? availableRowCount
170
+ : Math.max(0, Math.min(availableRowCount, rowLimit - rowsYielded));
171
+ const selectionEnd = selectionStart + remainingRowCount;
172
+ rowsVisited += rowGroup.rowCount;
173
+
174
+ if (selectionEnd <= selectionStart) {
175
+ if (rowLimit !== undefined && rowsYielded >= rowLimit) {
176
+ return;
177
+ }
178
+ continue;
179
+ }
180
+
181
+ const arrowTable = convertRowGroupSliceToArrow(
182
+ schema,
183
+ arrowSchema,
184
+ parquetSchema,
185
+ rowGroup,
186
+ selectionStart,
187
+ selectionEnd
188
+ );
189
+ const batchSize =
190
+ requestedBatchSize && requestedBatchSize > 0 ? requestedBatchSize : remainingRowCount;
191
+
192
+ for (let batchStart = selectionStart; batchStart < selectionEnd; batchStart += batchSize) {
193
+ const batchEnd = Math.min(batchStart + batchSize, selectionEnd);
194
+ const batchTable = sliceArrowTable(
195
+ arrowTable,
196
+ batchStart - selectionStart,
197
+ batchEnd - selectionStart
198
+ );
199
+ const length = batchEnd - batchStart;
200
+
201
+ yield {
202
+ batchType: 'data',
203
+ shape: batchTable.shape,
204
+ schema: batchTable.schema,
205
+ data: batchTable.data,
206
+ length
207
+ };
208
+ rowsYielded += length;
209
+ }
210
+
211
+ if (rowLimit !== undefined && rowsYielded >= rowLimit) {
212
+ return;
213
+ }
214
+ }
215
+ }
216
+
217
+ /** Converts a loaders.gl schema into the identity-aware Arrow schema used by Parquet batches. */
218
+ function createParquetArrowSchema(schema: Schema): ParquetArrowSchema {
219
+ return new ParquetArrowSchema(
220
+ schema.fields.map(field => createParquetArrowField(field)),
221
+ createParquetArrowMetadata(schema.metadata)
222
+ );
223
+ }
224
+
225
+ /** Hydrates one serialized Parquet field without generic Arrow conversion allocations. */
226
+ function createParquetArrowField(field: Field): arrow.Field {
227
+ return new arrow.Field(
228
+ field.name,
229
+ createParquetArrowType(field.type),
230
+ field.nullable,
231
+ createParquetArrowMetadata(field.metadata)
232
+ );
233
+ }
234
+
235
+ /** Reuses immutable primitive Arrow types and falls back for composite serialized types. */
236
+ function createParquetArrowType(dataType: DataType): arrow.DataType {
237
+ const primitiveType =
238
+ typeof dataType === 'string' ? PARQUET_ARROW_PRIMITIVE_TYPES[dataType] : undefined;
239
+ return primitiveType || deserializeArrowType(dataType);
240
+ }
241
+
242
+ /** Hydrates serialized Parquet metadata without an intermediate entries array. */
243
+ function createParquetArrowMetadata(metadata?: SchemaMetadata): Map<string, string> {
244
+ const arrowMetadata = new Map<string, string>();
245
+ if (metadata) {
246
+ for (const key of Object.keys(metadata)) {
247
+ arrowMetadata.set(key, metadata[key]);
248
+ }
249
+ }
250
+ return arrowMetadata;
251
+ }
252
+
253
+ /** Builds Arrow from one selected row-group range with per-column fallbacks. */
254
+ function convertRowGroupSliceToArrow(
255
+ schema: Schema,
256
+ arrowSchema: arrow.Schema,
257
+ parquetSchema: ParquetSchema,
258
+ rowGroup: ParquetRowGroup,
259
+ start: number,
260
+ end: number
261
+ ): ArrowTable {
262
+ const vectors: Record<string, arrow.Vector> = {};
263
+ let materializedRows: Record<string, unknown>[] | undefined;
264
+ for (const field of arrowSchema.fields) {
265
+ const parquetField = parquetSchema.findField(field.name);
266
+ const columnData = rowGroup.columnData[field.name];
267
+ const nestedVector = createNestedArrowVector(field.type, parquetField, rowGroup, start, end);
268
+ if (nestedVector) {
269
+ vectors[field.name] = nestedVector;
270
+ continue;
271
+ }
272
+ const decimalVector = createDecimalArrowVector(
273
+ field.type,
274
+ parquetField,
275
+ columnData,
276
+ start,
277
+ end
278
+ );
279
+ if (decimalVector) {
280
+ vectors[field.name] = decimalVector;
281
+ continue;
282
+ }
283
+ const primitiveVector = createRawPrimitiveArrowVector(
284
+ field.type,
285
+ parquetField,
286
+ columnData,
287
+ start,
288
+ end
289
+ );
290
+ if (primitiveVector) {
291
+ vectors[field.name] = primitiveVector;
292
+ continue;
293
+ }
294
+ const byteVector = createRawByteArrowVector(field.type, parquetField, columnData, start, end);
295
+ if (byteVector) {
296
+ vectors[field.name] = byteVector;
297
+ continue;
298
+ }
299
+
300
+ let fullColumn = materializeColumn(parquetSchema, rowGroup, field.name);
301
+ if (!fullColumn && parquetField.fields) {
302
+ materializedRows ||= materializeRows(parquetSchema, rowGroup);
303
+ const fallbackTable: ObjectRowTable = {
304
+ shape: 'object-row-table',
305
+ schema: {
306
+ ...schema,
307
+ fields: schema.fields.filter(schemaField => schemaField.name === field.name)
308
+ },
309
+ data: materializedRows.slice(start, end)
310
+ };
311
+ const fallbackArrowTable = convertTable(fallbackTable, 'arrow-table');
312
+ const fallbackVector = fallbackArrowTable.data.getChild(field.name);
313
+ if (!fallbackVector) {
314
+ throw new Error(`Failed to materialize nested Parquet column ${field.name}`);
315
+ }
316
+ vectors[field.name] = fallbackVector;
317
+ continue;
318
+ }
319
+ fullColumn ||= new Array(rowGroup.rowCount).fill(null);
320
+ const column = sliceColumn(fullColumn, start, end);
321
+ vectors[field.name] = arrow.vectorFromArray(
322
+ normalizeArrowColumn(column, field.type),
323
+ field.type
324
+ );
325
+ }
326
+
327
+ return {
328
+ shape: 'arrow-table',
329
+ schema,
330
+ data: createArrowTable(arrowSchema, vectors, end - start)
331
+ };
332
+ }
333
+
334
+ /** Creates an exact Arrow Decimal128/256 vector from unscaled Parquet decimal values. */
335
+ function createDecimalArrowVector(
336
+ arrowType: arrow.DataType,
337
+ parquetField: ParquetField,
338
+ columnData: ParquetColumnChunk | undefined,
339
+ start: number,
340
+ end: number
341
+ ): arrow.Vector | undefined {
342
+ if (!(arrowType instanceof arrow.Decimal) || !columnData) {
343
+ return undefined;
344
+ }
345
+ const rowCount = end - start;
346
+ const wordCount = arrowType.bitWidth / 32;
347
+ const data = new Uint32Array(rowCount * wordCount);
348
+ const nullBitmap = parquetField.dLevelMax ? new Uint8Array(Math.ceil(rowCount / 8)) : undefined;
349
+ let nullCount = 0;
350
+ let valueIndex = 0;
351
+
352
+ if (nullBitmap) {
353
+ for (let rowIndex = 0; rowIndex < start; rowIndex++) {
354
+ if (columnData.dlevels[rowIndex] === parquetField.dLevelMax) valueIndex++;
355
+ }
356
+ } else {
357
+ valueIndex = start;
358
+ }
359
+
360
+ for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {
361
+ const sourceRowIndex = start + rowIndex;
362
+ if (!nullBitmap || columnData.dlevels[sourceRowIndex] === parquetField.dLevelMax) {
363
+ writeArrowDecimal(
364
+ data,
365
+ rowIndex * wordCount,
366
+ wordCount,
367
+ getUnscaledDecimal(columnData.values[valueIndex++]),
368
+ arrowType.bitWidth
369
+ );
370
+ if (nullBitmap) nullBitmap[rowIndex >> 3] |= 1 << (rowIndex & 7);
371
+ } else {
372
+ nullCount++;
373
+ }
374
+ }
375
+
376
+ return new arrow.Vector([
377
+ arrow.makeData({
378
+ type: arrowType,
379
+ data,
380
+ nullBitmap: nullCount ? nullBitmap : undefined,
381
+ nullCount
382
+ })
383
+ ]);
384
+ }
385
+
386
+ /** Converts one Parquet decimal physical value to its signed unscaled integer. */
387
+ function getUnscaledDecimal(value: unknown): bigint {
388
+ if (typeof value === 'bigint') return value;
389
+ if (typeof value === 'number') return BigInt(value);
390
+ const bytes = value as Uint8Array;
391
+ let unsignedValue = 0n;
392
+ for (const byte of bytes) unsignedValue = (unsignedValue << 8n) | BigInt(byte);
393
+ return bytes.length && bytes[0] & 0x80
394
+ ? unsignedValue - (1n << BigInt(bytes.length * 8))
395
+ : unsignedValue;
396
+ }
397
+
398
+ /** Writes one signed bigint into Arrow's little-endian two's-complement decimal buffer. */
399
+ function writeArrowDecimal(
400
+ data: Uint32Array,
401
+ offset: number,
402
+ wordCount: number,
403
+ value: bigint,
404
+ bitWidth: number
405
+ ): void {
406
+ const minimum = -(1n << BigInt(bitWidth - 1));
407
+ const maximum = (1n << BigInt(bitWidth - 1)) - 1n;
408
+ if (value < minimum || value > maximum) {
409
+ throw new Error(`Parquet decimal value ${value} exceeds Arrow Decimal${bitWidth}`);
410
+ }
411
+ let unsignedValue = BigInt.asUintN(bitWidth, value);
412
+ for (let wordIndex = 0; wordIndex < wordCount; wordIndex++) {
413
+ data[offset + wordIndex] = Number(unsignedValue & 0xffffffffn);
414
+ unsignedValue >>= 32n;
415
+ }
416
+ }
417
+
418
+ /** Creates an Arrow table while retaining row counts for a schema with no projected fields. */
419
+ function createArrowTable(
420
+ schema: arrow.Schema,
421
+ vectors: Record<string, arrow.Vector>,
422
+ rowCount: number
423
+ ): arrow.Table {
424
+ if (schema.fields.length) {
425
+ // Every vector represents one row-group slice and therefore has one data chunk. Supplying the
426
+ // Struct directly avoids Arrow Table's generic vector redistribution and schema reassignment.
427
+ const children = schema.fields.map(field => vectors[field.name].data[0]);
428
+ const data = arrow.makeData({
429
+ type: new arrow.Struct(schema.fields),
430
+ length: rowCount,
431
+ nullCount: 0,
432
+ children
433
+ });
434
+ const recordBatch = createParquetRecordBatch(schema, data);
435
+ return new arrow.Table(recordBatch);
436
+ }
437
+ if (rowCount === 0) {
438
+ return new arrow.Table(schema, vectors);
439
+ }
440
+
441
+ const recordBatch = createParquetRecordBatch(
442
+ schema,
443
+ arrow.makeData({type: new arrow.Struct([]), children: []})
444
+ );
445
+ // Apache Arrow JS derives RecordBatch length from its children and therefore resets an empty
446
+ // Struct to zero rows. Restore the explicit Parquet selection length after construction.
447
+ Object.defineProperty(recordBatch.data, 'length', {value: rowCount});
448
+ return new arrow.Table(schema, [recordBatch]);
449
+ }
450
+
451
+ /** Constructs a RecordBatch while restricting schema identity reuse to the synchronous call. */
452
+ function createParquetRecordBatch(
453
+ schema: arrow.Schema,
454
+ data: arrow.Data<arrow.Struct>
455
+ ): arrow.RecordBatch {
456
+ if (!(schema instanceof ParquetArrowSchema)) {
457
+ return new arrow.RecordBatch(schema, data);
458
+ }
459
+
460
+ schema.enableIdentityAssignmentReuse();
461
+ try {
462
+ return new arrow.RecordBatch(schema, data);
463
+ } finally {
464
+ schema.disableIdentityAssignmentReuse();
465
+ }
466
+ }
467
+
468
+ /** Typed arrays accepted by the direct primitive Arrow materialization path. */
469
+ type RawPrimitiveArrowArray =
470
+ | Float32Array
471
+ | Float64Array
472
+ | Int8Array
473
+ | Int16Array
474
+ | Int32Array
475
+ | Uint8Array
476
+ | Uint16Array
477
+ | Uint32Array
478
+ | BigInt64Array
479
+ | BigUint64Array;
480
+
481
+ /** Creates a fixed-width Arrow vector directly from decoded primitive Parquet values. */
482
+ function createRawPrimitiveArrowVector(
483
+ arrowType: arrow.DataType,
484
+ parquetField: ParquetField,
485
+ columnData: ParquetColumnChunk | undefined,
486
+ start: number,
487
+ end: number
488
+ ): arrow.Vector | undefined {
489
+ if (!columnData) {
490
+ return undefined;
491
+ }
492
+ const rowCount = end - start;
493
+ const directData = createRawPrimitiveArrowArrayView(
494
+ arrowType,
495
+ parquetField,
496
+ columnData,
497
+ start,
498
+ end
499
+ );
500
+ const data = directData || createRawPrimitiveArrowArray(arrowType, parquetField, rowCount);
501
+ if (!data) {
502
+ return undefined;
503
+ }
504
+
505
+ const nullBitmap = parquetField.dLevelMax ? new Uint8Array(Math.ceil(rowCount / 8)) : undefined;
506
+ let valueIndex = 0;
507
+ let nullCount = 0;
508
+
509
+ if (!nullBitmap) {
510
+ if (!directData) {
511
+ valueIndex = start;
512
+ for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {
513
+ setRawPrimitiveArrowValue(data, rowIndex, columnData.values[valueIndex++]);
514
+ }
515
+ }
516
+ } else {
517
+ for (let rowIndex = 0; rowIndex < start; rowIndex++) {
518
+ if (columnData.dlevels[rowIndex] === parquetField.dLevelMax) {
519
+ valueIndex++;
520
+ }
521
+ }
522
+ for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {
523
+ const sourceRowIndex = start + rowIndex;
524
+ if (columnData.dlevels[sourceRowIndex] === parquetField.dLevelMax) {
525
+ setRawPrimitiveArrowValue(data, rowIndex, columnData.values[valueIndex++]);
526
+ nullBitmap[rowIndex >> 3] |= 1 << (rowIndex & 7);
527
+ } else {
528
+ nullCount++;
529
+ }
530
+ }
531
+ }
532
+
533
+ const nulls = nullCount ? nullBitmap : undefined;
534
+ return new arrow.Vector([
535
+ arrow.makeData({type: arrowType, data, nullBitmap: nulls, nullCount} as any)
536
+ ]);
537
+ }
538
+
539
+ /** Reuses a typed decoded column as the Arrow value buffer for required primitive fields. */
540
+ function createRawPrimitiveArrowArrayView(
541
+ arrowType: arrow.DataType,
542
+ parquetField: ParquetField,
543
+ columnData: ParquetColumnChunk,
544
+ start: number,
545
+ end: number
546
+ ): RawPrimitiveArrowArray | undefined {
547
+ if (parquetField.repetitionType !== 'REQUIRED') {
548
+ return undefined;
549
+ }
550
+ const values = columnData.values;
551
+ if (
552
+ parquetField.primitiveType === 'FLOAT' &&
553
+ arrowType instanceof arrow.Float32 &&
554
+ values instanceof Float32Array
555
+ ) {
556
+ return values.subarray(start, end);
557
+ }
558
+ if (
559
+ parquetField.primitiveType === 'DOUBLE' &&
560
+ arrowType instanceof arrow.Float64 &&
561
+ values instanceof Float64Array
562
+ ) {
563
+ return values.subarray(start, end);
564
+ }
565
+ if (
566
+ parquetField.primitiveType === 'INT32' &&
567
+ (arrowType instanceof arrow.Int32 ||
568
+ arrowType instanceof arrow.DateDay ||
569
+ arrowType instanceof arrow.TimeMillisecond) &&
570
+ values instanceof Int32Array
571
+ ) {
572
+ return values.subarray(start, end);
573
+ }
574
+ if (
575
+ parquetField.primitiveType === 'INT64' &&
576
+ (arrowType instanceof arrow.Int64 ||
577
+ arrowType instanceof arrow.TimeMicrosecond ||
578
+ arrowType instanceof arrow.TimeNanosecond ||
579
+ arrowType instanceof arrow.TimestampMillisecond ||
580
+ arrowType instanceof arrow.TimestampMicrosecond ||
581
+ arrowType instanceof arrow.TimestampNanosecond) &&
582
+ values instanceof BigInt64Array
583
+ ) {
584
+ return values.subarray(start, end);
585
+ }
586
+ return undefined;
587
+ }
588
+
589
+ /** Allocates the Arrow typed array matching an unconverted physical Parquet primitive. */
590
+ function createRawPrimitiveArrowArray(
591
+ arrowType: arrow.DataType,
592
+ parquetField: ParquetField,
593
+ rowCount: number
594
+ ): RawPrimitiveArrowArray | undefined {
595
+ if (parquetField.primitiveType === 'FLOAT' && arrowType instanceof arrow.Float32) {
596
+ return new Float32Array(rowCount);
597
+ }
598
+ if (parquetField.primitiveType === 'DOUBLE' && arrowType instanceof arrow.Float64) {
599
+ return new Float64Array(rowCount);
600
+ }
601
+ if (parquetField.primitiveType === 'INT32' && arrowType instanceof arrow.Int8) {
602
+ return new Int8Array(rowCount);
603
+ }
604
+ if (parquetField.primitiveType === 'INT32' && arrowType instanceof arrow.Int16) {
605
+ return new Int16Array(rowCount);
606
+ }
607
+ if (
608
+ parquetField.primitiveType === 'INT32' &&
609
+ (arrowType instanceof arrow.Int32 ||
610
+ arrowType instanceof arrow.DateDay ||
611
+ arrowType instanceof arrow.TimeMillisecond)
612
+ ) {
613
+ return new Int32Array(rowCount);
614
+ }
615
+ if (parquetField.primitiveType === 'INT32' && arrowType instanceof arrow.Uint8) {
616
+ return new Uint8Array(rowCount);
617
+ }
618
+ if (parquetField.primitiveType === 'INT32' && arrowType instanceof arrow.Uint16) {
619
+ return new Uint16Array(rowCount);
620
+ }
621
+ if (parquetField.primitiveType === 'INT32' && arrowType instanceof arrow.Uint32) {
622
+ return new Uint32Array(rowCount);
623
+ }
624
+ if (
625
+ parquetField.primitiveType === 'INT64' &&
626
+ (arrowType instanceof arrow.Int64 ||
627
+ arrowType instanceof arrow.TimeMicrosecond ||
628
+ arrowType instanceof arrow.TimeNanosecond ||
629
+ arrowType instanceof arrow.TimestampMillisecond ||
630
+ arrowType instanceof arrow.TimestampMicrosecond ||
631
+ arrowType instanceof arrow.TimestampNanosecond)
632
+ ) {
633
+ return new BigInt64Array(rowCount);
634
+ }
635
+ if (parquetField.primitiveType === 'INT64' && arrowType instanceof arrow.Uint64) {
636
+ return new BigUint64Array(rowCount);
637
+ }
638
+ return undefined;
639
+ }
640
+
641
+ /** Writes a decoded primitive into the exact TypedArray expected by Arrow. */
642
+ function setRawPrimitiveArrowValue(
643
+ data: RawPrimitiveArrowArray,
644
+ index: number,
645
+ value: unknown
646
+ ): void {
647
+ if (data instanceof BigInt64Array) {
648
+ data[index] = typeof value === 'bigint' ? value : BigInt(value as number | string);
649
+ } else if (data instanceof BigUint64Array) {
650
+ data[index] = BigInt.asUintN(
651
+ 64,
652
+ typeof value === 'bigint' ? value : BigInt(value as number | string)
653
+ );
654
+ } else {
655
+ data[index] = Number(value);
656
+ }
657
+ }
658
+
659
+ /** Creates an Arrow Utf8 or Binary vector directly from decoded Parquet byte arrays. */
660
+ function createRawByteArrowVector(
661
+ arrowType: arrow.DataType,
662
+ parquetField: ParquetField,
663
+ columnData: ParquetColumnChunk | undefined,
664
+ start: number,
665
+ end: number
666
+ ): arrow.Vector | undefined {
667
+ if (!columnData || !supportsRawByteArrowVector(arrowType, parquetField)) {
668
+ return undefined;
669
+ }
670
+
671
+ const rowCount = end - start;
672
+ const valueOffsets = new Int32Array(rowCount + 1);
673
+ const byteValues = columnData.values as Uint8Array[];
674
+ const nullBitmap = parquetField.dLevelMax ? new Uint8Array(Math.ceil(rowCount / 8)) : undefined;
675
+ let valueIndex = 0;
676
+ let firstValueIndex = 0;
677
+ let dataByteLength = 0;
678
+ let nullCount = 0;
679
+
680
+ if (!nullBitmap) {
681
+ valueIndex = start;
682
+ firstValueIndex = valueIndex;
683
+ for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {
684
+ dataByteLength += byteValues[valueIndex++].byteLength;
685
+ if (dataByteLength > 0x7fffffff) {
686
+ throw new Error('Arrow Utf8/Binary column exceeds the 32-bit offset range');
687
+ }
688
+ valueOffsets[rowIndex + 1] = dataByteLength;
689
+ }
690
+ } else {
691
+ for (let rowIndex = 0; rowIndex < start; rowIndex++) {
692
+ if (columnData.dlevels[rowIndex] === parquetField.dLevelMax) {
693
+ valueIndex++;
694
+ }
695
+ }
696
+ firstValueIndex = valueIndex;
697
+ for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {
698
+ const sourceRowIndex = start + rowIndex;
699
+ if (columnData.dlevels[sourceRowIndex] === parquetField.dLevelMax) {
700
+ dataByteLength += byteValues[valueIndex++].byteLength;
701
+ nullBitmap[rowIndex >> 3] |= 1 << (rowIndex & 7);
702
+ } else {
703
+ nullCount++;
704
+ }
705
+ if (dataByteLength > 0x7fffffff) {
706
+ throw new Error('Arrow Utf8/Binary column exceeds the 32-bit offset range');
707
+ }
708
+ valueOffsets[rowIndex + 1] = dataByteLength;
709
+ }
710
+ }
711
+
712
+ const data = new Uint8Array(dataByteLength);
713
+ let dataOffset = 0;
714
+ for (let index = firstValueIndex; index < valueIndex; index++) {
715
+ const bytes = byteValues[index];
716
+ if (bytes.byteLength <= MAXIMUM_INLINE_BYTE_COPY_LENGTH) {
717
+ for (let byteIndex = 0; byteIndex < bytes.byteLength; byteIndex++) {
718
+ data[dataOffset++] = bytes[byteIndex];
719
+ }
720
+ } else {
721
+ data.set(bytes, dataOffset);
722
+ dataOffset += bytes.byteLength;
723
+ }
724
+ }
725
+
726
+ const nulls = nullCount ? nullBitmap : undefined;
727
+ if (arrowType instanceof arrow.Utf8) {
728
+ return new arrow.Vector([
729
+ arrow.makeData({
730
+ type: arrowType,
731
+ valueOffsets,
732
+ data,
733
+ nullBitmap: nulls,
734
+ nullCount
735
+ })
736
+ ]);
737
+ }
738
+ if (arrowType instanceof arrow.Binary) {
739
+ return new arrow.Vector([
740
+ arrow.makeData({
741
+ type: arrowType,
742
+ valueOffsets,
743
+ data,
744
+ nullBitmap: nulls,
745
+ nullCount
746
+ })
747
+ ]);
748
+ }
749
+ return undefined;
750
+ }
751
+
752
+ /** Returns whether one flat Parquet byte column maps directly to Arrow Utf8 or Binary. */
753
+ function supportsRawByteArrowVector(
754
+ arrowType: arrow.DataType,
755
+ parquetField: ParquetField
756
+ ): boolean {
757
+ if (arrowType instanceof arrow.Utf8) {
758
+ return parquetField.originalType === 'UTF8' || parquetField.originalType === 'ENUM';
759
+ }
760
+ if (arrowType instanceof arrow.Binary) {
761
+ return (
762
+ (!parquetField.originalType ||
763
+ parquetField.originalType === 'GEOMETRY' ||
764
+ parquetField.originalType === 'GEOGRAPHY') &&
765
+ (parquetField.primitiveType === 'BYTE_ARRAY' ||
766
+ parquetField.primitiveType === 'FIXED_LEN_BYTE_ARRAY')
767
+ );
768
+ }
769
+ return false;
770
+ }
771
+
772
+ /** Normalizes JavaScript values that Apache Arrow's 64-bit integer builders require as bigints. */
773
+ function normalizeArrowColumn(
774
+ column: ArrayLike<unknown>,
775
+ type: arrow.DataType
776
+ ): readonly unknown[] {
777
+ if (!(type instanceof arrow.Int) || type.bitWidth !== 64) {
778
+ return column as readonly unknown[];
779
+ }
780
+
781
+ return Array.from(column, value => {
782
+ if (value === null || value === undefined || typeof value === 'bigint') {
783
+ return value;
784
+ }
785
+ if (value instanceof Date) {
786
+ return BigInt(value.getTime());
787
+ }
788
+ return BigInt(value as number | string);
789
+ });
790
+ }
791
+
792
+ /** Slices one Arrow table while preserving the loaders.gl schema wrapper. */
793
+ function sliceArrowTable(table: ArrowTable, start: number, end: number): ArrowTable {
794
+ if (start === 0 && end === table.data.numRows) {
795
+ return table;
796
+ }
797
+ if (table.data.numCols === 0) {
798
+ return {...table, data: createArrowTable(table.data.schema, {}, end - start)};
799
+ }
800
+ return {...table, data: table.data.slice(start, end)};
801
+ }
802
+
803
+ /** Slices an arbitrary column while preserving efficient native slice implementations. */
804
+ function sliceColumn(column: ArrayLike<unknown>, start: number, end: number): ArrayLike<unknown> {
805
+ if ('slice' in column && typeof column.slice === 'function') {
806
+ return (column.slice as (start: number, end: number) => ArrayType)(start, end);
807
+ }
808
+ return Array.from(column).slice(start, end);
809
+ }
810
+
811
+ /** Creates row-group projection properties from public loader options. */
812
+ function getParquetIterationProps(
813
+ options?: ParquetJSLoaderOptions
814
+ ): {columnList?: string[] | string[][]} | undefined {
815
+ const columnList = options?.parquet?.columns;
816
+ return columnList?.length ? {columnList} : undefined;
817
+ }
818
+
819
+ /** Restricts the loaders.gl schema to explicitly selected top-level columns. */
820
+ function projectSchema(schema: Schema, columns?: string[]): Schema {
821
+ if (!columns?.length) {
822
+ return schema;
823
+ }
824
+
825
+ return {
826
+ ...schema,
827
+ fields: schema.fields.filter(field => columns.includes(field.name))
828
+ };
829
+ }