@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,374 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {ArrayType} from '@loaders.gl/schema';
6
+
7
+ import type {
8
+ ParquetColumnChunkStatistics,
9
+ ParquetComparisonPredicate,
10
+ ParquetInPredicate,
11
+ ParquetLogicalPredicate,
12
+ ParquetNotPredicate,
13
+ ParquetNullPredicate,
14
+ ParquetPredicate,
15
+ ParquetPredicateValue,
16
+ ParquetRowGroupMetadata
17
+ } from '../parquet-source-types';
18
+ import {encodeUtf8} from '../parquetjs/utils/binary-utils';
19
+
20
+ /** Returns the unique top-level columns referenced by a predicate. */
21
+ export function getParquetPredicateColumns(predicate: ParquetPredicate): string[] {
22
+ const columns = new Set<string>();
23
+ visitParquetPredicate(predicate, child => {
24
+ const property = getPredicateProperty(child);
25
+ if (property) {
26
+ columns.add(property.property);
27
+ }
28
+ });
29
+ return [...columns];
30
+ }
31
+
32
+ /** Copies a predicate tree and mutable scalar values for read-scoped option snapshots. */
33
+ export function copyParquetPredicate(predicate: ParquetPredicate): ParquetPredicate {
34
+ if (isParquetLogicalPredicate(predicate)) {
35
+ return {
36
+ op: predicate.op,
37
+ args: predicate.args.map(copyParquetPredicate)
38
+ };
39
+ }
40
+ if (isParquetNotPredicate(predicate)) {
41
+ return {
42
+ op: 'not',
43
+ args: [copyParquetPredicate(predicate.args[0])]
44
+ };
45
+ }
46
+ const property = copyPredicateProperty(predicate.args[0]);
47
+ if (predicate.op === 'isNull') {
48
+ return {op: 'isNull', args: [property]};
49
+ }
50
+ if (predicate.op === 'in') {
51
+ return {
52
+ op: 'in',
53
+ args: [property, predicate.args[1].map(copyPredicateValue)]
54
+ };
55
+ }
56
+ return {
57
+ op: predicate.op,
58
+ args: [property, copyPredicateValue(predicate.args[1])]
59
+ };
60
+ }
61
+
62
+ /** Validates a predicate and every referenced top-level column. */
63
+ export function validateParquetPredicate(
64
+ predicate: ParquetPredicate,
65
+ availableColumns: ReadonlySet<string>
66
+ ): void {
67
+ visitParquetPredicate(predicate, child => {
68
+ if (isParquetLogicalPredicate(child)) {
69
+ if (child.args.length < 2) {
70
+ throw new Error(`Parquet predicate ${child.op} requires at least two child predicates`);
71
+ }
72
+ return;
73
+ }
74
+ if (isParquetNotPredicate(child)) {
75
+ return;
76
+ }
77
+ const property = child.args[0];
78
+ if (!availableColumns.has(property.property)) {
79
+ throw new Error(`Parquet predicate column not found: ${property.property}`);
80
+ }
81
+ if (child.op === 'in' && child.args[1].length === 0) {
82
+ throw new Error('Parquet predicate in requires at least one value');
83
+ }
84
+ });
85
+ }
86
+
87
+ /** Conservatively determines whether a row group can contain a matching row. */
88
+ export function canParquetRowGroupMatch(
89
+ predicate: ParquetPredicate,
90
+ rowGroup: ParquetRowGroupMetadata
91
+ ): boolean {
92
+ if (isParquetLogicalPredicate(predicate)) {
93
+ return predicate.op === 'and'
94
+ ? predicate.args.every(child => canParquetRowGroupMatch(child, rowGroup))
95
+ : predicate.args.some(child => canParquetRowGroupMatch(child, rowGroup));
96
+ }
97
+ if (isParquetNotPredicate(predicate)) {
98
+ const child = predicate.args[0];
99
+ if (child.op !== 'isNull') {
100
+ return true;
101
+ }
102
+ const column = getRowGroupColumn(rowGroup, child.args[0].property);
103
+ return !column?.statistics || column.statistics.nullCount !== rowGroup.rowCount;
104
+ }
105
+
106
+ const column = getRowGroupColumn(rowGroup, predicate.args[0].property);
107
+ const statistics = column?.statistics;
108
+ if (!statistics) {
109
+ return true;
110
+ }
111
+ return canParquetStatisticsMatch(predicate, statistics, rowGroup.rowCount);
112
+ }
113
+
114
+ /** Conservatively determines whether one predicate leaf can match supplied statistics. */
115
+ export function canParquetStatisticsMatch(
116
+ predicate: ParquetComparisonPredicate | ParquetInPredicate | ParquetNullPredicate,
117
+ statistics: ParquetColumnChunkStatistics,
118
+ rowCount: number
119
+ ): boolean {
120
+ if (statistics.nullCount === rowCount) {
121
+ return predicate.op === 'isNull';
122
+ }
123
+ if (predicate.op === 'isNull') {
124
+ return statistics.nullCount !== 0;
125
+ }
126
+ const minimum = statistics.minIsExact === false ? undefined : statistics.min;
127
+ const maximum = statistics.maxIsExact === false ? undefined : statistics.max;
128
+ if (predicate.op === 'in') {
129
+ return predicate.args[1].some(value => canComparisonMatch('=', value, minimum, maximum));
130
+ }
131
+ return canComparisonMatch(predicate.op, predicate.args[1], minimum, maximum);
132
+ }
133
+
134
+ /** Returns exact source row indexes matching a predicate. */
135
+ export function filterParquetRowIndices(
136
+ predicate: ParquetPredicate | undefined,
137
+ columns: Record<string, ArrayType>,
138
+ rowCount: number
139
+ ): number[] {
140
+ if (!predicate) {
141
+ return Array.from({length: rowCount}, (_, index) => index);
142
+ }
143
+ const rowIndices: number[] = [];
144
+ for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {
145
+ if (evaluateParquetPredicate(predicate, columns, rowIndex) === true) {
146
+ rowIndices.push(rowIndex);
147
+ }
148
+ }
149
+ return rowIndices;
150
+ }
151
+
152
+ /** Gathers selected source rows without constructing row objects. */
153
+ export function gatherParquetColumns(
154
+ columns: Record<string, ArrayType>,
155
+ rowIndices: readonly number[],
156
+ selectedColumns?: ReadonlySet<string>
157
+ ): Record<string, ArrayType> {
158
+ const gatheredColumns: Record<string, ArrayType> = {};
159
+ for (const [name, column] of Object.entries(columns)) {
160
+ if (selectedColumns && !selectedColumns.has(name)) {
161
+ continue;
162
+ }
163
+ gatheredColumns[name] = rowIndices.map(rowIndex => getColumnValue(column, rowIndex));
164
+ }
165
+ return gatheredColumns;
166
+ }
167
+
168
+ /** Applies an exact predicate to one materialized row. */
169
+ function evaluateParquetPredicate(
170
+ predicate: ParquetPredicate,
171
+ columns: Record<string, ArrayType>,
172
+ rowIndex: number
173
+ ): boolean | null {
174
+ if (isParquetLogicalPredicate(predicate)) {
175
+ const results = predicate.args.map(child => evaluateParquetPredicate(child, columns, rowIndex));
176
+ if (predicate.op === 'and') {
177
+ return results.includes(false) ? false : results.includes(null) ? null : true;
178
+ }
179
+ return results.includes(true) ? true : results.includes(null) ? null : false;
180
+ }
181
+ if (isParquetNotPredicate(predicate)) {
182
+ const result = evaluateParquetPredicate(predicate.args[0], columns, rowIndex);
183
+ return result === null ? null : !result;
184
+ }
185
+ const value = getColumnValue(columns[predicate.args[0].property], rowIndex);
186
+ if (predicate.op === 'isNull') {
187
+ return value === null || value === undefined;
188
+ }
189
+ if (value === null || value === undefined) {
190
+ return null;
191
+ }
192
+ if (predicate.op === 'in') {
193
+ return predicate.args[1].some(candidate => comparePredicateValues(value, candidate) === 0);
194
+ }
195
+ const comparison = comparePredicateValues(value, predicate.args[1]);
196
+ switch (predicate.op) {
197
+ case '=':
198
+ return comparison === 0;
199
+ case '<>':
200
+ return comparison !== 0;
201
+ case '<':
202
+ return comparison < 0;
203
+ case '<=':
204
+ return comparison <= 0;
205
+ case '>':
206
+ return comparison > 0;
207
+ case '>=':
208
+ return comparison >= 0;
209
+ }
210
+ }
211
+
212
+ /** Returns whether footer min/max leave any possible match for one comparison. */
213
+ function canComparisonMatch(
214
+ operator: '=' | '<>' | '<' | '<=' | '>' | '>=',
215
+ value: ParquetPredicateValue,
216
+ minimum: unknown,
217
+ maximum: unknown
218
+ ): boolean {
219
+ try {
220
+ switch (operator) {
221
+ case '=':
222
+ return !(
223
+ (minimum !== undefined && compareStatisticsValues(value, minimum) < 0) ||
224
+ (maximum !== undefined && compareStatisticsValues(value, maximum) > 0)
225
+ );
226
+ case '<>':
227
+ return !(
228
+ minimum !== undefined &&
229
+ maximum !== undefined &&
230
+ compareStatisticsValues(value, minimum) === 0 &&
231
+ compareStatisticsValues(value, maximum) === 0
232
+ );
233
+ case '<':
234
+ return minimum === undefined || compareStatisticsValues(minimum, value) < 0;
235
+ case '<=':
236
+ return minimum === undefined || compareStatisticsValues(minimum, value) <= 0;
237
+ case '>':
238
+ return maximum === undefined || compareStatisticsValues(maximum, value) > 0;
239
+ case '>=':
240
+ return maximum === undefined || compareStatisticsValues(maximum, value) >= 0;
241
+ }
242
+ } catch {
243
+ return true;
244
+ }
245
+ }
246
+
247
+ /** Compares statistics using Parquet's unsigned UTF-8 byte ordering for strings. */
248
+ function compareStatisticsValues(left: unknown, right: unknown): number {
249
+ if (typeof left === 'string' && typeof right === 'string') {
250
+ return compareUint8Arrays(encodeUtf8(left), encodeUtf8(right));
251
+ }
252
+ return comparePredicateValues(left, right);
253
+ }
254
+
255
+ /** Compares predicate-compatible scalar values and rejects incomparable types. */
256
+ function comparePredicateValues(left: unknown, right: unknown): number {
257
+ if (left instanceof Uint8Array && right instanceof Uint8Array) {
258
+ return compareUint8Arrays(left, right);
259
+ }
260
+ if (left instanceof Uint8Array || right instanceof Uint8Array) {
261
+ throw new Error('Parquet binary predicates require binary values on both sides');
262
+ }
263
+ if (left instanceof Date || right instanceof Date) {
264
+ if (!(left instanceof Date) || !(right instanceof Date)) {
265
+ throw new Error('Parquet date predicates require date values on both sides');
266
+ }
267
+ const leftTime = left.getTime();
268
+ const rightTime = right.getTime();
269
+ if (!Number.isFinite(leftTime) || !Number.isFinite(rightTime)) {
270
+ throw new Error('Invalid dates cannot be ordered by a Parquet predicate');
271
+ }
272
+ return leftTime < rightTime ? -1 : leftTime > rightTime ? 1 : 0;
273
+ }
274
+ const leftType = typeof left;
275
+ const rightType = typeof right;
276
+ const bothNumeric =
277
+ (leftType === 'number' || leftType === 'bigint') &&
278
+ (rightType === 'number' || rightType === 'bigint');
279
+ if (!bothNumeric && leftType !== rightType) {
280
+ throw new Error(`Parquet predicate cannot compare ${leftType} with ${rightType}`);
281
+ }
282
+ if (!bothNumeric && leftType !== 'string' && leftType !== 'boolean') {
283
+ throw new Error(`Parquet predicate does not support ${leftType} values`);
284
+ }
285
+ const comparableLeft = left as string | boolean | number | bigint;
286
+ const comparableRight = right as string | boolean | number | bigint;
287
+ if (
288
+ (typeof comparableLeft === 'number' && !Number.isFinite(comparableLeft)) ||
289
+ (typeof comparableRight === 'number' && !Number.isFinite(comparableRight))
290
+ ) {
291
+ throw new Error('Non-finite numbers cannot be ordered by a Parquet predicate');
292
+ }
293
+ if ((comparableLeft as never) < (comparableRight as never)) {
294
+ return -1;
295
+ }
296
+ if ((comparableLeft as never) > (comparableRight as never)) {
297
+ return 1;
298
+ }
299
+ return 0;
300
+ }
301
+
302
+ /** Compares two byte sequences using unsigned lexicographic ordering. */
303
+ function compareUint8Arrays(left: Uint8Array, right: Uint8Array): number {
304
+ const length = Math.min(left.length, right.length);
305
+ for (let index = 0; index < length; index++) {
306
+ if (left[index] !== right[index]) {
307
+ return left[index] < right[index] ? -1 : 1;
308
+ }
309
+ }
310
+ return Math.sign(left.length - right.length);
311
+ }
312
+
313
+ /** Reads one value from an array-like materialized Parquet column. */
314
+ function getColumnValue(column: ArrayType | undefined, rowIndex: number): unknown {
315
+ if (!column) {
316
+ throw new Error('Parquet predicate column was not decoded');
317
+ }
318
+ return (column as ArrayLike<unknown>)[rowIndex];
319
+ }
320
+
321
+ /** Copies mutable binary and date predicate values. */
322
+ function copyPredicateValue(value: ParquetPredicateValue): ParquetPredicateValue {
323
+ if (value instanceof Uint8Array) {
324
+ return value.slice();
325
+ }
326
+ if (value instanceof Date) {
327
+ return new Date(value.getTime());
328
+ }
329
+ return value;
330
+ }
331
+
332
+ /** Copies a predicate property reference. */
333
+ function copyPredicateProperty(property: {property: string}): {property: string} {
334
+ return {property: property.property};
335
+ }
336
+
337
+ /** Returns the property reference from a leaf predicate. */
338
+ function getPredicateProperty(predicate: ParquetPredicate): {property: string} | undefined {
339
+ return isParquetLogicalPredicate(predicate) || isParquetNotPredicate(predicate)
340
+ ? undefined
341
+ : predicate.args[0];
342
+ }
343
+
344
+ /** Returns one top-level column chunk from normalized row-group metadata. */
345
+ function getRowGroupColumn(rowGroup: ParquetRowGroupMetadata, property: string) {
346
+ return rowGroup.columns.find(
347
+ columnChunk => columnChunk.path.length === 1 && columnChunk.path[0] === property
348
+ );
349
+ }
350
+
351
+ /** Visits every predicate node depth-first. */
352
+ function visitParquetPredicate(
353
+ predicate: ParquetPredicate,
354
+ visit: (predicate: ParquetPredicate) => void
355
+ ): void {
356
+ visit(predicate);
357
+ if (isParquetLogicalPredicate(predicate) || isParquetNotPredicate(predicate)) {
358
+ for (const child of predicate.args) {
359
+ visitParquetPredicate(child, visit);
360
+ }
361
+ }
362
+ }
363
+
364
+ /** Returns whether a predicate combines multiple child predicates. */
365
+ function isParquetLogicalPredicate(
366
+ predicate: ParquetPredicate
367
+ ): predicate is ParquetLogicalPredicate {
368
+ return predicate.op === 'and' || predicate.op === 'or';
369
+ }
370
+
371
+ /** Returns whether a predicate negates one child predicate. */
372
+ function isParquetNotPredicate(predicate: ParquetPredicate): predicate is ParquetNotPredicate {
373
+ return predicate.op === 'not';
374
+ }
@@ -0,0 +1,39 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {Loader} from '@loaders.gl/loader-utils';
6
+ import {canParseWithWorker, isBrowser, parseWithWorker} from '@loaders.gl/loader-utils';
7
+
8
+ import {PARQUET_LOADER_BASE} from '../parquet-loader-base';
9
+ import {PARQUET_SOURCE_WORKER_URL} from '../parquet-source-worker-url';
10
+ import type {
11
+ ParquetSourceWorkerInput,
12
+ ParquetSourceWorkerOptions,
13
+ ParquetSourceWorkerResult
14
+ } from './parquet-source-worker-types';
15
+
16
+ /** Private worker descriptor using the package-local selective source worker bundle. */
17
+ const PARQUET_SOURCE_WORKER: Loader = {
18
+ ...PARQUET_LOADER_BASE,
19
+ id: 'parquet-source',
20
+ name: 'ParquetSource',
21
+ worker: PARQUET_SOURCE_WORKER_URL
22
+ };
23
+
24
+ /** Returns whether this runtime and option set can decode Parquet source rows on a worker. */
25
+ export function canDecodeParquetSourceOnWorker(options: ParquetSourceWorkerOptions): boolean {
26
+ return isBrowser && canParseWithWorker(PARQUET_SOURCE_WORKER, options);
27
+ }
28
+
29
+ /** Sends selected compressed Parquet chunks to a worker and returns transferable Arrow buffers. */
30
+ export async function decodeParquetSourceRowGroupOnWorker(
31
+ input: ParquetSourceWorkerInput,
32
+ options: ParquetSourceWorkerOptions
33
+ ): Promise<ParquetSourceWorkerResult> {
34
+ return (await parseWithWorker(
35
+ PARQUET_SOURCE_WORKER,
36
+ input,
37
+ options
38
+ )) as ParquetSourceWorkerResult;
39
+ }
@@ -0,0 +1,156 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import {dehydrateArrowTable} from '@loaders.gl/arrow/transport';
6
+ import type {ArrayType} from '@loaders.gl/schema';
7
+ import {convertTable} from '@loaders.gl/schema-utils';
8
+
9
+ import {preloadCompressions} from '../parquetjs/compression';
10
+ import {filterParquetRowIndices, gatherParquetColumns} from './parquet-predicate';
11
+ import type {RowGroup} from '../parquetjs/parquet-thrift/index';
12
+ import {ParquetReader} from '../parquetjs/parser/parquet-reader';
13
+ import {ParquetSchema} from '../parquetjs/schema/schema';
14
+ import {ParquetSourceWorkerFile} from './parquet-source-worker-file';
15
+ import type {
16
+ ParquetSourceWorkerBatch,
17
+ ParquetSourceWorkerInput,
18
+ ParquetSourceWorkerResult
19
+ } from './parquet-source-worker-types';
20
+
21
+ /** Decodes one transferred row group entirely inside the worker. */
22
+ export async function decodeParquetSourceWorkerInput(
23
+ input: ParquetSourceWorkerInput
24
+ ): Promise<ParquetSourceWorkerResult> {
25
+ await preloadCompressions();
26
+ const file = new ParquetSourceWorkerFile(input.fileByteLength, input.ranges);
27
+ const schema = new ParquetSchema(input.schemaDefinition);
28
+ const reader = new ParquetReader(file, {preserveBinary: input.preserveBinary});
29
+ const rowGroup = createWorkerRowGroup(input);
30
+
31
+ const decodeStartTime = getCurrentTime();
32
+ const decodedRowGroups = input.pagePlan
33
+ ? await Promise.all(
34
+ input.pagePlan.rowRanges.map(rowRange =>
35
+ reader.readRowGroupRange(schema, rowGroup, [], rowRange, input.pagePlan!.pageLocations)
36
+ )
37
+ )
38
+ : [await reader.readRowGroup(schema, rowGroup, [])];
39
+ const columns = concatenateMaterializedColumns(
40
+ decodedRowGroups.map(decodedRowGroup => schema.materializeColumns(decodedRowGroup))
41
+ );
42
+ const sourceRowIndices = input.pagePlan
43
+ ? input.pagePlan.rowRanges.flatMap(rowRange =>
44
+ Array.from({length: rowRange.end - rowRange.start}, (_, index) => rowRange.start + index)
45
+ )
46
+ : undefined;
47
+ const sourceRowCount = sourceRowIndices?.length ?? input.rowCount;
48
+ const localRowIndices = input.predicate
49
+ ? filterParquetRowIndices(input.predicate, columns, sourceRowCount)
50
+ : undefined;
51
+ const rowIndices = localRowIndices?.map(rowIndex => sourceRowIndices?.[rowIndex] ?? rowIndex);
52
+ const decodeDurationMs = getCurrentTime() - decodeStartTime;
53
+
54
+ const conversionStartTime = getCurrentTime();
55
+ const batches: ParquetSourceWorkerBatch[] = [];
56
+ const outputColumns = new Set(input.projectedSchema.fields.map(field => field.name));
57
+ const outputRowCount = rowIndices?.length ?? sourceRowCount;
58
+ for (
59
+ let outputRowOffset = 0;
60
+ outputRowOffset < outputRowCount;
61
+ outputRowOffset += input.batchSize
62
+ ) {
63
+ const rowCount = Math.min(input.batchSize, outputRowCount - outputRowOffset);
64
+ const batchRowIndices = rowIndices?.slice(outputRowOffset, outputRowOffset + rowCount);
65
+ const batchLocalRowIndices = localRowIndices?.slice(
66
+ outputRowOffset,
67
+ outputRowOffset + rowCount
68
+ );
69
+ const rowGroupRowOffset = batchRowIndices?.[0] ?? outputRowOffset;
70
+ const batchColumns = batchLocalRowIndices
71
+ ? gatherParquetColumns(columns, batchLocalRowIndices, outputColumns)
72
+ : sliceColumns(columns, outputRowOffset, outputRowOffset + rowCount);
73
+ const arrowTable = convertTable(
74
+ {
75
+ shape: 'columnar-table',
76
+ schema: input.projectedSchema,
77
+ data: batchColumns
78
+ },
79
+ 'arrow-table'
80
+ );
81
+ batches.push({
82
+ rowGroupRowOffset,
83
+ rowCount,
84
+ rowGroupRowIndices: batchRowIndices,
85
+ arrowTable: dehydrateArrowTable(arrowTable.data)
86
+ });
87
+ }
88
+ const arrowConversionDurationMs = getCurrentTime() - conversionStartTime;
89
+ return {
90
+ sourceRowCount,
91
+ rowCount: outputRowCount,
92
+ batches,
93
+ decodeDurationMs,
94
+ arrowConversionDurationMs
95
+ };
96
+ }
97
+
98
+ /** Concatenates materialized page-range fragments without constructing row objects. */
99
+ function concatenateMaterializedColumns(
100
+ fragments: readonly Record<string, ArrayType>[]
101
+ ): Record<string, ArrayType> {
102
+ const columns: Record<string, unknown[]> = {};
103
+ for (const fragment of fragments) {
104
+ for (const [name, values] of Object.entries(fragment)) {
105
+ columns[name] ||= [];
106
+ const destination = columns[name];
107
+ for (let index = 0; index < values.length; index++) {
108
+ destination.push(values[index]);
109
+ }
110
+ }
111
+ }
112
+ return columns as Record<string, ArrayType>;
113
+ }
114
+
115
+ /** Returns a contiguous row slice of every decoded column without constructing row objects. */
116
+ function sliceColumns(
117
+ columns: Record<string, ArrayType>,
118
+ start: number,
119
+ end: number
120
+ ): Record<string, ArrayType> {
121
+ const slicedColumns: Record<string, ArrayType> = {};
122
+ for (const [name, column] of Object.entries(columns)) {
123
+ const slice = (column as ArrayType & {slice?: (start: number, end: number) => ArrayType}).slice;
124
+ slicedColumns[name] = slice
125
+ ? slice.call(column, start, end)
126
+ : Array.prototype.slice.call(column, start, end);
127
+ }
128
+ return slicedColumns;
129
+ }
130
+
131
+ /** Reconstructs the minimal Thrift-compatible row-group object used by the decoder. */
132
+ function createWorkerRowGroup(input: ParquetSourceWorkerInput): RowGroup {
133
+ return {
134
+ num_rows: input.rowCount,
135
+ total_byte_size: input.uncompressedByteLength,
136
+ columns: input.columnChunks.map(columnChunk => ({
137
+ file_path: columnChunk.filePath,
138
+ meta_data: {
139
+ type: columnChunk.physicalType,
140
+ codec: columnChunk.compressionCodec,
141
+ path_in_schema: columnChunk.path,
142
+ num_values: columnChunk.valueCount,
143
+ total_compressed_size: columnChunk.compressedByteLength,
144
+ total_uncompressed_size: columnChunk.uncompressedByteLength,
145
+ data_page_offset: columnChunk.dataPageOffset,
146
+ dictionary_page_offset: columnChunk.dictionaryPageOffset,
147
+ encodings: []
148
+ }
149
+ }))
150
+ } as unknown as RowGroup;
151
+ }
152
+
153
+ /** Returns a monotonic timestamp when available and falls back to wall-clock time. */
154
+ function getCurrentTime(): number {
155
+ return globalThis.performance?.now() ?? Date.now();
156
+ }
@@ -0,0 +1,56 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {ReadableFile, Stat} from '@loaders.gl/loader-utils';
6
+
7
+ import type {ParquetSourceWorkerRange} from './parquet-source-worker-types';
8
+
9
+ /** Readable file backed only by selected transferred ranges from the source object. */
10
+ export class ParquetSourceWorkerFile implements ReadableFile {
11
+ /** Synthetic worker-local file handle. */
12
+ readonly handle = 'parquet-source-worker';
13
+ /** Synthetic worker-local URL. */
14
+ readonly url = '';
15
+ /** Total source byte length. */
16
+ readonly size: number;
17
+ /** Total source byte length as a bigint. */
18
+ readonly bigsize: bigint;
19
+ /** Selected ranges available to decoder reads. */
20
+ private readonly ranges: ParquetSourceWorkerRange[];
21
+
22
+ /** Creates a virtual file over transferred selected ranges. */
23
+ constructor(fileByteLength: number, ranges: ParquetSourceWorkerRange[]) {
24
+ this.size = fileByteLength;
25
+ this.bigsize = BigInt(fileByteLength);
26
+ this.ranges = ranges;
27
+ }
28
+
29
+ /** Releases this no-op worker-local virtual file. */
30
+ async close(): Promise<void> {}
31
+
32
+ /** Returns the original source byte length. */
33
+ async stat(): Promise<Stat> {
34
+ return {size: this.size, bigsize: this.bigsize, isDirectory: false};
35
+ }
36
+
37
+ /** Reads one decoder-requested slice from a transferred selected range. */
38
+ async read(
39
+ start: number | bigint = 0,
40
+ length: number = this.size - Number(start)
41
+ ): Promise<ArrayBuffer> {
42
+ const offset = Number(start);
43
+ const range = this.ranges.find(
44
+ candidate =>
45
+ offset >= candidate.offset &&
46
+ offset + length <= candidate.offset + candidate.data.byteLength
47
+ );
48
+ if (!range) {
49
+ throw new Error(
50
+ `Parquet worker requested unavailable byte range ${offset}-${offset + length - 1}`
51
+ );
52
+ }
53
+ const relativeOffset = offset - range.offset;
54
+ return range.data.slice(relativeOffset, relativeOffset + length);
55
+ }
56
+ }