@loaders.gl/parquet 4.0.0 → 4.0.1

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 (31) hide show
  1. package/dist/index.cjs +7 -203
  2. package/dist/index.d.ts +0 -3
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +0 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/lib/parsers/get-parquet-schema.js +1 -1
  7. package/dist/lib/parsers/get-parquet-schema.js.map +1 -1
  8. package/dist/lib/parsers/parse-parquet-to-rows.d.ts.map +1 -1
  9. package/dist/lib/parsers/parse-parquet-to-rows.js +3 -2
  10. package/dist/lib/parsers/parse-parquet-to-rows.js.map +1 -1
  11. package/package.json +8 -8
  12. package/src/index.ts +0 -8
  13. package/src/lib/parsers/get-parquet-schema.ts +1 -1
  14. package/src/lib/parsers/parse-parquet-to-rows.ts +4 -2
  15. package/dist/lib/geo/decode-geo-column.d.ts +0 -4
  16. package/dist/lib/geo/decode-geo-column.d.ts.map +0 -1
  17. package/dist/lib/geo/decode-geo-column.js +0 -47
  18. package/dist/lib/geo/decode-geo-column.js.map +0 -1
  19. package/dist/lib/geo/decode-geo-metadata.d.ts +0 -44
  20. package/dist/lib/geo/decode-geo-metadata.d.ts.map +0 -1
  21. package/dist/lib/geo/decode-geo-metadata.js +0 -89
  22. package/dist/lib/geo/decode-geo-metadata.js.map +0 -1
  23. package/dist/lib/geo/geoparquet-metadata-schema.d.ts +0 -79
  24. package/dist/lib/geo/geoparquet-metadata-schema.d.ts.map +0 -1
  25. package/dist/lib/geo/geoparquet-metadata-schema.js +0 -76
  26. package/dist/lib/geo/geoparquet-metadata-schema.js.map +0 -1
  27. package/dist/lib/geo/geoparquet-metadata-schema.json +0 -60
  28. package/src/lib/geo/decode-geo-column.ts +0 -55
  29. package/src/lib/geo/decode-geo-metadata.ts +0 -177
  30. package/src/lib/geo/geoparquet-metadata-schema.json +0 -60
  31. package/src/lib/geo/geoparquet-metadata-schema.ts +0 -70
