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

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 (336) hide show
  1. package/LICENSE +1 -1
  2. package/dist/bundled.d.ts +1 -1
  3. package/dist/bundled.d.ts.map +1 -1
  4. package/dist/bundled.js.map +1 -1
  5. package/dist/delta-format.d.ts +9 -0
  6. package/dist/delta-format.d.ts.map +1 -0
  7. package/dist/delta-format.js +12 -0
  8. package/dist/delta-format.js.map +1 -0
  9. package/dist/delta-source-loader-types.d.ts +27 -0
  10. package/dist/delta-source-loader-types.d.ts.map +1 -0
  11. package/dist/delta-source-loader-types.js +28 -0
  12. package/dist/delta-source-loader-types.js.map +1 -0
  13. package/dist/delta-source.d.ts +48 -0
  14. package/dist/delta-source.d.ts.map +1 -0
  15. package/dist/delta-source.js +222 -0
  16. package/dist/delta-source.js.map +1 -0
  17. package/dist/delta-types.d.ts +38 -0
  18. package/dist/delta-types.d.ts.map +1 -0
  19. package/dist/delta-types.js +5 -0
  20. package/dist/delta-types.js.map +1 -0
  21. package/dist/geoparquet-loader.js +1 -1
  22. package/dist/iceberg-rest-catalog.d.ts +49 -0
  23. package/dist/iceberg-rest-catalog.d.ts.map +1 -0
  24. package/dist/iceberg-rest-catalog.js +78 -0
  25. package/dist/iceberg-rest-catalog.js.map +1 -0
  26. package/dist/iceberg-table-source.d.ts +63 -0
  27. package/dist/iceberg-table-source.d.ts.map +1 -0
  28. package/dist/iceberg-table-source.js +797 -0
  29. package/dist/iceberg-table-source.js.map +1 -0
  30. package/dist/iceberg-types.d.ts +150 -0
  31. package/dist/iceberg-types.d.ts.map +1 -0
  32. package/dist/iceberg-types.js +5 -0
  33. package/dist/iceberg-types.js.map +1 -0
  34. package/dist/index.cjs +15841 -3306
  35. package/dist/index.cjs.map +3 -3
  36. package/dist/index.d.ts +8 -3
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +5 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/lib/arrow/convert-schema-from-parquet.d.ts +3 -1
  41. package/dist/lib/arrow/convert-schema-from-parquet.d.ts.map +1 -1
  42. package/dist/lib/arrow/convert-schema-from-parquet.js +94 -19
  43. package/dist/lib/arrow/convert-schema-from-parquet.js.map +1 -1
  44. package/dist/lib/arrow/create-nested-arrow-vector.js +89 -0
  45. package/dist/lib/arrow/create-nested-arrow-vector.js.map +1 -1
  46. package/dist/lib/constants.js +1 -1
  47. package/dist/lib/encoders/encode-table-to-parquet-js.d.ts.map +1 -1
  48. package/dist/lib/encoders/encode-table-to-parquet-js.js +202 -7
  49. package/dist/lib/encoders/encode-table-to-parquet-js.js.map +1 -1
  50. package/dist/lib/geo/geoparquet-covering.d.ts +19 -0
  51. package/dist/lib/geo/geoparquet-covering.d.ts.map +1 -0
  52. package/dist/lib/geo/geoparquet-covering.js +137 -0
  53. package/dist/lib/geo/geoparquet-covering.js.map +1 -0
  54. package/dist/lib/geo/geospatial-metadata.d.ts.map +1 -1
  55. package/dist/lib/geo/geospatial-metadata.js +39 -13
  56. package/dist/lib/geo/geospatial-metadata.js.map +1 -1
  57. package/dist/lib/parquet-bloom-filter-planner.d.ts +16 -0
  58. package/dist/lib/parquet-bloom-filter-planner.d.ts.map +1 -0
  59. package/dist/lib/parquet-bloom-filter-planner.js +57 -0
  60. package/dist/lib/parquet-bloom-filter-planner.js.map +1 -0
  61. package/dist/lib/parquet-bloom-filter.d.ts +30 -0
  62. package/dist/lib/parquet-bloom-filter.d.ts.map +1 -0
  63. package/dist/lib/parquet-bloom-filter.js +289 -0
  64. package/dist/lib/parquet-bloom-filter.js.map +1 -0
  65. package/dist/lib/parquet-encryption.d.ts +80 -0
  66. package/dist/lib/parquet-encryption.d.ts.map +1 -0
  67. package/dist/lib/parquet-encryption.js +190 -0
  68. package/dist/lib/parquet-encryption.js.map +1 -0
  69. package/dist/lib/parquet-page-index.d.ts +34 -5
  70. package/dist/lib/parquet-page-index.d.ts.map +1 -1
  71. package/dist/lib/parquet-page-index.js +114 -28
  72. package/dist/lib/parquet-page-index.js.map +1 -1
  73. package/dist/lib/parquet-predicate.d.ts +5 -1
  74. package/dist/lib/parquet-predicate.d.ts.map +1 -1
  75. package/dist/lib/parquet-predicate.js +42 -14
  76. package/dist/lib/parquet-predicate.js.map +1 -1
  77. package/dist/lib/parquet-source-worker-decoder.d.ts +4 -1
  78. package/dist/lib/parquet-source-worker-decoder.d.ts.map +1 -1
  79. package/dist/lib/parquet-source-worker-decoder.js +83 -17
  80. package/dist/lib/parquet-source-worker-decoder.js.map +1 -1
  81. package/dist/lib/parquet-source-worker-types.d.ts +24 -0
  82. package/dist/lib/parquet-source-worker-types.d.ts.map +1 -1
  83. package/dist/lib/parsers/get-parquet-schema.d.ts.map +1 -1
  84. package/dist/lib/parsers/get-parquet-schema.js +3 -1
  85. package/dist/lib/parsers/get-parquet-schema.js.map +1 -1
  86. package/dist/lib/parsers/parse-parquet-to-arrow-js.d.ts.map +1 -1
  87. package/dist/lib/parsers/parse-parquet-to-arrow-js.js +327 -18
  88. package/dist/lib/parsers/parse-parquet-to-arrow-js.js.map +1 -1
  89. package/dist/lib/parsers/parse-parquet-to-arrow.d.ts.map +1 -1
  90. package/dist/lib/parsers/parse-parquet-to-arrow.js +5 -5
  91. package/dist/lib/parsers/parse-parquet-to-arrow.js.map +1 -1
  92. package/dist/lib/parsers/parse-parquet-to-columns.d.ts.map +1 -1
  93. package/dist/lib/parsers/parse-parquet-to-columns.js +3 -1
  94. package/dist/lib/parsers/parse-parquet-to-columns.js.map +1 -1
  95. package/dist/lib/parsers/parse-parquet-to-json.d.ts.map +1 -1
  96. package/dist/lib/parsers/parse-parquet-to-json.js +18 -2
  97. package/dist/lib/parsers/parse-parquet-to-json.js.map +1 -1
  98. package/dist/lib/slice-parquet-batch.d.ts +9 -0
  99. package/dist/lib/slice-parquet-batch.d.ts.map +1 -0
  100. package/dist/lib/slice-parquet-batch.js +28 -0
  101. package/dist/lib/slice-parquet-batch.js.map +1 -0
  102. package/dist/lib/sources/parquet-range-file.d.ts +1 -1
  103. package/dist/lib/sources/parquet-range-file.d.ts.map +1 -1
  104. package/dist/lib/sources/parquet-range-file.js +28 -22
  105. package/dist/lib/sources/parquet-range-file.js.map +1 -1
  106. package/dist/lib/utils/normalize-parquet-options.d.ts.map +1 -1
  107. package/dist/lib/utils/normalize-parquet-options.js +15 -1
  108. package/dist/lib/utils/normalize-parquet-options.js.map +1 -1
  109. package/dist/parquet-dataset-source.cjs +16528 -4928
  110. package/dist/parquet-dataset-source.cjs.map +3 -3
  111. package/dist/parquet-dataset-source.d.ts +31 -4
  112. package/dist/parquet-dataset-source.d.ts.map +1 -1
  113. package/dist/parquet-dataset-source.js +296 -74
  114. package/dist/parquet-dataset-source.js.map +1 -1
  115. package/dist/parquet-encoded-page-types.d.ts +108 -0
  116. package/dist/parquet-encoded-page-types.d.ts.map +1 -0
  117. package/dist/parquet-encoded-page-types.js +5 -0
  118. package/dist/parquet-encoded-page-types.js.map +1 -0
  119. package/dist/parquet-js-loader-types.d.ts +2 -0
  120. package/dist/parquet-js-loader-types.d.ts.map +1 -1
  121. package/dist/parquet-js-loader-types.js +2 -1
  122. package/dist/parquet-js-loader-types.js.map +1 -1
  123. package/dist/parquet-js-loader.d.ts +1 -0
  124. package/dist/parquet-js-loader.d.ts.map +1 -1
  125. package/dist/parquet-js-loader.js +2 -1
  126. package/dist/parquet-js-loader.js.map +1 -1
  127. package/dist/parquet-js-writer.d.ts +23 -2
  128. package/dist/parquet-js-writer.d.ts.map +1 -1
  129. package/dist/parquet-js-writer.js +1 -1
  130. package/dist/parquet-js-writer.js.map +1 -1
  131. package/dist/parquet-loader-base.js +1 -1
  132. package/dist/parquet-loader-options.d.ts +11 -0
  133. package/dist/parquet-loader-options.d.ts.map +1 -1
  134. package/dist/parquet-loader-options.js.map +1 -1
  135. package/dist/parquet-source-capabilities.d.ts +8 -1
  136. package/dist/parquet-source-capabilities.d.ts.map +1 -1
  137. package/dist/parquet-source-capabilities.js +10 -0
  138. package/dist/parquet-source-capabilities.js.map +1 -1
  139. package/dist/parquet-source-loader-types.d.ts +10 -0
  140. package/dist/parquet-source-loader-types.d.ts.map +1 -1
  141. package/dist/parquet-source-loader-types.js +11 -1
  142. package/dist/parquet-source-loader-types.js.map +1 -1
  143. package/dist/parquet-source-loader.cjs +14121 -2796
  144. package/dist/parquet-source-loader.cjs.map +3 -3
  145. package/dist/parquet-source-loader.d.ts +51 -4
  146. package/dist/parquet-source-loader.d.ts.map +1 -1
  147. package/dist/parquet-source-loader.js +651 -38
  148. package/dist/parquet-source-loader.js.map +1 -1
  149. package/dist/parquet-source-types.d.ts +180 -30
  150. package/dist/parquet-source-types.d.ts.map +1 -1
  151. package/dist/parquet-source-worker.js +7378 -6989
  152. package/dist/parquet-source-worker.js.map +4 -4
  153. package/dist/parquet-worker-node.cjs +8501 -1045
  154. package/dist/parquet-worker-node.cjs.map +4 -4
  155. package/dist/parquet-worker-url.js +5 -1
  156. package/dist/parquet-worker-url.js.map +1 -1
  157. package/dist/parquet-worker.js +289 -218
  158. package/dist/parquet-worker.js.map +4 -4
  159. package/dist/parquetjs/codecs/declare.d.ts +15 -0
  160. package/dist/parquetjs/codecs/declare.d.ts.map +1 -1
  161. package/dist/parquetjs/codecs/declare.js +10 -0
  162. package/dist/parquetjs/codecs/declare.js.map +1 -1
  163. package/dist/parquetjs/codecs/delta.d.ts.map +1 -1
  164. package/dist/parquetjs/codecs/delta.js +356 -7
  165. package/dist/parquetjs/codecs/delta.js.map +1 -1
  166. package/dist/parquetjs/codecs/index.d.ts.map +1 -1
  167. package/dist/parquetjs/codecs/index.js +4 -0
  168. package/dist/parquetjs/codecs/index.js.map +1 -1
  169. package/dist/parquetjs/codecs/plain.d.ts +1 -1
  170. package/dist/parquetjs/codecs/plain.d.ts.map +1 -1
  171. package/dist/parquetjs/codecs/plain.js +153 -12
  172. package/dist/parquetjs/codecs/plain.js.map +1 -1
  173. package/dist/parquetjs/codecs/rle.d.ts +4 -0
  174. package/dist/parquetjs/codecs/rle.d.ts.map +1 -1
  175. package/dist/parquetjs/codecs/rle.js +406 -3
  176. package/dist/parquetjs/codecs/rle.js.map +1 -1
  177. package/dist/parquetjs/compression.d.ts +9 -0
  178. package/dist/parquetjs/compression.d.ts.map +1 -1
  179. package/dist/parquetjs/compression.js +86 -67
  180. package/dist/parquetjs/compression.js.map +1 -1
  181. package/dist/parquetjs/encoder/dictionary-planner.d.ts.map +1 -1
  182. package/dist/parquetjs/encoder/dictionary-planner.js +5 -2
  183. package/dist/parquetjs/encoder/dictionary-planner.js.map +1 -1
  184. package/dist/parquetjs/encoder/parquet-encoder.d.ts +43 -1
  185. package/dist/parquetjs/encoder/parquet-encoder.d.ts.map +1 -1
  186. package/dist/parquetjs/encoder/parquet-encoder.js +691 -34
  187. package/dist/parquetjs/encoder/parquet-encoder.js.map +1 -1
  188. package/dist/parquetjs/parquet-thrift/BoundingBox.d.ts +29 -0
  189. package/dist/parquetjs/parquet-thrift/BoundingBox.d.ts.map +1 -0
  190. package/dist/parquetjs/parquet-thrift/BoundingBox.js +85 -0
  191. package/dist/parquetjs/parquet-thrift/BoundingBox.js.map +1 -0
  192. package/dist/parquetjs/parquet-thrift/ColumnChunk.d.ts +5 -0
  193. package/dist/parquetjs/parquet-thrift/ColumnChunk.d.ts.map +1 -1
  194. package/dist/parquetjs/parquet-thrift/ColumnChunk.js +35 -0
  195. package/dist/parquetjs/parquet-thrift/ColumnChunk.js.map +1 -1
  196. package/dist/parquetjs/parquet-thrift/ColumnCryptoMetaData.d.ts +35 -0
  197. package/dist/parquetjs/parquet-thrift/ColumnCryptoMetaData.d.ts.map +1 -0
  198. package/dist/parquetjs/parquet-thrift/ColumnCryptoMetaData.js +135 -0
  199. package/dist/parquetjs/parquet-thrift/ColumnCryptoMetaData.js.map +1 -0
  200. package/dist/parquetjs/parquet-thrift/ColumnMetaData.d.ts +10 -0
  201. package/dist/parquetjs/parquet-thrift/ColumnMetaData.d.ts.map +1 -1
  202. package/dist/parquetjs/parquet-thrift/ColumnMetaData.js +73 -0
  203. package/dist/parquetjs/parquet-thrift/ColumnMetaData.js.map +1 -1
  204. package/dist/parquetjs/parquet-thrift/EncryptionAlgorithm.d.ts +22 -0
  205. package/dist/parquetjs/parquet-thrift/EncryptionAlgorithm.d.ts.map +1 -0
  206. package/dist/parquetjs/parquet-thrift/EncryptionAlgorithm.js +111 -0
  207. package/dist/parquetjs/parquet-thrift/EncryptionAlgorithm.js.map +1 -0
  208. package/dist/parquetjs/parquet-thrift/FileCryptoMetaData.d.ts +16 -0
  209. package/dist/parquetjs/parquet-thrift/FileCryptoMetaData.d.ts.map +1 -0
  210. package/dist/parquetjs/parquet-thrift/FileCryptoMetaData.js +57 -0
  211. package/dist/parquetjs/parquet-thrift/FileCryptoMetaData.js.map +1 -0
  212. package/dist/parquetjs/parquet-thrift/FileMetaData.d.ts +5 -0
  213. package/dist/parquetjs/parquet-thrift/FileMetaData.d.ts.map +1 -1
  214. package/dist/parquetjs/parquet-thrift/FileMetaData.js +35 -0
  215. package/dist/parquetjs/parquet-thrift/FileMetaData.js.map +1 -1
  216. package/dist/parquetjs/parquet-thrift/GeospatialStatistics.d.ts +18 -0
  217. package/dist/parquetjs/parquet-thrift/GeospatialStatistics.d.ts.map +1 -0
  218. package/dist/parquetjs/parquet-thrift/GeospatialStatistics.js +62 -0
  219. package/dist/parquetjs/parquet-thrift/GeospatialStatistics.js.map +1 -0
  220. package/dist/parquetjs/parquet-thrift/SizeStatistics.d.ts +26 -0
  221. package/dist/parquetjs/parquet-thrift/SizeStatistics.d.ts.map +1 -0
  222. package/dist/parquetjs/parquet-thrift/SizeStatistics.js +85 -0
  223. package/dist/parquetjs/parquet-thrift/SizeStatistics.js.map +1 -0
  224. package/dist/parquetjs/parquet-thrift/index.d.ts +6 -0
  225. package/dist/parquetjs/parquet-thrift/index.d.ts.map +1 -1
  226. package/dist/parquetjs/parquet-thrift/index.js +6 -0
  227. package/dist/parquetjs/parquet-thrift/index.js.map +1 -1
  228. package/dist/parquetjs/parser/decoders.d.ts +10 -1
  229. package/dist/parquetjs/parser/decoders.d.ts.map +1 -1
  230. package/dist/parquetjs/parser/decoders.js +318 -14
  231. package/dist/parquetjs/parser/decoders.js.map +1 -1
  232. package/dist/parquetjs/parser/encoded-pages.d.ts +24 -0
  233. package/dist/parquetjs/parser/encoded-pages.d.ts.map +1 -0
  234. package/dist/parquetjs/parser/encoded-pages.js +206 -0
  235. package/dist/parquetjs/parser/encoded-pages.js.map +1 -0
  236. package/dist/parquetjs/parser/parquet-reader.d.ts +88 -12
  237. package/dist/parquetjs/parser/parquet-reader.d.ts.map +1 -1
  238. package/dist/parquetjs/parser/parquet-reader.js +713 -66
  239. package/dist/parquetjs/parser/parquet-reader.js.map +1 -1
  240. package/dist/parquetjs/schema/declare.d.ts +22 -3
  241. package/dist/parquetjs/schema/declare.d.ts.map +1 -1
  242. package/dist/parquetjs/schema/declare.js.map +1 -1
  243. package/dist/parquetjs/schema/schema.d.ts.map +1 -1
  244. package/dist/parquetjs/schema/schema.js +10 -0
  245. package/dist/parquetjs/schema/schema.js.map +1 -1
  246. package/dist/parquetjs/schema/shred.d.ts.map +1 -1
  247. package/dist/parquetjs/schema/shred.js +219 -11
  248. package/dist/parquetjs/schema/shred.js.map +1 -1
  249. package/dist/parquetjs/schema/types.js +19 -21
  250. package/dist/parquetjs/schema/types.js.map +1 -1
  251. package/dist/parquetjs/schema/variant.d.ts +3 -0
  252. package/dist/parquetjs/schema/variant.d.ts.map +1 -0
  253. package/dist/parquetjs/schema/variant.js +248 -0
  254. package/dist/parquetjs/schema/variant.js.map +1 -0
  255. package/dist/parquetjs/utils/crc32.d.ts +3 -0
  256. package/dist/parquetjs/utils/crc32.d.ts.map +1 -0
  257. package/dist/parquetjs/utils/crc32.js +15 -0
  258. package/dist/parquetjs/utils/crc32.js.map +1 -0
  259. package/dist/parquetjs/utils/read-utils.d.ts +11 -1
  260. package/dist/parquetjs/utils/read-utils.d.ts.map +1 -1
  261. package/dist/parquetjs/utils/read-utils.js +21 -1
  262. package/dist/parquetjs/utils/read-utils.js.map +1 -1
  263. package/dist/unbundled.d.ts +2 -1
  264. package/dist/unbundled.d.ts.map +1 -1
  265. package/dist/unbundled.js +1 -0
  266. package/dist/unbundled.js.map +1 -1
  267. package/package.json +36 -13
  268. package/src/bundled.ts +10 -0
  269. package/src/delta-format.ts +12 -0
  270. package/src/delta-source-loader-types.ts +40 -0
  271. package/src/delta-source.ts +305 -0
  272. package/src/delta-types.ts +40 -0
  273. package/src/iceberg-rest-catalog.ts +122 -0
  274. package/src/iceberg-table-source.ts +1037 -0
  275. package/src/iceberg-types.ts +165 -0
  276. package/src/index.ts +59 -1
  277. package/src/lib/arrow/convert-schema-from-parquet.ts +113 -19
  278. package/src/lib/arrow/create-nested-arrow-vector.ts +116 -0
  279. package/src/lib/encoders/encode-table-to-parquet-js.ts +268 -7
  280. package/src/lib/geo/geoparquet-covering.ts +201 -0
  281. package/src/lib/geo/geospatial-metadata.ts +42 -15
  282. package/src/lib/parquet-bloom-filter-planner.ts +86 -0
  283. package/src/lib/parquet-bloom-filter.ts +345 -0
  284. package/src/lib/parquet-encryption.ts +344 -0
  285. package/src/lib/parquet-page-index.ts +180 -34
  286. package/src/lib/parquet-predicate.ts +52 -16
  287. package/src/lib/parquet-source-worker-decoder.ts +116 -20
  288. package/src/lib/parquet-source-worker-types.ts +25 -0
  289. package/src/lib/parsers/get-parquet-schema.ts +3 -1
  290. package/src/lib/parsers/parse-parquet-to-arrow-js.ts +397 -17
  291. package/src/lib/parsers/parse-parquet-to-arrow.ts +4 -5
  292. package/src/lib/parsers/parse-parquet-to-columns.ts +3 -1
  293. package/src/lib/parsers/parse-parquet-to-json.ts +18 -2
  294. package/src/lib/slice-parquet-batch.ts +32 -0
  295. package/src/lib/sources/parquet-range-file.ts +35 -29
  296. package/src/lib/utils/normalize-parquet-options.ts +17 -1
  297. package/src/parquet-dataset-source.ts +397 -85
  298. package/src/parquet-encoded-page-types.ts +122 -0
  299. package/src/parquet-js-loader-types.ts +1 -0
  300. package/src/parquet-js-loader.ts +2 -1
  301. package/src/parquet-js-writer.ts +30 -0
  302. package/src/parquet-loader-options.ts +11 -0
  303. package/src/parquet-source-capabilities.ts +18 -1
  304. package/src/parquet-source-loader-types.ts +10 -0
  305. package/src/parquet-source-loader.ts +1024 -52
  306. package/src/parquet-source-types.ts +197 -28
  307. package/src/parquet-worker-url.ts +6 -1
  308. package/src/parquetjs/codecs/declare.ts +27 -0
  309. package/src/parquetjs/codecs/delta.ts +466 -6
  310. package/src/parquetjs/codecs/index.ts +4 -0
  311. package/src/parquetjs/codecs/plain.ts +177 -11
  312. package/src/parquetjs/codecs/rle.ts +573 -3
  313. package/src/parquetjs/compression.ts +102 -76
  314. package/src/parquetjs/encoder/dictionary-planner.ts +7 -2
  315. package/src/parquetjs/encoder/parquet-encoder.ts +1016 -38
  316. package/src/parquetjs/parquet-thrift/BoundingBox.ts +108 -0
  317. package/src/parquetjs/parquet-thrift/ColumnChunk.ts +35 -0
  318. package/src/parquetjs/parquet-thrift/ColumnCryptoMetaData.ts +139 -0
  319. package/src/parquetjs/parquet-thrift/ColumnMetaData.ts +73 -0
  320. package/src/parquetjs/parquet-thrift/EncryptionAlgorithm.ts +127 -0
  321. package/src/parquetjs/parquet-thrift/FileCryptoMetaData.ts +60 -0
  322. package/src/parquetjs/parquet-thrift/FileMetaData.ts +35 -0
  323. package/src/parquetjs/parquet-thrift/GeospatialStatistics.ts +68 -0
  324. package/src/parquetjs/parquet-thrift/SizeStatistics.ts +98 -0
  325. package/src/parquetjs/parquet-thrift/index.ts +6 -0
  326. package/src/parquetjs/parser/decoders.ts +451 -26
  327. package/src/parquetjs/parser/encoded-pages.ts +278 -0
  328. package/src/parquetjs/parser/parquet-reader.ts +1112 -87
  329. package/src/parquetjs/schema/declare.ts +22 -2
  330. package/src/parquetjs/schema/schema.ts +10 -0
  331. package/src/parquetjs/schema/shred.ts +238 -11
  332. package/src/parquetjs/schema/types.ts +16 -25
  333. package/src/parquetjs/schema/variant.ts +313 -0
  334. package/src/parquetjs/utils/crc32.ts +15 -0
  335. package/src/parquetjs/utils/read-utils.ts +26 -1
  336. package/src/unbundled.ts +14 -0
