@loaders.gl/shapefile 3.1.0-alpha.5 → 3.1.0-beta.5

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 (85) hide show
  1. package/dist/bundle.d.ts +1 -0
  2. package/dist/bundle.d.ts.map +1 -0
  3. package/dist/bundle.js +7554 -0
  4. package/dist/dbf-loader.d.ts +1 -0
  5. package/dist/dbf-loader.d.ts.map +1 -0
  6. package/dist/dbf-loader.js +32 -0
  7. package/dist/dbf-worker.js +912 -2
  8. package/dist/es5/dbf-loader.js +1 -1
  9. package/dist/es5/dbf-loader.js.map +1 -1
  10. package/dist/es5/lib/parsers/parse-dbf.js +2 -4
  11. package/dist/es5/lib/parsers/parse-dbf.js.map +1 -1
  12. package/dist/es5/lib/parsers/parse-shp-geometry.js.map +1 -1
  13. package/dist/es5/shapefile-loader.js +1 -1
  14. package/dist/es5/shapefile-loader.js.map +1 -1
  15. package/dist/es5/shp-loader.js +1 -1
  16. package/dist/es5/shp-loader.js.map +1 -1
  17. package/dist/es5/workers/dbf-worker.js +7 -3
  18. package/dist/es5/workers/dbf-worker.js.map +1 -0
  19. package/dist/es5/workers/shp-worker.js +7 -3
  20. package/dist/es5/workers/shp-worker.js.map +1 -0
  21. package/dist/esm/dbf-loader.js +1 -1
  22. package/dist/esm/dbf-loader.js.map +1 -1
  23. package/dist/esm/lib/parsers/parse-dbf.js +2 -4
  24. package/dist/esm/lib/parsers/parse-dbf.js.map +1 -1
  25. package/dist/esm/lib/parsers/parse-shp-geometry.js.map +1 -1
  26. package/dist/esm/shapefile-loader.js +1 -1
  27. package/dist/esm/shapefile-loader.js.map +1 -1
  28. package/dist/esm/shp-loader.js +1 -1
  29. package/dist/esm/shp-loader.js.map +1 -1
  30. package/dist/esm/workers/dbf-worker.js +3 -3
  31. package/dist/esm/workers/dbf-worker.js.map +1 -0
  32. package/dist/esm/workers/shp-worker.js +3 -3
  33. package/dist/esm/workers/shp-worker.js.map +1 -0
  34. package/dist/index.d.ts +1 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +11 -0
  37. package/dist/lib/parsers/parse-dbf.d.ts +1 -0
  38. package/dist/lib/parsers/parse-dbf.d.ts.map +1 -0
  39. package/dist/lib/parsers/parse-dbf.js +335 -0
  40. package/dist/lib/parsers/parse-shapefile.d.ts +1 -0
  41. package/dist/lib/parsers/parse-shapefile.d.ts.map +1 -0
  42. package/dist/lib/parsers/parse-shapefile.js +245 -0
  43. package/dist/lib/parsers/parse-shp-geometry.d.ts +2 -1
  44. package/dist/lib/parsers/parse-shp-geometry.d.ts.map +1 -0
  45. package/dist/lib/parsers/parse-shp-geometry.js +287 -0
  46. package/dist/lib/parsers/parse-shp-header.d.ts +1 -0
  47. package/dist/lib/parsers/parse-shp-header.d.ts.map +1 -0
  48. package/dist/lib/parsers/parse-shp-header.js +43 -0
  49. package/dist/lib/parsers/parse-shp.d.ts +1 -0
  50. package/dist/lib/parsers/parse-shp.d.ts.map +1 -0
  51. package/dist/lib/parsers/parse-shp.js +170 -0
  52. package/dist/lib/parsers/parse-shx.d.ts +1 -0
  53. package/dist/lib/parsers/parse-shx.d.ts.map +1 -0
  54. package/dist/lib/parsers/parse-shx.js +28 -0
  55. package/dist/lib/streaming/binary-chunk-reader.d.ts +1 -0
  56. package/dist/lib/streaming/binary-chunk-reader.d.ts.map +1 -0
  57. package/dist/lib/streaming/binary-chunk-reader.js +161 -0
  58. package/dist/lib/streaming/binary-reader.d.ts +1 -0
  59. package/dist/lib/streaming/binary-reader.d.ts.map +1 -0
  60. package/dist/lib/streaming/binary-reader.js +52 -0
  61. package/dist/lib/streaming/zip-batch-iterators.d.ts +1 -0
  62. package/dist/lib/streaming/zip-batch-iterators.d.ts.map +1 -0
  63. package/dist/lib/streaming/zip-batch-iterators.js +61 -0
  64. package/dist/shapefile-loader.d.ts +1 -0
  65. package/dist/shapefile-loader.d.ts.map +1 -0
  66. package/dist/shapefile-loader.js +31 -0
  67. package/dist/shp-loader.d.ts +1 -0
  68. package/dist/shp-loader.d.ts.map +1 -0
  69. package/dist/shp-loader.js +35 -0
  70. package/dist/shp-worker.js +606 -2
  71. package/dist/workers/dbf-worker.d.ts +1 -0
  72. package/dist/workers/dbf-worker.d.ts.map +1 -0
  73. package/dist/workers/dbf-worker.js +5 -0
  74. package/dist/workers/shp-worker.d.ts +1 -0
  75. package/dist/workers/shp-worker.d.ts.map +1 -0
  76. package/dist/workers/shp-worker.js +5 -0
  77. package/package.json +9 -10
  78. package/src/lib/parsers/parse-dbf.ts +5 -3
  79. package/src/lib/parsers/parse-shp-geometry.ts +1 -1
  80. package/src/workers/{dbf-worker.js → dbf-worker.ts} +0 -0
  81. package/src/workers/{shp-worker.js → shp-worker.ts} +0 -0
  82. package/dist/dbf-worker.js.map +0 -1
  83. package/dist/dist.min.js +0 -2
  84. package/dist/dist.min.js.map +0 -1
  85. package/dist/shp-worker.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/shapefile-loader.ts"],"names":["SHP_MAGIC_NUMBER","parseShapefile","parseShapefileInBatches","VERSION","ShapefileLoader","name","id","module","version","category","extensions","mimeTypes","tests","Uint8Array","buffer","options","shapefile","shp","_maxDimensions","parse","parseInBatches","_typecheckShapefileLoader"],"mappings":"AACA,SAAQA,gBAAR,QAA+B,cAA/B;AACA,SAAQC,cAAR,EAAwBC,uBAAxB,QAAsD,+BAAtD;AAIA,MAAMC,OAAO,GAAG,2BAAuB,WAAvB,qBAAmD,QAAnE;AAMA,OAAO,MAAMC,eAAe,GAAG;AAC7BC,EAAAA,IAAI,EAAE,WADuB;AAE7BC,EAAAA,EAAE,EAAE,WAFyB;AAG7BC,EAAAA,MAAM,EAAE,WAHqB;AAI7BC,EAAAA,OAAO,EAAEL,OAJoB;AAK7BM,EAAAA,QAAQ,EAAE,UALmB;AAM7BC,EAAAA,UAAU,EAAE,CAAC,KAAD,CANiB;AAO7BC,EAAAA,SAAS,EAAE,CAAC,0BAAD,CAPkB;AAQ7BC,EAAAA,KAAK,EAAE,CAAC,IAAIC,UAAJ,CAAeb,gBAAf,EAAiCc,MAAlC,CARsB;AAS7BC,EAAAA,OAAO,EAAE;AACPC,IAAAA,SAAS,EAAE,EADJ;AAEPC,IAAAA,GAAG,EAAE;AACHC,MAAAA,cAAc,EAAE;AADb;AAFE,GAToB;AAe7BC,EAAAA,KAAK,EAAElB,cAfsB;AAgB7BmB,EAAAA,cAAc,EAAElB;AAhBa,CAAxB;AAmBP,OAAO,MAAMmB,yBAA2C,GAAGjB,eAApD","sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {SHP_MAGIC_NUMBER} from './shp-loader';\nimport {parseShapefile, parseShapefileInBatches} from './lib/parsers/parse-shapefile';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/**\n * Shapefile loader\n * @note Shapefile is multifile format and requires providing additional files\n */\nexport const ShapefileLoader = {\n name: 'Shapefile',\n id: 'shapefile',\n module: 'shapefile',\n version: VERSION,\n category: 'geometry',\n extensions: ['shp'],\n mimeTypes: ['application/octet-stream'],\n tests: [new Uint8Array(SHP_MAGIC_NUMBER).buffer],\n options: {\n shapefile: {},\n shp: {\n _maxDimensions: 4\n }\n },\n parse: parseShapefile,\n parseInBatches: parseShapefileInBatches\n};\n\nexport const _typecheckShapefileLoader: LoaderWithParser = ShapefileLoader;\n"],"file":"shapefile-loader.js"}
