@loaders.gl/shapefile 4.0.0-alpha.23 → 4.0.0-alpha.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/dist/dbf-worker.js +4 -2
  2. package/dist/dist.min.js +77 -31
  3. package/dist/es5/dbf-loader.js +4 -2
  4. package/dist/es5/dbf-loader.js.map +1 -1
  5. package/dist/es5/index.js +21 -0
  6. package/dist/es5/index.js.map +1 -1
  7. package/dist/es5/lib/parsers/parse-dbf.js +2 -2
  8. package/dist/es5/lib/parsers/parse-dbf.js.map +1 -1
  9. package/dist/es5/lib/parsers/parse-shapefile.js +67 -64
  10. package/dist/es5/lib/parsers/parse-shapefile.js.map +1 -1
  11. package/dist/es5/lib/parsers/parse-shp.js +2 -2
  12. package/dist/es5/lib/parsers/parse-shp.js.map +1 -1
  13. package/dist/es5/lib/streaming/binary-chunk-reader.js +2 -2
  14. package/dist/es5/lib/streaming/binary-chunk-reader.js.map +1 -1
  15. package/dist/es5/lib/streaming/binary-reader.js +2 -2
  16. package/dist/es5/lib/streaming/binary-reader.js.map +1 -1
  17. package/dist/es5/lib/streaming/zip-batch-iterators.js +30 -26
  18. package/dist/es5/lib/streaming/zip-batch-iterators.js.map +1 -1
  19. package/dist/es5/shapefile-loader.js +1 -1
  20. package/dist/es5/shp-loader.js +4 -2
  21. package/dist/es5/shp-loader.js.map +1 -1
  22. package/dist/esm/dbf-loader.js +4 -2
  23. package/dist/esm/dbf-loader.js.map +1 -1
  24. package/dist/esm/index.js +3 -0
  25. package/dist/esm/index.js.map +1 -1
  26. package/dist/esm/lib/parsers/parse-dbf.js +1 -1
  27. package/dist/esm/lib/parsers/parse-dbf.js.map +1 -1
  28. package/dist/esm/lib/parsers/parse-shapefile.js +21 -17
  29. package/dist/esm/lib/parsers/parse-shapefile.js.map +1 -1
  30. package/dist/esm/lib/parsers/parse-shp.js +1 -1
  31. package/dist/esm/lib/parsers/parse-shp.js.map +1 -1
  32. package/dist/esm/lib/streaming/binary-chunk-reader.js +1 -1
  33. package/dist/esm/lib/streaming/binary-chunk-reader.js.map +1 -1
  34. package/dist/esm/lib/streaming/binary-reader.js +1 -1
  35. package/dist/esm/lib/streaming/binary-reader.js.map +1 -1
  36. package/dist/esm/lib/streaming/zip-batch-iterators.js +17 -11
  37. package/dist/esm/lib/streaming/zip-batch-iterators.js.map +1 -1
  38. package/dist/esm/shapefile-loader.js +1 -1
  39. package/dist/esm/shp-loader.js +2 -2
  40. package/dist/esm/shp-loader.js.map +1 -1
  41. package/dist/shp-worker.js +2 -2
  42. package/dist/src/bundle.d.ts.map +1 -0
  43. package/dist/src/dbf-loader.d.ts.map +1 -0
  44. package/dist/src/index.d.ts +7 -0
  45. package/dist/src/index.d.ts.map +1 -0
  46. package/dist/src/lib/parsers/parse-dbf.d.ts.map +1 -0
  47. package/dist/{lib → src/lib}/parsers/parse-shapefile.d.ts +1 -1
  48. package/dist/src/lib/parsers/parse-shapefile.d.ts.map +1 -0
  49. package/dist/src/lib/parsers/parse-shp-geometry.d.ts.map +1 -0
  50. package/dist/src/lib/parsers/parse-shp-header.d.ts.map +1 -0
  51. package/dist/{lib → src/lib}/parsers/parse-shp.d.ts +1 -1
  52. package/dist/src/lib/parsers/parse-shp.d.ts.map +1 -0
  53. package/dist/src/lib/parsers/parse-shx.d.ts.map +1 -0
  54. package/dist/src/lib/parsers/types.d.ts.map +1 -0
  55. package/dist/{lib → src/lib}/streaming/binary-chunk-reader.d.ts +2 -3
  56. package/dist/src/lib/streaming/binary-chunk-reader.d.ts.map +1 -0
  57. package/dist/{lib → src/lib}/streaming/binary-reader.d.ts +1 -1
  58. package/dist/src/lib/streaming/binary-reader.d.ts.map +1 -0
  59. package/dist/src/lib/streaming/zip-batch-iterators.d.ts +11 -0
  60. package/dist/src/lib/streaming/zip-batch-iterators.d.ts.map +1 -0
  61. package/dist/src/shapefile-loader.d.ts.map +1 -0
  62. package/dist/src/shp-loader.d.ts.map +1 -0
  63. package/dist/{workers → src/workers}/dbf-worker.d.ts.map +1 -1
  64. package/dist/{workers → src/workers}/shp-worker.d.ts.map +1 -1
  65. package/dist/tsconfig.tsbuildinfo +1 -0
  66. package/package.json +5 -6
  67. package/src/dbf-loader.ts +3 -1
  68. package/src/index.ts +5 -0
  69. package/src/lib/parsers/parse-dbf.ts +1 -1
  70. package/src/lib/parsers/parse-shapefile.ts +31 -22
  71. package/src/lib/parsers/parse-shp.ts +2 -2
  72. package/src/lib/streaming/binary-chunk-reader.ts +4 -3
  73. package/src/lib/streaming/binary-reader.ts +3 -1
  74. package/src/lib/streaming/zip-batch-iterators.ts +28 -14
  75. package/src/shp-loader.ts +4 -1
  76. package/dist/bundle.d.ts.map +0 -1
  77. package/dist/bundle.js +0 -5
  78. package/dist/dbf-loader.d.ts.map +0 -1
  79. package/dist/dbf-loader.js +0 -32
  80. package/dist/index.d.ts +0 -4
  81. package/dist/index.d.ts.map +0 -1
  82. package/dist/index.js +0 -11
  83. package/dist/lib/parsers/parse-dbf.d.ts.map +0 -1
  84. package/dist/lib/parsers/parse-dbf.js +0 -344
  85. package/dist/lib/parsers/parse-shapefile.d.ts.map +0 -1
  86. package/dist/lib/parsers/parse-shapefile.js +0 -240
  87. package/dist/lib/parsers/parse-shp-geometry.d.ts.map +0 -1
  88. package/dist/lib/parsers/parse-shp-geometry.js +0 -287
  89. package/dist/lib/parsers/parse-shp-header.d.ts.map +0 -1
  90. package/dist/lib/parsers/parse-shp-header.js +0 -43
  91. package/dist/lib/parsers/parse-shp.d.ts.map +0 -1
  92. package/dist/lib/parsers/parse-shp.js +0 -178
  93. package/dist/lib/parsers/parse-shx.d.ts.map +0 -1
  94. package/dist/lib/parsers/parse-shx.js +0 -28
  95. package/dist/lib/parsers/types.d.ts.map +0 -1
  96. package/dist/lib/parsers/types.js +0 -2
  97. package/dist/lib/streaming/binary-chunk-reader.d.ts.map +0 -1
  98. package/dist/lib/streaming/binary-chunk-reader.js +0 -161
  99. package/dist/lib/streaming/binary-reader.d.ts.map +0 -1
  100. package/dist/lib/streaming/binary-reader.js +0 -52
  101. package/dist/lib/streaming/zip-batch-iterators.d.ts +0 -8
  102. package/dist/lib/streaming/zip-batch-iterators.d.ts.map +0 -1
  103. package/dist/lib/streaming/zip-batch-iterators.js +0 -61
  104. package/dist/shapefile-loader.d.ts.map +0 -1
  105. package/dist/shapefile-loader.js +0 -30
  106. package/dist/shp-loader.d.ts.map +0 -1
  107. package/dist/shp-loader.js +0 -35
  108. package/dist/workers/dbf-worker.js +0 -5
  109. package/dist/workers/shp-worker.js +0 -5
  110. /package/dist/{bundle.d.ts → src/bundle.d.ts} +0 -0
  111. /package/dist/{dbf-loader.d.ts → src/dbf-loader.d.ts} +0 -0
  112. /package/dist/{lib → src/lib}/parsers/parse-dbf.d.ts +0 -0
  113. /package/dist/{lib → src/lib}/parsers/parse-shp-geometry.d.ts +0 -0
  114. /package/dist/{lib → src/lib}/parsers/parse-shp-header.d.ts +0 -0
  115. /package/dist/{lib → src/lib}/parsers/parse-shx.d.ts +0 -0
  116. /package/dist/{lib → src/lib}/parsers/types.d.ts +0 -0
  117. /package/dist/{shapefile-loader.d.ts → src/shapefile-loader.d.ts} +0 -0
  118. /package/dist/{shp-loader.d.ts → src/shp-loader.d.ts} +0 -0
  119. /package/dist/{workers → src/workers}/dbf-worker.d.ts +0 -0
  120. /package/dist/{workers → src/workers}/shp-worker.d.ts +0 -0