@@ -0,0 +1,122 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {
6
+ ParquetBoundingBox,
7
+ ParquetPredicate,
8
+ ParquetRowGroupMetadata
9
+ } from './parquet-source-types';
10
+
11
+ /** Byte range within an encoded Parquet page body. */
12
+ export type ParquetEncodedPageSection = Readonly<{
13
+ /** Byte offset relative to {@link ParquetEncodedPage.data}. */
14
+ byteOffset: number;
15
+ /** Number of bytes in this section. */
16
+ byteLength: number;
17
+ }>;
18
+
19
+ /** Whether the page value payload still uses the column chunk's compression codec. */
20
+ export type ParquetPageCompressionState = 'compressed' | 'decompressed';
21
+
22
+ /** Encoded Parquet page body suitable for deferred CPU or GPU decoding. */
23
+ export type ParquetEncodedPage = Readonly<{
24
+ /** Page role and data-page version. */
25
+ type: 'dictionary' | 'data-v1' | 'data-v2';
26
+ /** Zero-based data-page ordinal within the column chunk; dictionaries use `-1`. */
27
+ pageOrdinal: number;
28
+ /** Value encoding declared by the page header. */
29
+ encoding: string;
30
+ /** Repetition-level encoding for V1 pages. V2 levels always use RLE. */
31
+ repetitionLevelEncoding?: string;
32
+ /** Definition-level encoding for V1 pages. V2 levels always use RLE. */
33
+ definitionLevelEncoding?: string;
34
+ /** Compression codec declared by the containing column chunk. */
35
+ compression: string;
36
+ /** Whether the page value payload remains compressed. */
37
+ compressionState: ParquetPageCompressionState;
38
+ /** Number of encoded values declared by the page header. */
39
+ valueCount: number;
40
+ /** Number of non-null values when the page header reports it directly. */
41
+ nonNullValueCount?: number;
42
+ /** Encoded page body without its Thrift page header. */
43
+ data: Uint8Array;
44
+ /** Repetition-level bytes, when their range can be known without decoding values. */
45
+ repetitionLevels?: ParquetEncodedPageSection;
46
+ /** Definition-level bytes, when their range can be known without decoding values. */
47
+ definitionLevels?: ParquetEncodedPageSection;
48
+ /** Value or dictionary bytes, when their range can be known before deferred decoding. */
49
+ values?: ParquetEncodedPageSection;
50
+ /** Compressed body byte length reported by the page header. */
51
+ compressedByteLength: number;
52
+ /** Uncompressed body byte length reported by the page header. */
53
+ uncompressedByteLength: number;
54
+ }>;
55
+
56
+ /** One projected Parquet leaf column whose encoded pages have not been value-decoded. */
57
+ export type ParquetEncodedColumnChunk = Readonly<{
58
+ /** Nested Parquet schema path. */
59
+ path: readonly string[];
60
+ /** Physical Parquet scalar type. */
61
+ physicalType: string;
62
+ /** Fixed byte width for FIXED_LEN_BYTE_ARRAY columns. */
63
+ typeLength?: number;
64
+ /** Maximum repetition level for this leaf column. */
65
+ maxRepetitionLevel: number;
66
+ /** Maximum definition level for this leaf column. */
67
+ maxDefinitionLevel: number;
68
+ /** Compression codec declared by the column chunk. */
69
+ compression: string;
70
+ /** Number of encoded values declared by the column chunk. */
71
+ valueCount: number;
72
+ /** Optional dictionary page associated only with this column chunk. */
73
+ dictionary?: ParquetEncodedPage;
74
+ /** Ordered data pages in this column chunk. */
75
+ pages: readonly ParquetEncodedPage[];
76
+ }>;
77
+
78
+ /** Exact filters a deferred decoder must apply after conservative metadata pruning. */
79
+ export type ParquetDeferredPageFilter = Readonly<{
80
+ /** Exact scalar predicate requested by the caller. */
81
+ predicate?: ParquetPredicate;
82
+ /** Exact spatial extent requested by the caller. */
83
+ bbox?: ParquetBoundingBox;
84
+ /** Geometry column associated with `bbox`. */
85
+ geometryColumn?: string;
86
+ }>;
87
+
88
+ /** Candidate encoded pages returned for one Parquet row group. */
89
+ export type ParquetEncodedPageBatch = Readonly<{
90
+ /** Stable discriminator for transport-neutral deferred Parquet pages. */
91
+ shape: 'parquet-encoded-pages';
92
+ /** Normalized row-group metadata. */
93
+ rowGroup: ParquetRowGroupMetadata;
94
+ /** Columns explicitly requested for final output. Empty means all columns. */
95
+ projectedColumns: readonly string[];
96
+ /** Hidden columns included so a deferred decoder can evaluate residual filters. */
97
+ filterColumns: readonly string[];
98
+ /** Ordered selected column chunks. Each chunk retains its complete nested schema path. */
99
+ columns: readonly ParquetEncodedColumnChunk[];
100
+ /** Exact work left after loaders.gl's conservative statistics and Bloom-filter pruning. */
101
+ residualFilter?: ParquetDeferredPageFilter;
102
+ }>;
103
+
104
+ /** Options for reading encoded Parquet pages without materializing values or Arrow arrays. */
105
+ export type ParquetEncodedPageReadOptions = Readonly<{
106
+ /** Zero-based row-group indexes to inspect, in output order. Defaults to all row groups. */
107
+ rowGroups?: readonly number[];
108
+ /** Top-level output columns. Defaults to all columns. */
109
+ columns?: readonly string[];
110
+ /** Retains candidate row groups for which the callback returns true. */
111
+ rowGroupFilter?: (rowGroup: ParquetRowGroupMetadata) => boolean;
112
+ /** Exact predicate used for conservative pruning and returned as residual work. */
113
+ predicate?: ParquetPredicate;
114
+ /** Spatial extent used for conservative pruning and returned as residual work. */
115
+ bbox?: ParquetBoundingBox;
116
+ /** Geometry column associated with `bbox`; defaults to the GeoParquet primary column. */
117
+ geometryColumn?: string;
118
+ /** Compression codecs to preserve for a downstream decoder instead of inflating on the CPU. */
119
+ preserveCompression?: readonly string[];
120
+ /** Abort this page read and its outstanding range requests. */
121
+ signal?: AbortSignal;
122
+ }>;
@@ -21,6 +21,7 @@ const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
21
21
  const DEFAULT_PARQUET_JS_OPTIONS = {
22
22
  columns: undefined,
23
23
  preserveBinary: false,
24
+ verifyFooterSignature: true,
24
25
  shape: 'object-row-table' as const
25
26
  };