1
+ {"version":3,"sources":["../../src/shapefile-loader.ts"],"names":["SHP_MAGIC_NUMBER","parseShapefile","parseShapefileInBatches","VERSION","ShapefileLoader","name","id","module","version","category","extensions","mimeTypes","tests","Uint8Array","buffer","options","shapefile","shp","_maxDimensions","parse","parseInBatches","_typecheckShapefileLoader"],"mappings":"AACA,SAAQA,gBAAR,QAA+B,cAA/B;AACA,SAAQC,cAAR,EAAwBC,uBAAxB,QAAsD,+BAAtD;AAIA,MAAMC,OAAO,GAAG,0BAAuB,WAAvB,oBAAmD,QAAnE;AAMA,OAAO,MAAMC,eAAe,GAAG;AAC7BC,EAAAA,IAAI,EAAE,WADuB;AAE7BC,EAAAA,EAAE,EAAE,WAFyB;AAG7BC,EAAAA,MAAM,EAAE,WAHqB;AAI7BC,EAAAA,OAAO,EAAEL,OAJoB;AAK7BM,EAAAA,QAAQ,EAAE,UALmB;AAM7BC,EAAAA,UAAU,EAAE,CAAC,KAAD,CANiB;AAO7BC,EAAAA,SAAS,EAAE,CAAC,0BAAD,CAPkB;AAQ7BC,EAAAA,KAAK,EAAE,CAAC,IAAIC,UAAJ,CAAeb,gBAAf,EAAiCc,MAAlC,CARsB;AAS7BC,EAAAA,OAAO,EAAE;AACPC,IAAAA,SAAS,EAAE,EADJ;AAEPC,IAAAA,GAAG,EAAE;AACHC,MAAAA,cAAc,EAAE;AADb;AAFE,GAToB;AAe7BC,EAAAA,KAAK,EAAElB,cAfsB;AAgB7BmB,EAAAA,cAAc,EAAElB;AAhBa,CAAxB;AAmBP,OAAO,MAAMmB,yBAA2C,GAAGjB,eAApD","sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {SHP_MAGIC_NUMBER} from './shp-loader';\nimport {parseShapefile, parseShapefileInBatches} from './lib/parsers/parse-shapefile';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/**\n * Shapefile loader\n * @note Shapefile is multifile format and requires providing additional files\n */\nexport const ShapefileLoader = {\n name: 'Shapefile',\n id: 'shapefile',\n module: 'shapefile',\n version: VERSION,\n category: 'geometry',\n extensions: ['shp'],\n mimeTypes: ['application/octet-stream'],\n tests: [new Uint8Array(SHP_MAGIC_NUMBER).buffer],\n options: {\n shapefile: {},\n shp: {\n _maxDimensions: 4\n }\n },\n parse: parseShapefile,\n parseInBatches: parseShapefileInBatches\n};\n\nexport const _typecheckShapefileLoader: LoaderWithParser = ShapefileLoader;\n"],"file":"shapefile-loader.js"}
@@ -1,5 +1,5 @@
1
1
  import { parseSHP, parseSHPInBatches } from './lib/parsers/parse-shp';