@@ -326,7 +326,7 @@
326
326
  }
327
327
 
328
328
  // src/dbf-loader.ts
329
- var VERSION = true ? "4.0.0-alpha.23" : "latest";
329
+ var VERSION = true ? "4.0.0-alpha.25" : "latest";
330
330
  var DBFWorkerLoader = {
331
331
  name: "DBF",
332
332
  id: "dbf",
@@ -346,7 +346,9 @@
346
346
  ...DBFWorkerLoader,
347
347
  parse: async (arrayBuffer, options) => parseDBF(arrayBuffer, options),
348
348
  parseSync: parseDBF,
349
- parseInBatches: parseDBFInBatches
349
+ parseInBatches(arrayBufferIterator, options) {
350
+ return parseDBFInBatches(arrayBufferIterator, options);
351
+ }
350
352
  };
351
353
 
352
354
  // ../worker-utils/src/lib/worker-utils/get-transfer-list.ts
package/dist/dist.min.js CHANGED
@@ -493,7 +493,7 @@
493
493
  ...SHPWorkerLoader,
494
494
  parse: async (arrayBuffer, options) => parseSHP(arrayBuffer, options),
495
495
  parseSync: parseSHP,
496
- parseInBatches: parseSHPInBatches
496
+ parseInBatches: (arrayBufferIterator, options) => parseSHPInBatches(arrayBufferIterator, options)
497
497
  };
498
498
  }
499
499
  });
@@ -6697,34 +6697,40 @@
6697
6697
  });
6698
6698
 
6699
6699
  // src/lib/streaming/zip-batch-iterators.ts
