@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,587 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ // Portions adapted from hyparquet, Copyright (c) Hyperparam contributors
5
+
6
+ import type {PrimitiveType} from '../schema/declare';
7
+ import {concatUint8Arrays, copyUint8Array, toUint8Array} from '../utils/binary-utils';
8
+ import {
9
+ getParquetValueOutput,
10
+ type CursorBuffer,
11
+ type ParquetCodecOptions,
12
+ type ParquetValueBuffer
13
+ } from './declare';
14
+
15
+ const DELTA_BLOCK_SIZE = 128;
16
+ const DELTA_MINI_BLOCK_COUNT = 4;
17
+ const DELTA_VALUES_PER_MINI_BLOCK = DELTA_BLOCK_SIZE / DELTA_MINI_BLOCK_COUNT;
18
+
19
+ /** Encodes INT32 or INT64 values using Parquet DELTA_BINARY_PACKED. */
20
+ export function encodeDeltaBinaryPackedValues(
21
+ type: PrimitiveType,
22
+ values: unknown[],
23
+ _options: ParquetCodecOptions
24
+ ): Uint8Array {
25
+ if (type !== 'INT32' && type !== 'INT64') {
26
+ throw new Error(`DELTA_BINARY_PACKED does not support Parquet type ${type}`);
27
+ }
28
+ if (values.length === 0) {
29
+ return new Uint8Array(0);
30
+ }
31
+
32
+ const integerValues = values.map(value => getSignedInteger(type, value));
33
+ const output: Uint8Array[] = [
34
+ encodeUnsignedVarInt(BigInt(DELTA_BLOCK_SIZE)),
35
+ encodeUnsignedVarInt(BigInt(DELTA_MINI_BLOCK_COUNT)),
36
+ encodeUnsignedVarInt(BigInt(integerValues.length)),
37
+ encodeZigZagVarInt(integerValues[0])
38
+ ];
39
+
40
+ const deltas: bigint[] = [];
41
+ for (let valueIndex = 1; valueIndex < integerValues.length; valueIndex++) {
42
+ const delta = integerValues[valueIndex] - integerValues[valueIndex - 1];
43
+ deltas.push(type === 'INT32' ? BigInt.asIntN(32, delta) : BigInt.asIntN(64, delta));
44
+ }
45
+
46
+ for (let blockOffset = 0; blockOffset < deltas.length; blockOffset += DELTA_BLOCK_SIZE) {
47
+ const block = deltas.slice(blockOffset, blockOffset + DELTA_BLOCK_SIZE);
48
+ const minimumDelta = block.reduce(
49
+ (minimum, delta) => (delta < minimum ? delta : minimum),
50
+ block[0]
51
+ );
52
+ output.push(encodeZigZagVarInt(minimumDelta));
53
+
54
+ const miniBlocks: bigint[][] = [];
55
+ const bitWidths = new Uint8Array(DELTA_MINI_BLOCK_COUNT);
56
+ for (let miniBlockIndex = 0; miniBlockIndex < DELTA_MINI_BLOCK_COUNT; miniBlockIndex++) {
57
+ const miniBlockOffset = miniBlockIndex * DELTA_VALUES_PER_MINI_BLOCK;
58
+ const adjustedDeltas = block
59
+ .slice(miniBlockOffset, miniBlockOffset + DELTA_VALUES_PER_MINI_BLOCK)
60
+ .map(delta => delta - minimumDelta);
61
+ while (adjustedDeltas.length < DELTA_VALUES_PER_MINI_BLOCK) {
62
+ adjustedDeltas.push(0n);
63
+ }
64
+ miniBlocks.push(adjustedDeltas);
65
+ bitWidths[miniBlockIndex] = adjustedDeltas.reduce(
66
+ (bitWidth, delta) => Math.max(bitWidth, getUnsignedBitWidth(delta)),
67
+ 0
68
+ );
69
+ }
70
+ output.push(bitWidths);
71
+ for (let miniBlockIndex = 0; miniBlockIndex < DELTA_MINI_BLOCK_COUNT; miniBlockIndex++) {
72
+ output.push(packUnsignedValues(miniBlocks[miniBlockIndex], bitWidths[miniBlockIndex]));
73
+ }
74
+ }
75
+ return concatUint8Arrays(output);
76
+ }
77
+
78
+ /** Encodes BYTE_ARRAY values as delta-packed lengths followed by their contiguous payloads. */
79
+ export function encodeDeltaLengthByteArrayValues(
80
+ type: PrimitiveType,
81
+ values: unknown[],
82
+ _options: ParquetCodecOptions
83
+ ): Uint8Array {
84
+ if (type !== 'BYTE_ARRAY') {
85
+ throw new Error(`DELTA_LENGTH_BYTE_ARRAY does not support Parquet type ${type}`);
86
+ }
87
+ const byteArrays = values.map(value => toUint8Array(value as ArrayBuffer | ArrayBufferView));
88
+ const encodedLengths = encodeDeltaBinaryPackedValues(
89
+ 'INT32',
90
+ byteArrays.map(value => value.byteLength),
91
+ {}
92
+ );
93
+ return concatUint8Arrays([encodedLengths, ...byteArrays]);
94
+ }
95
+
96
+ /** Encodes byte arrays as delta-packed prefix lengths and delta-length suffixes. */
97
+ export function encodeDeltaByteArrayValues(
98
+ type: PrimitiveType,
99
+ values: unknown[],
100
+ _options: ParquetCodecOptions
101
+ ): Uint8Array {
102
+ assertByteArrayType(type, 'DELTA_BYTE_ARRAY');
103
+ const byteArrays = values.map(value => toUint8Array(value as ArrayBuffer | ArrayBufferView));
104
+ const prefixLengths: number[] = [];
105
+ const suffixes: Uint8Array[] = [];
106
+ let previousValue: Uint8Array = new Uint8Array(0);
107
+ for (const value of byteArrays) {
108
+ const prefixLength = getCommonPrefixLength(previousValue, value);
109
+ prefixLengths.push(prefixLength);
110
+ suffixes.push(value.subarray(prefixLength));
111
+ previousValue = value;
112
+ }
113
+ return concatUint8Arrays([
114
+ encodeDeltaBinaryPackedValues('INT32', prefixLengths, {}),
115
+ encodeDeltaLengthByteArrayValues('BYTE_ARRAY', suffixes, {})
116
+ ]);
117
+ }
118
+
119
+ /** Returns whether an encoding is valid for a physical Parquet type. */
120
+ export function isDeltaEncodingType(encoding: string, type: PrimitiveType): boolean {
121
+ switch (encoding) {
122
+ case 'DELTA_BINARY_PACKED':
123
+ return type === 'INT32' || type === 'INT64';
124
+ case 'DELTA_LENGTH_BYTE_ARRAY':
125
+ return type === 'BYTE_ARRAY';
126
+ case 'DELTA_BYTE_ARRAY':
127
+ return type === 'BYTE_ARRAY' || type === 'FIXED_LEN_BYTE_ARRAY';
128
+ default:
129
+ return false;
130
+ }
131
+ }
132
+
133
+ /** Converts one writer value to its exact signed physical integer. */
134
+ function getSignedInteger(type: 'INT32' | 'INT64', value: unknown): bigint {
135
+ let integerValue: bigint;
136
+ try {
137
+ integerValue = BigInt(value as bigint | boolean | number | string);
138
+ } catch {
139
+ throw new Error(`Invalid ${type} value ${value}`);
140
+ }
141
+ const bitWidth = type === 'INT32' ? 32 : 64;
142
+ if (integerValue !== BigInt.asIntN(bitWidth, integerValue)) {
143
+ throw new Error(`${type} value ${value} is out of range`);
144
+ }
145
+ return integerValue;
146
+ }
147
+
148
+ /** Encodes a non-negative integer as an unsigned base-128 variable integer. */
149
+ function encodeUnsignedVarInt(value: bigint): Uint8Array {
150
+ if (value < 0n) {
151
+ throw new Error(`Cannot encode negative unsigned variable integer ${value}`);
152
+ }
153
+ const bytes: number[] = [];
154
+ let remainingValue = value;
155
+ do {
156
+ const byte = Number(remainingValue & 0x7fn);
157
+ remainingValue >>= 7n;
158
+ bytes.push(remainingValue === 0n ? byte : byte | 0x80);
159
+ } while (remainingValue !== 0n);
160
+ return Uint8Array.from(bytes);
161
+ }
162
+
163
+ /** Encodes a signed integer using zig-zag base-128 variable integer representation. */
164
+ function encodeZigZagVarInt(value: bigint): Uint8Array {
165
+ const zigZagValue = value >= 0n ? value * 2n : -value * 2n - 1n;
166
+ return encodeUnsignedVarInt(zigZagValue);
167
+ }
168
+
169
+ /** Returns the minimum unsigned bit width needed for a non-negative integer. */
170
+ function getUnsignedBitWidth(value: bigint): number {
171
+ if (value < 0n) {
172
+ throw new Error(`Cannot bit-pack negative value ${value}`);
173
+ }
174
+ return value === 0n ? 0 : value.toString(2).length;
175
+ }
176
+
177
+ /** Bit-packs unsigned values least-significant bit first as required by Parquet. */
178
+ function packUnsignedValues(values: bigint[], bitWidth: number): Uint8Array {
179
+ if (bitWidth === 0) {
180
+ return new Uint8Array(0);
181
+ }
182
+ const output = new Uint8Array((values.length * bitWidth) / 8);
183
+ const mask = (1n << BigInt(bitWidth)) - 1n;
184
+ let packedBits = 0n;
185
+ let packedBitCount = 0;
186
+ let outputOffset = 0;
187
+ for (const value of values) {
188
+ packedBits |= (value & mask) << BigInt(packedBitCount);
189
+ packedBitCount += bitWidth;
190
+ while (packedBitCount >= 8) {
191
+ output[outputOffset++] = Number(packedBits & 0xffn);
192
+ packedBits >>= 8n;
193
+ packedBitCount -= 8;
194
+ }
195
+ }
196
+ return output;
197
+ }
198
+
199
+ /** Returns the common leading byte count of two byte arrays. */
200
+ function getCommonPrefixLength(left: Uint8Array, right: Uint8Array): number {
201
+ const maximumLength = Math.min(left.length, right.length);
202
+ let prefixLength = 0;
203
+ while (prefixLength < maximumLength && left[prefixLength] === right[prefixLength]) {
204
+ prefixLength++;
205
+ }
206
+ return prefixLength;
207
+ }
208
+
209
+ /** Decodes one Parquet delta encoding based on its registered codec name. */
210
+ export function decodeDeltaBinaryPackedValues(
211
+ type: PrimitiveType,
212
+ cursor: CursorBuffer,
213
+ count: number,
214
+ options: ParquetCodecOptions
215
+ ): ParquetValueBuffer {
216
+ if (type !== 'INT32' && type !== 'INT64') {
217
+ throw new Error(`DELTA_BINARY_PACKED does not support Parquet type ${type}`);
218
+ }
219
+ if (count === 0) {
220
+ return getParquetValueOutput(options, 0).output;
221
+ }
222
+
223
+ const blockSize = readUnsignedVarIntNumber(cursor);
224
+ const miniBlockCount = readUnsignedVarIntNumber(cursor);
225
+ const totalValueCount = readUnsignedVarIntNumber(cursor);
226
+ if (blockSize <= 0 || miniBlockCount <= 0 || blockSize % miniBlockCount !== 0) {
227
+ throw new Error('Invalid DELTA_BINARY_PACKED block header');
228
+ }
229
+ if (totalValueCount < count) {
230
+ throw new Error(
231
+ `DELTA_BINARY_PACKED contains ${totalValueCount} values, expected at least ${count}`
232
+ );
233
+ }
234
+
235
+ const valuesPerMiniBlock = blockSize / miniBlockCount;
236
+ if (valuesPerMiniBlock % 8 !== 0) {
237
+ throw new Error('Invalid DELTA_BINARY_PACKED mini-block size');
238
+ }
239
+
240
+ return type === 'INT32'
241
+ ? decodeDeltaBinaryPackedInt32Values(cursor, count, miniBlockCount, valuesPerMiniBlock, options)
242
+ : decodeDeltaBinaryPackedInt64Values(
243
+ cursor,
244
+ count,
245
+ miniBlockCount,
246
+ valuesPerMiniBlock,
247
+ options
248
+ );
249
+ }
250
+
251
+ /** Decodes DELTA_BINARY_PACKED INT32 values without entering the BigInt hot path. */
252
+ function decodeDeltaBinaryPackedInt32Values(
253
+ cursor: CursorBuffer,
254
+ count: number,
255
+ miniBlockCount: number,
256
+ valuesPerMiniBlock: number,
257
+ options: ParquetCodecOptions
258
+ ): ParquetValueBuffer {
259
+ const {output, outputOffset} = getParquetValueOutput(options, count);
260
+ let value = readZigZagVarInt32(cursor);
261
+ let outputIndex = 0;
262
+ output[outputOffset + outputIndex++] = value;
263
+
264
+ while (outputIndex < count) {
265
+ const minimumDelta = readZigZagVarInt32(cursor);
266
+ const bitWidths = readBitWidths(cursor, miniBlockCount, 32);
267
+ for (const bitWidth of bitWidths) {
268
+ const packedOffset = cursor.offset;
269
+ const packedByteLength = (valuesPerMiniBlock * bitWidth) / 8;
270
+ assertReadable(cursor, packedByteLength);
271
+ const valueCount = Math.min(valuesPerMiniBlock, count - outputIndex);
272
+ value = decodeInt32MiniBlock(
273
+ cursor.buffer,
274
+ packedOffset,
275
+ bitWidth,
276
+ valueCount,
277
+ minimumDelta,
278
+ value,
279
+ output,
280
+ outputOffset + outputIndex
281
+ );
282
+ outputIndex += valueCount;
283
+ cursor.offset += packedByteLength;
284
+ if (outputIndex === count) {
285
+ break;
286
+ }
287
+ }
288
+ }
289
+
290
+ return output;
291
+ }
292
+
293
+ /** Decodes one INT32 mini-block with an exact number-based bit reservoir. */
294
+ function decodeInt32MiniBlock(
295
+ buffer: Uint8Array,
296
+ packedOffset: number,
297
+ bitWidth: number,
298
+ count: number,
299
+ minimumDelta: number,
300
+ initialValue: number,
301
+ output: ParquetValueBuffer,
302
+ outputOffset: number
303
+ ): number {
304
+ let value = initialValue;
305
+ if (bitWidth === 0) {
306
+ for (let index = 0; index < count; index++) {
307
+ value = (value + minimumDelta) | 0;
308
+ output[outputOffset + index] = value;
309
+ }
310
+ return value;
311
+ }
312
+
313
+ const divisor = 2 ** bitWidth;
314
+ let packedBits = 0;
315
+ let packedBitCount = 0;
316
+ let byteOffset = packedOffset;
317
+ for (let index = 0; index < count; index++) {
318
+ while (packedBitCount < bitWidth) {
319
+ packedBits += buffer[byteOffset++] * 2 ** packedBitCount;
320
+ packedBitCount += 8;
321
+ }
322
+ const packedDelta = packedBits % divisor;
323
+ packedBits = Math.floor(packedBits / divisor);
324
+ packedBitCount -= bitWidth;
325
+ value = (value + minimumDelta + packedDelta) | 0;
326
+ output[outputOffset + index] = value;
327
+ }
328
+ return value;
329
+ }
330
+
331
+ /** Decodes DELTA_BINARY_PACKED INT64 values with width-specialized bit reservoirs. */
332
+ function decodeDeltaBinaryPackedInt64Values(
333
+ cursor: CursorBuffer,
334
+ count: number,
335
+ miniBlockCount: number,
336
+ valuesPerMiniBlock: number,
337
+ options: ParquetCodecOptions
338
+ ): ParquetValueBuffer {
339
+ const {output, outputOffset} = getParquetValueOutput(options, count);
340
+ let value = readZigZagVarInt(cursor);
341
+ let outputIndex = 0;
342
+ writeInt64Output(output, outputOffset + outputIndex++, value, options.int64AsBigInt);
343
+
344
+ while (outputIndex < count) {
345
+ const minimumDelta = readZigZagVarInt(cursor);
346
+ const bitWidths = readBitWidths(cursor, miniBlockCount, 64);
347
+ for (const bitWidth of bitWidths) {
348
+ const packedOffset = cursor.offset;
349
+ const packedByteLength = (valuesPerMiniBlock * bitWidth) / 8;
350
+ assertReadable(cursor, packedByteLength);
351
+ const valueCount = Math.min(valuesPerMiniBlock, count - outputIndex);
352
+ value = decodeInt64MiniBlock(
353
+ cursor.buffer,
354
+ packedOffset,
355
+ bitWidth,
356
+ valueCount,
357
+ minimumDelta,
358
+ value,
359
+ output,
360
+ outputOffset + outputIndex,
361
+ options.int64AsBigInt
362
+ );
363
+ outputIndex += valueCount;
364
+ cursor.offset += packedByteLength;
365
+ if (outputIndex === count) {
366
+ break;
367
+ }
368
+ }
369
+ }
370
+
371
+ return output;
372
+ }
373
+
374
+ /** Decodes one INT64 mini-block, using numbers whenever the packed value remains exact. */
375
+ function decodeInt64MiniBlock(
376
+ buffer: Uint8Array,
377
+ packedOffset: number,
378
+ bitWidth: number,
379
+ count: number,
380
+ minimumDelta: bigint,
381
+ initialValue: bigint,
382
+ output: ParquetValueBuffer,
383
+ outputOffset: number,
384
+ int64AsBigInt: boolean | undefined
385
+ ): bigint {
386
+ let value = initialValue;
387
+ if (bitWidth === 0) {
388
+ for (let index = 0; index < count; index++) {
389
+ value += minimumDelta;
390
+ writeInt64Output(output, outputOffset + index, value, int64AsBigInt);
391
+ }
392
+ return value;
393
+ }
394
+
395
+ if (bitWidth <= 45) {
396
+ const divisor = 2 ** bitWidth;
397
+ let packedBits = 0;
398
+ let packedBitCount = 0;
399
+ let byteOffset = packedOffset;
400
+ for (let index = 0; index < count; index++) {
401
+ while (packedBitCount < bitWidth) {
402
+ packedBits += buffer[byteOffset++] * 2 ** packedBitCount;
403
+ packedBitCount += 8;
404
+ }
405
+ const packedDelta = packedBits % divisor;
406
+ packedBits = Math.floor(packedBits / divisor);
407
+ packedBitCount -= bitWidth;
408
+ value += minimumDelta + BigInt(packedDelta);
409
+ writeInt64Output(output, outputOffset + index, value, int64AsBigInt);
410
+ }
411
+ return value;
412
+ }
413
+
414
+ const bitWidthBigInt = BigInt(bitWidth);
415
+ const mask = (1n << bitWidthBigInt) - 1n;
416
+ let packedBits = 0n;
417
+ let packedBitCount = 0;
418
+ let byteOffset = packedOffset;
419
+ for (let index = 0; index < count; index++) {
420
+ while (packedBitCount < bitWidth) {
421
+ const byteCount = Math.min(6, Math.ceil((bitWidth - packedBitCount) / 8));
422
+ let chunk = 0;
423
+ let multiplier = 1;
424
+ for (let byteIndex = 0; byteIndex < byteCount; byteIndex++) {
425
+ chunk += buffer[byteOffset++] * multiplier;
426
+ multiplier *= 256;
427
+ }
428
+ packedBits |= BigInt(chunk) << BigInt(packedBitCount);
429
+ packedBitCount += byteCount * 8;
430
+ }
431
+ const packedDelta = packedBits & mask;
432
+ packedBits >>= bitWidthBigInt;
433
+ packedBitCount -= bitWidth;
434
+ value += minimumDelta + packedDelta;
435
+ writeInt64Output(output, outputOffset + index, value, int64AsBigInt);
436
+ }
437
+ return value;
438
+ }
439
+
440
+ /** Writes one signed INT64 without a bigint-to-number round trip for Arrow destinations. */
441
+ function writeInt64Output(
442
+ output: ParquetValueBuffer,
443
+ outputIndex: number,
444
+ value: bigint,
445
+ int64AsBigInt: boolean | undefined
446
+ ): void {
447
+ (output as unknown[])[outputIndex] = int64AsBigInt
448
+ ? BigInt.asIntN(64, value)
449
+ : Number(BigInt.asIntN(64, value));
450
+ }
451
+
452
+ /** Decodes lengths with delta packing followed by contiguous byte-array payloads. */
453
+ export function decodeDeltaLengthByteArrayValues(
454
+ type: PrimitiveType,
455
+ cursor: CursorBuffer,
456
+ count: number,
457
+ options: ParquetCodecOptions
458
+ ): ParquetValueBuffer {
459
+ assertByteArrayType(type, 'DELTA_LENGTH_BYTE_ARRAY');
460
+ const lengths = decodeDeltaBinaryPackedValues('INT32', cursor, count, {});
461
+ const {output, outputOffset} = getParquetValueOutput(options, count);
462
+ for (let index = 0; index < count; index++) {
463
+ output[outputOffset + index] = readByteArray(cursor, Number(lengths[index]));
464
+ }
465
+ return output;
466
+ }
467
+
468
+ /** Decodes prefix lengths and delta-length suffixes into complete byte-array values. */
469
+ export function decodeDeltaByteArrayValues(
470
+ type: PrimitiveType,
471
+ cursor: CursorBuffer,
472
+ count: number,
473
+ options: ParquetCodecOptions
474
+ ): ParquetValueBuffer {
475
+ assertByteArrayType(type, 'DELTA_BYTE_ARRAY');
476
+ const prefixLengths = decodeDeltaBinaryPackedValues('INT32', cursor, count, {});
477
+ const suffixes = decodeDeltaLengthByteArrayValues(type, cursor, count, {});
478
+ const {output, outputOffset} = getParquetValueOutput(options, count);
479
+ let previousValue: Uint8Array | undefined;
480
+
481
+ for (let index = 0; index < count; index++) {
482
+ const prefixLength = Number(prefixLengths[index]);
483
+ const suffix = suffixes[index] as Uint8Array;
484
+ if (prefixLength < 0 || (prefixLength > 0 && prefixLength > (previousValue?.length || 0))) {
485
+ throw new Error(`Invalid DELTA_BYTE_ARRAY prefix length ${prefixLength}`);
486
+ }
487
+ if (prefixLength === 0) {
488
+ output[outputOffset + index] = suffix;
489
+ previousValue = suffix;
490
+ continue;
491
+ }
492
+ const value = new Uint8Array(prefixLength + suffix.length);
493
+ value.set(previousValue!.subarray(0, prefixLength));
494
+ value.set(suffix, prefixLength);
495
+ output[outputOffset + index] = value;
496
+ previousValue = value;
497
+ }
498
+
499
+ return output;
500
+ }
501
+
502
+ /** Reads and validates a sequence of one-byte mini-block bit widths. */
503
+ function readBitWidths(cursor: CursorBuffer, count: number, maximumBitWidth: number): Uint8Array {
504
+ assertReadable(cursor, count);
505
+ const bitWidths = cursor.buffer.subarray(cursor.offset, cursor.offset + count);
506
+ cursor.offset += count;
507
+ for (const bitWidth of bitWidths) {
508
+ if (bitWidth > maximumBitWidth) {
509
+ throw new Error('Invalid DELTA_BINARY_PACKED bit width');
510
+ }
511
+ }
512
+ return bitWidths;
513
+ }
514
+
515
+ /** Reads an unsigned base-128 variable-length integer. */
516
+ function readUnsignedVarInt(cursor: CursorBuffer): bigint {
517
+ let value = 0n;
518
+ for (let byteIndex = 0; byteIndex < 10; byteIndex++) {
519
+ assertReadable(cursor, 1);
520
+ const byte = cursor.buffer[cursor.offset++];
521
+ value |= BigInt(byte & 0x7f) << BigInt(byteIndex * 7);
522
+ if ((byte & 0x80) === 0) {
523
+ return value;
524
+ }
525
+ }
526
+ throw new Error('Invalid Parquet variable-length integer');
527
+ }
528
+
529
+ /** Reads an unsigned variable-length integer that must fit safely in a number. */
530
+ function readUnsignedVarIntNumber(cursor: CursorBuffer): number {
531
+ let value = 0;
532
+ let multiplier = 1;
533
+ for (let byteIndex = 0; byteIndex < 10; byteIndex++) {
534
+ assertReadable(cursor, 1);
535
+ const byte = cursor.buffer[cursor.offset++];
536
+ value += (byte & 0x7f) * multiplier;
537
+ if ((byte & 0x80) === 0) {
538
+ if (!Number.isSafeInteger(value)) {
539
+ throw new Error('Parquet variable-length integer exceeds the safe integer range');
540
+ }
541
+ return value;
542
+ }
543
+ multiplier *= 128;
544
+ }
545
+ throw new Error('Invalid Parquet variable-length integer');
546
+ }
547
+
548
+ /** Reads a zig-zag encoded INT32 variable-length integer without allocating BigInts. */
549
+ function readZigZagVarInt32(cursor: CursorBuffer): number {
550
+ const value = readUnsignedVarIntNumber(cursor);
551
+ if (value > 0xffffffff) {
552
+ throw new Error('Parquet INT32 variable-length integer exceeds 32 bits');
553
+ }
554
+ return value % 2 === 0 ? value / 2 : -(value + 1) / 2;
555
+ }
556
+
557
+ /** Reads a zig-zag encoded signed variable-length integer. */
558
+ function readZigZagVarInt(cursor: CursorBuffer): bigint {
559
+ const value = readUnsignedVarInt(cursor);
560
+ return (value >> 1n) ^ -(value & 1n);
561
+ }
562
+
563
+ /** Reads and copies one byte array of a validated length. */
564
+ function readByteArray(cursor: CursorBuffer, length: number): Uint8Array {
565
+ if (!Number.isInteger(length) || length < 0) {
566
+ throw new Error(`Invalid delta byte-array length ${length}`);
567
+ }
568
+ assertReadable(cursor, length);
569
+ const value = copyUint8Array(cursor.buffer.subarray(cursor.offset, cursor.offset + length));
570
+ cursor.offset += length;
571
+ return value;
572
+ }
573
+
574
+ /** Restricts byte-array delta encodings to their Parquet physical types. */
575
+ function assertByteArrayType(type: PrimitiveType, encoding: string): void {
576
+ if (type !== 'BYTE_ARRAY' && type !== 'FIXED_LEN_BYTE_ARRAY') {
577
+ throw new Error(`${encoding} does not support Parquet type ${type}`);
578
+ }
579
+ }
580
+
581
+ /** Ensures a codec read stays inside the current page buffer. */
582
+ function assertReadable(cursor: CursorBuffer, byteLength: number): void {
583
+ const size = cursor.size ?? cursor.buffer.length;
584
+ if (byteLength < 0 || cursor.offset + byteLength > size) {
585
+ throw new Error('Unexpected end of Parquet delta-encoded data');
586
+ }
587
+ }
@@ -5,13 +5,31 @@
5
5
  // Forked from https://github.com/kbajalc/parquets under MIT license
