@loaders.gl/parquet 4.0.0-alpha.24 → 4.0.0-alpha.26

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 (372) hide show
  1. package/dist/dist.min.js +25 -27
  2. package/dist/dist.min.js.map +3 -3
  3. package/dist/es5/buffer-polyfill/buffer-polyfill.browser.js +23 -0
  4. package/dist/es5/buffer-polyfill/buffer-polyfill.browser.js.map +1 -0
  5. package/dist/es5/buffer-polyfill/buffer-polyfill.node.js +22 -0
  6. package/dist/es5/buffer-polyfill/buffer-polyfill.node.js.map +1 -0
  7. package/dist/es5/buffer-polyfill/buffer.js +1665 -0
  8. package/dist/es5/buffer-polyfill/buffer.js.map +1 -0
  9. package/dist/es5/buffer-polyfill/index.js +25 -0
  10. package/dist/es5/buffer-polyfill/index.js.map +1 -0
  11. package/dist/es5/buffer-polyfill/install-buffer-polyfill.js +20 -0
  12. package/dist/es5/buffer-polyfill/install-buffer-polyfill.js.map +1 -0
  13. package/dist/es5/index.js +18 -25
  14. package/dist/es5/index.js.map +1 -1
  15. package/dist/es5/lib/geo/decode-geo-column.js +52 -0
  16. package/dist/es5/lib/geo/decode-geo-column.js.map +1 -0
  17. package/dist/es5/lib/geo/decode-geo-metadata.js +52 -16
  18. package/dist/es5/lib/geo/decode-geo-metadata.js.map +1 -1
  19. package/dist/es5/lib/geo/{geoparquet-schema.js → geoparquet-metadata-schema.js} +4 -4
  20. package/dist/es5/lib/geo/geoparquet-metadata-schema.js.map +1 -0
  21. package/dist/es5/lib/geo/geoparquet-metadata-schema.json +60 -0
  22. package/dist/es5/lib/parsers/get-parquet-schema.js +41 -0
  23. package/dist/es5/lib/parsers/get-parquet-schema.js.map +1 -0
  24. package/dist/es5/lib/parsers/parse-parquet-to-columns.js +71 -72
  25. package/dist/es5/lib/parsers/parse-parquet-to-columns.js.map +1 -1
  26. package/dist/es5/lib/parsers/parse-parquet-to-rows.js +95 -62
  27. package/dist/es5/lib/parsers/parse-parquet-to-rows.js.map +1 -1
  28. package/dist/es5/parquet-loader.js +14 -14
  29. package/dist/es5/parquet-loader.js.map +1 -1
  30. package/dist/es5/parquet-wasm-loader.js +1 -1
  31. package/dist/es5/parquet-wasm-writer.js +1 -1
  32. package/dist/es5/parquet-writer.js +1 -1
  33. package/dist/es5/parquetjs/codecs/plain.js.map +1 -1
  34. package/dist/es5/parquetjs/codecs/rle.js.map +1 -1
  35. package/dist/es5/parquetjs/encoder/parquet-encoder.js.map +1 -1
  36. package/dist/es5/parquetjs/parquet-thrift/index.js +75 -0
  37. package/dist/es5/parquetjs/parquet-thrift/index.js.map +1 -1
  38. package/dist/es5/parquetjs/parser/decoders.js +43 -34
  39. package/dist/es5/parquetjs/parser/decoders.js.map +1 -1
  40. package/dist/es5/parquetjs/parser/parquet-reader.js +13 -12
  41. package/dist/es5/parquetjs/parser/parquet-reader.js.map +1 -1
  42. package/dist/es5/parquetjs/schema/declare.js.map +1 -1
  43. package/dist/es5/parquetjs/utils/read-utils.js +6 -7
  44. package/dist/es5/parquetjs/utils/read-utils.js.map +1 -1
  45. package/dist/esm/buffer-polyfill/buffer-polyfill.browser.js +6 -0
  46. package/dist/esm/buffer-polyfill/buffer-polyfill.browser.js.map +1 -0
  47. package/dist/esm/buffer-polyfill/buffer-polyfill.node.js +10 -0
  48. package/dist/esm/buffer-polyfill/buffer-polyfill.node.js.map +1 -0
  49. package/dist/esm/buffer-polyfill/buffer.js +1489 -0
  50. package/dist/esm/buffer-polyfill/buffer.js.map +1 -0
  51. package/dist/esm/buffer-polyfill/index.js +4 -0
  52. package/dist/esm/buffer-polyfill/index.js.map +1 -0
  53. package/dist/esm/buffer-polyfill/install-buffer-polyfill.js +5 -0
  54. package/dist/esm/buffer-polyfill/install-buffer-polyfill.js.map +1 -0
  55. package/dist/esm/index.js +3 -9
  56. package/dist/esm/index.js.map +1 -1
  57. package/dist/esm/lib/geo/decode-geo-column.js +46 -0
  58. package/dist/esm/lib/geo/decode-geo-column.js.map +1 -0
  59. package/dist/esm/lib/geo/decode-geo-metadata.js +32 -5
  60. package/dist/esm/lib/geo/decode-geo-metadata.js.map +1 -1
  61. package/dist/esm/lib/geo/{geoparquet-schema.js → geoparquet-metadata-schema.js} +2 -2
  62. package/dist/esm/lib/geo/geoparquet-metadata-schema.js.map +1 -0
  63. package/dist/esm/lib/geo/geoparquet-metadata-schema.json +60 -0
  64. package/dist/esm/lib/parsers/get-parquet-schema.js +11 -0
  65. package/dist/esm/lib/parsers/get-parquet-schema.js.map +1 -0
  66. package/dist/esm/lib/parsers/parse-parquet-to-columns.js +10 -11
  67. package/dist/esm/lib/parsers/parse-parquet-to-columns.js.map +1 -1
  68. package/dist/esm/lib/parsers/parse-parquet-to-rows.js +32 -7
  69. package/dist/esm/lib/parsers/parse-parquet-to-rows.js.map +1 -1
  70. package/dist/esm/parquet-loader.js +12 -12
  71. package/dist/esm/parquet-loader.js.map +1 -1
  72. package/dist/esm/parquet-wasm-loader.js +1 -1
  73. package/dist/esm/parquet-wasm-writer.js +1 -1
  74. package/dist/esm/parquet-writer.js +1 -1
  75. package/dist/esm/parquetjs/codecs/plain.js.map +1 -1
  76. package/dist/esm/parquetjs/codecs/rle.js.map +1 -1
  77. package/dist/esm/parquetjs/encoder/parquet-encoder.js.map +1 -1
  78. package/dist/esm/parquetjs/parquet-thrift/index.js +2 -0
  79. package/dist/esm/parquetjs/parquet-thrift/index.js.map +1 -1
  80. package/dist/esm/parquetjs/parser/decoders.js +36 -32
  81. package/dist/esm/parquetjs/parser/decoders.js.map +1 -1
  82. package/dist/esm/parquetjs/parser/parquet-reader.js +12 -11
  83. package/dist/esm/parquetjs/parser/parquet-reader.js.map +1 -1
  84. package/dist/esm/parquetjs/schema/declare.js.map +1 -1
  85. package/dist/esm/parquetjs/utils/read-utils.js +1 -1
  86. package/dist/esm/parquetjs/utils/read-utils.js.map +1 -1
  87. package/dist/parquet-worker.js +25 -27
  88. package/dist/parquet-worker.js.map +3 -3
  89. package/dist/src/buffer-polyfill/buffer-polyfill.browser.d.ts +4 -0
  90. package/dist/src/buffer-polyfill/buffer-polyfill.browser.d.ts.map +1 -0
  91. package/dist/src/buffer-polyfill/buffer-polyfill.node.d.ts +34 -0
  92. package/dist/src/buffer-polyfill/buffer-polyfill.node.d.ts.map +1 -0
  93. package/dist/src/buffer-polyfill/buffer.d.ts +222 -0
  94. package/dist/src/buffer-polyfill/buffer.d.ts.map +1 -0
  95. package/dist/src/buffer-polyfill/index.d.ts +4 -0
  96. package/dist/src/buffer-polyfill/index.d.ts.map +1 -0
  97. package/dist/src/buffer-polyfill/install-buffer-polyfill.d.ts +3 -0
  98. package/dist/src/buffer-polyfill/install-buffer-polyfill.d.ts.map +1 -0
  99. package/dist/src/bundle.d.ts.map +1 -0
  100. package/dist/src/constants.d.ts.map +1 -0
  101. package/dist/{index.d.ts → src/index.d.ts} +5 -9
  102. package/dist/src/index.d.ts.map +1 -0
  103. package/dist/src/lib/arrow/convert-columns-to-row-group.d.ts.map +1 -0
  104. package/dist/src/lib/arrow/convert-row-group-to-columns.d.ts.map +1 -0
  105. package/dist/src/lib/arrow/convert-schema-from-parquet.d.ts.map +1 -0
  106. package/dist/src/lib/arrow/convert-schema-to-parquet.d.ts.map +1 -0
  107. package/dist/src/lib/geo/decode-geo-column.d.ts +4 -0
  108. package/dist/src/lib/geo/decode-geo-column.d.ts.map +1 -0
  109. package/dist/src/lib/geo/decode-geo-metadata.d.ts +44 -0
  110. package/dist/src/lib/geo/decode-geo-metadata.d.ts.map +1 -0
  111. package/dist/{lib/geo/geoparquet-schema.d.ts → src/lib/geo/geoparquet-metadata-schema.d.ts} +2 -3
  112. package/dist/src/lib/geo/geoparquet-metadata-schema.d.ts.map +1 -0
  113. package/dist/src/lib/parsers/get-parquet-schema.d.ts +4 -0
  114. package/dist/src/lib/parsers/get-parquet-schema.d.ts.map +1 -0
  115. package/dist/src/lib/parsers/parse-parquet-to-columns.d.ts +6 -0
  116. package/dist/src/lib/parsers/parse-parquet-to-columns.d.ts.map +1 -0
  117. package/dist/src/lib/parsers/parse-parquet-to-rows.d.ts +6 -0
  118. package/dist/src/lib/parsers/parse-parquet-to-rows.d.ts.map +1 -0
  119. package/dist/src/lib/wasm/encode-parquet-wasm.d.ts.map +1 -0
  120. package/dist/src/lib/wasm/load-wasm/index.d.ts.map +1 -0
  121. package/dist/src/lib/wasm/load-wasm/load-wasm-browser.d.ts.map +1 -0
  122. package/dist/src/lib/wasm/load-wasm/load-wasm-node.d.ts.map +1 -0
  123. package/dist/src/lib/wasm/parse-parquet-wasm.d.ts.map +1 -0
  124. package/dist/src/parquet-loader.d.ts +22 -0
  125. package/dist/src/parquet-loader.d.ts.map +1 -0
  126. package/dist/src/parquet-wasm-loader.d.ts.map +1 -0
  127. package/dist/src/parquet-wasm-writer.d.ts.map +1 -0
  128. package/dist/src/parquet-writer.d.ts.map +1 -0
  129. package/dist/src/parquetjs/codecs/declare.d.ts.map +1 -0
  130. package/dist/src/parquetjs/codecs/dictionary.d.ts.map +1 -0
  131. package/dist/src/parquetjs/codecs/index.d.ts.map +1 -0
  132. package/dist/src/parquetjs/codecs/plain.d.ts.map +1 -0
  133. package/dist/src/parquetjs/codecs/rle.d.ts.map +1 -0
  134. package/dist/src/parquetjs/compression.d.ts.map +1 -0
  135. package/dist/src/parquetjs/encoder/parquet-encoder.d.ts.map +1 -0
  136. package/dist/src/parquetjs/parquet-thrift/BoundaryOrder.d.ts.map +1 -0
  137. package/dist/src/parquetjs/parquet-thrift/BsonType.d.ts.map +1 -0
  138. package/dist/src/parquetjs/parquet-thrift/ColumnChunk.d.ts.map +1 -0
  139. package/dist/src/parquetjs/parquet-thrift/ColumnIndex.d.ts.map +1 -0
  140. package/dist/src/parquetjs/parquet-thrift/ColumnMetaData.d.ts.map +1 -0
  141. package/dist/src/parquetjs/parquet-thrift/ColumnOrder.d.ts.map +1 -0
  142. package/dist/src/parquetjs/parquet-thrift/CompressionCodec.d.ts.map +1 -0
  143. package/dist/src/parquetjs/parquet-thrift/ConvertedType.d.ts.map +1 -0
  144. package/dist/src/parquetjs/parquet-thrift/DataPageHeader.d.ts.map +1 -0
  145. package/dist/src/parquetjs/parquet-thrift/DataPageHeaderV2.d.ts.map +1 -0
  146. package/dist/src/parquetjs/parquet-thrift/DateType.d.ts.map +1 -0
  147. package/dist/src/parquetjs/parquet-thrift/DecimalType.d.ts.map +1 -0
  148. package/dist/src/parquetjs/parquet-thrift/DictionaryPageHeader.d.ts.map +1 -0
  149. package/dist/src/parquetjs/parquet-thrift/Encoding.d.ts.map +1 -0
  150. package/dist/src/parquetjs/parquet-thrift/EnumType.d.ts.map +1 -0
  151. package/dist/src/parquetjs/parquet-thrift/FieldRepetitionType.d.ts.map +1 -0
  152. package/dist/src/parquetjs/parquet-thrift/FileMetaData.d.ts.map +1 -0
  153. package/dist/src/parquetjs/parquet-thrift/IndexPageHeader.d.ts.map +1 -0
  154. package/dist/src/parquetjs/parquet-thrift/IntType.d.ts.map +1 -0
  155. package/dist/src/parquetjs/parquet-thrift/JsonType.d.ts.map +1 -0
  156. package/dist/src/parquetjs/parquet-thrift/KeyValue.d.ts.map +1 -0
  157. package/dist/src/parquetjs/parquet-thrift/ListType.d.ts.map +1 -0
  158. package/dist/src/parquetjs/parquet-thrift/LogicalType.d.ts.map +1 -0
  159. package/dist/src/parquetjs/parquet-thrift/MapType.d.ts.map +1 -0
  160. package/dist/src/parquetjs/parquet-thrift/MicroSeconds.d.ts.map +1 -0
  161. package/dist/src/parquetjs/parquet-thrift/MilliSeconds.d.ts.map +1 -0
  162. package/dist/src/parquetjs/parquet-thrift/NullType.d.ts.map +1 -0
  163. package/dist/src/parquetjs/parquet-thrift/OffsetIndex.d.ts.map +1 -0
  164. package/dist/src/parquetjs/parquet-thrift/PageEncodingStats.d.ts.map +1 -0
  165. package/dist/src/parquetjs/parquet-thrift/PageHeader.d.ts.map +1 -0
  166. package/dist/src/parquetjs/parquet-thrift/PageLocation.d.ts.map +1 -0
  167. package/dist/src/parquetjs/parquet-thrift/PageType.d.ts.map +1 -0
  168. package/dist/src/parquetjs/parquet-thrift/RowGroup.d.ts.map +1 -0
  169. package/dist/src/parquetjs/parquet-thrift/SchemaElement.d.ts.map +1 -0
  170. package/dist/src/parquetjs/parquet-thrift/SortingColumn.d.ts.map +1 -0
  171. package/dist/src/parquetjs/parquet-thrift/Statistics.d.ts.map +1 -0
  172. package/dist/src/parquetjs/parquet-thrift/StringType.d.ts.map +1 -0
  173. package/dist/src/parquetjs/parquet-thrift/TimeType.d.ts.map +1 -0
  174. package/dist/src/parquetjs/parquet-thrift/TimeUnit.d.ts.map +1 -0
  175. package/dist/src/parquetjs/parquet-thrift/TimestampType.d.ts.map +1 -0
  176. package/dist/src/parquetjs/parquet-thrift/Type.d.ts.map +1 -0
  177. package/dist/src/parquetjs/parquet-thrift/TypeDefinedOrder.d.ts.map +1 -0
  178. package/dist/src/parquetjs/parquet-thrift/UUIDType.d.ts.map +1 -0
  179. package/dist/{parquetjs → src/parquetjs}/parquet-thrift/index.d.ts +2 -0
  180. package/dist/src/parquetjs/parquet-thrift/index.d.ts.map +1 -0
  181. package/dist/{parquetjs → src/parquetjs}/parser/decoders.d.ts +4 -4
  182. package/dist/src/parquetjs/parser/decoders.d.ts.map +1 -0
  183. package/dist/{parquetjs → src/parquetjs}/parser/parquet-reader.d.ts +5 -3
  184. package/dist/src/parquetjs/parser/parquet-reader.d.ts.map +1 -0
  185. package/dist/{parquetjs → src/parquetjs}/schema/declare.d.ts +3 -1
  186. package/dist/src/parquetjs/schema/declare.d.ts.map +1 -0
  187. package/dist/src/parquetjs/schema/schema.d.ts.map +1 -0
  188. package/dist/src/parquetjs/schema/shred.d.ts.map +1 -0
  189. package/dist/src/parquetjs/schema/types.d.ts.map +1 -0
  190. package/dist/src/parquetjs/utils/file-utils.d.ts.map +1 -0
  191. package/dist/src/parquetjs/utils/read-utils.d.ts.map +1 -0
  192. package/dist/src/workers/parquet-worker.d.ts.map +1 -0
  193. package/dist/tsconfig.tsbuildinfo +1 -0
  194. package/package.json +16 -6
  195. package/src/buffer-polyfill/buffer-polyfill.browser.ts +11 -0
  196. package/src/buffer-polyfill/buffer-polyfill.node.ts +16 -0
  197. package/src/buffer-polyfill/buffer.ts +2207 -0
  198. package/src/buffer-polyfill/index.ts +9 -0
  199. package/src/buffer-polyfill/install-buffer-polyfill.ts +6 -0
  200. package/src/index.ts +29 -14
  201. package/src/lib/geo/decode-geo-column.ts +51 -0
  202. package/src/lib/geo/decode-geo-metadata.ts +81 -15
  203. package/src/lib/geo/geoparquet-metadata-schema.json +60 -0
  204. package/src/lib/geo/{geoparquet-schema.ts → geoparquet-metadata-schema.ts} +1 -1
  205. package/src/lib/parsers/get-parquet-schema.ts +14 -0
  206. package/src/lib/parsers/parse-parquet-to-columns.ts +15 -13
  207. package/src/lib/parsers/parse-parquet-to-rows.ts +38 -11
  208. package/src/parquet-loader.ts +29 -16
  209. package/src/parquetjs/codecs/plain.ts +1 -0
  210. package/src/parquetjs/codecs/rle.ts +2 -0
  211. package/src/parquetjs/encoder/parquet-encoder.ts +1 -0
  212. package/src/parquetjs/parquet-thrift/index.ts +4 -0
  213. package/src/parquetjs/parser/decoders.ts +51 -41
  214. package/src/parquetjs/parser/parquet-reader.ts +16 -13
  215. package/src/parquetjs/schema/declare.ts +3 -1
  216. package/src/parquetjs/utils/read-utils.ts +2 -2
  217. package/dist/bundle.d.ts.map +0 -1
  218. package/dist/constants.d.ts.map +0 -1
  219. package/dist/es5/lib/geo/geoparquet-schema.js.map +0 -1
  220. package/dist/esm/lib/geo/geoparquet-schema.js.map +0 -1
  221. package/dist/index.d.ts.map +0 -1
  222. package/dist/lib/arrow/convert-columns-to-row-group.d.ts.map +0 -1
  223. package/dist/lib/arrow/convert-row-group-to-columns.d.ts.map +0 -1
  224. package/dist/lib/arrow/convert-schema-from-parquet.d.ts.map +0 -1
  225. package/dist/lib/arrow/convert-schema-to-parquet.d.ts.map +0 -1
  226. package/dist/lib/geo/decode-geo-metadata.d.ts +0 -31
  227. package/dist/lib/geo/decode-geo-metadata.d.ts.map +0 -1
  228. package/dist/lib/geo/geoparquet-schema.d.ts.map +0 -1
  229. package/dist/lib/parsers/parse-parquet-to-columns.d.ts +0 -5
  230. package/dist/lib/parsers/parse-parquet-to-columns.d.ts.map +0 -1
  231. package/dist/lib/parsers/parse-parquet-to-rows.d.ts +0 -5
  232. package/dist/lib/parsers/parse-parquet-to-rows.d.ts.map +0 -1
  233. package/dist/lib/wasm/encode-parquet-wasm.d.ts.map +0 -1
  234. package/dist/lib/wasm/load-wasm/index.d.ts.map +0 -1
  235. package/dist/lib/wasm/load-wasm/load-wasm-browser.d.ts.map +0 -1
  236. package/dist/lib/wasm/load-wasm/load-wasm-node.d.ts.map +0 -1
  237. package/dist/lib/wasm/parse-parquet-wasm.d.ts.map +0 -1
  238. package/dist/parquet-loader.d.ts +0 -14
  239. package/dist/parquet-loader.d.ts.map +0 -1
  240. package/dist/parquet-wasm-loader.d.ts.map +0 -1
  241. package/dist/parquet-wasm-writer.d.ts.map +0 -1
  242. package/dist/parquet-writer.d.ts.map +0 -1
  243. package/dist/parquetjs/codecs/declare.d.ts.map +0 -1
  244. package/dist/parquetjs/codecs/dictionary.d.ts.map +0 -1
  245. package/dist/parquetjs/codecs/index.d.ts.map +0 -1
  246. package/dist/parquetjs/codecs/plain.d.ts.map +0 -1
  247. package/dist/parquetjs/codecs/rle.d.ts.map +0 -1
  248. package/dist/parquetjs/compression.d.ts.map +0 -1
  249. package/dist/parquetjs/encoder/parquet-encoder.d.ts.map +0 -1
  250. package/dist/parquetjs/parquet-thrift/BoundaryOrder.d.ts.map +0 -1
  251. package/dist/parquetjs/parquet-thrift/BsonType.d.ts.map +0 -1
  252. package/dist/parquetjs/parquet-thrift/ColumnChunk.d.ts.map +0 -1
  253. package/dist/parquetjs/parquet-thrift/ColumnIndex.d.ts.map +0 -1
  254. package/dist/parquetjs/parquet-thrift/ColumnMetaData.d.ts.map +0 -1
  255. package/dist/parquetjs/parquet-thrift/ColumnOrder.d.ts.map +0 -1
  256. package/dist/parquetjs/parquet-thrift/CompressionCodec.d.ts.map +0 -1
  257. package/dist/parquetjs/parquet-thrift/ConvertedType.d.ts.map +0 -1
  258. package/dist/parquetjs/parquet-thrift/DataPageHeader.d.ts.map +0 -1
  259. package/dist/parquetjs/parquet-thrift/DataPageHeaderV2.d.ts.map +0 -1
  260. package/dist/parquetjs/parquet-thrift/DateType.d.ts.map +0 -1
  261. package/dist/parquetjs/parquet-thrift/DecimalType.d.ts.map +0 -1
  262. package/dist/parquetjs/parquet-thrift/DictionaryPageHeader.d.ts.map +0 -1
  263. package/dist/parquetjs/parquet-thrift/Encoding.d.ts.map +0 -1
  264. package/dist/parquetjs/parquet-thrift/EnumType.d.ts.map +0 -1
  265. package/dist/parquetjs/parquet-thrift/FieldRepetitionType.d.ts.map +0 -1
  266. package/dist/parquetjs/parquet-thrift/FileMetaData.d.ts.map +0 -1
  267. package/dist/parquetjs/parquet-thrift/IndexPageHeader.d.ts.map +0 -1
  268. package/dist/parquetjs/parquet-thrift/IntType.d.ts.map +0 -1
  269. package/dist/parquetjs/parquet-thrift/JsonType.d.ts.map +0 -1
  270. package/dist/parquetjs/parquet-thrift/KeyValue.d.ts.map +0 -1
  271. package/dist/parquetjs/parquet-thrift/ListType.d.ts.map +0 -1
  272. package/dist/parquetjs/parquet-thrift/LogicalType.d.ts.map +0 -1
  273. package/dist/parquetjs/parquet-thrift/MapType.d.ts.map +0 -1
  274. package/dist/parquetjs/parquet-thrift/MicroSeconds.d.ts.map +0 -1
  275. package/dist/parquetjs/parquet-thrift/MilliSeconds.d.ts.map +0 -1
  276. package/dist/parquetjs/parquet-thrift/NullType.d.ts.map +0 -1
  277. package/dist/parquetjs/parquet-thrift/OffsetIndex.d.ts.map +0 -1
  278. package/dist/parquetjs/parquet-thrift/PageEncodingStats.d.ts.map +0 -1
  279. package/dist/parquetjs/parquet-thrift/PageHeader.d.ts.map +0 -1
  280. package/dist/parquetjs/parquet-thrift/PageLocation.d.ts.map +0 -1
  281. package/dist/parquetjs/parquet-thrift/PageType.d.ts.map +0 -1
  282. package/dist/parquetjs/parquet-thrift/RowGroup.d.ts.map +0 -1
  283. package/dist/parquetjs/parquet-thrift/SchemaElement.d.ts.map +0 -1
  284. package/dist/parquetjs/parquet-thrift/SortingColumn.d.ts.map +0 -1
  285. package/dist/parquetjs/parquet-thrift/Statistics.d.ts.map +0 -1
  286. package/dist/parquetjs/parquet-thrift/StringType.d.ts.map +0 -1
  287. package/dist/parquetjs/parquet-thrift/TimeType.d.ts.map +0 -1
  288. package/dist/parquetjs/parquet-thrift/TimeUnit.d.ts.map +0 -1
  289. package/dist/parquetjs/parquet-thrift/TimestampType.d.ts.map +0 -1
  290. package/dist/parquetjs/parquet-thrift/Type.d.ts.map +0 -1
  291. package/dist/parquetjs/parquet-thrift/TypeDefinedOrder.d.ts.map +0 -1
  292. package/dist/parquetjs/parquet-thrift/UUIDType.d.ts.map +0 -1
  293. package/dist/parquetjs/parquet-thrift/index.d.ts.map +0 -1
  294. package/dist/parquetjs/parser/decoders.d.ts.map +0 -1
  295. package/dist/parquetjs/parser/parquet-reader.d.ts.map +0 -1
  296. package/dist/parquetjs/schema/declare.d.ts.map +0 -1
  297. package/dist/parquetjs/schema/schema.d.ts.map +0 -1
  298. package/dist/parquetjs/schema/shred.d.ts.map +0 -1
  299. package/dist/parquetjs/schema/types.d.ts.map +0 -1
  300. package/dist/parquetjs/utils/file-utils.d.ts.map +0 -1
  301. package/dist/parquetjs/utils/read-utils.d.ts.map +0 -1
  302. package/dist/workers/parquet-worker.d.ts.map +0 -1
  303. /package/dist/{bundle.d.ts → src/bundle.d.ts} +0 -0
  304. /package/dist/{constants.d.ts → src/constants.d.ts} +0 -0
  305. /package/dist/{lib → src/lib}/arrow/convert-columns-to-row-group.d.ts +0 -0
  306. /package/dist/{lib → src/lib}/arrow/convert-row-group-to-columns.d.ts +0 -0
  307. /package/dist/{lib → src/lib}/arrow/convert-schema-from-parquet.d.ts +0 -0
  308. /package/dist/{lib → src/lib}/arrow/convert-schema-to-parquet.d.ts +0 -0
  309. /package/dist/{lib → src/lib}/wasm/encode-parquet-wasm.d.ts +0 -0
  310. /package/dist/{lib → src/lib}/wasm/load-wasm/index.d.ts +0 -0
  311. /package/dist/{lib → src/lib}/wasm/load-wasm/load-wasm-browser.d.ts +0 -0
  312. /package/dist/{lib → src/lib}/wasm/load-wasm/load-wasm-node.d.ts +0 -0
  313. /package/dist/{lib → src/lib}/wasm/parse-parquet-wasm.d.ts +0 -0
  314. /package/dist/{parquet-wasm-loader.d.ts → src/parquet-wasm-loader.d.ts} +0 -0
  315. /package/dist/{parquet-wasm-writer.d.ts → src/parquet-wasm-writer.d.ts} +0 -0
  316. /package/dist/{parquet-writer.d.ts → src/parquet-writer.d.ts} +0 -0
  317. /package/dist/{parquetjs → src/parquetjs}/codecs/declare.d.ts +0 -0
  318. /package/dist/{parquetjs → src/parquetjs}/codecs/dictionary.d.ts +0 -0
  319. /package/dist/{parquetjs → src/parquetjs}/codecs/index.d.ts +0 -0
  320. /package/dist/{parquetjs → src/parquetjs}/codecs/plain.d.ts +0 -0
  321. /package/dist/{parquetjs → src/parquetjs}/codecs/rle.d.ts +0 -0
  322. /package/dist/{parquetjs → src/parquetjs}/compression.d.ts +0 -0
  323. /package/dist/{parquetjs → src/parquetjs}/encoder/parquet-encoder.d.ts +0 -0
  324. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/BoundaryOrder.d.ts +0 -0
  325. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/BsonType.d.ts +0 -0
  326. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/ColumnChunk.d.ts +0 -0
  327. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/ColumnIndex.d.ts +0 -0
  328. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/ColumnMetaData.d.ts +0 -0
  329. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/ColumnOrder.d.ts +0 -0
  330. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/CompressionCodec.d.ts +0 -0
  331. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/ConvertedType.d.ts +0 -0
  332. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/DataPageHeader.d.ts +0 -0
  333. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/DataPageHeaderV2.d.ts +0 -0
  334. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/DateType.d.ts +0 -0
  335. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/DecimalType.d.ts +0 -0
  336. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/DictionaryPageHeader.d.ts +0 -0
  337. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/Encoding.d.ts +0 -0
  338. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/EnumType.d.ts +0 -0
  339. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/FieldRepetitionType.d.ts +0 -0
  340. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/FileMetaData.d.ts +0 -0
  341. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/IndexPageHeader.d.ts +0 -0
  342. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/IntType.d.ts +0 -0
  343. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/JsonType.d.ts +0 -0
  344. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/KeyValue.d.ts +0 -0
  345. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/ListType.d.ts +0 -0
  346. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/LogicalType.d.ts +0 -0
  347. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/MapType.d.ts +0 -0
  348. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/MicroSeconds.d.ts +0 -0
  349. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/MilliSeconds.d.ts +0 -0
  350. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/NullType.d.ts +0 -0
  351. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/OffsetIndex.d.ts +0 -0
  352. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/PageEncodingStats.d.ts +0 -0
  353. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/PageHeader.d.ts +0 -0
  354. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/PageLocation.d.ts +0 -0
  355. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/PageType.d.ts +0 -0
  356. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/RowGroup.d.ts +0 -0
  357. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/SchemaElement.d.ts +0 -0
  358. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/SortingColumn.d.ts +0 -0
  359. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/Statistics.d.ts +0 -0
  360. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/StringType.d.ts +0 -0
  361. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/TimeType.d.ts +0 -0
  362. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/TimeUnit.d.ts +0 -0
  363. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/TimestampType.d.ts +0 -0
  364. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/Type.d.ts +0 -0
  365. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/TypeDefinedOrder.d.ts +0 -0
  366. /package/dist/{parquetjs → src/parquetjs}/parquet-thrift/UUIDType.d.ts +0 -0
  367. /package/dist/{parquetjs → src/parquetjs}/schema/schema.d.ts +0 -0
  368. /package/dist/{parquetjs → src/parquetjs}/schema/shred.d.ts +0 -0
  369. /package/dist/{parquetjs → src/parquetjs}/schema/types.d.ts +0 -0
  370. /package/dist/{parquetjs → src/parquetjs}/utils/file-utils.d.ts +0 -0
  371. /package/dist/{parquetjs → src/parquetjs}/utils/read-utils.d.ts +0 -0
  372. /package/dist/{workers → src/workers}/parquet-worker.d.ts +0 -0
