@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.
- package/dist/dbf-worker.js +4 -2
- package/dist/dist.min.js +77 -31
- package/dist/es5/dbf-loader.js +4 -2
- package/dist/es5/dbf-loader.js.map +1 -1
- package/dist/es5/index.js +21 -0
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/parsers/parse-dbf.js +2 -2
- package/dist/es5/lib/parsers/parse-dbf.js.map +1 -1
- package/dist/es5/lib/parsers/parse-shapefile.js +67 -64
- package/dist/es5/lib/parsers/parse-shapefile.js.map +1 -1
- package/dist/es5/lib/parsers/parse-shp.js +2 -2
- package/dist/es5/lib/parsers/parse-shp.js.map +1 -1
- package/dist/es5/lib/streaming/binary-chunk-reader.js +2 -2
- package/dist/es5/lib/streaming/binary-chunk-reader.js.map +1 -1
- package/dist/es5/lib/streaming/binary-reader.js +2 -2
- package/dist/es5/lib/streaming/binary-reader.js.map +1 -1
- package/dist/es5/lib/streaming/zip-batch-iterators.js +30 -26
- package/dist/es5/lib/streaming/zip-batch-iterators.js.map +1 -1
- package/dist/es5/shapefile-loader.js +1 -1
- package/dist/es5/shp-loader.js +4 -2
- package/dist/es5/shp-loader.js.map +1 -1
- package/dist/esm/dbf-loader.js +4 -2
- package/dist/esm/dbf-loader.js.map +1 -1
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/parsers/parse-dbf.js +1 -1
- package/dist/esm/lib/parsers/parse-dbf.js.map +1 -1
- package/dist/esm/lib/parsers/parse-shapefile.js +21 -17
- package/dist/esm/lib/parsers/parse-shapefile.js.map +1 -1
- package/dist/esm/lib/parsers/parse-shp.js +1 -1
- package/dist/esm/lib/parsers/parse-shp.js.map +1 -1
- package/dist/esm/lib/streaming/binary-chunk-reader.js +1 -1
- package/dist/esm/lib/streaming/binary-chunk-reader.js.map +1 -1
- package/dist/esm/lib/streaming/binary-reader.js +1 -1
- package/dist/esm/lib/streaming/binary-reader.js.map +1 -1
- package/dist/esm/lib/streaming/zip-batch-iterators.js +17 -11
- package/dist/esm/lib/streaming/zip-batch-iterators.js.map +1 -1
- package/dist/esm/shapefile-loader.js +1 -1
- package/dist/esm/shp-loader.js +2 -2
- package/dist/esm/shp-loader.js.map +1 -1
- package/dist/shp-worker.js +2 -2
- package/dist/src/bundle.d.ts.map +1 -0
- package/dist/src/dbf-loader.d.ts.map +1 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/lib/parsers/parse-dbf.d.ts.map +1 -0
- package/dist/{lib → src/lib}/parsers/parse-shapefile.d.ts +1 -1
- package/dist/src/lib/parsers/parse-shapefile.d.ts.map +1 -0
- package/dist/src/lib/parsers/parse-shp-geometry.d.ts.map +1 -0
- package/dist/src/lib/parsers/parse-shp-header.d.ts.map +1 -0
- package/dist/{lib → src/lib}/parsers/parse-shp.d.ts +1 -1
- package/dist/src/lib/parsers/parse-shp.d.ts.map +1 -0
- package/dist/src/lib/parsers/parse-shx.d.ts.map +1 -0
- package/dist/src/lib/parsers/types.d.ts.map +1 -0
- package/dist/{lib → src/lib}/streaming/binary-chunk-reader.d.ts +2 -3
- package/dist/src/lib/streaming/binary-chunk-reader.d.ts.map +1 -0
- package/dist/{lib → src/lib}/streaming/binary-reader.d.ts +1 -1
- package/dist/src/lib/streaming/binary-reader.d.ts.map +1 -0
- package/dist/src/lib/streaming/zip-batch-iterators.d.ts +11 -0
- package/dist/src/lib/streaming/zip-batch-iterators.d.ts.map +1 -0
- package/dist/src/shapefile-loader.d.ts.map +1 -0
- package/dist/src/shp-loader.d.ts.map +1 -0
- package/dist/{workers → src/workers}/dbf-worker.d.ts.map +1 -1
- package/dist/{workers → src/workers}/shp-worker.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +5 -6
- package/src/dbf-loader.ts +3 -1
- package/src/index.ts +5 -0
- package/src/lib/parsers/parse-dbf.ts +1 -1
- package/src/lib/parsers/parse-shapefile.ts +31 -22
- package/src/lib/parsers/parse-shp.ts +2 -2
- package/src/lib/streaming/binary-chunk-reader.ts +4 -3
- package/src/lib/streaming/binary-reader.ts +3 -1
- package/src/lib/streaming/zip-batch-iterators.ts +28 -14
- package/src/shp-loader.ts +4 -1
- package/dist/bundle.d.ts.map +0 -1
- package/dist/bundle.js +0 -5
- package/dist/dbf-loader.d.ts.map +0 -1
- package/dist/dbf-loader.js +0 -32
- package/dist/index.d.ts +0 -4
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -11
- package/dist/lib/parsers/parse-dbf.d.ts.map +0 -1
- package/dist/lib/parsers/parse-dbf.js +0 -344
- package/dist/lib/parsers/parse-shapefile.d.ts.map +0 -1
- package/dist/lib/parsers/parse-shapefile.js +0 -240
- package/dist/lib/parsers/parse-shp-geometry.d.ts.map +0 -1
- package/dist/lib/parsers/parse-shp-geometry.js +0 -287
- package/dist/lib/parsers/parse-shp-header.d.ts.map +0 -1
- package/dist/lib/parsers/parse-shp-header.js +0 -43
- package/dist/lib/parsers/parse-shp.d.ts.map +0 -1
- package/dist/lib/parsers/parse-shp.js +0 -178
- package/dist/lib/parsers/parse-shx.d.ts.map +0 -1
- package/dist/lib/parsers/parse-shx.js +0 -28
- package/dist/lib/parsers/types.d.ts.map +0 -1
- package/dist/lib/parsers/types.js +0 -2
- package/dist/lib/streaming/binary-chunk-reader.d.ts.map +0 -1
- package/dist/lib/streaming/binary-chunk-reader.js +0 -161
- package/dist/lib/streaming/binary-reader.d.ts.map +0 -1
- package/dist/lib/streaming/binary-reader.js +0 -52
- package/dist/lib/streaming/zip-batch-iterators.d.ts +0 -8
- package/dist/lib/streaming/zip-batch-iterators.d.ts.map +0 -1
- package/dist/lib/streaming/zip-batch-iterators.js +0 -61
- package/dist/shapefile-loader.d.ts.map +0 -1
- package/dist/shapefile-loader.js +0 -30
- package/dist/shp-loader.d.ts.map +0 -1
- package/dist/shp-loader.js +0 -35
- package/dist/workers/dbf-worker.js +0 -5
- package/dist/workers/shp-worker.js +0 -5
- /package/dist/{bundle.d.ts → src/bundle.d.ts} +0 -0
- /package/dist/{dbf-loader.d.ts → src/dbf-loader.d.ts} +0 -0
- /package/dist/{lib → src/lib}/parsers/parse-dbf.d.ts +0 -0
- /package/dist/{lib → src/lib}/parsers/parse-shp-geometry.d.ts +0 -0
- /package/dist/{lib → src/lib}/parsers/parse-shp-header.d.ts +0 -0
- /package/dist/{lib → src/lib}/parsers/parse-shx.d.ts +0 -0
- /package/dist/{lib → src/lib}/parsers/types.d.ts +0 -0
- /package/dist/{shapefile-loader.d.ts → src/shapefile-loader.d.ts} +0 -0
- /package/dist/{shp-loader.d.ts → src/shp-loader.d.ts} +0 -0
- /package/dist/{workers → src/workers}/dbf-worker.d.ts +0 -0
- /package/dist/{workers → src/workers}/shp-worker.d.ts +0 -0
package/dist/dbf-worker.js
CHANGED
|
@@ -326,7 +326,7 @@
|
|
|
326
326
|
}
|
|
327
327
|
|
|
328
328
|
// src/dbf-loader.ts
|
|
329
|
-
var VERSION = true ? "4.0.0-alpha.
|
|
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
|
|
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
|
-
|
|
6702
|
-
|
|
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 (
|
|
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
|
-
|
|
6711
|
+
batch1Data.push(...value);
|
|
6712
6712
|
}
|
|
6713
|
-
}
|
|
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
|
-
|
|
6719
|
+
batch2Data.push(...value);
|
|
6719
6720
|
}
|
|
6720
6721
|
}
|
|
6721
|
-
const
|
|
6722
|
-
if (
|
|
6723
|
-
yield
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
7026
|
+
let shapeHeader = (await shapeIterator.next()).value;
|
|
7017
7027
|
if (shapeHeader && shapeHeader.batchType === "metadata") {
|
|
7018
|
-
shapeHeader = (await
|
|
7028
|
+
shapeHeader = (await shapeIterator.next()).value;
|
|
7019
7029
|
}
|
|
7020
7030
|
let dbfHeader = {};
|
|
7021
|
-
if (
|
|
7022
|
-
dbfHeader = (await
|
|
7031
|
+
if (propertyIterator) {
|
|
7032
|
+
dbfHeader = (await propertyIterator.next()).value;
|
|
7023
7033
|
if (dbfHeader && dbfHeader.batchType === "metadata") {
|
|
7024
|
-
dbfHeader = (await
|
|
7034
|
+
dbfHeader = (await propertyIterator.next()).value;
|
|
7025
7035
|
}
|
|
7026
7036
|
}
|
|
7027
|
-
|
|
7028
|
-
|
|
7029
|
-
|
|
7030
|
-
|
|
7031
|
-
|
|
7032
|
-
}
|
|
7033
|
-
for await (const
|
|
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 (!
|
|
7037
|
-
geometries =
|
|
7046
|
+
if (!propertyIterator) {
|
|
7047
|
+
geometries = batch;
|
|
7038
7048
|
} else {
|
|
7039
|
-
[geometries, properties] =
|
|
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
|
|
package/dist/es5/dbf-loader.js
CHANGED
|
@@ -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.
|
|
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:
|
|
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,
|
|
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
|
package/dist/es5/index.js.map
CHANGED
|
@@ -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":"
|
|
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 =
|
|
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.
|
|
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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"}
|