6
6
 
7
7
  import {decodeValues as decodeRleValues} from './rle';
8
+ import {encodeValues as encodeRleValues} from './rle';
9
+ import type {PrimitiveType} from '../schema/declare';
10
+ import type {ParquetCodecOptions} from './declare';
8
11
 
9
12
  export function decodeValues(type, cursor, count, opts) {
10
- opts.bitWidth = cursor.buffer.slice(cursor.offset, cursor.offset + 1).readInt8(0);
13
+ const bitWidth = cursor.buffer[cursor.offset];
11
14
  cursor.offset += 1;
12
- return decodeRleValues(type, cursor, count, {...opts, disableEnvelope: true});
15
+ return decodeRleValues(type, cursor, count, {...opts, bitWidth, disableEnvelope: true});
13
16
  }
14
17
 
15
- export function encodeValues(type, cursor, count, opts) {
16
- throw new Error('Encode dictionary functionality is not supported');
18
+ /** Encodes dictionary indexes as a bit width followed by the RLE/bit-packed hybrid stream. */
19
+ export function encodeValues(
20
+ _type: PrimitiveType,
21
+ values: number[],
22
+ options: ParquetCodecOptions
23
+ ): Uint8Array {
24
+ if (options.bitWidth === undefined) {
25
+ throw new Error('bitWidth is required for dictionary encoding');
26
+ }
27
+ const encodedIndices = encodeRleValues('INT32', values, {
28
+ bitWidth: options.bitWidth,
29
+ disableEnvelope: true
30
+ });
31
+ const output = new Uint8Array(encodedIndices.length + 1);
32
+ output[0] = options.bitWidth;
33
+ output.set(encodedIndices, 1);
34
+ return output;
17
35
  }
@@ -9,6 +9,8 @@ import type {ParquetCodecKit} from './declare';
9
9
  import * as PLAIN from './plain';
10
10
  import * as RLE from './rle';
11
11
  import * as DICTIONARY from './dictionary';
12
+ import * as DELTA from './delta';
13
+ import * as BYTE_STREAM_SPLIT from './byte-stream-split';
12
14
 
13
15
  export * from './declare';
14
16
 
@@ -32,5 +34,21 @@ export const PARQUET_CODECS: Record<ParquetCodec, ParquetCodecKit> = {
32
34
  // @ts-ignore
33
35
  encodeValues: DICTIONARY.encodeValues,
34
36
  decodeValues: DICTIONARY.decodeValues
37
+ },
38
+ DELTA_BINARY_PACKED: {
39
+ encodeValues: DELTA.encodeDeltaBinaryPackedValues,
40
+ decodeValues: DELTA.decodeDeltaBinaryPackedValues
41
+ },
42
+ DELTA_LENGTH_BYTE_ARRAY: {
43
+ encodeValues: DELTA.encodeDeltaLengthByteArrayValues,
44
+ decodeValues: DELTA.decodeDeltaLengthByteArrayValues
45
+ },
46
+ DELTA_BYTE_ARRAY: {
47
+ encodeValues: DELTA.encodeDeltaByteArrayValues,
48
+ decodeValues: DELTA.decodeDeltaByteArrayValues
49
+ },
50
+ BYTE_STREAM_SPLIT: {
51
+ encodeValues: BYTE_STREAM_SPLIT.encodeValues,
52
+ decodeValues: BYTE_STREAM_SPLIT.decodeValues
35
53
  }
36
54
  };