@@ -0,0 +1,9 @@
1
+ // loaders.gl, MIT license
2
+ export {Buffer} from './buffer-polyfill.node';
3
+ export {BufferPolyfill} from './buffer-polyfill.node';
4
+
5
+ export {installBufferPolyfill} from './buffer-polyfill.node';
6
+
7
+ // import { installBufferPolyfill } from "./buffer-polyfill.node";
8
+
9
+ // installBufferPolyfill();
@@ -0,0 +1,6 @@
1
+ export {Buffer} from './buffer-polyfill.node';
2
+ export {BufferPolyfill} from './buffer-polyfill.node';
3
+
4
+ import {installBufferPolyfill} from './buffer-polyfill.node';
5
+
6
+ installBufferPolyfill();
package/src/index.ts CHANGED
@@ -5,9 +5,11 @@ import type {
5
5
  ObjectRowTable,
6
6
  ObjectRowTableBatch,
7
7
  ColumnarTable,
8
- ColumnarTableBatch
8
+ ColumnarTableBatch,
9
+ GeoJSONTable,
10
+ GeoJSONTableBatch
9
11
  } from '@loaders.gl/schema';
10
- import type {Table as ArrowTable} from 'apache-arrow';
12
+ // import type {Table as ApacheArrowTable} from 'apache-arrow';
11
13
 