package/dist/index.cjs CHANGED
@@ -32,7 +32,6 @@ var src_exports = {};
32
32
  __export(src_exports, {
33
33
  Buffer: () => Buffer3,
34
34
  BufferPolyfill: () => Buffer2,
35
- GEOPARQUET_METADATA_JSON_SCHEMA: () => GEOPARQUET_METADATA_JSON_SCHEMA,
36
35
  ParquetColumnarLoader: () => ParquetColumnarLoader2,
37
36
  ParquetEncoder: () => ParquetEncoder,
38
37
  ParquetLoader: () => ParquetLoader2,
@@ -42,11 +41,8 @@ __export(src_exports, {
42
41
  _ParquetWriter: () => ParquetWriter,
43
42
  convertParquetSchema: () => convertParquetSchema,
44
43
  convertParquetToArrowSchema: () => convertParquetSchema,
45
- getGeoMetadata: () => getGeoMetadata,
46
44
  installBufferPolyfill: () => installBufferPolyfill,
47
- preloadCompressions: () => preloadCompressions,
48
- setGeoMetadata: () => setGeoMetadata,
49
- unpackGeoMetadata: () => unpackGeoMetadata
45
+ preloadCompressions: () => preloadCompressions
50
46
  });
51
47
  module.exports = __toCommonJS(src_exports);
52
48
 
@@ -1821,6 +1817,8 @@ ParquetColumnarLoader.Buffer = Buffer;
1821
1817
 
1822
1818
  // src/lib/parsers/parse-parquet-to-rows.ts
1823
1819
  var import_loader_utils = require("@loaders.gl/loader-utils");
1820
+ var import_gis2 = require("@loaders.gl/gis");
1821
+ var import_wkt = require("@loaders.gl/wkt");
1824
1822
 
1825
1823
  // src/parquetjs/codecs/plain.ts
1826
1824
  var import_int53 = __toESM(require("int53"), 1);
@@ -7188,149 +7186,17 @@ function getSchemaMetadata(parquetMetadata) {
7188
7186
  return metadata;
7189
7187
  }
7190
7188
 
7191
- // src/lib/geo/decode-geo-metadata.ts
7192
- function parseJSONStringMetadata(schema, metadataKey) {
7193
- const stringifiedMetadata = schema.metadata[metadataKey];
7194
- if (!stringifiedMetadata) {
7195
- return null;
7196
- }
7197
- try {
7198
- const metadata = JSON.parse(stringifiedMetadata);
7199
- if (!metadata || typeof metadata !== "object") {
7200
- return null;
7201
- }
7202
- return metadata;
7203
- } catch {
7204
- return null;
7205
- }
7206
- }
7207
- function unpackJSONStringMetadata(schema, metadataKey) {
7208
- const json = parseJSONStringMetadata(schema, metadataKey);
7209
- for (const [key, value] of Object.entries(json || {})) {
7210
- schema.metadata[`${metadataKey}.${key}`] = typeof value === "string" ? value : JSON.stringify(value);
7211
- }
7212
- }
7213
- function getGeoMetadata(schema) {
7214
- const geoMetadata = parseJSONStringMetadata(schema, "geo");
7215
- return geoMetadata;
7216
- }
7217
- function setGeoMetadata(schema, geoMetadata) {
7218
- const stringifiedGeoMetadata = JSON.stringify(geoMetadata);
7219
- schema.metadata.geo = stringifiedGeoMetadata;
7220
- }
7221
- function unpackGeoMetadata(schema) {
7222
- const geoMetadata = getGeoMetadata(schema);
7223
- if (!geoMetadata) {
7224
- return;
7225
- }
7226
- const { version, primary_column, columns } = geoMetadata;
7227
- if (version) {
7228
- schema.metadata["geo.version"] = version;
7229
- }
7230
- if (primary_column) {
7231
- schema.metadata["geo.primary_column"] = primary_column;
7232
- }
7233
- schema.metadata["geo.columns"] = Object.keys(columns || {}).join("");
7234
- for (const [columnName, columnMetadata] of Object.entries(columns || {})) {
7235
- const field = schema.fields.find((field2) => field2.name === columnName);
7236
- if (field) {
7237
- if (field.name === primary_column) {
7238
- setFieldMetadata(field, "geo.primary_field", "true");
7239
- }
7240
- unpackGeoFieldMetadata(field, columnMetadata);
7241
- }
7242
- }
7243
- }
7244
- function unpackGeoFieldMetadata(field, columnMetadata) {
7245
- for (const [key, value] of Object.entries(columnMetadata || {})) {
7246
- switch (key) {
7247
- case "geometry_type":
7248
- setFieldMetadata(field, `geo.${key}`, value.join(","));
7249
- break;
7250
- case "bbox":
7251
- setFieldMetadata(field, `geo.crs.${key}`, JSON.stringify(value));
7252
- break;
7253
- case "crs":
7254
- for (const [crsKey, crsValue] of Object.entries(value || {})) {
7255
- switch (crsKey) {
7256
- case "id":
7257
- const crsId = typeof crsValue === "object" ? (
7258
- // @ts-ignore
7259
- `${crsValue == null ? void 0 : crsValue.authority}:${crsValue == null ? void 0 : crsValue.code}`
7260
- ) : JSON.stringify(crsValue);
7261
- setFieldMetadata(field, `geo.crs.${crsKey}`, crsId);
7262
- break;
7263
- default:
7264
- setFieldMetadata(
7265
- field,
7266
- `geo.crs.${crsKey}`,
7267
- typeof crsValue === "string" ? crsValue : JSON.stringify(crsValue)
7268
- );
7269
- break;
7270
- }
7271
- }
7272
- break;
7273
- case "edges":
7274
- default:
7275
- setFieldMetadata(
7276
- field,
7277
- `geo.${key}`,
7278
- typeof value === "string" ? value : JSON.stringify(value)
7279
- );
7280
- }
7281
- }
7282
- }
7283
- function setFieldMetadata(field, key, value) {
7284
- field.metadata = field.metadata || {};
7285
- field.metadata[key] = value;
7286
- }
7287
-
7288
7189
  // src/lib/parsers/get-parquet-schema.ts
7190
+ var import_gis = require("@loaders.gl/gis");
7289
7191
  async function getSchemaFromParquetReader(reader) {
7290
7192
  const parquetSchema = await reader.getSchema();
7291
7193
  const parquetMetadata = await reader.getFileMetadata();
7292
7194
  const schema = convertParquetSchema(parquetSchema, parquetMetadata);
7293
- unpackGeoMetadata(schema);
7294
- unpackJSONStringMetadata(schema, "pandas");
7195
+ (0, import_gis.unpackGeoMetadata)(schema);
7196
+ (0, import_gis.unpackJSONStringMetadata)(schema, "pandas");
7295
7197
  return schema;
7296
7198
  }
7297
7199
 
7298
- // src/lib/geo/decode-geo-column.ts
7299
- var import_schema2 = require("@loaders.gl/schema");
7300
- var import_wkt = require("@loaders.gl/wkt");
7301
- function convertWKBTableToGeoJSON(table, schema) {
7302
- const geoMetadata = getGeoMetadata(schema);
7303
- const primaryColumn = geoMetadata == null ? void 0 : geoMetadata.primary_column;
7304
- if (!primaryColumn) {
7305
- throw new Error("no geometry column");
7306
- }
7307
- const columnMetadata = geoMetadata.columns[primaryColumn];
7308
- const features = [];
7309
- const length = (0, import_schema2.getTableLength)(table);
7310
- for (let rowIndex = 0; rowIndex < length; rowIndex++) {
7311
- const row = (0, import_schema2.getTableRowAsObject)(table, rowIndex);
7312
- const geometry = parseGeometry(row[primaryColumn], columnMetadata);
7313
- delete row[primaryColumn];
7314
- const feature = { type: "Feature", geometry, properties: row };
7315
- features.push(feature);
7316
- }
7317
- return { shape: "geojson-table", schema, type: "FeatureCollection", features };
7318
- }
7319
- function parseGeometry(geometry, columnMetadata) {
7320
- var _a, _b, _c, _d;
7321
- switch (columnMetadata.encoding) {
7322
- case "wkt":
7323
- return ((_b = (_a = import_wkt.WKTLoader).parseTextSync) == null ? void 0 : _b.call(_a, geometry)) || null;
7324
- case "wkb":
7325
- default:
7326
- const arrayBuffer = ArrayBuffer.isView(geometry) ? geometry.buffer.slice(geometry.byteOffset, geometry.byteOffset + geometry.byteLength) : geometry;
7327
- const geojson = (_d = (_c = import_wkt.WKBLoader).parseSync) == null ? void 0 : _d.call(_c, arrayBuffer, {
7328
- wkb: { shape: "geometry" }
7329
- });
7330
- return geojson;
7331
- }
7332
- }
7333
-
7334
7200
  // src/lib/parsers/parse-parquet-to-rows.ts
7335
7201
  async function parseParquet(arrayBuffer, options) {
7336
7202
  var _a, _b;
@@ -7359,7 +7225,7 @@ async function parseParquet(arrayBuffer, options) {
7359
7225
  return objectRowTable;
7360
7226
  case "geojson-table":
7361
7227
  try {
7362
- return convertWKBTableToGeoJSON(objectRowTable, schema);
7228
+ return (0, import_gis2.convertWKBTableToGeoJSON)(objectRowTable, schema, [import_wkt.WKTLoader, import_wkt.WKBLoader]);
7363
7229
  } catch (error) {
7364
7230
  return objectRowTable;
7365
7231
  }
@@ -7810,68 +7676,6 @@ function encodeFooter(schema, rowCount, rowGroups, userMetadata) {
7810
7676
  return footerEncoded;
7811
7677
  }
7812
7678
 
7813
- // src/lib/geo/geoparquet-metadata-schema.ts
7814
- var GEOPARQUET_METADATA_JSON_SCHEMA = {
7815
- $schema: "http://json-schema.org/draft-07/schema#",
7816
- title: "GeoParquet",
7817
- description: "Parquet metadata included in the geo field.",
7818
- type: "object",
7819
- required: ["version", "primary_column", "columns"],
7820
- properties: {
7821
- version: { type: "string", const: "1.0.0-beta.1" },
7822
- primary_column: { type: "string", minLength: 1 },
7823
- columns: {
7824
- type: "object",
7825
- minProperties: 1,
7826
- patternProperties: {
7827
- ".+": {
7828
- type: "object",
7829
- required: ["encoding", "geometry_types"],
7830
- properties: {
7831
- encoding: { type: "string", const: "WKB" },
7832
- geometry_types: {
7833
- type: "array",
7834
- uniqueItems: true,
7835
- items: {
7836
- type: "string",
7837
- pattern: "^(GeometryCollection|(Multi)?(Point|LineString|Polygon))( Z)?$"
7838
- }
7839
- },
7840
- crs: {
7841
- oneOf: [
7842
- {
7843
- $ref: "https://proj.org/schemas/v0.5/projjson.schema.json"
7844
- },
7845
- { type: "null" }
7846
- ]
7847
- },
7848
- edges: { type: "string", enum: ["planar", "spherical"] },
7849
- orientation: { type: "string", const: "counterclockwise" },
7850
- bbox: {
7851
- type: "array",
7852
- items: { type: "number" },
7853
- oneOf: [
7854
- {
7855
- description: "2D bbox consisting of (xmin, ymin, xmax, ymax)",
7856
- minItems: 4,
7857
- maxItems: 4
7858
- },
7859
- {
7860
- description: "3D bbox consisting of (xmin, ymin, zmin, xmax, ymax, zmax)",
7861
- minItems: 6,
7862
- maxItems: 6
7863
- }
7864
- ]
7865
- },
7866
- epoch: { type: "number" }
7867
- }
7868
- }
7869
- },
7870
- additionalProperties: false
7871
- }
7872
- }
7873
- };
7874
-
7875
7679
  // src/index.ts
7876
7680
  var ParquetLoader2 = {
7877
7681
  ...ParquetLoader,
package/dist/index.d.ts CHANGED
@@ -13,8 +13,5 @@ export { ParquetSchema } from './parquetjs/schema/schema';
13
13
  export { ParquetReader } from './parquetjs/parser/parquet-reader';
14
14
  export { ParquetEncoder } from './parquetjs/encoder/parquet-encoder';
15
15
  export { convertParquetSchema, convertParquetSchema as convertParquetToArrowSchema } from './lib/arrow/convert-schema-from-parquet';
16
- export { GEOPARQUET_METADATA_JSON_SCHEMA } from './lib/geo/geoparquet-metadata-schema';
17
- export type { GeoMetadata } from './lib/geo/decode-geo-metadata';
18
- export { getGeoMetadata, setGeoMetadata, unpackGeoMetadata } from './lib/geo/decode-geo-metadata';
19
16
  export { BufferPolyfill, installBufferPolyfill } from './buffer-polyfill';
20
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,MAAM,EAAC,MAAM,2CAA2C,CAAC;AAEjE,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EACL,aAAa,IAAI,mBAAmB,EAEpC,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AAW1B,OAAO,EAAC,mBAAmB,EAAC,CAAC;AAG7B,6BAA6B;AAC7B,eAAO,MAAM,aAAa,EAAE,gBAAgB,CAC1C,cAAc,GAAG,YAAY,EAC7B,mBAAmB,GAAG,iBAAiB,EACvC,oBAAoB,CAMrB,CAAC;AAEF,6BAA6B;AAC7B,eAAO,MAAM,qBAAqB,EAAE,gBAAgB,CAClD,aAAa,EACb,kBAAkB,EAClB,oBAAoB,CAMrB,CAAC;AAcF,OAAO,EAAC,aAAa,IAAI,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAKjE,OAAO,EAAC,mBAAmB,EAAC,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAC,aAAa,EAAC,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAC,aAAa,EAAC,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAC,cAAc,EAAC,MAAM,qCAAqC,CAAC;AAEnE,OAAO,EACL,oBAAoB,EACpB,oBAAoB,IAAI,2BAA2B,EACpD,MAAM,yCAAyC,CAAC;AAKjD,OAAO,EAAC,+BAA+B,EAAC,MAAM,sCAAsC,CAAC;AAErF,YAAY,EAAC,WAAW,EAAC,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAC,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAC,MAAM,+BAA+B,CAAC;AAGhG,OAAO,EAAC,cAAc,EAAE,qBAAqB,EAAC,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,MAAM,EAAC,MAAM,2CAA2C,CAAC;AAEjE,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EACL,aAAa,IAAI,mBAAmB,EAEpC,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AAW1B,OAAO,EAAC,mBAAmB,EAAC,CAAC;AAG7B,6BAA6B;AAC7B,eAAO,MAAM,aAAa,EAAE,gBAAgB,CAC1C,cAAc,GAAG,YAAY,EAC7B,mBAAmB,GAAG,iBAAiB,EACvC,oBAAoB,CAMrB,CAAC;AAEF,6BAA6B;AAC7B,eAAO,MAAM,qBAAqB,EAAE,gBAAgB,CAClD,aAAa,EACb,kBAAkB,EAClB,oBAAoB,CAMrB,CAAC;AAcF,OAAO,EAAC,aAAa,IAAI,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAKjE,OAAO,EAAC,mBAAmB,EAAC,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAC,aAAa,EAAC,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAC,aAAa,EAAC,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAC,cAAc,EAAC,MAAM,qCAAqC,CAAC;AAEnE,OAAO,EACL,oBAAoB,EACpB,oBAAoB,IAAI,2BAA2B,EACpD,MAAM,yCAAyC,CAAC;AAGjD,OAAO,EAAC,cAAc,EAAE,qBAAqB,EAAC,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -19,7 +19,5 @@ export { ParquetSchema } from "./parquetjs/schema/schema.js";
19
19
  export { ParquetReader } from "./parquetjs/parser/parquet-reader.js";
20
20
  export { ParquetEncoder } from "./parquetjs/encoder/parquet-encoder.js";
21
21
  export { convertParquetSchema, convertParquetSchema as convertParquetToArrowSchema } from "./lib/arrow/convert-schema-from-parquet.js";
22
- export { GEOPARQUET_METADATA_JSON_SCHEMA } from "./lib/geo/geoparquet-metadata-schema.js";
23
- export { getGeoMetadata, setGeoMetadata, unpackGeoMetadata } from "./lib/geo/decode-geo-metadata.js";
24
22
  export { BufferPolyfill, installBufferPolyfill } from "./buffer-polyfill/index.js";
25
23
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Buffer","ParquetLoader","ParquetWorkerLoader","ParquetColumnarWorkerLoader","parseParquet","parseParquetFileInBatches","parseParquetInColumns","parseParquetFileInColumnarBatches","parse","parseFileInBatches","ParquetColumnarLoader","ParquetWriter","_ParquetWriter","preloadCompressions","ParquetSchema","ParquetReader","ParquetEncoder","convertParquetSchema","convertParquetToArrowSchema","GEOPARQUET_METADATA_JSON_SCHEMA","getGeoMetadata","setGeoMetadata","unpackGeoMetadata","BufferPolyfill","installBufferPolyfill"],"sources":["../src/index.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nexport {Buffer} from './buffer-polyfill/install-buffer-polyfill';\n\nimport type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {\n ObjectRowTable,\n ObjectRowTableBatch,\n ColumnarTable,\n ColumnarTableBatch,\n GeoJSONTable,\n GeoJSONTableBatch\n} from '@loaders.gl/schema';\n// import type {Table as ApacheArrowTable} from 'apache-arrow';\n\n// ParquetLoader\n\nimport {\n ParquetLoader as ParquetWorkerLoader,\n ParquetLoader as ParquetColumnarWorkerLoader,\n ParquetLoaderOptions\n} from './parquet-loader';\nimport {parseParquet, parseParquetFileInBatches} from './lib/parsers/parse-parquet-to-rows';\nimport {\n parseParquetInColumns,\n parseParquetFileInColumnarBatches\n} from './lib/parsers/parse-parquet-to-columns';\n\n// import type {ParquetWasmLoaderOptions} from './lib/wasm/parse-parquet-wasm';\n// import {parseParquetWasm} from './lib/wasm/parse-parquet-wasm';\n// import {ParquetWasmLoader as ParquetWasmWorkerLoader} from './parquet-wasm-loader';\n\nexport {ParquetWorkerLoader};\n// export {ParquetWasmWorkerLoader};\n\n/** ParquetJS table loader */\nexport const ParquetLoader: LoaderWithParser<\n ObjectRowTable | GeoJSONTable,\n ObjectRowTableBatch | GeoJSONTableBatch,\n ParquetLoaderOptions\n> = {\n ...ParquetWorkerLoader,\n parse: parseParquet,\n // @ts-expect-error\n parseFileInBatches: parseParquetFileInBatches\n};\n\n/** ParquetJS table loader */\nexport const ParquetColumnarLoader: LoaderWithParser<\n ColumnarTable,\n ColumnarTableBatch,\n ParquetLoaderOptions\n> = {\n ...ParquetColumnarWorkerLoader,\n parse: parseParquetInColumns,\n // @ts-expect-error\n parseFileInBatches: parseParquetFileInColumnarBatches\n};\n\n// export const ParquetWasmLoader: LoaderWithParser<\n// ApacheArrowTable,\n// never,\n// ParquetWasmLoaderOptions\n// > = {\n// ...ParquetWasmWorkerLoader,\n// // @ts-expect-error Getting strange errors in wasm\n// parse: () => {} // parseParquetWasm\n// };\n\n// ParquetWriter\n\nexport {ParquetWriter as _ParquetWriter} from './parquet-writer';\n// export {ParquetWasmWriter} from './parquet-wasm-writer';\n\n// EXPERIMENTAL - expose the internal parquetjs API\n\nexport {preloadCompressions} from './parquetjs/compression';\n\nexport {ParquetSchema} from './parquetjs/schema/schema';\nexport {ParquetReader} from './parquetjs/parser/parquet-reader';\nexport {ParquetEncoder} from './parquetjs/encoder/parquet-encoder';\n\nexport {\n convertParquetSchema,\n convertParquetSchema as convertParquetToArrowSchema\n} from './lib/arrow/convert-schema-from-parquet';\n\n// Geo Metadata\n// import {default as GEOPARQUET_METADATA_SCHEMA} from './lib/geo/geoparquet-metadata-schema.json';\n// export {GEOPARQUET_METADATA_SCHEMA};\nexport {GEOPARQUET_METADATA_JSON_SCHEMA} from './lib/geo/geoparquet-metadata-schema';\n\nexport type {GeoMetadata} from './lib/geo/decode-geo-metadata';\nexport {getGeoMetadata, setGeoMetadata, unpackGeoMetadata} from './lib/geo/decode-geo-metadata';\n\n// Experimental\nexport {BufferPolyfill, installBufferPolyfill} from './buffer-polyfill';\n"],"mappings":"SAGQA,MAAM;AAAA,SAgBZC,aAAa,IAAIC,mBAAmB,EACpCD,aAAa,IAAIE,2BAA2B;AAAA,SAGtCC,YAAY,EAAEC,yBAAyB;AAAA,SAE7CC,qBAAqB,EACrBC,iCAAiC;AAOnC,SAAQL,mBAAmB;AAI3B,OAAO,MAAMD,aAIZ,GAAG;EACF,GAAGC,mBAAmB;EACtBM,KAAK,EAAEJ,YAAY;EAEnBK,kBAAkB,EAAEJ;AACtB,CAAC;AAGD,OAAO,MAAMK,qBAIZ,GAAG;EACF,GAAGP,2BAA2B;EAC9BK,KAAK,EAAEF,qBAAqB;EAE5BG,kBAAkB,EAAEF;AACtB,CAAC;AAAC,SAcMI,aAAa,IAAIC,cAAc;AAAA,SAK/BC,mBAAmB;AAAA,SAEnBC,aAAa;AAAA,SACbC,aAAa;AAAA,SACbC,cAAc;AAAA,SAGpBC,oBAAoB,EACpBA,oBAAoB,IAAIC,2BAA2B;AAAA,SAM7CC,+BAA+B;AAAA,SAG/BC,cAAc,EAAEC,cAAc,EAAEC,iBAAiB;AAAA,SAGjDC,cAAc,EAAEC,qBAAqB"}
1
+ {"version":3,"file":"index.js","names":["Buffer","ParquetLoader","ParquetWorkerLoader","ParquetColumnarWorkerLoader","parseParquet","parseParquetFileInBatches","parseParquetInColumns","parseParquetFileInColumnarBatches","parse","parseFileInBatches","ParquetColumnarLoader","ParquetWriter","_ParquetWriter","preloadCompressions","ParquetSchema","ParquetReader","ParquetEncoder","convertParquetSchema","convertParquetToArrowSchema","BufferPolyfill","installBufferPolyfill"],"sources":["../src/index.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nexport {Buffer} from './buffer-polyfill/install-buffer-polyfill';\n\nimport type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {\n ObjectRowTable,\n ObjectRowTableBatch,\n ColumnarTable,\n ColumnarTableBatch,\n GeoJSONTable,\n GeoJSONTableBatch\n} from '@loaders.gl/schema';\n// import type {Table as ApacheArrowTable} from 'apache-arrow';\n\n// ParquetLoader\n\nimport {\n ParquetLoader as ParquetWorkerLoader,\n ParquetLoader as ParquetColumnarWorkerLoader,\n ParquetLoaderOptions\n} from './parquet-loader';\nimport {parseParquet, parseParquetFileInBatches} from './lib/parsers/parse-parquet-to-rows';\nimport {\n parseParquetInColumns,\n parseParquetFileInColumnarBatches\n} from './lib/parsers/parse-parquet-to-columns';\n\n// import type {ParquetWasmLoaderOptions} from './lib/wasm/parse-parquet-wasm';\n// import {parseParquetWasm} from './lib/wasm/parse-parquet-wasm';\n// import {ParquetWasmLoader as ParquetWasmWorkerLoader} from './parquet-wasm-loader';\n\nexport {ParquetWorkerLoader};\n// export {ParquetWasmWorkerLoader};\n\n/** ParquetJS table loader */\nexport const ParquetLoader: LoaderWithParser<\n ObjectRowTable | GeoJSONTable,\n ObjectRowTableBatch | GeoJSONTableBatch,\n ParquetLoaderOptions\n> = {\n ...ParquetWorkerLoader,\n parse: parseParquet,\n // @ts-expect-error\n parseFileInBatches: parseParquetFileInBatches\n};\n\n/** ParquetJS table loader */\nexport const ParquetColumnarLoader: LoaderWithParser<\n ColumnarTable,\n ColumnarTableBatch,\n ParquetLoaderOptions\n> = {\n ...ParquetColumnarWorkerLoader,\n parse: parseParquetInColumns,\n // @ts-expect-error\n parseFileInBatches: parseParquetFileInColumnarBatches\n};\n\n// export const ParquetWasmLoader: LoaderWithParser<\n// ApacheArrowTable,\n// never,\n// ParquetWasmLoaderOptions\n// > = {\n// ...ParquetWasmWorkerLoader,\n// // @ts-expect-error Getting strange errors in wasm\n// parse: () => {} // parseParquetWasm\n// };\n\n// ParquetWriter\n\nexport {ParquetWriter as _ParquetWriter} from './parquet-writer';\n// export {ParquetWasmWriter} from './parquet-wasm-writer';\n\n// EXPERIMENTAL - expose the internal parquetjs API\n\nexport {preloadCompressions} from './parquetjs/compression';\n\nexport {ParquetSchema} from './parquetjs/schema/schema';\nexport {ParquetReader} from './parquetjs/parser/parquet-reader';\nexport {ParquetEncoder} from './parquetjs/encoder/parquet-encoder';\n\nexport {\n convertParquetSchema,\n convertParquetSchema as convertParquetToArrowSchema\n} from './lib/arrow/convert-schema-from-parquet';\n\n// Experimental\nexport {BufferPolyfill, installBufferPolyfill} from './buffer-polyfill';\n"],"mappings":"SAGQA,MAAM;AAAA,SAgBZC,aAAa,IAAIC,mBAAmB,EACpCD,aAAa,IAAIE,2BAA2B;AAAA,SAGtCC,YAAY,EAAEC,yBAAyB;AAAA,SAE7CC,qBAAqB,EACrBC,iCAAiC;AAOnC,SAAQL,mBAAmB;AAI3B,OAAO,MAAMD,aAIZ,GAAG;EACF,GAAGC,mBAAmB;EACtBM,KAAK,EAAEJ,YAAY;EAEnBK,kBAAkB,EAAEJ;AACtB,CAAC;AAGD,OAAO,MAAMK,qBAIZ,GAAG;EACF,GAAGP,2BAA2B;EAC9BK,KAAK,EAAEF,qBAAqB;EAE5BG,kBAAkB,EAAEF;AACtB,CAAC;AAAC,SAcMI,aAAa,IAAIC,cAAc;AAAA,SAK/BC,mBAAmB;AAAA,SAEnBC,aAAa;AAAA,SACbC,aAAa;AAAA,SACbC,cAAc;AAAA,SAGpBC,oBAAoB,EACpBA,oBAAoB,IAAIC,2BAA2B;AAAA,SAI7CC,cAAc,EAAEC,qBAAqB"}
@@ -1,5 +1,5 @@
1
1
  import { convertParquetSchema } from "../arrow/convert-schema-from-parquet.js";
2
- import { unpackGeoMetadata, unpackJSONStringMetadata } from "../geo/decode-geo-metadata.js";
2
+ import { unpackGeoMetadata, unpackJSONStringMetadata } from '@loaders.gl/gis';
3
3
  export async function getSchemaFromParquetReader(reader) {
4
4
  const parquetSchema = await reader.getSchema();
5
5
  const parquetMetadata = await reader.getFileMetadata();
@@ -1 +1 @@
1
- {"version":3,"file":"get-parquet-schema.js","names":["convertParquetSchema","unpackGeoMetadata","unpackJSONStringMetadata","getSchemaFromParquetReader","reader","parquetSchema","getSchema","parquetMetadata","getFileMetadata","schema"],"sources":["../../../src/lib/parsers/get-parquet-schema.ts"],"sourcesContent":["// loaders.gl\nimport {Schema} from '@loaders.gl/schema';\nimport {ParquetReader} from '../../parquetjs/parser/parquet-reader';\nimport {convertParquetSchema} from '../arrow/convert-schema-from-parquet';\nimport {unpackGeoMetadata, unpackJSONStringMetadata} from '../geo/decode-geo-metadata';\n\nexport async function getSchemaFromParquetReader(reader: ParquetReader): Promise<Schema> {\n const parquetSchema = await reader.getSchema();\n const parquetMetadata = await reader.getFileMetadata();\n const schema = convertParquetSchema(parquetSchema, parquetMetadata);\n unpackGeoMetadata(schema);\n unpackJSONStringMetadata(schema, 'pandas');\n return schema;\n}\n"],"mappings":"SAGQA,oBAAoB;AAAA,SACpBC,iBAAiB,EAAEC,wBAAwB;AAEnD,OAAO,eAAeC,0BAA0BA,CAACC,MAAqB,EAAmB;EACvF,MAAMC,aAAa,GAAG,MAAMD,MAAM,CAACE,SAAS,CAAC,CAAC;EAC9C,MAAMC,eAAe,GAAG,MAAMH,MAAM,CAACI,eAAe,CAAC,CAAC;EACtD,MAAMC,MAAM,GAAGT,oBAAoB,CAACK,aAAa,EAAEE,eAAe,CAAC;EACnEN,iBAAiB,CAACQ,MAAM,CAAC;EACzBP,wBAAwB,CAACO,MAAM,EAAE,QAAQ,CAAC;EAC1C,OAAOA,MAAM;AACf"}
1
+ {"version":3,"file":"get-parquet-schema.js","names":["convertParquetSchema","unpackGeoMetadata","unpackJSONStringMetadata","getSchemaFromParquetReader","reader","parquetSchema","getSchema","parquetMetadata","getFileMetadata","schema"],"sources":["../../../src/lib/parsers/get-parquet-schema.ts"],"sourcesContent":["// loaders.gl\nimport {Schema} from '@loaders.gl/schema';\nimport {ParquetReader} from '../../parquetjs/parser/parquet-reader';\nimport {convertParquetSchema} from '../arrow/convert-schema-from-parquet';\nimport {unpackGeoMetadata, unpackJSONStringMetadata} from '@loaders.gl/gis';\n\nexport async function getSchemaFromParquetReader(reader: ParquetReader): Promise<Schema> {\n const parquetSchema = await reader.getSchema();\n const parquetMetadata = await reader.getFileMetadata();\n const schema = convertParquetSchema(parquetSchema, parquetMetadata);\n unpackGeoMetadata(schema);\n unpackJSONStringMetadata(schema, 'pandas');\n return schema;\n}\n"],"mappings":"SAGQA,oBAAoB;AAC5B,SAAQC,iBAAiB,EAAEC,wBAAwB,QAAO,iBAAiB;AAE3E,OAAO,eAAeC,0BAA0BA,CAACC,MAAqB,EAAmB;EACvF,MAAMC,aAAa,GAAG,MAAMD,MAAM,CAACE,SAAS,CAAC,CAAC;EAC9C,MAAMC,eAAe,GAAG,MAAMH,MAAM,CAACI,eAAe,CAAC,CAAC;EACtD,MAAMC,MAAM,GAAGT,oBAAoB,CAACK,aAAa,EAAEE,eAAe,CAAC;EACnEN,iBAAiB,CAACQ,MAAM,CAAC;EACzBP,wBAAwB,CAACO,MAAM,EAAE,QAAQ,CAAC;EAC1C,OAAOA,MAAM;AACf"}
@@ -1 +1 @@
1
- {"version":3,"file":"parse-parquet-to-rows.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-parquet-to-rows.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAC,MAAM,oBAAoB,CAAC;AACrF,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAC,aAAa,EAAC,MAAM,uCAAuC,CAAC;AAKpE,wBAAsB,YAAY,CAChC,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,cAAc,GAAG,YAAY,CAAC,CAyCxC;AAED,wBAAuB,yBAAyB,CAC9C,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,aAAa,CAAC,mBAAmB,CAAC,CAYpC"}
1
+ {"version":3,"file":"parse-parquet-to-rows.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-parquet-to-rows.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAC,MAAM,oBAAoB,CAAC;AAIrF,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAC,aAAa,EAAC,MAAM,uCAAuC,CAAC;AAIpE,wBAAsB,YAAY,CAChC,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,cAAc,GAAG,YAAY,CAAC,CAyCxC;AAED,wBAAuB,yBAAyB,CAC9C,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,aAAa,CAAC,mBAAmB,CAAC,CAYpC"}
@@ -1,8 +1,9 @@
1
1
  import { BlobFile } from '@loaders.gl/loader-utils';
2
+ import { convertWKBTableToGeoJSON } from '@loaders.gl/gis';
3
+ import { WKTLoader, WKBLoader } from '@loaders.gl/wkt';
2
4
  import { ParquetReader } from "../../parquetjs/parser/parquet-reader.js";
3
5
  import { getSchemaFromParquetReader } from "./get-parquet-schema.js";
4
6
  import { installBufferPolyfill } from "../../buffer-polyfill/index.js";
5
- import { convertWKBTableToGeoJSON } from "../geo/decode-geo-column.js";
6
7
  export async function parseParquet(arrayBuffer, options) {
7
8
  var _options$parquet, _options$parquet2;
8
9
  installBufferPolyfill();
@@ -30,7 +31,7 @@ export async function parseParquet(arrayBuffer, options) {
30
31
  return objectRowTable;
31
32
  case 'geojson-table':
32
33
  try {
33
- return convertWKBTableToGeoJSON(objectRowTable, schema);
34
+ return convertWKBTableToGeoJSON(objectRowTable, schema, [WKTLoader, WKBLoader]);
34
35
  } catch (error) {
35
36
  return objectRowTable;
36
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parse-parquet-to-rows.js","names":["BlobFile","ParquetReader","getSchemaFromParquetReader","installBufferPolyfill","convertWKBTableToGeoJSON","parseParquet","arrayBuffer","options","_options$parquet","_options$parquet2","blob","Blob","file","reader","preserveBinary","parquet","schema","rows","rowBatches","rowBatchIterator","rowBatch","row","push","objectRowTable","shape","data","error","Error","parseParquetFileInBatches","batchType","length"],"sources":["../../../src/lib/parsers/parse-parquet-to-rows.ts"],"sourcesContent":["// import type {LoaderWithParser, Loader, LoaderOptions} from '@loaders.gl/loader-utils';\n// import {ColumnarTableBatch} from '@loaders.gl/schema';\nimport {BlobFile} from '@loaders.gl/loader-utils';\nimport {GeoJSONTable, ObjectRowTable, ObjectRowTableBatch} from '@loaders.gl/schema';\nimport type {ParquetLoaderOptions} from '../../parquet-loader';\nimport type {ParquetRow} from '../../parquetjs/schema/declare';\nimport {ParquetReader} from '../../parquetjs/parser/parquet-reader';\nimport {getSchemaFromParquetReader} from './get-parquet-schema';\nimport {installBufferPolyfill} from '../../buffer-polyfill';\nimport {convertWKBTableToGeoJSON} from '../geo/decode-geo-column';\n\nexport async function parseParquet(\n arrayBuffer: ArrayBuffer,\n options?: ParquetLoaderOptions\n): Promise<ObjectRowTable | GeoJSONTable> {\n installBufferPolyfill();\n\n const blob = new Blob([arrayBuffer]);\n const file = new BlobFile(blob);\n const reader = new ParquetReader(file, {\n preserveBinary: options?.parquet?.preserveBinary\n });\n\n const schema = await getSchemaFromParquetReader(reader);\n\n const rows: ParquetRow[] = [];\n\n const rowBatches = reader.rowBatchIterator(options?.parquet);\n for await (const rowBatch of rowBatches) {\n // we have only one input batch so return\n for (const row of rowBatch) {\n rows.push(row);\n }\n }\n const objectRowTable: ObjectRowTable = {\n shape: 'object-row-table',\n schema,\n data: rows\n };\n\n const shape = options?.parquet?.shape;\n switch (shape) {\n case 'object-row-table':\n return objectRowTable;\n\n case 'geojson-table':\n try {\n return convertWKBTableToGeoJSON(objectRowTable, schema);\n } catch (error) {\n return objectRowTable;\n }\n\n default:\n throw new Error(shape);\n }\n}\n\nexport async function* parseParquetFileInBatches(\n reader: ParquetReader,\n options?: ParquetLoaderOptions\n): AsyncIterable<ObjectRowTableBatch> {\n const schema = await getSchemaFromParquetReader(reader);\n const rowBatches = reader.rowBatchIterator(options?.parquet);\n for await (const rows of rowBatches) {\n yield {\n batchType: 'data',\n shape: 'object-row-table',\n schema,\n data: rows,\n length: rows.length\n };\n }\n}\n"],"mappings":"AAEA,SAAQA,QAAQ,QAAO,0BAA0B;AAAC,SAI1CC,aAAa;AAAA,SACbC,0BAA0B;AAAA,SAC1BC,qBAAqB;AAAA,SACrBC,wBAAwB;AAEhC,OAAO,eAAeC,YAAYA,CAChCC,WAAwB,EACxBC,OAA8B,EACU;EAAA,IAAAC,gBAAA,EAAAC,iBAAA;EACxCN,qBAAqB,CAAC,CAAC;EAEvB,MAAMO,IAAI,GAAG,IAAIC,IAAI,CAAC,CAACL,WAAW,CAAC,CAAC;EACpC,MAAMM,IAAI,GAAG,IAAIZ,QAAQ,CAACU,IAAI,CAAC;EAC/B,MAAMG,MAAM,GAAG,IAAIZ,aAAa,CAACW,IAAI,EAAE;IACrCE,cAAc,EAAEP,OAAO,aAAPA,OAAO,wBAAAC,gBAAA,GAAPD,OAAO,CAAEQ,OAAO,cAAAP,gBAAA,uBAAhBA,gBAAA,CAAkBM;EACpC,CAAC,CAAC;EAEF,MAAME,MAAM,GAAG,MAAMd,0BAA0B,CAACW,MAAM,CAAC;EAEvD,MAAMI,IAAkB,GAAG,EAAE;EAE7B,MAAMC,UAAU,GAAGL,MAAM,CAACM,gBAAgB,CAACZ,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEQ,OAAO,CAAC;EAC5D,WAAW,MAAMK,QAAQ,IAAIF,UAAU,EAAE;IAEvC,KAAK,MAAMG,GAAG,IAAID,QAAQ,EAAE;MAC1BH,IAAI,CAACK,IAAI,CAACD,GAAG,CAAC;IAChB;EACF;EACA,MAAME,cAA8B,GAAG;IACrCC,KAAK,EAAE,kBAAkB;IACzBR,MAAM;IACNS,IAAI,EAAER;EACR,CAAC;EAED,MAAMO,KAAK,GAAGjB,OAAO,aAAPA,OAAO,wBAAAE,iBAAA,GAAPF,OAAO,CAAEQ,OAAO,cAAAN,iBAAA,uBAAhBA,iBAAA,CAAkBe,KAAK;EACrC,QAAQA,KAAK;IACX,KAAK,kBAAkB;MACrB,OAAOD,cAAc;IAEvB,KAAK,eAAe;MAClB,IAAI;QACF,OAAOnB,wBAAwB,CAACmB,cAAc,EAAEP,MAAM,CAAC;MACzD,CAAC,CAAC,OAAOU,KAAK,EAAE;QACd,OAAOH,cAAc;MACvB;IAEF;MACE,MAAM,IAAII,KAAK,CAACH,KAAK,CAAC;EAC1B;AACF;AAEA,OAAO,gBAAgBI,yBAAyBA,CAC9Cf,MAAqB,EACrBN,OAA8B,EACM;EACpC,MAAMS,MAAM,GAAG,MAAMd,0BAA0B,CAACW,MAAM,CAAC;EACvD,MAAMK,UAAU,GAAGL,MAAM,CAACM,gBAAgB,CAACZ,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEQ,OAAO,CAAC;EAC5D,WAAW,MAAME,IAAI,IAAIC,UAAU,EAAE;IACnC,MAAM;MACJW,SAAS,EAAE,MAAM;MACjBL,KAAK,EAAE,kBAAkB;MACzBR,MAAM;MACNS,IAAI,EAAER,IAAI;MACVa,MAAM,EAAEb,IAAI,CAACa;IACf,CAAC;EACH;AACF"}
1
+ {"version":3,"file":"parse-parquet-to-rows.js","names":["BlobFile","convertWKBTableToGeoJSON","WKTLoader","WKBLoader","ParquetReader","getSchemaFromParquetReader","installBufferPolyfill","parseParquet","arrayBuffer","options","_options$parquet","_options$parquet2","blob","Blob","file","reader","preserveBinary","parquet","schema","rows","rowBatches","rowBatchIterator","rowBatch","row","push","objectRowTable","shape","data","error","Error","parseParquetFileInBatches","batchType","length"],"sources":["../../../src/lib/parsers/parse-parquet-to-rows.ts"],"sourcesContent":["// import type {LoaderWithParser, Loader, LoaderOptions} from '@loaders.gl/loader-utils';\n// import {ColumnarTableBatch} from '@loaders.gl/schema';\nimport {BlobFile} from '@loaders.gl/loader-utils';\nimport {GeoJSONTable, ObjectRowTable, ObjectRowTableBatch} from '@loaders.gl/schema';\nimport {convertWKBTableToGeoJSON} from '@loaders.gl/gis';\nimport {WKTLoader, WKBLoader} from '@loaders.gl/wkt';\n\nimport type {ParquetLoaderOptions} from '../../parquet-loader';\nimport type {ParquetRow} from '../../parquetjs/schema/declare';\nimport {ParquetReader} from '../../parquetjs/parser/parquet-reader';\nimport {getSchemaFromParquetReader} from './get-parquet-schema';\nimport {installBufferPolyfill} from '../../buffer-polyfill';\n\nexport async function parseParquet(\n arrayBuffer: ArrayBuffer,\n options?: ParquetLoaderOptions\n): Promise<ObjectRowTable | GeoJSONTable> {\n installBufferPolyfill();\n\n const blob = new Blob([arrayBuffer]);\n const file = new BlobFile(blob);\n const reader = new ParquetReader(file, {\n preserveBinary: options?.parquet?.preserveBinary\n });\n\n const schema = await getSchemaFromParquetReader(reader);\n\n const rows: ParquetRow[] = [];\n\n const rowBatches = reader.rowBatchIterator(options?.parquet);\n for await (const rowBatch of rowBatches) {\n // we have only one input batch so return\n for (const row of rowBatch) {\n rows.push(row);\n }\n }\n const objectRowTable: ObjectRowTable = {\n shape: 'object-row-table',\n schema,\n data: rows\n };\n\n const shape = options?.parquet?.shape;\n switch (shape) {\n case 'object-row-table':\n return objectRowTable;\n\n case 'geojson-table':\n try {\n return convertWKBTableToGeoJSON(objectRowTable, schema, [WKTLoader, WKBLoader]);\n } catch (error) {\n return objectRowTable;\n }\n\n default:\n throw new Error(shape);\n }\n}\n\nexport async function* parseParquetFileInBatches(\n reader: ParquetReader,\n options?: ParquetLoaderOptions\n): AsyncIterable<ObjectRowTableBatch> {\n const schema = await getSchemaFromParquetReader(reader);\n const rowBatches = reader.rowBatchIterator(options?.parquet);\n for await (const rows of rowBatches) {\n yield {\n batchType: 'data',\n shape: 'object-row-table',\n schema,\n data: rows,\n length: rows.length\n };\n }\n}\n"],"mappings":"AAEA,SAAQA,QAAQ,QAAO,0BAA0B;AAEjD,SAAQC,wBAAwB,QAAO,iBAAiB;AACxD,SAAQC,SAAS,EAAEC,SAAS,QAAO,iBAAiB;AAAC,SAI7CC,aAAa;AAAA,SACbC,0BAA0B;AAAA,SAC1BC,qBAAqB;AAE7B,OAAO,eAAeC,YAAYA,CAChCC,WAAwB,EACxBC,OAA8B,EACU;EAAA,IAAAC,gBAAA,EAAAC,iBAAA;EACxCL,qBAAqB,CAAC,CAAC;EAEvB,MAAMM,IAAI,GAAG,IAAIC,IAAI,CAAC,CAACL,WAAW,CAAC,CAAC;EACpC,MAAMM,IAAI,GAAG,IAAId,QAAQ,CAACY,IAAI,CAAC;EAC/B,MAAMG,MAAM,GAAG,IAAIX,aAAa,CAACU,IAAI,EAAE;IACrCE,cAAc,EAAEP,OAAO,aAAPA,OAAO,wBAAAC,gBAAA,GAAPD,OAAO,CAAEQ,OAAO,cAAAP,gBAAA,uBAAhBA,gBAAA,CAAkBM;EACpC,CAAC,CAAC;EAEF,MAAME,MAAM,GAAG,MAAMb,0BAA0B,CAACU,MAAM,CAAC;EAEvD,MAAMI,IAAkB,GAAG,EAAE;EAE7B,MAAMC,UAAU,GAAGL,MAAM,CAACM,gBAAgB,CAACZ,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEQ,OAAO,CAAC;EAC5D,WAAW,MAAMK,QAAQ,IAAIF,UAAU,EAAE;IAEvC,KAAK,MAAMG,GAAG,IAAID,QAAQ,EAAE;MAC1BH,IAAI,CAACK,IAAI,CAACD,GAAG,CAAC;IAChB;EACF;EACA,MAAME,cAA8B,GAAG;IACrCC,KAAK,EAAE,kBAAkB;IACzBR,MAAM;IACNS,IAAI,EAAER;EACR,CAAC;EAED,MAAMO,KAAK,GAAGjB,OAAO,aAAPA,OAAO,wBAAAE,iBAAA,GAAPF,OAAO,CAAEQ,OAAO,cAAAN,iBAAA,uBAAhBA,iBAAA,CAAkBe,KAAK;EACrC,QAAQA,KAAK;IACX,KAAK,kBAAkB;MACrB,OAAOD,cAAc;IAEvB,KAAK,eAAe;MAClB,IAAI;QACF,OAAOxB,wBAAwB,CAACwB,cAAc,EAAEP,MAAM,EAAE,CAAChB,SAAS,EAAEC,SAAS,CAAC,CAAC;MACjF,CAAC,CAAC,OAAOyB,KAAK,EAAE;QACd,OAAOH,cAAc;MACvB;IAEF;MACE,MAAM,IAAII,KAAK,CAACH,KAAK,CAAC;EAC1B;AACF;AAEA,OAAO,gBAAgBI,yBAAyBA,CAC9Cf,MAAqB,EACrBN,OAA8B,EACM;EACpC,MAAMS,MAAM,GAAG,MAAMb,0BAA0B,CAACU,MAAM,CAAC;EACvD,MAAMK,UAAU,GAAGL,MAAM,CAACM,gBAAgB,CAACZ,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEQ,OAAO,CAAC;EAC5D,WAAW,MAAME,IAAI,IAAIC,UAAU,EAAE;IACnC,MAAM;MACJW,SAAS,EAAE,MAAM;MACjBL,KAAK,EAAE,kBAAkB;MACzBR,MAAM;MACNS,IAAI,EAAER,IAAI;MACVa,MAAM,EAAEb,IAAI,CAACa;IACf,CAAC;EACH;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/parquet",
3
- "version": "4.0.0",
3
+ "version": "4.0.1",
4
4
  "description": "Framework-independent loader for Apache Parquet files",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -57,12 +57,12 @@
57
57
  "base64-js and ieee754 are used by buffer polyfill"
58
58
  ],
59
59
  "dependencies": {
60
- "@loaders.gl/bson": "4.0.0",
61
- "@loaders.gl/compression": "4.0.0",
62
- "@loaders.gl/gis": "4.0.0",
63
- "@loaders.gl/loader-utils": "4.0.0",
64
- "@loaders.gl/schema": "4.0.0",
65
- "@loaders.gl/wkt": "4.0.0",
60
+ "@loaders.gl/bson": "4.0.1",
61
+ "@loaders.gl/compression": "4.0.1",
62
+ "@loaders.gl/gis": "4.0.1",
63
+ "@loaders.gl/loader-utils": "4.0.1",
64
+ "@loaders.gl/schema": "4.0.1",
65
+ "@loaders.gl/wkt": "4.0.1",
66
66
  "async-mutex": "^0.2.2",
67
67
  "base64-js": "^1.3.1",
68
68
  "brotli": "^1.3.2",
@@ -88,5 +88,5 @@
88
88
  "@types/varint": "^5.0.0",
89
89
  "apache-arrow": "^13.0.0"
90
90
  },
91
- "gitHead": "9b4211dc0ecd4134a1638ac0a29c5ea9008fd971"
91
+ "gitHead": "765e5a26a6bf3f2cc02cabffc4a1e3665ec92a53"
92
92
  }
package/src/index.ts CHANGED
@@ -86,13 +86,5 @@ export {
86
86
  convertParquetSchema as convertParquetToArrowSchema
87
87
  } from './lib/arrow/convert-schema-from-parquet';
88
88
 
89
- // Geo Metadata
90
- // import {default as GEOPARQUET_METADATA_SCHEMA} from './lib/geo/geoparquet-metadata-schema.json';
91
- // export {GEOPARQUET_METADATA_SCHEMA};
92
- export {GEOPARQUET_METADATA_JSON_SCHEMA} from './lib/geo/geoparquet-metadata-schema';
93
-
94
- export type {GeoMetadata} from './lib/geo/decode-geo-metadata';
95
- export {getGeoMetadata, setGeoMetadata, unpackGeoMetadata} from './lib/geo/decode-geo-metadata';
96
-
97
89
  // Experimental
98
90
  export {BufferPolyfill, installBufferPolyfill} from './buffer-polyfill';
@@ -2,7 +2,7 @@
2
2
  import {Schema} from '@loaders.gl/schema';
3
3
  import {ParquetReader} from '../../parquetjs/parser/parquet-reader';
4
4
  import {convertParquetSchema} from '../arrow/convert-schema-from-parquet';
5
- import {unpackGeoMetadata, unpackJSONStringMetadata} from '../geo/decode-geo-metadata';
5
+ import {unpackGeoMetadata, unpackJSONStringMetadata} from '@loaders.gl/gis';
6
6
 
7
7
  export async function getSchemaFromParquetReader(reader: ParquetReader): Promise<Schema> {
8
8
  const parquetSchema = await reader.getSchema();
@@ -2,12 +2,14 @@
2
2
  // import {ColumnarTableBatch} from '@loaders.gl/schema';
3
3
  import {BlobFile} from '@loaders.gl/loader-utils';
4
4
  import {GeoJSONTable, ObjectRowTable, ObjectRowTableBatch} from '@loaders.gl/schema';
5
+ import {convertWKBTableToGeoJSON} from '@loaders.gl/gis';
6
+ import {WKTLoader, WKBLoader} from '@loaders.gl/wkt';
7
+
5
8
  import type {ParquetLoaderOptions} from '../../parquet-loader';
6
9
  import type {ParquetRow} from '../../parquetjs/schema/declare';
7
10
  import {ParquetReader} from '../../parquetjs/parser/parquet-reader';
8
11
  import {getSchemaFromParquetReader} from './get-parquet-schema';
9
12
  import {installBufferPolyfill} from '../../buffer-polyfill';
10
- import {convertWKBTableToGeoJSON} from '../geo/decode-geo-column';
11
13
 
12
14
  export async function parseParquet(
13
15
  arrayBuffer: ArrayBuffer,
@@ -45,7 +47,7 @@ export async function parseParquet(
45
47
 
46
48
  case 'geojson-table':
47
49
  try {
48
- return convertWKBTableToGeoJSON(objectRowTable, schema);
50
+ return convertWKBTableToGeoJSON(objectRowTable, schema, [WKTLoader, WKBLoader]);
49
51
  } catch (error) {
50
52
  return objectRowTable;
51
53
  }
@@ -1,4 +0,0 @@
1
- import type { ArrayRowTable, GeoJSONTable, ObjectRowTable, Schema } from '@loaders.gl/schema';
2
- /** TODO - move to loaders.gl/gis? */
3
- export declare function convertWKBTableToGeoJSON(table: ArrayRowTable | ObjectRowTable, schema: Schema): GeoJSONTable;
4
- //# sourceMappingURL=decode-geo-column.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"decode-geo-column.d.ts","sourceRoot":"","sources":["../../../src/lib/geo/decode-geo-column.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAQ5F,qCAAqC;AACrC,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,aAAa,GAAG,cAAc,EACrC,MAAM,EAAE,MAAM,GACb,YAAY,CAoBd"}
@@ -1,47 +0,0 @@
1
- import { getTableLength, getTableRowAsObject } from '@loaders.gl/schema';
2
- import { WKBLoader, WKTLoader } from '@loaders.gl/wkt';
3
- import { getGeoMetadata } from "./decode-geo-metadata.js";
4
- export function convertWKBTableToGeoJSON(table, schema) {
5
- const geoMetadata = getGeoMetadata(schema);
6
- const primaryColumn = geoMetadata === null || geoMetadata === void 0 ? void 0 : geoMetadata.primary_column;
7
- if (!primaryColumn) {
8
- throw new Error('no geometry column');
9
- }
10
- const columnMetadata = geoMetadata.columns[primaryColumn];
11
- const features = [];
12
- const length = getTableLength(table);
13
- for (let rowIndex = 0; rowIndex < length; rowIndex++) {
14
- const row = getTableRowAsObject(table, rowIndex);
15
- const geometry = parseGeometry(row[primaryColumn], columnMetadata);
16
- delete row[primaryColumn];
17
- const feature = {
18
- type: 'Feature',
19
- geometry: geometry,
20
- properties: row
21
- };
22
- features.push(feature);
23
- }
24
- return {
25
- shape: 'geojson-table',
26
- schema,
27
- type: 'FeatureCollection',
28
- features
29
- };
30
- }
31
- function parseGeometry(geometry, columnMetadata) {
32
- var _WKTLoader$parseTextS, _WKBLoader$parseSync;
33
- switch (columnMetadata.encoding) {
34
- case 'wkt':
35
- return ((_WKTLoader$parseTextS = WKTLoader.parseTextSync) === null || _WKTLoader$parseTextS === void 0 ? void 0 : _WKTLoader$parseTextS.call(WKTLoader, geometry)) || null;
36
- case 'wkb':
37
- default:
38
- const arrayBuffer = ArrayBuffer.isView(geometry) ? geometry.buffer.slice(geometry.byteOffset, geometry.byteOffset + geometry.byteLength) : geometry;
39
- const geojson = (_WKBLoader$parseSync = WKBLoader.parseSync) === null || _WKBLoader$parseSync === void 0 ? void 0 : _WKBLoader$parseSync.call(WKBLoader, arrayBuffer, {
40
- wkb: {
41
- shape: 'geometry'
42
- }
43
- });
44
- return geojson;
45
- }
46
- }
47
- //# sourceMappingURL=decode-geo-column.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"decode-geo-column.js","names":["getTableLength","getTableRowAsObject","WKBLoader","WKTLoader","getGeoMetadata","convertWKBTableToGeoJSON","table","schema","geoMetadata","primaryColumn","primary_column","Error","columnMetadata","columns","features","length","rowIndex","row","geometry","parseGeometry","feature","type","properties","push","shape","_WKTLoader$parseTextS","_WKBLoader$parseSync","encoding","parseTextSync","call","arrayBuffer","ArrayBuffer","isView","buffer","slice","byteOffset","byteLength","geojson","parseSync","wkb"],"sources":["../../../src/lib/geo/decode-geo-column.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport type {ArrayRowTable, GeoJSONTable, ObjectRowTable, Schema} from '@loaders.gl/schema';\nimport type {Feature, Geometry} from '@loaders.gl/schema';\nimport {getTableLength, getTableRowAsObject} from '@loaders.gl/schema';\n// import {binaryToGeometry} from '@loaders.gl/gis';\nimport {WKBLoader, WKTLoader} from '@loaders.gl/wkt';\n\nimport {GeoColumnMetadata, getGeoMetadata} from './decode-geo-metadata';\n\n/** TODO - move to loaders.gl/gis? */\nexport function convertWKBTableToGeoJSON(\n table: ArrayRowTable | ObjectRowTable,\n schema: Schema\n): GeoJSONTable {\n const geoMetadata = getGeoMetadata(schema);\n const primaryColumn = geoMetadata?.primary_column;\n if (!primaryColumn) {\n throw new Error('no geometry column');\n }\n const columnMetadata = geoMetadata.columns[primaryColumn];\n\n const features: Feature[] = [];\n\n const length = getTableLength(table);\n for (let rowIndex = 0; rowIndex < length; rowIndex++) {\n const row = getTableRowAsObject(table, rowIndex);\n const geometry = parseGeometry(row[primaryColumn], columnMetadata);\n delete row[primaryColumn];\n const feature: Feature = {type: 'Feature', geometry: geometry!, properties: row};\n features.push(feature);\n }\n\n return {shape: 'geojson-table', schema, type: 'FeatureCollection', features};\n}\n\nfunction parseGeometry(geometry: unknown, columnMetadata: GeoColumnMetadata): Geometry | null {\n switch (columnMetadata.encoding) {\n case 'wkt':\n return WKTLoader.parseTextSync?.(geometry as string) || null;\n case 'wkb':\n default:\n const arrayBuffer = ArrayBuffer.isView(geometry)\n ? geometry.buffer.slice(geometry.byteOffset, geometry.byteOffset + geometry.byteLength)\n : (geometry as ArrayBuffer);\n const geojson = WKBLoader.parseSync?.(arrayBuffer, {\n wkb: {shape: 'geometry'}\n }) as unknown as Geometry;\n return geojson; // binaryGeometry ? binaryToGeometry(binaryGeometry) : null;\n // const binaryGeometry = WKBLoader.parseSync?.(geometry);\n // ts-ignore\n // return binaryGeometry ? binaryToGeometry(binaryGeometry) : null;\n }\n}\n"],"mappings":"AAKA,SAAQA,cAAc,EAAEC,mBAAmB,QAAO,oBAAoB;AAEtE,SAAQC,SAAS,EAAEC,SAAS,QAAO,iBAAiB;AAAC,SAE1BC,cAAc;AAGzC,OAAO,SAASC,wBAAwBA,CACtCC,KAAqC,EACrCC,MAAc,EACA;EACd,MAAMC,WAAW,GAAGJ,cAAc,CAACG,MAAM,CAAC;EAC1C,MAAME,aAAa,GAAGD,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEE,cAAc;EACjD,IAAI,CAACD,aAAa,EAAE;IAClB,MAAM,IAAIE,KAAK,CAAC,oBAAoB,CAAC;EACvC;EACA,MAAMC,cAAc,GAAGJ,WAAW,CAACK,OAAO,CAACJ,aAAa,CAAC;EAEzD,MAAMK,QAAmB,GAAG,EAAE;EAE9B,MAAMC,MAAM,GAAGf,cAAc,CAACM,KAAK,CAAC;EACpC,KAAK,IAAIU,QAAQ,GAAG,CAAC,EAAEA,QAAQ,GAAGD,MAAM,EAAEC,QAAQ,EAAE,EAAE;IACpD,MAAMC,GAAG,GAAGhB,mBAAmB,CAACK,KAAK,EAAEU,QAAQ,CAAC;IAChD,MAAME,QAAQ,GAAGC,aAAa,CAACF,GAAG,CAACR,aAAa,CAAC,EAAEG,cAAc,CAAC;IAClE,OAAOK,GAAG,CAACR,aAAa,CAAC;IACzB,MAAMW,OAAgB,GAAG;MAACC,IAAI,EAAE,SAAS;MAAEH,QAAQ,EAAEA,QAAS;MAAEI,UAAU,EAAEL;IAAG,CAAC;IAChFH,QAAQ,CAACS,IAAI,CAACH,OAAO,CAAC;EACxB;EAEA,OAAO;IAACI,KAAK,EAAE,eAAe;IAAEjB,MAAM;IAAEc,IAAI,EAAE,mBAAmB;IAAEP;EAAQ,CAAC;AAC9E;AAEA,SAASK,aAAaA,CAACD,QAAiB,EAAEN,cAAiC,EAAmB;EAAA,IAAAa,qBAAA,EAAAC,oBAAA;EAC5F,QAAQd,cAAc,CAACe,QAAQ;IAC7B,KAAK,KAAK;MACR,OAAO,EAAAF,qBAAA,GAAAtB,SAAS,CAACyB,aAAa,cAAAH,qBAAA,uBAAvBA,qBAAA,CAAAI,IAAA,CAAA1B,SAAS,EAAiBe,QAAkB,CAAC,KAAI,IAAI;IAC9D,KAAK,KAAK;IACV;MACE,MAAMY,WAAW,GAAGC,WAAW,CAACC,MAAM,CAACd,QAAQ,CAAC,GAC5CA,QAAQ,CAACe,MAAM,CAACC,KAAK,CAAChB,QAAQ,CAACiB,UAAU,EAAEjB,QAAQ,CAACiB,UAAU,GAAGjB,QAAQ,CAACkB,UAAU,CAAC,GACpFlB,QAAwB;MAC7B,MAAMmB,OAAO,IAAAX,oBAAA,GAAGxB,SAAS,CAACoC,SAAS,cAAAZ,oBAAA,uBAAnBA,oBAAA,CAAAG,IAAA,CAAA3B,SAAS,EAAa4B,WAAW,EAAE;QACjDS,GAAG,EAAE;UAACf,KAAK,EAAE;QAAU;MACzB,CAAC,CAAwB;MACzB,OAAOa,OAAO;EAIlB;AACF"}
@@ -1,44 +0,0 @@
1
- import { Schema } from '@loaders.gl/schema';
2
- type GeometryType = 'Point' | 'LineString' | 'Polygon' | 'MultiPoint' | 'MultiLineString' | 'MultiPolygon' | 'GeometryCollection' | 'Point Z' | 'LineString Z' | 'Polygon Z' | 'MultiPoint Z' | 'MultiLineString Z' | 'MultiPolygon Z' | 'GeometryCollection Z';
3
- /**
4
- * A geoarrow / geoparquet geo metadata object
5
- * (stored in stringified form in the top level metadata 'geo' key)
6
- * @see https://github.com/opengeospatial/geoparquet/blob/main/format-specs/geoparquet.md
7
- * @see https://github.com/geoarrow/geoarrow/blob/main/metadata.md
8
- * */
9
- export type GeoMetadata = {
10
- version?: string;
11
- primary_column?: string;
12
- columns: Record<string, GeoColumnMetadata>;
13
- [key: string]: unknown;
14
- };
15
- /** A geoarrow / geoparquet geo metadata for one geometry column */
16
- export type GeoColumnMetadata = {
17
- encoding: 'wkb' | 'wkt';
18
- geometry_types: GeometryType[];
19
- crs?: object | null;
20
- orientation?: 'counterclockwise';
21
- bbox?: [number, number, number, number] | [number, number, number, number, number, number];
22
- edges?: 'planar' | 'spherical';
23
- epoch?: number;
24
- [key: string]: unknown;
25
- };
26
- /** Parse a key with stringified arrow metadata */
27
- export declare function parseJSONStringMetadata(schema: Schema, metadataKey: string): Record<string, unknown> | null;
28
- export declare function unpackJSONStringMetadata(schema: Schema, metadataKey: string): void;
29
- /**
30
- * Reads the GeoMetadata object from the metadata
31
- * @note geoarrow / parquet schema is stringified into a single key-value pair in the parquet metadata */
32
- export declare function getGeoMetadata(schema: Schema): GeoMetadata | null;
33
- /**
34
- * Stores a geoarrow / geoparquet geo metadata object in the schema
35
- * @note geoarrow / geoparquet geo metadata is a single stringified JSON field
36
- */
37
- export declare function setGeoMetadata(schema: Schema, geoMetadata: GeoMetadata): void;
38
- /**
39
- * Unpacks geo metadata into separate metadata fields (parses the long JSON string)
40
- * @note geoarrow / parquet schema is stringified into a single key-value pair in the parquet metadata
41
- */
42
- export declare function unpackGeoMetadata(schema: Schema): void;
43
- export {};
44
- //# sourceMappingURL=decode-geo-metadata.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"decode-geo-metadata.d.ts","sourceRoot":"","sources":["../../../src/lib/geo/decode-geo-metadata.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,MAAM,EAAQ,MAAM,oBAAoB,CAAC;AAIjD,KAAK,YAAY,GACb,OAAO,GACP,YAAY,GACZ,SAAS,GACT,YAAY,GACZ,iBAAiB,GACjB,cAAc,GACd,oBAAoB,GACpB,SAAS,GACT,cAAc,GACd,WAAW,GACX,cAAc,GACd,mBAAmB,GACnB,gBAAgB,GAChB,sBAAsB,CAAC;AAE3B;;;;;KAKK;AACL,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,oEAAoE;AACpE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,KAAK,GAAG,KAAK,CAAC;IACxB,cAAc,EAAE,YAAY,EAAE,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3F,KAAK,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,kDAAkD;AAClD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAehC;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAMlF;AAID;;yGAEyG;AACzG,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAGjE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI,CAG7E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CA6BtD"}