@loaders.gl/shapefile 3.4.0-alpha.1 → 3.4.0-alpha.3
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 +1 -1
- package/dist/dist.min.js +47 -0
- package/dist/es5/dbf-loader.js +7 -11
- package/dist/es5/dbf-loader.js.map +1 -1
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/parsers/parse-dbf.js +47 -75
- package/dist/es5/lib/parsers/parse-dbf.js.map +1 -1
- package/dist/es5/lib/parsers/parse-shapefile.js +239 -249
- package/dist/es5/lib/parsers/parse-shapefile.js.map +1 -1
- package/dist/es5/lib/parsers/parse-shp-geometry.js +0 -16
- package/dist/es5/lib/parsers/parse-shp-geometry.js.map +1 -1
- package/dist/es5/lib/parsers/parse-shp-header.js +0 -1
- package/dist/es5/lib/parsers/parse-shp-header.js.map +1 -1
- package/dist/es5/lib/parsers/parse-shp.js +74 -79
- package/dist/es5/lib/parsers/parse-shp.js.map +1 -1
- package/dist/es5/lib/parsers/parse-shx.js +0 -1
- package/dist/es5/lib/parsers/parse-shx.js.map +1 -1
- package/dist/es5/lib/parsers/types.js.map +1 -1
- package/dist/es5/lib/streaming/binary-chunk-reader.js +9 -33
- package/dist/es5/lib/streaming/binary-chunk-reader.js.map +1 -1
- package/dist/es5/lib/streaming/binary-reader.js +4 -11
- package/dist/es5/lib/streaming/binary-reader.js.map +1 -1
- package/dist/es5/lib/streaming/zip-batch-iterators.js +54 -58
- package/dist/es5/lib/streaming/zip-batch-iterators.js.map +1 -1
- package/dist/es5/shapefile-loader.js +1 -2
- package/dist/es5/shapefile-loader.js.map +1 -1
- package/dist/es5/shp-loader.js +7 -11
- package/dist/es5/shp-loader.js.map +1 -1
- package/dist/es5/workers/dbf-worker.js.map +1 -1
- package/dist/es5/workers/shp-worker.js.map +1 -1
- package/dist/esm/bundle.js +0 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/dbf-loader.js +1 -4
- package/dist/esm/dbf-loader.js.map +1 -1
- package/dist/esm/lib/parsers/parse-dbf.js +34 -45
- package/dist/esm/lib/parsers/parse-dbf.js.map +1 -1
- package/dist/esm/lib/parsers/parse-shapefile.js +0 -16
- package/dist/esm/lib/parsers/parse-shapefile.js.map +1 -1
- package/dist/esm/lib/parsers/parse-shp-geometry.js +0 -18
- package/dist/esm/lib/parsers/parse-shp-geometry.js.map +1 -1
- package/dist/esm/lib/parsers/parse-shp-header.js +0 -1
- package/dist/esm/lib/parsers/parse-shp-header.js.map +1 -1
- package/dist/esm/lib/parsers/parse-shp.js +0 -4
- package/dist/esm/lib/parsers/parse-shp.js.map +1 -1
- package/dist/esm/lib/parsers/parse-shx.js +0 -1
- package/dist/esm/lib/parsers/parse-shx.js.map +1 -1
- package/dist/esm/lib/parsers/types.js.map +1 -1
- package/dist/esm/lib/streaming/binary-chunk-reader.js +0 -16
- package/dist/esm/lib/streaming/binary-chunk-reader.js.map +1 -1
- package/dist/esm/lib/streaming/binary-reader.js +0 -3
- package/dist/esm/lib/streaming/binary-reader.js.map +1 -1
- package/dist/esm/lib/streaming/zip-batch-iterators.js +0 -5
- package/dist/esm/lib/streaming/zip-batch-iterators.js.map +1 -1
- package/dist/esm/shapefile-loader.js +1 -3
- package/dist/esm/shapefile-loader.js.map +1 -1
- package/dist/esm/shp-loader.js +1 -4
- package/dist/esm/shp-loader.js.map +1 -1
- package/dist/lib/parsers/parse-shp.d.ts +3 -2
- package/dist/lib/parsers/parse-shp.d.ts.map +1 -1
- package/dist/lib/parsers/types.d.ts +5 -0
- package/dist/lib/parsers/types.d.ts.map +1 -1
- package/dist/shp-worker.js +1 -1
- package/package.json +5 -5
- package/src/lib/parsers/parse-shp.ts +2 -2
- package/src/lib/parsers/types.ts +5 -0
package/dist/dbf-worker.js
CHANGED
package/dist/dist.min.js
CHANGED
|
@@ -498,8 +498,54 @@
|
|
|
498
498
|
}
|
|
499
499
|
});
|
|
500
500
|
|
|
501
|
+
// ../../node_modules/@babel/runtime/helpers/esm/typeof.js
|
|
502
|
+
function _typeof(obj) {
|
|
503
|
+
"@babel/helpers - typeof";
|
|
504
|
+
return _typeof = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(obj2) {
|
|
505
|
+
return typeof obj2;
|
|
506
|
+
} : function(obj2) {
|
|
507
|
+
return obj2 && typeof Symbol == "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2;
|
|
508
|
+
}, _typeof(obj);
|
|
509
|
+
}
|
|
510
|
+
var init_typeof = __esm({
|
|
511
|
+
"../../node_modules/@babel/runtime/helpers/esm/typeof.js"() {
|
|
512
|
+
}
|
|
513
|
+
});
|
|
514
|
+
|
|
515
|
+
// ../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js
|
|
516
|
+
function _toPrimitive(input, hint) {
|
|
517
|
+
if (_typeof(input) !== "object" || input === null)
|
|
518
|
+
return input;
|
|
519
|
+
var prim = input[Symbol.toPrimitive];
|
|
520
|
+
if (prim !== void 0) {
|
|
521
|
+
var res = prim.call(input, hint || "default");
|
|
522
|
+
if (_typeof(res) !== "object")
|
|
523
|
+
return res;
|
|
524
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
525
|
+
}
|
|
526
|
+
return (hint === "string" ? String : Number)(input);
|
|
527
|
+
}
|
|
528
|
+
var init_toPrimitive = __esm({
|
|
529
|
+
"../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js"() {
|
|
530
|
+
init_typeof();
|
|
531
|
+
}
|
|
532
|
+
});
|
|
533
|
+
|
|
534
|
+
// ../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js
|
|
535
|
+
function _toPropertyKey(arg) {
|
|
536
|
+
var key = _toPrimitive(arg, "string");
|
|
537
|
+
return _typeof(key) === "symbol" ? key : String(key);
|
|
538
|
+
}
|
|
539
|
+
var init_toPropertyKey = __esm({
|
|
540
|
+
"../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js"() {
|
|
541
|
+
init_typeof();
|
|
542
|
+
init_toPrimitive();
|
|
543
|
+
}
|
|
544
|
+
});
|
|
545
|
+
|
|
501
546
|
// ../../node_modules/@babel/runtime/helpers/esm/defineProperty.js
|
|
502
547
|
function _defineProperty(obj, key, value) {
|
|
548
|
+
key = _toPropertyKey(key);
|
|
503
549
|
if (key in obj) {
|
|
504
550
|
Object.defineProperty(obj, key, {
|
|
505
551
|
value,
|
|
@@ -514,6 +560,7 @@
|
|
|
514
560
|
}
|
|
515
561
|
var init_defineProperty = __esm({
|
|
516
562
|
"../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"() {
|
|
563
|
+
init_toPropertyKey();
|
|
517
564
|
}
|
|
518
565
|
});
|
|
519
566
|
|
package/dist/es5/dbf-loader.js
CHANGED
|
@@ -11,8 +11,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
|
11
11
|
var _parseDbf = require("./lib/parsers/parse-dbf");
|
|
12
12
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
13
13
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
14
|
-
var VERSION = typeof "3.4.0-alpha.
|
|
15
|
-
|
|
14
|
+
var VERSION = typeof "3.4.0-alpha.3" !== 'undefined' ? "3.4.0-alpha.3" : 'latest';
|
|
16
15
|
var DBFWorkerLoader = {
|
|
17
16
|
name: 'DBF',
|
|
18
17
|
id: 'dbf',
|
|
@@ -28,20 +27,17 @@ var DBFWorkerLoader = {
|
|
|
28
27
|
}
|
|
29
28
|
}
|
|
30
29
|
};
|
|
31
|
-
|
|
32
30
|
exports.DBFWorkerLoader = DBFWorkerLoader;
|
|
33
31
|
var DBFLoader = _objectSpread(_objectSpread({}, DBFWorkerLoader), {}, {
|
|
34
32
|
parse: function () {
|
|
35
33
|
var _parse = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(arrayBuffer, options) {
|
|
36
34
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
37
|
-
while (1) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return _context.stop();
|
|
44
|
-
}
|
|
35
|
+
while (1) switch (_context.prev = _context.next) {
|
|
36
|
+
case 0:
|
|
37
|
+
return _context.abrupt("return", (0, _parseDbf.parseDBF)(arrayBuffer, options));
|
|
38
|
+
case 1:
|
|
39
|
+
case "end":
|
|
40
|
+
return _context.stop();
|
|
45
41
|
}
|
|
46
42
|
}, _callee);
|
|
47
43
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dbf-loader.js","names":["VERSION","DBFWorkerLoader","name","id","module","version","worker","category","extensions","mimeTypes","options","dbf","encoding","DBFLoader","parse","arrayBuffer","parseDBF","parseSync","parseInBatches","parseDBFInBatches"],"sources":["../../src/dbf-loader.ts"],"sourcesContent":["import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {parseDBF, parseDBFInBatches} from './lib/parsers/parse-dbf';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/**\n * DBFLoader - DBF files are used to contain non-geometry columns in Shapefiles\n */\nexport const DBFWorkerLoader: Loader = {\n name: 'DBF',\n id: 'dbf',\n module: 'shapefile',\n version: VERSION,\n worker: true,\n category: 'table',\n extensions: ['dbf'],\n mimeTypes: ['application/x-dbf'],\n options: {\n dbf: {\n encoding: 'latin1'\n }\n }\n};\n\n/** DBF file loader */\nexport const DBFLoader: LoaderWithParser = {\n ...DBFWorkerLoader,\n parse: async (arrayBuffer, options) => parseDBF(arrayBuffer, options),\n parseSync: parseDBF,\n parseInBatches: parseDBFInBatches\n};\n"],"mappings":";;;;;;;;;;AACA;AAAoE;AAAA;AAIpE,
|
|
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,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAKpE,IAAMC,eAAuB,GAAG;EACrCC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,WAAW;EACnBC,OAAO,EAAEL,OAAO;EAChBM,MAAM,EAAE,IAAI;EACZC,QAAQ,EAAE,OAAO;EACjBC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,mBAAmB,CAAC;EAChCC,OAAO,EAAE;IACPC,GAAG,EAAE;MACHC,QAAQ,EAAE;IACZ;EACF;AACF,CAAC;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"}
|
package/dist/es5/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"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;AACA;AACA"}
|
|
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"}
|
|
@@ -16,19 +16,19 @@ var _schema = require("@loaders.gl/schema");
|
|
|
16
16
|
var _binaryChunkReader = _interopRequireDefault(require("../streaming/binary-chunk-reader"));
|
|
17
17
|
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; } } }; }
|
|
18
18
|
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); }
|
|
19
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++)
|
|
19
|
+
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; }
|
|
20
20
|
function _asyncIterator(iterable) { var method, async, sync, retry = 2; for ("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;) { if (async && null != (method = iterable[async])) return method.call(iterable); if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable)); async = "@@asyncIterator", sync = "@@iterator"; } throw new TypeError("Object is not async iterable"); }
|
|
21
21
|
function AsyncFromSyncIterator(s) { function AsyncFromSyncIteratorContinuation(r) { if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object.")); var done = r.done; return Promise.resolve(r.value).then(function (value) { return { value: value, done: done }; }); } return AsyncFromSyncIterator = function AsyncFromSyncIterator(s) { this.s = s, this.n = s.next; }, AsyncFromSyncIterator.prototype = { s: null, n: null, next: function next() { return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); }, return: function _return(value) { var ret = this.s.return; return void 0 === ret ? Promise.resolve({ value: value, done: !0 }) : AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments)); }, throw: function _throw(value) { var thr = this.s.return; return void 0 === thr ? Promise.reject(value) : AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments)); } }, new AsyncFromSyncIterator(s); }
|
|
22
22
|
var LITTLE_ENDIAN = true;
|
|
23
23
|
var DBF_HEADER_SIZE = 32;
|
|
24
|
-
var STATE
|
|
25
|
-
(function (STATE) {
|
|
24
|
+
var STATE = function (STATE) {
|
|
26
25
|
STATE[STATE["START"] = 0] = "START";
|
|
27
26
|
STATE[STATE["FIELD_DESCRIPTORS"] = 1] = "FIELD_DESCRIPTORS";
|
|
28
27
|
STATE[STATE["FIELD_PROPERTIES"] = 2] = "FIELD_PROPERTIES";
|
|
29
28
|
STATE[STATE["END"] = 3] = "END";
|
|
30
29
|
STATE[STATE["ERROR"] = 4] = "ERROR";
|
|
31
|
-
|
|
30
|
+
return STATE;
|
|
31
|
+
}(STATE || {});
|
|
32
32
|
var DBFParser = function () {
|
|
33
33
|
function DBFParser(options) {
|
|
34
34
|
(0, _classCallCheck2.default)(this, DBFParser);
|
|
@@ -40,14 +40,11 @@ var DBFParser = function () {
|
|
|
40
40
|
});
|
|
41
41
|
this.textDecoder = new TextDecoder(options.encoding);
|
|
42
42
|
}
|
|
43
|
-
|
|
44
43
|
(0, _createClass2.default)(DBFParser, [{
|
|
45
44
|
key: "write",
|
|
46
|
-
value:
|
|
47
|
-
function write(arrayBuffer) {
|
|
45
|
+
value: function write(arrayBuffer) {
|
|
48
46
|
this.binaryReader.write(arrayBuffer);
|
|
49
47
|
this.state = parseState(this.state, this.result, this.binaryReader, this.textDecoder);
|
|
50
|
-
|
|
51
48
|
}
|
|
52
49
|
}, {
|
|
53
50
|
key: "end",
|
|
@@ -101,25 +98,13 @@ function parseDBFInBatches(_x) {
|
|
|
101
98
|
return _parseDBFInBatches.apply(this, arguments);
|
|
102
99
|
}
|
|
103
100
|
function _parseDBFInBatches() {
|
|
104
|
-
_parseDBFInBatches = (0, _wrapAsyncGenerator2.default)(
|
|
105
|
-
var options
|
|
106
|
-
|
|
107
|
-
_ref2$encoding,
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
headerReturned,
|
|
111
|
-
_iteratorAbruptCompletion,
|
|
112
|
-
_didIteratorError,
|
|
113
|
-
_iteratorError,
|
|
114
|
-
_iterator,
|
|
115
|
-
_step,
|
|
116
|
-
arrayBuffer,
|
|
117
|
-
_args = arguments;
|
|
118
|
-
return _regenerator.default.wrap(function _callee$(_context) {
|
|
119
|
-
while (1) {
|
|
120
|
-
switch (_context.prev = _context.next) {
|
|
101
|
+
_parseDBFInBatches = (0, _wrapAsyncGenerator2.default)(function (asyncIterator) {
|
|
102
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
103
|
+
return _regenerator.default.mark(function _callee() {
|
|
104
|
+
var _ref2, _ref2$encoding, encoding, parser, headerReturned, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, arrayBuffer;
|
|
105
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
106
|
+
while (1) switch (_context.prev = _context.next) {
|
|
121
107
|
case 0:
|
|
122
|
-
options = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};
|
|
123
108
|
_ref2 = options.dbf || {}, _ref2$encoding = _ref2.encoding, encoding = _ref2$encoding === void 0 ? 'latin1' : _ref2$encoding;
|
|
124
109
|
parser = new DBFParser({
|
|
125
110
|
encoding: encoding
|
|
@@ -127,81 +112,81 @@ function _parseDBFInBatches() {
|
|
|
127
112
|
headerReturned = false;
|
|
128
113
|
_iteratorAbruptCompletion = false;
|
|
129
114
|
_didIteratorError = false;
|
|
130
|
-
_context.prev =
|
|
115
|
+
_context.prev = 5;
|
|
131
116
|
_iterator = _asyncIterator(asyncIterator);
|
|
132
|
-
case
|
|
133
|
-
_context.next =
|
|
117
|
+
case 7:
|
|
118
|
+
_context.next = 9;
|
|
134
119
|
return (0, _awaitAsyncGenerator2.default)(_iterator.next());
|
|
135
|
-
case
|
|
120
|
+
case 9:
|
|
136
121
|
if (!(_iteratorAbruptCompletion = !(_step = _context.sent).done)) {
|
|
137
|
-
_context.next =
|
|
122
|
+
_context.next = 23;
|
|
138
123
|
break;
|
|
139
124
|
}
|
|
140
125
|
arrayBuffer = _step.value;
|
|
141
126
|
parser.write(arrayBuffer);
|
|
142
127
|
if (!(!headerReturned && parser.result.dbfHeader)) {
|
|
143
|
-
_context.next =
|
|
128
|
+
_context.next = 16;
|
|
144
129
|
break;
|
|
145
130
|
}
|
|
146
131
|
headerReturned = true;
|
|
147
|
-
_context.next =
|
|
132
|
+
_context.next = 16;
|
|
148
133
|
return parser.result.dbfHeader;
|
|
149
|
-
case
|
|
134
|
+
case 16:
|
|
150
135
|
if (!(parser.result.data.length > 0)) {
|
|
151
|
-
_context.next =
|
|
136
|
+
_context.next = 20;
|
|
152
137
|
break;
|
|
153
138
|
}
|
|
154
|
-
_context.next =
|
|
139
|
+
_context.next = 19;
|
|
155
140
|
return parser.result.data;
|
|
156
|
-
case
|
|
141
|
+
case 19:
|
|
157
142
|
parser.result.data = [];
|
|
158
|
-
case
|
|
143
|
+
case 20:
|
|
159
144
|
_iteratorAbruptCompletion = false;
|
|
160
|
-
_context.next =
|
|
145
|
+
_context.next = 7;
|
|
161
146
|
break;
|
|
162
|
-
case
|
|
163
|
-
_context.next =
|
|
147
|
+
case 23:
|
|
148
|
+
_context.next = 29;
|
|
164
149
|
break;
|
|
165
|
-
case
|
|
166
|
-
_context.prev =
|
|
167
|
-
_context.t0 = _context["catch"](
|
|
150
|
+
case 25:
|
|
151
|
+
_context.prev = 25;
|
|
152
|
+
_context.t0 = _context["catch"](5);
|
|
168
153
|
_didIteratorError = true;
|
|
169
154
|
_iteratorError = _context.t0;
|
|
170
|
-
case
|
|
155
|
+
case 29:
|
|
156
|
+
_context.prev = 29;
|
|
171
157
|
_context.prev = 30;
|
|
172
|
-
_context.prev = 31;
|
|
173
158
|
if (!(_iteratorAbruptCompletion && _iterator.return != null)) {
|
|
174
|
-
_context.next =
|
|
159
|
+
_context.next = 34;
|
|
175
160
|
break;
|
|
176
161
|
}
|
|
177
|
-
_context.next =
|
|
162
|
+
_context.next = 34;
|
|
178
163
|
return (0, _awaitAsyncGenerator2.default)(_iterator.return());
|
|
179
|
-
case
|
|
180
|
-
_context.prev =
|
|
164
|
+
case 34:
|
|
165
|
+
_context.prev = 34;
|
|
181
166
|
if (!_didIteratorError) {
|
|
182
|
-
_context.next =
|
|
167
|
+
_context.next = 37;
|
|
183
168
|
break;
|
|
184
169
|
}
|
|
185
170
|
throw _iteratorError;
|
|
171
|
+
case 37:
|
|
172
|
+
return _context.finish(34);
|
|
186
173
|
case 38:
|
|
187
|
-
return _context.finish(
|
|
174
|
+
return _context.finish(29);
|
|
188
175
|
case 39:
|
|
189
|
-
return _context.finish(30);
|
|
190
|
-
case 40:
|
|
191
176
|
parser.end();
|
|
192
177
|
if (!(parser.result.data.length > 0)) {
|
|
193
|
-
_context.next =
|
|
178
|
+
_context.next = 43;
|
|
194
179
|
break;
|
|
195
180
|
}
|
|
196
|
-
_context.next =
|
|
181
|
+
_context.next = 43;
|
|
197
182
|
return parser.result.data;
|
|
198
|
-
case
|
|
183
|
+
case 43:
|
|
199
184
|
case "end":
|
|
200
185
|
return _context.stop();
|
|
201
186
|
}
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
})
|
|
187
|
+
}, _callee, null, [[5, 25, 29, 39], [30,, 34, 38]]);
|
|
188
|
+
})();
|
|
189
|
+
});
|
|
205
190
|
return _parseDBFInBatches.apply(this, arguments);
|
|
206
191
|
}
|
|
207
192
|
function parseState(state, result, binaryReader, textDecoder) {
|
|
@@ -225,8 +210,7 @@ function parseState(state, result, binaryReader, textDecoder) {
|
|
|
225
210
|
state = STATE.FIELD_DESCRIPTORS;
|
|
226
211
|
break;
|
|
227
212
|
case STATE.FIELD_DESCRIPTORS:
|
|
228
|
-
var fieldDescriptorView = binaryReader.getDataView(
|
|
229
|
-
result.dbfHeader.headerLength - DBF_HEADER_SIZE);
|
|
213
|
+
var fieldDescriptorView = binaryReader.getDataView(result.dbfHeader.headerLength - DBF_HEADER_SIZE);
|
|
230
214
|
if (!fieldDescriptorView) {
|
|
231
215
|
return state;
|
|
232
216
|
}
|
|
@@ -235,7 +219,6 @@ function parseState(state, result, binaryReader, textDecoder) {
|
|
|
235
219
|
return makeField(dbfField);
|
|
236
220
|
}));
|
|
237
221
|
state = STATE.FIELD_PROPERTIES;
|
|
238
|
-
|
|
239
222
|
binaryReader.skip(1);
|
|
240
223
|
break;
|
|
241
224
|
case STATE.FIELD_PROPERTIES:
|
|
@@ -250,7 +233,6 @@ function parseState(state, result, binaryReader, textDecoder) {
|
|
|
250
233
|
return state;
|
|
251
234
|
}
|
|
252
235
|
binaryReader.skip(1);
|
|
253
|
-
|
|
254
236
|
var row = parseRow(recordView, result.dbfFields, textDecoder);
|
|
255
237
|
result.data.push(row);
|
|
256
238
|
result.progress.rows = result.data.length;
|
|
@@ -269,7 +251,6 @@ function parseState(state, result, binaryReader, textDecoder) {
|
|
|
269
251
|
}
|
|
270
252
|
}
|
|
271
253
|
}
|
|
272
|
-
|
|
273
254
|
function parseDBFHeader(headerView) {
|
|
274
255
|
return {
|
|
275
256
|
year: headerView.getUint8(1) + 1900,
|
|
@@ -281,14 +262,12 @@ function parseDBFHeader(headerView) {
|
|
|
281
262
|
languageDriver: headerView.getUint8(29)
|
|
282
263
|
};
|
|
283
264
|
}
|
|
284
|
-
|
|
285
265
|
function parseFieldDescriptors(view, textDecoder) {
|
|
286
266
|
var nFields = (view.byteLength - 1) / 32;
|
|
287
267
|
var fields = [];
|
|
288
268
|
var offset = 0;
|
|
289
269
|
for (var i = 0; i < nFields; i++) {
|
|
290
|
-
var name = textDecoder.decode(new Uint8Array(view.buffer, view.byteOffset + offset, 11))
|
|
291
|
-
.replace(/\u0000/g, '');
|
|
270
|
+
var name = textDecoder.decode(new Uint8Array(view.buffer, view.byteOffset + offset, 11)).replace(/\u0000/g, '');
|
|
292
271
|
fields.push({
|
|
293
272
|
name: name,
|
|
294
273
|
dataType: String.fromCharCode(view.getUint8(offset + 11)),
|
|
@@ -299,7 +278,6 @@ function parseFieldDescriptors(view, textDecoder) {
|
|
|
299
278
|
}
|
|
300
279
|
return fields;
|
|
301
280
|
}
|
|
302
|
-
|
|
303
281
|
function parseRow(view, fields, textDecoder) {
|
|
304
282
|
var out = {};
|
|
305
283
|
var offset = 0;
|
|
@@ -319,7 +297,6 @@ function parseRow(view, fields, textDecoder) {
|
|
|
319
297
|
}
|
|
320
298
|
return out;
|
|
321
299
|
}
|
|
322
|
-
|
|
323
300
|
function parseField(text, dataType) {
|
|
324
301
|
switch (dataType) {
|
|
325
302
|
case 'B':
|
|
@@ -340,24 +317,19 @@ function parseField(text, dataType) {
|
|
|
340
317
|
throw new Error('Unsupported data type');
|
|
341
318
|
}
|
|
342
319
|
}
|
|
343
|
-
|
|
344
320
|
function parseDate(str) {
|
|
345
321
|
return Date.UTC(str.slice(0, 4), parseInt(str.slice(4, 6), 10) - 1, str.slice(6, 8));
|
|
346
322
|
}
|
|
347
|
-
|
|
348
323
|
function parseBoolean(value) {
|
|
349
324
|
return /^[nf]$/i.test(value) ? false : /^[yt]$/i.test(value) ? true : null;
|
|
350
325
|
}
|
|
351
|
-
|
|
352
326
|
function parseNumber(text) {
|
|
353
327
|
var number = parseFloat(text);
|
|
354
328
|
return isNaN(number) ? null : number;
|
|
355
329
|
}
|
|
356
|
-
|
|
357
330
|
function parseCharacter(text) {
|
|
358
331
|
return text.trim() || null;
|
|
359
332
|
}
|
|
360
|
-
|
|
361
333
|
function makeField(_ref4) {
|
|
362
334
|
var name = _ref4.name,
|
|
363
335
|
dataType = _ref4.dataType,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-dbf.js","names":["LITTLE_ENDIAN","DBF_HEADER_SIZE","STATE","DBFParser","options","BinaryChunkReader","START","data","textDecoder","TextDecoder","encoding","arrayBuffer","binaryReader","write","state","parseState","result","end","END","ERROR","error","parseDBF","dbf","dbfParser","schema","shape","tables","format","table","rows","parseDBFInBatches","asyncIterator","parser","headerReturned","dbfHeader","length","dataView","getDataView","parseDBFHeader","progress","bytesUsed","rowsTotal","nRecords","FIELD_DESCRIPTORS","fieldDescriptorView","headerLength","dbfFields","parseFieldDescriptors","Schema","map","dbfField","makeField","FIELD_PROPERTIES","skip","recordLength","recordView","row","parseRow","push","message","headerView","year","getUint8","month","day","getUint32","getUint16","languageDriver","view","nFields","byteLength","fields","offset","i","name","decode","Uint8Array","buffer","byteOffset","replace","dataType","String","fromCharCode","fieldLength","decimal","out","field","text","parseField","parseNumber","parseCharacter","parseDate","parseBoolean","Error","str","Date","UTC","slice","parseInt","value","test","number","parseFloat","isNaN","trim","Field","Float64","Utf8","TimestampMillisecond","Bool"],"sources":["../../../../src/lib/parsers/parse-dbf.ts"],"sourcesContent":["import {\n Schema,\n Field,\n Bool,\n Utf8,\n Float64,\n TimestampMillisecond,\n ObjectRowTable\n} 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 = new Schema(result.dbfFields.map((dbfField) => makeField(dbfField)));\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 new Field(name, new Float64(), true);\n case 'C':\n return new Field(name, new Utf8(), true);\n case 'F':\n return new Field(name, new Float64(), true);\n case 'N':\n return new Field(name, new Float64(), true);\n case 'O':\n return new Field(name, new Float64(), true);\n case 'D':\n return new Field(name, new TimestampMillisecond(), true);\n case 'L':\n return new Field(name, new Bool(), true);\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":["_schema","require","_binaryChunkReader","_interopRequireDefault","_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","Schema","map","dbfField","makeField","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","fields","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","Field","Float64","Utf8","TimestampMillisecond","Bool"],"sources":["../../../../src/lib/parsers/parse-dbf.ts"],"sourcesContent":["import {\n Schema,\n Field,\n Bool,\n Utf8,\n Float64,\n TimestampMillisecond,\n ObjectRowTable\n} 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 = new Schema(result.dbfFields.map((dbfField) => makeField(dbfField)));\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 new Field(name, new Float64(), true);\n case 'C':\n return new Field(name, new Utf8(), true);\n case 'F':\n return new Field(name, new Float64(), true);\n case 'N':\n return new Field(name, new Float64(), true);\n case 'O':\n return new Field(name, new Float64(), true);\n case 'D':\n return new Field(name, new TimestampMillisecond(), true);\n case 'L':\n return new Field(name, new Bool(), true);\n default:\n throw new Error('Unsupported data type');\n }\n}\n"],"mappings":"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"}
|