12
14
  // ParquetLoader
13
15
 
@@ -22,24 +24,26 @@ import {
22
24
  parseParquetFileInColumnarBatches
23
25
  } from './lib/parsers/parse-parquet-to-columns';
24
26
 
25
- import {parseParquetWasm, ParquetWasmLoaderOptions} from './lib/wasm/parse-parquet-wasm';
26
- import {ParquetWasmLoader as ParquetWasmWorkerLoader} from './parquet-wasm-loader';
27
+ // import type {ParquetWasmLoaderOptions} from './lib/wasm/parse-parquet-wasm';
28
+ // import {parseParquetWasm} from './lib/wasm/parse-parquet-wasm';
29
+ // import {ParquetWasmLoader as ParquetWasmWorkerLoader} from './parquet-wasm-loader';
27
30
 
28
- export {ParquetWorkerLoader, ParquetWasmWorkerLoader};
31
+ export {ParquetWorkerLoader};
32
+ // export {ParquetWasmWorkerLoader};
29
33
 
30
34
  /** ParquetJS table loader */
31
35
  export const ParquetLoader: LoaderWithParser<
32
- ObjectRowTable,
33
- ObjectRowTableBatch,
36
+ ObjectRowTable | GeoJSONTable,
37
+ ObjectRowTableBatch | GeoJSONTableBatch,
34
38
  ParquetLoaderOptions
