@loaders.gl/shapefile 4.0.0-beta.1 → 4.0.0-beta.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.
Files changed (140) hide show
  1. package/dist/dbf-loader.d.ts.map +1 -0
  2. package/dist/{esm/dbf-loader.js → dbf-loader.js} +2 -2
  3. package/dist/dbf-loader.js.map +1 -0
  4. package/dist/dbf-worker.js +82 -26
  5. package/dist/{dist.min.js → dist.dev.js} +1449 -1973
  6. package/dist/index.cjs +1107 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +7 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/lib/parsers/parse-dbf.d.ts.map +1 -0
  11. package/dist/{esm/lib → lib}/parsers/parse-dbf.js +8 -9
  12. package/dist/lib/parsers/parse-dbf.js.map +1 -0
  13. package/dist/lib/parsers/parse-shapefile.d.ts.map +1 -0
  14. package/dist/{esm/lib → lib}/parsers/parse-shapefile.js +5 -5
  15. package/dist/lib/parsers/parse-shapefile.js.map +1 -0
  16. package/dist/lib/parsers/parse-shp-geometry.d.ts.map +1 -0
  17. package/dist/{esm/lib → lib}/parsers/parse-shp-geometry.js +1 -1
  18. package/dist/lib/parsers/parse-shp-geometry.js.map +1 -0
  19. package/dist/lib/parsers/parse-shp-header.d.ts.map +1 -0
  20. package/dist/{esm/lib → lib}/parsers/parse-shp-header.js +2 -2
  21. package/dist/lib/parsers/parse-shp-header.js.map +1 -0
  22. package/dist/lib/parsers/parse-shp.d.ts.map +1 -0
  23. package/dist/{esm/lib → lib}/parsers/parse-shp.js +11 -12
  24. package/dist/lib/parsers/parse-shp.js.map +1 -0
  25. package/dist/lib/parsers/parse-shx.d.ts.map +1 -0
  26. package/dist/{esm/lib → lib}/parsers/parse-shx.js +1 -1
  27. package/dist/lib/parsers/parse-shx.js.map +1 -0
  28. package/dist/lib/parsers/types.d.ts.map +1 -0
  29. package/dist/lib/parsers/types.js.map +1 -0
  30. package/dist/lib/streaming/binary-chunk-reader.d.ts.map +1 -0
  31. package/dist/{esm/lib → lib}/streaming/binary-chunk-reader.js +4 -5
  32. package/dist/lib/streaming/binary-chunk-reader.js.map +1 -0
  33. package/dist/lib/streaming/binary-reader.d.ts.map +1 -0
  34. package/dist/{esm/lib → lib}/streaming/binary-reader.js +2 -3
  35. package/dist/lib/streaming/binary-reader.js.map +1 -0
  36. package/dist/lib/streaming/zip-batch-iterators.d.ts.map +1 -0
  37. package/dist/lib/streaming/zip-batch-iterators.js.map +1 -0
  38. package/dist/shapefile-loader.d.ts.map +1 -0
  39. package/dist/{esm/shapefile-loader.js → shapefile-loader.js} +3 -3
  40. package/dist/shapefile-loader.js.map +1 -0
  41. package/dist/shp-loader.d.ts.map +1 -0
  42. package/dist/{esm/shp-loader.js → shp-loader.js} +2 -2
  43. package/dist/shp-loader.js.map +1 -0
  44. package/dist/shp-worker.js +64 -3
  45. package/dist/{src/workers → workers}/dbf-worker.d.ts.map +1 -1
  46. package/dist/{esm/workers → workers}/dbf-worker.js +1 -1
  47. package/dist/workers/dbf-worker.js.map +1 -0
  48. package/dist/{src/workers → workers}/shp-worker.d.ts.map +1 -1
  49. package/dist/{esm/workers → workers}/shp-worker.js +1 -1
  50. package/dist/workers/shp-worker.js.map +1 -0
  51. package/package.json +18 -10
  52. package/dist/es5/bundle.js +0 -6
  53. package/dist/es5/bundle.js.map +0 -1
  54. package/dist/es5/dbf-loader.js +0 -55
  55. package/dist/es5/dbf-loader.js.map +0 -1
  56. package/dist/es5/index.js +0 -60
  57. package/dist/es5/index.js.map +0 -1
  58. package/dist/es5/lib/parsers/parse-dbf.js +0 -394
  59. package/dist/es5/lib/parsers/parse-dbf.js.map +0 -1
  60. package/dist/es5/lib/parsers/parse-shapefile.js +0 -377
  61. package/dist/es5/lib/parsers/parse-shapefile.js.map +0 -1
  62. package/dist/es5/lib/parsers/parse-shp-geometry.js +0 -220
  63. package/dist/es5/lib/parsers/parse-shp-geometry.js.map +0 -1
  64. package/dist/es5/lib/parsers/parse-shp-header.js +0 -35
  65. package/dist/es5/lib/parsers/parse-shp-header.js.map +0 -1
  66. package/dist/es5/lib/parsers/parse-shp.js +0 -227
  67. package/dist/es5/lib/parsers/parse-shp.js.map +0 -1
  68. package/dist/es5/lib/parsers/parse-shx.js +0 -26
  69. package/dist/es5/lib/parsers/parse-shx.js.map +0 -1
  70. package/dist/es5/lib/parsers/types.js +0 -2
  71. package/dist/es5/lib/parsers/types.js.map +0 -1
  72. package/dist/es5/lib/streaming/binary-chunk-reader.js +0 -178
  73. package/dist/es5/lib/streaming/binary-chunk-reader.js.map +0 -1
  74. package/dist/es5/lib/streaming/binary-reader.js +0 -48
  75. package/dist/es5/lib/streaming/binary-reader.js.map +0 -1
  76. package/dist/es5/lib/streaming/zip-batch-iterators.js +0 -95
  77. package/dist/es5/lib/streaming/zip-batch-iterators.js.map +0 -1
  78. package/dist/es5/shapefile-loader.js +0 -29
  79. package/dist/es5/shapefile-loader.js.map +0 -1
  80. package/dist/es5/shp-loader.js +0 -58
  81. package/dist/es5/shp-loader.js.map +0 -1
  82. package/dist/es5/workers/dbf-worker.js +0 -6
  83. package/dist/es5/workers/dbf-worker.js.map +0 -1
  84. package/dist/es5/workers/shp-worker.js +0 -6
  85. package/dist/es5/workers/shp-worker.js.map +0 -1
  86. package/dist/esm/bundle.js +0 -4
  87. package/dist/esm/bundle.js.map +0 -1
  88. package/dist/esm/dbf-loader.js.map +0 -1
  89. package/dist/esm/index.js +0 -7
  90. package/dist/esm/index.js.map +0 -1
  91. package/dist/esm/lib/parsers/parse-dbf.js.map +0 -1
  92. package/dist/esm/lib/parsers/parse-shapefile.js.map +0 -1
  93. package/dist/esm/lib/parsers/parse-shp-geometry.js.map +0 -1
  94. package/dist/esm/lib/parsers/parse-shp-header.js.map +0 -1
  95. package/dist/esm/lib/parsers/parse-shp.js.map +0 -1
  96. package/dist/esm/lib/parsers/parse-shx.js.map +0 -1
  97. package/dist/esm/lib/parsers/types.js.map +0 -1
  98. package/dist/esm/lib/streaming/binary-chunk-reader.js.map +0 -1
  99. package/dist/esm/lib/streaming/binary-reader.js.map +0 -1
  100. package/dist/esm/lib/streaming/zip-batch-iterators.js.map +0 -1
  101. package/dist/esm/shapefile-loader.js.map +0 -1
  102. package/dist/esm/shp-loader.js.map +0 -1
  103. package/dist/esm/workers/dbf-worker.js.map +0 -1
  104. package/dist/esm/workers/shp-worker.js.map +0 -1
  105. package/dist/src/bundle.d.ts +0 -2
  106. package/dist/src/bundle.d.ts.map +0 -1
  107. package/dist/src/dbf-loader.d.ts.map +0 -1
  108. package/dist/src/index.d.ts.map +0 -1
  109. package/dist/src/lib/parsers/parse-dbf.d.ts.map +0 -1
  110. package/dist/src/lib/parsers/parse-shapefile.d.ts.map +0 -1
  111. package/dist/src/lib/parsers/parse-shp-geometry.d.ts.map +0 -1
  112. package/dist/src/lib/parsers/parse-shp-header.d.ts.map +0 -1
  113. package/dist/src/lib/parsers/parse-shp.d.ts.map +0 -1
  114. package/dist/src/lib/parsers/parse-shx.d.ts.map +0 -1
  115. package/dist/src/lib/parsers/types.d.ts.map +0 -1
  116. package/dist/src/lib/streaming/binary-chunk-reader.d.ts.map +0 -1
  117. package/dist/src/lib/streaming/binary-reader.d.ts.map +0 -1
  118. package/dist/src/lib/streaming/zip-batch-iterators.d.ts.map +0 -1
  119. package/dist/src/shapefile-loader.d.ts.map +0 -1
  120. package/dist/src/shp-loader.d.ts.map +0 -1
  121. package/dist/tsconfig.tsbuildinfo +0 -1
  122. package/src/bundle.ts +0 -4
  123. /package/dist/{src/dbf-loader.d.ts → dbf-loader.d.ts} +0 -0
  124. /package/dist/{src/index.d.ts → index.d.ts} +0 -0
  125. /package/dist/{src/lib → lib}/parsers/parse-dbf.d.ts +0 -0
  126. /package/dist/{src/lib → lib}/parsers/parse-shapefile.d.ts +0 -0
  127. /package/dist/{src/lib → lib}/parsers/parse-shp-geometry.d.ts +0 -0
  128. /package/dist/{src/lib → lib}/parsers/parse-shp-header.d.ts +0 -0
  129. /package/dist/{src/lib → lib}/parsers/parse-shp.d.ts +0 -0
  130. /package/dist/{src/lib → lib}/parsers/parse-shx.d.ts +0 -0
  131. /package/dist/{src/lib → lib}/parsers/types.d.ts +0 -0
  132. /package/dist/{esm/lib → lib}/parsers/types.js +0 -0
  133. /package/dist/{src/lib → lib}/streaming/binary-chunk-reader.d.ts +0 -0
  134. /package/dist/{src/lib → lib}/streaming/binary-reader.d.ts +0 -0
  135. /package/dist/{src/lib → lib}/streaming/zip-batch-iterators.d.ts +0 -0
  136. /package/dist/{esm/lib → lib}/streaming/zip-batch-iterators.js +0 -0
  137. /package/dist/{src/shapefile-loader.d.ts → shapefile-loader.d.ts} +0 -0
  138. /package/dist/{src/shp-loader.d.ts → shp-loader.d.ts} +0 -0
  139. /package/dist/{src/workers → workers}/dbf-worker.d.ts +0 -0
  140. /package/dist/{src/workers → workers}/shp-worker.d.ts +0 -0