26
27
 
@@ -25,7 +25,8 @@ const {preload: _ParquetJSLoaderPreload, ...ParquetJSLoaderMetadataWithoutPreloa
25
25
  /** Default option bag for the experimental parquetjs plain-row loader. */
26
26
  const DEFAULT_PARQUET_JS_OPTIONS = {
27
27
  columns: undefined,
28
- preserveBinary: false
28
+ preserveBinary: false,
29
+ verifyFooterSignature: true
29
30
  };
30
31
 
31
32
  /** Parser-bearing TypeScript-only Parquet loader implementation. */
@@ -9,6 +9,17 @@ import {convertTable, deduceTableSchema} from '@loaders.gl/schema-utils';
9
9
  import {normalizeParquetOptions} from './lib/utils/normalize-parquet-options';
10
10
  import {encodeTableToParquetJs} from './lib/encoders/encode-table-to-parquet-js';
11
11
  import {ParquetFormat} from './parquet-format';
12
+ import type {ParquetSortingColumnOption} from './parquetjs/encoder/parquet-encoder';
13
+ import type {
14
+ ParquetWriterEncryptionOptions,
15
+ ParquetWriterFooterSignatureOptions
16
+ } from './lib/parquet-encryption';
17
+
18
+ export type {ParquetSortingColumnOption} from './parquetjs/encoder/parquet-encoder';
19
+ export type {
20
+ ParquetWriterEncryptionOptions,
21
+ ParquetWriterFooterSignatureOptions
22
+ } from './lib/parquet-encryption';
12
23
 
13
24
  // __VERSION__ is injected by babel-plugin-version-inline
14
25
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
@@ -17,6 +28,7 @@ const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
17
28
  /** Stable value encodings selectable by the TypeScript Parquet writer. */
18
29
  export type ParquetJSWriterEncoding =
19
30
  | 'PLAIN'
31
+ | 'PLAIN_DICTIONARY'
20
32
  | 'BYTE_STREAM_SPLIT'
21
33
  | 'DELTA_BINARY_PACKED'
22
34
  | 'DELTA_LENGTH_BYTE_ARRAY'
@@ -32,6 +44,24 @@ type ParquetJSWriterEncoderOptions = {
32
44
  columnDictionaries?: Record<string, boolean | 'auto'>;
33
45
  /** Maximum uncompressed PLAIN dictionary payload per column chunk. */
34
46
  dictionaryPageSizeLimit?: number;
47
+ /** Emits Parquet split-block Bloom filters for selected columns. */
48
+ bloomFilter?: boolean | Record<string, boolean>;
49
+ /** Emits Parquet column and offset indexes for selected non-repeated columns. */
50
+ pageIndex?: boolean | Record<string, boolean>;
51
+ /** Emits CRC-32 checksums for every data and dictionary page. */
52
+ writePageChecksums?: boolean;
53
+ /** Emits optional SizeStatistics metadata for every column chunk. */
54
+ writeSizeStatistics?: boolean;
55
+ /** Emits min/max/null-count statistics for every column chunk. */
56
+ writeStatistics?: boolean | Record<string, boolean>;
57
+ /** Declares row-group sort keys using top-level or dotted nested leaf names. */
58
+ sortingColumns?: readonly ParquetSortingColumnOption[];
59
+ /** Encodes INT96 input values as epoch nanoseconds using the canonical Julian-day layout. */
60
+ int96AsTimestamp?: boolean;
61
+ /** Encrypt the footer using Parquet modular encryption. */
62
+ encryption?: ParquetWriterEncryptionOptions;
63
+ /** Authenticate a plaintext footer with a Parquet modular-encryption signature. */
64
+ footerSignature?: ParquetWriterFooterSignatureOptions;
35
65
  rowGroupSize?: number;
36
66
  pageSize?: number;
37
67
  useDataPageV2?: boolean;
@@ -3,14 +3,19 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
5
  import type {LoaderOptions} from '@loaders.gl/loader-utils';
6
+ import type {ParquetKeyRetriever} from './lib/parquet-encryption';
6
7
 
7
8
  /** Shared row-level options supported by both Parquet backends. */
8
9
  type ParquetCommonLoaderOptions = {
10
+ /** @deprecated Use `_scan.limit` instead. */
9
11
  limit?: number;
10
12
  offset?: number;
11
13
  batchSize?: number;
14
+ /** @deprecated Use `_scan.columns` instead for logical projection. */
12
15
  columns?: string[];
13
16
  preserveBinary?: boolean;
17
+ /** Decode legacy INT96 values as Arrow timestamp-nanosecond values. */
18
+ int96AsTimestamp?: boolean;
14
19
  };
15
20
 
16
21
  /** Additional options supported by the wasm-backed Parquet reader. */
@@ -38,6 +43,12 @@ export type ParquetLoaderOptions = LoaderOptions & {
38
43
  export type ParquetJSLoaderOptions = LoaderOptions & {
39
44
  parquet?: {
40
45
  shape?: 'object-row-table' | 'arrow-table';
46
+ /** Resolves modular-encryption keys from file and column key metadata. */
47
+ keyRetriever?: ParquetKeyRetriever;
48
+ /** AAD prefix for encrypted files that intentionally omit it from metadata. */
49
+ aadPrefix?: Uint8Array;
50
+ /** Verify plaintext-footer signatures when present. Enabled by default. */
51
+ verifyFooterSignature?: boolean;
41
52
  } & {
42
53
  [Key in keyof ParquetCommonLoaderOptions]?: ParquetCommonLoaderOptions[Key];
43
54
  };
@@ -2,8 +2,21 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
+ import type {TableQueryCapabilities} from '@loaders.gl/loader-utils';
6
+
7
+ /** Portable table-query capabilities of Parquet-backed scans. */
8
+ export const PARQUET_TABLE_QUERY_CAPABILITIES: TableQueryCapabilities = Object.freeze({
9
+ projection: 'pushdown',
10
+ predicate: 'pushdown+residual',
11
+ limit: 'pushdown',
12
+ streaming: true,
13
+ cancellation: true
14
+ });
15
+
5
16
  /** Feature support advertised by a {@link ParquetSource}. */
6
17
  export type ParquetSourceCapabilities = Readonly<{
18
+ /** Common portable query contract supported by this source. */
19
+ tableQuery: TableQueryCapabilities;
7
20
  /** Schema and footer metadata are cached for the lifetime of the source. */
8
21
  supportsCachedMetadata: boolean;
9
22
  /** Reads can select explicit Parquet row groups. */
@@ -20,8 +33,10 @@ export type ParquetSourceCapabilities = Readonly<{
20
33
  supportsColumnStatistics: boolean;
21
34
  /** Serializable predicates can prune impossible row groups using column statistics. */
22
35
  supportsPredicatePushdown: boolean;
23
- /** Column and offset indexes can avoid irrelevant data-page range reads for flat columns. */
36
+ /** Column and offset indexes can avoid irrelevant data-page reads for non-repeated columns. */
24
37
  supportsPageIndexPruning: boolean;
38
+ /** Native geospatial statistics and GeoParquet 1.1 coverings drive spatial pruning. */
39
+ supportsGeoParquetSpatialPruning: boolean;
25
40
  /** Surviving decoded rows are filtered exactly on the caller thread or worker. */
26
41
  supportsExactPredicateFiltering: boolean;
27
42
  /** Callers can supply the random-access transport used by the source. */
@@ -38,6 +53,7 @@ export type ParquetSourceCapabilities = Readonly<{
38
53
 
39
54
  /** Capabilities of the current range-backed TypeScript {@link ParquetSource}. */
40
55
  export const PARQUET_SOURCE_CAPABILITIES: ParquetSourceCapabilities = Object.freeze({
56
+ tableQuery: PARQUET_TABLE_QUERY_CAPABILITIES,
41
57
  supportsCachedMetadata: true,
42
58
  supportsRowGroupSelection: true,
43
59
  supportsColumnProjection: true,
@@ -47,6 +63,7 @@ export const PARQUET_SOURCE_CAPABILITIES: ParquetSourceCapabilities = Object.fre
47
63
  supportsColumnStatistics: true,
48
64
  supportsPredicatePushdown: true,
49
65
  supportsPageIndexPruning: true,
66
+ supportsGeoParquetSpatialPruning: true,
50
67
  supportsExactPredicateFiltering: true,
51
68
  supportsCustomRangeTransport: true,
52
69
  supportsObjectVersionValidation: true,
@@ -42,8 +42,13 @@ export const ParquetSourceLoader = {
42
42
  batchSize: undefined,
43
43
  concurrency: undefined,
44
44
  rowGroupFilter: undefined,
45
+ predicate: undefined,
46
+ bbox: undefined,
47
+ geometryColumn: undefined,
45
48
  headers: undefined,
46
49
  preserveBinary: false,
50
+ verifyPageChecksums: false,
51
+ verifyFooterSignature: true,
47
52
  onTelemetry: undefined,
48
53
  workerUrl: undefined,
49
54
  wasmUrl: undefined
@@ -61,8 +66,13 @@ export const ParquetSourceLoader = {
61
66
  batchSize: undefined!,
62
67
  concurrency: undefined!,
63
68
  rowGroupFilter: undefined!,
69
+ predicate: undefined!,
70
+ bbox: undefined!,
71
+ geometryColumn: undefined!,
64
72
  headers: undefined!,
65
73
  preserveBinary: false,
74
+ verifyPageChecksums: false,
75
+ verifyFooterSignature: true,
66
76
  onTelemetry: undefined!,
67
77
  workerUrl: undefined!,
68
78
  wasmUrl: undefined!