@loaders.gl/wkt 4.0.0-alpha.9 → 4.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -1
- package/dist/dist.min.js +1449 -404
- package/dist/es5/hex-wkb-loader.js +64 -0
- package/dist/es5/hex-wkb-loader.js.map +1 -0
- package/dist/es5/index.js +76 -1
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/encode-twkb.js +269 -0
- package/dist/es5/lib/encode-twkb.js.map +1 -0
- package/dist/es5/lib/encode-wkb.js +12 -10
- package/dist/es5/lib/encode-wkb.js.map +1 -1
- package/dist/es5/lib/encode-wkt-crs.js +32 -0
- package/dist/es5/lib/encode-wkt-crs.js.map +1 -0
- package/dist/es5/lib/encode-wkt.js +1 -1
- package/dist/es5/lib/encode-wkt.js.map +1 -1
- package/dist/es5/lib/parse-hex-wkb.js +2 -0
- package/dist/es5/lib/parse-hex-wkb.js.map +1 -0
- package/dist/es5/lib/parse-twkb.js +263 -0
- package/dist/es5/lib/parse-twkb.js.map +1 -0
- package/dist/es5/lib/parse-wkb-header.js +114 -0
- package/dist/es5/lib/parse-wkb-header.js.map +1 -0
- package/dist/es5/lib/parse-wkb.js +59 -52
- package/dist/es5/lib/parse-wkb.js.map +1 -1
- package/dist/es5/lib/parse-wkt-crs.js +106 -0
- package/dist/es5/lib/parse-wkt-crs.js.map +1 -0
- package/dist/es5/lib/parse-wkt.js +210 -153
- package/dist/es5/lib/parse-wkt.js.map +1 -1
- package/dist/es5/lib/utils/base64-encoder.js +26 -0
- package/dist/es5/lib/utils/base64-encoder.js.map +1 -0
- package/dist/es5/lib/utils/binary-reader.js +98 -0
- package/dist/es5/lib/utils/binary-reader.js.map +1 -0
- package/dist/es5/lib/utils/binary-writer.js +2 -2
- package/dist/es5/lib/utils/binary-writer.js.map +1 -1
- package/dist/es5/lib/utils/hex-encoder.js +63 -0
- package/dist/es5/lib/utils/hex-encoder.js.map +1 -0
- package/dist/es5/lib/utils/hex-transcoder.js +41 -0
- package/dist/es5/lib/utils/hex-transcoder.js.map +1 -0
- package/dist/es5/lib/utils/version.js +1 -1
- package/dist/es5/lib/utils/version.js.map +1 -1
- package/dist/es5/twkb-loader.js +53 -0
- package/dist/es5/twkb-loader.js.map +1 -0
- package/dist/es5/twkb-writer.js +40 -0
- package/dist/es5/twkb-writer.js.map +1 -0
- package/dist/es5/wkb-loader.js +9 -9
- package/dist/es5/wkb-loader.js.map +1 -1
- package/dist/es5/wkb-writer.js +2 -3
- package/dist/es5/wkb-writer.js.map +1 -1
- package/dist/es5/wkt-crs-loader.js +47 -0
- package/dist/es5/wkt-crs-loader.js.map +1 -0
- package/dist/es5/wkt-crs-writer.js +49 -0
- package/dist/es5/wkt-crs-writer.js.map +1 -0
- package/dist/es5/wkt-loader.js +10 -6
- package/dist/es5/wkt-loader.js.map +1 -1
- package/dist/es5/wkt-writer.js +2 -3
- package/dist/es5/wkt-writer.js.map +1 -1
- package/dist/es5/workers/wkb-worker.js.map +1 -1
- package/dist/es5/workers/wkt-worker.js.map +1 -1
- package/dist/esm/hex-wkb-loader.js +37 -0
- package/dist/esm/hex-wkb-loader.js.map +1 -0
- package/dist/esm/index.js +10 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/encode-twkb.js +180 -0
- package/dist/esm/lib/encode-twkb.js.map +1 -0
- package/dist/esm/lib/encode-wkb.js +4 -4
- package/dist/esm/lib/encode-wkb.js.map +1 -1
- package/dist/esm/lib/encode-wkt-crs.js +21 -0
- package/dist/esm/lib/encode-wkt-crs.js.map +1 -0
- package/dist/esm/lib/encode-wkt.js +1 -1
- package/dist/esm/lib/encode-wkt.js.map +1 -1
- package/dist/esm/lib/parse-hex-wkb.js +2 -0
- package/dist/esm/lib/parse-hex-wkb.js.map +1 -0
- package/dist/esm/lib/parse-twkb.js +256 -0
- package/dist/esm/lib/parse-twkb.js.map +1 -0
- package/dist/esm/lib/parse-wkb-header.js +105 -0
- package/dist/esm/lib/parse-wkb-header.js.map +1 -0
- package/dist/esm/lib/parse-wkb.js +59 -51
- package/dist/esm/lib/parse-wkb.js.map +1 -1
- package/dist/esm/lib/parse-wkt-crs.js +96 -0
- package/dist/esm/lib/parse-wkt-crs.js.map +1 -0
- package/dist/esm/lib/parse-wkt.js +204 -152
- package/dist/esm/lib/parse-wkt.js.map +1 -1
- package/dist/esm/lib/utils/base64-encoder.js +7 -0
- package/dist/esm/lib/utils/base64-encoder.js.map +1 -0
- package/dist/esm/lib/utils/binary-reader.js +67 -0
- package/dist/esm/lib/utils/binary-reader.js.map +1 -0
- package/dist/esm/lib/utils/binary-writer.js +1 -1
- package/dist/esm/lib/utils/binary-writer.js.map +1 -1
- package/dist/esm/lib/utils/hex-encoder.js +40 -0
- package/dist/esm/lib/utils/hex-encoder.js.map +1 -0
- package/dist/esm/lib/utils/hex-transcoder.js +34 -0
- package/dist/esm/lib/utils/hex-transcoder.js.map +1 -0
- package/dist/esm/lib/utils/version.js +1 -1
- package/dist/esm/lib/utils/version.js.map +1 -1
- package/dist/esm/twkb-loader.js +24 -0
- package/dist/esm/twkb-loader.js.map +1 -0
- package/dist/esm/twkb-writer.js +14 -0
- package/dist/esm/twkb-writer.js.map +1 -0
- package/dist/esm/wkb-loader.js +6 -4
- package/dist/esm/wkb-loader.js.map +1 -1
- package/dist/esm/wkb-writer.js +1 -1
- package/dist/esm/wkb-writer.js.map +1 -1
- package/dist/esm/wkt-crs-loader.js +19 -0
- package/dist/esm/wkt-crs-loader.js.map +1 -0
- package/dist/esm/wkt-crs-writer.js +19 -0
- package/dist/esm/wkt-crs-writer.js.map +1 -0
- package/dist/esm/wkt-loader.js +8 -3
- package/dist/esm/wkt-loader.js.map +1 -1
- package/dist/esm/wkt-writer.js +2 -2
- package/dist/esm/wkt-writer.js.map +1 -1
- package/dist/esm/workers/wkb-worker.js.map +1 -1
- package/dist/esm/workers/wkt-worker.js.map +1 -1
- package/dist/src/bundle.d.ts.map +1 -0
- package/dist/src/hex-wkb-loader.d.ts +17 -0
- package/dist/src/hex-wkb-loader.d.ts.map +1 -0
- package/dist/src/index.d.ts +15 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/lib/encode-twkb.d.ts +6 -0
- package/dist/src/lib/encode-twkb.d.ts.map +1 -0
- package/dist/{lib → src/lib}/encode-wkb.d.ts +16 -3
- package/dist/src/lib/encode-wkb.d.ts.map +1 -0
- package/dist/src/lib/encode-wkt-crs.d.ts +10 -0
- package/dist/src/lib/encode-wkt-crs.d.ts.map +1 -0
- package/dist/{lib → src/lib}/encode-wkt.d.ts +1 -1
- package/dist/src/lib/encode-wkt.d.ts.map +1 -0
- package/dist/src/lib/parse-hex-wkb.d.ts +1 -0
- package/dist/src/lib/parse-hex-wkb.d.ts.map +1 -0
- package/dist/src/lib/parse-twkb.d.ts +9 -0
- package/dist/src/lib/parse-twkb.d.ts.map +1 -0
- package/dist/src/lib/parse-wkb-header.d.ts +39 -0
- package/dist/src/lib/parse-wkb-header.d.ts.map +1 -0
- package/dist/src/lib/parse-wkb.d.ts +5 -0
- package/dist/src/lib/parse-wkb.d.ts.map +1 -0
- package/dist/src/lib/parse-wkt-crs.d.ts +15 -0
- package/dist/src/lib/parse-wkt-crs.d.ts.map +1 -0
- package/dist/src/lib/parse-wkt.d.ts +30 -0
- package/dist/src/lib/parse-wkt.d.ts.map +1 -0
- package/dist/src/lib/utils/base64-encoder.d.ts +5 -0
- package/dist/src/lib/utils/base64-encoder.d.ts.map +1 -0
- package/dist/src/lib/utils/binary-reader.d.ts +18 -0
- package/dist/src/lib/utils/binary-reader.d.ts.map +1 -0
- package/dist/{lib → src/lib}/utils/binary-writer.d.ts +1 -1
- package/dist/src/lib/utils/binary-writer.d.ts.map +1 -0
- package/dist/src/lib/utils/hex-encoder.d.ts +15 -0
- package/dist/src/lib/utils/hex-encoder.d.ts.map +1 -0
- package/dist/src/lib/utils/hex-transcoder.d.ts +15 -0
- package/dist/src/lib/utils/hex-transcoder.d.ts.map +1 -0
- package/dist/src/lib/utils/version.d.ts.map +1 -0
- package/dist/src/twkb-loader.d.ts +16 -0
- package/dist/src/twkb-loader.d.ts.map +1 -0
- package/dist/src/twkb-writer.d.ts +7 -0
- package/dist/src/twkb-writer.d.ts.map +1 -0
- package/dist/src/wkb-loader.d.ts +16 -0
- package/dist/src/wkb-loader.d.ts.map +1 -0
- package/dist/src/wkb-writer.d.ts +7 -0
- package/dist/src/wkb-writer.d.ts.map +1 -0
- package/dist/src/wkt-crs-loader.d.ts +12 -0
- package/dist/src/wkt-crs-loader.d.ts.map +1 -0
- package/dist/src/wkt-crs-writer.d.ts +13 -0
- package/dist/src/wkt-crs-writer.d.ts.map +1 -0
- package/dist/src/wkt-loader.d.ts +18 -0
- package/dist/src/wkt-loader.d.ts.map +1 -0
- package/dist/src/wkt-writer.d.ts +10 -0
- package/dist/src/wkt-writer.d.ts.map +1 -0
- package/dist/{workers → src/workers}/wkb-worker.d.ts.map +1 -1
- package/dist/{workers → src/workers}/wkt-worker.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/wkt-worker.js +230 -186
- package/package.json +4 -4
- package/src/hex-wkb-loader.ts +61 -0
- package/src/index.ts +22 -1
- package/src/lib/encode-twkb.ts +304 -0
- package/src/lib/encode-wkb.ts +5 -5
- package/src/lib/encode-wkt-crs.ts +39 -0
- package/src/lib/encode-wkt.ts +3 -2
- package/src/lib/parse-hex-wkb.ts +0 -0
- package/src/lib/parse-twkb.ts +356 -0
- package/src/lib/parse-wkb-header.ts +172 -0
- package/src/lib/parse-wkb.ts +69 -58
- package/src/lib/parse-wkt-crs.ts +147 -0
- package/src/lib/parse-wkt.ts +275 -174
- package/src/lib/utils/base64-encoder.ts +153 -0
- package/src/lib/utils/binary-reader.ts +72 -0
- package/src/lib/utils/binary-writer.ts +1 -1
- package/src/lib/utils/hex-encoder.ts +58 -0
- package/src/lib/utils/hex-transcoder.ts +50 -0
- package/src/twkb-loader.ts +42 -0
- package/src/twkb-writer.ts +25 -0
- package/src/wkb-loader.ts +19 -8
- package/src/wkb-writer.ts +6 -4
- package/src/wkt-crs-loader.ts +33 -0
- package/src/wkt-crs-writer.ts +37 -0
- package/src/wkt-loader.ts +22 -6
- package/src/wkt-writer.ts +12 -5
- package/src/workers/wkb-worker.ts +2 -0
- package/src/workers/wkt-worker.ts +2 -0
- package/dist/bundle.d.ts.map +0 -1
- package/dist/bundle.js +0 -5
- package/dist/index.d.ts +0 -5
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -13
- package/dist/lib/encode-wkb.d.ts.map +0 -1
- package/dist/lib/encode-wkb.js +0 -295
- package/dist/lib/encode-wkt.d.ts.map +0 -1
- package/dist/lib/encode-wkt.js +0 -46
- package/dist/lib/parse-wkb.d.ts +0 -3
- package/dist/lib/parse-wkb.d.ts.map +0 -1
- package/dist/lib/parse-wkb.js +0 -236
- package/dist/lib/parse-wkt.d.ts +0 -8
- package/dist/lib/parse-wkt.d.ts.map +0 -1
- package/dist/lib/parse-wkt.js +0 -227
- package/dist/lib/utils/binary-writer.d.ts.map +0 -1
- package/dist/lib/utils/binary-writer.js +0 -120
- package/dist/lib/utils/version.d.ts.map +0 -1
- package/dist/lib/utils/version.js +0 -7
- package/dist/wkb-loader.d.ts +0 -39
- package/dist/wkb-loader.d.ts.map +0 -1
- package/dist/wkb-loader.js +0 -34
- package/dist/wkb-writer.d.ts +0 -6
- package/dist/wkb-writer.d.ts.map +0 -1
- package/dist/wkb-writer.js +0 -26
- package/dist/wkt-loader.d.ts +0 -10
- package/dist/wkt-loader.d.ts.map +0 -1
- package/dist/wkt-loader.js +0 -33
- package/dist/wkt-writer.d.ts +0 -6
- package/dist/wkt-writer.d.ts.map +0 -1
- package/dist/wkt-writer.js +0 -23
- package/dist/workers/wkb-worker.js +0 -5
- package/dist/workers/wkt-worker.js +0 -5
- /package/dist/{bundle.d.ts → src/bundle.d.ts} +0 -0
- /package/dist/{lib → src/lib}/utils/version.d.ts +0 -0
- /package/dist/{workers → src/workers}/wkb-worker.d.ts +0 -0
- /package/dist/{workers → src/workers}/wkt-worker.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-wkb-header.js","names":["EWKB_FLAG_Z","EWKB_FLAG_M","EWKB_FLAG_SRID","MAX_SRID","WKBGeometryType","exports","isWKB","arrayBuffer","dataView","DataView","byteOffset","endianness","getUint8","littleEndian","geometry","getUint32","geometryType","geometryFlags","srid","parseWKBHeader","target","wkbHeader","Object","assign","type","dimensions","coordinates","geometryCode","isoType","Error","concat","ewkbZ","ewkbM","ewkbSRID"],"sources":["../../../src/lib/parse-wkb-header.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nconst EWKB_FLAG_Z = 0x80000000;\nconst EWKB_FLAG_M = 0x40000000;\nconst EWKB_FLAG_SRID = 0x20000000;\n\nconst MAX_SRID = 10000; // TBD: Assume no more than 10K SRIDs are defined\n\n/**\n * Integer code for geometry types in WKB and related formats\n * Reference: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary\n */\nexport enum WKBGeometryType {\n Point = 1,\n LineString = 2,\n Polygon = 3,\n MultiPoint = 4,\n MultiLineString = 5,\n MultiPolygon = 6,\n GeometryCollection = 7\n}\n\n/** Parsed WKB header */\nexport type WKBHeader = {\n /** WKB variant */\n type: 'wkb' | 'ewkb' | 'iso-wkb' | 'twkb';\n /** geometry type encoded in this WKB: point, line, polygon etc */\n geometryType: 1 | 2 | 3 | 4 | 5 | 6 | 7;\n /** Number of dimensions for coordinate data */\n dimensions: 2 | 3 | 4;\n /** Coordinate names, Z and M are controlled by flags */\n coordinates: 'xy' | 'xyz' | 'xym' | 'xyzm';\n srid?: number;\n /** true if binary data is stored as little endian */\n littleEndian: boolean;\n /** Offset to start of geometry */\n byteOffset: number;\n};\n\n/** Sanity checks that first to 5-9 bytes could represent a supported WKB dialect header */\nexport function isWKB(arrayBuffer: ArrayBuffer): boolean {\n const dataView = new DataView(arrayBuffer);\n let byteOffset = 0;\n\n const endianness = dataView.getUint8(byteOffset);\n byteOffset += 1;\n\n // Check valid endianness (only 0 or 1 are allowed)\n if (endianness > 1) {\n return false;\n }\n\n const littleEndian = endianness === 1;\n\n const geometry = dataView.getUint32(byteOffset, littleEndian);\n byteOffset += 4;\n\n // check valid geometry type (we don't support extension geometries)\n const geometryType = geometry & 0x07;\n if (geometryType === 0 || geometryType > 7) {\n return false;\n }\n\n const geometryFlags = geometry - geometryType;\n\n // Accept iso-wkb flags\n if (\n geometryFlags === 0 ||\n geometryFlags === 1000 ||\n geometryFlags === 2000 ||\n geometryFlags === 3000\n ) {\n return true;\n }\n\n // Accept ewkb flags but reject otherwise\n if ((geometryFlags & ~(EWKB_FLAG_Z | EWKB_FLAG_M | EWKB_FLAG_SRID)) !== 0) {\n return false;\n }\n\n if (geometryFlags & EWKB_FLAG_SRID) {\n const srid = dataView.getUint32(byteOffset, littleEndian);\n byteOffset += 4;\n\n if (srid > MAX_SRID) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Parses header and provides a byteOffset to start of geometry data\n * @param dataView\n * @param target optionally supply a WKBHeader object to avoid creating a new object for every call\n * @returns a header object describing the WKB data\n */\n// eslint-disable-next-line max-statements\nexport function parseWKBHeader(dataView: DataView, target?: WKBHeader): WKBHeader {\n const wkbHeader: WKBHeader = Object.assign(target || {}, {\n type: 'wkb',\n geometryType: 1,\n dimensions: 2,\n coordinates: 'xy',\n littleEndian: true,\n byteOffset: 0\n } as WKBHeader);\n\n // Check endianness of data\n wkbHeader.littleEndian = dataView.getUint8(wkbHeader.byteOffset) === 1;\n wkbHeader.byteOffset++;\n\n // 4-digit code representing dimension and type of geometry\n const geometryCode = dataView.getUint32(wkbHeader.byteOffset, wkbHeader.littleEndian);\n wkbHeader.byteOffset += 4;\n\n wkbHeader.geometryType = (geometryCode & 0x7) as 1 | 2 | 3 | 4 | 5 | 6 | 7;\n\n // Check if iso-wkb variant: iso-wkb adds 1000, 2000 or 3000 to the geometry code\n const isoType = (geometryCode - wkbHeader.geometryType) / 1000;\n switch (isoType) {\n case 0:\n break;\n case 1:\n wkbHeader.type = 'iso-wkb';\n wkbHeader.dimensions = 3;\n wkbHeader.coordinates = 'xyz';\n break;\n case 2:\n wkbHeader.type = 'iso-wkb';\n wkbHeader.dimensions = 3;\n wkbHeader.coordinates = 'xym';\n break;\n case 3:\n wkbHeader.type = 'iso-wkb';\n wkbHeader.dimensions = 4;\n wkbHeader.coordinates = 'xyzm';\n break;\n default:\n throw new Error(`WKB: Unsupported iso-wkb type: ${isoType}`);\n }\n\n // Check if EWKB variant. Uses bitmasks for Z&M dimensions as well as optional SRID field\n const ewkbZ = geometryCode & EWKB_FLAG_Z;\n const ewkbM = geometryCode & EWKB_FLAG_M;\n const ewkbSRID = geometryCode & EWKB_FLAG_SRID;\n\n if (ewkbZ && ewkbM) {\n wkbHeader.type = 'ewkb';\n wkbHeader.dimensions = 4;\n wkbHeader.coordinates = 'xyzm';\n } else if (ewkbZ) {\n wkbHeader.type = 'ewkb';\n wkbHeader.dimensions = 3;\n wkbHeader.coordinates = 'xyz';\n } else if (ewkbM) {\n wkbHeader.type = 'ewkb';\n wkbHeader.dimensions = 3;\n wkbHeader.coordinates = 'xym';\n }\n\n // If SRID present read four more bytes\n if (ewkbSRID) {\n wkbHeader.type = 'ewkb';\n // 4-digit code representing dimension and type of geometry\n wkbHeader.srid = dataView.getUint32(wkbHeader.byteOffset, wkbHeader.littleEndian);\n wkbHeader.byteOffset += 4;\n }\n\n return wkbHeader;\n}\n"],"mappings":";;;;;;;;AAEA,IAAMA,WAAW,GAAG,UAAU;AAC9B,IAAMC,WAAW,GAAG,UAAU;AAC9B,IAAMC,cAAc,GAAG,UAAU;AAEjC,IAAMC,QAAQ,GAAG,KAAK;AAAC,IAMXC,eAAe,aAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAfA,eAAe,CAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAAAC,OAAA,CAAAD,eAAA,GAAAA,eAAA;AA4BpB,SAASE,KAAKA,CAACC,WAAwB,EAAW;EACvD,IAAMC,QAAQ,GAAG,IAAIC,QAAQ,CAACF,WAAW,CAAC;EAC1C,IAAIG,UAAU,GAAG,CAAC;EAElB,IAAMC,UAAU,GAAGH,QAAQ,CAACI,QAAQ,CAACF,UAAU,CAAC;EAChDA,UAAU,IAAI,CAAC;EAGf,IAAIC,UAAU,GAAG,CAAC,EAAE;IAClB,OAAO,KAAK;EACd;EAEA,IAAME,YAAY,GAAGF,UAAU,KAAK,CAAC;EAErC,IAAMG,QAAQ,GAAGN,QAAQ,CAACO,SAAS,CAACL,UAAU,EAAEG,YAAY,CAAC;EAC7DH,UAAU,IAAI,CAAC;EAGf,IAAMM,YAAY,GAAGF,QAAQ,GAAG,IAAI;EACpC,IAAIE,YAAY,KAAK,CAAC,IAAIA,YAAY,GAAG,CAAC,EAAE;IAC1C,OAAO,KAAK;EACd;EAEA,IAAMC,aAAa,GAAGH,QAAQ,GAAGE,YAAY;EAG7C,IACEC,aAAa,KAAK,CAAC,IACnBA,aAAa,KAAK,IAAI,IACtBA,aAAa,KAAK,IAAI,IACtBA,aAAa,KAAK,IAAI,EACtB;IACA,OAAO,IAAI;EACb;EAGA,IAAI,CAACA,aAAa,GAAG,EAAEjB,WAAW,GAAGC,WAAW,GAAGC,cAAc,CAAC,MAAM,CAAC,EAAE;IACzE,OAAO,KAAK;EACd;EAEA,IAAIe,aAAa,GAAGf,cAAc,EAAE;IAClC,IAAMgB,IAAI,GAAGV,QAAQ,CAACO,SAAS,CAACL,UAAU,EAAEG,YAAY,CAAC;IACzDH,UAAU,IAAI,CAAC;IAEf,IAAIQ,IAAI,GAAGf,QAAQ,EAAE;MACnB,OAAO,KAAK;IACd;EACF;EAEA,OAAO,IAAI;AACb;AASO,SAASgB,cAAcA,CAACX,QAAkB,EAAEY,MAAkB,EAAa;EAChF,IAAMC,SAAoB,GAAGC,MAAM,CAACC,MAAM,CAACH,MAAM,IAAI,CAAC,CAAC,EAAE;IACvDI,IAAI,EAAE,KAAK;IACXR,YAAY,EAAE,CAAC;IACfS,UAAU,EAAE,CAAC;IACbC,WAAW,EAAE,IAAI;IACjBb,YAAY,EAAE,IAAI;IAClBH,UAAU,EAAE;EACd,CAAc,CAAC;EAGfW,SAAS,CAACR,YAAY,GAAGL,QAAQ,CAACI,QAAQ,CAACS,SAAS,CAACX,UAAU,CAAC,KAAK,CAAC;EACtEW,SAAS,CAACX,UAAU,EAAE;EAGtB,IAAMiB,YAAY,GAAGnB,QAAQ,CAACO,SAAS,CAACM,SAAS,CAACX,UAAU,EAAEW,SAAS,CAACR,YAAY,CAAC;EACrFQ,SAAS,CAACX,UAAU,IAAI,CAAC;EAEzBW,SAAS,CAACL,YAAY,GAAIW,YAAY,GAAG,GAAiC;EAG1E,IAAMC,OAAO,GAAG,CAACD,YAAY,GAAGN,SAAS,CAACL,YAAY,IAAI,IAAI;EAC9D,QAAQY,OAAO;IACb,KAAK,CAAC;MACJ;IACF,KAAK,CAAC;MACJP,SAAS,CAACG,IAAI,GAAG,SAAS;MAC1BH,SAAS,CAACI,UAAU,GAAG,CAAC;MACxBJ,SAAS,CAACK,WAAW,GAAG,KAAK;MAC7B;IACF,KAAK,CAAC;MACJL,SAAS,CAACG,IAAI,GAAG,SAAS;MAC1BH,SAAS,CAACI,UAAU,GAAG,CAAC;MACxBJ,SAAS,CAACK,WAAW,GAAG,KAAK;MAC7B;IACF,KAAK,CAAC;MACJL,SAAS,CAACG,IAAI,GAAG,SAAS;MAC1BH,SAAS,CAACI,UAAU,GAAG,CAAC;MACxBJ,SAAS,CAACK,WAAW,GAAG,MAAM;MAC9B;IACF;MACE,MAAM,IAAIG,KAAK,mCAAAC,MAAA,CAAmCF,OAAO,CAAE,CAAC;EAChE;EAGA,IAAMG,KAAK,GAAGJ,YAAY,GAAG3B,WAAW;EACxC,IAAMgC,KAAK,GAAGL,YAAY,GAAG1B,WAAW;EACxC,IAAMgC,QAAQ,GAAGN,YAAY,GAAGzB,cAAc;EAE9C,IAAI6B,KAAK,IAAIC,KAAK,EAAE;IAClBX,SAAS,CAACG,IAAI,GAAG,MAAM;IACvBH,SAAS,CAACI,UAAU,GAAG,CAAC;IACxBJ,SAAS,CAACK,WAAW,GAAG,MAAM;EAChC,CAAC,MAAM,IAAIK,KAAK,EAAE;IAChBV,SAAS,CAACG,IAAI,GAAG,MAAM;IACvBH,SAAS,CAACI,UAAU,GAAG,CAAC;IACxBJ,SAAS,CAACK,WAAW,GAAG,KAAK;EAC/B,CAAC,MAAM,IAAIM,KAAK,EAAE;IAChBX,SAAS,CAACG,IAAI,GAAG,MAAM;IACvBH,SAAS,CAACI,UAAU,GAAG,CAAC;IACxBJ,SAAS,CAACK,WAAW,GAAG,KAAK;EAC/B;EAGA,IAAIO,QAAQ,EAAE;IACZZ,SAAS,CAACG,IAAI,GAAG,MAAM;IAEvBH,SAAS,CAACH,IAAI,GAAGV,QAAQ,CAACO,SAAS,CAACM,SAAS,CAACX,UAAU,EAAEW,SAAS,CAACR,YAAY,CAAC;IACjFQ,SAAS,CAACX,UAAU,IAAI,CAAC;EAC3B;EAEA,OAAOW,SAAS;AAClB"}
|
|
@@ -4,57 +4,64 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.
|
|
7
|
+
exports.parseWKB = parseWKB;
|
|
8
|
+
exports.parseWKBToBinary = parseWKBToBinary;
|
|
8
9
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
10
|
+
var _gis = require("@loaders.gl/gis");
|
|
11
|
+
var _parseWkbHeader = require("./parse-wkb-header");
|
|
9
12
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
10
13
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
11
14
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
var
|
|
27
|
-
var
|
|
15
|
+
function parseWKB(arrayBuffer, options) {
|
|
16
|
+
var _options$wkb;
|
|
17
|
+
var binaryGeometry = parseWKBToBinary(arrayBuffer, options);
|
|
18
|
+
var shape = (options === null || options === void 0 ? void 0 : (_options$wkb = options.wkb) === null || _options$wkb === void 0 ? void 0 : _options$wkb.shape) || 'binary-geometry';
|
|
19
|
+
switch (shape) {
|
|
20
|
+
case 'binary-geometry':
|
|
21
|
+
return binaryGeometry;
|
|
22
|
+
case 'geometry':
|
|
23
|
+
return (0, _gis.binaryToGeometry)(binaryGeometry);
|
|
24
|
+
default:
|
|
25
|
+
throw new Error(shape);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function parseWKBToBinary(arrayBuffer, options) {
|
|
29
|
+
var dataView = new DataView(arrayBuffer);
|
|
30
|
+
var wkbHeader = (0, _parseWkbHeader.parseWKBHeader)(dataView);
|
|
31
|
+
var geometryType = wkbHeader.geometryType,
|
|
32
|
+
dimensions = wkbHeader.dimensions,
|
|
33
|
+
littleEndian = wkbHeader.littleEndian;
|
|
34
|
+
var offset = wkbHeader.byteOffset;
|
|
28
35
|
switch (geometryType) {
|
|
29
|
-
case
|
|
30
|
-
var point = parsePoint(
|
|
36
|
+
case _parseWkbHeader.WKBGeometryType.Point:
|
|
37
|
+
var point = parsePoint(dataView, offset, dimensions, littleEndian);
|
|
31
38
|
return point.geometry;
|
|
32
|
-
case
|
|
33
|
-
var line = parseLineString(
|
|
39
|
+
case _parseWkbHeader.WKBGeometryType.LineString:
|
|
40
|
+
var line = parseLineString(dataView, offset, dimensions, littleEndian);
|
|
34
41
|
return line.geometry;
|
|
35
|
-
case
|
|
36
|
-
var polygon = parsePolygon(
|
|
42
|
+
case _parseWkbHeader.WKBGeometryType.Polygon:
|
|
43
|
+
var polygon = parsePolygon(dataView, offset, dimensions, littleEndian);
|
|
37
44
|
return polygon.geometry;
|
|
38
|
-
case
|
|
39
|
-
var multiPoint = parseMultiPoint(
|
|
45
|
+
case _parseWkbHeader.WKBGeometryType.MultiPoint:
|
|
46
|
+
var multiPoint = parseMultiPoint(dataView, offset, dimensions, littleEndian);
|
|
40
47
|
multiPoint.type = 'Point';
|
|
41
48
|
return multiPoint;
|
|
42
|
-
case
|
|
43
|
-
var multiLine = parseMultiLineString(
|
|
49
|
+
case _parseWkbHeader.WKBGeometryType.MultiLineString:
|
|
50
|
+
var multiLine = parseMultiLineString(dataView, offset, dimensions, littleEndian);
|
|
44
51
|
multiLine.type = 'LineString';
|
|
45
52
|
return multiLine;
|
|
46
|
-
case
|
|
47
|
-
var multiPolygon = parseMultiPolygon(
|
|
53
|
+
case _parseWkbHeader.WKBGeometryType.MultiPolygon:
|
|
54
|
+
var multiPolygon = parseMultiPolygon(dataView, offset, dimensions, littleEndian);
|
|
48
55
|
multiPolygon.type = 'Polygon';
|
|
49
56
|
return multiPolygon;
|
|
50
57
|
default:
|
|
51
58
|
throw new Error("WKB: Unsupported geometry type: ".concat(geometryType));
|
|
52
59
|
}
|
|
53
60
|
}
|
|
54
|
-
function parsePoint(
|
|
61
|
+
function parsePoint(dataView, offset, dimension, littleEndian) {
|
|
55
62
|
var positions = new Float64Array(dimension);
|
|
56
63
|
for (var i = 0; i < dimension; i++) {
|
|
57
|
-
positions[i] =
|
|
64
|
+
positions[i] = dataView.getFloat64(offset, littleEndian);
|
|
58
65
|
offset += 8;
|
|
59
66
|
}
|
|
60
67
|
return {
|
|
@@ -68,12 +75,12 @@ function parsePoint(view, offset, dimension, littleEndian) {
|
|
|
68
75
|
offset: offset
|
|
69
76
|
};
|
|
70
77
|
}
|
|
71
|
-
function parseLineString(
|
|
72
|
-
var nPoints =
|
|
78
|
+
function parseLineString(dataView, offset, dimension, littleEndian) {
|
|
79
|
+
var nPoints = dataView.getUint32(offset, littleEndian);
|
|
73
80
|
offset += 4;
|
|
74
81
|
var positions = new Float64Array(nPoints * dimension);
|
|
75
82
|
for (var i = 0; i < nPoints * dimension; i++) {
|
|
76
|
-
positions[i] =
|
|
83
|
+
positions[i] = dataView.getFloat64(offset, littleEndian);
|
|
77
84
|
offset += 8;
|
|
78
85
|
}
|
|
79
86
|
var pathIndices = [0];
|
|
@@ -100,12 +107,12 @@ var cumulativeSum = function cumulativeSum(sum) {
|
|
|
100
107
|
return sum += value;
|
|
101
108
|
};
|
|
102
109
|
};
|
|
103
|
-
function parsePolygon(
|
|
104
|
-
var nRings =
|
|
110
|
+
function parsePolygon(dataView, offset, dimension, littleEndian) {
|
|
111
|
+
var nRings = dataView.getUint32(offset, littleEndian);
|
|
105
112
|
offset += 4;
|
|
106
113
|
var rings = [];
|
|
107
114
|
for (var i = 0; i < nRings; i++) {
|
|
108
|
-
var parsed = parseLineString(
|
|
115
|
+
var parsed = parseLineString(dataView, offset, dimension, littleEndian);
|
|
109
116
|
var positions = parsed.geometry.positions;
|
|
110
117
|
offset = parsed.offset;
|
|
111
118
|
rings.push(positions.value);
|
|
@@ -138,52 +145,52 @@ function parsePolygon(view, offset, dimension, littleEndian) {
|
|
|
138
145
|
offset: offset
|
|
139
146
|
};
|
|
140
147
|
}
|
|
141
|
-
function parseMultiPoint(
|
|
142
|
-
var nPoints =
|
|
148
|
+
function parseMultiPoint(dataView, offset, dimension, littleEndian) {
|
|
149
|
+
var nPoints = dataView.getUint32(offset, littleEndian);
|
|
143
150
|
offset += 4;
|
|
144
151
|
var binaryPointGeometries = [];
|
|
145
152
|
for (var i = 0; i < nPoints; i++) {
|
|
146
|
-
var littleEndianPoint =
|
|
153
|
+
var littleEndianPoint = dataView.getUint8(offset) === 1;
|
|
147
154
|
offset++;
|
|
148
|
-
if (
|
|
155
|
+
if (dataView.getUint32(offset, littleEndianPoint) % 1000 !== 1) {
|
|
149
156
|
throw new Error('WKB: Inner geometries of MultiPoint not of type Point');
|
|
150
157
|
}
|
|
151
158
|
offset += 4;
|
|
152
|
-
var parsed = parsePoint(
|
|
159
|
+
var parsed = parsePoint(dataView, offset, dimension, littleEndianPoint);
|
|
153
160
|
offset = parsed.offset;
|
|
154
161
|
binaryPointGeometries.push(parsed.geometry);
|
|
155
162
|
}
|
|
156
163
|
return concatenateBinaryPointGeometries(binaryPointGeometries, dimension);
|
|
157
164
|
}
|
|
158
|
-
function parseMultiLineString(
|
|
159
|
-
var nLines =
|
|
165
|
+
function parseMultiLineString(dataView, offset, dimension, littleEndian) {
|
|
166
|
+
var nLines = dataView.getUint32(offset, littleEndian);
|
|
160
167
|
offset += 4;
|
|
161
168
|
var binaryLineGeometries = [];
|
|
162
169
|
for (var i = 0; i < nLines; i++) {
|
|
163
|
-
var littleEndianLine =
|
|
170
|
+
var littleEndianLine = dataView.getUint8(offset) === 1;
|
|
164
171
|
offset++;
|
|
165
|
-
if (
|
|
172
|
+
if (dataView.getUint32(offset, littleEndianLine) % 1000 !== 2) {
|
|
166
173
|
throw new Error('WKB: Inner geometries of MultiLineString not of type LineString');
|
|
167
174
|
}
|
|
168
175
|
offset += 4;
|
|
169
|
-
var parsed = parseLineString(
|
|
176
|
+
var parsed = parseLineString(dataView, offset, dimension, littleEndianLine);
|
|
170
177
|
offset = parsed.offset;
|
|
171
178
|
binaryLineGeometries.push(parsed.geometry);
|
|
172
179
|
}
|
|
173
180
|
return concatenateBinaryLineGeometries(binaryLineGeometries, dimension);
|
|
174
181
|
}
|
|
175
|
-
function parseMultiPolygon(
|
|
176
|
-
var nPolygons =
|
|
182
|
+
function parseMultiPolygon(dataView, offset, dimension, littleEndian) {
|
|
183
|
+
var nPolygons = dataView.getUint32(offset, littleEndian);
|
|
177
184
|
offset += 4;
|
|
178
185
|
var binaryPolygonGeometries = [];
|
|
179
186
|
for (var i = 0; i < nPolygons; i++) {
|
|
180
|
-
var littleEndianPolygon =
|
|
187
|
+
var littleEndianPolygon = dataView.getUint8(offset) === 1;
|
|
181
188
|
offset++;
|
|
182
|
-
if (
|
|
189
|
+
if (dataView.getUint32(offset, littleEndianPolygon) % 1000 !== 3) {
|
|
183
190
|
throw new Error('WKB: Inner geometries of MultiPolygon not of type Polygon');
|
|
184
191
|
}
|
|
185
192
|
offset += 4;
|
|
186
|
-
var parsed = parsePolygon(
|
|
193
|
+
var parsed = parsePolygon(dataView, offset, dimension, littleEndianPolygon);
|
|
187
194
|
offset = parsed.offset;
|
|
188
195
|
binaryPolygonGeometries.push(parsed.geometry);
|
|
189
196
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-wkb.js","names":["NUM_DIMENSIONS","parseWKB","arrayBuffer","view","DataView","offset","littleEndian","getUint8","geometryCode","getUint32","geometryType","type","dimension","point","parsePoint","geometry","line","parseLineString","polygon","parsePolygon","multiPoint","parseMultiPoint","multiLine","parseMultiLineString","multiPolygon","parseMultiPolygon","Error","concat","positions","Float64Array","i","getFloat64","value","size","nPoints","pathIndices","push","Uint16Array","cumulativeSum","sum","nRings","rings","parsed","concatenatedPositions","concatTypedArrays","buffer","polygonIndices","length","primitivePolygonIndices","map","l","unshift","binaryPointGeometries","littleEndianPoint","concatenateBinaryPointGeometries","nLines","binaryLineGeometries","littleEndianLine","concatenateBinaryLineGeometries","nPolygons","binaryPolygonGeometries","littleEndianPolygon","concatenateBinaryPolygonGeometries","lines","polygons","primitivePolygons","_iterator","_createForOfIteratorHelper","_step","s","n","done","binaryPolygon","err","e","f","p","_i","_primitivePolygons","primitivePolygon","apply","_toConsumableArray2","default","filter","x","arrays","byteLength","Uint8Array","byteOffset","data","j"],"sources":["../../../src/lib/parse-wkb.ts"],"sourcesContent":["import type {\n TypedArray,\n BinaryGeometry,\n BinaryPointGeometry,\n BinaryLineGeometry,\n BinaryPolygonGeometry\n} from '@loaders.gl/schema';\n\nconst NUM_DIMENSIONS = {\n 0: 2, // 2D\n 1: 3, // 3D (Z)\n 2: 3, // 3D (M)\n 3: 4 // 4D (ZM)\n};\n\nexport default function parseWKB(arrayBuffer: ArrayBuffer): BinaryGeometry {\n const view = new DataView(arrayBuffer);\n let offset = 0;\n\n // Check endianness of data\n const littleEndian = view.getUint8(offset) === 1;\n offset++;\n\n // 4-digit code representing dimension and type of geometry\n const geometryCode = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const geometryType = geometryCode % 1000;\n const type = ((geometryCode - geometryType) / 1000) as 0 | 1 | 2 | 3;\n const dimension = NUM_DIMENSIONS[type];\n\n switch (geometryType) {\n case 1:\n const point = parsePoint(view, offset, dimension, littleEndian);\n return point.geometry;\n case 2:\n const line = parseLineString(view, offset, dimension, littleEndian);\n return line.geometry;\n case 3:\n const polygon = parsePolygon(view, offset, dimension, littleEndian);\n return polygon.geometry;\n case 4:\n const multiPoint = parseMultiPoint(view, offset, dimension, littleEndian);\n multiPoint.type = 'Point';\n return multiPoint;\n case 5:\n const multiLine = parseMultiLineString(view, offset, dimension, littleEndian);\n multiLine.type = 'LineString';\n return multiLine;\n case 6:\n const multiPolygon = parseMultiPolygon(view, offset, dimension, littleEndian);\n multiPolygon.type = 'Polygon';\n return multiPolygon;\n // case 7:\n // TODO: handle GeometryCollections\n // return parseGeometryCollection(view, offset, dimension, littleEndian);\n default:\n throw new Error(`WKB: Unsupported geometry type: ${geometryType}`);\n }\n}\n\n// Primitives; parse point and linear ring\nfunction parsePoint(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryPointGeometry; offset: number} {\n const positions = new Float64Array(dimension);\n for (let i = 0; i < dimension; i++) {\n positions[i] = view.getFloat64(offset, littleEndian);\n offset += 8;\n }\n\n return {\n geometry: {type: 'Point', positions: {value: positions, size: dimension}},\n offset\n };\n}\n\nfunction parseLineString(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryLineGeometry; offset: number} {\n const nPoints = view.getUint32(offset, littleEndian);\n offset += 4;\n\n // Instantiate array\n const positions = new Float64Array(nPoints * dimension);\n for (let i = 0; i < nPoints * dimension; i++) {\n positions[i] = view.getFloat64(offset, littleEndian);\n offset += 8;\n }\n\n const pathIndices = [0];\n if (nPoints > 0) {\n pathIndices.push(nPoints);\n }\n\n return {\n geometry: {\n type: 'LineString',\n positions: {value: positions, size: dimension},\n pathIndices: {value: new Uint16Array(pathIndices), size: 1}\n },\n offset\n };\n}\n\n// https://stackoverflow.com/a/55261098\nconst cumulativeSum = (sum: number) => (value: number) => (sum += value);\n\nfunction parsePolygon(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryPolygonGeometry; offset: number} {\n const nRings = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const rings: TypedArray[] = [];\n for (let i = 0; i < nRings; i++) {\n const parsed = parseLineString(view, offset, dimension, littleEndian);\n const {positions} = parsed.geometry;\n offset = parsed.offset;\n rings.push(positions.value);\n }\n\n const concatenatedPositions = new Float64Array(concatTypedArrays(rings).buffer);\n const polygonIndices = [0];\n if (concatenatedPositions.length > 0) {\n polygonIndices.push(concatenatedPositions.length / dimension);\n }\n const primitivePolygonIndices = rings.map((l) => l.length / dimension).map(cumulativeSum(0));\n primitivePolygonIndices.unshift(0);\n\n return {\n geometry: {\n type: 'Polygon',\n positions: {value: concatenatedPositions, size: dimension},\n polygonIndices: {\n value: new Uint16Array(polygonIndices),\n size: 1\n },\n primitivePolygonIndices: {value: new Uint16Array(primitivePolygonIndices), size: 1}\n },\n offset\n };\n}\n\nfunction parseMultiPoint(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryPointGeometry {\n const nPoints = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryPointGeometries: BinaryPointGeometry[] = [];\n for (let i = 0; i < nPoints; i++) {\n // Byte order for point\n const littleEndianPoint = view.getUint8(offset) === 1;\n offset++;\n\n // Assert point type\n if (view.getUint32(offset, littleEndianPoint) % 1000 !== 1) {\n throw new Error('WKB: Inner geometries of MultiPoint not of type Point');\n }\n\n offset += 4;\n\n const parsed = parsePoint(view, offset, dimension, littleEndianPoint);\n offset = parsed.offset;\n binaryPointGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryPointGeometries(binaryPointGeometries, dimension);\n}\n\nfunction parseMultiLineString(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryLineGeometry {\n const nLines = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryLineGeometries: BinaryLineGeometry[] = [];\n for (let i = 0; i < nLines; i++) {\n // Byte order for line\n const littleEndianLine = view.getUint8(offset) === 1;\n offset++;\n\n // Assert type LineString\n if (view.getUint32(offset, littleEndianLine) % 1000 !== 2) {\n throw new Error('WKB: Inner geometries of MultiLineString not of type LineString');\n }\n offset += 4;\n\n const parsed = parseLineString(view, offset, dimension, littleEndianLine);\n offset = parsed.offset;\n binaryLineGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryLineGeometries(binaryLineGeometries, dimension);\n}\n\nfunction parseMultiPolygon(\n view: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryPolygonGeometry {\n const nPolygons = view.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryPolygonGeometries: BinaryPolygonGeometry[] = [];\n for (let i = 0; i < nPolygons; i++) {\n // Byte order for polygon\n const littleEndianPolygon = view.getUint8(offset) === 1;\n offset++;\n\n // Assert type Polygon\n if (view.getUint32(offset, littleEndianPolygon) % 1000 !== 3) {\n throw new Error('WKB: Inner geometries of MultiPolygon not of type Polygon');\n }\n offset += 4;\n\n const parsed = parsePolygon(view, offset, dimension, littleEndianPolygon);\n offset = parsed.offset;\n binaryPolygonGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryPolygonGeometries(binaryPolygonGeometries, dimension);\n}\n\n// TODO - move to loaders.gl/schema/gis\n\nfunction concatenateBinaryPointGeometries(\n binaryPointGeometries: BinaryPointGeometry[],\n dimension: number\n): BinaryPointGeometry {\n const positions: TypedArray[] = binaryPointGeometries.map((geometry) => geometry.positions.value);\n const concatenatedPositions = new Float64Array(concatTypedArrays(positions).buffer);\n\n return {\n type: 'Point',\n positions: {value: concatenatedPositions, size: dimension}\n };\n}\n\nfunction concatenateBinaryLineGeometries(\n binaryLineGeometries: BinaryLineGeometry[],\n dimension: number\n): BinaryLineGeometry {\n const lines: TypedArray[] = binaryLineGeometries.map((geometry) => geometry.positions.value);\n const concatenatedPositions = new Float64Array(concatTypedArrays(lines).buffer);\n const pathIndices = lines.map((line) => line.length / dimension).map(cumulativeSum(0));\n pathIndices.unshift(0);\n\n return {\n type: 'LineString',\n positions: {value: concatenatedPositions, size: dimension},\n pathIndices: {value: new Uint16Array(pathIndices), size: 1}\n };\n}\n\nfunction concatenateBinaryPolygonGeometries(\n binaryPolygonGeometries: BinaryPolygonGeometry[],\n dimension: number\n): BinaryPolygonGeometry {\n const polygons: TypedArray[] = [];\n const primitivePolygons: TypedArray[] = [];\n\n for (const binaryPolygon of binaryPolygonGeometries) {\n const {positions, primitivePolygonIndices} = binaryPolygon;\n polygons.push(positions.value);\n primitivePolygons.push(primitivePolygonIndices.value);\n }\n\n const concatenatedPositions = new Float64Array(concatTypedArrays(polygons).buffer);\n const polygonIndices = polygons.map((p) => p.length / dimension).map(cumulativeSum(0));\n polygonIndices.unshift(0);\n\n // Combine primitivePolygonIndices from each individual polygon\n const primitivePolygonIndices = [0];\n for (const primitivePolygon of primitivePolygons) {\n primitivePolygonIndices.push(\n ...primitivePolygon\n .filter((x: number) => x > 0)\n .map((x: number) => x + primitivePolygonIndices[primitivePolygonIndices.length - 1])\n );\n }\n\n return {\n type: 'Polygon',\n positions: {value: concatenatedPositions, size: dimension},\n polygonIndices: {value: new Uint16Array(polygonIndices), size: 1},\n primitivePolygonIndices: {value: new Uint16Array(primitivePolygonIndices), size: 1}\n };\n}\n\n// TODO: remove copy; import from typed-array-utils\n// modules/math/src/geometry/typed-arrays/typed-array-utils.js\nfunction concatTypedArrays(arrays: TypedArray[]): TypedArray {\n let byteLength = 0;\n for (let i = 0; i < arrays.length; ++i) {\n byteLength += arrays[i].byteLength;\n }\n const buffer = new Uint8Array(byteLength);\n\n let byteOffset = 0;\n for (let i = 0; i < arrays.length; ++i) {\n const data = new Uint8Array(arrays[i].buffer);\n byteLength = data.length;\n for (let j = 0; j < byteLength; ++j) {\n buffer[byteOffset++] = data[j];\n }\n }\n return buffer;\n}\n"],"mappings":";;;;;;;;;;;AAQA,IAAMA,cAAc,GAAG;EACrB,CAAC,EAAE,CAAC;EACJ,CAAC,EAAE,CAAC;EACJ,CAAC,EAAE,CAAC;EACJ,CAAC,EAAE;AACL,CAAC;AAEc,SAASC,QAAQA,CAACC,WAAwB,EAAkB;EACzE,IAAMC,IAAI,GAAG,IAAIC,QAAQ,CAACF,WAAW,CAAC;EACtC,IAAIG,MAAM,GAAG,CAAC;EAGd,IAAMC,YAAY,GAAGH,IAAI,CAACI,QAAQ,CAACF,MAAM,CAAC,KAAK,CAAC;EAChDA,MAAM,EAAE;EAGR,IAAMG,YAAY,GAAGL,IAAI,CAACM,SAAS,CAACJ,MAAM,EAAEC,YAAY,CAAC;EACzDD,MAAM,IAAI,CAAC;EAEX,IAAMK,YAAY,GAAGF,YAAY,GAAG,IAAI;EACxC,IAAMG,IAAI,GAAI,CAACH,YAAY,GAAGE,YAAY,IAAI,IAAsB;EACpE,IAAME,SAAS,GAAGZ,cAAc,CAACW,IAAI,CAAC;EAEtC,QAAQD,YAAY;IAClB,KAAK,CAAC;MACJ,IAAMG,KAAK,GAAGC,UAAU,CAACX,IAAI,EAAEE,MAAM,EAAEO,SAAS,EAAEN,YAAY,CAAC;MAC/D,OAAOO,KAAK,CAACE,QAAQ;IACvB,KAAK,CAAC;MACJ,IAAMC,IAAI,GAAGC,eAAe,CAACd,IAAI,EAAEE,MAAM,EAAEO,SAAS,EAAEN,YAAY,CAAC;MACnE,OAAOU,IAAI,CAACD,QAAQ;IACtB,KAAK,CAAC;MACJ,IAAMG,OAAO,GAAGC,YAAY,CAAChB,IAAI,EAAEE,MAAM,EAAEO,SAAS,EAAEN,YAAY,CAAC;MACnE,OAAOY,OAAO,CAACH,QAAQ;IACzB,KAAK,CAAC;MACJ,IAAMK,UAAU,GAAGC,eAAe,CAAClB,IAAI,EAAEE,MAAM,EAAEO,SAAS,EAAEN,YAAY,CAAC;MACzEc,UAAU,CAACT,IAAI,GAAG,OAAO;MACzB,OAAOS,UAAU;IACnB,KAAK,CAAC;MACJ,IAAME,SAAS,GAAGC,oBAAoB,CAACpB,IAAI,EAAEE,MAAM,EAAEO,SAAS,EAAEN,YAAY,CAAC;MAC7EgB,SAAS,CAACX,IAAI,GAAG,YAAY;MAC7B,OAAOW,SAAS;IAClB,KAAK,CAAC;MACJ,IAAME,YAAY,GAAGC,iBAAiB,CAACtB,IAAI,EAAEE,MAAM,EAAEO,SAAS,EAAEN,YAAY,CAAC;MAC7EkB,YAAY,CAACb,IAAI,GAAG,SAAS;MAC7B,OAAOa,YAAY;IAIrB;MACE,MAAM,IAAIE,KAAK,oCAAAC,MAAA,CAAoCjB,YAAY,CAAE,CAAC;EACtE;AACF;AAGA,SAASI,UAAUA,CACjBX,IAAc,EACdE,MAAc,EACdO,SAAiB,EACjBN,YAAqB,EAC4B;EACjD,IAAMsB,SAAS,GAAG,IAAIC,YAAY,CAACjB,SAAS,CAAC;EAC7C,KAAK,IAAIkB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGlB,SAAS,EAAEkB,CAAC,EAAE,EAAE;IAClCF,SAAS,CAACE,CAAC,CAAC,GAAG3B,IAAI,CAAC4B,UAAU,CAAC1B,MAAM,EAAEC,YAAY,CAAC;IACpDD,MAAM,IAAI,CAAC;EACb;EAEA,OAAO;IACLU,QAAQ,EAAE;MAACJ,IAAI,EAAE,OAAO;MAAEiB,SAAS,EAAE;QAACI,KAAK,EAAEJ,SAAS;QAAEK,IAAI,EAAErB;MAAS;IAAC,CAAC;IACzEP,MAAM,EAANA;EACF,CAAC;AACH;AAEA,SAASY,eAAeA,CACtBd,IAAc,EACdE,MAAc,EACdO,SAAiB,EACjBN,YAAqB,EAC2B;EAChD,IAAM4B,OAAO,GAAG/B,IAAI,CAACM,SAAS,CAACJ,MAAM,EAAEC,YAAY,CAAC;EACpDD,MAAM,IAAI,CAAC;EAGX,IAAMuB,SAAS,GAAG,IAAIC,YAAY,CAACK,OAAO,GAAGtB,SAAS,CAAC;EACvD,KAAK,IAAIkB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGI,OAAO,GAAGtB,SAAS,EAAEkB,CAAC,EAAE,EAAE;IAC5CF,SAAS,CAACE,CAAC,CAAC,GAAG3B,IAAI,CAAC4B,UAAU,CAAC1B,MAAM,EAAEC,YAAY,CAAC;IACpDD,MAAM,IAAI,CAAC;EACb;EAEA,IAAM8B,WAAW,GAAG,CAAC,CAAC,CAAC;EACvB,IAAID,OAAO,GAAG,CAAC,EAAE;IACfC,WAAW,CAACC,IAAI,CAACF,OAAO,CAAC;EAC3B;EAEA,OAAO;IACLnB,QAAQ,EAAE;MACRJ,IAAI,EAAE,YAAY;MAClBiB,SAAS,EAAE;QAACI,KAAK,EAAEJ,SAAS;QAAEK,IAAI,EAAErB;MAAS,CAAC;MAC9CuB,WAAW,EAAE;QAACH,KAAK,EAAE,IAAIK,WAAW,CAACF,WAAW,CAAC;QAAEF,IAAI,EAAE;MAAC;IAC5D,CAAC;IACD5B,MAAM,EAANA;EACF,CAAC;AACH;AAGA,IAAMiC,aAAa,GAAG,SAAhBA,aAAaA,CAAIC,GAAW;EAAA,OAAK,UAACP,KAAa;IAAA,OAAMO,GAAG,IAAIP,KAAK;EAAA,CAAC;AAAA;AAExE,SAASb,YAAYA,CACnBhB,IAAc,EACdE,MAAc,EACdO,SAAiB,EACjBN,YAAqB,EAC8B;EACnD,IAAMkC,MAAM,GAAGrC,IAAI,CAACM,SAAS,CAACJ,MAAM,EAAEC,YAAY,CAAC;EACnDD,MAAM,IAAI,CAAC;EAEX,IAAMoC,KAAmB,GAAG,EAAE;EAC9B,KAAK,IAAIX,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGU,MAAM,EAAEV,CAAC,EAAE,EAAE;IAC/B,IAAMY,MAAM,GAAGzB,eAAe,CAACd,IAAI,EAAEE,MAAM,EAAEO,SAAS,EAAEN,YAAY,CAAC;IACrE,IAAOsB,SAAS,GAAIc,MAAM,CAAC3B,QAAQ,CAA5Ba,SAAS;IAChBvB,MAAM,GAAGqC,MAAM,CAACrC,MAAM;IACtBoC,KAAK,CAACL,IAAI,CAACR,SAAS,CAACI,KAAK,CAAC;EAC7B;EAEA,IAAMW,qBAAqB,GAAG,IAAId,YAAY,CAACe,iBAAiB,CAACH,KAAK,CAAC,CAACI,MAAM,CAAC;EAC/E,IAAMC,cAAc,GAAG,CAAC,CAAC,CAAC;EAC1B,IAAIH,qBAAqB,CAACI,MAAM,GAAG,CAAC,EAAE;IACpCD,cAAc,CAACV,IAAI,CAACO,qBAAqB,CAACI,MAAM,GAAGnC,SAAS,CAAC;EAC/D;EACA,IAAMoC,uBAAuB,GAAGP,KAAK,CAACQ,GAAG,CAAC,UAACC,CAAC;IAAA,OAAKA,CAAC,CAACH,MAAM,GAAGnC,SAAS;EAAA,EAAC,CAACqC,GAAG,CAACX,aAAa,CAAC,CAAC,CAAC,CAAC;EAC5FU,uBAAuB,CAACG,OAAO,CAAC,CAAC,CAAC;EAElC,OAAO;IACLpC,QAAQ,EAAE;MACRJ,IAAI,EAAE,SAAS;MACfiB,SAAS,EAAE;QAACI,KAAK,EAAEW,qBAAqB;QAAEV,IAAI,EAAErB;MAAS,CAAC;MAC1DkC,cAAc,EAAE;QACdd,KAAK,EAAE,IAAIK,WAAW,CAACS,cAAc,CAAC;QACtCb,IAAI,EAAE;MACR,CAAC;MACDe,uBAAuB,EAAE;QAAChB,KAAK,EAAE,IAAIK,WAAW,CAACW,uBAAuB,CAAC;QAAEf,IAAI,EAAE;MAAC;IACpF,CAAC;IACD5B,MAAM,EAANA;EACF,CAAC;AACH;AAEA,SAASgB,eAAeA,CACtBlB,IAAc,EACdE,MAAc,EACdO,SAAiB,EACjBN,YAAqB,EACA;EACrB,IAAM4B,OAAO,GAAG/B,IAAI,CAACM,SAAS,CAACJ,MAAM,EAAEC,YAAY,CAAC;EACpDD,MAAM,IAAI,CAAC;EAEX,IAAM+C,qBAA4C,GAAG,EAAE;EACvD,KAAK,IAAItB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGI,OAAO,EAAEJ,CAAC,EAAE,EAAE;IAEhC,IAAMuB,iBAAiB,GAAGlD,IAAI,CAACI,QAAQ,CAACF,MAAM,CAAC,KAAK,CAAC;IACrDA,MAAM,EAAE;IAGR,IAAIF,IAAI,CAACM,SAAS,CAACJ,MAAM,EAAEgD,iBAAiB,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE;MAC1D,MAAM,IAAI3B,KAAK,CAAC,uDAAuD,CAAC;IAC1E;IAEArB,MAAM,IAAI,CAAC;IAEX,IAAMqC,MAAM,GAAG5B,UAAU,CAACX,IAAI,EAAEE,MAAM,EAAEO,SAAS,EAAEyC,iBAAiB,CAAC;IACrEhD,MAAM,GAAGqC,MAAM,CAACrC,MAAM;IACtB+C,qBAAqB,CAAChB,IAAI,CAACM,MAAM,CAAC3B,QAAQ,CAAC;EAC7C;EAEA,OAAOuC,gCAAgC,CAACF,qBAAqB,EAAExC,SAAS,CAAC;AAC3E;AAEA,SAASW,oBAAoBA,CAC3BpB,IAAc,EACdE,MAAc,EACdO,SAAiB,EACjBN,YAAqB,EACD;EACpB,IAAMiD,MAAM,GAAGpD,IAAI,CAACM,SAAS,CAACJ,MAAM,EAAEC,YAAY,CAAC;EACnDD,MAAM,IAAI,CAAC;EAEX,IAAMmD,oBAA0C,GAAG,EAAE;EACrD,KAAK,IAAI1B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyB,MAAM,EAAEzB,CAAC,EAAE,EAAE;IAE/B,IAAM2B,gBAAgB,GAAGtD,IAAI,CAACI,QAAQ,CAACF,MAAM,CAAC,KAAK,CAAC;IACpDA,MAAM,EAAE;IAGR,IAAIF,IAAI,CAACM,SAAS,CAACJ,MAAM,EAAEoD,gBAAgB,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE;MACzD,MAAM,IAAI/B,KAAK,CAAC,iEAAiE,CAAC;IACpF;IACArB,MAAM,IAAI,CAAC;IAEX,IAAMqC,MAAM,GAAGzB,eAAe,CAACd,IAAI,EAAEE,MAAM,EAAEO,SAAS,EAAE6C,gBAAgB,CAAC;IACzEpD,MAAM,GAAGqC,MAAM,CAACrC,MAAM;IACtBmD,oBAAoB,CAACpB,IAAI,CAACM,MAAM,CAAC3B,QAAQ,CAAC;EAC5C;EAEA,OAAO2C,+BAA+B,CAACF,oBAAoB,EAAE5C,SAAS,CAAC;AACzE;AAEA,SAASa,iBAAiBA,CACxBtB,IAAc,EACdE,MAAc,EACdO,SAAiB,EACjBN,YAAqB,EACE;EACvB,IAAMqD,SAAS,GAAGxD,IAAI,CAACM,SAAS,CAACJ,MAAM,EAAEC,YAAY,CAAC;EACtDD,MAAM,IAAI,CAAC;EAEX,IAAMuD,uBAAgD,GAAG,EAAE;EAC3D,KAAK,IAAI9B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6B,SAAS,EAAE7B,CAAC,EAAE,EAAE;IAElC,IAAM+B,mBAAmB,GAAG1D,IAAI,CAACI,QAAQ,CAACF,MAAM,CAAC,KAAK,CAAC;IACvDA,MAAM,EAAE;IAGR,IAAIF,IAAI,CAACM,SAAS,CAACJ,MAAM,EAAEwD,mBAAmB,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE;MAC5D,MAAM,IAAInC,KAAK,CAAC,2DAA2D,CAAC;IAC9E;IACArB,MAAM,IAAI,CAAC;IAEX,IAAMqC,MAAM,GAAGvB,YAAY,CAAChB,IAAI,EAAEE,MAAM,EAAEO,SAAS,EAAEiD,mBAAmB,CAAC;IACzExD,MAAM,GAAGqC,MAAM,CAACrC,MAAM;IACtBuD,uBAAuB,CAACxB,IAAI,CAACM,MAAM,CAAC3B,QAAQ,CAAC;EAC/C;EAEA,OAAO+C,kCAAkC,CAACF,uBAAuB,EAAEhD,SAAS,CAAC;AAC/E;AAIA,SAAS0C,gCAAgCA,CACvCF,qBAA4C,EAC5CxC,SAAiB,EACI;EACrB,IAAMgB,SAAuB,GAAGwB,qBAAqB,CAACH,GAAG,CAAC,UAAClC,QAAQ;IAAA,OAAKA,QAAQ,CAACa,SAAS,CAACI,KAAK;EAAA,EAAC;EACjG,IAAMW,qBAAqB,GAAG,IAAId,YAAY,CAACe,iBAAiB,CAAChB,SAAS,CAAC,CAACiB,MAAM,CAAC;EAEnF,OAAO;IACLlC,IAAI,EAAE,OAAO;IACbiB,SAAS,EAAE;MAACI,KAAK,EAAEW,qBAAqB;MAAEV,IAAI,EAAErB;IAAS;EAC3D,CAAC;AACH;AAEA,SAAS8C,+BAA+BA,CACtCF,oBAA0C,EAC1C5C,SAAiB,EACG;EACpB,IAAMmD,KAAmB,GAAGP,oBAAoB,CAACP,GAAG,CAAC,UAAClC,QAAQ;IAAA,OAAKA,QAAQ,CAACa,SAAS,CAACI,KAAK;EAAA,EAAC;EAC5F,IAAMW,qBAAqB,GAAG,IAAId,YAAY,CAACe,iBAAiB,CAACmB,KAAK,CAAC,CAAClB,MAAM,CAAC;EAC/E,IAAMV,WAAW,GAAG4B,KAAK,CAACd,GAAG,CAAC,UAACjC,IAAI;IAAA,OAAKA,IAAI,CAAC+B,MAAM,GAAGnC,SAAS;EAAA,EAAC,CAACqC,GAAG,CAACX,aAAa,CAAC,CAAC,CAAC,CAAC;EACtFH,WAAW,CAACgB,OAAO,CAAC,CAAC,CAAC;EAEtB,OAAO;IACLxC,IAAI,EAAE,YAAY;IAClBiB,SAAS,EAAE;MAACI,KAAK,EAAEW,qBAAqB;MAAEV,IAAI,EAAErB;IAAS,CAAC;IAC1DuB,WAAW,EAAE;MAACH,KAAK,EAAE,IAAIK,WAAW,CAACF,WAAW,CAAC;MAAEF,IAAI,EAAE;IAAC;EAC5D,CAAC;AACH;AAEA,SAAS6B,kCAAkCA,CACzCF,uBAAgD,EAChDhD,SAAiB,EACM;EACvB,IAAMoD,QAAsB,GAAG,EAAE;EACjC,IAAMC,iBAA+B,GAAG,EAAE;EAAC,IAAAC,SAAA,GAAAC,0BAAA,CAEfP,uBAAuB;IAAAQ,KAAA;EAAA;IAAnD,KAAAF,SAAA,CAAAG,CAAA,MAAAD,KAAA,GAAAF,SAAA,CAAAI,CAAA,IAAAC,IAAA,GAAqD;MAAA,IAA1CC,aAAa,GAAAJ,KAAA,CAAApC,KAAA;MACtB,IAAOJ,SAAS,GAA6B4C,aAAa,CAAnD5C,SAAS;QAAEoB,wBAAuB,GAAIwB,aAAa,CAAxCxB,uBAAuB;MACzCgB,QAAQ,CAAC5B,IAAI,CAACR,SAAS,CAACI,KAAK,CAAC;MAC9BiC,iBAAiB,CAAC7B,IAAI,CAACY,wBAAuB,CAAChB,KAAK,CAAC;IACvD;EAAC,SAAAyC,GAAA;IAAAP,SAAA,CAAAQ,CAAA,CAAAD,GAAA;EAAA;IAAAP,SAAA,CAAAS,CAAA;EAAA;EAED,IAAMhC,qBAAqB,GAAG,IAAId,YAAY,CAACe,iBAAiB,CAACoB,QAAQ,CAAC,CAACnB,MAAM,CAAC;EAClF,IAAMC,cAAc,GAAGkB,QAAQ,CAACf,GAAG,CAAC,UAAC2B,CAAC;IAAA,OAAKA,CAAC,CAAC7B,MAAM,GAAGnC,SAAS;EAAA,EAAC,CAACqC,GAAG,CAACX,aAAa,CAAC,CAAC,CAAC,CAAC;EACtFQ,cAAc,CAACK,OAAO,CAAC,CAAC,CAAC;EAGzB,IAAMH,uBAAuB,GAAG,CAAC,CAAC,CAAC;EACnC,SAAA6B,EAAA,MAAAC,kBAAA,GAA+Bb,iBAAiB,EAAAY,EAAA,GAAAC,kBAAA,CAAA/B,MAAA,EAAA8B,EAAA,IAAE;IAA7C,IAAME,gBAAgB,GAAAD,kBAAA,CAAAD,EAAA;IACzB7B,uBAAuB,CAACZ,IAAI,CAAA4C,KAAA,CAA5BhC,uBAAuB,MAAAiC,mBAAA,CAAAC,OAAA,EAClBH,gBAAgB,CAChBI,MAAM,CAAC,UAACC,CAAS;MAAA,OAAKA,CAAC,GAAG,CAAC;IAAA,EAAC,CAC5BnC,GAAG,CAAC,UAACmC,CAAS;MAAA,OAAKA,CAAC,GAAGpC,uBAAuB,CAACA,uBAAuB,CAACD,MAAM,GAAG,CAAC,CAAC;IAAA,EAAC,CACxF,CAAC;EACH;EAEA,OAAO;IACLpC,IAAI,EAAE,SAAS;IACfiB,SAAS,EAAE;MAACI,KAAK,EAAEW,qBAAqB;MAAEV,IAAI,EAAErB;IAAS,CAAC;IAC1DkC,cAAc,EAAE;MAACd,KAAK,EAAE,IAAIK,WAAW,CAACS,cAAc,CAAC;MAAEb,IAAI,EAAE;IAAC,CAAC;IACjEe,uBAAuB,EAAE;MAAChB,KAAK,EAAE,IAAIK,WAAW,CAACW,uBAAuB,CAAC;MAAEf,IAAI,EAAE;IAAC;EACpF,CAAC;AACH;AAIA,SAASW,iBAAiBA,CAACyC,MAAoB,EAAc;EAC3D,IAAIC,UAAU,GAAG,CAAC;EAClB,KAAK,IAAIxD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGuD,MAAM,CAACtC,MAAM,EAAE,EAAEjB,CAAC,EAAE;IACtCwD,UAAU,IAAID,MAAM,CAACvD,CAAC,CAAC,CAACwD,UAAU;EACpC;EACA,IAAMzC,MAAM,GAAG,IAAI0C,UAAU,CAACD,UAAU,CAAC;EAEzC,IAAIE,UAAU,GAAG,CAAC;EAClB,KAAK,IAAI1D,GAAC,GAAG,CAAC,EAAEA,GAAC,GAAGuD,MAAM,CAACtC,MAAM,EAAE,EAAEjB,GAAC,EAAE;IACtC,IAAM2D,IAAI,GAAG,IAAIF,UAAU,CAACF,MAAM,CAACvD,GAAC,CAAC,CAACe,MAAM,CAAC;IAC7CyC,UAAU,GAAGG,IAAI,CAAC1C,MAAM;IACxB,KAAK,IAAI2C,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,UAAU,EAAE,EAAEI,CAAC,EAAE;MACnC7C,MAAM,CAAC2C,UAAU,EAAE,CAAC,GAAGC,IAAI,CAACC,CAAC,CAAC;IAChC;EACF;EACA,OAAO7C,MAAM;AACf"}
|
|
1
|
+
{"version":3,"file":"parse-wkb.js","names":["_gis","require","_parseWkbHeader","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","parseWKB","arrayBuffer","options","_options$wkb","binaryGeometry","parseWKBToBinary","shape","wkb","binaryToGeometry","Error","dataView","DataView","wkbHeader","parseWKBHeader","geometryType","dimensions","littleEndian","offset","byteOffset","WKBGeometryType","Point","point","parsePoint","geometry","LineString","line","parseLineString","Polygon","polygon","parsePolygon","MultiPoint","multiPoint","parseMultiPoint","type","MultiLineString","multiLine","parseMultiLineString","MultiPolygon","multiPolygon","parseMultiPolygon","concat","dimension","positions","Float64Array","getFloat64","size","nPoints","getUint32","pathIndices","push","Uint16Array","cumulativeSum","sum","nRings","rings","parsed","concatenatedPositions","concatTypedArrays","buffer","polygonIndices","primitivePolygonIndices","map","l","unshift","binaryPointGeometries","littleEndianPoint","getUint8","concatenateBinaryPointGeometries","nLines","binaryLineGeometries","littleEndianLine","concatenateBinaryLineGeometries","nPolygons","binaryPolygonGeometries","littleEndianPolygon","concatenateBinaryPolygonGeometries","lines","polygons","primitivePolygons","_iterator","_step","binaryPolygon","p","_i","_primitivePolygons","primitivePolygon","apply","_toConsumableArray2","default","filter","x","arrays","byteLength","Uint8Array","data","j"],"sources":["../../../src/lib/parse-wkb.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {\n TypedArray,\n BinaryGeometry,\n BinaryPointGeometry,\n BinaryLineGeometry,\n BinaryPolygonGeometry,\n Geometry\n} from '@loaders.gl/schema';\nimport {binaryToGeometry} from '@loaders.gl/gis';\nimport type {WKBLoaderOptions} from '../wkb-loader';\n\nimport {parseWKBHeader, WKBGeometryType} from './parse-wkb-header';\n\nexport function parseWKB(\n arrayBuffer: ArrayBuffer,\n options?: WKBLoaderOptions\n): BinaryGeometry | Geometry {\n const binaryGeometry = parseWKBToBinary(arrayBuffer, options);\n const shape = options?.wkb?.shape || 'binary-geometry';\n switch (shape) {\n case 'binary-geometry':\n return binaryGeometry;\n case 'geometry':\n return binaryToGeometry(binaryGeometry);\n default:\n throw new Error(shape);\n }\n}\n\nexport function parseWKBToBinary(\n arrayBuffer: ArrayBuffer,\n options?: WKBLoaderOptions\n): BinaryGeometry {\n const dataView = new DataView(arrayBuffer);\n\n const wkbHeader = parseWKBHeader(dataView);\n\n const {geometryType, dimensions, littleEndian} = wkbHeader;\n const offset = wkbHeader.byteOffset;\n\n switch (geometryType) {\n case WKBGeometryType.Point:\n const point = parsePoint(dataView, offset, dimensions, littleEndian);\n return point.geometry;\n case WKBGeometryType.LineString:\n const line = parseLineString(dataView, offset, dimensions, littleEndian);\n return line.geometry;\n case WKBGeometryType.Polygon:\n const polygon = parsePolygon(dataView, offset, dimensions, littleEndian);\n return polygon.geometry;\n case WKBGeometryType.MultiPoint:\n const multiPoint = parseMultiPoint(dataView, offset, dimensions, littleEndian);\n multiPoint.type = 'Point';\n return multiPoint;\n case WKBGeometryType.MultiLineString:\n const multiLine = parseMultiLineString(dataView, offset, dimensions, littleEndian);\n multiLine.type = 'LineString';\n return multiLine;\n case WKBGeometryType.MultiPolygon:\n const multiPolygon = parseMultiPolygon(dataView, offset, dimensions, littleEndian);\n multiPolygon.type = 'Polygon';\n return multiPolygon;\n // case WKBGeometryType.GeometryCollection:\n // TODO: handle GeometryCollections\n // return parseGeometryCollection(dataView, offset, dimensions, littleEndian);\n default:\n throw new Error(`WKB: Unsupported geometry type: ${geometryType}`);\n }\n}\n\n// Primitives; parse point and linear ring\nfunction parsePoint(\n dataView: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryPointGeometry; offset: number} {\n const positions = new Float64Array(dimension);\n for (let i = 0; i < dimension; i++) {\n positions[i] = dataView.getFloat64(offset, littleEndian);\n offset += 8;\n }\n\n return {\n geometry: {type: 'Point', positions: {value: positions, size: dimension}},\n offset\n };\n}\n\nfunction parseLineString(\n dataView: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryLineGeometry; offset: number} {\n const nPoints = dataView.getUint32(offset, littleEndian);\n offset += 4;\n\n // Instantiate array\n const positions = new Float64Array(nPoints * dimension);\n for (let i = 0; i < nPoints * dimension; i++) {\n positions[i] = dataView.getFloat64(offset, littleEndian);\n offset += 8;\n }\n\n const pathIndices = [0];\n if (nPoints > 0) {\n pathIndices.push(nPoints);\n }\n\n return {\n geometry: {\n type: 'LineString',\n positions: {value: positions, size: dimension},\n pathIndices: {value: new Uint16Array(pathIndices), size: 1}\n },\n offset\n };\n}\n\n// https://stackoverflow.com/a/55261098\nconst cumulativeSum = (sum: number) => (value: number) => (sum += value);\n\nfunction parsePolygon(\n dataView: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryPolygonGeometry; offset: number} {\n const nRings = dataView.getUint32(offset, littleEndian);\n offset += 4;\n\n const rings: TypedArray[] = [];\n for (let i = 0; i < nRings; i++) {\n const parsed = parseLineString(dataView, offset, dimension, littleEndian);\n const {positions} = parsed.geometry;\n offset = parsed.offset;\n rings.push(positions.value);\n }\n\n const concatenatedPositions = new Float64Array(concatTypedArrays(rings).buffer);\n const polygonIndices = [0];\n if (concatenatedPositions.length > 0) {\n polygonIndices.push(concatenatedPositions.length / dimension);\n }\n const primitivePolygonIndices = rings.map((l) => l.length / dimension).map(cumulativeSum(0));\n primitivePolygonIndices.unshift(0);\n\n return {\n geometry: {\n type: 'Polygon',\n positions: {value: concatenatedPositions, size: dimension},\n polygonIndices: {\n value: new Uint16Array(polygonIndices),\n size: 1\n },\n primitivePolygonIndices: {value: new Uint16Array(primitivePolygonIndices), size: 1}\n },\n offset\n };\n}\n\nfunction parseMultiPoint(\n dataView: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryPointGeometry {\n const nPoints = dataView.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryPointGeometries: BinaryPointGeometry[] = [];\n for (let i = 0; i < nPoints; i++) {\n // Byte order for point\n const littleEndianPoint = dataView.getUint8(offset) === 1;\n offset++;\n\n // Assert point type\n if (dataView.getUint32(offset, littleEndianPoint) % 1000 !== 1) {\n throw new Error('WKB: Inner geometries of MultiPoint not of type Point');\n }\n\n offset += 4;\n\n const parsed = parsePoint(dataView, offset, dimension, littleEndianPoint);\n offset = parsed.offset;\n binaryPointGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryPointGeometries(binaryPointGeometries, dimension);\n}\n\nfunction parseMultiLineString(\n dataView: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryLineGeometry {\n const nLines = dataView.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryLineGeometries: BinaryLineGeometry[] = [];\n for (let i = 0; i < nLines; i++) {\n // Byte order for line\n const littleEndianLine = dataView.getUint8(offset) === 1;\n offset++;\n\n // Assert type LineString\n if (dataView.getUint32(offset, littleEndianLine) % 1000 !== 2) {\n throw new Error('WKB: Inner geometries of MultiLineString not of type LineString');\n }\n offset += 4;\n\n const parsed = parseLineString(dataView, offset, dimension, littleEndianLine);\n offset = parsed.offset;\n binaryLineGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryLineGeometries(binaryLineGeometries, dimension);\n}\n\nfunction parseMultiPolygon(\n dataView: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryPolygonGeometry {\n const nPolygons = dataView.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryPolygonGeometries: BinaryPolygonGeometry[] = [];\n for (let i = 0; i < nPolygons; i++) {\n // Byte order for polygon\n const littleEndianPolygon = dataView.getUint8(offset) === 1;\n offset++;\n\n // Assert type Polygon\n if (dataView.getUint32(offset, littleEndianPolygon) % 1000 !== 3) {\n throw new Error('WKB: Inner geometries of MultiPolygon not of type Polygon');\n }\n offset += 4;\n\n const parsed = parsePolygon(dataView, offset, dimension, littleEndianPolygon);\n offset = parsed.offset;\n binaryPolygonGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryPolygonGeometries(binaryPolygonGeometries, dimension);\n}\n\n// TODO - move to loaders.gl/schema/gis\n\nfunction concatenateBinaryPointGeometries(\n binaryPointGeometries: BinaryPointGeometry[],\n dimension: number\n): BinaryPointGeometry {\n const positions: TypedArray[] = binaryPointGeometries.map((geometry) => geometry.positions.value);\n const concatenatedPositions = new Float64Array(concatTypedArrays(positions).buffer);\n\n return {\n type: 'Point',\n positions: {value: concatenatedPositions, size: dimension}\n };\n}\n\nfunction concatenateBinaryLineGeometries(\n binaryLineGeometries: BinaryLineGeometry[],\n dimension: number\n): BinaryLineGeometry {\n const lines: TypedArray[] = binaryLineGeometries.map((geometry) => geometry.positions.value);\n const concatenatedPositions = new Float64Array(concatTypedArrays(lines).buffer);\n const pathIndices = lines.map((line) => line.length / dimension).map(cumulativeSum(0));\n pathIndices.unshift(0);\n\n return {\n type: 'LineString',\n positions: {value: concatenatedPositions, size: dimension},\n pathIndices: {value: new Uint16Array(pathIndices), size: 1}\n };\n}\n\nfunction concatenateBinaryPolygonGeometries(\n binaryPolygonGeometries: BinaryPolygonGeometry[],\n dimension: number\n): BinaryPolygonGeometry {\n const polygons: TypedArray[] = [];\n const primitivePolygons: TypedArray[] = [];\n\n for (const binaryPolygon of binaryPolygonGeometries) {\n const {positions, primitivePolygonIndices} = binaryPolygon;\n polygons.push(positions.value);\n primitivePolygons.push(primitivePolygonIndices.value);\n }\n\n const concatenatedPositions = new Float64Array(concatTypedArrays(polygons).buffer);\n const polygonIndices = polygons.map((p) => p.length / dimension).map(cumulativeSum(0));\n polygonIndices.unshift(0);\n\n // Combine primitivePolygonIndices from each individual polygon\n const primitivePolygonIndices = [0];\n for (const primitivePolygon of primitivePolygons) {\n primitivePolygonIndices.push(\n ...primitivePolygon\n .filter((x: number) => x > 0)\n .map((x: number) => x + primitivePolygonIndices[primitivePolygonIndices.length - 1])\n );\n }\n\n return {\n type: 'Polygon',\n positions: {value: concatenatedPositions, size: dimension},\n polygonIndices: {value: new Uint16Array(polygonIndices), size: 1},\n primitivePolygonIndices: {value: new Uint16Array(primitivePolygonIndices), size: 1}\n };\n}\n\n// TODO: remove copy; import from typed-array-utils\n// modules/math/src/geometry/typed-arrays/typed-array-utils.js\nfunction concatTypedArrays(arrays: TypedArray[]): TypedArray {\n let byteLength = 0;\n for (let i = 0; i < arrays.length; ++i) {\n byteLength += arrays[i].byteLength;\n }\n const buffer = new Uint8Array(byteLength);\n\n let byteOffset = 0;\n for (let i = 0; i < arrays.length; ++i) {\n const data = new Uint8Array(arrays[i].buffer);\n byteLength = data.length;\n for (let j = 0; j < byteLength; ++j) {\n buffer[byteOffset++] = data[j];\n }\n }\n return buffer;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.parseWKTCRS = parseWKTCRS;
|
|
7
|
+
function parseWKTCRS(wkt, options) {
|
|
8
|
+
if (options !== null && options !== void 0 && options.debug) {
|
|
9
|
+
console.log('[wktcrs] parse starting with\n', wkt);
|
|
10
|
+
}
|
|
11
|
+
wkt = wkt.replace(/[A-Z][A-Z\d_]+\[/gi, function (match) {
|
|
12
|
+
return "[\"".concat(match.substr(0, match.length - 1), "\",");
|
|
13
|
+
});
|
|
14
|
+
wkt = wkt.replace(/, ?([A-Z][A-Z\d_]+[,\]])/gi, function (match, p1) {
|
|
15
|
+
var varname = p1.substr(0, p1.length - 1);
|
|
16
|
+
return ',' + "\"".concat(options !== null && options !== void 0 && options.raw ? 'raw:' : '').concat(varname, "\"").concat(p1[p1.length - 1]);
|
|
17
|
+
});
|
|
18
|
+
if (options !== null && options !== void 0 && options.raw) {
|
|
19
|
+
wkt = wkt.replace(/, {0,2}(-?[\.\d]+)(?=,|\])/g, function (match, p1) {
|
|
20
|
+
return ',' + "\"".concat(options !== null && options !== void 0 && options.raw ? 'raw:' : '').concat(p1, "\"");
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
if (options !== null && options !== void 0 && options.debug) {
|
|
24
|
+
console.log("[wktcrs] json'd wkt: '".concat(wkt, "'"));
|
|
25
|
+
}
|
|
26
|
+
var data;
|
|
27
|
+
try {
|
|
28
|
+
data = JSON.parse(wkt);
|
|
29
|
+
} catch (error) {
|
|
30
|
+
console.error("[wktcrs] failed to parse '".concat(wkt, "'"));
|
|
31
|
+
throw error;
|
|
32
|
+
}
|
|
33
|
+
if (options !== null && options !== void 0 && options.debug) {
|
|
34
|
+
console.log("[wktcrs] json parsed: '".concat(wkt, "'"));
|
|
35
|
+
}
|
|
36
|
+
function process(data, parent) {
|
|
37
|
+
var kw = data[0];
|
|
38
|
+
data.forEach(function (it) {
|
|
39
|
+
if (Array.isArray(it)) {
|
|
40
|
+
process(it, data);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
var kwarr = "MULTIPLE_".concat(kw);
|
|
44
|
+
if (kwarr in parent) {
|
|
45
|
+
parent[kwarr].push(data);
|
|
46
|
+
} else if (kw in parent) {
|
|
47
|
+
parent[kwarr] = [parent[kw], data];
|
|
48
|
+
delete parent[kw];
|
|
49
|
+
} else {
|
|
50
|
+
parent[kw] = data;
|
|
51
|
+
}
|
|
52
|
+
return parent;
|
|
53
|
+
}
|
|
54
|
+
var result = process(data, [data]);
|
|
55
|
+
if (options !== null && options !== void 0 && options.debug) {
|
|
56
|
+
console.log('[wktcrs] parse returning', result);
|
|
57
|
+
}
|
|
58
|
+
if (options !== null && options !== void 0 && options.sort) {
|
|
59
|
+
sort(result, options);
|
|
60
|
+
}
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
function sort(data, options) {
|
|
64
|
+
var keys = Object.keys(data).filter(function (k) {
|
|
65
|
+
return !/\d+/.test(k);
|
|
66
|
+
});
|
|
67
|
+
var keywords = (options === null || options === void 0 ? void 0 : options.keywords) || [];
|
|
68
|
+
if (!(options !== null && options !== void 0 && options.keywords)) {
|
|
69
|
+
var counts = {};
|
|
70
|
+
if (Array.isArray(data)) {
|
|
71
|
+
data.forEach(function (it) {
|
|
72
|
+
if (Array.isArray(it) && it.length >= 2 && typeof it[1] === 'string') {
|
|
73
|
+
var k = it[0];
|
|
74
|
+
if (!counts[k]) counts[k] = 0;
|
|
75
|
+
counts[k]++;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
for (var k in counts) {
|
|
79
|
+
if (counts[k] > 0) keywords.push(k);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
keys.forEach(function (key) {
|
|
84
|
+
data[key] = sort(data[key]);
|
|
85
|
+
});
|
|
86
|
+
keywords.forEach(function (key) {
|
|
87
|
+
var indices = [];
|
|
88
|
+
var params = [];
|
|
89
|
+
data.forEach(function (item, i) {
|
|
90
|
+
if (Array.isArray(item) && item[0] === key) {
|
|
91
|
+
indices.push(i);
|
|
92
|
+
params.push(item);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
params.sort(function (a, b) {
|
|
96
|
+
a = a[1].toString();
|
|
97
|
+
b = b[1].toString();
|
|
98
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
99
|
+
});
|
|
100
|
+
params.forEach(function (param, i) {
|
|
101
|
+
data[indices[i]] = param;
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
return data;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=parse-wkt-crs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-wkt-crs.js","names":["parseWKTCRS","wkt","options","debug","console","log","replace","match","concat","substr","length","p1","varname","raw","data","JSON","parse","error","process","parent","kw","forEach","it","Array","isArray","kwarr","push","result","sort","keys","Object","filter","k","test","keywords","counts","key","indices","params","item","i","a","b","toString","param"],"sources":["../../../src/lib/parse-wkt-crs.ts"],"sourcesContent":["// loaders.gl, MIT license\n// parse-wkt-crs was forked from https://github.com/DanielJDufour/wkt-crs under Creative Commons CC0 1.0 license.\n\n/* eslint-disable no-console */ // TODO switch to options.log\n\nexport type ParseWKTCRSOptions = {\n sort?: boolean;\n keywords?: string[];\n raw?: boolean;\n debug?: boolean;\n};\n\nexport type WKTCRS = any;\n\n/**\n *\n * @param wkt\n * @param options\n * @returns\n */\nexport function parseWKTCRS(wkt: string, options?: ParseWKTCRSOptions): WKTCRS {\n if (options?.debug) {\n console.log('[wktcrs] parse starting with\\n', wkt);\n }\n\n // move all keywords into first array item slot\n // from PARAM[12345, 67890] to [\"PARAM\", 12345, 67890]\n wkt = wkt.replace(/[A-Z][A-Z\\d_]+\\[/gi, (match) => `[\"${match.substr(0, match.length - 1)}\",`);\n\n // wrap variables in strings\n // from [...,NORTH] to [...,\"NORTH\"]\n wkt = wkt.replace(/, ?([A-Z][A-Z\\d_]+[,\\]])/gi, (match, p1) => {\n const varname = p1.substr(0, p1.length - 1);\n return ',' + `\"${options?.raw ? 'raw:' : ''}${varname}\"${p1[p1.length - 1]}`;\n });\n\n if (options?.raw) {\n // replace all numbers with strings\n wkt = wkt.replace(/, {0,2}(-?[\\.\\d]+)(?=,|\\])/g, function (match, p1) {\n return ',' + `\"${options?.raw ? 'raw:' : ''}${p1}\"`;\n });\n }\n\n // str should now be valid JSON\n if (options?.debug) {\n console.log(`[wktcrs] json'd wkt: '${wkt}'`);\n }\n\n let data;\n try {\n data = JSON.parse(wkt);\n } catch (error) {\n console.error(`[wktcrs] failed to parse '${wkt}'`);\n throw error;\n }\n\n if (options?.debug) {\n console.log(`[wktcrs] json parsed: '${wkt}'`);\n }\n\n function process(data, parent) {\n const kw = data[0];\n\n // after removing the first element with .shift()\n // data is now just an array of attributes\n\n data.forEach(function (it) {\n if (Array.isArray(it)) {\n process(it, data);\n }\n });\n\n const kwarr = `MULTIPLE_${kw}`;\n\n if (kwarr in parent) {\n parent[kwarr].push(data);\n } else if (kw in parent) {\n parent[kwarr] = [parent[kw], data];\n delete parent[kw];\n } else {\n parent[kw] = data;\n }\n return parent;\n }\n\n const result = process(data, [data]);\n if (options?.debug) {\n console.log('[wktcrs] parse returning', result);\n }\n\n if (options?.sort) {\n sort(result, options);\n }\n\n return result;\n}\n\nfunction sort(data: string[], options?: {keywords?: string[]}) {\n const keys = Object.keys(data).filter((k) => !/\\d+/.test(k));\n\n const keywords: string[] = options?.keywords || [];\n if (!options?.keywords) {\n // try to find multiples\n const counts = {};\n if (Array.isArray(data)) {\n data.forEach((it) => {\n if (Array.isArray(it) && it.length >= 2 && typeof it[1] === 'string') {\n const k = it[0];\n if (!counts[k]) counts[k] = 0;\n counts[k]++;\n }\n });\n for (const k in counts) {\n if (counts[k] > 0) keywords.push(k);\n }\n }\n }\n\n keys.forEach((key) => {\n data[key] = sort(data[key]);\n });\n\n keywords.forEach((key) => {\n const indices: number[] = [];\n const params: string[] = [];\n\n data.forEach((item, i) => {\n if (Array.isArray(item) && item[0] === key) {\n indices.push(i);\n params.push(item);\n }\n });\n\n params.sort((a, b) => {\n a = a[1].toString();\n b = b[1].toString();\n return a < b ? -1 : a > b ? 1 : 0;\n });\n\n // replace in order\n params.forEach((param, i) => {\n data[indices[i]] = param;\n });\n });\n\n return data;\n}\n"],"mappings":"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"}
|