@loaders.gl/shapefile 3.3.0-alpha.1 → 3.3.0-alpha.11
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 -11
- package/dist/es5/bundle.js +0 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/dbf-loader.js +5 -16
- package/dist/es5/dbf-loader.js.map +1 -1
- package/dist/es5/index.js +6 -9
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/parsers/parse-dbf.js +69 -154
- package/dist/es5/lib/parsers/parse-dbf.js.map +1 -1
- package/dist/es5/lib/parsers/parse-shapefile.js +34 -148
- package/dist/es5/lib/parsers/parse-shapefile.js.map +1 -1
- package/dist/es5/lib/parsers/parse-shp-geometry.js +4 -57
- package/dist/es5/lib/parsers/parse-shp-geometry.js.map +1 -1
- package/dist/es5/lib/parsers/parse-shp-header.js +0 -3
- package/dist/es5/lib/parsers/parse-shp-header.js.map +1 -1
- package/dist/es5/lib/parsers/parse-shp.js +39 -98
- package/dist/es5/lib/parsers/parse-shp.js.map +1 -1
- package/dist/es5/lib/parsers/parse-shx.js +0 -4
- 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 +39 -55
- package/dist/es5/lib/streaming/binary-chunk-reader.js.map +1 -1
- package/dist/es5/lib/streaming/binary-reader.js +11 -12
- package/dist/es5/lib/streaming/binary-reader.js.map +1 -1
- package/dist/es5/lib/streaming/zip-batch-iterators.js +1 -24
- package/dist/es5/lib/streaming/zip-batch-iterators.js.map +1 -1
- package/dist/es5/shapefile-loader.js +1 -3
- package/dist/es5/shapefile-loader.js.map +1 -1
- package/dist/es5/shp-loader.js +6 -17
- package/dist/es5/shp-loader.js.map +1 -1
- package/dist/es5/workers/dbf-worker.js +0 -2
- package/dist/es5/workers/dbf-worker.js.map +1 -1
- package/dist/es5/workers/shp-worker.js +0 -2
- package/dist/es5/workers/shp-worker.js.map +1 -1
- package/dist/esm/bundle.js +1 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/dbf-loader.js +6 -2
- package/dist/esm/dbf-loader.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/parsers/parse-dbf.js +18 -58
- package/dist/esm/lib/parsers/parse-dbf.js.map +1 -1
- package/dist/esm/lib/parsers/parse-shapefile.js +12 -35
- package/dist/esm/lib/parsers/parse-shapefile.js.map +1 -1
- package/dist/esm/lib/parsers/parse-shp-geometry.js +3 -28
- package/dist/esm/lib/parsers/parse-shp-geometry.js.map +1 -1
- package/dist/esm/lib/parsers/parse-shp-header.js +1 -3
- package/dist/esm/lib/parsers/parse-shp-header.js.map +1 -1
- package/dist/esm/lib/parsers/parse-shp.js +2 -26
- package/dist/esm/lib/parsers/parse-shp.js.map +1 -1
- package/dist/esm/lib/parsers/parse-shx.js +1 -2
- 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 +4 -19
- package/dist/esm/lib/streaming/binary-chunk-reader.js.map +1 -1
- package/dist/esm/lib/streaming/binary-reader.js +0 -5
- package/dist/esm/lib/streaming/binary-reader.js.map +1 -1
- package/dist/esm/lib/streaming/zip-batch-iterators.js +2 -5
- package/dist/esm/lib/streaming/zip-batch-iterators.js.map +1 -1
- package/dist/esm/shapefile-loader.js +3 -1
- package/dist/esm/shapefile-loader.js.map +1 -1
- package/dist/esm/shp-loader.js +6 -2
- package/dist/esm/shp-loader.js.map +1 -1
- package/dist/esm/workers/dbf-worker.js.map +1 -1
- package/dist/esm/workers/shp-worker.js.map +1 -1
- package/dist/lib/parsers/types.d.ts +7 -7
- package/dist/lib/parsers/types.d.ts.map +1 -1
- package/dist/lib/streaming/binary-chunk-reader.d.ts +1 -1
- package/dist/lib/streaming/binary-chunk-reader.d.ts.map +1 -1
- package/dist/shp-worker.js +1 -1
- package/package.json +5 -5
- package/src/lib/parsers/parse-dbf.ts +1 -1
|
@@ -1,41 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.parseDBF = parseDBF;
|
|
9
8
|
exports.parseDBFInBatches = parseDBFInBatches;
|
|
10
|
-
|
|
11
9
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
12
|
-
|
|
13
10
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
14
|
-
|
|
15
11
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
16
|
-
|
|
17
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
18
|
-
|
|
19
13
|
var _awaitAsyncGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/awaitAsyncGenerator"));
|
|
20
|
-
|
|
21
14
|
var _wrapAsyncGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapAsyncGenerator"));
|
|
22
|
-
|
|
23
|
-
var _asyncIterator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncIterator"));
|
|
24
|
-
|
|
25
15
|
var _schema = require("@loaders.gl/schema");
|
|
26
|
-
|
|
27
16
|
var _binaryChunkReader = _interopRequireDefault(require("../streaming/binary-chunk-reader"));
|
|
28
|
-
|
|
29
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; } } }; }
|
|
30
|
-
|
|
31
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); }
|
|
32
|
-
|
|
33
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; }
|
|
34
|
-
|
|
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
|
+
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); }
|
|
35
22
|
var LITTLE_ENDIAN = true;
|
|
36
23
|
var DBF_HEADER_SIZE = 32;
|
|
37
24
|
var STATE;
|
|
38
|
-
|
|
39
25
|
(function (STATE) {
|
|
40
26
|
STATE[STATE["START"] = 0] = "START";
|
|
41
27
|
STATE[STATE["FIELD_DESCRIPTORS"] = 1] = "FIELD_DESCRIPTORS";
|
|
@@ -43,7 +29,6 @@ var STATE;
|
|
|
43
29
|
STATE[STATE["END"] = 3] = "END";
|
|
44
30
|
STATE[STATE["ERROR"] = 4] = "ERROR";
|
|
45
31
|
})(STATE || (STATE = {}));
|
|
46
|
-
|
|
47
32
|
var DBFParser = function () {
|
|
48
33
|
function DBFParser(options) {
|
|
49
34
|
(0, _classCallCheck2.default)(this, DBFParser);
|
|
@@ -58,16 +43,17 @@ var DBFParser = function () {
|
|
|
58
43
|
|
|
59
44
|
(0, _createClass2.default)(DBFParser, [{
|
|
60
45
|
key: "write",
|
|
61
|
-
value:
|
|
46
|
+
value:
|
|
47
|
+
function write(arrayBuffer) {
|
|
62
48
|
this.binaryReader.write(arrayBuffer);
|
|
63
49
|
this.state = parseState(this.state, this.result, this.binaryReader, this.textDecoder);
|
|
50
|
+
|
|
64
51
|
}
|
|
65
52
|
}, {
|
|
66
53
|
key: "end",
|
|
67
54
|
value: function end() {
|
|
68
55
|
this.binaryReader.end();
|
|
69
56
|
this.state = parseState(this.state, this.result, this.binaryReader, this.textDecoder);
|
|
70
|
-
|
|
71
57
|
if (this.state !== STATE.END) {
|
|
72
58
|
this.state = STATE.ERROR;
|
|
73
59
|
this.result.error = 'DBF incomplete file';
|
|
@@ -76,26 +62,21 @@ var DBFParser = function () {
|
|
|
76
62
|
}]);
|
|
77
63
|
return DBFParser;
|
|
78
64
|
}();
|
|
79
|
-
|
|
80
65
|
function parseDBF(arrayBuffer) {
|
|
81
66
|
var _options$tables, _options$dbf;
|
|
82
|
-
|
|
83
67
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
84
|
-
|
|
85
68
|
var _ref = options.dbf || {},
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
69
|
+
_ref$encoding = _ref.encoding,
|
|
70
|
+
encoding = _ref$encoding === void 0 ? 'latin1' : _ref$encoding;
|
|
89
71
|
var dbfParser = new DBFParser({
|
|
90
72
|
encoding: encoding
|
|
91
73
|
});
|
|
92
74
|
dbfParser.write(arrayBuffer);
|
|
93
75
|
dbfParser.end();
|
|
94
76
|
var _dbfParser$result = dbfParser.result,
|
|
95
|
-
|
|
96
|
-
|
|
77
|
+
data = _dbfParser$result.data,
|
|
78
|
+
schema = _dbfParser$result.schema;
|
|
97
79
|
var shape = (options === null || options === void 0 ? void 0 : (_options$tables = options.tables) === null || _options$tables === void 0 ? void 0 : _options$tables.format) || (options === null || options === void 0 ? void 0 : (_options$dbf = options.dbf) === null || _options$dbf === void 0 ? void 0 : _options$dbf.shape);
|
|
98
|
-
|
|
99
80
|
switch (shape) {
|
|
100
81
|
case 'object-row-table':
|
|
101
82
|
{
|
|
@@ -106,40 +87,34 @@ function parseDBF(arrayBuffer) {
|
|
|
106
87
|
};
|
|
107
88
|
return table;
|
|
108
89
|
}
|
|
109
|
-
|
|
110
90
|
case 'table':
|
|
111
91
|
return {
|
|
112
92
|
schema: schema,
|
|
113
93
|
rows: data
|
|
114
94
|
};
|
|
115
|
-
|
|
116
95
|
case 'rows':
|
|
117
96
|
default:
|
|
118
97
|
return data;
|
|
119
98
|
}
|
|
120
99
|
}
|
|
121
|
-
|
|
122
100
|
function parseDBFInBatches(_x) {
|
|
123
101
|
return _parseDBFInBatches.apply(this, arguments);
|
|
124
102
|
}
|
|
125
|
-
|
|
126
103
|
function _parseDBFInBatches() {
|
|
127
104
|
_parseDBFInBatches = (0, _wrapAsyncGenerator2.default)(_regenerator.default.mark(function _callee(asyncIterator) {
|
|
128
105
|
var options,
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
_args = arguments;
|
|
142
|
-
|
|
106
|
+
_ref2,
|
|
107
|
+
_ref2$encoding,
|
|
108
|
+
encoding,
|
|
109
|
+
parser,
|
|
110
|
+
headerReturned,
|
|
111
|
+
_iteratorAbruptCompletion,
|
|
112
|
+
_didIteratorError,
|
|
113
|
+
_iteratorError,
|
|
114
|
+
_iterator,
|
|
115
|
+
_step,
|
|
116
|
+
arrayBuffer,
|
|
117
|
+
_args = arguments;
|
|
143
118
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
144
119
|
while (1) {
|
|
145
120
|
switch (_context.prev = _context.next) {
|
|
@@ -150,117 +125,85 @@ function _parseDBFInBatches() {
|
|
|
150
125
|
encoding: encoding
|
|
151
126
|
});
|
|
152
127
|
headerReturned = false;
|
|
153
|
-
|
|
128
|
+
_iteratorAbruptCompletion = false;
|
|
154
129
|
_didIteratorError = false;
|
|
155
130
|
_context.prev = 6;
|
|
156
|
-
_iterator = (
|
|
157
|
-
|
|
131
|
+
_iterator = _asyncIterator(asyncIterator);
|
|
158
132
|
case 8:
|
|
159
133
|
_context.next = 10;
|
|
160
134
|
return (0, _awaitAsyncGenerator2.default)(_iterator.next());
|
|
161
|
-
|
|
162
135
|
case 10:
|
|
163
|
-
_step = _context.sent
|
|
164
|
-
|
|
165
|
-
_context.next = 14;
|
|
166
|
-
return (0, _awaitAsyncGenerator2.default)(_step.value);
|
|
167
|
-
|
|
168
|
-
case 14:
|
|
169
|
-
_value = _context.sent;
|
|
170
|
-
|
|
171
|
-
if (_iteratorNormalCompletion) {
|
|
172
|
-
_context.next = 29;
|
|
136
|
+
if (!(_iteratorAbruptCompletion = !(_step = _context.sent).done)) {
|
|
137
|
+
_context.next = 24;
|
|
173
138
|
break;
|
|
174
139
|
}
|
|
175
|
-
|
|
176
|
-
arrayBuffer = _value;
|
|
140
|
+
arrayBuffer = _step.value;
|
|
177
141
|
parser.write(arrayBuffer);
|
|
178
|
-
|
|
179
142
|
if (!(!headerReturned && parser.result.dbfHeader)) {
|
|
180
|
-
_context.next =
|
|
143
|
+
_context.next = 17;
|
|
181
144
|
break;
|
|
182
145
|
}
|
|
183
|
-
|
|
184
146
|
headerReturned = true;
|
|
185
|
-
_context.next =
|
|
147
|
+
_context.next = 17;
|
|
186
148
|
return parser.result.dbfHeader;
|
|
187
|
-
|
|
188
|
-
case 22:
|
|
149
|
+
case 17:
|
|
189
150
|
if (!(parser.result.data.length > 0)) {
|
|
190
|
-
_context.next =
|
|
151
|
+
_context.next = 21;
|
|
191
152
|
break;
|
|
192
153
|
}
|
|
193
|
-
|
|
194
|
-
_context.next = 25;
|
|
154
|
+
_context.next = 20;
|
|
195
155
|
return parser.result.data;
|
|
196
|
-
|
|
197
|
-
case 25:
|
|
156
|
+
case 20:
|
|
198
157
|
parser.result.data = [];
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
_iteratorNormalCompletion = true;
|
|
158
|
+
case 21:
|
|
159
|
+
_iteratorAbruptCompletion = false;
|
|
202
160
|
_context.next = 8;
|
|
203
161
|
break;
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
_context.next = 35;
|
|
162
|
+
case 24:
|
|
163
|
+
_context.next = 30;
|
|
207
164
|
break;
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
_context.prev = 31;
|
|
165
|
+
case 26:
|
|
166
|
+
_context.prev = 26;
|
|
211
167
|
_context.t0 = _context["catch"](6);
|
|
212
168
|
_didIteratorError = true;
|
|
213
169
|
_iteratorError = _context.t0;
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
_context.prev =
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
if (!(!_iteratorNormalCompletion && _iterator.return != null)) {
|
|
220
|
-
_context.next = 40;
|
|
170
|
+
case 30:
|
|
171
|
+
_context.prev = 30;
|
|
172
|
+
_context.prev = 31;
|
|
173
|
+
if (!(_iteratorAbruptCompletion && _iterator.return != null)) {
|
|
174
|
+
_context.next = 35;
|
|
221
175
|
break;
|
|
222
176
|
}
|
|
223
|
-
|
|
224
|
-
_context.next = 40;
|
|
177
|
+
_context.next = 35;
|
|
225
178
|
return (0, _awaitAsyncGenerator2.default)(_iterator.return());
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
_context.prev = 40;
|
|
229
|
-
|
|
179
|
+
case 35:
|
|
180
|
+
_context.prev = 35;
|
|
230
181
|
if (!_didIteratorError) {
|
|
231
|
-
_context.next =
|
|
182
|
+
_context.next = 38;
|
|
232
183
|
break;
|
|
233
184
|
}
|
|
234
|
-
|
|
235
185
|
throw _iteratorError;
|
|
236
|
-
|
|
237
|
-
case 43:
|
|
238
|
-
return _context.finish(40);
|
|
239
|
-
|
|
240
|
-
case 44:
|
|
186
|
+
case 38:
|
|
241
187
|
return _context.finish(35);
|
|
242
|
-
|
|
243
|
-
|
|
188
|
+
case 39:
|
|
189
|
+
return _context.finish(30);
|
|
190
|
+
case 40:
|
|
244
191
|
parser.end();
|
|
245
|
-
|
|
246
192
|
if (!(parser.result.data.length > 0)) {
|
|
247
|
-
_context.next =
|
|
193
|
+
_context.next = 44;
|
|
248
194
|
break;
|
|
249
195
|
}
|
|
250
|
-
|
|
251
|
-
_context.next = 49;
|
|
196
|
+
_context.next = 44;
|
|
252
197
|
return parser.result.data;
|
|
253
|
-
|
|
254
|
-
case 49:
|
|
198
|
+
case 44:
|
|
255
199
|
case "end":
|
|
256
200
|
return _context.stop();
|
|
257
201
|
}
|
|
258
202
|
}
|
|
259
|
-
}, _callee, null, [[6,
|
|
203
|
+
}, _callee, null, [[6, 26, 30, 40], [31,, 35, 39]]);
|
|
260
204
|
}));
|
|
261
205
|
return _parseDBFInBatches.apply(this, arguments);
|
|
262
206
|
}
|
|
263
|
-
|
|
264
207
|
function parseState(state, result, binaryReader, textDecoder) {
|
|
265
208
|
while (true) {
|
|
266
209
|
try {
|
|
@@ -268,14 +211,11 @@ function parseState(state, result, binaryReader, textDecoder) {
|
|
|
268
211
|
case STATE.ERROR:
|
|
269
212
|
case STATE.END:
|
|
270
213
|
return state;
|
|
271
|
-
|
|
272
214
|
case STATE.START:
|
|
273
215
|
var dataView = binaryReader.getDataView(DBF_HEADER_SIZE);
|
|
274
|
-
|
|
275
216
|
if (!dataView) {
|
|
276
217
|
return state;
|
|
277
218
|
}
|
|
278
|
-
|
|
279
219
|
result.dbfHeader = parseDBFHeader(dataView);
|
|
280
220
|
result.progress = {
|
|
281
221
|
bytesUsed: 0,
|
|
@@ -284,45 +224,39 @@ function parseState(state, result, binaryReader, textDecoder) {
|
|
|
284
224
|
};
|
|
285
225
|
state = STATE.FIELD_DESCRIPTORS;
|
|
286
226
|
break;
|
|
287
|
-
|
|
288
227
|
case STATE.FIELD_DESCRIPTORS:
|
|
289
|
-
var fieldDescriptorView = binaryReader.getDataView(
|
|
290
|
-
|
|
228
|
+
var fieldDescriptorView = binaryReader.getDataView(
|
|
229
|
+
result.dbfHeader.headerLength - DBF_HEADER_SIZE);
|
|
291
230
|
if (!fieldDescriptorView) {
|
|
292
231
|
return state;
|
|
293
232
|
}
|
|
294
|
-
|
|
295
233
|
result.dbfFields = parseFieldDescriptors(fieldDescriptorView, textDecoder);
|
|
296
234
|
result.schema = new _schema.Schema(result.dbfFields.map(function (dbfField) {
|
|
297
235
|
return makeField(dbfField);
|
|
298
236
|
}));
|
|
299
237
|
state = STATE.FIELD_PROPERTIES;
|
|
238
|
+
|
|
300
239
|
binaryReader.skip(1);
|
|
301
240
|
break;
|
|
302
|
-
|
|
303
241
|
case STATE.FIELD_PROPERTIES:
|
|
304
242
|
var _ref3 = (result === null || result === void 0 ? void 0 : result.dbfHeader) || {},
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
243
|
+
_ref3$recordLength = _ref3.recordLength,
|
|
244
|
+
recordLength = _ref3$recordLength === void 0 ? 0 : _ref3$recordLength,
|
|
245
|
+
_ref3$nRecords = _ref3.nRecords,
|
|
246
|
+
nRecords = _ref3$nRecords === void 0 ? 0 : _ref3$nRecords;
|
|
310
247
|
while (result.data.length < nRecords) {
|
|
311
248
|
var recordView = binaryReader.getDataView(recordLength - 1);
|
|
312
|
-
|
|
313
249
|
if (!recordView) {
|
|
314
250
|
return state;
|
|
315
251
|
}
|
|
316
|
-
|
|
317
252
|
binaryReader.skip(1);
|
|
253
|
+
|
|
318
254
|
var row = parseRow(recordView, result.dbfFields, textDecoder);
|
|
319
255
|
result.data.push(row);
|
|
320
256
|
result.progress.rows = result.data.length;
|
|
321
257
|
}
|
|
322
|
-
|
|
323
258
|
state = STATE.END;
|
|
324
259
|
break;
|
|
325
|
-
|
|
326
260
|
default:
|
|
327
261
|
state = STATE.ERROR;
|
|
328
262
|
result.error = "illegal parser state ".concat(state);
|
|
@@ -352,9 +286,9 @@ function parseFieldDescriptors(view, textDecoder) {
|
|
|
352
286
|
var nFields = (view.byteLength - 1) / 32;
|
|
353
287
|
var fields = [];
|
|
354
288
|
var offset = 0;
|
|
355
|
-
|
|
356
289
|
for (var i = 0; i < nFields; i++) {
|
|
357
|
-
var name = textDecoder.decode(new Uint8Array(view.buffer, view.byteOffset + offset, 11))
|
|
290
|
+
var name = textDecoder.decode(new Uint8Array(view.buffer, view.byteOffset + offset, 11))
|
|
291
|
+
.replace(/\u0000/g, '');
|
|
358
292
|
fields.push({
|
|
359
293
|
name: name,
|
|
360
294
|
dataType: String.fromCharCode(view.getUint8(offset + 11)),
|
|
@@ -363,17 +297,14 @@ function parseFieldDescriptors(view, textDecoder) {
|
|
|
363
297
|
});
|
|
364
298
|
offset += 32;
|
|
365
299
|
}
|
|
366
|
-
|
|
367
300
|
return fields;
|
|
368
301
|
}
|
|
369
302
|
|
|
370
303
|
function parseRow(view, fields, textDecoder) {
|
|
371
304
|
var out = {};
|
|
372
305
|
var offset = 0;
|
|
373
|
-
|
|
374
306
|
var _iterator2 = _createForOfIteratorHelper(fields),
|
|
375
|
-
|
|
376
|
-
|
|
307
|
+
_step2;
|
|
377
308
|
try {
|
|
378
309
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
379
310
|
var field = _step2.value;
|
|
@@ -386,7 +317,6 @@ function parseRow(view, fields, textDecoder) {
|
|
|
386
317
|
} finally {
|
|
387
318
|
_iterator2.f();
|
|
388
319
|
}
|
|
389
|
-
|
|
390
320
|
return out;
|
|
391
321
|
}
|
|
392
322
|
|
|
@@ -394,25 +324,18 @@ function parseField(text, dataType) {
|
|
|
394
324
|
switch (dataType) {
|
|
395
325
|
case 'B':
|
|
396
326
|
return parseNumber(text);
|
|
397
|
-
|
|
398
327
|
case 'C':
|
|
399
328
|
return parseCharacter(text);
|
|
400
|
-
|
|
401
329
|
case 'F':
|
|
402
330
|
return parseNumber(text);
|
|
403
|
-
|
|
404
331
|
case 'N':
|
|
405
332
|
return parseNumber(text);
|
|
406
|
-
|
|
407
333
|
case 'O':
|
|
408
334
|
return parseNumber(text);
|
|
409
|
-
|
|
410
335
|
case 'D':
|
|
411
336
|
return parseDate(text);
|
|
412
|
-
|
|
413
337
|
case 'L':
|
|
414
338
|
return parseBoolean(text);
|
|
415
|
-
|
|
416
339
|
default:
|
|
417
340
|
throw new Error('Unsupported data type');
|
|
418
341
|
}
|
|
@@ -437,32 +360,24 @@ function parseCharacter(text) {
|
|
|
437
360
|
|
|
438
361
|
function makeField(_ref4) {
|
|
439
362
|
var name = _ref4.name,
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
363
|
+
dataType = _ref4.dataType,
|
|
364
|
+
fieldLength = _ref4.fieldLength,
|
|
365
|
+
decimal = _ref4.decimal;
|
|
444
366
|
switch (dataType) {
|
|
445
367
|
case 'B':
|
|
446
368
|
return new _schema.Field(name, new _schema.Float64(), true);
|
|
447
|
-
|
|
448
369
|
case 'C':
|
|
449
370
|
return new _schema.Field(name, new _schema.Utf8(), true);
|
|
450
|
-
|
|
451
371
|
case 'F':
|
|
452
372
|
return new _schema.Field(name, new _schema.Float64(), true);
|
|
453
|
-
|
|
454
373
|
case 'N':
|
|
455
374
|
return new _schema.Field(name, new _schema.Float64(), true);
|
|
456
|
-
|
|
457
375
|
case 'O':
|
|
458
376
|
return new _schema.Field(name, new _schema.Float64(), true);
|
|
459
|
-
|
|
460
377
|
case 'D':
|
|
461
378
|
return new _schema.Field(name, new _schema.TimestampMillisecond(), true);
|
|
462
|
-
|
|
463
379
|
case 'L':
|
|
464
380
|
return new _schema.Field(name, new _schema.Bool(), true);
|
|
465
|
-
|
|
466
381
|
default:
|
|
467
382
|
throw new Error('Unsupported data type');
|
|
468
383
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/parsers/parse-dbf.ts"],"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"],"mappings":"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","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 = {};\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"],"file":"parse-dbf.js"}
|
|
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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"}
|