35
39
  > = {
36
40
  ...ParquetWorkerLoader,
37
41
  parse: parseParquet,
42
+ // @ts-expect-error
38
43
  parseFileInBatches: parseParquetFileInBatches
39
44
  };
40
45
 
41
46
  /** ParquetJS table loader */
42
- // @ts-expect-error
43
47
  export const ParquetColumnarLoader: LoaderWithParser<
44
48
  ColumnarTable,
45
49
  ColumnarTableBatch,
@@ -47,18 +51,24 @@ export const ParquetColumnarLoader: LoaderWithParser<
47
51
  > = {
48
52
  ...ParquetColumnarWorkerLoader,
49
53
  parse: parseParquetInColumns,
54
+ // @ts-expect-error
50
55
  parseFileInBatches: parseParquetFileInColumnarBatches
51
56
  };
52
57
 
53
- export const ParquetWasmLoader: LoaderWithParser<ArrowTable, never, ParquetWasmLoaderOptions> = {
54
- ...ParquetWasmWorkerLoader,
55
- parse: parseParquetWasm
56
- };
58
+ // export const ParquetWasmLoader: LoaderWithParser<
59
+ // ApacheArrowTable,
60
+ // never,
61
+ // ParquetWasmLoaderOptions
62
+ // > = {
63
+ // ...ParquetWasmWorkerLoader,
64
+ // // @ts-expect-error Getting strange errors in wasm
65
+ // parse: () => {} // parseParquetWasm
66
+ // };
57
67
 