6700
- async function* zipBatchIterators(iterator1, iterator2) {
6701
- let batch1 = [];
6702
- let batch2 = [];
6700
+ async function* zipBatchIterators(iterator1, iterator2, shape) {
6701
+ const batch1Data = [];
6702
+ const batch2Data = [];
6703
6703
  let iterator1Done = false;
6704
6704
  let iterator2Done = false;
6705
6705
  while (!iterator1Done && !iterator2Done) {
6706
- if (batch1.length === 0 && !iterator1Done) {
6706
+ if (batch1Data.length === 0 && !iterator1Done) {
6707
6707
  const { value, done } = await iterator1.next();
6708
6708
  if (done) {
6709
6709
  iterator1Done = true;
6710
6710
  } else {
6711
- batch1 = value;
6711
+ batch1Data.push(...value);
6712
6712
  }
6713
- } else if (batch2.length === 0 && !iterator2Done) {
6713
+ }
6714
+ if (batch2Data.length === 0 && !iterator2Done) {
6714
6715
  const { value, done } = await iterator2.next();
6715
6716
  if (done) {
6716
6717
  iterator2Done = true;
6717
6718
  } else {
6718
- batch2 = value;
6719
+ batch2Data.push(...value);
6719
6720
  }
6720
6721
  }
6721
- const batch = extractBatch(batch1, batch2);
6722
- if (batch) {
6723
- yield batch;
6722
+ const batchData = extractBatchData(batch1Data, batch2Data);
6723
+ if (batchData) {
6724
+ yield {
6725
+ batchType: "data",
6726
+ shape,
6727
+ length: batchData.length,
6728
+ data: batchData
6729
+ };
6724
6730
  }
6725
6731
  }
6726
6732
  }
6727
- function extractBatch(batch1, batch2) {
6733
+ function extractBatchData(batch1, batch2) {
6728
6734
  const batchLength = Math.min(batch1.length, batch2.length);
6729
6735
  if (batchLength === 0) {
6730
6736
  return null;
@@ -6995,7 +7001,9 @@
6995
7001
  ...DBFWorkerLoader,
6996
7002
  parse: async (arrayBuffer, options) => parseDBF(arrayBuffer, options),
6997
7003
  parseSync: parseDBF,
6998
- parseInBatches: parseDBFInBatches
7004
+ parseInBatches(arrayBufferIterator, options) {
7005
+ return parseDBFInBatches(arrayBufferIterator, options);
7006
+ }
6999
7007
  };
7000
7008
  }
7001
7009
  });
@@ -7005,38 +7013,40 @@
7005
7013
  const { reproject = false, _targetCrs = "WGS84" } = options?.gis || {};
7006
7014
  const { shx, cpg, prj } = await loadShapefileSidecarFiles(options, context);
7007
7015
  const shapeIterable = await parseInBatchesFromContext(asyncIterator, SHPLoader, options, context);
7008
- let propertyIterable;
7016
+ const shapeIterator = shapeIterable[Symbol.asyncIterator]?.() || shapeIterable[Symbol.iterator]?.();
7017
+ let propertyIterator = null;
7009
7018
  const dbfResponse = await context?.fetch(replaceExtension(context?.url || "", "dbf"));
7010
7019
  if (dbfResponse?.ok) {
7011
- propertyIterable = await parseInBatchesFromContext(dbfResponse, DBFLoader, {
7020
+ const propertyIterable = await parseInBatchesFromContext(dbfResponse, DBFLoader, {
7012
7021
  ...options,
7013
7022
  dbf: { encoding: cpg || "latin1" }
7014
7023
  }, context);
7024
+ propertyIterator = propertyIterable[Symbol.asyncIterator]?.() || propertyIterable[Symbol.iterator]();
7015
7025
  }
7016
- let shapeHeader = (await shapeIterable.next()).value;
7026
+ let shapeHeader = (await shapeIterator.next()).value;
7017
7027
  if (shapeHeader && shapeHeader.batchType === "metadata") {
7018
- shapeHeader = (await shapeIterable.next()).value;
7028
+ shapeHeader = (await shapeIterator.next()).value;
7019
7029
  }
7020
7030
  let dbfHeader = {};
7021
- if (propertyIterable) {
7022
- dbfHeader = (await propertyIterable.next()).value;
7031
+ if (propertyIterator) {
7032
+ dbfHeader = (await propertyIterator.next()).value;
7023
7033
  if (dbfHeader && dbfHeader.batchType === "metadata") {
7024
- dbfHeader = (await propertyIterable.next()).value;
7034
+ dbfHeader = (await propertyIterator.next()).value;
7025
7035
  }
7026
7036
  }
7027
- let iterator;
7028
- if (propertyIterable) {
7029
- iterator = zipBatchIterators(shapeIterable, propertyIterable);
7030
- } else {
7031
- iterator = shapeIterable;
7032
- }
7033
- for await (const item of iterator) {
7037
+ const zippedIterator = propertyIterator ? zipBatchIterators(shapeIterator, propertyIterator, "object-row-table") : shapeIterator;
7038
+ const zippedBatchIterable = {
7039
+ [Symbol.asyncIterator]() {
7040
+ return zippedIterator;
7041
+ }
7042
+ };
7043
+ for await (const batch of zippedBatchIterable) {
7034
7044
  let geometries;
7035
7045
  let properties;
7036
- if (!propertyIterable) {
7037
- geometries = item;
7046
+ if (!propertyIterator) {
7047
+ geometries = batch;
7038
7048
  } else {
7039
- [geometries, properties] = item;
7049
+ [geometries, properties] = batch.data;
7040
7050
  }
7041
7051
  const geojsonGeometries = parseGeometries(geometries);
7042
7052
  let features = joinProperties(geojsonGeometries, properties);
@@ -7192,6 +7202,36 @@
7192
7202
  }
7193
7203
  });
7194
7204
 
7205
+ // src/lib/streaming/binary-reader.ts
7206
+ var BinaryReader;
7207
+ var init_binary_reader = __esm({
7208
+ "src/lib/streaming/binary-reader.ts"() {
7209
+ BinaryReader = class {
7210
+ constructor(arrayBuffer) {
7211
+ this.offset = 0;
7212
+ this.arrayBuffer = arrayBuffer;
7213
+ }
7214
+ hasAvailableBytes(bytes) {
7215
+ return this.arrayBuffer.byteLength - this.offset >= bytes;
7216
+ }
7217
+ getDataView(bytes) {
7218
+ if (bytes && !this.hasAvailableBytes(bytes)) {
7219
+ throw new Error("binary data exhausted");
7220
+ }
7221
+ const dataView = bytes ? new DataView(this.arrayBuffer, this.offset, bytes) : new DataView(this.arrayBuffer, this.offset);
7222
+ this.offset += bytes;
7223
+ return dataView;
7224
+ }
7225
+ skip(bytes) {
7226
+ this.offset += bytes;
7227
+ }
7228
+ rewind(bytes) {
7229
+ this.offset -= bytes;
7230
+ }
7231
+ };
7232
+ }
7233
+ });
7234
+
7195
7235
  // src/index.ts
7196
7236
  var src_exports = {};
7197
7237
  __export(src_exports, {
@@ -7199,13 +7239,19 @@
7199
7239
  DBFWorkerLoader: () => DBFWorkerLoader,
7200
7240
  SHPLoader: () => SHPLoader,
7201
7241
  SHPWorkerLoader: () => SHPWorkerLoader,
7202
- ShapefileLoader: () => ShapefileLoader
7242
+ ShapefileLoader: () => ShapefileLoader,
7243
+ _BinaryChunkReader: () => BinaryChunkReader,
7244
+ _BinaryReader: () => BinaryReader,
7245
+ _zipBatchIterators: () => zipBatchIterators
7203
7246
  });
7204
7247
  var init_src3 = __esm({
7205
7248
  "src/index.ts"() {
7206
7249
  init_shapefile_loader();
7207
7250
  init_dbf_loader();
7208
7251
  init_shp_loader();
7252
+ init_binary_reader();
7253
+ init_binary_chunk_reader();
7254
+ init_zip_batch_iterators();
7209
7255
  }
7210
7256
  });
7211
7257
 
@@ -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 "4.0.0-alpha.23" !== 'undefined' ? "4.0.0-alpha.23" : 'latest';
14
+ var VERSION = typeof "4.0.0-alpha.25" !== 'undefined' ? "4.0.0-alpha.25" : 'latest';
15
15
  var DBFWorkerLoader = {
16
16
  name: 'DBF',
17
17
  id: 'dbf',
@@ -47,7 +47,9 @@ var DBFLoader = _objectSpread(_objectSpread({}, DBFWorkerLoader), {}, {
47
47
  return parse;
48
48
  }(),
49
49
  parseSync: _parseDbf.parseDBF,
50
- parseInBatches: _parseDbf.parseDBFInBatches
50
+ parseInBatches: function parseInBatches(arrayBufferIterator, options) {
51
+ return (0, _parseDbf.parseDBFInBatches)(arrayBufferIterator, options);
52
+ }
51
53
  });
52
54
  exports.DBFLoader = DBFLoader;
53
55
  //# sourceMappingURL=dbf-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dbf-loader.js","names":["_parseDbf","require","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","VERSION","DBFWorkerLoader","name","id","module","version","worker","category","extensions","mimeTypes","options","dbf","encoding","exports","DBFLoader","parse","_parse","_asyncToGenerator2","_regenerator","mark","_callee","arrayBuffer","wrap","_callee$","_context","prev","next","abrupt","parseDBF","stop","_x","_x2","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,IAAAA,SAAA,GAAAC,OAAA;AAAoE,SAAAC,QAAAC,MAAA,EAAAC,cAAA,QAAAC,IAAA,GAAAC,MAAA,CAAAD,IAAA,CAAAF,MAAA,OAAAG,MAAA,CAAAC,qBAAA,QAAAC,OAAA,GAAAF,MAAA,CAAAC,qBAAA,CAAAJ,MAAA,GAAAC,cAAA,KAAAI,OAAA,GAAAA,OAAA,CAAAC,MAAA,WAAAC,GAAA,WAAAJ,MAAA,CAAAK,wBAAA,CAAAR,MAAA,EAAAO,GAAA,EAAAE,UAAA,OAAAP,IAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,IAAA,EAAAG,OAAA,YAAAH,IAAA;AAAA,SAAAU,cAAAC,MAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAF,CAAA,UAAAG,MAAA,WAAAF,SAAA,CAAAD,CAAA,IAAAC,SAAA,CAAAD,CAAA,QAAAA,CAAA,OAAAf,OAAA,CAAAI,MAAA,CAAAc,MAAA,OAAAC,OAAA,WAAAC,GAAA,QAAAC,gBAAA,CAAAC,OAAA,EAAAR,MAAA,EAAAM,GAAA,EAAAF,MAAA,CAAAE,GAAA,SAAAhB,MAAA,CAAAmB,yBAAA,GAAAnB,MAAA,CAAAoB,gBAAA,CAAAV,MAAA,EAAAV,MAAA,CAAAmB,yBAAA,CAAAL,MAAA,KAAAlB,OAAA,CAAAI,MAAA,CAAAc,MAAA,GAAAC,OAAA,WAAAC,GAAA,IAAAhB,MAAA,CAAAqB,cAAA,CAAAX,MAAA,EAAAM,GAAA,EAAAhB,MAAA,CAAAK,wBAAA,CAAAS,MAAA,EAAAE,GAAA,iBAAAN,MAAA;AAIpE,IAAMY,OAAO,GAAG,uBAAkB,KAAK,WAAW,sBAAiB,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;AAACC,OAAA,CAAAZ,eAAA,GAAAA,eAAA;AAGK,IAAMa,SAA2B,GAAA3B,aAAA,CAAAA,aAAA,KACnCc,eAAe;EAClBc,KAAK;IAAA,IAAAC,MAAA,OAAAC,kBAAA,CAAArB,OAAA,EAAAsB,YAAA,CAAAtB,OAAA,CAAAuB,IAAA,CAAE,SAAAC,QAAOC,WAAW,EAAEX,OAAO;MAAA,OAAAQ,YAAA,CAAAtB,OAAA,CAAA0B,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YAAA,OAAAF,QAAA,CAAAG,MAAA,WAAK,IAAAC,kBAAQ,EAACP,WAAW,EAAEX,OAAO,CAAC;UAAA;UAAA;YAAA,OAAAc,QAAA,CAAAK,IAAA;QAAA;MAAA,GAAAT,OAAA;IAAA;IAAA,SAAAL,MAAAe,EAAA,EAAAC,GAAA;MAAA,OAAAf,MAAA,CAAA9B,KAAA,OAAAI,SAAA;IAAA;IAAA,OAAAyB,KAAA;EAAA;EACrEiB,SAAS,EAAEJ,kBAAQ;EACnBK,cAAc,EAAEC;AAAiB,EAClC;AAACrB,OAAA,CAAAC,SAAA,GAAAA,SAAA"}
1
+ {"version":3,"file":"dbf-loader.js","names":["_parseDbf","require","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","VERSION","DBFWorkerLoader","name","id","module","version","worker","category","extensions","mimeTypes","options","dbf","encoding","exports","DBFLoader","parse","_parse","_asyncToGenerator2","_regenerator","mark","_callee","arrayBuffer","wrap","_callee$","_context","prev","next","abrupt","parseDBF","stop","_x","_x2","parseSync","parseInBatches","arrayBufferIterator","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(arrayBufferIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>, options) {\n return parseDBFInBatches(arrayBufferIterator, options);\n }\n};\n"],"mappings":";;;;;;;;;;AACA,IAAAA,SAAA,GAAAC,OAAA;AAAoE,SAAAC,QAAAC,MAAA,EAAAC,cAAA,QAAAC,IAAA,GAAAC,MAAA,CAAAD,IAAA,CAAAF,MAAA,OAAAG,MAAA,CAAAC,qBAAA,QAAAC,OAAA,GAAAF,MAAA,CAAAC,qBAAA,CAAAJ,MAAA,GAAAC,cAAA,KAAAI,OAAA,GAAAA,OAAA,CAAAC,MAAA,WAAAC,GAAA,WAAAJ,MAAA,CAAAK,wBAAA,CAAAR,MAAA,EAAAO,GAAA,EAAAE,UAAA,OAAAP,IAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,IAAA,EAAAG,OAAA,YAAAH,IAAA;AAAA,SAAAU,cAAAC,MAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAF,CAAA,UAAAG,MAAA,WAAAF,SAAA,CAAAD,CAAA,IAAAC,SAAA,CAAAD,CAAA,QAAAA,CAAA,OAAAf,OAAA,CAAAI,MAAA,CAAAc,MAAA,OAAAC,OAAA,WAAAC,GAAA,QAAAC,gBAAA,CAAAC,OAAA,EAAAR,MAAA,EAAAM,GAAA,EAAAF,MAAA,CAAAE,GAAA,SAAAhB,MAAA,CAAAmB,yBAAA,GAAAnB,MAAA,CAAAoB,gBAAA,CAAAV,MAAA,EAAAV,MAAA,CAAAmB,yBAAA,CAAAL,MAAA,KAAAlB,OAAA,CAAAI,MAAA,CAAAc,MAAA,GAAAC,OAAA,WAAAC,GAAA,IAAAhB,MAAA,CAAAqB,cAAA,CAAAX,MAAA,EAAAM,GAAA,EAAAhB,MAAA,CAAAK,wBAAA,CAAAS,MAAA,EAAAE,GAAA,iBAAAN,MAAA;AAIpE,IAAMY,OAAO,GAAG,uBAAkB,KAAK,WAAW,sBAAiB,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;AAACC,OAAA,CAAAZ,eAAA,GAAAA,eAAA;AAGK,IAAMa,SAA2B,GAAA3B,aAAA,CAAAA,aAAA,KACnCc,eAAe;EAClBc,KAAK;IAAA,IAAAC,MAAA,OAAAC,kBAAA,CAAArB,OAAA,EAAAsB,YAAA,CAAAtB,OAAA,CAAAuB,IAAA,CAAE,SAAAC,QAAOC,WAAW,EAAEX,OAAO;MAAA,OAAAQ,YAAA,CAAAtB,OAAA,CAAA0B,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YAAA,OAAAF,QAAA,CAAAG,MAAA,WAAK,IAAAC,kBAAQ,EAACP,WAAW,EAAEX,OAAO,CAAC;UAAA;UAAA;YAAA,OAAAc,QAAA,CAAAK,IAAA;QAAA;MAAA,GAAAT,OAAA;IAAA;IAAA,SAAAL,MAAAe,EAAA,EAAAC,GAAA;MAAA,OAAAf,MAAA,CAAA9B,KAAA,OAAAI,SAAA;IAAA;IAAA,OAAAyB,KAAA;EAAA;EACrEiB,SAAS,EAAEJ,kBAAQ;EACnBK,cAAc,WAAAA,eAACC,mBAAuE,EAAExB,OAAO,EAAE;IAC/F,OAAO,IAAAyB,2BAAiB,EAACD,mBAAmB,EAAExB,OAAO,CAAC;EACxD;AAAC,EACF;AAACG,OAAA,CAAAC,SAAA,GAAAA,SAAA"}
package/dist/es5/index.js CHANGED
@@ -33,7 +33,28 @@ Object.defineProperty(exports, "ShapefileLoader", {
33
33
  return _shapefileLoader.ShapefileLoader;
34
34
  }
35
35
  });
36
+ Object.defineProperty(exports, "_BinaryChunkReader", {
37
+ enumerable: true,
38
+ get: function get() {
39
+ return _binaryChunkReader.BinaryChunkReader;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "_BinaryReader", {
43
+ enumerable: true,
44
+ get: function get() {
45
+ return _binaryReader.BinaryReader;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, "_zipBatchIterators", {
49
+ enumerable: true,
50
+ get: function get() {
51
+ return _zipBatchIterators.zipBatchIterators;
52
+ }
53
+ });
36
54
  var _shapefileLoader = require("./shapefile-loader");
37
55
  var _dbfLoader = require("./dbf-loader");
38
56
  var _shpLoader = require("./shp-loader");
57
+ var _binaryReader = require("./lib/streaming/binary-reader");
58
+ var _binaryChunkReader = require("./lib/streaming/binary-chunk-reader");
59
+ var _zipBatchIterators = require("./lib/streaming/zip-batch-iterators");
39
60
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_shapefileLoader","require","_dbfLoader","_shpLoader"],"sources":["../../src/index.ts"],"sourcesContent":["export {ShapefileLoader} from './shapefile-loader';\nexport {DBFLoader, DBFWorkerLoader} from './dbf-loader';\nexport {SHPLoader, SHPWorkerLoader} from './shp-loader';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA"}
1
+ {"version":3,"file":"index.js","names":["_shapefileLoader","require","_dbfLoader","_shpLoader","_binaryReader","_binaryChunkReader","_zipBatchIterators"],"sources":["../../src/index.ts"],"sourcesContent":["export {ShapefileLoader} from './shapefile-loader';\nexport {DBFLoader, DBFWorkerLoader} from './dbf-loader';\nexport {SHPLoader, SHPWorkerLoader} from './shp-loader';\n\n// EXPERIMENTAL\nexport {BinaryReader as _BinaryReader} from './lib/streaming/binary-reader';\nexport {BinaryChunkReader as _BinaryChunkReader} from './lib/streaming/binary-chunk-reader';\nexport {zipBatchIterators as _zipBatchIterators} from './lib/streaming/zip-batch-iterators';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAGA,IAAAG,aAAA,GAAAH,OAAA;AACA,IAAAI,kBAAA,GAAAJ,OAAA;AACA,IAAAK,kBAAA,GAAAL,OAAA"}
@@ -12,7 +12,7 @@ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/creat
12
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
13
  var _awaitAsyncGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/awaitAsyncGenerator"));
14
14
  var _wrapAsyncGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapAsyncGenerator"));
15
- var _binaryChunkReader = _interopRequireDefault(require("../streaming/binary-chunk-reader"));
15
+ var _binaryChunkReader = require("../streaming/binary-chunk-reader");
16
16
  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; } } }; }
17
17
  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); }
18
18
  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; }
@@ -31,7 +31,7 @@ var STATE = function (STATE) {
31
31
  var DBFParser = function () {
32
32
  function DBFParser(options) {
33
33
  (0, _classCallCheck2.default)(this, DBFParser);
34
- (0, _defineProperty2.default)(this, "binaryReader", new _binaryChunkReader.default());
34
+ (0, _defineProperty2.default)(this, "binaryReader", new _binaryChunkReader.BinaryChunkReader());
35
35
  (0, _defineProperty2.default)(this, "textDecoder", void 0);
36
36
  (0, _defineProperty2.default)(this, "state", STATE.START);
37
37
  (0, _defineProperty2.default)(this, "result", {
@@ -1 +1 @@
1
- {"version":3,"file":"parse-dbf.js","names":["_binaryChunkReader","_interopRequireDefault","require","_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","_asyncIterator","iterable","method","async","sync","retry","asyncIterator","AsyncFromSyncIterator","AsyncFromSyncIteratorContinuation","r","Promise","reject","resolve","then","apply","arguments","_return","ret","throw","_throw","thr","LITTLE_ENDIAN","DBF_HEADER_SIZE","STATE","DBFParser","options","_classCallCheck2","default","_defineProperty2","BinaryChunkReader","START","data","textDecoder","TextDecoder","encoding","_createClass2","key","write","arrayBuffer","binaryReader","state","parseState","result","end","END","ERROR","error","parseDBF","_options$tables","_options$dbf","undefined","_ref","dbf","_ref$encoding","dbfParser","_dbfParser$result","schema","shape","tables","format","table","rows","parseDBFInBatches","_x","_parseDBFInBatches","_wrapAsyncGenerator2","_regenerator","mark","_callee","_ref2","_ref2$encoding","parser","headerReturned","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_iterator","_step","wrap","_callee$","_context","prev","_awaitAsyncGenerator2","sent","dbfHeader","t0","finish","stop","dataView","getDataView","parseDBFHeader","progress","bytesUsed","rowsTotal","nRecords","FIELD_DESCRIPTORS","fieldDescriptorView","headerLength","dbfFields","parseFieldDescriptors","fields","map","dbfField","makeField","metadata","FIELD_PROPERTIES","skip","_ref3","_ref3$recordLength","recordLength","_ref3$nRecords","recordView","row","parseRow","push","concat","message","headerView","year","getUint8","month","day","getUint32","getUint16","languageDriver","view","nFields","byteLength","offset","decode","Uint8Array","buffer","byteOffset","replace","dataType","String","fromCharCode","fieldLength","decimal","out","_iterator2","_step2","field","text","parseField","parseNumber","parseCharacter","parseDate","parseBoolean","Error","str","Date","UTC","parseInt","number","parseFloat","isNaN","trim","_ref4","type","nullable"],"sources":["../../../../src/lib/parsers/parse-dbf.ts"],"sourcesContent":["import {Field, ObjectRowTable} from '@loaders.gl/schema';\nimport BinaryChunkReader from '../streaming/binary-chunk-reader';\nimport {\n DBFLoaderOptions,\n DBFResult,\n DBFTableOutput,\n DBFHeader,\n DBFRowsOutput,\n DBFField\n} from './types';\n\nconst LITTLE_ENDIAN = true;\nconst DBF_HEADER_SIZE = 32;\n\nenum STATE {\n START = 0, // Expecting header\n FIELD_DESCRIPTORS = 1,\n FIELD_PROPERTIES = 2,\n END = 3,\n ERROR = 4\n}\n\nclass DBFParser {\n binaryReader = new BinaryChunkReader();\n textDecoder: TextDecoder;\n state = STATE.START;\n result: DBFResult = {\n data: []\n };\n\n constructor(options: {encoding: string}) {\n this.textDecoder = new TextDecoder(options.encoding);\n }\n\n /**\n * @param arrayBuffer\n */\n write(arrayBuffer: ArrayBuffer): void {\n this.binaryReader.write(arrayBuffer);\n this.state = parseState(this.state, this.result, this.binaryReader, this.textDecoder);\n // this.result.progress.bytesUsed = this.binaryReader.bytesUsed();\n\n // important events:\n // - schema available\n // - first rows available\n // - all rows available\n }\n\n end(): void {\n this.binaryReader.end();\n this.state = parseState(this.state, this.result, this.binaryReader, this.textDecoder);\n // this.result.progress.bytesUsed = this.binaryReader.bytesUsed();\n if (this.state !== STATE.END) {\n this.state = STATE.ERROR;\n this.result.error = 'DBF incomplete file';\n }\n }\n}\n\n/**\n * @param arrayBuffer\n * @param options\n * @returns DBFTable or rows\n */\nexport function parseDBF(\n arrayBuffer: ArrayBuffer,\n options: DBFLoaderOptions = {}\n): DBFRowsOutput | DBFTableOutput | ObjectRowTable {\n const {encoding = 'latin1'} = options.dbf || {};\n\n const dbfParser = new DBFParser({encoding});\n dbfParser.write(arrayBuffer);\n dbfParser.end();\n\n const {data, schema} = dbfParser.result;\n const shape = options?.tables?.format || options?.dbf?.shape;\n switch (shape) {\n case 'object-row-table': {\n const table: ObjectRowTable = {\n shape: 'object-row-table',\n schema,\n data\n };\n return table;\n }\n case 'table':\n return {schema, rows: data};\n case 'rows':\n default:\n return data;\n }\n}\n/**\n * @param asyncIterator\n * @param options\n */\nexport async function* parseDBFInBatches(\n asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options: DBFLoaderOptions = {}\n): AsyncIterable<DBFHeader | DBFRowsOutput | DBFTableOutput> {\n const {encoding = 'latin1'} = options.dbf || {};\n\n const parser = new DBFParser({encoding});\n let headerReturned = false;\n for await (const arrayBuffer of asyncIterator) {\n parser.write(arrayBuffer);\n if (!headerReturned && parser.result.dbfHeader) {\n headerReturned = true;\n yield parser.result.dbfHeader;\n }\n\n if (parser.result.data.length > 0) {\n yield parser.result.data;\n parser.result.data = [];\n }\n }\n parser.end();\n if (parser.result.data.length > 0) {\n yield parser.result.data;\n }\n}\n/**\n * https://www.dbase.com/Knowledgebase/INT/db7_file_fmt.htm\n * @param state\n * @param result\n * @param binaryReader\n * @param textDecoder\n * @returns\n */\n/* eslint-disable complexity, max-depth */\nfunction parseState(\n state: STATE,\n result: DBFResult,\n binaryReader: BinaryChunkReader,\n textDecoder: TextDecoder\n): STATE {\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.START:\n // Parse initial file header\n // DBF Header\n const dataView = binaryReader.getDataView(DBF_HEADER_SIZE);\n if (!dataView) {\n return state;\n }\n result.dbfHeader = parseDBFHeader(dataView);\n result.progress = {\n bytesUsed: 0,\n rowsTotal: result.dbfHeader.nRecords,\n rows: 0\n };\n state = STATE.FIELD_DESCRIPTORS;\n break;\n\n case STATE.FIELD_DESCRIPTORS:\n // Parse DBF field descriptors (schema)\n const fieldDescriptorView = binaryReader.getDataView(\n // @ts-ignore\n result.dbfHeader.headerLength - DBF_HEADER_SIZE\n );\n if (!fieldDescriptorView) {\n return state;\n }\n\n result.dbfFields = parseFieldDescriptors(fieldDescriptorView, textDecoder);\n result.schema = {\n fields: result.dbfFields.map((dbfField) => makeField(dbfField)),\n metadata: {}\n };\n\n state = STATE.FIELD_PROPERTIES;\n\n // TODO(kyle) Not exactly sure why start offset needs to be headerLength + 1?\n // parsedbf uses ((fields.length + 1) << 5) + 2;\n binaryReader.skip(1);\n break;\n\n case STATE.FIELD_PROPERTIES:\n const {recordLength = 0, nRecords = 0} = result?.dbfHeader || {};\n while (result.data.length < nRecords) {\n const recordView = binaryReader.getDataView(recordLength - 1);\n if (!recordView) {\n return state;\n }\n // Note: Avoid actually reading the last byte, which may not be present\n binaryReader.skip(1);\n\n // @ts-ignore\n const row = parseRow(recordView, result.dbfFields, textDecoder);\n result.data.push(row);\n // @ts-ignore\n result.progress.rows = result.data.length;\n }\n state = STATE.END;\n break;\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 = `DBF parsing failed: ${(error as Error).message}`;\n return state;\n }\n }\n}\n\n/**\n * @param headerView\n */\nfunction parseDBFHeader(headerView: DataView): DBFHeader {\n return {\n // Last updated date\n year: headerView.getUint8(1) + 1900,\n month: headerView.getUint8(2),\n day: headerView.getUint8(3),\n // Number of records in data file\n nRecords: headerView.getUint32(4, LITTLE_ENDIAN),\n // Length of header in bytes\n headerLength: headerView.getUint16(8, LITTLE_ENDIAN),\n // Length of each record\n recordLength: headerView.getUint16(10, LITTLE_ENDIAN),\n // Not sure if this is usually set\n languageDriver: headerView.getUint8(29)\n };\n}\n\n/**\n * @param view\n */\nfunction parseFieldDescriptors(view: DataView, textDecoder: TextDecoder): DBFField[] {\n // NOTE: this might overestimate the number of fields if the \"Database\n // Container\" container exists and is included in the headerLength\n const nFields = (view.byteLength - 1) / 32;\n const fields: DBFField[] = [];\n let offset = 0;\n for (let i = 0; i < nFields; i++) {\n const name = textDecoder\n .decode(new Uint8Array(view.buffer, view.byteOffset + offset, 11))\n // eslint-disable-next-line no-control-regex\n .replace(/\\u0000/g, '');\n\n fields.push({\n name,\n dataType: String.fromCharCode(view.getUint8(offset + 11)),\n fieldLength: view.getUint8(offset + 16),\n decimal: view.getUint8(offset + 17)\n });\n offset += 32;\n }\n return fields;\n}\n\n/*\n * @param {BinaryChunkReader} binaryReader\nfunction parseRows(binaryReader, fields, nRecords, recordLength, textDecoder) {\n const rows = [];\n for (let i = 0; i < nRecords; i++) {\n const recordView = binaryReader.getDataView(recordLength - 1);\n binaryReader.skip(1);\n // @ts-ignore\n rows.push(parseRow(recordView, fields, textDecoder));\n }\n return rows;\n}\n */\n\n/**\n *\n * @param view\n * @param fields\n * @param textDecoder\n * @returns\n */\nfunction parseRow(\n view: DataView,\n fields: DBFField[],\n textDecoder: TextDecoder\n): {[key: string]: any} {\n const out: {[key: string]: string | number | boolean | null} = {};\n let offset = 0;\n for (const field of fields) {\n const text = textDecoder.decode(\n new Uint8Array(view.buffer, view.byteOffset + offset, field.fieldLength)\n );\n out[field.name] = parseField(text, field.dataType);\n offset += field.fieldLength;\n }\n\n return out;\n}\n\n/**\n * Should NaN be coerced to null?\n * @param text\n * @param dataType\n * @returns Field depends on a type of the data\n */\nfunction parseField(text: string, dataType: string): string | number | boolean | null {\n switch (dataType) {\n case 'B':\n return parseNumber(text);\n case 'C':\n return parseCharacter(text);\n case 'F':\n return parseNumber(text);\n case 'N':\n return parseNumber(text);\n case 'O':\n return parseNumber(text);\n case 'D':\n return parseDate(text);\n case 'L':\n return parseBoolean(text);\n default:\n throw new Error('Unsupported data type');\n }\n}\n\n/**\n * Parse YYYYMMDD to date in milliseconds\n * @param str YYYYMMDD\n * @returns new Date as a number\n */\nfunction parseDate(str: any): number {\n return Date.UTC(str.slice(0, 4), parseInt(str.slice(4, 6), 10) - 1, str.slice(6, 8));\n}\n\n/**\n * Read boolean value\n * any of Y, y, T, t coerce to true\n * any of N, n, F, f coerce to false\n * otherwise null\n * @param value\n * @returns boolean | null\n */\nfunction parseBoolean(value: string): boolean | null {\n return /^[nf]$/i.test(value) ? false : /^[yt]$/i.test(value) ? true : null;\n}\n\n/**\n * Return null instead of NaN\n * @param text\n * @returns number | null\n */\nfunction parseNumber(text: string): number | null {\n const number = parseFloat(text);\n return isNaN(number) ? null : number;\n}\n\n/**\n *\n * @param text\n * @returns string | null\n */\nfunction parseCharacter(text: string): string | null {\n return text.trim() || null;\n}\n\n/**\n * Create a standard Arrow-style `Field` from field descriptor.\n * TODO - use `fieldLength` and `decimal` to generate smaller types?\n * @param param0\n * @returns Field\n */\n// eslint-disable\nfunction makeField({name, dataType, fieldLength, decimal}: DBFField): Field {\n switch (dataType) {\n case 'B':\n return {name, type: 'float64', nullable: true, metadata: {}};\n case 'C':\n return {name, type: 'utf8', nullable: true, metadata: {}};\n case 'F':\n return {name, type: 'float64', nullable: true, metadata: {}};\n case 'N':\n return {name, type: 'float64', nullable: true, metadata: {}};\n case 'O':\n return {name, type: 'float64', nullable: true, metadata: {}};\n case 'D':\n return {name, type: 'timestamp-millisecond', nullable: true, metadata: {}};\n case 'L':\n return {name, type: 'bool', nullable: true, metadata: {}};\n default:\n throw new Error('Unsupported data type');\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"parse-dbf.js","names":["_binaryChunkReader","require","_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","_asyncIterator","iterable","method","async","sync","retry","asyncIterator","AsyncFromSyncIterator","AsyncFromSyncIteratorContinuation","r","Promise","reject","resolve","then","apply","arguments","_return","ret","throw","_throw","thr","LITTLE_ENDIAN","DBF_HEADER_SIZE","STATE","DBFParser","options","_classCallCheck2","default","_defineProperty2","BinaryChunkReader","START","data","textDecoder","TextDecoder","encoding","_createClass2","key","write","arrayBuffer","binaryReader","state","parseState","result","end","END","ERROR","error","parseDBF","_options$tables","_options$dbf","undefined","_ref","dbf","_ref$encoding","dbfParser","_dbfParser$result","schema","shape","tables","format","table","rows","parseDBFInBatches","_x","_parseDBFInBatches","_wrapAsyncGenerator2","_regenerator","mark","_callee","_ref2","_ref2$encoding","parser","headerReturned","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_iterator","_step","wrap","_callee$","_context","prev","_awaitAsyncGenerator2","sent","dbfHeader","t0","finish","stop","dataView","getDataView","parseDBFHeader","progress","bytesUsed","rowsTotal","nRecords","FIELD_DESCRIPTORS","fieldDescriptorView","headerLength","dbfFields","parseFieldDescriptors","fields","map","dbfField","makeField","metadata","FIELD_PROPERTIES","skip","_ref3","_ref3$recordLength","recordLength","_ref3$nRecords","recordView","row","parseRow","push","concat","message","headerView","year","getUint8","month","day","getUint32","getUint16","languageDriver","view","nFields","byteLength","offset","decode","Uint8Array","buffer","byteOffset","replace","dataType","String","fromCharCode","fieldLength","decimal","out","_iterator2","_step2","field","text","parseField","parseNumber","parseCharacter","parseDate","parseBoolean","Error","str","Date","UTC","parseInt","number","parseFloat","isNaN","trim","_ref4","type","nullable"],"sources":["../../../../src/lib/parsers/parse-dbf.ts"],"sourcesContent":["import {Field, ObjectRowTable} from '@loaders.gl/schema';\nimport {BinaryChunkReader} from '../streaming/binary-chunk-reader';\nimport {\n DBFLoaderOptions,\n DBFResult,\n DBFTableOutput,\n DBFHeader,\n DBFRowsOutput,\n DBFField\n} from './types';\n\nconst LITTLE_ENDIAN = true;\nconst DBF_HEADER_SIZE = 32;\n\nenum STATE {\n START = 0, // Expecting header\n FIELD_DESCRIPTORS = 1,\n FIELD_PROPERTIES = 2,\n END = 3,\n ERROR = 4\n}\n\nclass DBFParser {\n binaryReader = new BinaryChunkReader();\n textDecoder: TextDecoder;\n state = STATE.START;\n result: DBFResult = {\n data: []\n };\n\n constructor(options: {encoding: string}) {\n this.textDecoder = new TextDecoder(options.encoding);\n }\n\n /**\n * @param arrayBuffer\n */\n write(arrayBuffer: ArrayBuffer): void {\n this.binaryReader.write(arrayBuffer);\n this.state = parseState(this.state, this.result, this.binaryReader, this.textDecoder);\n // this.result.progress.bytesUsed = this.binaryReader.bytesUsed();\n\n // important events:\n // - schema available\n // - first rows available\n // - all rows available\n }\n\n end(): void {\n this.binaryReader.end();\n this.state = parseState(this.state, this.result, this.binaryReader, this.textDecoder);\n // this.result.progress.bytesUsed = this.binaryReader.bytesUsed();\n if (this.state !== STATE.END) {\n this.state = STATE.ERROR;\n this.result.error = 'DBF incomplete file';\n }\n }\n}\n\n/**\n * @param arrayBuffer\n * @param options\n * @returns DBFTable or rows\n */\nexport function parseDBF(\n arrayBuffer: ArrayBuffer,\n options: DBFLoaderOptions = {}\n): DBFRowsOutput | DBFTableOutput | ObjectRowTable {\n const {encoding = 'latin1'} = options.dbf || {};\n\n const dbfParser = new DBFParser({encoding});\n dbfParser.write(arrayBuffer);\n dbfParser.end();\n\n const {data, schema} = dbfParser.result;\n const shape = options?.tables?.format || options?.dbf?.shape;\n switch (shape) {\n case 'object-row-table': {\n const table: ObjectRowTable = {\n shape: 'object-row-table',\n schema,\n data\n };\n return table;\n }\n case 'table':\n return {schema, rows: data};\n case 'rows':\n default:\n return data;\n }\n}\n/**\n * @param asyncIterator\n * @param options\n */\nexport async function* parseDBFInBatches(\n asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options: DBFLoaderOptions = {}\n): AsyncIterable<DBFHeader | DBFRowsOutput | DBFTableOutput> {\n const {encoding = 'latin1'} = options.dbf || {};\n\n const parser = new DBFParser({encoding});\n let headerReturned = false;\n for await (const arrayBuffer of asyncIterator) {\n parser.write(arrayBuffer);\n if (!headerReturned && parser.result.dbfHeader) {\n headerReturned = true;\n yield parser.result.dbfHeader;\n }\n\n if (parser.result.data.length > 0) {\n yield parser.result.data;\n parser.result.data = [];\n }\n }\n parser.end();\n if (parser.result.data.length > 0) {\n yield parser.result.data;\n }\n}\n/**\n * https://www.dbase.com/Knowledgebase/INT/db7_file_fmt.htm\n * @param state\n * @param result\n * @param binaryReader\n * @param textDecoder\n * @returns\n */\n/* eslint-disable complexity, max-depth */\nfunction parseState(\n state: STATE,\n result: DBFResult,\n binaryReader: BinaryChunkReader,\n textDecoder: TextDecoder\n): STATE {\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.START:\n // Parse initial file header\n // DBF Header\n const dataView = binaryReader.getDataView(DBF_HEADER_SIZE);\n if (!dataView) {\n return state;\n }\n result.dbfHeader = parseDBFHeader(dataView);\n result.progress = {\n bytesUsed: 0,\n rowsTotal: result.dbfHeader.nRecords,\n rows: 0\n };\n state = STATE.FIELD_DESCRIPTORS;\n break;\n\n case STATE.FIELD_DESCRIPTORS:\n // Parse DBF field descriptors (schema)\n const fieldDescriptorView = binaryReader.getDataView(\n // @ts-ignore\n result.dbfHeader.headerLength - DBF_HEADER_SIZE\n );\n if (!fieldDescriptorView) {\n return state;\n }\n\n result.dbfFields = parseFieldDescriptors(fieldDescriptorView, textDecoder);\n result.schema = {\n fields: result.dbfFields.map((dbfField) => makeField(dbfField)),\n metadata: {}\n };\n\n state = STATE.FIELD_PROPERTIES;\n\n // TODO(kyle) Not exactly sure why start offset needs to be headerLength + 1?\n // parsedbf uses ((fields.length + 1) << 5) + 2;\n binaryReader.skip(1);\n break;\n\n case STATE.FIELD_PROPERTIES:\n const {recordLength = 0, nRecords = 0} = result?.dbfHeader || {};\n while (result.data.length < nRecords) {\n const recordView = binaryReader.getDataView(recordLength - 1);\n if (!recordView) {\n return state;\n }\n // Note: Avoid actually reading the last byte, which may not be present\n binaryReader.skip(1);\n\n // @ts-ignore\n const row = parseRow(recordView, result.dbfFields, textDecoder);\n result.data.push(row);\n // @ts-ignore\n result.progress.rows = result.data.length;\n }\n state = STATE.END;\n break;\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 = `DBF parsing failed: ${(error as Error).message}`;\n return state;\n }\n }\n}\n\n/**\n * @param headerView\n */\nfunction parseDBFHeader(headerView: DataView): DBFHeader {\n return {\n // Last updated date\n year: headerView.getUint8(1) + 1900,\n month: headerView.getUint8(2),\n day: headerView.getUint8(3),\n // Number of records in data file\n nRecords: headerView.getUint32(4, LITTLE_ENDIAN),\n // Length of header in bytes\n headerLength: headerView.getUint16(8, LITTLE_ENDIAN),\n // Length of each record\n recordLength: headerView.getUint16(10, LITTLE_ENDIAN),\n // Not sure if this is usually set\n languageDriver: headerView.getUint8(29)\n };\n}\n\n/**\n * @param view\n */\nfunction parseFieldDescriptors(view: DataView, textDecoder: TextDecoder): DBFField[] {\n // NOTE: this might overestimate the number of fields if the \"Database\n // Container\" container exists and is included in the headerLength\n const nFields = (view.byteLength - 1) / 32;\n const fields: DBFField[] = [];\n let offset = 0;\n for (let i = 0; i < nFields; i++) {\n const name = textDecoder\n .decode(new Uint8Array(view.buffer, view.byteOffset + offset, 11))\n // eslint-disable-next-line no-control-regex\n .replace(/\\u0000/g, '');\n\n fields.push({\n name,\n dataType: String.fromCharCode(view.getUint8(offset + 11)),\n fieldLength: view.getUint8(offset + 16),\n decimal: view.getUint8(offset + 17)\n });\n offset += 32;\n }\n return fields;\n}\n\n/*\n * @param {BinaryChunkReader} binaryReader\nfunction parseRows(binaryReader, fields, nRecords, recordLength, textDecoder) {\n const rows = [];\n for (let i = 0; i < nRecords; i++) {\n const recordView = binaryReader.getDataView(recordLength - 1);\n binaryReader.skip(1);\n // @ts-ignore\n rows.push(parseRow(recordView, fields, textDecoder));\n }\n return rows;\n}\n */\n\n/**\n *\n * @param view\n * @param fields\n * @param textDecoder\n * @returns\n */\nfunction parseRow(\n view: DataView,\n fields: DBFField[],\n textDecoder: TextDecoder\n): {[key: string]: any} {\n const out: {[key: string]: string | number | boolean | null} = {};\n let offset = 0;\n for (const field of fields) {\n const text = textDecoder.decode(\n new Uint8Array(view.buffer, view.byteOffset + offset, field.fieldLength)\n );\n out[field.name] = parseField(text, field.dataType);\n offset += field.fieldLength;\n }\n\n return out;\n}\n\n/**\n * Should NaN be coerced to null?\n * @param text\n * @param dataType\n * @returns Field depends on a type of the data\n */\nfunction parseField(text: string, dataType: string): string | number | boolean | null {\n switch (dataType) {\n case 'B':\n return parseNumber(text);\n case 'C':\n return parseCharacter(text);\n case 'F':\n return parseNumber(text);\n case 'N':\n return parseNumber(text);\n case 'O':\n return parseNumber(text);\n case 'D':\n return parseDate(text);\n case 'L':\n return parseBoolean(text);\n default:\n throw new Error('Unsupported data type');\n }\n}\n\n/**\n * Parse YYYYMMDD to date in milliseconds\n * @param str YYYYMMDD\n * @returns new Date as a number\n */\nfunction parseDate(str: any): number {\n return Date.UTC(str.slice(0, 4), parseInt(str.slice(4, 6), 10) - 1, str.slice(6, 8));\n}\n\n/**\n * Read boolean value\n * any of Y, y, T, t coerce to true\n * any of N, n, F, f coerce to false\n * otherwise null\n * @param value\n * @returns boolean | null\n */\nfunction parseBoolean(value: string): boolean | null {\n return /^[nf]$/i.test(value) ? false : /^[yt]$/i.test(value) ? true : null;\n}\n\n/**\n * Return null instead of NaN\n * @param text\n * @returns number | null\n */\nfunction parseNumber(text: string): number | null {\n const number = parseFloat(text);\n return isNaN(number) ? null : number;\n}\n\n/**\n *\n * @param text\n * @returns string | null\n */\nfunction parseCharacter(text: string): string | null {\n return text.trim() || null;\n}\n\n/**\n * Create a standard Arrow-style `Field` from field descriptor.\n * TODO - use `fieldLength` and `decimal` to generate smaller types?\n * @param param0\n * @returns Field\n */\n// eslint-disable\nfunction makeField({name, dataType, fieldLength, decimal}: DBFField): Field {\n switch (dataType) {\n case 'B':\n return {name, type: 'float64', nullable: true, metadata: {}};\n case 'C':\n return {name, type: 'utf8', nullable: true, metadata: {}};\n case 'F':\n return {name, type: 'float64', nullable: true, metadata: {}};\n case 'N':\n return {name, type: 'float64', nullable: true, metadata: {}};\n case 'O':\n return {name, type: 'float64', nullable: true, metadata: {}};\n case 'D':\n return {name, type: 'timestamp-millisecond', nullable: true, metadata: {}};\n case 'L':\n return {name, type: 'bool', nullable: true, metadata: {}};\n default:\n throw new Error('Unsupported data type');\n }\n}\n"],"mappings":"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"}