@@ -1,394 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.parseDBF = parseDBF;
8
- exports.parseDBFInBatches = parseDBFInBatches;
9
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
- var _awaitAsyncGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/awaitAsyncGenerator"));
14
- var _wrapAsyncGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapAsyncGenerator"));
15
- var _binaryChunkReader = require("../streaming/binary-chunk-reader");
16
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
17
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
18
- 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; }
19
- 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"); }
20
- 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); }
21
- var LITTLE_ENDIAN = true;
22
- var DBF_HEADER_SIZE = 32;
23
- var STATE = function (STATE) {
24
- STATE[STATE["START"] = 0] = "START";
25
- STATE[STATE["FIELD_DESCRIPTORS"] = 1] = "FIELD_DESCRIPTORS";
26
- STATE[STATE["FIELD_PROPERTIES"] = 2] = "FIELD_PROPERTIES";
27
- STATE[STATE["END"] = 3] = "END";
28
- STATE[STATE["ERROR"] = 4] = "ERROR";
29
- return STATE;
30
- }(STATE || {});
31
- var DBFParser = function () {
32
- function DBFParser(options) {
33
- (0, _classCallCheck2.default)(this, DBFParser);
34
- (0, _defineProperty2.default)(this, "binaryReader", new _binaryChunkReader.BinaryChunkReader());
35
- (0, _defineProperty2.default)(this, "textDecoder", void 0);
36
- (0, _defineProperty2.default)(this, "state", STATE.START);
37
- (0, _defineProperty2.default)(this, "result", {
38
- data: []
39
- });
40
- this.textDecoder = new TextDecoder(options.encoding);
41
- }
42
- (0, _createClass2.default)(DBFParser, [{
43
- key: "write",
44
- value: function write(arrayBuffer) {
45
- this.binaryReader.write(arrayBuffer);
46
- this.state = parseState(this.state, this.result, this.binaryReader, this.textDecoder);
47
- }
48
- }, {
49
- key: "end",
50
- value: function end() {
51
- this.binaryReader.end();
52
- this.state = parseState(this.state, this.result, this.binaryReader, this.textDecoder);
53
- if (this.state !== STATE.END) {
54
- this.state = STATE.ERROR;
55
- this.result.error = 'DBF incomplete file';
56
- }
57
- }
58
- }]);
59
- return DBFParser;
60
- }();
61
- function parseDBF(arrayBuffer) {
62
- var _options$tables, _options$dbf;
63
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
64
- var _ref = options.dbf || {},
65
- _ref$encoding = _ref.encoding,
66
- encoding = _ref$encoding === void 0 ? 'latin1' : _ref$encoding;
67
- var dbfParser = new DBFParser({
68
- encoding: encoding
69
- });
70
- dbfParser.write(arrayBuffer);
71
- dbfParser.end();
72
- var _dbfParser$result = dbfParser.result,
73
- data = _dbfParser$result.data,
74
- schema = _dbfParser$result.schema;
75
- 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);
76
- switch (shape) {
77
- case 'object-row-table':
78
- {
79
- var table = {
80
- shape: 'object-row-table',
81
- schema: schema,
82
- data: data
83
- };
84
- return table;
85
- }
86
- case 'table':
87
- return {
88
- schema: schema,
89
- rows: data
90
- };
91
- case 'rows':
92
- default:
93
- return data;
94
- }
95
- }
96
- function parseDBFInBatches(_x) {
97
- return _parseDBFInBatches.apply(this, arguments);
98
- }
99
- function _parseDBFInBatches() {
100
- _parseDBFInBatches = (0, _wrapAsyncGenerator2.default)(function (asyncIterator) {
101
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
102
- return _regenerator.default.mark(function _callee() {
103
- var _ref2, _ref2$encoding, encoding, parser, headerReturned, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, arrayBuffer;
104
- return _regenerator.default.wrap(function _callee$(_context) {
105
- while (1) switch (_context.prev = _context.next) {
106
- case 0:
107
- _ref2 = options.dbf || {}, _ref2$encoding = _ref2.encoding, encoding = _ref2$encoding === void 0 ? 'latin1' : _ref2$encoding;
108
- parser = new DBFParser({
109
- encoding: encoding
110
- });
111
- headerReturned = false;
112
- _iteratorAbruptCompletion = false;
113
- _didIteratorError = false;
114
- _context.prev = 5;
115
- _iterator = _asyncIterator(asyncIterator);
116
- case 7:
117
- _context.next = 9;
118
- return (0, _awaitAsyncGenerator2.default)(_iterator.next());
119
- case 9:
120
- if (!(_iteratorAbruptCompletion = !(_step = _context.sent).done)) {
121
- _context.next = 23;
122
- break;
123
- }
124
- arrayBuffer = _step.value;
125
- parser.write(arrayBuffer);
126
- if (!(!headerReturned && parser.result.dbfHeader)) {
127
- _context.next = 16;
128
- break;
129
- }
130
- headerReturned = true;
131
- _context.next = 16;
132
- return parser.result.dbfHeader;
133
- case 16:
134
- if (!(parser.result.data.length > 0)) {
135
- _context.next = 20;
136
- break;
137
- }
138
- _context.next = 19;
139
- return parser.result.data;
140
- case 19:
141
- parser.result.data = [];
142
- case 20:
143
- _iteratorAbruptCompletion = false;
144
- _context.next = 7;
145
- break;
146
- case 23:
147
- _context.next = 29;
148
- break;
149
- case 25:
150
- _context.prev = 25;
151
- _context.t0 = _context["catch"](5);
152
- _didIteratorError = true;
153
- _iteratorError = _context.t0;
154
- case 29:
155
- _context.prev = 29;
156
- _context.prev = 30;
157
- if (!(_iteratorAbruptCompletion && _iterator.return != null)) {
158
- _context.next = 34;
159
- break;
160
- }
161
- _context.next = 34;
162
- return (0, _awaitAsyncGenerator2.default)(_iterator.return());
163
- case 34:
164
- _context.prev = 34;
165
- if (!_didIteratorError) {
166
- _context.next = 37;
167
- break;
168
- }
169
- throw _iteratorError;
170
- case 37:
171
- return _context.finish(34);
172
- case 38:
173
- return _context.finish(29);
174
- case 39:
175
- parser.end();
176
- if (!(parser.result.data.length > 0)) {
177
- _context.next = 43;
178
- break;
179
- }
180
- _context.next = 43;
181
- return parser.result.data;
182
- case 43:
183
- case "end":
184
- return _context.stop();
185
- }
186
- }, _callee, null, [[5, 25, 29, 39], [30,, 34, 38]]);
187
- })();
188
- });
189
- return _parseDBFInBatches.apply(this, arguments);
190
- }
191
- function parseState(state, result, binaryReader, textDecoder) {
192
- while (true) {
193
- try {
194
- switch (state) {
195
- case STATE.ERROR:
196
- case STATE.END:
197
- return state;
198
- case STATE.START:
199
- var dataView = binaryReader.getDataView(DBF_HEADER_SIZE);
200
- if (!dataView) {
201
- return state;
202
- }
203
- result.dbfHeader = parseDBFHeader(dataView);
204
- result.progress = {
205
- bytesUsed: 0,
206
- rowsTotal: result.dbfHeader.nRecords,
207
- rows: 0
208
- };
209
- state = STATE.FIELD_DESCRIPTORS;
210
- break;
211
- case STATE.FIELD_DESCRIPTORS:
212
- var fieldDescriptorView = binaryReader.getDataView(result.dbfHeader.headerLength - DBF_HEADER_SIZE);
213
- if (!fieldDescriptorView) {
214
- return state;
215
- }
216
- result.dbfFields = parseFieldDescriptors(fieldDescriptorView, textDecoder);
217
- result.schema = {
218
- fields: result.dbfFields.map(function (dbfField) {
219
- return makeField(dbfField);
220
- }),
221
- metadata: {}
222
- };
223
- state = STATE.FIELD_PROPERTIES;
224
- binaryReader.skip(1);
225
- break;
226
- case STATE.FIELD_PROPERTIES:
227
- var _ref3 = (result === null || result === void 0 ? void 0 : result.dbfHeader) || {},
228
- _ref3$recordLength = _ref3.recordLength,
229
- recordLength = _ref3$recordLength === void 0 ? 0 : _ref3$recordLength,
230
- _ref3$nRecords = _ref3.nRecords,
231
- nRecords = _ref3$nRecords === void 0 ? 0 : _ref3$nRecords;
232
- while (result.data.length < nRecords) {
233
- var recordView = binaryReader.getDataView(recordLength - 1);
234
- if (!recordView) {
235
- return state;
236
- }
237
- binaryReader.skip(1);
238
- var row = parseRow(recordView, result.dbfFields, textDecoder);
239
- result.data.push(row);
240
- result.progress.rows = result.data.length;
241
- }
242
- state = STATE.END;
243
- break;
244
- default:
245
- state = STATE.ERROR;
246
- result.error = "illegal parser state ".concat(state);
247
- return state;
248
- }
249
- } catch (error) {
250
- state = STATE.ERROR;
251
- result.error = "DBF parsing failed: ".concat(error.message);
252
- return state;
253
- }
254
- }
255
- }
256
- function parseDBFHeader(headerView) {
257
- return {
258
- year: headerView.getUint8(1) + 1900,
259
- month: headerView.getUint8(2),
260
- day: headerView.getUint8(3),
261
- nRecords: headerView.getUint32(4, LITTLE_ENDIAN),
262
- headerLength: headerView.getUint16(8, LITTLE_ENDIAN),
263
- recordLength: headerView.getUint16(10, LITTLE_ENDIAN),
264
- languageDriver: headerView.getUint8(29)
265
- };
266
- }
267
- function parseFieldDescriptors(view, textDecoder) {
268
- var nFields = (view.byteLength - 1) / 32;
269
- var fields = [];
270
- var offset = 0;
271
- for (var i = 0; i < nFields; i++) {
272
- var name = textDecoder.decode(new Uint8Array(view.buffer, view.byteOffset + offset, 11)).replace(/\u0000/g, '');
273
- fields.push({
274
- name: name,
275
- dataType: String.fromCharCode(view.getUint8(offset + 11)),
276
- fieldLength: view.getUint8(offset + 16),
277
- decimal: view.getUint8(offset + 17)
278
- });
279
- offset += 32;
280
- }
281
- return fields;
282
- }
283
- function parseRow(view, fields, textDecoder) {
284
- var out = {};
285
- var offset = 0;
286
- var _iterator2 = _createForOfIteratorHelper(fields),
287
- _step2;
288
- try {
289
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
290
- var field = _step2.value;
291
- var text = textDecoder.decode(new Uint8Array(view.buffer, view.byteOffset + offset, field.fieldLength));
292
- out[field.name] = parseField(text, field.dataType);
293
- offset += field.fieldLength;
294
- }
295
- } catch (err) {
296
- _iterator2.e(err);
297
- } finally {
298
- _iterator2.f();
299
- }
300
- return out;
301
- }
302
- function parseField(text, dataType) {
303
- switch (dataType) {
304
- case 'B':
305
- return parseNumber(text);
306
- case 'C':
307
- return parseCharacter(text);
308
- case 'F':
309
- return parseNumber(text);
310
- case 'N':
311
- return parseNumber(text);
312
- case 'O':
313
- return parseNumber(text);
314
- case 'D':
315
- return parseDate(text);
316
- case 'L':
317
- return parseBoolean(text);
318
- default:
319
- throw new Error('Unsupported data type');
320
- }
321
- }
322
- function parseDate(str) {
323
- return Date.UTC(str.slice(0, 4), parseInt(str.slice(4, 6), 10) - 1, str.slice(6, 8));
324
- }
325
- function parseBoolean(value) {
326
- return /^[nf]$/i.test(value) ? false : /^[yt]$/i.test(value) ? true : null;
327
- }
328
- function parseNumber(text) {
329
- var number = parseFloat(text);
330
- return isNaN(number) ? null : number;
331
- }
332
- function parseCharacter(text) {
333
- return text.trim() || null;
334
- }
335
- function makeField(_ref4) {
336
- var name = _ref4.name,
337
- dataType = _ref4.dataType,
338
- fieldLength = _ref4.fieldLength,
339
- decimal = _ref4.decimal;
340
- switch (dataType) {
341
- case 'B':
342
- return {
343
- name: name,
344
- type: 'float64',
345
- nullable: true,
346
- metadata: {}
347
- };
348
- case 'C':
349
- return {
350
- name: name,
351
- type: 'utf8',
352
- nullable: true,
353
- metadata: {}
354
- };
355
- case 'F':
356
- return {
357
- name: name,
358
- type: 'float64',
359
- nullable: true,
360
- metadata: {}
361
- };
362
- case 'N':
363
- return {
364
- name: name,
365
- type: 'float64',
366
- nullable: true,
367
- metadata: {}
368
- };
369
- case 'O':
370
- return {
371
- name: name,
372
- type: 'float64',
373
- nullable: true,
374
- metadata: {}
375
- };
376
- case 'D':
377
- return {
378
- name: name,
379
- type: 'timestamp-millisecond',
380
- nullable: true,
381
- metadata: {}
382
- };
383
- case 'L':
384
- return {
385
- name: name,
386
- type: 'bool',
387
- nullable: true,
388
- metadata: {}
389
- };
390
- default:
391
- throw new Error('Unsupported data type');
392
- }
393
- }
394
- //# sourceMappingURL=parse-dbf.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse-dbf.js","names":["_binaryChunkReader","require","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","_asyncIterator","iterable","method","async","sync","retry","asyncIterator","AsyncFromSyncIterator","AsyncFromSyncIteratorContinuation","r","Promise","reject","resolve","then","apply","arguments","_return","ret","throw","_throw","thr","LITTLE_ENDIAN","DBF_HEADER_SIZE","STATE","DBFParser","options","_classCallCheck2","default","_defineProperty2","BinaryChunkReader","START","data","textDecoder","TextDecoder","encoding","_createClass2","key","write","arrayBuffer","binaryReader","state","parseState","result","end","END","ERROR","error","parseDBF","_options$tables","_options$dbf","undefined","_ref","dbf","_ref$encoding","dbfParser","_dbfParser$result","schema","shape","tables","format","table","rows","parseDBFInBatches","_x","_parseDBFInBatches","_wrapAsyncGenerator2","_regenerator","mark","_callee","_ref2","_ref2$encoding","parser","headerReturned","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_iterator","_step","wrap","_callee$","_context","prev","_awaitAsyncGenerator2","sent","dbfHeader","t0","finish","stop","dataView","getDataView","parseDBFHeader","progress","bytesUsed","rowsTotal","nRecords","FIELD_DESCRIPTORS","fieldDescriptorView","headerLength","dbfFields","parseFieldDescriptors","fields","map","dbfField","makeField","metadata","FIELD_PROPERTIES","skip","_ref3","_ref3$recordLength","recordLength","_ref3$nRecords","recordView","row","parseRow","push","concat","message","headerView","year","getUint8","month","day","getUint32","getUint16","languageDriver","view","nFields","byteLength","offset","decode","Uint8Array","buffer","byteOffset","replace","dataType","String","fromCharCode","fieldLength","decimal","out","_iterator2","_step2","field","text","parseField","parseNumber","parseCharacter","parseDate","parseBoolean","Error","str","Date","UTC","parseInt","number","parseFloat","isNaN","trim","_ref4","type","nullable"],"sources":["../../../../src/lib/parsers/parse-dbf.ts"],"sourcesContent":["import {Field, ObjectRowTable} from '@loaders.gl/schema';\nimport {BinaryChunkReader} from '../streaming/binary-chunk-reader';\nimport {\n DBFLoaderOptions,\n DBFResult,\n DBFTableOutput,\n DBFHeader,\n DBFRowsOutput,\n DBFField\n} from './types';\n\nconst LITTLE_ENDIAN = true;\nconst DBF_HEADER_SIZE = 32;\n\nenum STATE {\n START = 0, // Expecting header\n FIELD_DESCRIPTORS = 1,\n FIELD_PROPERTIES = 2,\n END = 3,\n ERROR = 4\n}\n\nclass DBFParser {\n binaryReader = new BinaryChunkReader();\n textDecoder: TextDecoder;\n state = STATE.START;\n result: DBFResult = {\n data: []\n };\n\n constructor(options: {encoding: string}) {\n this.textDecoder = new TextDecoder(options.encoding);\n }\n\n /**\n * @param arrayBuffer\n */\n write(arrayBuffer: ArrayBuffer): void {\n this.binaryReader.write(arrayBuffer);\n this.state = parseState(this.state, this.result, this.binaryReader, this.textDecoder);\n // this.result.progress.bytesUsed = this.binaryReader.bytesUsed();\n\n // important events:\n // - schema available\n // - first rows available\n // - all rows available\n }\n\n end(): void {\n this.binaryReader.end();\n this.state = parseState(this.state, this.result, this.binaryReader, this.textDecoder);\n // this.result.progress.bytesUsed = this.binaryReader.bytesUsed();\n if (this.state !== STATE.END) {\n this.state = STATE.ERROR;\n this.result.error = 'DBF incomplete file';\n }\n }\n}\n\n/**\n * @param arrayBuffer\n * @param options\n * @returns DBFTable or rows\n */\nexport function parseDBF(\n arrayBuffer: ArrayBuffer,\n options: DBFLoaderOptions = {}\n): DBFRowsOutput | DBFTableOutput | ObjectRowTable {\n const {encoding = 'latin1'} = options.dbf || {};\n\n const dbfParser = new DBFParser({encoding});\n dbfParser.write(arrayBuffer);\n dbfParser.end();\n\n const {data, schema} = dbfParser.result;\n const shape = options?.tables?.format || options?.dbf?.shape;\n switch (shape) {\n case 'object-row-table': {\n const table: ObjectRowTable = {\n shape: 'object-row-table',\n schema,\n data\n };\n return table;\n }\n case 'table':\n return {schema, rows: data};\n case 'rows':\n default:\n return data;\n }\n}\n/**\n * @param asyncIterator\n * @param options\n */\nexport async function* parseDBFInBatches(\n asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options: DBFLoaderOptions = {}\n): AsyncIterable<DBFHeader | DBFRowsOutput | DBFTableOutput> {\n const {encoding = 'latin1'} = options.dbf || {};\n\n const parser = new DBFParser({encoding});\n let headerReturned = false;\n for await (const arrayBuffer of asyncIterator) {\n parser.write(arrayBuffer);\n if (!headerReturned && parser.result.dbfHeader) {\n headerReturned = true;\n yield parser.result.dbfHeader;\n }\n\n if (parser.result.data.length > 0) {\n yield parser.result.data;\n parser.result.data = [];\n }\n }\n parser.end();\n if (parser.result.data.length > 0) {\n yield parser.result.data;\n }\n}\n/**\n * https://www.dbase.com/Knowledgebase/INT/db7_file_fmt.htm\n * @param state\n * @param result\n * @param binaryReader\n * @param textDecoder\n * @returns\n */\n/* eslint-disable complexity, max-depth */\nfunction parseState(\n state: STATE,\n result: DBFResult,\n binaryReader: BinaryChunkReader,\n textDecoder: TextDecoder\n): STATE {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n switch (state) {\n case STATE.ERROR:\n case STATE.END:\n return state;\n\n case STATE.START:\n // Parse initial file header\n // DBF Header\n const dataView = binaryReader.getDataView(DBF_HEADER_SIZE);\n if (!dataView) {\n return state;\n }\n result.dbfHeader = parseDBFHeader(dataView);\n result.progress = {\n bytesUsed: 0,\n rowsTotal: result.dbfHeader.nRecords,\n rows: 0\n };\n state = STATE.FIELD_DESCRIPTORS;\n break;\n\n case STATE.FIELD_DESCRIPTORS:\n // Parse DBF field descriptors (schema)\n const fieldDescriptorView = binaryReader.getDataView(\n // @ts-ignore\n result.dbfHeader.headerLength - DBF_HEADER_SIZE\n );\n if (!fieldDescriptorView) {\n return state;\n }\n\n result.dbfFields = parseFieldDescriptors(fieldDescriptorView, textDecoder);\n result.schema = {\n fields: result.dbfFields.map((dbfField) => makeField(dbfField)),\n metadata: {}\n };\n\n state = STATE.FIELD_PROPERTIES;\n\n // TODO(kyle) Not exactly sure why start offset needs to be headerLength + 1?\n // parsedbf uses ((fields.length + 1) << 5) + 2;\n binaryReader.skip(1);\n break;\n\n case STATE.FIELD_PROPERTIES:\n const {recordLength = 0, nRecords = 0} = result?.dbfHeader || {};\n while (result.data.length < nRecords) {\n const recordView = binaryReader.getDataView(recordLength - 1);\n if (!recordView) {\n return state;\n }\n // Note: Avoid actually reading the last byte, which may not be present\n binaryReader.skip(1);\n\n // @ts-ignore\n const row = parseRow(recordView, result.dbfFields, textDecoder);\n result.data.push(row);\n // @ts-ignore\n result.progress.rows = result.data.length;\n }\n state = STATE.END;\n break;\n\n default:\n state = STATE.ERROR;\n result.error = `illegal parser state ${state}`;\n return state;\n }\n } catch (error) {\n state = STATE.ERROR;\n result.error = `DBF parsing failed: ${(error as Error).message}`;\n return state;\n }\n }\n}\n\n/**\n * @param headerView\n */\nfunction parseDBFHeader(headerView: DataView): DBFHeader {\n return {\n // Last updated date\n year: headerView.getUint8(1) + 1900,\n month: headerView.getUint8(2),\n day: headerView.getUint8(3),\n // Number of records in data file\n nRecords: headerView.getUint32(4, LITTLE_ENDIAN),\n // Length of header in bytes\n headerLength: headerView.getUint16(8, LITTLE_ENDIAN),\n // Length of each record\n recordLength: headerView.getUint16(10, LITTLE_ENDIAN),\n // Not sure if this is usually set\n languageDriver: headerView.getUint8(29)\n };\n}\n\n/**\n * @param view\n */\nfunction parseFieldDescriptors(view: DataView, textDecoder: TextDecoder): DBFField[] {\n // NOTE: this might overestimate the number of fields if the \"Database\n // Container\" container exists and is included in the headerLength\n const nFields = (view.byteLength - 1) / 32;\n const fields: DBFField[] = [];\n let offset = 0;\n for (let i = 0; i < nFields; i++) {\n const name = textDecoder\n .decode(new Uint8Array(view.buffer, view.byteOffset + offset, 11))\n // eslint-disable-next-line no-control-regex\n .replace(/\\u0000/g, '');\n\n fields.push({\n name,\n dataType: String.fromCharCode(view.getUint8(offset + 11)),\n fieldLength: view.getUint8(offset + 16),\n decimal: view.getUint8(offset + 17)\n });\n offset += 32;\n }\n return fields;\n}\n\n/*\n * @param {BinaryChunkReader} binaryReader\nfunction parseRows(binaryReader, fields, nRecords, recordLength, textDecoder) {\n const rows = [];\n for (let i = 0; i < nRecords; i++) {\n const recordView = binaryReader.getDataView(recordLength - 1);\n binaryReader.skip(1);\n // @ts-ignore\n rows.push(parseRow(recordView, fields, textDecoder));\n }\n return rows;\n}\n */\n\n/**\n *\n * @param view\n * @param fields\n * @param textDecoder\n * @returns\n */\nfunction parseRow(\n view: DataView,\n fields: DBFField[],\n textDecoder: TextDecoder\n): {[key: string]: any} {\n const out: {[key: string]: string | number | boolean | null} = {};\n let offset = 0;\n for (const field of fields) {\n const text = textDecoder.decode(\n new Uint8Array(view.buffer, view.byteOffset + offset, field.fieldLength)\n );\n out[field.name] = parseField(text, field.dataType);\n offset += field.fieldLength;\n }\n\n return out;\n}\n\n/**\n * Should NaN be coerced to null?\n * @param text\n * @param dataType\n * @returns Field depends on a type of the data\n */\nfunction parseField(text: string, dataType: string): string | number | boolean | null {\n switch (dataType) {\n case 'B':\n return parseNumber(text);\n case 'C':\n return parseCharacter(text);\n case 'F':\n return parseNumber(text);\n case 'N':\n return parseNumber(text);\n case 'O':\n return parseNumber(text);\n case 'D':\n return parseDate(text);\n case 'L':\n return parseBoolean(text);\n default:\n throw new Error('Unsupported data type');\n }\n}\n\n/**\n * Parse YYYYMMDD to date in milliseconds\n * @param str YYYYMMDD\n * @returns new Date as a number\n */\nfunction parseDate(str: any): number {\n return Date.UTC(str.slice(0, 4), parseInt(str.slice(4, 6), 10) - 1, str.slice(6, 8));\n}\n\n/**\n * Read boolean value\n * any of Y, y, T, t coerce to true\n * any of N, n, F, f coerce to false\n * otherwise null\n * @param value\n * @returns boolean | null\n */\nfunction parseBoolean(value: string): boolean | null {\n return /^[nf]$/i.test(value) ? false : /^[yt]$/i.test(value) ? true : null;\n}\n\n/**\n * Return null instead of NaN\n * @param text\n * @returns number | null\n */\nfunction parseNumber(text: string): number | null {\n const number = parseFloat(text);\n return isNaN(number) ? null : number;\n}\n\n/**\n *\n * @param text\n * @returns string | null\n */\nfunction parseCharacter(text: string): string | null {\n return text.trim() || null;\n}\n\n/**\n * Create a standard Arrow-style `Field` from field descriptor.\n * TODO - use `fieldLength` and `decimal` to generate smaller types?\n * @param param0\n * @returns Field\n */\n// eslint-disable\nfunction makeField({name, dataType, fieldLength, decimal}: DBFField): Field {\n switch (dataType) {\n case 'B':\n return {name, type: 'float64', nullable: true, metadata: {}};\n case 'C':\n return {name, type: 'utf8', nullable: true, metadata: {}};\n case 'F':\n return {name, type: 'float64', nullable: true, metadata: {}};\n case 'N':\n return {name, type: 'float64', nullable: true, metadata: {}};\n case 'O':\n return {name, type: 'float64', nullable: true, metadata: {}};\n case 'D':\n return {name, type: 'timestamp-millisecond', nullable: true, metadata: {}};\n case 'L':\n return {name, type: 'bool', nullable: true, metadata: {}};\n default:\n throw new Error('Unsupported data type');\n }\n}\n"],"mappings":"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"}