@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
@@ -7,6 +7,8 @@ import {isBrowser} from '@loaders.gl/loader-utils';
7
7
 
8
8
  export type StreamIteratorOptions = {
9
9
  _streamReadAhead?: boolean;
10
+ /** Cancels the active stream read and rejects iteration with the signal reason. */
11
+ signal?: AbortSignal;
10
12
  };
11
13
 
12
14
  /**
@@ -17,11 +19,16 @@ export function makeStreamIterator<T>(
17
19
  stream: ReadableStream<T> | Readable,
18
20
  options?: StreamIteratorOptions
19
21
  ): AsyncIterable<T> {
20
- return isBrowser
22
+ return isBrowser || isReadableStream(stream)
21
23
  ? makeBrowserStreamIterator(stream as ReadableStream<T>, options)
22
24
  : makeNodeStreamIterator(stream as Readable, options);
23
25
  }
24
26
 
27
+ /** Detects WHATWG streams in Node.js as well as in browsers. */
28
+ function isReadableStream<T>(stream: ReadableStream<T> | Readable): stream is ReadableStream<T> {
29
+ return typeof (stream as ReadableStream<T>).getReader === 'function';
30
+ }
31
+
25
32
  /**
26
33
  * Returns an async iterable that reads from a DOM (browser) stream
27
34
  * @param stream stream to iterate from
@@ -41,34 +48,76 @@ async function* makeBrowserStreamIterator<T>(
41
48
 
42
49
  // In the browser, we first need to get a lock on the stream
43
50
  const reader = stream.getReader();
51
+ const signal = options?.signal;
52
+ const abortListener = () => {
53
+ // Canceling the reader settles a pending read. The loop then throws the signal reason.
54
+ void reader.cancel(signal?.reason).catch(() => {});
55
+ };
44
56
 
45
57
  let nextBatchPromise: Promise<{done?: boolean; value?: T}> | undefined;
58
+ let streamFinished = false;
59
+ let streamReadFailed = false;
60
+ let iteratorFailed = false;
46
61
 
47
62
  try {
63
+ throwIfAborted(signal);
64
+ signal?.addEventListener('abort', abortListener, {once: true});
65
+
48
66
  // eslint-disable-next-line no-constant-condition
49
67
  while (true) {
50
68
  const currentBatchPromise = nextBatchPromise || reader.read();
51
- // Issue a read for an additional batch, while we await the next batch
52
- // Idea is to make fetching happen in parallel with processing / parsing
53
- if (options?._streamReadAhead) {
54
- nextBatchPromise = reader.read();
55
- }
69
+ nextBatchPromise = undefined;
56
70
  // Read from the stream
57
- // value is a Uint8Array
58
- const {done, value} = await currentBatchPromise;
71
+ let batch;
72
+ try {
73
+ batch = await currentBatchPromise;
74
+ } catch (error) {
75
+ streamReadFailed = true;
76
+ throw error;
77
+ }
78
+ throwIfAborted(signal);
79
+ const {done, value} = batch;
59
80
  // Exit if we're done
60
81
  if (done) {
82
+ streamFinished = true;
61
83
  return;
62
84
  }
85
+ // Issue a read for an additional batch while the current batch is processed
86
+ if (options?._streamReadAhead) {
87
+ nextBatchPromise = reader.read();
88
+ // Observe a prefetched rejection even if the consumer stops before requesting it
89
+ void nextBatchPromise.catch(() => {});
90
+ }
63
91
  // Else yield the chunk
64
92
  if (value) {
65
93
  yield value;
66
94
  }
67
95
  }
68
96
  } catch (error) {
69
- // TODO - examples makes it look like this should always be called,
70
- // but that generates exceptions so only call it if we do not reach the end
71
- reader.releaseLock();
97
+ iteratorFailed = true;
98
+ throw error;
99
+ } finally {
100
+ signal?.removeEventListener('abort', abortListener);
101
+ let cleanupError: unknown;
102
+
103
+ if (!streamFinished && !streamReadFailed) {
104
+ try {
105
+ await reader.cancel();
106
+ } catch (error) {
107
+ cleanupError = error;
108
+ }
109
+ }
110
+
111
+ try {
112
+ reader.releaseLock();
113
+ } catch (error) {
114
+ cleanupError ||= error;
115
+ }
116
+
117
+ // Preserve iteration errors instead of replacing them with cleanup errors
118
+ if (!iteratorFailed && cleanupError) {
119
+ throw cleanupError;
120
+ }
72
121
  }
73
122
  }
74
123
 
@@ -81,7 +130,70 @@ async function* makeNodeStreamIterator<T>(
81
130
  stream: Readable,
82
131
  options?: StreamIteratorOptions
83
132
  ): AsyncIterable<T> {
84
- // Hacky test for node version to ensure we don't call bad polyfills
85
- // NODE 10+: stream is an asyncIterator
86
- yield* stream;
133
+ // Node streams and modern Node.js Web streams both expose an async iterator.
134
+ const iterator = stream[Symbol.asyncIterator]();
135
+ const signal = options?.signal;
136
+ let abortListener: (() => void) | undefined;
137
+ const abortPromise = signal
138
+ ? new Promise<never>((_resolve, reject) => {
139
+ abortListener = () => reject(getAbortReason(signal));
140
+ signal.addEventListener('abort', abortListener, {once: true});
141
+ })
142
+ : null;
143
+ let iteratorFailed = false;
144
+ let streamFinished = false;
145
+
146
+ try {
147
+ throwIfAborted(signal);
148
+ // eslint-disable-next-line no-constant-condition
149
+ while (true) {
150
+ const nextPromise = iterator.next();
151
+ if (abortPromise) {
152
+ // Observe a late failure if cancellation wins the race.
153
+ void nextPromise.catch(() => {});
154
+ }
155
+ const result = abortPromise
156
+ ? await Promise.race([nextPromise, abortPromise])
157
+ : await nextPromise;
158
+ throwIfAborted(signal);
159
+ if (result.done) {
160
+ streamFinished = true;
161
+ return;
162
+ }
163
+ yield result.value;
164
+ }
165
+ } catch (error) {
166
+ iteratorFailed = true;
167
+ throw error;
168
+ } finally {
169
+ if (abortListener) {
170
+ signal?.removeEventListener('abort', abortListener);
171
+ }
172
+ if (!streamFinished) {
173
+ try {
174
+ await iterator.return?.();
175
+ } catch (error) {
176
+ if (!iteratorFailed) {
177
+ throw error;
178
+ }
179
+ }
180
+ }
181
+ }
182
+ }
183
+
184
+ /** Returns the standard AbortSignal reason, including a fallback for older runtimes. */
185
+ function getAbortReason(signal: AbortSignal): unknown {
186
+ if (signal.reason !== undefined) {
187
+ return signal.reason;
188
+ }
189
+ const error = new Error('The operation was aborted');
190
+ error.name = 'AbortError';
191
+ return error;
192
+ }
193
+
194
+ /** Throws at a cancellation checkpoint. */
195
+ function throwIfAborted(signal?: AbortSignal): void {
196
+ if (signal?.aborted) {
197
+ throw getAbortReason(signal);
198
+ }
87
199
  }