58
68
  // ParquetWriter
59
69
 
60
70
  export {ParquetWriter as _ParquetWriter} from './parquet-writer';
61
- export {ParquetWasmWriter} from './parquet-wasm-writer';
71
+ // export {ParquetWasmWriter} from './parquet-wasm-writer';
62
72
 
63
73
  // EXPERIMENTAL - expose the internal parquetjs API
64
74
 
@@ -74,7 +84,12 @@ export {
74
84
  } from './lib/arrow/convert-schema-from-parquet';
75
85
 
76
86
  // Geo Metadata
77
- export {default as geoJSONSchema} from './lib/geo/geoparquet-schema';
87
+ // import {default as GEOPARQUET_METADATA_SCHEMA} from './lib/geo/geoparquet-metadata-schema.json';
88
+ // export {GEOPARQUET_METADATA_SCHEMA};
89
+ export {GEOPARQUET_METADATA_JSON_SCHEMA} from './lib/geo/geoparquet-metadata-schema';
78
90
 
79
91
  export type {GeoMetadata} from './lib/geo/decode-geo-metadata';
80
92
  export {getGeoMetadata, setGeoMetadata, unpackGeoMetadata} from './lib/geo/decode-geo-metadata';
93
+
94
+ // Experimental
95
+ export {BufferPolyfill, installBufferPolyfill} from './buffer-polyfill';
@@ -0,0 +1,51 @@
1
+ // loaders.gl, MIT license
2
+
3
+ import type {ArrayRowTable, GeoJSONTable, ObjectRowTable, Schema} from '@loaders.gl/schema';
4
+ import type {Feature, Geometry} from '@loaders.gl/schema';
5
+ import {getTableLength, getTableRowAsObject} from '@loaders.gl/schema';
6
+ // import {binaryToGeometry} from '@loaders.gl/gis';
7
+ import {HexWKBLoader, WKTLoader} from '@loaders.gl/wkt';
8
+
9
+ import {GeoColumnMetadata, getGeoMetadata} from './decode-geo-metadata';
10
+
11
+ /** TODO - move to loaders.gl/gis? */
12
+ export function convertWKBTableToGeoJSON(
13
+ table: ArrayRowTable | ObjectRowTable,
14
+ schema: Schema
15
+ ): GeoJSONTable {
16
+ const geoMetadata = getGeoMetadata(schema);
17
+ const primaryColumn = geoMetadata?.primary_column;
18
+ if (!primaryColumn) {
19
+ throw new Error('no geometry column');
20
+ }
21
+ const columnMetadata = geoMetadata.columns[primaryColumn];
22
+
23
+ const features: Feature[] = [];
24
+
25
+ const length = getTableLength(table);
26
+ for (let rowIndex = 0; rowIndex < length; rowIndex++) {
27
+ const row = getTableRowAsObject(table, rowIndex);
28
+ const geometry = parseGeometry(row[primaryColumn] as string, columnMetadata);
29
+ delete row[primaryColumn];
30
+ const feature: Feature = {type: 'Feature', geometry: geometry!, properties: row};
31
+ features.push(feature);
32
+ }
33
+
34
+ return {shape: 'geojson-table', schema, type: 'FeatureCollection', features};
35
+ }
36
+
37
+ function parseGeometry(geometry: string, columnMetadata: GeoColumnMetadata): Geometry | null {
38
+ switch (columnMetadata.encoding) {
39
+ case 'wkt':
40
+ return WKTLoader.parseTextSync?.(geometry) || null;
41
+ case 'wkb':
42
+ default:
43
+ const geojson = HexWKBLoader.parseTextSync?.(geometry, {
44
+ wkb: {shape: 'geometry'}
45
+ }) as unknown as Geometry;
46
+ return geojson; // binaryGeometry ? binaryToGeometry(binaryGeometry) : null;
47
+ // const binaryGeometry = WKBLoader.parseSync?.(geometry);
48
+ // ts-ignore
49
+ // return binaryGeometry ? binaryToGeometry(binaryGeometry) : null;
50
+ }
51
+ }
@@ -3,7 +3,28 @@ import {Schema, Field} from '@loaders.gl/schema';
3
3
 