2
- const VERSION = typeof "3.1.0-alpha.5" !== 'undefined' ? "3.1.0-alpha.5" : 'latest';
2
+ const VERSION = typeof "3.1.0-beta.5" !== 'undefined' ? "3.1.0-beta.5" : 'latest';
3
3
  export const SHP_MAGIC_NUMBER = [0x00, 0x00, 0x27, 0x0a];
4
4
  export const SHPWorkerLoader = {
5
5
  name: 'SHP',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/shp-loader.ts"],"names":["parseSHP","parseSHPInBatches","VERSION","SHP_MAGIC_NUMBER","SHPWorkerLoader","name","id","module","version","worker","category","extensions","mimeTypes","tests","Uint8Array","buffer","options","shp","_maxDimensions","SHPLoader","parse","arrayBuffer","parseSync","parseInBatches"],"mappings":"AACA,SAAQA,QAAR,EAAkBC,iBAAlB,QAA0C,yBAA1C;AAIA,MAAMC,OAAO,GAAG,2BAAuB,WAAvB,qBAAmD,QAAnE;AAEA,OAAO,MAAMC,gBAAgB,GAAG,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,CAAzB;AAKP,OAAO,MAAMC,eAAuB,GAAG;AACrCC,EAAAA,IAAI,EAAE,KAD+B;AAErCC,EAAAA,EAAE,EAAE,KAFiC;AAGrCC,EAAAA,MAAM,EAAE,WAH6B;AAIrCC,EAAAA,OAAO,EAAEN,OAJ4B;AAKrCO,EAAAA,MAAM,EAAE,IAL6B;AAMrCC,EAAAA,QAAQ,EAAE,UAN2B;AAOrCC,EAAAA,UAAU,EAAE,CAAC,KAAD,CAPyB;AAQrCC,EAAAA,SAAS,EAAE,CAAC,0BAAD,CAR0B;AAUrCC,EAAAA,KAAK,EAAE,CAAC,IAAIC,UAAJ,CAAeX,gBAAf,EAAiCY,MAAlC,CAV8B;AAWrCC,EAAAA,OAAO,EAAE;AACPC,IAAAA,GAAG,EAAE;AACHC,MAAAA,cAAc,EAAE;AADb;AADE;AAX4B,CAAhC;AAmBP,OAAO,MAAMC,SAA2B,GAAG,EACzC,GAAGf,eADsC;AAEzCgB,EAAAA,KAAK,EAAE,OAAOC,WAAP,EAAoBL,OAApB,KAAiChB,QAAQ,CAACqB,WAAD,EAAcL,OAAd,CAFP;AAGzCM,EAAAA,SAAS,EAAEtB,QAH8B;AAIzCuB,EAAAA,cAAc,EAAEtB;AAJyB,CAApC","sourcesContent":["import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {parseSHP, parseSHPInBatches} from './lib/parsers/parse-shp';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport const SHP_MAGIC_NUMBER = [0x00, 0x00, 0x27, 0x0a];\n\n/**\n * SHP file loader\n */\nexport const SHPWorkerLoader: Loader = {\n name: 'SHP',\n id: 'shp',\n module: 'shapefile',\n version: VERSION,\n worker: true,\n category: 'geometry',\n extensions: ['shp'],\n mimeTypes: ['application/octet-stream'],\n // ISSUE: This also identifies SHX files, which are identical to SHP for the first 100 bytes...\n tests: [new Uint8Array(SHP_MAGIC_NUMBER).buffer],\n options: {\n shp: {\n _maxDimensions: 4\n }\n }\n};\n\n/** SHP file loader */\nexport const SHPLoader: LoaderWithParser = {\n ...SHPWorkerLoader,\n parse: async (arrayBuffer, options?) => parseSHP(arrayBuffer, options),\n parseSync: parseSHP,\n parseInBatches: parseSHPInBatches\n};\n"],"file":"shp-loader.js"}
1
+ {"version":3,"sources":["../../src/shp-loader.ts"],"names":["parseSHP","parseSHPInBatches","VERSION","SHP_MAGIC_NUMBER","SHPWorkerLoader","name","id","module","version","worker","category","extensions","mimeTypes","tests","Uint8Array","buffer","options","shp","_maxDimensions","SHPLoader","parse","arrayBuffer","parseSync","parseInBatches"],"mappings":"AACA,SAAQA,QAAR,EAAkBC,iBAAlB,QAA0C,yBAA1C;AAIA,MAAMC,OAAO,GAAG,0BAAuB,WAAvB,oBAAmD,QAAnE;AAEA,OAAO,MAAMC,gBAAgB,GAAG,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,CAAzB;AAKP,OAAO,MAAMC,eAAuB,GAAG;AACrCC,EAAAA,IAAI,EAAE,KAD+B;AAErCC,EAAAA,EAAE,EAAE,KAFiC;AAGrCC,EAAAA,MAAM,EAAE,WAH6B;AAIrCC,EAAAA,OAAO,EAAEN,OAJ4B;AAKrCO,EAAAA,MAAM,EAAE,IAL6B;AAMrCC,EAAAA,QAAQ,EAAE,UAN2B;AAOrCC,EAAAA,UAAU,EAAE,CAAC,KAAD,CAPyB;AAQrCC,EAAAA,SAAS,EAAE,CAAC,0BAAD,CAR0B;AAUrCC,EAAAA,KAAK,EAAE,CAAC,IAAIC,UAAJ,CAAeX,gBAAf,EAAiCY,MAAlC,CAV8B;AAWrCC,EAAAA,OAAO,EAAE;AACPC,IAAAA,GAAG,EAAE;AACHC,MAAAA,cAAc,EAAE;AADb;AADE;AAX4B,CAAhC;AAmBP,OAAO,MAAMC,SAA2B,GAAG,EACzC,GAAGf,eADsC;AAEzCgB,EAAAA,KAAK,EAAE,OAAOC,WAAP,EAAoBL,OAApB,KAAiChB,QAAQ,CAACqB,WAAD,EAAcL,OAAd,CAFP;AAGzCM,EAAAA,SAAS,EAAEtB,QAH8B;AAIzCuB,EAAAA,cAAc,EAAEtB;AAJyB,CAApC","sourcesContent":["import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {parseSHP, parseSHPInBatches} from './lib/parsers/parse-shp';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport const SHP_MAGIC_NUMBER = [0x00, 0x00, 0x27, 0x0a];\n\n/**\n * SHP file loader\n */\nexport const SHPWorkerLoader: Loader = {\n name: 'SHP',\n id: 'shp',\n module: 'shapefile',\n version: VERSION,\n worker: true,\n category: 'geometry',\n extensions: ['shp'],\n mimeTypes: ['application/octet-stream'],\n // ISSUE: This also identifies SHX files, which are identical to SHP for the first 100 bytes...\n tests: [new Uint8Array(SHP_MAGIC_NUMBER).buffer],\n options: {\n shp: {\n _maxDimensions: 4\n }\n }\n};\n\n/** SHP file loader */\nexport const SHPLoader: LoaderWithParser = {\n ...SHPWorkerLoader,\n parse: async (arrayBuffer, options?) => parseSHP(arrayBuffer, options),\n parseSync: parseSHP,\n parseInBatches: parseSHPInBatches\n};\n"],"file":"shp-loader.js"}
@@ -1,4 +1,4 @@
1
- import {DBFLoader} from '../dbf-loader';
2
- import {createLoaderWorker} from '@loaders.gl/loader-utils';
3
-
1
+ import { DBFLoader } from '../dbf-loader';
2
+ import { createLoaderWorker } from '@loaders.gl/loader-utils';
4
3
  createLoaderWorker(DBFLoader);
4
+ //# sourceMappingURL=dbf-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/workers/dbf-worker.ts"],"names":["DBFLoader","createLoaderWorker"],"mappings":"AAAA,SAAQA,SAAR,QAAwB,eAAxB;AACA,SAAQC,kBAAR,QAAiC,0BAAjC;AAEAA,kBAAkB,CAACD,SAAD,CAAlB","sourcesContent":["import {DBFLoader} from '../dbf-loader';\nimport {createLoaderWorker} from '@loaders.gl/loader-utils';\n\ncreateLoaderWorker(DBFLoader);\n"],"file":"dbf-worker.js"}
@@ -1,4 +1,4 @@
1
- import {SHPLoader} from '../shp-loader';
2
- import {createLoaderWorker} from '@loaders.gl/loader-utils';
3
-
1
+ import { SHPLoader } from '../shp-loader';
2
+ import { createLoaderWorker } from '@loaders.gl/loader-utils';
4
3
  createLoaderWorker(SHPLoader);
4
+ //# sourceMappingURL=shp-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/workers/shp-worker.ts"],"names":["SHPLoader","createLoaderWorker"],"mappings":"AAAA,SAAQA,SAAR,QAAwB,eAAxB;AACA,SAAQC,kBAAR,QAAiC,0BAAjC;AAEAA,kBAAkB,CAACD,SAAD,CAAlB","sourcesContent":["import {SHPLoader} from '../shp-loader';\nimport {createLoaderWorker} from '@loaders.gl/loader-utils';\n\ncreateLoaderWorker(SHPLoader);\n"],"file":"shp-worker.js"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { ShapefileLoader } from './shapefile-loader';
2
2
  export { DBFLoader, DBFWorkerLoader } from './dbf-loader';
3
3
  export { SHPLoader, SHPWorkerLoader } from './shp-loader';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAC,SAAS,EAAE,eAAe,EAAC,MAAM,cAAc,CAAC;AACxD,OAAO,EAAC,SAAS,EAAE,eAAe,EAAC,MAAM,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
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; } });
@@ -25,3 +25,4 @@ export declare function parseDBF(arrayBuffer: ArrayBuffer, options?: any): DBFRo
25
25
  */