@@ -0,0 +1,14 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ /** Merge caller options with default parquet options while preserving top-level option bags. */
6
+ export function normalizeParquetOptions<OptionsT extends {parquet?: unknown}>(
7
+ options: OptionsT | undefined,
8
+ parquetDefaults: Record<string, unknown>
9
+ ): OptionsT {
10
+ return {
11
+ ...options,
12
+ parquet: {...parquetDefaults, ...(options?.parquet as Record<string, unknown> | undefined)}
13
+ } as unknown as OptionsT;
14
+ }
@@ -0,0 +1,488 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {CoreAPI} from '@loaders.gl/loader-utils';
6
+ import type {Schema} from '@loaders.gl/schema';
7
+
8
+ import {SingleBatchQueue} from './lib/sources/single-batch-queue';
9
+ import {ParquetSource} from './parquet-source-loader';
10
+ import type {
11
+ ParquetDatasetBatch,
12
+ ParquetDatasetBatchProvenance,
13
+ ParquetDatasetBoundingBox,
14
+ ParquetDatasetFile,
15
+ ParquetDatasetFileCollection,
16
+ ParquetDatasetFileQuery,
17
+ ParquetDatasetFiles,
18
+ ParquetDatasetPartitionValue,
19
+ ParquetDatasetReadOptions,
20
+ ParquetDatasetSourceOptions,
21
+ ParquetDatasetTelemetry,
22
+ ParquetSourceBatch,
23
+ ParquetTelemetry
24
+ } from './parquet-source-types';
25
+
26
+ export type {
27
+ ParquetDatasetBatch,
28
+ ParquetDatasetBatchProvenance,
29
+ ParquetDatasetBoundingBox,
30
+ ParquetDatasetFile,
31
+ ParquetDatasetFileCollection,
32
+ ParquetDatasetFileProvider,
33
+ ParquetDatasetFileQuery,
34
+ ParquetDatasetFiles,
35
+ ParquetDatasetPartitionValue,
36
+ ParquetDatasetReadOptions,
37
+ ParquetDatasetSourceOptions,
38
+ ParquetDatasetTelemetry
39
+ } from './parquet-source-types';
40
+
41
+ const DEFAULT_FILE_CONCURRENCY = 4;
42
+
43
+ type IndexedParquetDatasetFile = {
44
+ /** Descriptor returned by the provider. */
45
+ file: ParquetDatasetFile;
46
+ /** Position in provider output before local pruning. */
47
+ index: number;
48
+ };
49
+
50
+ type ScheduledFileRead = {
51
+ /** Bounded batch queue for this file. */
52
+ queue: SingleBatchQueue<ParquetDatasetBatch>;
53
+ /** File task used for deterministic cleanup. */
54
+ task: Promise<void>;
55
+ };
56
+
57
+ /**
58
+ * Multi-file Parquet source that composes catalog discovery with selective `ParquetSource` reads.
59
+ *
60
+ * The source accepts static descriptors or a lazy provider, allowing STAC and other catalogs to be
61
+ * injected without coupling `@loaders.gl/parquet` to a catalog protocol.
62
+ */
63
+ export class ParquetDatasetSource {
64
+ /** Static descriptors or lazy catalog-backed file provider. */
65
+ readonly files: ParquetDatasetFiles;
66
+ /** Child-source and dataset orchestration options. */
67
+ readonly options: ParquetDatasetSourceOptions;
68
+ /** Runtime hooks forwarded to child Parquet sources. */
69
+ readonly coreApi?: CoreAPI;
70
+
71
+ /** Abort controllers for active dataset reads. */
72
+ private readonly activeReadControllers = new Set<AbortController>();
73
+ /** Whether the dataset source has been permanently closed. */
74
+ private closed = false;
75
+ /** Cumulative dataset and child-source telemetry. */
76
+ private readonly telemetry = createParquetDatasetTelemetry();
77
+
78
+ /** Creates a logical dataset over static or lazily discovered Parquet files. */
79
+ constructor(
80
+ files: ParquetDatasetFiles,
81
+ options: ParquetDatasetSourceOptions = {},
82
+ coreApi?: CoreAPI
83
+ ) {
84
+ if (!Array.isArray(files) && typeof files !== 'function') {
85
+ throw new Error(
86
+ 'ParquetDatasetSource files must be a reusable descriptor array or a provider function'
87
+ );
88
+ }
89
+ this.files = files;
90
+ this.options = options;
91
+ this.coreApi = coreApi;
92
+ }
93
+
94
+ /** Returns the schema of the first selected file, closing its temporary child source afterward. */
95
+ async getSchema(query: ParquetDatasetFileQuery = {}): Promise<Schema> {
96
+ this.assertOpen();
97
+ const iterator = this.getSelectedFiles(query)[Symbol.asyncIterator]();
98
+ try {
99
+ const first = await iterator.next();
100
+ if (first.done) {
101
+ throw new Error('ParquetDatasetSource query selected no files');
102
+ }
103
+ const source = this.createSource(first.value.file);
104
+ this.telemetry.filesOpened++;
105
+ try {
106
+ return await source.getSchema({signal: query.signal});
107
+ } finally {
108
+ await source.close();
109
+ this.addParquetTelemetry(source.getTelemetry());
110
+ }
111
+ } finally {
112
+ await iterator.return?.();
113
+ }
114
+ }
115
+
116
+ /** Returns an immutable snapshot of cumulative dataset and child-source telemetry. */
117
+ getTelemetry(): ParquetDatasetTelemetry {
118
+ return Object.freeze({
119
+ ...this.telemetry,
120
+ parquet: Object.freeze({...this.telemetry.parquet})
121
+ });
122
+ }
123
+
124
+ /**
125
+ * Reads selected files as deterministic, file-ordered Arrow batches.
126
+ *
127
+ * Files are decoded concurrently. Each later file is limited to one buffered batch until all
128
+ * earlier files have been yielded, bounding memory while retaining stable provider order.
129
+ */
130
+ async *read(options: ParquetDatasetReadOptions = {}): AsyncIterable<ParquetDatasetBatch> {
131
+ this.assertOpen();
132
+ const readContext = createDatasetAbortContext(options.signal);
133
+ this.activeReadControllers.add(readContext.abortController);
134
+ const selectedFiles = this.getSelectedFiles({
135
+ ...options,
136
+ signal: readContext.abortController.signal
137
+ });
138
+ const iterator = selectedFiles[Symbol.asyncIterator]();
139
+ const scheduledReads = new Map<number, ScheduledFileRead>();
140
+ let nextSchedulePosition = 0;
141
+ let nextYieldPosition = 0;
142
+ let providerComplete = false;
143
+ let discoveryError: unknown;
144
+ const fileConcurrency = normalizeFileConcurrency(
145
+ options.fileConcurrency ?? this.options.parquetDataset?.fileConcurrency
146
+ );
147
+
148
+ const scheduleNext = async (): Promise<void> => {
149
+ if (providerComplete) {
150
+ return;
151
+ }
152
+ const next = await iterator.next();
153
+ if (next.done) {
154
+ providerComplete = true;
155
+ return;
156
+ }
157
+ const position = nextSchedulePosition++;
158
+ const queue = new SingleBatchQueue<ParquetDatasetBatch>();
159
+ const task = this.readFile(next.value, options, queue, readContext.abortController.signal);
160
+ scheduledReads.set(position, {queue, task});
161
+ };
162
+
163
+ const fillAvailableSlots = async (): Promise<void> => {
164
+ try {
165
+ while (scheduledReads.size < fileConcurrency && !providerComplete) {
166
+ await scheduleNext();
167
+ }
168
+ } catch (error) {
169
+ discoveryError = error;
170
+ providerComplete = true;
171
+ }
172
+ };
173
+
174
+ try {
175
+ await scheduleNext();
176
+ let discoveryPromise = fillAvailableSlots();
177
+
178
+ while (scheduledReads.size > 0) {
179
+ const scheduledRead = scheduledReads.get(nextYieldPosition);
180
+ if (!scheduledRead) {
181
+ throw new Error('ParquetDatasetSource internal file ordering error');
182
+ }
183
+ for await (const batch of scheduledRead.queue) {
184
+ throwIfAborted(readContext.abortController.signal);
185
+ this.telemetry.batchesEmitted++;
186
+ this.telemetry.rowsEmitted += batch.length;
187
+ yield batch;
188
+ }
189
+ await scheduledRead.task;
190
+ scheduledReads.delete(nextYieldPosition++);
191
+ await discoveryPromise;
192
+ if (discoveryError !== undefined) {
193
+ throw discoveryError;
194
+ }
195
+ discoveryPromise = fillAvailableSlots();
196
+ }
197
+ await discoveryPromise;
198
+ if (discoveryError !== undefined) {
199
+ throw discoveryError;
200
+ }
201
+ } finally {
202
+ readContext.abortController.abort();
203
+ readContext.removeSignalListener();
204
+ this.activeReadControllers.delete(readContext.abortController);
205
+ await iterator.return?.();
206
+ await Promise.allSettled([...scheduledReads.values()].map(read => read.task));
207
+ }
208
+ }
209
+
210
+ /** Permanently closes this dataset source and aborts every active read. */
211
+ async close(): Promise<void> {
212
+ if (this.closed) {
213
+ return;
214
+ }
215
+ this.closed = true;
216
+ for (const abortController of this.activeReadControllers) {
217
+ abortController.abort();
218
+ }
219
+ }
220
+
221
+ /** Reads one child source into its bounded file-order queue. */
222
+ private async readFile(
223
+ indexedFile: IndexedParquetDatasetFile,
224
+ options: ParquetDatasetReadOptions,
225
+ queue: SingleBatchQueue<ParquetDatasetBatch>,
226
+ signal: AbortSignal
227
+ ): Promise<void> {
228
+ const source = this.createSource(indexedFile.file);
229
+ this.telemetry.filesOpened++;
230
+ try {
231
+ if (this.options.parquetDataset?.validateSchema !== false) {
232
+ await this.validateFileSchema(source, indexedFile, signal);
233
+ }
234
+ for await (const batch of source.read({
235
+ columns: options.columns,
236
+ batchSize: options.batchSize,
237
+ concurrency: options.concurrency,
238
+ rowGroupFilter: options.rowGroupFilter,
239
+ predicate: options.predicate,
240
+ signal
241
+ })) {
242
+ await queue.push(createDatasetBatch(batch, indexedFile), signal);
243
+ }
244
+ queue.finish();
245
+ } catch (error) {
246
+ queue.fail(error);
247
+ } finally {
248
+ await source.close();
249
+ this.addParquetTelemetry(source.getTelemetry());
250
+ }
251
+ }
252
+
253
+ /** Establishes and validates a stable field schema for concurrently opened files. */
254
+ private schemaFingerprintPromise: Promise<string> | null = null;
255
+
256
+ /** Validates one child schema against the first file schema observed by this source. */
257
+ private async validateFileSchema(
258
+ source: ParquetSource,
259
+ indexedFile: IndexedParquetDatasetFile,
260
+ signal: AbortSignal
261
+ ): Promise<void> {
262
+ const schema = await source.getSchema({signal});
263
+ const fingerprint = getSchemaFingerprint(schema);
264
+ if (!this.schemaFingerprintPromise) {
265
+ this.schemaFingerprintPromise = Promise.resolve(fingerprint);
266
+ return;
267
+ }
268
+ const expectedFingerprint = await this.schemaFingerprintPromise;
269
+ if (fingerprint !== expectedFingerprint) {
270
+ throw new Error(
271
+ `Parquet dataset file ${getDatasetFileId(indexedFile.file, indexedFile.index)} has an incompatible schema`
272
+ );
273
+ }
274
+ }
275
+
276
+ /** Creates a child source while preserving caller fetch, worker, range, and decode options. */
277
+ private createSource(file: ParquetDatasetFile): ParquetSource {
278
+ return new ParquetSource(file.data, this.options, this.coreApi);
279
+ }
280
+
281
+ /** Lazily discovers descriptors and applies conservative local pruning. */
282
+ private async *getSelectedFiles(
283
+ query: ParquetDatasetFileQuery
284
+ ): AsyncIterable<IndexedParquetDatasetFile> {
285
+ throwIfAborted(query.signal);
286
+ const collection = await getFileCollection(this.files, query);
287
+ let index = 0;
288
+ for await (const file of collection) {
289
+ throwIfAborted(query.signal);
290
+ validateDatasetFile(file, index);
291
+ this.telemetry.filesDiscovered++;
292
+ if (query.bbox && file.bbox && !doBoundingBoxesIntersect(query.bbox, file.bbox)) {
293
+ this.telemetry.filesPrunedByBoundingBox++;
294
+ index++;
295
+ continue;
296
+ }
297
+ if (query.partitions && !matchesPartitions(file.partitions, query.partitions)) {
298
+ this.telemetry.filesPrunedByPartitions++;
299
+ index++;
300
+ continue;
301
+ }
302
+ this.telemetry.filesSelected++;
303
+ yield {file, index: index++};
304
+ }
305
+ }
306
+
307
+ /** Adds a final child-source telemetry snapshot exactly once. */
308
+ private addParquetTelemetry(telemetry: ParquetTelemetry): void {
309
+ for (const key of Object.keys(telemetry) as Array<keyof ParquetTelemetry>) {
310
+ this.telemetry.parquet[key] += telemetry[key];
311
+ }
312
+ }
313
+
314
+ /** Throws when an operation is attempted after `close()`. */
315
+ private assertOpen(): void {
316
+ if (this.closed) {
317
+ throw new Error('ParquetDatasetSource is closed');
318
+ }
319
+ }
320
+ }
321
+
322
+ /** Normalizes static descriptors and lazy providers into one file collection. */
323
+ async function getFileCollection(
324
+ files: ParquetDatasetFiles,
325
+ query: ParquetDatasetFileQuery
326
+ ): Promise<ParquetDatasetFileCollection> {
327
+ return typeof files === 'function' ? await files(query) : files;
328
+ }
329
+
330
+ /** Attaches dataset-level descriptor provenance without copying Arrow buffers. */
331
+ function createDatasetBatch(
332
+ batch: ParquetSourceBatch,
333
+ indexedFile: IndexedParquetDatasetFile
334
+ ): ParquetDatasetBatch {
335
+ const datasetProvenance = {
336
+ datasetFileIndex: indexedFile.index,
337
+ datasetFileId: getDatasetFileId(indexedFile.file, indexedFile.index),
338
+ datasetPartitions: indexedFile.file.partitions,
339
+ datasetFileMetadata: indexedFile.file.metadata
340
+ };
341
+ const provenance: ParquetDatasetBatchProvenance = Object.freeze({
342
+ sourceId: batch.sourceId,
343
+ sourceUrl: batch.sourceUrl,
344
+ source: batch.source,
345
+ rowGroupIndex: batch.rowGroupIndex,
346
+ rowOffset: batch.rowOffset,
347
+ rowGroupRowOffset: batch.rowGroupRowOffset,
348
+ rowCount: batch.rowCount,
349
+ rowGroupRowIndices: batch.rowGroupRowIndices,
350
+ rowIndices: batch.rowIndices,
351
+ ...datasetProvenance
352
+ });
353
+ return {...batch, metadata: provenance, ...datasetProvenance};
354
+ }
355
+
356
+ /** Returns a stable descriptor identity for batch provenance and diagnostics. */
357
+ function getDatasetFileId(file: ParquetDatasetFile, index: number): string {
358
+ if (file.id) {
359
+ return file.id;
360
+ }
361
+ if (typeof file.data === 'string') {
362
+ return file.data;
363
+ }
364
+ return typeof File !== 'undefined' && file.data instanceof File && file.data.name
365
+ ? file.data.name
366
+ : `blob-${index}`;
367
+ }
368
+
369
+ /** Validates a provider descriptor before opening a child source. */
370
+ function validateDatasetFile(file: ParquetDatasetFile, index: number): void {
371
+ if (!file || (typeof file.data !== 'string' && !(file.data instanceof Blob))) {
372
+ throw new Error(`Invalid Parquet dataset file descriptor at index ${index}`);
373
+ }
374
+ }
375
+
376
+ /** Tests 2D intersection while conservatively accepting additional dimensions. */
377
+ function doBoundingBoxesIntersect(
378
+ left: ParquetDatasetBoundingBox,
379
+ right: ParquetDatasetBoundingBox
380
+ ): boolean {
381
+ const leftMaximumX = left.length === 6 ? left[3] : left[2];
382
+ const leftMaximumY = left.length === 6 ? left[4] : left[3];
383
+ const rightMaximumX = right.length === 6 ? right[3] : right[2];
384
+ const rightMaximumY = right.length === 6 ? right[4] : right[3];
385
+ return (
386
+ left[0] <= rightMaximumX &&
387
+ leftMaximumX >= right[0] &&
388
+ left[1] <= rightMaximumY &&
389
+ leftMaximumY >= right[1]
390
+ );
391
+ }
392
+
393
+ /** Tests exact partition constraints without rejecting files that omit a requested key. */
394
+ function matchesPartitions(
395
+ partitions: Readonly<Record<string, ParquetDatasetPartitionValue>> | undefined,
396
+ query: NonNullable<ParquetDatasetFileQuery['partitions']>
397
+ ): boolean {
398
+ for (const [key, requested] of Object.entries(query)) {
399
+ const actual = partitions?.[key];
400
+ if (actual === undefined) {
401
+ continue;
402
+ }
403
+ const accepted = Array.isArray(requested) ? requested : [requested];
404
+ if (!accepted.includes(actual)) {
405
+ return false;
406
+ }
407
+ }
408
+ return true;
409
+ }
410
+
411
+ /** Creates a deterministic field-only schema fingerprint for cross-file validation. */
412
+ function getSchemaFingerprint(schema: Schema): string {
413
+ return JSON.stringify(schema.fields);
414
+ }
415
+
416
+ /** Validates and normalizes dataset-level file concurrency. */
417
+ function normalizeFileConcurrency(value: number | undefined): number {
418
+ const concurrency = value ?? DEFAULT_FILE_CONCURRENCY;
419
+ if (!Number.isInteger(concurrency) || concurrency < 1) {
420
+ throw new Error(`parquetDataset.fileConcurrency must be a positive integer, received ${value}`);
421
+ }
422
+ return concurrency;
423
+ }
424
+
425
+ /** Creates linked cancellation for one dataset read. */
426
+ function createDatasetAbortContext(signal?: AbortSignal): {
427
+ abortController: AbortController;
428
+ removeSignalListener: () => void;
429
+ } {
430
+ const abortController = new AbortController();
431
+ const abort = (): void => abortController.abort(signal?.reason);
432
+ if (signal?.aborted) {
433
+ abort();
434
+ } else {
435
+ signal?.addEventListener('abort', abort, {once: true});
436
+ }
437
+ return {
438
+ abortController,
439
+ removeSignalListener: () => signal?.removeEventListener('abort', abort)
440
+ };
441
+ }
442
+
443
+ /** Throws a standard abort failure when a dataset read has been cancelled. */
444
+ function throwIfAborted(signal?: AbortSignal): void {
445
+ if (signal?.aborted) {
446
+ throw signal.reason || new DOMException('Aborted', 'AbortError');
447
+ }
448
+ }
449
+
450
+ /** Creates zeroed cumulative dataset and child-source telemetry. */
451
+ function createParquetDatasetTelemetry(): ParquetDatasetTelemetry {
452
+ return {
453
+ filesDiscovered: 0,
454
+ filesSelected: 0,
455
+ filesPrunedByBoundingBox: 0,
456
+ filesPrunedByPartitions: 0,
457
+ filesOpened: 0,
458
+ batchesEmitted: 0,
459
+ rowsEmitted: 0,
460
+ parquet: {
461
+ rangeRequestCount: 0,
462
+ requestedBytes: 0,
463
+ downloadedBytes: 0,
464
+ cacheHits: 0,
465
+ networkDurationMs: 0,
466
+ failedRangeRequestCount: 0,
467
+ abortedRangeRequestCount: 0,
468
+ retryCount: 0,
469
+ decodeDurationMs: 0,
470
+ arrowConversionDurationMs: 0,
471
+ rowGroupsRequested: 0,
472
+ rowGroupsPruned: 0,
473
+ rowGroupsPrunedByStatistics: 0,
474
+ rowGroupsPrunedByPageIndex: 0,
475
+ pageIndexesRead: 0,
476
+ pagesRead: 0,
477
+ pagesPruned: 0,
478
+ rowsPrunedByPageIndex: 0,
479
+ rowGroupsDecoded: 0,
480
+ batchesEmitted: 0,
481
+ rowsEmitted: 0,
482
+ predicateRowsTested: 0,
483
+ predicateRowsMatched: 0,
484
+ cancellationCount: 0,
485
+ failedReadCount: 0
486
+ }
487
+ };
488
+ }
@@ -7,6 +7,8 @@ import type {Format} from '@loaders.gl/loader-utils';
7
7
  export const ParquetFormat = {
8
8
  name: 'Apache Parquet',
9
9
  category: 'table',
10
+ encoding: 'parquet',
11
+ format: 'parquet',
10
12
  extensions: ['parquet'],
11
13
  mimeTypes: ['application/octet-stream'],
12
14
  binary: true,