@loaders.gl/shapefile 3.4.11 → 3.4.12

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.
@@ -739,7 +739,7 @@
739
739
  }
740
740
 
741
741
  // src/dbf-loader.ts
742
- var VERSION = true ? "3.4.11" : "latest";
742
+ var VERSION = true ? "3.4.12" : "latest";
743
743
  var DBFWorkerLoader = {
744
744
  name: "DBF",
745
745
  id: "dbf",
@@ -11,7 +11,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
11
11
  var _parseDbf = require("./lib/parsers/parse-dbf");
12
12
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
13
13
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
14
- var VERSION = typeof "3.4.11" !== 'undefined' ? "3.4.11" : 'latest';
14
+ var VERSION = typeof "3.4.12" !== 'undefined' ? "3.4.12" : 'latest';
15
15
  var DBFWorkerLoader = {
16
16
  name: 'DBF',
17
17
  id: 'dbf',
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports._typecheckShapefileLoader = exports.ShapefileLoader = void 0;
7
7
  var _shpLoader = require("./shp-loader");
8
8
  var _parseShapefile = require("./lib/parsers/parse-shapefile");
9
- var VERSION = typeof "3.4.11" !== 'undefined' ? "3.4.11" : 'latest';
9
+ var VERSION = typeof "3.4.12" !== 'undefined' ? "3.4.12" : 'latest';
10
10
  var ShapefileLoader = {
11
11
  name: 'Shapefile',
12
12
  id: 'shapefile',
@@ -11,7 +11,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
11
11
  var _parseShp = require("./lib/parsers/parse-shp");
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.11" !== 'undefined' ? "3.4.11" : 'latest';
14
+ var VERSION = typeof "3.4.12" !== 'undefined' ? "3.4.12" : 'latest';
15
15
  var SHP_MAGIC_NUMBER = [0x00, 0x00, 0x27, 0x0a];
16
16
  exports.SHP_MAGIC_NUMBER = SHP_MAGIC_NUMBER;
17
17
  var SHPWorkerLoader = {
@@ -1,5 +1,5 @@
1
1
  import { parseDBF, parseDBFInBatches } from './lib/parsers/parse-dbf';
2
- const VERSION = typeof "3.4.11" !== 'undefined' ? "3.4.11" : 'latest';
2
+ const VERSION = typeof "3.4.12" !== 'undefined' ? "3.4.12" : 'latest';
3
3
  export const DBFWorkerLoader = {
4
4
  name: 'DBF',
5
5
  id: 'dbf',
@@ -1,6 +1,6 @@
1
1
  import { SHP_MAGIC_NUMBER } from './shp-loader';
2
2
  import { parseShapefile, parseShapefileInBatches } from './lib/parsers/parse-shapefile';
3
- const VERSION = typeof "3.4.11" !== 'undefined' ? "3.4.11" : 'latest';
3
+ const VERSION = typeof "3.4.12" !== 'undefined' ? "3.4.12" : 'latest';
4
4
  export const ShapefileLoader = {
5
5
  name: 'Shapefile',
6
6
  id: 'shapefile',
@@ -1,5 +1,5 @@
1
1
  import { parseSHP, parseSHPInBatches } from './lib/parsers/parse-shp';
2
- const VERSION = typeof "3.4.11" !== 'undefined' ? "3.4.11" : 'latest';
2
+ const VERSION = typeof "3.4.12" !== 'undefined' ? "3.4.12" : 'latest';
3
3
  export const SHP_MAGIC_NUMBER = [0x00, 0x00, 0x27, 0x0a];
4
4
  export const SHPWorkerLoader = {
5
5
  name: 'SHP',
@@ -430,7 +430,7 @@
430
430
  }
431
431
 
432
432
  // src/shp-loader.ts
433
- var VERSION = true ? "3.4.11" : "latest";
433
+ var VERSION = true ? "3.4.12" : "latest";
434
434
  var SHP_MAGIC_NUMBER2 = [0, 0, 39, 10];
435
435
  var SHPWorkerLoader = {
436
436
  name: "SHP",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@loaders.gl/shapefile",
3
3
  "description": "Loader for the Shapefile Format",
4
- "version": "3.4.11",
4
+ "version": "3.4.12",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
7
7
  "access": "public"
@@ -22,7 +22,6 @@
22
22
  "module": "dist/esm/index.js",
23
23
  "sideEffects": false,
24
24
  "browser": {
25
- "./src/lib/filesystems/node-filesystem.js": false,
26
25
  "fs": false
27
26
  },
28
27
  "files": [
@@ -37,10 +36,10 @@
37
36
  "build-worker-dbf": "esbuild src/workers/dbf-worker.ts --bundle --outfile=dist/dbf-worker.js --define:__VERSION__=\\\"$npm_package_version\\\""
38
37
  },
39
38
  "dependencies": {
40
- "@loaders.gl/gis": "3.4.11",
41
- "@loaders.gl/loader-utils": "3.4.11",
42
- "@loaders.gl/schema": "3.4.11",
39
+ "@loaders.gl/gis": "3.4.12",
40
+ "@loaders.gl/loader-utils": "3.4.12",
41
+ "@loaders.gl/schema": "3.4.12",
43
42
  "@math.gl/proj4": "^3.5.1"
44
43
  },
45
- "gitHead": "2b8d490d2372e70dd89eef8f6b215a5205c16621"
44
+ "gitHead": "85254762ae3082f608a863291deef09f2b40c6cf"
46
45
  }
package/dist/bundle.js DELETED
@@ -1,5 +0,0 @@
1
- "use strict";
2
- // @ts-nocheck
3
- const moduleExports = require('./index');
4
- globalThis.loaders = globalThis.loaders || {};
5
- module.exports = Object.assign(globalThis.loaders, moduleExports);
@@ -1,32 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DBFLoader = exports.DBFWorkerLoader = void 0;
4
- const parse_dbf_1 = require("./lib/parsers/parse-dbf");
5
- // __VERSION__ is injected by babel-plugin-version-inline
6
- // @ts-ignore TS2304: Cannot find name '__VERSION__'.
7
- const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
8
- /**
9
- * DBFLoader - DBF files are used to contain non-geometry columns in Shapefiles
10
- */
11
- exports.DBFWorkerLoader = {
12
- name: 'DBF',
13
- id: 'dbf',
14
- module: 'shapefile',
15
- version: VERSION,
16
- worker: true,
17
- category: 'table',
18
- extensions: ['dbf'],
19
- mimeTypes: ['application/x-dbf'],
20
- options: {
21
- dbf: {
22
- encoding: 'latin1'
23
- }
24
- }
25
- };
26
- /** DBF file loader */
27
- exports.DBFLoader = {
28
- ...exports.DBFWorkerLoader,
29
- parse: async (arrayBuffer, options) => (0, parse_dbf_1.parseDBF)(arrayBuffer, options),
30
- parseSync: parse_dbf_1.parseDBF,
31
- parseInBatches: parse_dbf_1.parseDBFInBatches
32
- };
package/dist/index.js DELETED
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SHPWorkerLoader = exports.SHPLoader = exports.DBFWorkerLoader = exports.DBFLoader = exports.ShapefileLoader = void 0;
4
- var shapefile_loader_1 = require("./shapefile-loader");
5
- Object.defineProperty(exports, "ShapefileLoader", { enumerable: true, get: function () { return shapefile_loader_1.ShapefileLoader; } });
6
- var dbf_loader_1 = require("./dbf-loader");
7
- Object.defineProperty(exports, "DBFLoader", { enumerable: true, get: function () { return dbf_loader_1.DBFLoader; } });
8
- Object.defineProperty(exports, "DBFWorkerLoader", { enumerable: true, get: function () { return dbf_loader_1.DBFWorkerLoader; } });
9
- var shp_loader_1 = require("./shp-loader");
10
- Object.defineProperty(exports, "SHPLoader", { enumerable: true, get: function () { return shp_loader_1.SHPLoader; } });
11
- Object.defineProperty(exports, "SHPWorkerLoader", { enumerable: true, get: function () { return shp_loader_1.SHPWorkerLoader; } });
@@ -1,342 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.parseDBFInBatches = exports.parseDBF = void 0;
7
- const schema_1 = require("@loaders.gl/schema");
8
- const binary_chunk_reader_1 = __importDefault(require("../streaming/binary-chunk-reader"));
9
- const LITTLE_ENDIAN = true;
10
- const DBF_HEADER_SIZE = 32;
11
- var STATE;
12
- (function (STATE) {
13
- STATE[STATE["START"] = 0] = "START";
14
- STATE[STATE["FIELD_DESCRIPTORS"] = 1] = "FIELD_DESCRIPTORS";
15
- STATE[STATE["FIELD_PROPERTIES"] = 2] = "FIELD_PROPERTIES";
16
- STATE[STATE["END"] = 3] = "END";
17
- STATE[STATE["ERROR"] = 4] = "ERROR";
18
- })(STATE || (STATE = {}));
19
- class DBFParser {
20
- constructor(options) {
21
- this.binaryReader = new binary_chunk_reader_1.default();
22
- this.state = STATE.START;
23
- this.result = {
24
- data: []
25
- };
26
- this.textDecoder = new TextDecoder(options.encoding);
27
- }
28
- /**
29
- * @param arrayBuffer
30
- */
31
- write(arrayBuffer) {
32
- this.binaryReader.write(arrayBuffer);
33
- this.state = parseState(this.state, this.result, this.binaryReader, this.textDecoder);
34
- // this.result.progress.bytesUsed = this.binaryReader.bytesUsed();
35
- // important events:
36
- // - schema available
37
- // - first rows available
38
- // - all rows available
39
- }
40
- end() {
41
- this.binaryReader.end();
42
- this.state = parseState(this.state, this.result, this.binaryReader, this.textDecoder);
43
- // this.result.progress.bytesUsed = this.binaryReader.bytesUsed();
44
- if (this.state !== STATE.END) {
45
- this.state = STATE.ERROR;
46
- this.result.error = 'DBF incomplete file';
47
- }
48
- }
49
- }
50
- /**
51
- * @param arrayBuffer
52
- * @param options
53
- * @returns DBFTable or rows
54
- */
55
- function parseDBF(arrayBuffer, options = {}) {
56
- const { encoding = 'latin1' } = options.dbf || {};
57
- const dbfParser = new DBFParser({ encoding });
58
- dbfParser.write(arrayBuffer);
59
- dbfParser.end();
60
- const { data, schema } = dbfParser.result;
61
- const shape = options?.tables?.format || options?.dbf?.shape;
62
- switch (shape) {
63
- case 'object-row-table': {
64
- const table = {
65
- shape: 'object-row-table',
66
- schema,
67
- data
68
- };
69
- return table;
70
- }
71
- case 'table':
72
- return { schema, rows: data };
73
- case 'rows':
74
- default:
75
- return data;
76
- }
77
- }
78
- exports.parseDBF = parseDBF;
79
- /**
80
- * @param asyncIterator
81
- * @param options
82
- */
83
- async function* parseDBFInBatches(asyncIterator, options = {}) {
84
- const { encoding = 'latin1' } = options.dbf || {};
85
- const parser = new DBFParser({ encoding });
86
- let headerReturned = false;
87
- for await (const arrayBuffer of asyncIterator) {
88
- parser.write(arrayBuffer);
89
- if (!headerReturned && parser.result.dbfHeader) {
90
- headerReturned = true;
91
- yield parser.result.dbfHeader;
92
- }
93
- if (parser.result.data.length > 0) {
94
- yield parser.result.data;
95
- parser.result.data = [];
96
- }
97
- }
98
- parser.end();
99
- if (parser.result.data.length > 0) {
100
- yield parser.result.data;
101
- }
102
- }
103
- exports.parseDBFInBatches = parseDBFInBatches;
104
- /**
105
- * https://www.dbase.com/Knowledgebase/INT/db7_file_fmt.htm
106
- * @param state
107
- * @param result
108
- * @param binaryReader
109
- * @param textDecoder
110
- * @returns
111
- */
112
- /* eslint-disable complexity, max-depth */
113
- function parseState(state, result, binaryReader, textDecoder) {
114
- // eslint-disable-next-line no-constant-condition
115
- while (true) {
116
- try {
117
- switch (state) {
118
- case STATE.ERROR:
119
- case STATE.END:
120
- return state;
121
- case STATE.START:
122
- // Parse initial file header
123
- // DBF Header
124
- const dataView = binaryReader.getDataView(DBF_HEADER_SIZE);
125
- if (!dataView) {
126
- return state;
127
- }
128
- result.dbfHeader = parseDBFHeader(dataView);
129
- result.progress = {
130
- bytesUsed: 0,
131
- rowsTotal: result.dbfHeader.nRecords,
132
- rows: 0
133
- };
134
- state = STATE.FIELD_DESCRIPTORS;
135
- break;
136
- case STATE.FIELD_DESCRIPTORS:
137
- // Parse DBF field descriptors (schema)
138
- const fieldDescriptorView = binaryReader.getDataView(
139
- // @ts-ignore
140
- result.dbfHeader.headerLength - DBF_HEADER_SIZE);
141
- if (!fieldDescriptorView) {
142
- return state;
143
- }
144
- result.dbfFields = parseFieldDescriptors(fieldDescriptorView, textDecoder);
145
- result.schema = new schema_1.Schema(result.dbfFields.map((dbfField) => makeField(dbfField)));
146
- state = STATE.FIELD_PROPERTIES;
147
- // TODO(kyle) Not exactly sure why start offset needs to be headerLength + 1?
148
- // parsedbf uses ((fields.length + 1) << 5) + 2;
149
- binaryReader.skip(1);
150
- break;
151
- case STATE.FIELD_PROPERTIES:
152
- const { recordLength = 0, nRecords = 0 } = result?.dbfHeader || {};
153
- while (result.data.length < nRecords) {
154
- const recordView = binaryReader.getDataView(recordLength - 1);
155
- if (!recordView) {
156
- return state;
157
- }
158
- // Note: Avoid actually reading the last byte, which may not be present
159
- binaryReader.skip(1);
160
- // @ts-ignore
161
- const row = parseRow(recordView, result.dbfFields, textDecoder);
162
- result.data.push(row);
163
- // @ts-ignore
164
- result.progress.rows = result.data.length;
165
- }
166
- state = STATE.END;
167
- break;
168
- default:
169
- state = STATE.ERROR;
170
- result.error = `illegal parser state ${state}`;
171
- return state;
172
- }
173
- }
174
- catch (error) {
175
- state = STATE.ERROR;
176
- result.error = `DBF parsing failed: ${error.message}`;
177
- return state;
178
- }
179
- }
180
- }
181
- /**
182
- * @param headerView
183
- */
184
- function parseDBFHeader(headerView) {
185
- return {
186
- // Last updated date
187
- year: headerView.getUint8(1) + 1900,
188
- month: headerView.getUint8(2),
189
- day: headerView.getUint8(3),
190
- // Number of records in data file
191
- nRecords: headerView.getUint32(4, LITTLE_ENDIAN),
192
- // Length of header in bytes
193
- headerLength: headerView.getUint16(8, LITTLE_ENDIAN),
194
- // Length of each record
195
- recordLength: headerView.getUint16(10, LITTLE_ENDIAN),
196
- // Not sure if this is usually set
197
- languageDriver: headerView.getUint8(29)
198
- };
199
- }
200
- /**
201
- * @param view
202
- */
203
- function parseFieldDescriptors(view, textDecoder) {
204
- // NOTE: this might overestimate the number of fields if the "Database
205
- // Container" container exists and is included in the headerLength
206
- const nFields = (view.byteLength - 1) / 32;
207
- const fields = [];
208
- let offset = 0;
209
- for (let i = 0; i < nFields; i++) {
210
- const name = textDecoder
211
- .decode(new Uint8Array(view.buffer, view.byteOffset + offset, 11))
212
- // eslint-disable-next-line no-control-regex
213
- .replace(/\u0000/g, '');
214
- fields.push({
215
- name,
216
- dataType: String.fromCharCode(view.getUint8(offset + 11)),
217
- fieldLength: view.getUint8(offset + 16),
218
- decimal: view.getUint8(offset + 17)
219
- });
220
- offset += 32;
221
- }
222
- return fields;
223
- }
224
- /*
225
- * @param {BinaryChunkReader} binaryReader
226
- function parseRows(binaryReader, fields, nRecords, recordLength, textDecoder) {
227
- const rows = [];
228
- for (let i = 0; i < nRecords; i++) {
229
- const recordView = binaryReader.getDataView(recordLength - 1);
230
- binaryReader.skip(1);
231
- // @ts-ignore
232
- rows.push(parseRow(recordView, fields, textDecoder));
233
- }
234
- return rows;
235
- }
236
- */
237
- /**
238
- *
239
- * @param view
240
- * @param fields
241
- * @param textDecoder
242
- * @returns
243
- */
244
- function parseRow(view, fields, textDecoder) {
245
- const out = {};
246
- let offset = 0;
247
- for (const field of fields) {
248
- const text = textDecoder.decode(new Uint8Array(view.buffer, view.byteOffset + offset, field.fieldLength));
249
- out[field.name] = parseField(text, field.dataType);
250
- offset += field.fieldLength;
251
- }
252
- return out;
253
- }
254
- /**
255
- * Should NaN be coerced to null?
256
- * @param text
257
- * @param dataType
258
- * @returns Field depends on a type of the data
259
- */
260
- function parseField(text, dataType) {
261
- switch (dataType) {
262
- case 'B':
263
- return parseNumber(text);
264
- case 'C':
265
- return parseCharacter(text);
266
- case 'F':
267
- return parseNumber(text);
268
- case 'N':
269
- return parseNumber(text);
270
- case 'O':
271
- return parseNumber(text);
272
- case 'D':
273
- return parseDate(text);
274
- case 'L':
275
- return parseBoolean(text);
276
- default:
277
- throw new Error('Unsupported data type');
278
- }
279
- }
280
- /**
281
- * Parse YYYYMMDD to date in milliseconds
282
- * @param str YYYYMMDD
283
- * @returns new Date as a number
284
- */
285
- function parseDate(str) {
286
- return Date.UTC(str.slice(0, 4), parseInt(str.slice(4, 6), 10) - 1, str.slice(6, 8));
287
- }
288
- /**
289
- * Read boolean value
290
- * any of Y, y, T, t coerce to true
291
- * any of N, n, F, f coerce to false
292
- * otherwise null
293
- * @param value
294
- * @returns boolean | null
295
- */
296
- function parseBoolean(value) {
297
- return /^[nf]$/i.test(value) ? false : /^[yt]$/i.test(value) ? true : null;
298
- }
299
- /**
300
- * Return null instead of NaN
301
- * @param text
302
- * @returns number | null
303
- */
304
- function parseNumber(text) {
305
- const number = parseFloat(text);
306
- return isNaN(number) ? null : number;
307
- }
308
- /**
309
- *
310
- * @param text
311
- * @returns string | null
312
- */
313
- function parseCharacter(text) {
314
- return text.trim() || null;
315
- }
316
- /**
317
- * Create a standard Arrow-style `Field` from field descriptor.
318
- * TODO - use `fieldLength` and `decimal` to generate smaller types?
319
- * @param param0
320
- * @returns Field
321
- */
322
- // eslint-disable
323
- function makeField({ name, dataType, fieldLength, decimal }) {
324
- switch (dataType) {
325
- case 'B':
326
- return new schema_1.Field(name, new schema_1.Float64(), true);
327
- case 'C':
328
- return new schema_1.Field(name, new schema_1.Utf8(), true);
329
- case 'F':
330
- return new schema_1.Field(name, new schema_1.Float64(), true);
331
- case 'N':
332
- return new schema_1.Field(name, new schema_1.Float64(), true);
333
- case 'O':
334
- return new schema_1.Field(name, new schema_1.Float64(), true);
335
- case 'D':
336
- return new schema_1.Field(name, new schema_1.TimestampMillisecond(), true);
337
- case 'L':
338
- return new schema_1.Field(name, new schema_1.Bool(), true);
339
- default:
340
- throw new Error('Unsupported data type');
341
- }
342
- }