4
4
  /* eslint-disable camelcase */
5
5
 
6
- /** A geoarrow / geoparquet geo metadata object (stored in stringified form in the top level metadata 'geo' key) */
6
+ type GeometryType =
7
+ | 'Point'
8
+ | 'LineString'
9
+ | 'Polygon'
10
+ | 'MultiPoint'
11
+ | 'MultiLineString'
12
+ | 'MultiPolygon'
13
+ | 'GeometryCollection'
14
+ | 'Point Z'
15
+ | 'LineString Z'
16
+ | 'Polygon Z'
17
+ | 'MultiPoint Z'
18
+ | 'MultiLineString Z'
19
+ | 'MultiPolygon Z'
20
+ | 'GeometryCollection Z';
21
+
22
+ /**
23
+ * A geoarrow / geoparquet geo metadata object
24
+ * (stored in stringified form in the top level metadata 'geo' key)
25
+ * @see https://github.com/opengeospatial/geoparquet/blob/main/format-specs/geoparquet.md
26
+ * @see https://github.com/geoarrow/geoarrow/blob/main/metadata.md
27
+ * */
7
28
  export type GeoMetadata = {
8
29
  version?: string;
9
30
  primary_column?: string;
@@ -13,32 +34,55 @@ export type GeoMetadata = {
13
34
 
14
35
  /** A geoarrow / geoparquet geo metadata for one geometry column */
15
36
  export type GeoColumnMetadata = {
16
- bounding_box?:
17
- | [number, number, number, number]
18
- | [number, number, number, number, number, number];
19
- crs?: string;
20
- geometry_type?: string[];
21
- edges?: string;
37
+ encoding: 'wkb' | 'wkt';
38
+ geometry_types: GeometryType[];
39
+ crs?: object | null;
40
+ orientation?: 'counterclockwise';
41
+ bbox?: [number, number, number, number] | [number, number, number, number, number, number];
42
+ edges?: 'planar' | 'spherical';
43
+ epoch?: number;
22
44
  [key: string]: unknown;
23
45
  };
24
46
 
25
- /**
26
- * Reads the GeoMetadata object from the metadata
27
- * @note geoarrow / parquet schema is stringified into a single key-value pair in the parquet metadata */
28
- export function getGeoMetadata(schema: Schema): GeoMetadata | null {
29
- const stringifiedGeoMetadata = schema.metadata.geo;
30
- if (!stringifiedGeoMetadata) {
47
+ /** Parse a key with stringified arrow metadata */
48
+ export function parseJSONStringMetadata(
49
+ schema: Schema,
50
+ metadataKey: string
51
+ ): Record<string, unknown> | null {
52
+ const stringifiedMetadata = schema.metadata[metadataKey];
53
+ if (!stringifiedMetadata) {
31
54
  return null;
32
55
  }
33
56
 
34
57
  try {
35
- const geoMetadata = JSON.parse(stringifiedGeoMetadata) as GeoMetadata;
36
- return geoMetadata;
58
+ const metadata = JSON.parse(stringifiedMetadata);
59
+ if (!metadata || typeof metadata !== 'object') {
60
+ return null;
61
+ }
62
+ return metadata;
37
63
  } catch {
38
64
  return null;
39
65
  }
40
66
  }
41
67
 
68
+ export function unpackJSONStringMetadata(schema: Schema, metadataKey: string): void {
69
+ const json = parseJSONStringMetadata(schema, metadataKey);
70
+ for (const [key, value] of Object.entries(json || {})) {
71
+ schema.metadata[`${metadataKey}.${key}`] =
72
+ typeof value === 'string' ? value : JSON.stringify(value);
73
+ }
74
+ }
75
+
76
+ // GEO METADATA
77
+
78
+ /**
79
+ * Reads the GeoMetadata object from the metadata
80
+ * @note geoarrow / parquet schema is stringified into a single key-value pair in the parquet metadata */
81
+ export function getGeoMetadata(schema: Schema): GeoMetadata | null {
82
+ const geoMetadata = parseJSONStringMetadata(schema, 'geo') as GeoMetadata;
83
+ return geoMetadata;
84
+ }
85
+
42
86
  /**
43
87
  * Stores a geoarrow / geoparquet geo metadata object in the schema
44
88
  * @note geoarrow / geoparquet geo metadata is a single stringified JSON field
@@ -83,6 +127,7 @@ export function unpackGeoMetadata(schema: Schema): void {
83
127
  }
84
128
  }
85
129
 
130
+ // eslint-disable-next-line complexity
86
131
  function unpackGeoFieldMetadata(field: Field, columnMetadata): void {
87
132
  for (const [key, value] of Object.entries(columnMetadata || {})) {
88
133
  switch (key) {
@@ -90,7 +135,28 @@ function unpackGeoFieldMetadata(field: Field, columnMetadata): void {
90
135
  setFieldMetadata(field, `geo.${key}`, (value as string[]).join(','));
91
136
  break;
92
137
  case 'bbox':
138
+ setFieldMetadata(field, `geo.crs.${key}`, JSON.stringify(value));
139
+ break;
93
140
  case 'crs':
141
+ for (const [crsKey, crsValue] of Object.entries(value || {})) {
142
+ switch (crsKey) {
143
+ case 'id':
144
+ const crsId =
145
+ typeof crsValue === 'object'
146
+ ? `${crsValue?.authority}:${crsValue?.code}`
147
+ : JSON.stringify(crsValue);
148
+ setFieldMetadata(field, `geo.crs.${crsKey}`, crsId);
149
+ break;
150
+ default:
151
+ setFieldMetadata(
152
+ field,
153
+ `geo.crs.${crsKey}`,
154
+ typeof crsValue === 'string' ? crsValue : JSON.stringify(crsValue)
155
+ );
156
+ break;
157
+ }
158
+ }
159
+ break;
94
160
  case 'edges':
95
161
  default:
96
162
  setFieldMetadata(
@@ -0,0 +1,60 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "GeoParquet",
4
+ "description": "Parquet metadata included in the geo field.",
5
+ "type": "object",
6
+ "required": ["version", "primary_column", "columns"],
7
+ "properties": {
8
+ "version": {"type": "string", "const": "1.0.0-beta.1"},
9
+ "primary_column": {"type": "string", "minLength": 1},
10
+ "columns": {
11
+ "type": "object",
12
+ "minProperties": 1,
13
+ "patternProperties": {
14
+ ".+": {
15
+ "type": "object",
16
+ "required": ["encoding", "geometry_types"],
17
+ "properties": {
18
+ "encoding": {"type": "string", "const": "WKB"},
19
+ "geometry_types": {
20
+ "type": "array",
21
+ "uniqueItems": true,
22
+ "items": {
23
+ "type": "string",
24
+ "pattern": "^(GeometryCollection|(Multi)?(Point|LineString|Polygon))( Z)?$"
25
+ }
26
+ },
27
+ "crs": {
28
+ "oneOf": [
29
+ {
30
+ "$ref": "https://proj.org/schemas/v0.5/projjson.schema.json"
31
+ },
32
+ {"type": "null"}
33
+ ]
34
+ },
35
+ "edges": {"type": "string", "enum": ["planar", "spherical"]},
36
+ "orientation": {"type": "string", "const": "counterclockwise"},
37
+ "bbox": {
38
+ "type": "array",
39
+ "items": {"type": "number"},
40
+ "oneOf": [
41
+ {
42
+ "description": "2D bbox consisting of (xmin, ymin, xmax, ymax)",
43
+ "minItems": 4,
44
+ "maxItems": 4
45
+ },
46
+ {
47
+ "description": "3D bbox consisting of (xmin, ymin, zmin, xmax, ymax, zmax)",
48
+ "minItems": 6,
49
+ "maxItems": 6
50
+ }
51
+ ]
52
+ },
53
+ "epoch": {"type": "number"}
54
+ }
55
+ }
56
+ },
57
+ "additionalProperties": false
58
+ }
59
+ }
60
+ }
@@ -7,7 +7,7 @@
7
7
  * @see https://github.com/geoarrow/geoarrow/blob/main/metadata.md
8
8
  * @see https://github.com/opengeospatial/geoparquet/blob/main/format-specs/geoparquet.md
9
9
  */
10
- export default {
10
+ export const GEOPARQUET_METADATA_JSON_SCHEMA = {
11
11
  $schema: 'http://json-schema.org/draft-07/schema#',
12
12
  title: 'GeoParquet',
13
13
  description: 'Parquet metadata included in the geo field.',
@@ -0,0 +1,14 @@
1
+ // loaders.gl
2
+ import {Schema} from '@loaders.gl/schema';
3
+ import {ParquetReader} from '../../parquetjs/parser/parquet-reader';
4
+ import {convertParquetSchema} from '../arrow/convert-schema-from-parquet';
5
+ import {unpackGeoMetadata, unpackJSONStringMetadata} from '../geo/decode-geo-metadata';
6
+
7
+ export async function getSchemaFromParquetReader(reader: ParquetReader): Promise<Schema> {
8
+ const parquetSchema = await reader.getSchema();
9
+ const parquetMetadata = await reader.getFileMetadata();
10
+ const schema = convertParquetSchema(parquetSchema, parquetMetadata);
11
+ unpackGeoMetadata(schema);
12
+ unpackJSONStringMetadata(schema, 'pandas');
13
+ return schema;
14
+ }
@@ -1,23 +1,25 @@
1
1
  // loaders.gl, MIT license
2
2
 
3
- // import type {LoaderWithParser, Loader, LoaderOptions} from '@loaders.gl/loader-utils';
4
3
  import {ColumnarTable, ColumnarTableBatch, Schema} from '@loaders.gl/schema';
5
4
  import {makeReadableFile} from '@loaders.gl/loader-utils';
6
5
  import type {ParquetLoaderOptions} from '../../parquet-loader';
7
6
  import {ParquetReader} from '../../parquetjs/parser/parquet-reader';
8
7
  import {ParquetRowGroup} from '../../parquetjs/schema/declare';
9
8
  import {ParquetSchema} from '../../parquetjs/schema/schema';
10
- import {convertParquetSchema} from '../arrow/convert-schema-from-parquet';
11
9
  import {materializeColumns} from '../../parquetjs/schema/shred';
12
- // import {convertParquetRowGroupToColumns} from '../arrow/convert-row-group-to-columns';
13
- import {unpackGeoMetadata} from '../geo/decode-geo-metadata';
10
+ import {getSchemaFromParquetReader} from './get-parquet-schema';
11
+ import {installBufferPolyfill} from '../../buffer-polyfill';
14
12
 
15
13
  export async function parseParquetInColumns(
16
14
  arrayBuffer: ArrayBuffer,
17
15
  options?: ParquetLoaderOptions
18
16
  ): Promise<ColumnarTable> {
17
+ installBufferPolyfill();
19
18
  const blob = new Blob([arrayBuffer]);
20
- for await (const batch of parseParquetFileInColumnarBatches(blob, options)) {
19
+ const file = makeReadableFile(blob);
20
+ const reader = new ParquetReader(file);
21
+
22
+ for await (const batch of parseParquetFileInColumnarBatches(reader, options)) {
21
23
  return {
22
24
  shape: 'columnar-table',
23
25
  schema: batch.schema,
@@ -28,24 +30,24 @@ export async function parseParquetInColumns(
28
30
  }
29
31
 
30
32
  export async function* parseParquetFileInColumnarBatches(
31
- blob: Blob,
33
+ reader: ParquetReader,
32
34
  options?: ParquetLoaderOptions
33
35
  ): AsyncIterable<ColumnarTableBatch> {
34
- const file = makeReadableFile(blob);
35
- const reader = new ParquetReader(file);
36
+ // Extract schema and geo metadata
37
+ const schema = await getSchemaFromParquetReader(reader);
38
+
36
39
  const parquetSchema = await reader.getSchema();
37
- const parquetMetadata = await reader.getFileMetadata();
38
- const schema = convertParquetSchema(parquetSchema, parquetMetadata);
39
- unpackGeoMetadata(schema);
40
+
41
+ // Iterate over row batches
40
42
  const rowGroups = reader.rowGroupIterator(options?.parquet);
41
43
  for await (const rowGroup of rowGroups) {
42
- yield convertRowGroupToTableBatch(parquetSchema, rowGroup, schema);
44
+ yield convertRowGroupToTableBatch(rowGroup, parquetSchema, schema);
43
45
  }
44
46
  }
45
47
 
46
48
  function convertRowGroupToTableBatch(
47
- parquetSchema: ParquetSchema,
48
49
  rowGroup: ParquetRowGroup,
50
+ parquetSchema: ParquetSchema,
49
51
  schema: Schema
50
52
  ): ColumnarTableBatch {
51
53
  // const data = convertParquetRowGroupToColumns(schema, rowGroup);
@@ -1,44 +1,71 @@
1
1
  // import type {LoaderWithParser, Loader, LoaderOptions} from '@loaders.gl/loader-utils';
2
2
  // import {ColumnarTableBatch} from '@loaders.gl/schema';
3
3
  import {makeReadableFile} from '@loaders.gl/loader-utils';
4
- import {ObjectRowTable, ObjectRowTableBatch} from '@loaders.gl/schema';
4
+ import {GeoJSONTable, ObjectRowTable, ObjectRowTableBatch} from '@loaders.gl/schema';
5
5
  import type {ParquetLoaderOptions} from '../../parquet-loader';
6
6
  import type {ParquetRow} from '../../parquetjs/schema/declare';
7
7
  import {ParquetReader} from '../../parquetjs/parser/parquet-reader';
8
+ import {getSchemaFromParquetReader} from './get-parquet-schema';
9
+ import {installBufferPolyfill} from '../../buffer-polyfill';
10
+ import {convertWKBTableToGeoJSON} from '../geo/decode-geo-column';
8
11
 
9
12
  export async function parseParquet(
10
13
  arrayBuffer: ArrayBuffer,
11
14
  options?: ParquetLoaderOptions
12
- ): Promise<ObjectRowTable> {
15
+ ): Promise<ObjectRowTable | GeoJSONTable> {
16
+ installBufferPolyfill();
13
17
  const blob = new Blob([arrayBuffer]);
18
+ const file = makeReadableFile(blob);
19
+ const reader = new ParquetReader(file, {
20
+ preserveBinary: options?.parquet?.preserveBinary
21
+ });
22
+
23
+ const schema = await getSchemaFromParquetReader(reader);
14
24
 
15
25
  const rows: ParquetRow[] = [];
16
- for await (const batch of parseParquetFileInBatches(blob, options)) {
26
+
27
+ const rowBatches = reader.rowBatchIterator(options?.parquet);
28
+ for await (const rowBatch of rowBatches) {
17
29
  // we have only one input batch so return
18
- for (const row of batch.data) {
30
+ for (const row of rowBatch) {
19
31
  rows.push(row);
20
32
  }
21
33
  }
22
-
23
- return {
34
+ const objectRowTable: ObjectRowTable = {
24
35
  shape: 'object-row-table',
25
- // TODO - spread can fail for very large number of batches
36
+ schema,
26
37
  data: rows
27
38
  };
39
+
40
+ const shape = options?.parquet?.shape;
41
+ switch (shape) {
42
+ case 'object-row-table':
43
+ return objectRowTable;
44
+
45
+ case 'geojson-table':
46
+ try {
47
+ return convertWKBTableToGeoJSON(objectRowTable, schema);
48
+ } catch (error) {
49
+ return objectRowTable;
50
+ }
51
+
52
+ default:
53
+ throw new Error(shape);
54
+ }
28
55
  }
29
56
 
30
57
  export async function* parseParquetFileInBatches(
31
- blob: Blob,
58
+ reader: ParquetReader,
32
59
  options?: ParquetLoaderOptions
33
60
  ): AsyncIterable<ObjectRowTableBatch> {
34
- const file = makeReadableFile(blob);
35
- const reader = new ParquetReader(file);
61
+ const schema = await getSchemaFromParquetReader(reader);
36
62
  const rowBatches = reader.rowBatchIterator(options?.parquet);
37
63
  for await (const rows of rowBatches) {
38
64
  yield {
65
+ batchType: 'data',
39
66
  shape: 'object-row-table',
67
+ schema,
40
68
  data: rows,
41
- batchType: 'data',
42
69
  length: rows.length
43
70
  };
44
71
  }
@@ -4,33 +4,38 @@ import type {
4
4
  ObjectRowTable,
5
5
  ObjectRowTableBatch,
6
6
  ColumnarTable,
7
- ColumnarTableBatch
7
+ ColumnarTableBatch,
8
+ GeoJSONTable,
9
+ GeoJSONTableBatch
8
10
  } from '@loaders.gl/schema';
9
11
 
10
12
  // __VERSION__ is injected by babel-plugin-version-inline
11
13
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
12
14
  const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
13
15
 
16
+ /** Options for the parquet loader */
14
17
  export type ParquetLoaderOptions = LoaderOptions & {
18
+ /** Options for the parquet loader */
15
19
  parquet?: {
16
- type?: 'object-row-table';
17
- url?: string;
20
+ /** Format of returned parsed data */
21
+ shape?: 'object-row-table' | 'geojson-table';
22
+ /** Restrict which columns that are parsed from the table. Can save significant memory. */
18
23
  columnList?: string[] | string[][];
24
+ /** If true, binary values are not converted to strings */
25
+ preserveBinary?: boolean;
26
+ /** @deprecated not used? Set to true to indicate that this is a geoparquet file. */
19
27
  geoparquet?: boolean;
28
+ /** @deprecated URL to override loaders.gl/core parser system */
29
+ url?: string;
20
30
  };
21
31
  };
22
32
 
23
- const DEFAULT_PARQUET_LOADER_OPTIONS: ParquetLoaderOptions = {
24
- parquet: {
25
- type: 'object-row-table',
26
- url: undefined,
27
- columnList: [],
28
- geoparquet: true
29
- }
30
- };
31
-
32
33
  /** ParquetJS table loader */
33
- export const ParquetLoader: Loader<ObjectRowTable, ObjectRowTableBatch, ParquetLoaderOptions> = {
34
+ export const ParquetLoader: Loader<
35
+ ObjectRowTable | GeoJSONTable,
36
+ ObjectRowTableBatch | GeoJSONTableBatch,
37
+ ParquetLoaderOptions
38
+ > = {
34
39
  name: 'Apache Parquet',
35
40
  id: 'parquet',
36
41
  module: 'parquet',
@@ -41,10 +46,18 @@ export const ParquetLoader: Loader<ObjectRowTable, ObjectRowTableBatch, ParquetL
41
46
  mimeTypes: ['application/octet-stream'],
42
47
  binary: true,
43
48
  tests: ['PAR1', 'PARE'],
44
- options: DEFAULT_PARQUET_LOADER_OPTIONS
49
+ options: {
50
+ parquet: {
51
+ shape: 'object-row-table',
52
+ columnList: [],
53
+ geoparquet: true,
54
+ url: undefined,
55
+ preserveBinary: false
56
+ }
57
+ }
45
58
  };
46
59
 
47
- export const ParqueColumnnartLoader: Loader<
60
+ export const ParquetColumnnarLoader: Loader<
48
61
  ColumnarTable,
49
62
  ColumnarTableBatch,
50
63
  ParquetLoaderOptions
@@ -59,5 +72,5 @@ export const ParqueColumnnartLoader: Loader<
59
72
  mimeTypes: ['application/octet-stream'],
60
73
  binary: true,
61
74
  tests: ['PAR1', 'PARE'],
62
- options: DEFAULT_PARQUET_LOADER_OPTIONS
75
+ options: ParquetLoader.options
63
76
  };
@@ -200,6 +200,7 @@ function decodeValues_BYTE_ARRAY(cursor: CursorBuffer, count: number): Buffer[]
200
200
  for (let i = 0; i < count; i++) {
201
201
  const len = cursor.buffer.readUInt32LE(cursor.offset);
202
202
  cursor.offset += 4;
203
+ // values.push(cursor.buffer.buffer.slice(cursor.offset, cursor.offset + len));
203
204
  values.push(cursor.buffer.slice(cursor.offset, cursor.offset + len));
204
205
  cursor.offset += len;
205
206
  }
@@ -63,6 +63,8 @@ export function encodeValues(
63
63
  }
64
64
 
65
65
  const envelope = Buffer.alloc(buf.length + 4);
66
+
67
+ // @ts-ignore buffer polyfill
66
68
  envelope.writeUInt32LE(buf.length, undefined);
67
69
  buf.copy(envelope, 4);
68
70
 
@@ -632,6 +632,7 @@ function encodeFooter(
632
632
 
633
633
  const metadataEncoded = serializeThrift(metadata);
634
634
  const footerEncoded = Buffer.alloc(metadataEncoded.length + 8);
635
+
635
636
  metadataEncoded.copy(footerEncoded);
636
637
  footerEncoded.writeUInt32LE(metadataEncoded.length, metadataEncoded.length);
637
638
  footerEncoded.write(PARQUET_MAGIC, metadataEncoded.length + 4);
@@ -4,6 +4,10 @@
4
4
  * Autogenerated by @creditkarma/thrift-typescript v3.7.2
5
5
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
6
6
  */
7
+ export {Buffer} from '../../buffer-polyfill/install-buffer-polyfill';
8
+
9
+ export {TBufferedTransport, TCompactProtocol, TFramedTransport} from 'thrift';
10
+
7
11
  export * from './Type';
8
12
  export * from './ConvertedType';
9
13
  export * from './FieldRepetitionType';