26
26
  export declare function parseDBFInBatches(asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>, options?: any): AsyncIterable<DBFHeader | DBFRowsOutput | DBFTableOutput>;
27
27
  export {};
28
+ //# sourceMappingURL=parse-dbf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-dbf.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-dbf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAmD,MAAM,oBAAoB,CAAC;AAG5F,aAAK,aAAa,GAAG,MAAM,EAAE,CAAC;AAE9B,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,aAAK,SAAS,GAAG;IAEf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IAEZ,QAAQ,EAAE,MAAM,CAAC;IAEjB,YAAY,EAAE,MAAM,CAAC;IAErB,YAAY,EAAE,MAAM,CAAC;IAErB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAsEF;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,WAAW,EAAE,WAAW,EACxB,OAAO,GAAE,GAAQ,GAChB,aAAa,GAAG,cAAc,CAkBhC;AACD;;;GAGG;AACH,wBAAuB,iBAAiB,CACtC,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,EACjE,OAAO,GAAE,GAAQ,GAChB,aAAa,CAAC,SAAS,GAAG,aAAa,GAAG,cAAc,CAAC,CAsB3D"}
@@ -0,0 +1,335 @@
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 loaderOptions = options.dbf || {};
57
+ const { encoding } = loaderOptions;
58
+ const dbfParser = new DBFParser({ encoding });
59
+ dbfParser.write(arrayBuffer);
60
+ dbfParser.end();
61
+ const { data, schema } = dbfParser.result;
62
+ switch (options.tables && options.tables.format) {
63
+ case 'table':
64
+ // TODO - parse columns
65
+ return { schema, rows: data };
66
+ case 'rows':
67
+ default:
68
+ return data;
69
+ }
70
+ }
71
+ exports.parseDBF = parseDBF;
72
+ /**
73
+ * @param asyncIterator
74
+ * @param options
75
+ */
76
+ async function* parseDBFInBatches(asyncIterator, options = {}) {
77
+ const loaderOptions = options.dbf || {};
78
+ const { encoding } = loaderOptions;
79
+ const parser = new DBFParser({ encoding });
80
+ let headerReturned = false;
81
+ for await (const arrayBuffer of asyncIterator) {
82
+ parser.write(arrayBuffer);
83
+ if (!headerReturned && parser.result.dbfHeader) {
84
+ headerReturned = true;
85
+ yield parser.result.dbfHeader;
86
+ }
87
+ if (parser.result.data.length > 0) {
88
+ yield parser.result.data;
89
+ parser.result.data = [];
90
+ }
91
+ }
92
+ parser.end();
93
+ if (parser.result.data.length > 0) {
94
+ yield parser.result.data;
95
+ }
96
+ }
97
+ exports.parseDBFInBatches = parseDBFInBatches;
98
+ /**
99
+ * https://www.dbase.com/Knowledgebase/INT/db7_file_fmt.htm
100
+ * @param state
101
+ * @param result
102
+ * @param binaryReader
103
+ * @param textDecoder
104
+ * @returns
105
+ */
106
+ /* eslint-disable complexity, max-depth */
107
+ function parseState(state, result, binaryReader, textDecoder) {
108
+ // eslint-disable-next-line no-constant-condition
109
+ while (true) {
110
+ try {
111
+ switch (state) {
112
+ case STATE.ERROR:
113
+ case STATE.END:
114
+ return state;
115
+ case STATE.START:
116
+ // Parse initial file header
117
+ const dataView = binaryReader.getDataView(DBF_HEADER_SIZE, 'DBF header');
118
+ if (!dataView) {
119
+ return state;
120
+ }
121
+ result.dbfHeader = parseDBFHeader(dataView);
122
+ result.progress = {
123
+ bytesUsed: 0,
124
+ rowsTotal: result.dbfHeader.nRecords,
125
+ rows: 0
126
+ };
127
+ state = STATE.FIELD_DESCRIPTORS;
128
+ break;
129
+ case STATE.FIELD_DESCRIPTORS:
130
+ // Parse DBF field descriptors (schema)
131
+ const fieldDescriptorView = binaryReader.getDataView(
132
+ // @ts-ignore
133
+ result.dbfHeader.headerLength - DBF_HEADER_SIZE, 'DBF field descriptors');
134
+ if (!fieldDescriptorView) {
135
+ return state;
136
+ }
137
+ result.dbfFields = parseFieldDescriptors(fieldDescriptorView, textDecoder);
138
+ result.schema = new schema_1.Schema(result.dbfFields.map((dbfField) => makeField(dbfField)));
139
+ state = STATE.FIELD_PROPERTIES;
140
+ // TODO(kyle) Not exactly sure why start offset needs to be headerLength + 1?
141
+ // parsedbf uses ((fields.length + 1) << 5) + 2;
142
+ binaryReader.skip(1);
143
+ break;
144
+ case STATE.FIELD_PROPERTIES:
145
+ const { recordLength = 0, nRecords = 0 } = result?.dbfHeader || {};
146
+ while (result.data.length < nRecords) {
147
+ const recordView = binaryReader.getDataView(recordLength - 1);
148
+ if (!recordView) {
149
+ return state;
150
+ }
151
+ // Note: Avoid actually reading the last byte, which may not be present
152
+ binaryReader.skip(1);
153
+ // @ts-ignore
154
+ const row = parseRow(recordView, result.dbfFields, textDecoder);
155
+ result.data.push(row);
156
+ // @ts-ignore
157
+ result.progress.rows = result.data.length;
158
+ }
159
+ state = STATE.END;
160
+ break;
161
+ default:
162
+ state = STATE.ERROR;
163
+ result.error = `illegal parser state ${state}`;
164
+ return state;
165
+ }
166
+ }
167
+ catch (error) {
168
+ state = STATE.ERROR;
169
+ result.error = `DBF parsing failed: ${error.message}`;
170
+ return state;
171
+ }
172
+ }
173
+ }
174
+ /**
175
+ * @param headerView
176
+ */
177
+ function parseDBFHeader(headerView) {
178
+ return {
179
+ // Last updated date
180
+ year: headerView.getUint8(1) + 1900,
181
+ month: headerView.getUint8(2),
182
+ day: headerView.getUint8(3),
183
+ // Number of records in data file
184
+ nRecords: headerView.getUint32(4, LITTLE_ENDIAN),
185
+ // Length of header in bytes
186
+ headerLength: headerView.getUint16(8, LITTLE_ENDIAN),
187
+ // Length of each record
188
+ recordLength: headerView.getUint16(10, LITTLE_ENDIAN),
189
+ // Not sure if this is usually set
190
+ languageDriver: headerView.getUint8(29)
191
+ };
192
+ }
193
+ /**
194
+ * @param view
195
+ */
196
+ function parseFieldDescriptors(view, textDecoder) {
197
+ // NOTE: this might overestimate the number of fields if the "Database
198
+ // Container" container exists and is included in the headerLength
199
+ const nFields = (view.byteLength - 1) / 32;
200
+ const fields = [];
201
+ let offset = 0;
202
+ for (let i = 0; i < nFields; i++) {
203
+ const name = textDecoder
204
+ .decode(new Uint8Array(view.buffer, view.byteOffset + offset, 11))
205
+ // eslint-disable-next-line no-control-regex
206
+ .replace(/\u0000/g, '');
207
+ fields.push({
208
+ name,
209
+ dataType: String.fromCharCode(view.getUint8(offset + 11)),
210
+ fieldLength: view.getUint8(offset + 16),
211
+ decimal: view.getUint8(offset + 17)
212
+ });
213
+ offset += 32;
214
+ }
215
+ return fields;
216
+ }
217
+ /*
218
+ * @param {BinaryChunkReader} binaryReader
219
+ function parseRows(binaryReader, fields, nRecords, recordLength, textDecoder) {
220
+ const rows = [];
221
+ for (let i = 0; i < nRecords; i++) {
222
+ const recordView = binaryReader.getDataView(recordLength - 1);
223
+ binaryReader.skip(1);
224
+ // @ts-ignore
225
+ rows.push(parseRow(recordView, fields, textDecoder));
226
+ }
227
+ return rows;
228
+ }
229
+ */
230
+ /**
231
+ *
232
+ * @param view
233
+ * @param fields
234
+ * @param textDecoder
235
+ * @returns
236
+ */
237
+ function parseRow(view, fields, textDecoder) {
238
+ const out = {};
239
+ let offset = 0;
240
+ for (const field of fields) {
241
+ const text = textDecoder.decode(new Uint8Array(view.buffer, view.byteOffset + offset, field.fieldLength));
242
+ out[field.name] = parseField(text, field.dataType);
243
+ offset += field.fieldLength;
244
+ }
245
+ return out;
246
+ }
247
+ /**
248
+ * Should NaN be coerced to null?
249
+ * @param text
250
+ * @param dataType
251
+ * @returns Field depends on a type of the data
252
+ */
253
+ function parseField(text, dataType) {
254
+ switch (dataType) {
255
+ case 'B':
256
+ return parseNumber(text);
257
+ case 'C':
258
+ return parseCharacter(text);
259
+ case 'F':
260
+ return parseNumber(text);
261
+ case 'N':
262
+ return parseNumber(text);
263
+ case 'O':
264
+ return parseNumber(text);
265
+ case 'D':
266
+ return parseDate(text);
267
+ case 'L':
268
+ return parseBoolean(text);
269
+ default:
270
+ throw new Error('Unsupported data type');
271
+ }
272
+ }
273
+ /**
274
+ * Parse YYYYMMDD to date in milliseconds
275
+ * @param str YYYYMMDD
276
+ * @returns new Date as a number
277
+ */
278
+ function parseDate(str) {
279
+ return Date.UTC(str.slice(0, 4), parseInt(str.slice(4, 6), 10) - 1, str.slice(6, 8));
280
+ }
281
+ /**
282
+ * Read boolean value
283
+ * any of Y, y, T, t coerce to true
284
+ * any of N, n, F, f coerce to false
285
+ * otherwise null
286
+ * @param value
287
+ * @returns boolean | null
288
+ */
289
+ function parseBoolean(value) {
290
+ return /^[nf]$/i.test(value) ? false : /^[yt]$/i.test(value) ? true : null;
291
+ }
292
+ /**
293
+ * Return null instead of NaN
294
+ * @param text
295
+ * @returns number | null
296
+ */
297
+ function parseNumber(text) {
298
+ const number = parseFloat(text);
299
+ return isNaN(number) ? null : number;
300
+ }
301
+ /**
302
+ *
303
+ * @param text
304
+ * @returns string | null
305
+ */
306
+ function parseCharacter(text) {
307
+ return text.trim() || null;
308
+ }
309
+ /**
310
+ * Create a standard Arrow-style `Field` from field descriptor.
311
+ * TODO - use `fieldLength` and `decimal` to generate smaller types?
312
+ * @param param0
313
+ * @returns Field
314
+ */
315
+ // eslint-disable
316
+ function makeField({ name, dataType, fieldLength, decimal }) {
317
+ switch (dataType) {
318
+ case 'B':
319
+ return new schema_1.Field(name, new schema_1.Float64(), true);
320
+ case 'C':
321
+ return new schema_1.Field(name, new schema_1.Utf8(), true);
322
+ case 'F':
323
+ return new schema_1.Field(name, new schema_1.Float64(), true);
324
+ case 'N':
325
+ return new schema_1.Field(name, new schema_1.Float64(), true);
326
+ case 'O':
327
+ return new schema_1.Field(name, new schema_1.Float64(), true);
328
+ case 'D':
329
+ return new schema_1.Field(name, new schema_1.TimestampMillisecond(), true);
330
+ case 'L':
331
+ return new schema_1.Field(name, new schema_1.Bool(), true);
332
+ default:
333
+ throw new Error('Unsupported data type');
334
+ }
335
+ }
@@ -51,3 +51,4 @@ export declare function loadShapefileSidecarFiles(options?: object, context?: Lo
51
51
  */
52
52
  export declare function replaceExtension(url: string, newExtension: string): string;
53
53
  export {};
54
+ //# sourceMappingURL=parse-shapefile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-shapefile.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-shapefile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAU5D,UAAU,eAAe;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AACD;;;;;;GAMG;AAEH,wBAAuB,uBAAuB,CAC5C,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,EACjE,OAAO,CAAC,EAAE,GAAG,EACb,OAAO,CAAC,EAAE,aAAa,GACtB,aAAa,CAAC,eAAe,CAAC,CAmEhC;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAC,EAC9B,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,eAAe,CAAC,CAgC1B;AAoDD;;;;;GAKG;AAEH,wBAAsB,yBAAyB,CAC7C,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC;IACT,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC,CAkCD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAQ1E"}