@loaders.gl/shapefile 3.3.2 → 3.4.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -739,7 +739,7 @@
739
739
  }
740
740
 
741
741
  // src/dbf-loader.ts
742
- var VERSION = true ? "3.3.2" : "latest";
742
+ var VERSION = true ? "3.4.0-alpha.2" : "latest";
743
743
  var DBFWorkerLoader = {
744
744
  name: "DBF",
745
745
  id: "dbf",
@@ -11,7 +11,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
11
11
  var _parseDbf = require("./lib/parsers/parse-dbf");
12
12
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
13
13
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
14
- var VERSION = typeof "3.3.2" !== 'undefined' ? "3.3.2" : 'latest';
14
+ var VERSION = typeof "3.4.0-alpha.2" !== 'undefined' ? "3.4.0-alpha.2" : 'latest';
15
15
 
16
16
  var DBFWorkerLoader = {
17
17
  name: 'DBF',
@@ -1 +1 @@
1
- {"version":3,"file":"dbf-loader.js","names":["VERSION","DBFWorkerLoader","name","id","module","version","worker","category","extensions","mimeTypes","options","dbf","encoding","DBFLoader","parse","arrayBuffer","parseDBF","parseSync","parseInBatches","parseDBFInBatches"],"sources":["../../src/dbf-loader.ts"],"sourcesContent":["import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {parseDBF, parseDBFInBatches} from './lib/parsers/parse-dbf';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/**\n * DBFLoader - DBF files are used to contain non-geometry columns in Shapefiles\n */\nexport const DBFWorkerLoader: Loader = {\n name: 'DBF',\n id: 'dbf',\n module: 'shapefile',\n version: VERSION,\n worker: true,\n category: 'table',\n extensions: ['dbf'],\n mimeTypes: ['application/x-dbf'],\n options: {\n dbf: {\n encoding: 'latin1'\n }\n }\n};\n\n/** DBF file loader */\nexport const DBFLoader: LoaderWithParser = {\n ...DBFWorkerLoader,\n parse: async (arrayBuffer, options) => parseDBF(arrayBuffer, options),\n parseSync: parseDBF,\n parseInBatches: parseDBFInBatches\n};\n"],"mappings":";;;;;;;;;;AACA;AAAoE;AAAA;AAIpE,IAAMA,OAAO,GAAG,cAAkB,KAAK,WAAW,aAAiB,QAAQ;;AAKpE,IAAMC,eAAuB,GAAG;EACrCC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,WAAW;EACnBC,OAAO,EAAEL,OAAO;EAChBM,MAAM,EAAE,IAAI;EACZC,QAAQ,EAAE,OAAO;EACjBC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,mBAAmB,CAAC;EAChCC,OAAO,EAAE;IACPC,GAAG,EAAE;MACHC,QAAQ,EAAE;IACZ;EACF;AACF,CAAC;;AAAC;AAGK,IAAMC,SAA2B,mCACnCZ,eAAe;EAClBa,KAAK;IAAA,uEAAE,iBAAOC,WAAW,EAAEL,OAAO;MAAA;QAAA;UAAA;YAAA;cAAA,iCAAK,IAAAM,kBAAQ,EAACD,WAAW,EAAEL,OAAO,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA;IAAA;MAAA;IAAA;IAAA;EAAA;EACrEO,SAAS,EAAED,kBAAQ;EACnBE,cAAc,EAAEC;AAAiB,EAClC;AAAC"}
1
+ {"version":3,"file":"dbf-loader.js","names":["VERSION","DBFWorkerLoader","name","id","module","version","worker","category","extensions","mimeTypes","options","dbf","encoding","DBFLoader","parse","arrayBuffer","parseDBF","parseSync","parseInBatches","parseDBFInBatches"],"sources":["../../src/dbf-loader.ts"],"sourcesContent":["import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {parseDBF, parseDBFInBatches} from './lib/parsers/parse-dbf';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/**\n * DBFLoader - DBF files are used to contain non-geometry columns in Shapefiles\n */\nexport const DBFWorkerLoader: Loader = {\n name: 'DBF',\n id: 'dbf',\n module: 'shapefile',\n version: VERSION,\n worker: true,\n category: 'table',\n extensions: ['dbf'],\n mimeTypes: ['application/x-dbf'],\n options: {\n dbf: {\n encoding: 'latin1'\n }\n }\n};\n\n/** DBF file loader */\nexport const DBFLoader: LoaderWithParser = {\n ...DBFWorkerLoader,\n parse: async (arrayBuffer, options) => parseDBF(arrayBuffer, options),\n parseSync: parseDBF,\n parseInBatches: parseDBFInBatches\n};\n"],"mappings":";;;;;;;;;;AACA;AAAoE;AAAA;AAIpE,IAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;;AAKpE,IAAMC,eAAuB,GAAG;EACrCC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,WAAW;EACnBC,OAAO,EAAEL,OAAO;EAChBM,MAAM,EAAE,IAAI;EACZC,QAAQ,EAAE,OAAO;EACjBC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,mBAAmB,CAAC;EAChCC,OAAO,EAAE;IACPC,GAAG,EAAE;MACHC,QAAQ,EAAE;IACZ;EACF;AACF,CAAC;;AAAC;AAGK,IAAMC,SAA2B,mCACnCZ,eAAe;EAClBa,KAAK;IAAA,uEAAE,iBAAOC,WAAW,EAAEL,OAAO;MAAA;QAAA;UAAA;YAAA;cAAA,iCAAK,IAAAM,kBAAQ,EAACD,WAAW,EAAEL,OAAO,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA;IAAA;MAAA;IAAA;IAAA;EAAA;EACrEO,SAAS,EAAED,kBAAQ;EACnBE,cAAc,EAAEC;AAAiB,EAClC;AAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"parse-shp.js","names":["LITTLE_ENDIAN","BIG_ENDIAN","SHP_HEADER_SIZE","SHP_RECORD_HEADER_SIZE","STATE","EXPECTING_HEADER","EXPECTING_RECORD","END","ERROR","SHPParser","options","BinaryChunkReader","maxRewindBytes","geometries","progress","bytesTotal","NaN","bytesUsed","rows","currentIndex","arrayBuffer","binaryReader","write","state","parseState","result","end","error","parseSHP","shpParser","parseSHPInBatches","asyncIterator","parser","headerReturned","header","length","dataView","getDataView","parseSHPHeader","hasAvailableBytes","recordHeaderView","recordHeader","recordNumber","getInt32","byteLength","type","rewind","invalidRecord","recordView","geometry","parseRecord","push","ended","message"],"sources":["../../../../src/lib/parsers/parse-shp.ts"],"sourcesContent":["import type {BinaryGeometry} from '@loaders.gl/schema';\nimport BinaryChunkReader from '../streaming/binary-chunk-reader';\nimport {parseSHPHeader, SHPHeader} from './parse-shp-header';\nimport {parseRecord} from './parse-shp-geometry';\nimport {SHPLoaderOptions} from './types';\n\nconst LITTLE_ENDIAN = true;\nconst BIG_ENDIAN = false;\n\nconst SHP_HEADER_SIZE = 100;\n// According to the spec, the record header is just 8 bytes, but here we set it\n// to 12 so that we can also access the record's type\nconst SHP_RECORD_HEADER_SIZE = 12;\n\nconst STATE = {\n EXPECTING_HEADER: 0,\n EXPECTING_RECORD: 1,\n END: 2,\n ERROR: 3\n};\n\ntype SHPResult = {\n geometries: (BinaryGeometry | null)[];\n header?: SHPHeader;\n error?: string;\n progress: {\n bytesUsed: number;\n bytesTotal: number;\n rows: number;\n };\n currentIndex: number;\n};\n\nclass SHPParser {\n options?: SHPLoaderOptions = {};\n binaryReader = new BinaryChunkReader({maxRewindBytes: SHP_RECORD_HEADER_SIZE});\n state = STATE.EXPECTING_HEADER;\n result: SHPResult = {\n geometries: [],\n // Initialize with number values to make TS happy\n // These are initialized for real in STATE.EXPECTING_HEADER\n progress: {\n bytesTotal: NaN,\n bytesUsed: NaN,\n rows: NaN\n },\n currentIndex: NaN\n };\n\n constructor(options?: SHPLoaderOptions) {\n this.options = options;\n }\n\n write(arrayBuffer: ArrayBuffer) {\n this.binaryReader.write(arrayBuffer);\n this.state = parseState(this.state, this.result, this.binaryReader, this.options);\n }\n\n end() {\n this.binaryReader.end();\n this.state = parseState(this.state, this.result, this.binaryReader, this.options);\n // this.result.progress.bytesUsed = this.binaryReader.bytesUsed();\n if (this.state !== STATE.END) {\n this.state = STATE.ERROR;\n this.result.error = 'SHP incomplete file';\n }\n }\n}\n\nexport function parseSHP(arrayBuffer: ArrayBuffer, options?: object): BinaryGeometry[] {\n const shpParser = new SHPParser(options);\n shpParser.write(arrayBuffer);\n shpParser.end();\n\n // @ts-ignore\n return shpParser.result;\n}\n\n/**\n * @param asyncIterator\n * @param options\n * @returns\n */\nexport async function* parseSHPInBatches(\n asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options?: object\n): AsyncIterable<BinaryGeometry | object> {\n const parser = new SHPParser(options);\n let headerReturned = false;\n for await (const arrayBuffer of asyncIterator) {\n parser.write(arrayBuffer);\n if (!headerReturned && parser.result.header) {\n headerReturned = true;\n yield parser.result.header;\n }\n\n if (parser.result.geometries.length > 0) {\n yield parser.result.geometries;\n parser.result.geometries = [];\n }\n }\n parser.end();\n if (parser.result.geometries.length > 0) {\n yield parser.result.geometries;\n }\n\n return;\n}\n\n/**\n * State-machine parser for SHP data\n *\n * Note that whenever more data is needed, a `return`, not a `break`, is\n * necessary, as the `break` keeps the context within `parseState`, while\n * `return` releases context so that more data can be written into the\n * BinaryChunkReader.\n *\n * @param state Current state\n * @param result An object to hold result data\n * @param binaryReader\n * @return State at end of current parsing\n */\n/* eslint-disable complexity, max-depth */\nfunction parseState(\n state: number,\n result: SHPResult,\n binaryReader: BinaryChunkReader,\n options?: SHPLoaderOptions\n): number {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n switch (state) {\n case STATE.ERROR:\n case STATE.END:\n return state;\n\n case STATE.EXPECTING_HEADER:\n // Parse initial file header\n const dataView = binaryReader.getDataView(SHP_HEADER_SIZE);\n if (!dataView) {\n return state;\n }\n\n result.header = parseSHPHeader(dataView);\n result.progress = {\n bytesUsed: 0,\n bytesTotal: result.header.length,\n rows: 0\n };\n // index numbering starts at 1\n result.currentIndex = 1;\n state = STATE.EXPECTING_RECORD;\n break;\n\n case STATE.EXPECTING_RECORD:\n while (binaryReader.hasAvailableBytes(SHP_RECORD_HEADER_SIZE)) {\n const recordHeaderView = binaryReader.getDataView(SHP_RECORD_HEADER_SIZE) as DataView;\n const recordHeader = {\n recordNumber: recordHeaderView.getInt32(0, BIG_ENDIAN),\n // 2 byte words; includes the four words of record header\n byteLength: recordHeaderView.getInt32(4, BIG_ENDIAN) * 2,\n // This is actually part of the record, not the header...\n type: recordHeaderView.getInt32(8, LITTLE_ENDIAN)\n };\n\n if (!binaryReader.hasAvailableBytes(recordHeader.byteLength - 4)) {\n binaryReader.rewind(SHP_RECORD_HEADER_SIZE);\n return state;\n }\n\n const invalidRecord =\n recordHeader.byteLength < 4 ||\n recordHeader.type !== result.header?.type ||\n recordHeader.recordNumber !== result.currentIndex;\n\n // All records must have at least four bytes (for the record shape type)\n if (invalidRecord) {\n // Malformed record, try again, advancing just 4 bytes\n // Note: this is a rewind because binaryReader.getDataView above\n // moved the pointer forward 12 bytes, so rewinding 8 bytes still\n // leaves us 4 bytes ahead\n binaryReader.rewind(SHP_RECORD_HEADER_SIZE - 4);\n } else {\n // Note: type is actually part of the record, not the header, so\n // rewind 4 bytes before reading record\n binaryReader.rewind(4);\n\n const recordView = binaryReader.getDataView(recordHeader.byteLength) as DataView;\n const geometry = parseRecord(recordView, options);\n result.geometries.push(geometry);\n\n result.currentIndex++;\n result.progress.rows = result.currentIndex - 1;\n }\n }\n\n if (binaryReader.ended) {\n state = STATE.END;\n }\n\n return state;\n\n default:\n state = STATE.ERROR;\n result.error = `illegal parser state ${state}`;\n return state;\n }\n } catch (error) {\n state = STATE.ERROR;\n result.error = `SHP parsing failed: ${(error as Error)?.message}`;\n return state;\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AACA;AACA;AACA;AAAiD;AAAA;AAGjD,IAAMA,aAAa,GAAG,IAAI;AAC1B,IAAMC,UAAU,GAAG,KAAK;AAExB,IAAMC,eAAe,GAAG,GAAG;AAG3B,IAAMC,sBAAsB,GAAG,EAAE;AAEjC,IAAMC,KAAK,GAAG;EACZC,gBAAgB,EAAE,CAAC;EACnBC,gBAAgB,EAAE,CAAC;EACnBC,GAAG,EAAE,CAAC;EACNC,KAAK,EAAE;AACT,CAAC;AAAC,IAcIC,SAAS;EAgBb,mBAAYC,OAA0B,EAAE;IAAA;IAAA,+CAfX,CAAC,CAAC;IAAA,oDAChB,IAAIC,0BAAiB,CAAC;MAACC,cAAc,EAAET;IAAsB,CAAC,CAAC;IAAA,6CACtEC,KAAK,CAACC,gBAAgB;IAAA,8CACV;MAClBQ,UAAU,EAAE,EAAE;MAGdC,QAAQ,EAAE;QACRC,UAAU,EAAEC,GAAG;QACfC,SAAS,EAAED,GAAG;QACdE,IAAI,EAAEF;MACR,CAAC;MACDG,YAAY,EAAEH;IAChB,CAAC;IAGC,IAAI,CAACN,OAAO,GAAGA,OAAO;EACxB;EAAC;IAAA;IAAA,OAED,eAAMU,WAAwB,EAAE;MAC9B,IAAI,CAACC,YAAY,CAACC,KAAK,CAACF,WAAW,CAAC;MACpC,IAAI,CAACG,KAAK,GAAGC,UAAU,CAAC,IAAI,CAACD,KAAK,EAAE,IAAI,CAACE,MAAM,EAAE,IAAI,CAACJ,YAAY,EAAE,IAAI,CAACX,OAAO,CAAC;IACnF;EAAC;IAAA;IAAA,OAED,eAAM;MACJ,IAAI,CAACW,YAAY,CAACK,GAAG,EAAE;MACvB,IAAI,CAACH,KAAK,GAAGC,UAAU,CAAC,IAAI,CAACD,KAAK,EAAE,IAAI,CAACE,MAAM,EAAE,IAAI,CAACJ,YAAY,EAAE,IAAI,CAACX,OAAO,CAAC;MAEjF,IAAI,IAAI,CAACa,KAAK,KAAKnB,KAAK,CAACG,GAAG,EAAE;QAC5B,IAAI,CAACgB,KAAK,GAAGnB,KAAK,CAACI,KAAK;QACxB,IAAI,CAACiB,MAAM,CAACE,KAAK,GAAG,qBAAqB;MAC3C;IACF;EAAC;EAAA;AAAA;AAGI,SAASC,QAAQ,CAACR,WAAwB,EAAEV,OAAgB,EAAoB;EACrF,IAAMmB,SAAS,GAAG,IAAIpB,SAAS,CAACC,OAAO,CAAC;EACxCmB,SAAS,CAACP,KAAK,CAACF,WAAW,CAAC;EAC5BS,SAAS,CAACH,GAAG,EAAE;;EAGf,OAAOG,SAAS,CAACJ,MAAM;AACzB;;AAAC,SAOsBK,iBAAiB;EAAA;AAAA;AAAA;EAAA,iFAAjC,iBACLC,aAAiE,EACjErB,OAAgB;IAAA;IAAA;MAAA;QAAA;UAAA;YAEVsB,MAAM,GAAG,IAAIvB,SAAS,CAACC,OAAO,CAAC;YACjCuB,cAAc,GAAG,KAAK;YAAA;YAAA;YAAA;YAAA,2BACMF,aAAa;UAAA;YAAA;YAAA;UAAA;YAAA;cAAA;cAAA;YAAA;YAA5BX,WAAW;YAC1BY,MAAM,CAACV,KAAK,CAACF,WAAW,CAAC;YAAC,MACtB,CAACa,cAAc,IAAID,MAAM,CAACP,MAAM,CAACS,MAAM;cAAA;cAAA;YAAA;YACzCD,cAAc,GAAG,IAAI;YAAC;YACtB,OAAMD,MAAM,CAACP,MAAM,CAACS,MAAM;UAAA;YAAA,MAGxBF,MAAM,CAACP,MAAM,CAACZ,UAAU,CAACsB,MAAM,GAAG,CAAC;cAAA;cAAA;YAAA;YAAA;YACrC,OAAMH,MAAM,CAACP,MAAM,CAACZ,UAAU;UAAA;YAC9BmB,MAAM,CAACP,MAAM,CAACZ,UAAU,GAAG,EAAE;UAAC;YAAA;YAAA;YAAA;UAAA;YAAA;YAAA;UAAA;YAAA;YAAA;YAAA;YAAA;UAAA;YAAA;YAAA;YAAA;cAAA;cAAA;YAAA;YAAA;YAAA;UAAA;YAAA;YAAA;cAAA;cAAA;YAAA;YAAA;UAAA;YAAA;UAAA;YAAA;UAAA;YAGlCmB,MAAM,CAACN,GAAG,EAAE;YAAC,MACTM,MAAM,CAACP,MAAM,CAACZ,UAAU,CAACsB,MAAM,GAAG,CAAC;cAAA;cAAA;YAAA;YAAA;YACrC,OAAMH,MAAM,CAACP,MAAM,CAACZ,UAAU;UAAA;YAAA;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EAAA,CAIjC;EAAA;AAAA;AAgBD,SAASW,UAAU,CACjBD,KAAa,EACbE,MAAiB,EACjBJ,YAA+B,EAC/BX,OAA0B,EAClB;EAER,OAAO,IAAI,EAAE;IACX,IAAI;MACF,QAAQa,KAAK;QACX,KAAKnB,KAAK,CAACI,KAAK;QAChB,KAAKJ,KAAK,CAACG,GAAG;UACZ,OAAOgB,KAAK;QAEd,KAAKnB,KAAK,CAACC,gBAAgB;UAEzB,IAAM+B,QAAQ,GAAGf,YAAY,CAACgB,WAAW,CAACnC,eAAe,CAAC;UAC1D,IAAI,CAACkC,QAAQ,EAAE;YACb,OAAOb,KAAK;UACd;UAEAE,MAAM,CAACS,MAAM,GAAG,IAAAI,8BAAc,EAACF,QAAQ,CAAC;UACxCX,MAAM,CAACX,QAAQ,GAAG;YAChBG,SAAS,EAAE,CAAC;YACZF,UAAU,EAAEU,MAAM,CAACS,MAAM,CAACC,MAAM;YAChCjB,IAAI,EAAE;UACR,CAAC;UAEDO,MAAM,CAACN,YAAY,GAAG,CAAC;UACvBI,KAAK,GAAGnB,KAAK,CAACE,gBAAgB;UAC9B;QAEF,KAAKF,KAAK,CAACE,gBAAgB;UACzB,OAAOe,YAAY,CAACkB,iBAAiB,CAACpC,sBAAsB,CAAC,EAAE;YAAA;YAC7D,IAAMqC,gBAAgB,GAAGnB,YAAY,CAACgB,WAAW,CAAClC,sBAAsB,CAAa;YACrF,IAAMsC,YAAY,GAAG;cACnBC,YAAY,EAAEF,gBAAgB,CAACG,QAAQ,CAAC,CAAC,EAAE1C,UAAU,CAAC;cAEtD2C,UAAU,EAAEJ,gBAAgB,CAACG,QAAQ,CAAC,CAAC,EAAE1C,UAAU,CAAC,GAAG,CAAC;cAExD4C,IAAI,EAAEL,gBAAgB,CAACG,QAAQ,CAAC,CAAC,EAAE3C,aAAa;YAClD,CAAC;YAED,IAAI,CAACqB,YAAY,CAACkB,iBAAiB,CAACE,YAAY,CAACG,UAAU,GAAG,CAAC,CAAC,EAAE;cAChEvB,YAAY,CAACyB,MAAM,CAAC3C,sBAAsB,CAAC;cAC3C,OAAOoB,KAAK;YACd;YAEA,IAAMwB,aAAa,GACjBN,YAAY,CAACG,UAAU,GAAG,CAAC,IAC3BH,YAAY,CAACI,IAAI,wBAAKpB,MAAM,CAACS,MAAM,mDAAb,eAAeW,IAAI,KACzCJ,YAAY,CAACC,YAAY,KAAKjB,MAAM,CAACN,YAAY;;YAGnD,IAAI4B,aAAa,EAAE;cAKjB1B,YAAY,CAACyB,MAAM,CAAC3C,sBAAsB,GAAG,CAAC,CAAC;YACjD,CAAC,MAAM;cAGLkB,YAAY,CAACyB,MAAM,CAAC,CAAC,CAAC;cAEtB,IAAME,UAAU,GAAG3B,YAAY,CAACgB,WAAW,CAACI,YAAY,CAACG,UAAU,CAAa;cAChF,IAAMK,QAAQ,GAAG,IAAAC,6BAAW,EAACF,UAAU,EAAEtC,OAAO,CAAC;cACjDe,MAAM,CAACZ,UAAU,CAACsC,IAAI,CAACF,QAAQ,CAAC;cAEhCxB,MAAM,CAACN,YAAY,EAAE;cACrBM,MAAM,CAACX,QAAQ,CAACI,IAAI,GAAGO,MAAM,CAACN,YAAY,GAAG,CAAC;YAChD;UACF;UAEA,IAAIE,YAAY,CAAC+B,KAAK,EAAE;YACtB7B,KAAK,GAAGnB,KAAK,CAACG,GAAG;UACnB;UAEA,OAAOgB,KAAK;QAEd;UACEA,KAAK,GAAGnB,KAAK,CAACI,KAAK;UACnBiB,MAAM,CAACE,KAAK,kCAA2BJ,KAAK,CAAE;UAC9C,OAAOA,KAAK;MAAC;IAEnB,CAAC,CAAC,OAAOI,KAAK,EAAE;MACdJ,KAAK,GAAGnB,KAAK,CAACI,KAAK;MACnBiB,MAAM,CAACE,KAAK,iCAA2BA,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAY0B,OAAO,CAAE;MACjE,OAAO9B,KAAK;IACd;EACF;AACF"}
1
+ {"version":3,"file":"parse-shp.js","names":["LITTLE_ENDIAN","BIG_ENDIAN","SHP_HEADER_SIZE","SHP_RECORD_HEADER_SIZE","STATE","EXPECTING_HEADER","EXPECTING_RECORD","END","ERROR","SHPParser","options","BinaryChunkReader","maxRewindBytes","geometries","progress","bytesTotal","NaN","bytesUsed","rows","currentIndex","arrayBuffer","binaryReader","write","state","parseState","result","end","error","parseSHP","shpParser","parseSHPInBatches","asyncIterator","parser","headerReturned","header","length","dataView","getDataView","parseSHPHeader","hasAvailableBytes","recordHeaderView","recordHeader","recordNumber","getInt32","byteLength","type","rewind","invalidRecord","recordView","geometry","parseRecord","push","ended","message"],"sources":["../../../../src/lib/parsers/parse-shp.ts"],"sourcesContent":["import type {BinaryGeometry} from '@loaders.gl/schema';\nimport BinaryChunkReader from '../streaming/binary-chunk-reader';\nimport {parseSHPHeader, SHPHeader} from './parse-shp-header';\nimport {parseRecord} from './parse-shp-geometry';\nimport {SHPLoaderOptions} from './types';\n\nconst LITTLE_ENDIAN = true;\nconst BIG_ENDIAN = false;\n\nconst SHP_HEADER_SIZE = 100;\n// According to the spec, the record header is just 8 bytes, but here we set it\n// to 12 so that we can also access the record's type\nconst SHP_RECORD_HEADER_SIZE = 12;\n\nconst STATE = {\n EXPECTING_HEADER: 0,\n EXPECTING_RECORD: 1,\n END: 2,\n ERROR: 3\n};\n\ntype SHPResult = {\n geometries: (BinaryGeometry | null)[];\n header?: SHPHeader;\n error?: string;\n progress: {\n bytesUsed: number;\n bytesTotal: number;\n rows: number;\n };\n currentIndex: number;\n};\n\nclass SHPParser {\n options?: SHPLoaderOptions = {};\n binaryReader = new BinaryChunkReader({maxRewindBytes: SHP_RECORD_HEADER_SIZE});\n state = STATE.EXPECTING_HEADER;\n result: SHPResult = {\n geometries: [],\n // Initialize with number values to make TS happy\n // These are initialized for real in STATE.EXPECTING_HEADER\n progress: {\n bytesTotal: NaN,\n bytesUsed: NaN,\n rows: NaN\n },\n currentIndex: NaN\n };\n\n constructor(options?: SHPLoaderOptions) {\n this.options = options;\n }\n\n write(arrayBuffer: ArrayBuffer) {\n this.binaryReader.write(arrayBuffer);\n this.state = parseState(this.state, this.result, this.binaryReader, this.options);\n }\n\n end() {\n this.binaryReader.end();\n this.state = parseState(this.state, this.result, this.binaryReader, this.options);\n // this.result.progress.bytesUsed = this.binaryReader.bytesUsed();\n if (this.state !== STATE.END) {\n this.state = STATE.ERROR;\n this.result.error = 'SHP incomplete file';\n }\n }\n}\n\nexport function parseSHP(arrayBuffer: ArrayBuffer, options?: SHPLoaderOptions): BinaryGeometry[] {\n const shpParser = new SHPParser(options);\n shpParser.write(arrayBuffer);\n shpParser.end();\n\n // @ts-ignore\n return shpParser.result;\n}\n\n/**\n * @param asyncIterator\n * @param options\n * @returns\n */\nexport async function* parseSHPInBatches(\n asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options?: SHPLoaderOptions\n): AsyncIterable<BinaryGeometry | object> {\n const parser = new SHPParser(options);\n let headerReturned = false;\n for await (const arrayBuffer of asyncIterator) {\n parser.write(arrayBuffer);\n if (!headerReturned && parser.result.header) {\n headerReturned = true;\n yield parser.result.header;\n }\n\n if (parser.result.geometries.length > 0) {\n yield parser.result.geometries;\n parser.result.geometries = [];\n }\n }\n parser.end();\n if (parser.result.geometries.length > 0) {\n yield parser.result.geometries;\n }\n\n return;\n}\n\n/**\n * State-machine parser for SHP data\n *\n * Note that whenever more data is needed, a `return`, not a `break`, is\n * necessary, as the `break` keeps the context within `parseState`, while\n * `return` releases context so that more data can be written into the\n * BinaryChunkReader.\n *\n * @param state Current state\n * @param result An object to hold result data\n * @param binaryReader\n * @return State at end of current parsing\n */\n/* eslint-disable complexity, max-depth */\nfunction parseState(\n state: number,\n result: SHPResult,\n binaryReader: BinaryChunkReader,\n options?: SHPLoaderOptions\n): number {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n switch (state) {\n case STATE.ERROR:\n case STATE.END:\n return state;\n\n case STATE.EXPECTING_HEADER:\n // Parse initial file header\n const dataView = binaryReader.getDataView(SHP_HEADER_SIZE);\n if (!dataView) {\n return state;\n }\n\n result.header = parseSHPHeader(dataView);\n result.progress = {\n bytesUsed: 0,\n bytesTotal: result.header.length,\n rows: 0\n };\n // index numbering starts at 1\n result.currentIndex = 1;\n state = STATE.EXPECTING_RECORD;\n break;\n\n case STATE.EXPECTING_RECORD:\n while (binaryReader.hasAvailableBytes(SHP_RECORD_HEADER_SIZE)) {\n const recordHeaderView = binaryReader.getDataView(SHP_RECORD_HEADER_SIZE) as DataView;\n const recordHeader = {\n recordNumber: recordHeaderView.getInt32(0, BIG_ENDIAN),\n // 2 byte words; includes the four words of record header\n byteLength: recordHeaderView.getInt32(4, BIG_ENDIAN) * 2,\n // This is actually part of the record, not the header...\n type: recordHeaderView.getInt32(8, LITTLE_ENDIAN)\n };\n\n if (!binaryReader.hasAvailableBytes(recordHeader.byteLength - 4)) {\n binaryReader.rewind(SHP_RECORD_HEADER_SIZE);\n return state;\n }\n\n const invalidRecord =\n recordHeader.byteLength < 4 ||\n recordHeader.type !== result.header?.type ||\n recordHeader.recordNumber !== result.currentIndex;\n\n // All records must have at least four bytes (for the record shape type)\n if (invalidRecord) {\n // Malformed record, try again, advancing just 4 bytes\n // Note: this is a rewind because binaryReader.getDataView above\n // moved the pointer forward 12 bytes, so rewinding 8 bytes still\n // leaves us 4 bytes ahead\n binaryReader.rewind(SHP_RECORD_HEADER_SIZE - 4);\n } else {\n // Note: type is actually part of the record, not the header, so\n // rewind 4 bytes before reading record\n binaryReader.rewind(4);\n\n const recordView = binaryReader.getDataView(recordHeader.byteLength) as DataView;\n const geometry = parseRecord(recordView, options);\n result.geometries.push(geometry);\n\n result.currentIndex++;\n result.progress.rows = result.currentIndex - 1;\n }\n }\n\n if (binaryReader.ended) {\n state = STATE.END;\n }\n\n return state;\n\n default:\n state = STATE.ERROR;\n result.error = `illegal parser state ${state}`;\n return state;\n }\n } catch (error) {\n state = STATE.ERROR;\n result.error = `SHP parsing failed: ${(error as Error)?.message}`;\n return state;\n }\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../src/lib/parsers/types.ts"],"sourcesContent":["import {Schema, ObjectRowTable} from '@loaders.gl/schema';\nimport type {LoaderOptions} from '@loaders.gl/loader-utils';\n\nexport type SHPLoaderOptions = LoaderOptions & {\n shp?: {\n _maxDimensions?: number;\n };\n};\n\nexport type DBFLoaderOptions = LoaderOptions & {\n dbf?: {\n encoding?: string;\n shape?: 'rows' | 'table' | 'object-row-table';\n };\n};\n\nexport type ShapefileLoaderOptions = LoaderOptions &\n SHPLoaderOptions & {\n shapefile?: {\n shape?: 'geojson';\n };\n gis?: {\n reproject?: boolean;\n _targetCrs?: string;\n /** @deprecated. Use options.shapefile.shape */\n format?: 'geojson';\n };\n };\n\nexport type DBFRowsOutput = ObjectRowTable['data'];\n\n/**\n * DBF Table output. Deprecated in favor of ObjectRowTable\n * @deprecated\n */\nexport interface DBFTableOutput {\n schema?: Schema;\n rows: DBFRowsOutput;\n}\n\nexport type DBFHeader = {\n // Last updated date\n year: number;\n month: number;\n day: number;\n // Number of records in data file\n nRecords: number;\n // Length of header in bytes\n headerLength: number;\n // Length of each record\n recordLength: number;\n // Not sure if this is usually set\n languageDriver: number;\n};\n\nexport type DBFField = {\n name: string;\n dataType: string;\n fieldLength: number;\n decimal: number;\n};\n\nexport type DBFResult = {\n data: {[key: string]: any}[];\n schema?: Schema;\n error?: string;\n dbfHeader?: DBFHeader;\n dbfFields?: DBFField[];\n progress?: {\n bytesUsed: number;\n rowsTotal: number;\n rows: number;\n };\n};\n"],"mappings":""}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../src/lib/parsers/types.ts"],"sourcesContent":["import {Schema, ObjectRowTable} from '@loaders.gl/schema';\nimport type {LoaderOptions} from '@loaders.gl/loader-utils';\n\nexport type SHPLoaderOptions = LoaderOptions & {\n shp?: {\n _maxDimensions?: number;\n };\n};\n\nexport type DBFLoaderOptions = LoaderOptions & {\n dbf?: {\n encoding?: string;\n shape?: 'rows' | 'table' | 'object-row-table';\n };\n /** @deprecated */\n tables?: {\n /** @deprecated */\n format?: 'rows' | 'table' | 'object-row-table';\n };\n};\n\nexport type ShapefileLoaderOptions = LoaderOptions &\n SHPLoaderOptions & {\n shapefile?: {\n shape?: 'geojson';\n };\n gis?: {\n reproject?: boolean;\n _targetCrs?: string;\n /** @deprecated. Use options.shapefile.shape */\n format?: 'geojson';\n };\n };\n\nexport type DBFRowsOutput = ObjectRowTable['data'];\n\n/**\n * DBF Table output. Deprecated in favor of ObjectRowTable\n * @deprecated\n */\nexport interface DBFTableOutput {\n schema?: Schema;\n rows: DBFRowsOutput;\n}\n\nexport type DBFHeader = {\n // Last updated date\n year: number;\n month: number;\n day: number;\n // Number of records in data file\n nRecords: number;\n // Length of header in bytes\n headerLength: number;\n // Length of each record\n recordLength: number;\n // Not sure if this is usually set\n languageDriver: number;\n};\n\nexport type DBFField = {\n name: string;\n dataType: string;\n fieldLength: number;\n decimal: number;\n};\n\nexport type DBFResult = {\n data: {[key: string]: any}[];\n schema?: Schema;\n error?: string;\n dbfHeader?: DBFHeader;\n dbfFields?: DBFField[];\n progress?: {\n bytesUsed: number;\n rowsTotal: number;\n rows: number;\n };\n};\n"],"mappings":""}
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports._typecheckShapefileLoader = exports.ShapefileLoader = void 0;
7
7
  var _shpLoader = require("./shp-loader");
8
8
  var _parseShapefile = require("./lib/parsers/parse-shapefile");
9
- var VERSION = typeof "3.3.2" !== 'undefined' ? "3.3.2" : 'latest';
9
+ var VERSION = typeof "3.4.0-alpha.2" !== 'undefined' ? "3.4.0-alpha.2" : 'latest';
10
10
 
11
11
  var ShapefileLoader = {
12
12
  name: 'Shapefile',
@@ -1 +1 @@
1
- {"version":3,"file":"shapefile-loader.js","names":["VERSION","ShapefileLoader","name","id","module","version","category","extensions","mimeTypes","tests","Uint8Array","SHP_MAGIC_NUMBER","buffer","options","shapefile","shp","_maxDimensions","parse","parseShapefile","parseInBatches","parseShapefileInBatches","_typecheckShapefileLoader"],"sources":["../../src/shapefile-loader.ts"],"sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {SHP_MAGIC_NUMBER} from './shp-loader';\nimport {parseShapefile, parseShapefileInBatches} from './lib/parsers/parse-shapefile';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/**\n * Shapefile loader\n * @note Shapefile is multifile format and requires providing additional files\n */\nexport const ShapefileLoader = {\n name: 'Shapefile',\n id: 'shapefile',\n module: 'shapefile',\n version: VERSION,\n category: 'geometry',\n extensions: ['shp'],\n mimeTypes: ['application/octet-stream'],\n tests: [new Uint8Array(SHP_MAGIC_NUMBER).buffer],\n options: {\n shapefile: {},\n shp: {\n _maxDimensions: 4\n }\n },\n parse: parseShapefile,\n parseInBatches: parseShapefileInBatches\n};\n\nexport const _typecheckShapefileLoader: LoaderWithParser = ShapefileLoader;\n"],"mappings":";;;;;;AACA;AACA;AAIA,IAAMA,OAAO,GAAG,cAAkB,KAAK,WAAW,aAAiB,QAAQ;;AAMpE,IAAMC,eAAe,GAAG;EAC7BC,IAAI,EAAE,WAAW;EACjBC,EAAE,EAAE,WAAW;EACfC,MAAM,EAAE,WAAW;EACnBC,OAAO,EAAEL,OAAO;EAChBM,QAAQ,EAAE,UAAU;EACpBC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,0BAA0B,CAAC;EACvCC,KAAK,EAAE,CAAC,IAAIC,UAAU,CAACC,2BAAgB,CAAC,CAACC,MAAM,CAAC;EAChDC,OAAO,EAAE;IACPC,SAAS,EAAE,CAAC,CAAC;IACbC,GAAG,EAAE;MACHC,cAAc,EAAE;IAClB;EACF,CAAC;EACDC,KAAK,EAAEC,8BAAc;EACrBC,cAAc,EAAEC;AAClB,CAAC;AAAC;AAEK,IAAMC,yBAA2C,GAAGpB,eAAe;AAAC"}
1
+ {"version":3,"file":"shapefile-loader.js","names":["VERSION","ShapefileLoader","name","id","module","version","category","extensions","mimeTypes","tests","Uint8Array","SHP_MAGIC_NUMBER","buffer","options","shapefile","shp","_maxDimensions","parse","parseShapefile","parseInBatches","parseShapefileInBatches","_typecheckShapefileLoader"],"sources":["../../src/shapefile-loader.ts"],"sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {SHP_MAGIC_NUMBER} from './shp-loader';\nimport {parseShapefile, parseShapefileInBatches} from './lib/parsers/parse-shapefile';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/**\n * Shapefile loader\n * @note Shapefile is multifile format and requires providing additional files\n */\nexport const ShapefileLoader = {\n name: 'Shapefile',\n id: 'shapefile',\n module: 'shapefile',\n version: VERSION,\n category: 'geometry',\n extensions: ['shp'],\n mimeTypes: ['application/octet-stream'],\n tests: [new Uint8Array(SHP_MAGIC_NUMBER).buffer],\n options: {\n shapefile: {},\n shp: {\n _maxDimensions: 4\n }\n },\n parse: parseShapefile,\n parseInBatches: parseShapefileInBatches\n};\n\nexport const _typecheckShapefileLoader: LoaderWithParser = ShapefileLoader;\n"],"mappings":";;;;;;AACA;AACA;AAIA,IAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;;AAMpE,IAAMC,eAAe,GAAG;EAC7BC,IAAI,EAAE,WAAW;EACjBC,EAAE,EAAE,WAAW;EACfC,MAAM,EAAE,WAAW;EACnBC,OAAO,EAAEL,OAAO;EAChBM,QAAQ,EAAE,UAAU;EACpBC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,0BAA0B,CAAC;EACvCC,KAAK,EAAE,CAAC,IAAIC,UAAU,CAACC,2BAAgB,CAAC,CAACC,MAAM,CAAC;EAChDC,OAAO,EAAE;IACPC,SAAS,EAAE,CAAC,CAAC;IACbC,GAAG,EAAE;MACHC,cAAc,EAAE;IAClB;EACF,CAAC;EACDC,KAAK,EAAEC,8BAAc;EACrBC,cAAc,EAAEC;AAClB,CAAC;AAAC;AAEK,IAAMC,yBAA2C,GAAGpB,eAAe;AAAC"}
@@ -11,7 +11,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
11
11
  var _parseShp = require("./lib/parsers/parse-shp");
12
12
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
13
13
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
14
- var VERSION = typeof "3.3.2" !== 'undefined' ? "3.3.2" : 'latest';
14
+ var VERSION = typeof "3.4.0-alpha.2" !== 'undefined' ? "3.4.0-alpha.2" : 'latest';
15
15
  var SHP_MAGIC_NUMBER = [0x00, 0x00, 0x27, 0x0a];
16
16
 
17
17
  exports.SHP_MAGIC_NUMBER = SHP_MAGIC_NUMBER;
@@ -1 +1 @@
1
- {"version":3,"file":"shp-loader.js","names":["VERSION","SHP_MAGIC_NUMBER","SHPWorkerLoader","name","id","module","version","worker","category","extensions","mimeTypes","tests","Uint8Array","buffer","options","shp","_maxDimensions","SHPLoader","parse","arrayBuffer","parseSHP","parseSync","parseInBatches","parseSHPInBatches"],"sources":["../../src/shp-loader.ts"],"sourcesContent":["import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {parseSHP, parseSHPInBatches} from './lib/parsers/parse-shp';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport const SHP_MAGIC_NUMBER = [0x00, 0x00, 0x27, 0x0a];\n\n/**\n * SHP file loader\n */\nexport const SHPWorkerLoader: Loader = {\n name: 'SHP',\n id: 'shp',\n module: 'shapefile',\n version: VERSION,\n worker: true,\n category: 'geometry',\n extensions: ['shp'],\n mimeTypes: ['application/octet-stream'],\n // ISSUE: This also identifies SHX files, which are identical to SHP for the first 100 bytes...\n tests: [new Uint8Array(SHP_MAGIC_NUMBER).buffer],\n options: {\n shp: {\n _maxDimensions: 4\n }\n }\n};\n\n/** SHP file loader */\nexport const SHPLoader: LoaderWithParser = {\n ...SHPWorkerLoader,\n parse: async (arrayBuffer, options?) => parseSHP(arrayBuffer, options),\n parseSync: parseSHP,\n parseInBatches: parseSHPInBatches\n};\n"],"mappings":";;;;;;;;;;AACA;AAAoE;AAAA;AAIpE,IAAMA,OAAO,GAAG,cAAkB,KAAK,WAAW,aAAiB,QAAQ;AAEpE,IAAMC,gBAAgB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;;AAAC;AAKlD,IAAMC,eAAuB,GAAG;EACrCC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,WAAW;EACnBC,OAAO,EAAEN,OAAO;EAChBO,MAAM,EAAE,IAAI;EACZC,QAAQ,EAAE,UAAU;EACpBC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,0BAA0B,CAAC;EAEvCC,KAAK,EAAE,CAAC,IAAIC,UAAU,CAACX,gBAAgB,CAAC,CAACY,MAAM,CAAC;EAChDC,OAAO,EAAE;IACPC,GAAG,EAAE;MACHC,cAAc,EAAE;IAClB;EACF;AACF,CAAC;;AAAC;AAGK,IAAMC,SAA2B,mCACnCf,eAAe;EAClBgB,KAAK;IAAA,uEAAE,iBAAOC,WAAW,EAAEL,OAAQ;MAAA;QAAA;UAAA;YAAA;cAAA,iCAAK,IAAAM,kBAAQ,EAACD,WAAW,EAAEL,OAAO,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA;IAAA;MAAA;IAAA;IAAA;EAAA;EACtEO,SAAS,EAAED,kBAAQ;EACnBE,cAAc,EAAEC;AAAiB,EAClC;AAAC"}
1
+ {"version":3,"file":"shp-loader.js","names":["VERSION","SHP_MAGIC_NUMBER","SHPWorkerLoader","name","id","module","version","worker","category","extensions","mimeTypes","tests","Uint8Array","buffer","options","shp","_maxDimensions","SHPLoader","parse","arrayBuffer","parseSHP","parseSync","parseInBatches","parseSHPInBatches"],"sources":["../../src/shp-loader.ts"],"sourcesContent":["import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {parseSHP, parseSHPInBatches} from './lib/parsers/parse-shp';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport const SHP_MAGIC_NUMBER = [0x00, 0x00, 0x27, 0x0a];\n\n/**\n * SHP file loader\n */\nexport const SHPWorkerLoader: Loader = {\n name: 'SHP',\n id: 'shp',\n module: 'shapefile',\n version: VERSION,\n worker: true,\n category: 'geometry',\n extensions: ['shp'],\n mimeTypes: ['application/octet-stream'],\n // ISSUE: This also identifies SHX files, which are identical to SHP for the first 100 bytes...\n tests: [new Uint8Array(SHP_MAGIC_NUMBER).buffer],\n options: {\n shp: {\n _maxDimensions: 4\n }\n }\n};\n\n/** SHP file loader */\nexport const SHPLoader: LoaderWithParser = {\n ...SHPWorkerLoader,\n parse: async (arrayBuffer, options?) => parseSHP(arrayBuffer, options),\n parseSync: parseSHP,\n parseInBatches: parseSHPInBatches\n};\n"],"mappings":";;;;;;;;;;AACA;AAAoE;AAAA;AAIpE,IAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAEpE,IAAMC,gBAAgB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;;AAAC;AAKlD,IAAMC,eAAuB,GAAG;EACrCC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,WAAW;EACnBC,OAAO,EAAEN,OAAO;EAChBO,MAAM,EAAE,IAAI;EACZC,QAAQ,EAAE,UAAU;EACpBC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,0BAA0B,CAAC;EAEvCC,KAAK,EAAE,CAAC,IAAIC,UAAU,CAACX,gBAAgB,CAAC,CAACY,MAAM,CAAC;EAChDC,OAAO,EAAE;IACPC,GAAG,EAAE;MACHC,cAAc,EAAE;IAClB;EACF;AACF,CAAC;;AAAC;AAGK,IAAMC,SAA2B,mCACnCf,eAAe;EAClBgB,KAAK;IAAA,uEAAE,iBAAOC,WAAW,EAAEL,OAAQ;MAAA;QAAA;UAAA;YAAA;cAAA,iCAAK,IAAAM,kBAAQ,EAACD,WAAW,EAAEL,OAAO,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA;IAAA;MAAA;IAAA;IAAA;EAAA;EACtEO,SAAS,EAAED,kBAAQ;EACnBE,cAAc,EAAEC;AAAiB,EAClC;AAAC"}
@@ -1,6 +1,6 @@
1
1
  import { parseDBF, parseDBFInBatches } from './lib/parsers/parse-dbf';
2
2
 
3
- const VERSION = typeof "3.3.2" !== 'undefined' ? "3.3.2" : 'latest';
3
+ const VERSION = typeof "3.4.0-alpha.2" !== 'undefined' ? "3.4.0-alpha.2" : 'latest';
4
4
 
5
5
  export const DBFWorkerLoader = {
6
6
  name: 'DBF',
@@ -1 +1 @@
1
- {"version":3,"file":"dbf-loader.js","names":["parseDBF","parseDBFInBatches","VERSION","DBFWorkerLoader","name","id","module","version","worker","category","extensions","mimeTypes","options","dbf","encoding","DBFLoader","parse","arrayBuffer","parseSync","parseInBatches"],"sources":["../../src/dbf-loader.ts"],"sourcesContent":["import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {parseDBF, parseDBFInBatches} from './lib/parsers/parse-dbf';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/**\n * DBFLoader - DBF files are used to contain non-geometry columns in Shapefiles\n */\nexport const DBFWorkerLoader: Loader = {\n name: 'DBF',\n id: 'dbf',\n module: 'shapefile',\n version: VERSION,\n worker: true,\n category: 'table',\n extensions: ['dbf'],\n mimeTypes: ['application/x-dbf'],\n options: {\n dbf: {\n encoding: 'latin1'\n }\n }\n};\n\n/** DBF file loader */\nexport const DBFLoader: LoaderWithParser = {\n ...DBFWorkerLoader,\n parse: async (arrayBuffer, options) => parseDBF(arrayBuffer, options),\n parseSync: parseDBF,\n parseInBatches: parseDBFInBatches\n};\n"],"mappings":"AACA,SAAQA,QAAQ,EAAEC,iBAAiB,QAAO,yBAAyB;;AAInE,MAAMC,OAAO,GAAG,cAAkB,KAAK,WAAW,aAAiB,QAAQ;;AAK3E,OAAO,MAAMC,eAAuB,GAAG;EACrCC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,WAAW;EACnBC,OAAO,EAAEL,OAAO;EAChBM,MAAM,EAAE,IAAI;EACZC,QAAQ,EAAE,OAAO;EACjBC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,mBAAmB,CAAC;EAChCC,OAAO,EAAE;IACPC,GAAG,EAAE;MACHC,QAAQ,EAAE;IACZ;EACF;AACF,CAAC;;AAGD,OAAO,MAAMC,SAA2B,GAAG;EACzC,GAAGZ,eAAe;EAClBa,KAAK,EAAE,OAAOC,WAAW,EAAEL,OAAO,KAAKZ,QAAQ,CAACiB,WAAW,EAAEL,OAAO,CAAC;EACrEM,SAAS,EAAElB,QAAQ;EACnBmB,cAAc,EAAElB;AAClB,CAAC"}
1
+ {"version":3,"file":"dbf-loader.js","names":["parseDBF","parseDBFInBatches","VERSION","DBFWorkerLoader","name","id","module","version","worker","category","extensions","mimeTypes","options","dbf","encoding","DBFLoader","parse","arrayBuffer","parseSync","parseInBatches"],"sources":["../../src/dbf-loader.ts"],"sourcesContent":["import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {parseDBF, parseDBFInBatches} from './lib/parsers/parse-dbf';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/**\n * DBFLoader - DBF files are used to contain non-geometry columns in Shapefiles\n */\nexport const DBFWorkerLoader: Loader = {\n name: 'DBF',\n id: 'dbf',\n module: 'shapefile',\n version: VERSION,\n worker: true,\n category: 'table',\n extensions: ['dbf'],\n mimeTypes: ['application/x-dbf'],\n options: {\n dbf: {\n encoding: 'latin1'\n }\n }\n};\n\n/** DBF file loader */\nexport const DBFLoader: LoaderWithParser = {\n ...DBFWorkerLoader,\n parse: async (arrayBuffer, options) => parseDBF(arrayBuffer, options),\n parseSync: parseDBF,\n parseInBatches: parseDBFInBatches\n};\n"],"mappings":"AACA,SAAQA,QAAQ,EAAEC,iBAAiB,QAAO,yBAAyB;;AAInE,MAAMC,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;;AAK3E,OAAO,MAAMC,eAAuB,GAAG;EACrCC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,WAAW;EACnBC,OAAO,EAAEL,OAAO;EAChBM,MAAM,EAAE,IAAI;EACZC,QAAQ,EAAE,OAAO;EACjBC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,mBAAmB,CAAC;EAChCC,OAAO,EAAE;IACPC,GAAG,EAAE;MACHC,QAAQ,EAAE;IACZ;EACF;AACF,CAAC;;AAGD,OAAO,MAAMC,SAA2B,GAAG;EACzC,GAAGZ,eAAe;EAClBa,KAAK,EAAE,OAAOC,WAAW,EAAEL,OAAO,KAAKZ,QAAQ,CAACiB,WAAW,EAAEL,OAAO,CAAC;EACrEM,SAAS,EAAElB,QAAQ;EACnBmB,cAAc,EAAElB;AAClB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"parse-shp.js","names":["BinaryChunkReader","parseSHPHeader","parseRecord","LITTLE_ENDIAN","BIG_ENDIAN","SHP_HEADER_SIZE","SHP_RECORD_HEADER_SIZE","STATE","EXPECTING_HEADER","EXPECTING_RECORD","END","ERROR","SHPParser","constructor","options","maxRewindBytes","geometries","progress","bytesTotal","NaN","bytesUsed","rows","currentIndex","write","arrayBuffer","binaryReader","state","parseState","result","end","error","parseSHP","shpParser","parseSHPInBatches","asyncIterator","parser","headerReturned","header","length","dataView","getDataView","hasAvailableBytes","recordHeaderView","recordHeader","recordNumber","getInt32","byteLength","type","rewind","invalidRecord","recordView","geometry","push","ended","message"],"sources":["../../../../src/lib/parsers/parse-shp.ts"],"sourcesContent":["import type {BinaryGeometry} from '@loaders.gl/schema';\nimport BinaryChunkReader from '../streaming/binary-chunk-reader';\nimport {parseSHPHeader, SHPHeader} from './parse-shp-header';\nimport {parseRecord} from './parse-shp-geometry';\nimport {SHPLoaderOptions} from './types';\n\nconst LITTLE_ENDIAN = true;\nconst BIG_ENDIAN = false;\n\nconst SHP_HEADER_SIZE = 100;\n// According to the spec, the record header is just 8 bytes, but here we set it\n// to 12 so that we can also access the record's type\nconst SHP_RECORD_HEADER_SIZE = 12;\n\nconst STATE = {\n EXPECTING_HEADER: 0,\n EXPECTING_RECORD: 1,\n END: 2,\n ERROR: 3\n};\n\ntype SHPResult = {\n geometries: (BinaryGeometry | null)[];\n header?: SHPHeader;\n error?: string;\n progress: {\n bytesUsed: number;\n bytesTotal: number;\n rows: number;\n };\n currentIndex: number;\n};\n\nclass SHPParser {\n options?: SHPLoaderOptions = {};\n binaryReader = new BinaryChunkReader({maxRewindBytes: SHP_RECORD_HEADER_SIZE});\n state = STATE.EXPECTING_HEADER;\n result: SHPResult = {\n geometries: [],\n // Initialize with number values to make TS happy\n // These are initialized for real in STATE.EXPECTING_HEADER\n progress: {\n bytesTotal: NaN,\n bytesUsed: NaN,\n rows: NaN\n },\n currentIndex: NaN\n };\n\n constructor(options?: SHPLoaderOptions) {\n this.options = options;\n }\n\n write(arrayBuffer: ArrayBuffer) {\n this.binaryReader.write(arrayBuffer);\n this.state = parseState(this.state, this.result, this.binaryReader, this.options);\n }\n\n end() {\n this.binaryReader.end();\n this.state = parseState(this.state, this.result, this.binaryReader, this.options);\n // this.result.progress.bytesUsed = this.binaryReader.bytesUsed();\n if (this.state !== STATE.END) {\n this.state = STATE.ERROR;\n this.result.error = 'SHP incomplete file';\n }\n }\n}\n\nexport function parseSHP(arrayBuffer: ArrayBuffer, options?: object): BinaryGeometry[] {\n const shpParser = new SHPParser(options);\n shpParser.write(arrayBuffer);\n shpParser.end();\n\n // @ts-ignore\n return shpParser.result;\n}\n\n/**\n * @param asyncIterator\n * @param options\n * @returns\n */\nexport async function* parseSHPInBatches(\n asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options?: object\n): AsyncIterable<BinaryGeometry | object> {\n const parser = new SHPParser(options);\n let headerReturned = false;\n for await (const arrayBuffer of asyncIterator) {\n parser.write(arrayBuffer);\n if (!headerReturned && parser.result.header) {\n headerReturned = true;\n yield parser.result.header;\n }\n\n if (parser.result.geometries.length > 0) {\n yield parser.result.geometries;\n parser.result.geometries = [];\n }\n }\n parser.end();\n if (parser.result.geometries.length > 0) {\n yield parser.result.geometries;\n }\n\n return;\n}\n\n/**\n * State-machine parser for SHP data\n *\n * Note that whenever more data is needed, a `return`, not a `break`, is\n * necessary, as the `break` keeps the context within `parseState`, while\n * `return` releases context so that more data can be written into the\n * BinaryChunkReader.\n *\n * @param state Current state\n * @param result An object to hold result data\n * @param binaryReader\n * @return State at end of current parsing\n */\n/* eslint-disable complexity, max-depth */\nfunction parseState(\n state: number,\n result: SHPResult,\n binaryReader: BinaryChunkReader,\n options?: SHPLoaderOptions\n): number {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n switch (state) {\n case STATE.ERROR:\n case STATE.END:\n return state;\n\n case STATE.EXPECTING_HEADER:\n // Parse initial file header\n const dataView = binaryReader.getDataView(SHP_HEADER_SIZE);\n if (!dataView) {\n return state;\n }\n\n result.header = parseSHPHeader(dataView);\n result.progress = {\n bytesUsed: 0,\n bytesTotal: result.header.length,\n rows: 0\n };\n // index numbering starts at 1\n result.currentIndex = 1;\n state = STATE.EXPECTING_RECORD;\n break;\n\n case STATE.EXPECTING_RECORD:\n while (binaryReader.hasAvailableBytes(SHP_RECORD_HEADER_SIZE)) {\n const recordHeaderView = binaryReader.getDataView(SHP_RECORD_HEADER_SIZE) as DataView;\n const recordHeader = {\n recordNumber: recordHeaderView.getInt32(0, BIG_ENDIAN),\n // 2 byte words; includes the four words of record header\n byteLength: recordHeaderView.getInt32(4, BIG_ENDIAN) * 2,\n // This is actually part of the record, not the header...\n type: recordHeaderView.getInt32(8, LITTLE_ENDIAN)\n };\n\n if (!binaryReader.hasAvailableBytes(recordHeader.byteLength - 4)) {\n binaryReader.rewind(SHP_RECORD_HEADER_SIZE);\n return state;\n }\n\n const invalidRecord =\n recordHeader.byteLength < 4 ||\n recordHeader.type !== result.header?.type ||\n recordHeader.recordNumber !== result.currentIndex;\n\n // All records must have at least four bytes (for the record shape type)\n if (invalidRecord) {\n // Malformed record, try again, advancing just 4 bytes\n // Note: this is a rewind because binaryReader.getDataView above\n // moved the pointer forward 12 bytes, so rewinding 8 bytes still\n // leaves us 4 bytes ahead\n binaryReader.rewind(SHP_RECORD_HEADER_SIZE - 4);\n } else {\n // Note: type is actually part of the record, not the header, so\n // rewind 4 bytes before reading record\n binaryReader.rewind(4);\n\n const recordView = binaryReader.getDataView(recordHeader.byteLength) as DataView;\n const geometry = parseRecord(recordView, options);\n result.geometries.push(geometry);\n\n result.currentIndex++;\n result.progress.rows = result.currentIndex - 1;\n }\n }\n\n if (binaryReader.ended) {\n state = STATE.END;\n }\n\n return state;\n\n default:\n state = STATE.ERROR;\n result.error = `illegal parser state ${state}`;\n return state;\n }\n } catch (error) {\n state = STATE.ERROR;\n result.error = `SHP parsing failed: ${(error as Error)?.message}`;\n return state;\n }\n }\n}\n"],"mappings":";AACA,OAAOA,iBAAiB,MAAM,kCAAkC;AAChE,SAAQC,cAAc,QAAkB,oBAAoB;AAC5D,SAAQC,WAAW,QAAO,sBAAsB;AAGhD,MAAMC,aAAa,GAAG,IAAI;AAC1B,MAAMC,UAAU,GAAG,KAAK;AAExB,MAAMC,eAAe,GAAG,GAAG;AAG3B,MAAMC,sBAAsB,GAAG,EAAE;AAEjC,MAAMC,KAAK,GAAG;EACZC,gBAAgB,EAAE,CAAC;EACnBC,gBAAgB,EAAE,CAAC;EACnBC,GAAG,EAAE,CAAC;EACNC,KAAK,EAAE;AACT,CAAC;AAcD,MAAMC,SAAS,CAAC;EAgBdC,WAAW,CAACC,OAA0B,EAAE;IAAA,iCAfX,CAAC,CAAC;IAAA,sCAChB,IAAId,iBAAiB,CAAC;MAACe,cAAc,EAAET;IAAsB,CAAC,CAAC;IAAA,+BACtEC,KAAK,CAACC,gBAAgB;IAAA,gCACV;MAClBQ,UAAU,EAAE,EAAE;MAGdC,QAAQ,EAAE;QACRC,UAAU,EAAEC,GAAG;QACfC,SAAS,EAAED,GAAG;QACdE,IAAI,EAAEF;MACR,CAAC;MACDG,YAAY,EAAEH;IAChB,CAAC;IAGC,IAAI,CAACL,OAAO,GAAGA,OAAO;EACxB;EAEAS,KAAK,CAACC,WAAwB,EAAE;IAC9B,IAAI,CAACC,YAAY,CAACF,KAAK,CAACC,WAAW,CAAC;IACpC,IAAI,CAACE,KAAK,GAAGC,UAAU,CAAC,IAAI,CAACD,KAAK,EAAE,IAAI,CAACE,MAAM,EAAE,IAAI,CAACH,YAAY,EAAE,IAAI,CAACX,OAAO,CAAC;EACnF;EAEAe,GAAG,GAAG;IACJ,IAAI,CAACJ,YAAY,CAACI,GAAG,EAAE;IACvB,IAAI,CAACH,KAAK,GAAGC,UAAU,CAAC,IAAI,CAACD,KAAK,EAAE,IAAI,CAACE,MAAM,EAAE,IAAI,CAACH,YAAY,EAAE,IAAI,CAACX,OAAO,CAAC;IAEjF,IAAI,IAAI,CAACY,KAAK,KAAKnB,KAAK,CAACG,GAAG,EAAE;MAC5B,IAAI,CAACgB,KAAK,GAAGnB,KAAK,CAACI,KAAK;MACxB,IAAI,CAACiB,MAAM,CAACE,KAAK,GAAG,qBAAqB;IAC3C;EACF;AACF;AAEA,OAAO,SAASC,QAAQ,CAACP,WAAwB,EAAEV,OAAgB,EAAoB;EACrF,MAAMkB,SAAS,GAAG,IAAIpB,SAAS,CAACE,OAAO,CAAC;EACxCkB,SAAS,CAACT,KAAK,CAACC,WAAW,CAAC;EAC5BQ,SAAS,CAACH,GAAG,EAAE;;EAGf,OAAOG,SAAS,CAACJ,MAAM;AACzB;;AAOA,OAAO,gBAAgBK,iBAAiB,CACtCC,aAAiE,EACjEpB,OAAgB,EACwB;EACxC,MAAMqB,MAAM,GAAG,IAAIvB,SAAS,CAACE,OAAO,CAAC;EACrC,IAAIsB,cAAc,GAAG,KAAK;EAC1B,WAAW,MAAMZ,WAAW,IAAIU,aAAa,EAAE;IAC7CC,MAAM,CAACZ,KAAK,CAACC,WAAW,CAAC;IACzB,IAAI,CAACY,cAAc,IAAID,MAAM,CAACP,MAAM,CAACS,MAAM,EAAE;MAC3CD,cAAc,GAAG,IAAI;MACrB,MAAMD,MAAM,CAACP,MAAM,CAACS,MAAM;IAC5B;IAEA,IAAIF,MAAM,CAACP,MAAM,CAACZ,UAAU,CAACsB,MAAM,GAAG,CAAC,EAAE;MACvC,MAAMH,MAAM,CAACP,MAAM,CAACZ,UAAU;MAC9BmB,MAAM,CAACP,MAAM,CAACZ,UAAU,GAAG,EAAE;IAC/B;EACF;EACAmB,MAAM,CAACN,GAAG,EAAE;EACZ,IAAIM,MAAM,CAACP,MAAM,CAACZ,UAAU,CAACsB,MAAM,GAAG,CAAC,EAAE;IACvC,MAAMH,MAAM,CAACP,MAAM,CAACZ,UAAU;EAChC;EAEA;AACF;;AAgBA,SAASW,UAAU,CACjBD,KAAa,EACbE,MAAiB,EACjBH,YAA+B,EAC/BX,OAA0B,EAClB;EAER,OAAO,IAAI,EAAE;IACX,IAAI;MACF,QAAQY,KAAK;QACX,KAAKnB,KAAK,CAACI,KAAK;QAChB,KAAKJ,KAAK,CAACG,GAAG;UACZ,OAAOgB,KAAK;QAEd,KAAKnB,KAAK,CAACC,gBAAgB;UAEzB,MAAM+B,QAAQ,GAAGd,YAAY,CAACe,WAAW,CAACnC,eAAe,CAAC;UAC1D,IAAI,CAACkC,QAAQ,EAAE;YACb,OAAOb,KAAK;UACd;UAEAE,MAAM,CAACS,MAAM,GAAGpC,cAAc,CAACsC,QAAQ,CAAC;UACxCX,MAAM,CAACX,QAAQ,GAAG;YAChBG,SAAS,EAAE,CAAC;YACZF,UAAU,EAAEU,MAAM,CAACS,MAAM,CAACC,MAAM;YAChCjB,IAAI,EAAE;UACR,CAAC;UAEDO,MAAM,CAACN,YAAY,GAAG,CAAC;UACvBI,KAAK,GAAGnB,KAAK,CAACE,gBAAgB;UAC9B;QAEF,KAAKF,KAAK,CAACE,gBAAgB;UACzB,OAAOgB,YAAY,CAACgB,iBAAiB,CAACnC,sBAAsB,CAAC,EAAE;YAAA;YAC7D,MAAMoC,gBAAgB,GAAGjB,YAAY,CAACe,WAAW,CAAClC,sBAAsB,CAAa;YACrF,MAAMqC,YAAY,GAAG;cACnBC,YAAY,EAAEF,gBAAgB,CAACG,QAAQ,CAAC,CAAC,EAAEzC,UAAU,CAAC;cAEtD0C,UAAU,EAAEJ,gBAAgB,CAACG,QAAQ,CAAC,CAAC,EAAEzC,UAAU,CAAC,GAAG,CAAC;cAExD2C,IAAI,EAAEL,gBAAgB,CAACG,QAAQ,CAAC,CAAC,EAAE1C,aAAa;YAClD,CAAC;YAED,IAAI,CAACsB,YAAY,CAACgB,iBAAiB,CAACE,YAAY,CAACG,UAAU,GAAG,CAAC,CAAC,EAAE;cAChErB,YAAY,CAACuB,MAAM,CAAC1C,sBAAsB,CAAC;cAC3C,OAAOoB,KAAK;YACd;YAEA,MAAMuB,aAAa,GACjBN,YAAY,CAACG,UAAU,GAAG,CAAC,IAC3BH,YAAY,CAACI,IAAI,wBAAKnB,MAAM,CAACS,MAAM,mDAAb,eAAeU,IAAI,KACzCJ,YAAY,CAACC,YAAY,KAAKhB,MAAM,CAACN,YAAY;;YAGnD,IAAI2B,aAAa,EAAE;cAKjBxB,YAAY,CAACuB,MAAM,CAAC1C,sBAAsB,GAAG,CAAC,CAAC;YACjD,CAAC,MAAM;cAGLmB,YAAY,CAACuB,MAAM,CAAC,CAAC,CAAC;cAEtB,MAAME,UAAU,GAAGzB,YAAY,CAACe,WAAW,CAACG,YAAY,CAACG,UAAU,CAAa;cAChF,MAAMK,QAAQ,GAAGjD,WAAW,CAACgD,UAAU,EAAEpC,OAAO,CAAC;cACjDc,MAAM,CAACZ,UAAU,CAACoC,IAAI,CAACD,QAAQ,CAAC;cAEhCvB,MAAM,CAACN,YAAY,EAAE;cACrBM,MAAM,CAACX,QAAQ,CAACI,IAAI,GAAGO,MAAM,CAACN,YAAY,GAAG,CAAC;YAChD;UACF;UAEA,IAAIG,YAAY,CAAC4B,KAAK,EAAE;YACtB3B,KAAK,GAAGnB,KAAK,CAACG,GAAG;UACnB;UAEA,OAAOgB,KAAK;QAEd;UACEA,KAAK,GAAGnB,KAAK,CAACI,KAAK;UACnBiB,MAAM,CAACE,KAAK,kCAA2BJ,KAAK,CAAE;UAC9C,OAAOA,KAAK;MAAC;IAEnB,CAAC,CAAC,OAAOI,KAAK,EAAE;MACdJ,KAAK,GAAGnB,KAAK,CAACI,KAAK;MACnBiB,MAAM,CAACE,KAAK,iCAA2BA,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAYwB,OAAO,CAAE;MACjE,OAAO5B,KAAK;IACd;EACF;AACF"}
1
+ {"version":3,"file":"parse-shp.js","names":["BinaryChunkReader","parseSHPHeader","parseRecord","LITTLE_ENDIAN","BIG_ENDIAN","SHP_HEADER_SIZE","SHP_RECORD_HEADER_SIZE","STATE","EXPECTING_HEADER","EXPECTING_RECORD","END","ERROR","SHPParser","constructor","options","maxRewindBytes","geometries","progress","bytesTotal","NaN","bytesUsed","rows","currentIndex","write","arrayBuffer","binaryReader","state","parseState","result","end","error","parseSHP","shpParser","parseSHPInBatches","asyncIterator","parser","headerReturned","header","length","dataView","getDataView","hasAvailableBytes","recordHeaderView","recordHeader","recordNumber","getInt32","byteLength","type","rewind","invalidRecord","recordView","geometry","push","ended","message"],"sources":["../../../../src/lib/parsers/parse-shp.ts"],"sourcesContent":["import type {BinaryGeometry} from '@loaders.gl/schema';\nimport BinaryChunkReader from '../streaming/binary-chunk-reader';\nimport {parseSHPHeader, SHPHeader} from './parse-shp-header';\nimport {parseRecord} from './parse-shp-geometry';\nimport {SHPLoaderOptions} from './types';\n\nconst LITTLE_ENDIAN = true;\nconst BIG_ENDIAN = false;\n\nconst SHP_HEADER_SIZE = 100;\n// According to the spec, the record header is just 8 bytes, but here we set it\n// to 12 so that we can also access the record's type\nconst SHP_RECORD_HEADER_SIZE = 12;\n\nconst STATE = {\n EXPECTING_HEADER: 0,\n EXPECTING_RECORD: 1,\n END: 2,\n ERROR: 3\n};\n\ntype SHPResult = {\n geometries: (BinaryGeometry | null)[];\n header?: SHPHeader;\n error?: string;\n progress: {\n bytesUsed: number;\n bytesTotal: number;\n rows: number;\n };\n currentIndex: number;\n};\n\nclass SHPParser {\n options?: SHPLoaderOptions = {};\n binaryReader = new BinaryChunkReader({maxRewindBytes: SHP_RECORD_HEADER_SIZE});\n state = STATE.EXPECTING_HEADER;\n result: SHPResult = {\n geometries: [],\n // Initialize with number values to make TS happy\n // These are initialized for real in STATE.EXPECTING_HEADER\n progress: {\n bytesTotal: NaN,\n bytesUsed: NaN,\n rows: NaN\n },\n currentIndex: NaN\n };\n\n constructor(options?: SHPLoaderOptions) {\n this.options = options;\n }\n\n write(arrayBuffer: ArrayBuffer) {\n this.binaryReader.write(arrayBuffer);\n this.state = parseState(this.state, this.result, this.binaryReader, this.options);\n }\n\n end() {\n this.binaryReader.end();\n this.state = parseState(this.state, this.result, this.binaryReader, this.options);\n // this.result.progress.bytesUsed = this.binaryReader.bytesUsed();\n if (this.state !== STATE.END) {\n this.state = STATE.ERROR;\n this.result.error = 'SHP incomplete file';\n }\n }\n}\n\nexport function parseSHP(arrayBuffer: ArrayBuffer, options?: SHPLoaderOptions): BinaryGeometry[] {\n const shpParser = new SHPParser(options);\n shpParser.write(arrayBuffer);\n shpParser.end();\n\n // @ts-ignore\n return shpParser.result;\n}\n\n/**\n * @param asyncIterator\n * @param options\n * @returns\n */\nexport async function* parseSHPInBatches(\n asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options?: SHPLoaderOptions\n): AsyncIterable<BinaryGeometry | object> {\n const parser = new SHPParser(options);\n let headerReturned = false;\n for await (const arrayBuffer of asyncIterator) {\n parser.write(arrayBuffer);\n if (!headerReturned && parser.result.header) {\n headerReturned = true;\n yield parser.result.header;\n }\n\n if (parser.result.geometries.length > 0) {\n yield parser.result.geometries;\n parser.result.geometries = [];\n }\n }\n parser.end();\n if (parser.result.geometries.length > 0) {\n yield parser.result.geometries;\n }\n\n return;\n}\n\n/**\n * State-machine parser for SHP data\n *\n * Note that whenever more data is needed, a `return`, not a `break`, is\n * necessary, as the `break` keeps the context within `parseState`, while\n * `return` releases context so that more data can be written into the\n * BinaryChunkReader.\n *\n * @param state Current state\n * @param result An object to hold result data\n * @param binaryReader\n * @return State at end of current parsing\n */\n/* eslint-disable complexity, max-depth */\nfunction parseState(\n state: number,\n result: SHPResult,\n binaryReader: BinaryChunkReader,\n options?: SHPLoaderOptions\n): number {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n switch (state) {\n case STATE.ERROR:\n case STATE.END:\n return state;\n\n case STATE.EXPECTING_HEADER:\n // Parse initial file header\n const dataView = binaryReader.getDataView(SHP_HEADER_SIZE);\n if (!dataView) {\n return state;\n }\n\n result.header = parseSHPHeader(dataView);\n result.progress = {\n bytesUsed: 0,\n bytesTotal: result.header.length,\n rows: 0\n };\n // index numbering starts at 1\n result.currentIndex = 1;\n state = STATE.EXPECTING_RECORD;\n break;\n\n case STATE.EXPECTING_RECORD:\n while (binaryReader.hasAvailableBytes(SHP_RECORD_HEADER_SIZE)) {\n const recordHeaderView = binaryReader.getDataView(SHP_RECORD_HEADER_SIZE) as DataView;\n const recordHeader = {\n recordNumber: recordHeaderView.getInt32(0, BIG_ENDIAN),\n // 2 byte words; includes the four words of record header\n byteLength: recordHeaderView.getInt32(4, BIG_ENDIAN) * 2,\n // This is actually part of the record, not the header...\n type: recordHeaderView.getInt32(8, LITTLE_ENDIAN)\n };\n\n if (!binaryReader.hasAvailableBytes(recordHeader.byteLength - 4)) {\n binaryReader.rewind(SHP_RECORD_HEADER_SIZE);\n return state;\n }\n\n const invalidRecord =\n recordHeader.byteLength < 4 ||\n recordHeader.type !== result.header?.type ||\n recordHeader.recordNumber !== result.currentIndex;\n\n // All records must have at least four bytes (for the record shape type)\n if (invalidRecord) {\n // Malformed record, try again, advancing just 4 bytes\n // Note: this is a rewind because binaryReader.getDataView above\n // moved the pointer forward 12 bytes, so rewinding 8 bytes still\n // leaves us 4 bytes ahead\n binaryReader.rewind(SHP_RECORD_HEADER_SIZE - 4);\n } else {\n // Note: type is actually part of the record, not the header, so\n // rewind 4 bytes before reading record\n binaryReader.rewind(4);\n\n const recordView = binaryReader.getDataView(recordHeader.byteLength) as DataView;\n const geometry = parseRecord(recordView, options);\n result.geometries.push(geometry);\n\n result.currentIndex++;\n result.progress.rows = result.currentIndex - 1;\n }\n }\n\n if (binaryReader.ended) {\n state = STATE.END;\n }\n\n return state;\n\n default:\n state = STATE.ERROR;\n result.error = `illegal parser state ${state}`;\n return state;\n }\n } catch (error) {\n state = STATE.ERROR;\n result.error = `SHP parsing failed: ${(error as Error)?.message}`;\n return state;\n }\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../src/lib/parsers/types.ts"],"sourcesContent":["import {Schema, ObjectRowTable} from '@loaders.gl/schema';\nimport type {LoaderOptions} from '@loaders.gl/loader-utils';\n\nexport type SHPLoaderOptions = LoaderOptions & {\n shp?: {\n _maxDimensions?: number;\n };\n};\n\nexport type DBFLoaderOptions = LoaderOptions & {\n dbf?: {\n encoding?: string;\n shape?: 'rows' | 'table' | 'object-row-table';\n };\n};\n\nexport type ShapefileLoaderOptions = LoaderOptions &\n SHPLoaderOptions & {\n shapefile?: {\n shape?: 'geojson';\n };\n gis?: {\n reproject?: boolean;\n _targetCrs?: string;\n /** @deprecated. Use options.shapefile.shape */\n format?: 'geojson';\n };\n };\n\nexport type DBFRowsOutput = ObjectRowTable['data'];\n\n/**\n * DBF Table output. Deprecated in favor of ObjectRowTable\n * @deprecated\n */\nexport interface DBFTableOutput {\n schema?: Schema;\n rows: DBFRowsOutput;\n}\n\nexport type DBFHeader = {\n // Last updated date\n year: number;\n month: number;\n day: number;\n // Number of records in data file\n nRecords: number;\n // Length of header in bytes\n headerLength: number;\n // Length of each record\n recordLength: number;\n // Not sure if this is usually set\n languageDriver: number;\n};\n\nexport type DBFField = {\n name: string;\n dataType: string;\n fieldLength: number;\n decimal: number;\n};\n\nexport type DBFResult = {\n data: {[key: string]: any}[];\n schema?: Schema;\n error?: string;\n dbfHeader?: DBFHeader;\n dbfFields?: DBFField[];\n progress?: {\n bytesUsed: number;\n rowsTotal: number;\n rows: number;\n };\n};\n"],"mappings":""}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../src/lib/parsers/types.ts"],"sourcesContent":["import {Schema, ObjectRowTable} from '@loaders.gl/schema';\nimport type {LoaderOptions} from '@loaders.gl/loader-utils';\n\nexport type SHPLoaderOptions = LoaderOptions & {\n shp?: {\n _maxDimensions?: number;\n };\n};\n\nexport type DBFLoaderOptions = LoaderOptions & {\n dbf?: {\n encoding?: string;\n shape?: 'rows' | 'table' | 'object-row-table';\n };\n /** @deprecated */\n tables?: {\n /** @deprecated */\n format?: 'rows' | 'table' | 'object-row-table';\n };\n};\n\nexport type ShapefileLoaderOptions = LoaderOptions &\n SHPLoaderOptions & {\n shapefile?: {\n shape?: 'geojson';\n };\n gis?: {\n reproject?: boolean;\n _targetCrs?: string;\n /** @deprecated. Use options.shapefile.shape */\n format?: 'geojson';\n };\n };\n\nexport type DBFRowsOutput = ObjectRowTable['data'];\n\n/**\n * DBF Table output. Deprecated in favor of ObjectRowTable\n * @deprecated\n */\nexport interface DBFTableOutput {\n schema?: Schema;\n rows: DBFRowsOutput;\n}\n\nexport type DBFHeader = {\n // Last updated date\n year: number;\n month: number;\n day: number;\n // Number of records in data file\n nRecords: number;\n // Length of header in bytes\n headerLength: number;\n // Length of each record\n recordLength: number;\n // Not sure if this is usually set\n languageDriver: number;\n};\n\nexport type DBFField = {\n name: string;\n dataType: string;\n fieldLength: number;\n decimal: number;\n};\n\nexport type DBFResult = {\n data: {[key: string]: any}[];\n schema?: Schema;\n error?: string;\n dbfHeader?: DBFHeader;\n dbfFields?: DBFField[];\n progress?: {\n bytesUsed: number;\n rowsTotal: number;\n rows: number;\n };\n};\n"],"mappings":""}
@@ -1,7 +1,7 @@
1
1
  import { SHP_MAGIC_NUMBER } from './shp-loader';
2
2
  import { parseShapefile, parseShapefileInBatches } from './lib/parsers/parse-shapefile';
3
3
 
4
- const VERSION = typeof "3.3.2" !== 'undefined' ? "3.3.2" : 'latest';
4
+ const VERSION = typeof "3.4.0-alpha.2" !== 'undefined' ? "3.4.0-alpha.2" : 'latest';
5
5
 
6
6
  export const ShapefileLoader = {
7
7
  name: 'Shapefile',
@@ -1 +1 @@
1
- {"version":3,"file":"shapefile-loader.js","names":["SHP_MAGIC_NUMBER","parseShapefile","parseShapefileInBatches","VERSION","ShapefileLoader","name","id","module","version","category","extensions","mimeTypes","tests","Uint8Array","buffer","options","shapefile","shp","_maxDimensions","parse","parseInBatches","_typecheckShapefileLoader"],"sources":["../../src/shapefile-loader.ts"],"sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {SHP_MAGIC_NUMBER} from './shp-loader';\nimport {parseShapefile, parseShapefileInBatches} from './lib/parsers/parse-shapefile';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/**\n * Shapefile loader\n * @note Shapefile is multifile format and requires providing additional files\n */\nexport const ShapefileLoader = {\n name: 'Shapefile',\n id: 'shapefile',\n module: 'shapefile',\n version: VERSION,\n category: 'geometry',\n extensions: ['shp'],\n mimeTypes: ['application/octet-stream'],\n tests: [new Uint8Array(SHP_MAGIC_NUMBER).buffer],\n options: {\n shapefile: {},\n shp: {\n _maxDimensions: 4\n }\n },\n parse: parseShapefile,\n parseInBatches: parseShapefileInBatches\n};\n\nexport const _typecheckShapefileLoader: LoaderWithParser = ShapefileLoader;\n"],"mappings":"AACA,SAAQA,gBAAgB,QAAO,cAAc;AAC7C,SAAQC,cAAc,EAAEC,uBAAuB,QAAO,+BAA+B;;AAIrF,MAAMC,OAAO,GAAG,cAAkB,KAAK,WAAW,aAAiB,QAAQ;;AAM3E,OAAO,MAAMC,eAAe,GAAG;EAC7BC,IAAI,EAAE,WAAW;EACjBC,EAAE,EAAE,WAAW;EACfC,MAAM,EAAE,WAAW;EACnBC,OAAO,EAAEL,OAAO;EAChBM,QAAQ,EAAE,UAAU;EACpBC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,0BAA0B,CAAC;EACvCC,KAAK,EAAE,CAAC,IAAIC,UAAU,CAACb,gBAAgB,CAAC,CAACc,MAAM,CAAC;EAChDC,OAAO,EAAE;IACPC,SAAS,EAAE,CAAC,CAAC;IACbC,GAAG,EAAE;MACHC,cAAc,EAAE;IAClB;EACF,CAAC;EACDC,KAAK,EAAElB,cAAc;EACrBmB,cAAc,EAAElB;AAClB,CAAC;AAED,OAAO,MAAMmB,yBAA2C,GAAGjB,eAAe"}
1
+ {"version":3,"file":"shapefile-loader.js","names":["SHP_MAGIC_NUMBER","parseShapefile","parseShapefileInBatches","VERSION","ShapefileLoader","name","id","module","version","category","extensions","mimeTypes","tests","Uint8Array","buffer","options","shapefile","shp","_maxDimensions","parse","parseInBatches","_typecheckShapefileLoader"],"sources":["../../src/shapefile-loader.ts"],"sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {SHP_MAGIC_NUMBER} from './shp-loader';\nimport {parseShapefile, parseShapefileInBatches} from './lib/parsers/parse-shapefile';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/**\n * Shapefile loader\n * @note Shapefile is multifile format and requires providing additional files\n */\nexport const ShapefileLoader = {\n name: 'Shapefile',\n id: 'shapefile',\n module: 'shapefile',\n version: VERSION,\n category: 'geometry',\n extensions: ['shp'],\n mimeTypes: ['application/octet-stream'],\n tests: [new Uint8Array(SHP_MAGIC_NUMBER).buffer],\n options: {\n shapefile: {},\n shp: {\n _maxDimensions: 4\n }\n },\n parse: parseShapefile,\n parseInBatches: parseShapefileInBatches\n};\n\nexport const _typecheckShapefileLoader: LoaderWithParser = ShapefileLoader;\n"],"mappings":"AACA,SAAQA,gBAAgB,QAAO,cAAc;AAC7C,SAAQC,cAAc,EAAEC,uBAAuB,QAAO,+BAA+B;;AAIrF,MAAMC,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;;AAM3E,OAAO,MAAMC,eAAe,GAAG;EAC7BC,IAAI,EAAE,WAAW;EACjBC,EAAE,EAAE,WAAW;EACfC,MAAM,EAAE,WAAW;EACnBC,OAAO,EAAEL,OAAO;EAChBM,QAAQ,EAAE,UAAU;EACpBC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,0BAA0B,CAAC;EACvCC,KAAK,EAAE,CAAC,IAAIC,UAAU,CAACb,gBAAgB,CAAC,CAACc,MAAM,CAAC;EAChDC,OAAO,EAAE;IACPC,SAAS,EAAE,CAAC,CAAC;IACbC,GAAG,EAAE;MACHC,cAAc,EAAE;IAClB;EACF,CAAC;EACDC,KAAK,EAAElB,cAAc;EACrBmB,cAAc,EAAElB;AAClB,CAAC;AAED,OAAO,MAAMmB,yBAA2C,GAAGjB,eAAe"}
@@ -1,6 +1,6 @@
1
1
  import { parseSHP, parseSHPInBatches } from './lib/parsers/parse-shp';
2
2
 
3
- const VERSION = typeof "3.3.2" !== 'undefined' ? "3.3.2" : 'latest';
3
+ const VERSION = typeof "3.4.0-alpha.2" !== 'undefined' ? "3.4.0-alpha.2" : 'latest';
4
4
  export const SHP_MAGIC_NUMBER = [0x00, 0x00, 0x27, 0x0a];
5
5
 
6
6
  export const SHPWorkerLoader = {
@@ -1 +1 @@
1
- {"version":3,"file":"shp-loader.js","names":["parseSHP","parseSHPInBatches","VERSION","SHP_MAGIC_NUMBER","SHPWorkerLoader","name","id","module","version","worker","category","extensions","mimeTypes","tests","Uint8Array","buffer","options","shp","_maxDimensions","SHPLoader","parse","arrayBuffer","parseSync","parseInBatches"],"sources":["../../src/shp-loader.ts"],"sourcesContent":["import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {parseSHP, parseSHPInBatches} from './lib/parsers/parse-shp';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport const SHP_MAGIC_NUMBER = [0x00, 0x00, 0x27, 0x0a];\n\n/**\n * SHP file loader\n */\nexport const SHPWorkerLoader: Loader = {\n name: 'SHP',\n id: 'shp',\n module: 'shapefile',\n version: VERSION,\n worker: true,\n category: 'geometry',\n extensions: ['shp'],\n mimeTypes: ['application/octet-stream'],\n // ISSUE: This also identifies SHX files, which are identical to SHP for the first 100 bytes...\n tests: [new Uint8Array(SHP_MAGIC_NUMBER).buffer],\n options: {\n shp: {\n _maxDimensions: 4\n }\n }\n};\n\n/** SHP file loader */\nexport const SHPLoader: LoaderWithParser = {\n ...SHPWorkerLoader,\n parse: async (arrayBuffer, options?) => parseSHP(arrayBuffer, options),\n parseSync: parseSHP,\n parseInBatches: parseSHPInBatches\n};\n"],"mappings":"AACA,SAAQA,QAAQ,EAAEC,iBAAiB,QAAO,yBAAyB;;AAInE,MAAMC,OAAO,GAAG,cAAkB,KAAK,WAAW,aAAiB,QAAQ;AAE3E,OAAO,MAAMC,gBAAgB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;;AAKxD,OAAO,MAAMC,eAAuB,GAAG;EACrCC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,WAAW;EACnBC,OAAO,EAAEN,OAAO;EAChBO,MAAM,EAAE,IAAI;EACZC,QAAQ,EAAE,UAAU;EACpBC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,0BAA0B,CAAC;EAEvCC,KAAK,EAAE,CAAC,IAAIC,UAAU,CAACX,gBAAgB,CAAC,CAACY,MAAM,CAAC;EAChDC,OAAO,EAAE;IACPC,GAAG,EAAE;MACHC,cAAc,EAAE;IAClB;EACF;AACF,CAAC;;AAGD,OAAO,MAAMC,SAA2B,GAAG;EACzC,GAAGf,eAAe;EAClBgB,KAAK,EAAE,OAAOC,WAAW,EAAEL,OAAQ,KAAKhB,QAAQ,CAACqB,WAAW,EAAEL,OAAO,CAAC;EACtEM,SAAS,EAAEtB,QAAQ;EACnBuB,cAAc,EAAEtB;AAClB,CAAC"}
1
+ {"version":3,"file":"shp-loader.js","names":["parseSHP","parseSHPInBatches","VERSION","SHP_MAGIC_NUMBER","SHPWorkerLoader","name","id","module","version","worker","category","extensions","mimeTypes","tests","Uint8Array","buffer","options","shp","_maxDimensions","SHPLoader","parse","arrayBuffer","parseSync","parseInBatches"],"sources":["../../src/shp-loader.ts"],"sourcesContent":["import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {parseSHP, parseSHPInBatches} from './lib/parsers/parse-shp';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport const SHP_MAGIC_NUMBER = [0x00, 0x00, 0x27, 0x0a];\n\n/**\n * SHP file loader\n */\nexport const SHPWorkerLoader: Loader = {\n name: 'SHP',\n id: 'shp',\n module: 'shapefile',\n version: VERSION,\n worker: true,\n category: 'geometry',\n extensions: ['shp'],\n mimeTypes: ['application/octet-stream'],\n // ISSUE: This also identifies SHX files, which are identical to SHP for the first 100 bytes...\n tests: [new Uint8Array(SHP_MAGIC_NUMBER).buffer],\n options: {\n shp: {\n _maxDimensions: 4\n }\n }\n};\n\n/** SHP file loader */\nexport const SHPLoader: LoaderWithParser = {\n ...SHPWorkerLoader,\n parse: async (arrayBuffer, options?) => parseSHP(arrayBuffer, options),\n parseSync: parseSHP,\n parseInBatches: parseSHPInBatches\n};\n"],"mappings":"AACA,SAAQA,QAAQ,EAAEC,iBAAiB,QAAO,yBAAyB;;AAInE,MAAMC,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAE3E,OAAO,MAAMC,gBAAgB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;;AAKxD,OAAO,MAAMC,eAAuB,GAAG;EACrCC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,WAAW;EACnBC,OAAO,EAAEN,OAAO;EAChBO,MAAM,EAAE,IAAI;EACZC,QAAQ,EAAE,UAAU;EACpBC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,0BAA0B,CAAC;EAEvCC,KAAK,EAAE,CAAC,IAAIC,UAAU,CAACX,gBAAgB,CAAC,CAACY,MAAM,CAAC;EAChDC,OAAO,EAAE;IACPC,GAAG,EAAE;MACHC,cAAc,EAAE;IAClB;EACF;AACF,CAAC;;AAGD,OAAO,MAAMC,SAA2B,GAAG;EACzC,GAAGf,eAAe;EAClBgB,KAAK,EAAE,OAAOC,WAAW,EAAEL,OAAQ,KAAKhB,QAAQ,CAACqB,WAAW,EAAEL,OAAO,CAAC;EACtEM,SAAS,EAAEtB,QAAQ;EACnBuB,cAAc,EAAEtB;AAClB,CAAC"}
@@ -1,9 +1,10 @@
1
1
  import type { BinaryGeometry } from '@loaders.gl/schema';
2
- export declare function parseSHP(arrayBuffer: ArrayBuffer, options?: object): BinaryGeometry[];
2
+ import { SHPLoaderOptions } from './types';
3
+ export declare function parseSHP(arrayBuffer: ArrayBuffer, options?: SHPLoaderOptions): BinaryGeometry[];
3
4
  /**
4
5
  * @param asyncIterator
5
6
  * @param options
6
7
  * @returns
7
8
  */
8
- export declare function parseSHPInBatches(asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>, options?: object): AsyncIterable<BinaryGeometry | object>;
9
+ export declare function parseSHPInBatches(asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>, options?: SHPLoaderOptions): AsyncIterable<BinaryGeometry | object>;
9
10
  //# sourceMappingURL=parse-shp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-shp.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-shp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAqEvD,wBAAgB,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,CAOrF;AAED;;;;GAIG;AACH,wBAAuB,iBAAiB,CACtC,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,EACjE,OAAO,CAAC,EAAE,MAAM,GACf,aAAa,CAAC,cAAc,GAAG,MAAM,CAAC,CAqBxC"}
1
+ {"version":3,"file":"parse-shp.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-shp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAIvD,OAAO,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AAiEzC,wBAAgB,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,cAAc,EAAE,CAO/F;AAED;;;;GAIG;AACH,wBAAuB,iBAAiB,CACtC,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,EACjE,OAAO,CAAC,EAAE,gBAAgB,GACzB,aAAa,CAAC,cAAc,GAAG,MAAM,CAAC,CAqBxC"}
@@ -10,6 +10,11 @@ export type DBFLoaderOptions = LoaderOptions & {
10
10
  encoding?: string;
11
11
  shape?: 'rows' | 'table' | 'object-row-table';
12
12
  };
13
+ /** @deprecated */
14
+ tables?: {
15
+ /** @deprecated */
16
+ format?: 'rows' | 'table' | 'object-row-table';
17
+ };
13
18
  };
14
19
  export type ShapefileLoaderOptions = LoaderOptions & SHPLoaderOptions & {
15
20
  shapefile?: {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE;QACJ,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE;QACJ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,kBAAkB,CAAC;KAC/C,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,aAAa,GAChD,gBAAgB,GAAG;IACjB,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE,SAAS,CAAC;KACnB,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,+CAA+C;QAC/C,MAAM,CAAC,EAAE,SAAS,CAAC;KACpB,CAAC;CACH,CAAC;AAEJ,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAEnD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,MAAM,SAAS,GAAG;IAEtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IAEZ,QAAQ,EAAE,MAAM,CAAC;IAEjB,YAAY,EAAE,MAAM,CAAC;IAErB,YAAY,EAAE,MAAM,CAAC;IAErB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE;QACT,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE;QACJ,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE;QACJ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,kBAAkB,CAAC;KAC/C,CAAC;IACF,kBAAkB;IAClB,MAAM,CAAC,EAAE;QACP,kBAAkB;QAClB,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,kBAAkB,CAAC;KAChD,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,aAAa,GAChD,gBAAgB,GAAG;IACjB,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE,SAAS,CAAC;KACnB,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,+CAA+C;QAC/C,MAAM,CAAC,EAAE,SAAS,CAAC;KACpB,CAAC;CACH,CAAC;AAEJ,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAEnD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,MAAM,SAAS,GAAG;IAEtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IAEZ,QAAQ,EAAE,MAAM,CAAC;IAEjB,YAAY,EAAE,MAAM,CAAC;IAErB,YAAY,EAAE,MAAM,CAAC;IAErB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE;QACT,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH,CAAC"}
@@ -430,7 +430,7 @@
430
430
  }
431
431
 
432
432
  // src/shp-loader.ts
433
- var VERSION = true ? "3.3.2" : "latest";
433
+ var VERSION = true ? "3.4.0-alpha.2" : "latest";
434
434
  var SHP_MAGIC_NUMBER2 = [0, 0, 39, 10];
435
435
  var SHPWorkerLoader = {
436
436
  name: "SHP",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@loaders.gl/shapefile",
3
3
  "description": "Loader for the Shapefile Format",
4
- "version": "3.3.2",
4
+ "version": "3.4.0-alpha.2",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
7
7
  "access": "public"
@@ -37,10 +37,10 @@
37
37
  "build-worker-dbf": "esbuild src/workers/dbf-worker.ts --bundle --outfile=dist/dbf-worker.js --define:__VERSION__=\\\"$npm_package_version\\\""
38
38
  },
39
39
  "dependencies": {
40
- "@loaders.gl/gis": "3.3.2",
41
- "@loaders.gl/loader-utils": "3.3.2",
42
- "@loaders.gl/schema": "3.3.2",
40
+ "@loaders.gl/gis": "3.4.0-alpha.2",
41
+ "@loaders.gl/loader-utils": "3.4.0-alpha.2",
42
+ "@loaders.gl/schema": "3.4.0-alpha.2",
43
43
  "@math.gl/proj4": "^3.5.1"
44
44
  },
45
- "gitHead": "a37b0af509ca05468aec6e5667d6a427b9c15d29"
45
+ "gitHead": "f1c00c124d8d0c41a138ff40afb0d1a00711bf2e"
46
46
  }
@@ -67,7 +67,7 @@ class SHPParser {
67
67
  }
68
68
  }
69
69
 
70
- export function parseSHP(arrayBuffer: ArrayBuffer, options?: object): BinaryGeometry[] {
70
+ export function parseSHP(arrayBuffer: ArrayBuffer, options?: SHPLoaderOptions): BinaryGeometry[] {
71
71
  const shpParser = new SHPParser(options);
72
72
  shpParser.write(arrayBuffer);
73
73
  shpParser.end();
@@ -83,7 +83,7 @@ export function parseSHP(arrayBuffer: ArrayBuffer, options?: object): BinaryGeom
83
83
  */
84
84
  export async function* parseSHPInBatches(
85
85
  asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,
86
- options?: object
86
+ options?: SHPLoaderOptions
87
87
  ): AsyncIterable<BinaryGeometry | object> {
88
88
  const parser = new SHPParser(options);
89
89
  let headerReturned = false;
@@ -12,6 +12,11 @@ export type DBFLoaderOptions = LoaderOptions & {
12
12
  encoding?: string;
13
13
  shape?: 'rows' | 'table' | 'object-row-table';
14
14
  };
15
+ /** @deprecated */
16
+ tables?: {
17
+ /** @deprecated */
18
+ format?: 'rows' | 'table' | 'object-row-table';
19
+ };
15
20
  };
16
21
 
17
22
  export type ShapefileLoaderOptions = LoaderOptions &