@inweb/viewer-three 27.1.1 → 27.1.2

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 (44) hide show
  1. package/dist/extensions/components/AxesHelperComponent.js +12 -11
  2. package/dist/extensions/components/AxesHelperComponent.js.map +1 -1
  3. package/dist/extensions/components/AxesHelperComponent.min.js +1 -1
  4. package/dist/extensions/components/AxesHelperComponent.module.js +12 -11
  5. package/dist/extensions/components/AxesHelperComponent.module.js.map +1 -1
  6. package/dist/extensions/components/GridHelperComponent.js +4 -6
  7. package/dist/extensions/components/GridHelperComponent.js.map +1 -1
  8. package/dist/extensions/components/GridHelperComponent.min.js +1 -1
  9. package/dist/extensions/components/GridHelperComponent.module.js +4 -6
  10. package/dist/extensions/components/GridHelperComponent.module.js.map +1 -1
  11. package/dist/extensions/components/LightHelperComponent.js +5 -5
  12. package/dist/extensions/components/LightHelperComponent.js.map +1 -1
  13. package/dist/extensions/components/LightHelperComponent.min.js +1 -1
  14. package/dist/extensions/components/LightHelperComponent.module.js +6 -6
  15. package/dist/extensions/components/LightHelperComponent.module.js.map +1 -1
  16. package/dist/viewer-three.js +1344 -78
  17. package/dist/viewer-three.js.map +1 -1
  18. package/dist/viewer-three.min.js +4 -4
  19. package/dist/viewer-three.module.js +98 -79
  20. package/dist/viewer-three.module.js.map +1 -1
  21. package/extensions/components/AxesHelperComponent.ts +13 -12
  22. package/extensions/components/GridHelperComponent.ts +4 -6
  23. package/extensions/components/LightHelperComponent.ts +6 -6
  24. package/lib/Viewer/commands/SetDefaultViewPosition.d.ts +1 -1
  25. package/lib/Viewer/loaders/GLTFBinaryParser.d.ts +11 -0
  26. package/lib/Viewer/loaders/GLTFFileDynamicLoader.d.ts +0 -1
  27. package/lib/Viewer/loaders/JSONStreamParser.d.ts +5 -0
  28. package/package.json +7 -5
  29. package/src/Viewer/Viewer.ts +4 -7
  30. package/src/Viewer/commands/SetDefaultViewPosition.ts +3 -3
  31. package/src/Viewer/commands/ZoomTo.ts +6 -6
  32. package/src/Viewer/components/CameraComponent.ts +3 -3
  33. package/src/Viewer/components/LightComponent.ts +5 -8
  34. package/src/Viewer/components/SelectionComponent.ts +3 -1
  35. package/src/Viewer/draggers/CuttingPlaneDragger.ts +6 -6
  36. package/src/Viewer/draggers/FlyDragger.ts +1 -1
  37. package/src/Viewer/draggers/MeasureLineDragger.ts +10 -7
  38. package/src/Viewer/draggers/WalkDragger.ts +1 -1
  39. package/src/Viewer/loaders/DynamicGltfLoader/GltfStructure.js +7 -1
  40. package/src/Viewer/loaders/{GLTFBinaryExtension.ts → GLTFBinaryParser.ts} +34 -29
  41. package/src/Viewer/loaders/GLTFCloudDynamicLoader.ts +10 -9
  42. package/src/Viewer/loaders/GLTFFileDynamicLoader.ts +9 -8
  43. package/src/Viewer/loaders/JSONStreamParser.ts +38 -0
  44. package/lib/Viewer/loaders/GLTFBinaryExtension.d.ts +0 -5
@@ -171,6 +171,11 @@
171
171
  cancel() {
172
172
  this.abortController.abort();
173
173
  }
174
+ yield() {
175
+ return new Promise((resolve) => {
176
+ setTimeout(resolve, 0);
177
+ });
178
+ }
174
179
  extractFileName(file) {
175
180
  const regex = /[^/\\?#:]+(?=\?|#|$)/;
176
181
  if (typeof file === "string")
@@ -33865,7 +33870,7 @@ void main() {
33865
33870
  this.orbit.enabled = !event.value;
33866
33871
  };
33867
33872
  this.updatePlaneSize = () => {
33868
- this.planeHelper.size = this.viewer.extents.getSize(new Vector3()).length();
33873
+ this.planeHelper.size = this.viewer.extents.getSize(new Vector3()).length() || 1;
33869
33874
  this.viewer.update();
33870
33875
  };
33871
33876
  this.updateTransformCamera = () => {
@@ -33876,17 +33881,17 @@ void main() {
33876
33881
  this.plane.negate();
33877
33882
  this.viewer.update();
33878
33883
  };
33879
- const size = viewer.extents.getSize(new Vector3()).length();
33880
- const center = viewer.extents.getCenter(new Vector3());
33881
- const constant = -center.dot(normal);
33884
+ const extentsSize = viewer.extents.getSize(new Vector3()).length() || 1;
33885
+ const extentsCenter = viewer.extents.getCenter(new Vector3());
33886
+ const constant = -extentsCenter.dot(normal);
33882
33887
  this.plane = new Plane(normal, constant);
33883
33888
  if (!viewer.renderer.clippingPlanes)
33884
33889
  viewer.renderer.clippingPlanes = [];
33885
33890
  viewer.renderer.clippingPlanes.push(this.plane);
33886
- this.planeHelper = new PlaneHelper(this.plane, size, color, center);
33891
+ this.planeHelper = new PlaneHelper(this.plane, extentsSize, color, extentsCenter);
33887
33892
  this.viewer.helpers.add(this.planeHelper);
33888
33893
  this.planeCenter = new Object3D();
33889
- this.planeCenter.position.copy(viewer.extents.getCenter(new Vector3()));
33894
+ this.planeCenter.position.copy(extentsCenter);
33890
33895
  this.viewer.helpers.add(this.planeCenter);
33891
33896
  this.transform = new TransformControls(viewer.camera, viewer.canvas);
33892
33897
  this.transform.showX = !!normal.x;
@@ -34197,7 +34202,11 @@ void main() {
34197
34202
  const model = this.viewer.models[0];
34198
34203
  const units = (_a = this.viewer.options.rulerUnit) !== null && _a !== void 0 ? _a : "Default";
34199
34204
  const precision = (_b = this.viewer.options.rulerPrecision) !== null && _b !== void 0 ? _b : "Default";
34200
- if (units === "Default") {
34205
+ if (!model) {
34206
+ this.scale = 1;
34207
+ this.units = "";
34208
+ }
34209
+ else if (units === "Default") {
34201
34210
  this.scale = model.getUnitScale();
34202
34211
  this.units = model.getUnitString();
34203
34212
  }
@@ -34205,20 +34214,21 @@ void main() {
34205
34214
  this.scale = convertUnits(model.getUnits(), units, 1);
34206
34215
  this.units = units;
34207
34216
  }
34208
- if (precision === "Default") {
34217
+ if (!model)
34218
+ this.precision = 2;
34219
+ else if (precision === "Default")
34209
34220
  this.precision = model.getPrecision();
34210
- }
34211
- else {
34221
+ else
34212
34222
  this.precision = precision;
34213
- }
34214
34223
  this.overlay.updateLineUnits(this.scale, this.units, this.precision);
34215
34224
  };
34216
34225
  this.overlay = new MeasureOverlay(viewer.camera, viewer.canvas);
34217
34226
  this.overlay.attach();
34218
34227
  this.line = new MeasureLine(this.overlay, this.scale, this.units, this.precision);
34219
34228
  this.overlay.addLine(this.line);
34229
+ const extentsSize = this.viewer.extents.getSize(new Vector3()).length() || 1;
34220
34230
  this.snapper = new Snapper(viewer.camera, viewer.renderer, viewer.canvas);
34221
- this.snapper.threshold = viewer.extents.getSize(new Vector3()).length() / 10000;
34231
+ this.snapper.threshold = extentsSize / 10000;
34222
34232
  this.objects = [];
34223
34233
  this.updateObjects();
34224
34234
  this.updateUnits();
@@ -34917,7 +34927,7 @@ void main() {
34917
34927
  constructor(viewer) {
34918
34928
  this.updateControls = () => {
34919
34929
  const size = this.viewer.extents.getSize(new Vector3());
34920
- this.controls.movementSpeed = Math.min(size.x, size.y, size.z) / 2;
34930
+ this.controls.movementSpeed = Math.min(size.x, size.y, size.z) / 2 || 1;
34921
34931
  this.joyStickControls.movementSpeed = this.controls.movementSpeed;
34922
34932
  this.joyStickControls.multiplier = this.controls.multiplier;
34923
34933
  };
@@ -35123,7 +35133,7 @@ void main() {
35123
35133
  constructor(viewer) {
35124
35134
  this.updateControls = () => {
35125
35135
  const size = this.viewer.extents.getSize(new Vector3());
35126
- this.controls.movementSpeed = Math.min(size.x, size.y, size.z) / 2;
35136
+ this.controls.movementSpeed = Math.min(size.x, size.y, size.z) / 2 || 1;
35127
35137
  this.joyStickControls.movementSpeed = this.controls.movementSpeed;
35128
35138
  this.joyStickControls.multiplier = this.controls.multiplier;
35129
35139
  };
@@ -35228,27 +35238,27 @@ void main() {
35228
35238
  if (box.isEmpty())
35229
35239
  return;
35230
35240
  const boxCenter = box.getCenter(new Vector3());
35231
- const boxSize = box.getBoundingSphere(new Sphere()).radius;
35241
+ const boxSize = box.getSize(new Vector3()).length() || 1;
35232
35242
  const rendererSize = viewer.renderer.getSize(new Vector2());
35233
35243
  const aspectRatio = rendererSize.x / rendererSize.y;
35234
35244
  const camera = viewer.camera;
35235
35245
  if (camera.isPerspectiveCamera) {
35236
35246
  const offset = new Vector3(0, 0, 1)
35237
35247
  .applyQuaternion(camera.quaternion)
35238
- .multiplyScalar(boxSize / Math.tan(MathUtils.degToRad(camera.fov * 0.5)));
35248
+ .multiplyScalar(boxSize / (2 * Math.tan(MathUtils.degToRad(camera.fov * 0.5))));
35239
35249
  camera.position.copy(offset).add(boxCenter);
35240
35250
  camera.updateMatrixWorld();
35241
35251
  }
35242
35252
  if (camera.isOrthographicCamera) {
35243
- camera.top = boxSize;
35244
- camera.bottom = -boxSize;
35253
+ camera.top = boxSize / 2;
35254
+ camera.bottom = -boxSize / 2;
35245
35255
  camera.left = camera.bottom * aspectRatio;
35246
35256
  camera.right = camera.top * aspectRatio;
35247
35257
  camera.zoom = 1;
35248
35258
  camera.updateProjectionMatrix();
35249
35259
  const offset = new Vector3(0, 0, 1)
35250
35260
  .applyQuaternion(camera.quaternion)
35251
- .multiplyScalar(viewer.extents.getBoundingSphere(new Sphere()).radius * 3);
35261
+ .multiplyScalar(viewer.extents.getSize(new Vector3()).length() || 1);
35252
35262
  camera.position.copy(offset).add(boxCenter);
35253
35263
  camera.updateMatrixWorld();
35254
35264
  }
@@ -35269,9 +35279,9 @@ void main() {
35269
35279
  ne: new Vector3(-1, 1, 1).normalize(),
35270
35280
  nw: new Vector3(1, 1, 1).normalize(),
35271
35281
  };
35272
- function setDefaultViewPosition(viewer, position) {
35282
+ function setDefaultViewPosition(viewer, position = "sw") {
35273
35283
  const extentsCenter = viewer.extents.getCenter(new Vector3());
35274
- const extentsSize = viewer.extents.getBoundingSphere(new Sphere()).radius * 2;
35284
+ const extentsSize = viewer.extents.getSize(new Vector3()).length() || 1;
35275
35285
  const upY = new Vector3(0, 1, 0);
35276
35286
  const offsetY = defaultViewPositions[position] || defaultViewPositions["sw"];
35277
35287
  const up = new Vector3().copy(viewer.camera.up);
@@ -35528,7 +35538,7 @@ void main() {
35528
35538
  return camera.isOrthographicCamera ? "orthographic" : "perspective";
35529
35539
  }
35530
35540
  switchCamera(camera) {
35531
- const extentsSize = this.viewer.extents.getBoundingSphere(new Sphere()).radius * 2 || 1;
35541
+ const extentsSize = this.viewer.extents.getSize(new Vector3()).length() || 1;
35532
35542
  const rendererSize = this.viewer.renderer.getSize(new Vector2());
35533
35543
  const aspectRatio = rendererSize.x / rendererSize.y;
35534
35544
  if (camera.isPerspectiveCamera) {
@@ -35568,7 +35578,7 @@ void main() {
35568
35578
  if (currentCamera.isPerspectiveCamera) {
35569
35579
  const fov = currentCamera.fov;
35570
35580
  const distance = currentCamera.position.distanceTo(target);
35571
- const fieldHeight = 2 * Math.tan(MathUtils.degToRad(fov) / 2) * distance;
35581
+ const fieldHeight = 2 * Math.tan(MathUtils.degToRad(fov * 0.5)) * distance;
35572
35582
  camera = new OrthographicCamera();
35573
35583
  camera.top = fieldHeight / 2;
35574
35584
  camera.bottom = -fieldHeight / 2;
@@ -35626,7 +35636,7 @@ void main() {
35626
35636
  if (this.viewer.extents.isEmpty())
35627
35637
  return;
35628
35638
  const extentsCenter = this.viewer.extents.getCenter(new Vector3());
35629
- const extentsSize = this.viewer.extents.getBoundingSphere(new Sphere()).radius;
35639
+ const extentsSize = this.viewer.extents.getSize(new Vector3()).length() || 1;
35630
35640
  const upY = new Vector3(0, 1, 0);
35631
35641
  const frontY = new Vector3(0, 0, -1);
35632
35642
  const up = new Vector3().copy(this.viewer.camera.up);
@@ -35635,17 +35645,14 @@ void main() {
35635
35645
  this.directionalLight.position
35636
35646
  .copy(up)
35637
35647
  .applyAxisAngle(front, (-Math.PI * 30) / 180)
35638
- .multiplyScalar(extentsSize * 2)
35648
+ .multiplyScalar(extentsSize)
35639
35649
  .add(extentsCenter);
35640
35650
  this.directionalLight.target.position.copy(extentsCenter);
35641
- this.frontLight.position
35642
- .copy(front)
35643
- .multiplyScalar(extentsSize * 2)
35644
- .add(extentsCenter);
35651
+ this.frontLight.position.copy(front).multiplyScalar(extentsSize).add(extentsCenter);
35645
35652
  this.frontLight.target.position.copy(extentsCenter);
35646
35653
  this.hemisphereLight.position
35647
35654
  .copy(front)
35648
- .multiplyScalar(extentsSize * 3)
35655
+ .multiplyScalar(extentsSize * 1.5)
35649
35656
  .add(extentsCenter);
35650
35657
  this.viewer.scene.add(this.ambientLight);
35651
35658
  this.viewer.scene.add(this.directionalLight);
@@ -36690,8 +36697,9 @@ void main() {
36690
36697
  const upPosition = this.getMousePosition(event, new Vector2());
36691
36698
  if (upPosition.distanceTo(this.downPosition) !== 0)
36692
36699
  return;
36700
+ const extentsSize = this.viewer.extents.getSize(new Vector3()).length() || 1;
36693
36701
  const snapper = new Snapper(this.viewer.camera, this.viewer.renderer, this.viewer.canvas);
36694
- snapper.threshold = this.viewer.extents.getSize(new Vector3()).length() / 10000;
36702
+ snapper.threshold = extentsSize / 10000;
36695
36703
  let intersections = [];
36696
36704
  this.viewer.models.forEach((model) => {
36697
36705
  const objects = model.getVisibleObjects();
@@ -37460,7 +37468,11 @@ void main() {
37460
37468
  this.criticalError = null;
37461
37469
  }
37462
37470
  async initialize(loader) {
37463
- this.json = await this.loadController.loadJson();
37471
+ const json = await this.loadController.loadJson();
37472
+ if (json.asset === undefined || json.asset.version[0] < 2) {
37473
+ throw new Error("GltfStructure: Unsupported asset. glTF versions >=2.0 are supported.");
37474
+ }
37475
+ this.json = json;
37464
37476
  this.loader = loader;
37465
37477
  this.uri = this.json.buffers[0].uri || "";
37466
37478
  }
@@ -40105,48 +40117,1302 @@ void main() {
40105
40117
 
40106
40118
  const BINARY_EXTENSION_HEADER_MAGIC = "glTF";
40107
40119
  const BINARY_EXTENSION_HEADER_LENGTH = 12;
40108
- const BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4e4f534a, BIN: 0x004e4042 };
40109
- class GLTFBinaryExtension {
40120
+ const BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4e4f534a, BIN: 0x004e4942 };
40121
+ class GLTFBinaryParser {
40110
40122
  constructor(data) {
40111
- const headerView = new DataView(data, 0, BINARY_EXTENSION_HEADER_LENGTH);
40123
+ const dataView = new DataView(data, 0);
40112
40124
  const textDecoder = new TextDecoder();
40113
- const magic = textDecoder.decode(new Uint8Array(data.slice(0, 4)));
40125
+ const magic = textDecoder.decode(new Uint8Array(data, 0, Math.min(4, data.byteLength)));
40114
40126
  if (magic !== BINARY_EXTENSION_HEADER_MAGIC) {
40115
- this.content = textDecoder.decode(data);
40127
+ this.content = new Uint8Array(data);
40116
40128
  return;
40117
40129
  }
40118
- const header = {
40130
+ this.header = {
40119
40131
  magic,
40120
- version: headerView.getUint32(4, true),
40121
- length: headerView.getUint32(8, true),
40132
+ version: dataView.getUint32(4, true),
40133
+ length: dataView.getUint32(8, true),
40122
40134
  };
40123
- if (header.magic !== BINARY_EXTENSION_HEADER_MAGIC) {
40124
- throw new Error("Unsupported glTF-Binary header.");
40125
- }
40126
- if (header.version < 2.0) {
40127
- throw new Error("Legacy binary file detected.");
40128
- }
40129
- const chunkContentsLength = header.length - BINARY_EXTENSION_HEADER_LENGTH;
40130
- const chunkView = new DataView(data, BINARY_EXTENSION_HEADER_LENGTH);
40131
- let chunkIndex = 0;
40132
- while (chunkIndex < chunkContentsLength) {
40133
- const chunkLength = chunkView.getUint32(chunkIndex, true);
40134
- chunkIndex += 4;
40135
- const chunkType = chunkView.getUint32(chunkIndex, true);
40136
- chunkIndex += 4;
40135
+ if (this.header.length !== data.byteLength) {
40136
+ throw new Error("GLTFBinaryParser: Invalid binary file header.");
40137
+ }
40138
+ if (this.header.version < 2.0) {
40139
+ throw new Error("GLTFBinaryParser: Legacy binary file detected.");
40140
+ }
40141
+ let offset = BINARY_EXTENSION_HEADER_LENGTH;
40142
+ while (offset < this.header.length) {
40143
+ const chunkLength = dataView.getUint32(offset, true);
40144
+ offset += 4;
40145
+ const chunkType = dataView.getUint32(offset, true);
40146
+ offset += 4;
40137
40147
  if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON) {
40138
- const contentArray = new Uint8Array(data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength);
40139
- this.content = textDecoder.decode(contentArray);
40148
+ this.content = new Uint8Array(data, offset, chunkLength);
40140
40149
  }
40141
40150
  else if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN) {
40142
- const byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;
40143
- this.body = data.slice(byteOffset, byteOffset + chunkLength);
40151
+ this.body = data.slice(offset, offset + chunkLength);
40144
40152
  }
40145
- chunkIndex += chunkLength;
40153
+ offset += chunkLength;
40146
40154
  }
40147
40155
  if (typeof this.content === "undefined") {
40148
- throw new Error("JSON content not found.");
40156
+ throw new Error("GLTFBinaryParser: JSON content not found.");
40157
+ }
40158
+ if (typeof this.body === "undefined") {
40159
+ throw new Error("GLTFBinaryParser: Binary buffer chunk not found or type not supported.");
40160
+ }
40161
+ }
40162
+ }
40163
+
40164
+ var charset;
40165
+ (function (charset) {
40166
+ charset[charset["BACKSPACE"] = 8] = "BACKSPACE";
40167
+ charset[charset["FORM_FEED"] = 12] = "FORM_FEED";
40168
+ charset[charset["NEWLINE"] = 10] = "NEWLINE";
40169
+ charset[charset["CARRIAGE_RETURN"] = 13] = "CARRIAGE_RETURN";
40170
+ charset[charset["TAB"] = 9] = "TAB";
40171
+ charset[charset["SPACE"] = 32] = "SPACE";
40172
+ charset[charset["EXCLAMATION_MARK"] = 33] = "EXCLAMATION_MARK";
40173
+ charset[charset["QUOTATION_MARK"] = 34] = "QUOTATION_MARK";
40174
+ charset[charset["NUMBER_SIGN"] = 35] = "NUMBER_SIGN";
40175
+ charset[charset["DOLLAR_SIGN"] = 36] = "DOLLAR_SIGN";
40176
+ charset[charset["PERCENT_SIGN"] = 37] = "PERCENT_SIGN";
40177
+ charset[charset["AMPERSAND"] = 38] = "AMPERSAND";
40178
+ charset[charset["APOSTROPHE"] = 39] = "APOSTROPHE";
40179
+ charset[charset["LEFT_PARENTHESIS"] = 40] = "LEFT_PARENTHESIS";
40180
+ charset[charset["RIGHT_PARENTHESIS"] = 41] = "RIGHT_PARENTHESIS";
40181
+ charset[charset["ASTERISK"] = 42] = "ASTERISK";
40182
+ charset[charset["PLUS_SIGN"] = 43] = "PLUS_SIGN";
40183
+ charset[charset["COMMA"] = 44] = "COMMA";
40184
+ charset[charset["HYPHEN_MINUS"] = 45] = "HYPHEN_MINUS";
40185
+ charset[charset["FULL_STOP"] = 46] = "FULL_STOP";
40186
+ charset[charset["SOLIDUS"] = 47] = "SOLIDUS";
40187
+ charset[charset["DIGIT_ZERO"] = 48] = "DIGIT_ZERO";
40188
+ charset[charset["DIGIT_ONE"] = 49] = "DIGIT_ONE";
40189
+ charset[charset["DIGIT_TWO"] = 50] = "DIGIT_TWO";
40190
+ charset[charset["DIGIT_THREE"] = 51] = "DIGIT_THREE";
40191
+ charset[charset["DIGIT_FOUR"] = 52] = "DIGIT_FOUR";
40192
+ charset[charset["DIGIT_FIVE"] = 53] = "DIGIT_FIVE";
40193
+ charset[charset["DIGIT_SIX"] = 54] = "DIGIT_SIX";
40194
+ charset[charset["DIGIT_SEVEN"] = 55] = "DIGIT_SEVEN";
40195
+ charset[charset["DIGIT_EIGHT"] = 56] = "DIGIT_EIGHT";
40196
+ charset[charset["DIGIT_NINE"] = 57] = "DIGIT_NINE";
40197
+ charset[charset["COLON"] = 58] = "COLON";
40198
+ charset[charset["SEMICOLON"] = 59] = "SEMICOLON";
40199
+ charset[charset["LESS_THAN_SIGN"] = 60] = "LESS_THAN_SIGN";
40200
+ charset[charset["EQUALS_SIGN"] = 61] = "EQUALS_SIGN";
40201
+ charset[charset["GREATER_THAN_SIGN"] = 62] = "GREATER_THAN_SIGN";
40202
+ charset[charset["QUESTION_MARK"] = 63] = "QUESTION_MARK";
40203
+ charset[charset["COMMERCIAL_AT"] = 64] = "COMMERCIAL_AT";
40204
+ charset[charset["LATIN_CAPITAL_LETTER_A"] = 65] = "LATIN_CAPITAL_LETTER_A";
40205
+ charset[charset["LATIN_CAPITAL_LETTER_B"] = 66] = "LATIN_CAPITAL_LETTER_B";
40206
+ charset[charset["LATIN_CAPITAL_LETTER_C"] = 67] = "LATIN_CAPITAL_LETTER_C";
40207
+ charset[charset["LATIN_CAPITAL_LETTER_D"] = 68] = "LATIN_CAPITAL_LETTER_D";
40208
+ charset[charset["LATIN_CAPITAL_LETTER_E"] = 69] = "LATIN_CAPITAL_LETTER_E";
40209
+ charset[charset["LATIN_CAPITAL_LETTER_F"] = 70] = "LATIN_CAPITAL_LETTER_F";
40210
+ charset[charset["LATIN_CAPITAL_LETTER_G"] = 71] = "LATIN_CAPITAL_LETTER_G";
40211
+ charset[charset["LATIN_CAPITAL_LETTER_H"] = 72] = "LATIN_CAPITAL_LETTER_H";
40212
+ charset[charset["LATIN_CAPITAL_LETTER_I"] = 73] = "LATIN_CAPITAL_LETTER_I";
40213
+ charset[charset["LATIN_CAPITAL_LETTER_J"] = 74] = "LATIN_CAPITAL_LETTER_J";
40214
+ charset[charset["LATIN_CAPITAL_LETTER_K"] = 75] = "LATIN_CAPITAL_LETTER_K";
40215
+ charset[charset["LATIN_CAPITAL_LETTER_L"] = 76] = "LATIN_CAPITAL_LETTER_L";
40216
+ charset[charset["LATIN_CAPITAL_LETTER_M"] = 77] = "LATIN_CAPITAL_LETTER_M";
40217
+ charset[charset["LATIN_CAPITAL_LETTER_N"] = 78] = "LATIN_CAPITAL_LETTER_N";
40218
+ charset[charset["LATIN_CAPITAL_LETTER_O"] = 79] = "LATIN_CAPITAL_LETTER_O";
40219
+ charset[charset["LATIN_CAPITAL_LETTER_P"] = 80] = "LATIN_CAPITAL_LETTER_P";
40220
+ charset[charset["LATIN_CAPITAL_LETTER_Q"] = 81] = "LATIN_CAPITAL_LETTER_Q";
40221
+ charset[charset["LATIN_CAPITAL_LETTER_R"] = 82] = "LATIN_CAPITAL_LETTER_R";
40222
+ charset[charset["LATIN_CAPITAL_LETTER_S"] = 83] = "LATIN_CAPITAL_LETTER_S";
40223
+ charset[charset["LATIN_CAPITAL_LETTER_T"] = 84] = "LATIN_CAPITAL_LETTER_T";
40224
+ charset[charset["LATIN_CAPITAL_LETTER_U"] = 85] = "LATIN_CAPITAL_LETTER_U";
40225
+ charset[charset["LATIN_CAPITAL_LETTER_V"] = 86] = "LATIN_CAPITAL_LETTER_V";
40226
+ charset[charset["LATIN_CAPITAL_LETTER_W"] = 87] = "LATIN_CAPITAL_LETTER_W";
40227
+ charset[charset["LATIN_CAPITAL_LETTER_X"] = 88] = "LATIN_CAPITAL_LETTER_X";
40228
+ charset[charset["LATIN_CAPITAL_LETTER_Y"] = 89] = "LATIN_CAPITAL_LETTER_Y";
40229
+ charset[charset["LATIN_CAPITAL_LETTER_Z"] = 90] = "LATIN_CAPITAL_LETTER_Z";
40230
+ charset[charset["LEFT_SQUARE_BRACKET"] = 91] = "LEFT_SQUARE_BRACKET";
40231
+ charset[charset["REVERSE_SOLIDUS"] = 92] = "REVERSE_SOLIDUS";
40232
+ charset[charset["RIGHT_SQUARE_BRACKET"] = 93] = "RIGHT_SQUARE_BRACKET";
40233
+ charset[charset["CIRCUMFLEX_ACCENT"] = 94] = "CIRCUMFLEX_ACCENT";
40234
+ charset[charset["LOW_LINE"] = 95] = "LOW_LINE";
40235
+ charset[charset["GRAVE_ACCENT"] = 96] = "GRAVE_ACCENT";
40236
+ charset[charset["LATIN_SMALL_LETTER_A"] = 97] = "LATIN_SMALL_LETTER_A";
40237
+ charset[charset["LATIN_SMALL_LETTER_B"] = 98] = "LATIN_SMALL_LETTER_B";
40238
+ charset[charset["LATIN_SMALL_LETTER_C"] = 99] = "LATIN_SMALL_LETTER_C";
40239
+ charset[charset["LATIN_SMALL_LETTER_D"] = 100] = "LATIN_SMALL_LETTER_D";
40240
+ charset[charset["LATIN_SMALL_LETTER_E"] = 101] = "LATIN_SMALL_LETTER_E";
40241
+ charset[charset["LATIN_SMALL_LETTER_F"] = 102] = "LATIN_SMALL_LETTER_F";
40242
+ charset[charset["LATIN_SMALL_LETTER_G"] = 103] = "LATIN_SMALL_LETTER_G";
40243
+ charset[charset["LATIN_SMALL_LETTER_H"] = 104] = "LATIN_SMALL_LETTER_H";
40244
+ charset[charset["LATIN_SMALL_LETTER_I"] = 105] = "LATIN_SMALL_LETTER_I";
40245
+ charset[charset["LATIN_SMALL_LETTER_J"] = 106] = "LATIN_SMALL_LETTER_J";
40246
+ charset[charset["LATIN_SMALL_LETTER_K"] = 107] = "LATIN_SMALL_LETTER_K";
40247
+ charset[charset["LATIN_SMALL_LETTER_L"] = 108] = "LATIN_SMALL_LETTER_L";
40248
+ charset[charset["LATIN_SMALL_LETTER_M"] = 109] = "LATIN_SMALL_LETTER_M";
40249
+ charset[charset["LATIN_SMALL_LETTER_N"] = 110] = "LATIN_SMALL_LETTER_N";
40250
+ charset[charset["LATIN_SMALL_LETTER_O"] = 111] = "LATIN_SMALL_LETTER_O";
40251
+ charset[charset["LATIN_SMALL_LETTER_P"] = 112] = "LATIN_SMALL_LETTER_P";
40252
+ charset[charset["LATIN_SMALL_LETTER_Q"] = 113] = "LATIN_SMALL_LETTER_Q";
40253
+ charset[charset["LATIN_SMALL_LETTER_R"] = 114] = "LATIN_SMALL_LETTER_R";
40254
+ charset[charset["LATIN_SMALL_LETTER_S"] = 115] = "LATIN_SMALL_LETTER_S";
40255
+ charset[charset["LATIN_SMALL_LETTER_T"] = 116] = "LATIN_SMALL_LETTER_T";
40256
+ charset[charset["LATIN_SMALL_LETTER_U"] = 117] = "LATIN_SMALL_LETTER_U";
40257
+ charset[charset["LATIN_SMALL_LETTER_V"] = 118] = "LATIN_SMALL_LETTER_V";
40258
+ charset[charset["LATIN_SMALL_LETTER_W"] = 119] = "LATIN_SMALL_LETTER_W";
40259
+ charset[charset["LATIN_SMALL_LETTER_X"] = 120] = "LATIN_SMALL_LETTER_X";
40260
+ charset[charset["LATIN_SMALL_LETTER_Y"] = 121] = "LATIN_SMALL_LETTER_Y";
40261
+ charset[charset["LATIN_SMALL_LETTER_Z"] = 122] = "LATIN_SMALL_LETTER_Z";
40262
+ charset[charset["LEFT_CURLY_BRACKET"] = 123] = "LEFT_CURLY_BRACKET";
40263
+ charset[charset["VERTICAL_LINE"] = 124] = "VERTICAL_LINE";
40264
+ charset[charset["RIGHT_CURLY_BRACKET"] = 125] = "RIGHT_CURLY_BRACKET";
40265
+ charset[charset["TILDE"] = 126] = "TILDE";
40266
+ })(charset || (charset = {}));
40267
+ const escapedSequences = {
40268
+ [charset.QUOTATION_MARK]: charset.QUOTATION_MARK,
40269
+ [charset.REVERSE_SOLIDUS]: charset.REVERSE_SOLIDUS,
40270
+ [charset.SOLIDUS]: charset.SOLIDUS,
40271
+ [charset.LATIN_SMALL_LETTER_B]: charset.BACKSPACE,
40272
+ [charset.LATIN_SMALL_LETTER_F]: charset.FORM_FEED,
40273
+ [charset.LATIN_SMALL_LETTER_N]: charset.NEWLINE,
40274
+ [charset.LATIN_SMALL_LETTER_R]: charset.CARRIAGE_RETURN,
40275
+ [charset.LATIN_SMALL_LETTER_T]: charset.TAB,
40276
+ };
40277
+
40278
+ class NonBufferedString {
40279
+ constructor() {
40280
+ this.decoder = new TextDecoder("utf-8");
40281
+ this.strings = [];
40282
+ this.byteLength = 0;
40283
+ }
40284
+ appendChar(char) {
40285
+ this.strings.push(String.fromCharCode(char));
40286
+ this.byteLength += 1;
40287
+ }
40288
+ appendBuf(buf, start = 0, end = buf.length) {
40289
+ this.strings.push(this.decoder.decode(buf.subarray(start, end)));
40290
+ this.byteLength += end - start;
40291
+ }
40292
+ reset() {
40293
+ this.strings = [];
40294
+ this.byteLength = 0;
40295
+ }
40296
+ toString() {
40297
+ return this.strings.join("");
40298
+ }
40299
+ }
40300
+ class BufferedString {
40301
+ constructor(bufferSize) {
40302
+ this.decoder = new TextDecoder("utf-8");
40303
+ this.bufferOffset = 0;
40304
+ this.string = "";
40305
+ this.byteLength = 0;
40306
+ this.buffer = new Uint8Array(bufferSize);
40307
+ }
40308
+ appendChar(char) {
40309
+ if (this.bufferOffset >= this.buffer.length)
40310
+ this.flushStringBuffer();
40311
+ this.buffer[this.bufferOffset++] = char;
40312
+ this.byteLength += 1;
40313
+ }
40314
+ appendBuf(buf, start = 0, end = buf.length) {
40315
+ const size = end - start;
40316
+ if (this.bufferOffset + size > this.buffer.length)
40317
+ this.flushStringBuffer();
40318
+ this.buffer.set(buf.subarray(start, end), this.bufferOffset);
40319
+ this.bufferOffset += size;
40320
+ this.byteLength += size;
40321
+ }
40322
+ flushStringBuffer() {
40323
+ this.string += this.decoder.decode(this.buffer.subarray(0, this.bufferOffset));
40324
+ this.bufferOffset = 0;
40325
+ }
40326
+ reset() {
40327
+ this.string = "";
40328
+ this.bufferOffset = 0;
40329
+ this.byteLength = 0;
40330
+ }
40331
+ toString() {
40332
+ this.flushStringBuffer();
40333
+ return this.string;
40334
+ }
40335
+ }
40336
+
40337
+ var TokenType$1;
40338
+ (function (TokenType) {
40339
+ TokenType[TokenType["LEFT_BRACE"] = 0] = "LEFT_BRACE";
40340
+ TokenType[TokenType["RIGHT_BRACE"] = 1] = "RIGHT_BRACE";
40341
+ TokenType[TokenType["LEFT_BRACKET"] = 2] = "LEFT_BRACKET";
40342
+ TokenType[TokenType["RIGHT_BRACKET"] = 3] = "RIGHT_BRACKET";
40343
+ TokenType[TokenType["COLON"] = 4] = "COLON";
40344
+ TokenType[TokenType["COMMA"] = 5] = "COMMA";
40345
+ TokenType[TokenType["TRUE"] = 6] = "TRUE";
40346
+ TokenType[TokenType["FALSE"] = 7] = "FALSE";
40347
+ TokenType[TokenType["NULL"] = 8] = "NULL";
40348
+ TokenType[TokenType["STRING"] = 9] = "STRING";
40349
+ TokenType[TokenType["NUMBER"] = 10] = "NUMBER";
40350
+ TokenType[TokenType["SEPARATOR"] = 11] = "SEPARATOR";
40351
+ })(TokenType$1 || (TokenType$1 = {}));
40352
+ var TokenType = TokenType$1;
40353
+
40354
+ var TokenizerStates;
40355
+ (function (TokenizerStates) {
40356
+ TokenizerStates[TokenizerStates["START"] = 0] = "START";
40357
+ TokenizerStates[TokenizerStates["ENDED"] = 1] = "ENDED";
40358
+ TokenizerStates[TokenizerStates["ERROR"] = 2] = "ERROR";
40359
+ TokenizerStates[TokenizerStates["TRUE1"] = 3] = "TRUE1";
40360
+ TokenizerStates[TokenizerStates["TRUE2"] = 4] = "TRUE2";
40361
+ TokenizerStates[TokenizerStates["TRUE3"] = 5] = "TRUE3";
40362
+ TokenizerStates[TokenizerStates["FALSE1"] = 6] = "FALSE1";
40363
+ TokenizerStates[TokenizerStates["FALSE2"] = 7] = "FALSE2";
40364
+ TokenizerStates[TokenizerStates["FALSE3"] = 8] = "FALSE3";
40365
+ TokenizerStates[TokenizerStates["FALSE4"] = 9] = "FALSE4";
40366
+ TokenizerStates[TokenizerStates["NULL1"] = 10] = "NULL1";
40367
+ TokenizerStates[TokenizerStates["NULL2"] = 11] = "NULL2";
40368
+ TokenizerStates[TokenizerStates["NULL3"] = 12] = "NULL3";
40369
+ TokenizerStates[TokenizerStates["STRING_DEFAULT"] = 13] = "STRING_DEFAULT";
40370
+ TokenizerStates[TokenizerStates["STRING_AFTER_BACKSLASH"] = 14] = "STRING_AFTER_BACKSLASH";
40371
+ TokenizerStates[TokenizerStates["STRING_UNICODE_DIGIT_1"] = 15] = "STRING_UNICODE_DIGIT_1";
40372
+ TokenizerStates[TokenizerStates["STRING_UNICODE_DIGIT_2"] = 16] = "STRING_UNICODE_DIGIT_2";
40373
+ TokenizerStates[TokenizerStates["STRING_UNICODE_DIGIT_3"] = 17] = "STRING_UNICODE_DIGIT_3";
40374
+ TokenizerStates[TokenizerStates["STRING_UNICODE_DIGIT_4"] = 18] = "STRING_UNICODE_DIGIT_4";
40375
+ TokenizerStates[TokenizerStates["STRING_INCOMPLETE_CHAR"] = 19] = "STRING_INCOMPLETE_CHAR";
40376
+ TokenizerStates[TokenizerStates["NUMBER_AFTER_INITIAL_MINUS"] = 20] = "NUMBER_AFTER_INITIAL_MINUS";
40377
+ TokenizerStates[TokenizerStates["NUMBER_AFTER_INITIAL_ZERO"] = 21] = "NUMBER_AFTER_INITIAL_ZERO";
40378
+ TokenizerStates[TokenizerStates["NUMBER_AFTER_INITIAL_NON_ZERO"] = 22] = "NUMBER_AFTER_INITIAL_NON_ZERO";
40379
+ TokenizerStates[TokenizerStates["NUMBER_AFTER_FULL_STOP"] = 23] = "NUMBER_AFTER_FULL_STOP";
40380
+ TokenizerStates[TokenizerStates["NUMBER_AFTER_DECIMAL"] = 24] = "NUMBER_AFTER_DECIMAL";
40381
+ TokenizerStates[TokenizerStates["NUMBER_AFTER_E"] = 25] = "NUMBER_AFTER_E";
40382
+ TokenizerStates[TokenizerStates["NUMBER_AFTER_E_AND_SIGN"] = 26] = "NUMBER_AFTER_E_AND_SIGN";
40383
+ TokenizerStates[TokenizerStates["NUMBER_AFTER_E_AND_DIGIT"] = 27] = "NUMBER_AFTER_E_AND_DIGIT";
40384
+ TokenizerStates[TokenizerStates["SEPARATOR"] = 28] = "SEPARATOR";
40385
+ TokenizerStates[TokenizerStates["BOM_OR_START"] = 29] = "BOM_OR_START";
40386
+ TokenizerStates[TokenizerStates["BOM"] = 30] = "BOM";
40387
+ })(TokenizerStates || (TokenizerStates = {}));
40388
+ function TokenizerStateToString(tokenizerState) {
40389
+ return [
40390
+ "START",
40391
+ "ENDED",
40392
+ "ERROR",
40393
+ "TRUE1",
40394
+ "TRUE2",
40395
+ "TRUE3",
40396
+ "FALSE1",
40397
+ "FALSE2",
40398
+ "FALSE3",
40399
+ "FALSE4",
40400
+ "NULL1",
40401
+ "NULL2",
40402
+ "NULL3",
40403
+ "STRING_DEFAULT",
40404
+ "STRING_AFTER_BACKSLASH",
40405
+ "STRING_UNICODE_DIGIT_1",
40406
+ "STRING_UNICODE_DIGIT_2",
40407
+ "STRING_UNICODE_DIGIT_3",
40408
+ "STRING_UNICODE_DIGIT_4",
40409
+ "STRING_INCOMPLETE_CHAR",
40410
+ "NUMBER_AFTER_INITIAL_MINUS",
40411
+ "NUMBER_AFTER_INITIAL_ZERO",
40412
+ "NUMBER_AFTER_INITIAL_NON_ZERO",
40413
+ "NUMBER_AFTER_FULL_STOP",
40414
+ "NUMBER_AFTER_DECIMAL",
40415
+ "NUMBER_AFTER_E",
40416
+ "NUMBER_AFTER_E_AND_SIGN",
40417
+ "NUMBER_AFTER_E_AND_DIGIT",
40418
+ "SEPARATOR",
40419
+ "BOM_OR_START",
40420
+ "BOM",
40421
+ ][tokenizerState];
40422
+ }
40423
+ const defaultOpts$1 = {
40424
+ stringBufferSize: 0,
40425
+ numberBufferSize: 0,
40426
+ separator: undefined,
40427
+ emitPartialTokens: false,
40428
+ };
40429
+ class TokenizerError extends Error {
40430
+ constructor(message) {
40431
+ super(message);
40432
+ Object.setPrototypeOf(this, TokenizerError.prototype);
40433
+ }
40434
+ }
40435
+ class Tokenizer {
40436
+ constructor(opts) {
40437
+ this.state = TokenizerStates.BOM_OR_START;
40438
+ this.bomIndex = 0;
40439
+ this.separatorIndex = 0;
40440
+ this.escapedCharsByteLength = 0;
40441
+ this.bytes_remaining = 0;
40442
+ this.bytes_in_sequence = 0;
40443
+ this.char_split_buffer = new Uint8Array(4);
40444
+ this.encoder = new TextEncoder();
40445
+ this.offset = -1;
40446
+ opts = Object.assign(Object.assign({}, defaultOpts$1), opts);
40447
+ this.emitPartialTokens = opts.emitPartialTokens === true;
40448
+ this.bufferedString =
40449
+ opts.stringBufferSize && opts.stringBufferSize > 4
40450
+ ? new BufferedString(opts.stringBufferSize)
40451
+ : new NonBufferedString();
40452
+ this.bufferedNumber =
40453
+ opts.numberBufferSize && opts.numberBufferSize > 0
40454
+ ? new BufferedString(opts.numberBufferSize)
40455
+ : new NonBufferedString();
40456
+ this.separator = opts.separator;
40457
+ this.separatorBytes = opts.separator
40458
+ ? this.encoder.encode(opts.separator)
40459
+ : undefined;
40460
+ }
40461
+ get isEnded() {
40462
+ return this.state === TokenizerStates.ENDED;
40463
+ }
40464
+ write(input) {
40465
+ try {
40466
+ let buffer;
40467
+ if (input instanceof Uint8Array) {
40468
+ buffer = input;
40469
+ }
40470
+ else if (typeof input === "string") {
40471
+ buffer = this.encoder.encode(input);
40472
+ }
40473
+ else if (Array.isArray(input)) {
40474
+ buffer = Uint8Array.from(input);
40475
+ }
40476
+ else if (ArrayBuffer.isView(input)) {
40477
+ buffer = new Uint8Array(input.buffer, input.byteOffset, input.byteLength);
40478
+ }
40479
+ else {
40480
+ throw new TypeError("Unexpected type. The `write` function only accepts Arrays, TypedArrays and Strings.");
40481
+ }
40482
+ for (let i = 0; i < buffer.length; i += 1) {
40483
+ const n = buffer[i];
40484
+ switch (this.state) {
40485
+ case TokenizerStates.BOM_OR_START:
40486
+ if (input instanceof Uint8Array && n === 0xef) {
40487
+ this.bom = [0xef, 0xbb, 0xbf];
40488
+ this.bomIndex += 1;
40489
+ this.state = TokenizerStates.BOM;
40490
+ continue;
40491
+ }
40492
+ if (input instanceof Uint16Array) {
40493
+ if (n === 0xfe) {
40494
+ this.bom = [0xfe, 0xff];
40495
+ this.bomIndex += 1;
40496
+ this.state = TokenizerStates.BOM;
40497
+ continue;
40498
+ }
40499
+ if (n === 0xff) {
40500
+ this.bom = [0xff, 0xfe];
40501
+ this.bomIndex += 1;
40502
+ this.state = TokenizerStates.BOM;
40503
+ continue;
40504
+ }
40505
+ }
40506
+ if (input instanceof Uint32Array) {
40507
+ if (n === 0x00) {
40508
+ this.bom = [0x00, 0x00, 0xfe, 0xff];
40509
+ this.bomIndex += 1;
40510
+ this.state = TokenizerStates.BOM;
40511
+ continue;
40512
+ }
40513
+ if (n === 0xff) {
40514
+ this.bom = [0xff, 0xfe, 0x00, 0x00];
40515
+ this.bomIndex += 1;
40516
+ this.state = TokenizerStates.BOM;
40517
+ continue;
40518
+ }
40519
+ }
40520
+ case TokenizerStates.START:
40521
+ this.offset += 1;
40522
+ if (this.separatorBytes && n === this.separatorBytes[0]) {
40523
+ if (this.separatorBytes.length === 1) {
40524
+ this.state = TokenizerStates.START;
40525
+ this.onToken({
40526
+ token: TokenType.SEPARATOR,
40527
+ value: this.separator,
40528
+ offset: this.offset + this.separatorBytes.length - 1,
40529
+ });
40530
+ continue;
40531
+ }
40532
+ this.state = TokenizerStates.SEPARATOR;
40533
+ continue;
40534
+ }
40535
+ if (n === charset.SPACE ||
40536
+ n === charset.NEWLINE ||
40537
+ n === charset.CARRIAGE_RETURN ||
40538
+ n === charset.TAB) {
40539
+ continue;
40540
+ }
40541
+ if (n === charset.LEFT_CURLY_BRACKET) {
40542
+ this.onToken({
40543
+ token: TokenType.LEFT_BRACE,
40544
+ value: "{",
40545
+ offset: this.offset,
40546
+ });
40547
+ continue;
40548
+ }
40549
+ if (n === charset.RIGHT_CURLY_BRACKET) {
40550
+ this.onToken({
40551
+ token: TokenType.RIGHT_BRACE,
40552
+ value: "}",
40553
+ offset: this.offset,
40554
+ });
40555
+ continue;
40556
+ }
40557
+ if (n === charset.LEFT_SQUARE_BRACKET) {
40558
+ this.onToken({
40559
+ token: TokenType.LEFT_BRACKET,
40560
+ value: "[",
40561
+ offset: this.offset,
40562
+ });
40563
+ continue;
40564
+ }
40565
+ if (n === charset.RIGHT_SQUARE_BRACKET) {
40566
+ this.onToken({
40567
+ token: TokenType.RIGHT_BRACKET,
40568
+ value: "]",
40569
+ offset: this.offset,
40570
+ });
40571
+ continue;
40572
+ }
40573
+ if (n === charset.COLON) {
40574
+ this.onToken({
40575
+ token: TokenType.COLON,
40576
+ value: ":",
40577
+ offset: this.offset,
40578
+ });
40579
+ continue;
40580
+ }
40581
+ if (n === charset.COMMA) {
40582
+ this.onToken({
40583
+ token: TokenType.COMMA,
40584
+ value: ",",
40585
+ offset: this.offset,
40586
+ });
40587
+ continue;
40588
+ }
40589
+ if (n === charset.LATIN_SMALL_LETTER_T) {
40590
+ this.state = TokenizerStates.TRUE1;
40591
+ continue;
40592
+ }
40593
+ if (n === charset.LATIN_SMALL_LETTER_F) {
40594
+ this.state = TokenizerStates.FALSE1;
40595
+ continue;
40596
+ }
40597
+ if (n === charset.LATIN_SMALL_LETTER_N) {
40598
+ this.state = TokenizerStates.NULL1;
40599
+ continue;
40600
+ }
40601
+ if (n === charset.QUOTATION_MARK) {
40602
+ this.bufferedString.reset();
40603
+ this.escapedCharsByteLength = 0;
40604
+ this.state = TokenizerStates.STRING_DEFAULT;
40605
+ continue;
40606
+ }
40607
+ if (n >= charset.DIGIT_ONE && n <= charset.DIGIT_NINE) {
40608
+ this.bufferedNumber.reset();
40609
+ this.bufferedNumber.appendChar(n);
40610
+ this.state = TokenizerStates.NUMBER_AFTER_INITIAL_NON_ZERO;
40611
+ continue;
40612
+ }
40613
+ if (n === charset.DIGIT_ZERO) {
40614
+ this.bufferedNumber.reset();
40615
+ this.bufferedNumber.appendChar(n);
40616
+ this.state = TokenizerStates.NUMBER_AFTER_INITIAL_ZERO;
40617
+ continue;
40618
+ }
40619
+ if (n === charset.HYPHEN_MINUS) {
40620
+ this.bufferedNumber.reset();
40621
+ this.bufferedNumber.appendChar(n);
40622
+ this.state = TokenizerStates.NUMBER_AFTER_INITIAL_MINUS;
40623
+ continue;
40624
+ }
40625
+ break;
40626
+ case TokenizerStates.STRING_DEFAULT:
40627
+ if (n === charset.QUOTATION_MARK) {
40628
+ const string = this.bufferedString.toString();
40629
+ this.state = TokenizerStates.START;
40630
+ this.onToken({
40631
+ token: TokenType.STRING,
40632
+ value: string,
40633
+ offset: this.offset,
40634
+ });
40635
+ this.offset +=
40636
+ this.escapedCharsByteLength +
40637
+ this.bufferedString.byteLength +
40638
+ 1;
40639
+ continue;
40640
+ }
40641
+ if (n === charset.REVERSE_SOLIDUS) {
40642
+ this.state = TokenizerStates.STRING_AFTER_BACKSLASH;
40643
+ continue;
40644
+ }
40645
+ if (n >= 128) {
40646
+ if (n >= 194 && n <= 223) {
40647
+ this.bytes_in_sequence = 2;
40648
+ }
40649
+ else if (n <= 239) {
40650
+ this.bytes_in_sequence = 3;
40651
+ }
40652
+ else {
40653
+ this.bytes_in_sequence = 4;
40654
+ }
40655
+ if (this.bytes_in_sequence <= buffer.length - i) {
40656
+ this.bufferedString.appendBuf(buffer, i, i + this.bytes_in_sequence);
40657
+ i += this.bytes_in_sequence - 1;
40658
+ continue;
40659
+ }
40660
+ this.bytes_remaining = i + this.bytes_in_sequence - buffer.length;
40661
+ this.char_split_buffer.set(buffer.subarray(i));
40662
+ i = buffer.length - 1;
40663
+ this.state = TokenizerStates.STRING_INCOMPLETE_CHAR;
40664
+ continue;
40665
+ }
40666
+ if (n >= charset.SPACE) {
40667
+ this.bufferedString.appendChar(n);
40668
+ continue;
40669
+ }
40670
+ break;
40671
+ case TokenizerStates.STRING_INCOMPLETE_CHAR:
40672
+ this.char_split_buffer.set(buffer.subarray(i, i + this.bytes_remaining), this.bytes_in_sequence - this.bytes_remaining);
40673
+ this.bufferedString.appendBuf(this.char_split_buffer, 0, this.bytes_in_sequence);
40674
+ i = this.bytes_remaining - 1;
40675
+ this.state = TokenizerStates.STRING_DEFAULT;
40676
+ continue;
40677
+ case TokenizerStates.STRING_AFTER_BACKSLASH:
40678
+ const controlChar = escapedSequences[n];
40679
+ if (controlChar) {
40680
+ this.bufferedString.appendChar(controlChar);
40681
+ this.escapedCharsByteLength += 1;
40682
+ this.state = TokenizerStates.STRING_DEFAULT;
40683
+ continue;
40684
+ }
40685
+ if (n === charset.LATIN_SMALL_LETTER_U) {
40686
+ this.unicode = "";
40687
+ this.state = TokenizerStates.STRING_UNICODE_DIGIT_1;
40688
+ continue;
40689
+ }
40690
+ break;
40691
+ case TokenizerStates.STRING_UNICODE_DIGIT_1:
40692
+ case TokenizerStates.STRING_UNICODE_DIGIT_2:
40693
+ case TokenizerStates.STRING_UNICODE_DIGIT_3:
40694
+ if ((n >= charset.DIGIT_ZERO && n <= charset.DIGIT_NINE) ||
40695
+ (n >= charset.LATIN_CAPITAL_LETTER_A &&
40696
+ n <= charset.LATIN_CAPITAL_LETTER_F) ||
40697
+ (n >= charset.LATIN_SMALL_LETTER_A &&
40698
+ n <= charset.LATIN_SMALL_LETTER_F)) {
40699
+ this.unicode += String.fromCharCode(n);
40700
+ this.state += 1;
40701
+ continue;
40702
+ }
40703
+ break;
40704
+ case TokenizerStates.STRING_UNICODE_DIGIT_4:
40705
+ if ((n >= charset.DIGIT_ZERO && n <= charset.DIGIT_NINE) ||
40706
+ (n >= charset.LATIN_CAPITAL_LETTER_A &&
40707
+ n <= charset.LATIN_CAPITAL_LETTER_F) ||
40708
+ (n >= charset.LATIN_SMALL_LETTER_A &&
40709
+ n <= charset.LATIN_SMALL_LETTER_F)) {
40710
+ const intVal = parseInt(this.unicode + String.fromCharCode(n), 16);
40711
+ let unicodeString;
40712
+ if (this.highSurrogate === undefined) {
40713
+ if (intVal >= 0xd800 && intVal <= 0xdbff) {
40714
+ this.highSurrogate = intVal;
40715
+ this.state = TokenizerStates.STRING_DEFAULT;
40716
+ continue;
40717
+ }
40718
+ else {
40719
+ unicodeString = String.fromCharCode(intVal);
40720
+ }
40721
+ }
40722
+ else {
40723
+ if (intVal >= 0xdc00 && intVal <= 0xdfff) {
40724
+ unicodeString = String.fromCharCode(this.highSurrogate, intVal);
40725
+ }
40726
+ else {
40727
+ unicodeString = String.fromCharCode(this.highSurrogate);
40728
+ }
40729
+ this.highSurrogate = undefined;
40730
+ }
40731
+ const unicodeBuffer = this.encoder.encode(unicodeString);
40732
+ this.bufferedString.appendBuf(unicodeBuffer);
40733
+ this.escapedCharsByteLength += 6 - unicodeBuffer.byteLength;
40734
+ this.state = TokenizerStates.STRING_DEFAULT;
40735
+ continue;
40736
+ }
40737
+ break;
40738
+ case TokenizerStates.NUMBER_AFTER_INITIAL_MINUS:
40739
+ if (n === charset.DIGIT_ZERO) {
40740
+ this.bufferedNumber.appendChar(n);
40741
+ this.state = TokenizerStates.NUMBER_AFTER_INITIAL_ZERO;
40742
+ continue;
40743
+ }
40744
+ if (n >= charset.DIGIT_ONE && n <= charset.DIGIT_NINE) {
40745
+ this.bufferedNumber.appendChar(n);
40746
+ this.state = TokenizerStates.NUMBER_AFTER_INITIAL_NON_ZERO;
40747
+ continue;
40748
+ }
40749
+ break;
40750
+ case TokenizerStates.NUMBER_AFTER_INITIAL_ZERO:
40751
+ if (n === charset.FULL_STOP) {
40752
+ this.bufferedNumber.appendChar(n);
40753
+ this.state = TokenizerStates.NUMBER_AFTER_FULL_STOP;
40754
+ continue;
40755
+ }
40756
+ if (n === charset.LATIN_SMALL_LETTER_E ||
40757
+ n === charset.LATIN_CAPITAL_LETTER_E) {
40758
+ this.bufferedNumber.appendChar(n);
40759
+ this.state = TokenizerStates.NUMBER_AFTER_E;
40760
+ continue;
40761
+ }
40762
+ i -= 1;
40763
+ this.state = TokenizerStates.START;
40764
+ this.emitNumber();
40765
+ continue;
40766
+ case TokenizerStates.NUMBER_AFTER_INITIAL_NON_ZERO:
40767
+ if (n >= charset.DIGIT_ZERO && n <= charset.DIGIT_NINE) {
40768
+ this.bufferedNumber.appendChar(n);
40769
+ continue;
40770
+ }
40771
+ if (n === charset.FULL_STOP) {
40772
+ this.bufferedNumber.appendChar(n);
40773
+ this.state = TokenizerStates.NUMBER_AFTER_FULL_STOP;
40774
+ continue;
40775
+ }
40776
+ if (n === charset.LATIN_SMALL_LETTER_E ||
40777
+ n === charset.LATIN_CAPITAL_LETTER_E) {
40778
+ this.bufferedNumber.appendChar(n);
40779
+ this.state = TokenizerStates.NUMBER_AFTER_E;
40780
+ continue;
40781
+ }
40782
+ i -= 1;
40783
+ this.state = TokenizerStates.START;
40784
+ this.emitNumber();
40785
+ continue;
40786
+ case TokenizerStates.NUMBER_AFTER_FULL_STOP:
40787
+ if (n >= charset.DIGIT_ZERO && n <= charset.DIGIT_NINE) {
40788
+ this.bufferedNumber.appendChar(n);
40789
+ this.state = TokenizerStates.NUMBER_AFTER_DECIMAL;
40790
+ continue;
40791
+ }
40792
+ break;
40793
+ case TokenizerStates.NUMBER_AFTER_DECIMAL:
40794
+ if (n >= charset.DIGIT_ZERO && n <= charset.DIGIT_NINE) {
40795
+ this.bufferedNumber.appendChar(n);
40796
+ continue;
40797
+ }
40798
+ if (n === charset.LATIN_SMALL_LETTER_E ||
40799
+ n === charset.LATIN_CAPITAL_LETTER_E) {
40800
+ this.bufferedNumber.appendChar(n);
40801
+ this.state = TokenizerStates.NUMBER_AFTER_E;
40802
+ continue;
40803
+ }
40804
+ i -= 1;
40805
+ this.state = TokenizerStates.START;
40806
+ this.emitNumber();
40807
+ continue;
40808
+ case TokenizerStates.NUMBER_AFTER_E:
40809
+ if (n === charset.PLUS_SIGN || n === charset.HYPHEN_MINUS) {
40810
+ this.bufferedNumber.appendChar(n);
40811
+ this.state = TokenizerStates.NUMBER_AFTER_E_AND_SIGN;
40812
+ continue;
40813
+ }
40814
+ case TokenizerStates.NUMBER_AFTER_E_AND_SIGN:
40815
+ if (n >= charset.DIGIT_ZERO && n <= charset.DIGIT_NINE) {
40816
+ this.bufferedNumber.appendChar(n);
40817
+ this.state = TokenizerStates.NUMBER_AFTER_E_AND_DIGIT;
40818
+ continue;
40819
+ }
40820
+ break;
40821
+ case TokenizerStates.NUMBER_AFTER_E_AND_DIGIT:
40822
+ if (n >= charset.DIGIT_ZERO && n <= charset.DIGIT_NINE) {
40823
+ this.bufferedNumber.appendChar(n);
40824
+ continue;
40825
+ }
40826
+ i -= 1;
40827
+ this.state = TokenizerStates.START;
40828
+ this.emitNumber();
40829
+ continue;
40830
+ case TokenizerStates.TRUE1:
40831
+ if (n === charset.LATIN_SMALL_LETTER_R) {
40832
+ this.state = TokenizerStates.TRUE2;
40833
+ continue;
40834
+ }
40835
+ break;
40836
+ case TokenizerStates.TRUE2:
40837
+ if (n === charset.LATIN_SMALL_LETTER_U) {
40838
+ this.state = TokenizerStates.TRUE3;
40839
+ continue;
40840
+ }
40841
+ break;
40842
+ case TokenizerStates.TRUE3:
40843
+ if (n === charset.LATIN_SMALL_LETTER_E) {
40844
+ this.state = TokenizerStates.START;
40845
+ this.onToken({
40846
+ token: TokenType.TRUE,
40847
+ value: true,
40848
+ offset: this.offset,
40849
+ });
40850
+ this.offset += 3;
40851
+ continue;
40852
+ }
40853
+ break;
40854
+ case TokenizerStates.FALSE1:
40855
+ if (n === charset.LATIN_SMALL_LETTER_A) {
40856
+ this.state = TokenizerStates.FALSE2;
40857
+ continue;
40858
+ }
40859
+ break;
40860
+ case TokenizerStates.FALSE2:
40861
+ if (n === charset.LATIN_SMALL_LETTER_L) {
40862
+ this.state = TokenizerStates.FALSE3;
40863
+ continue;
40864
+ }
40865
+ break;
40866
+ case TokenizerStates.FALSE3:
40867
+ if (n === charset.LATIN_SMALL_LETTER_S) {
40868
+ this.state = TokenizerStates.FALSE4;
40869
+ continue;
40870
+ }
40871
+ break;
40872
+ case TokenizerStates.FALSE4:
40873
+ if (n === charset.LATIN_SMALL_LETTER_E) {
40874
+ this.state = TokenizerStates.START;
40875
+ this.onToken({
40876
+ token: TokenType.FALSE,
40877
+ value: false,
40878
+ offset: this.offset,
40879
+ });
40880
+ this.offset += 4;
40881
+ continue;
40882
+ }
40883
+ break;
40884
+ case TokenizerStates.NULL1:
40885
+ if (n === charset.LATIN_SMALL_LETTER_U) {
40886
+ this.state = TokenizerStates.NULL2;
40887
+ continue;
40888
+ }
40889
+ break;
40890
+ case TokenizerStates.NULL2:
40891
+ if (n === charset.LATIN_SMALL_LETTER_L) {
40892
+ this.state = TokenizerStates.NULL3;
40893
+ continue;
40894
+ }
40895
+ break;
40896
+ case TokenizerStates.NULL3:
40897
+ if (n === charset.LATIN_SMALL_LETTER_L) {
40898
+ this.state = TokenizerStates.START;
40899
+ this.onToken({
40900
+ token: TokenType.NULL,
40901
+ value: null,
40902
+ offset: this.offset,
40903
+ });
40904
+ this.offset += 3;
40905
+ continue;
40906
+ }
40907
+ break;
40908
+ case TokenizerStates.SEPARATOR:
40909
+ this.separatorIndex += 1;
40910
+ if (!this.separatorBytes ||
40911
+ n !== this.separatorBytes[this.separatorIndex]) {
40912
+ break;
40913
+ }
40914
+ if (this.separatorIndex === this.separatorBytes.length - 1) {
40915
+ this.state = TokenizerStates.START;
40916
+ this.onToken({
40917
+ token: TokenType.SEPARATOR,
40918
+ value: this.separator,
40919
+ offset: this.offset + this.separatorIndex,
40920
+ });
40921
+ this.separatorIndex = 0;
40922
+ }
40923
+ continue;
40924
+ case TokenizerStates.BOM:
40925
+ if (n === this.bom[this.bomIndex]) {
40926
+ if (this.bomIndex === this.bom.length - 1) {
40927
+ this.state = TokenizerStates.START;
40928
+ this.bom = undefined;
40929
+ this.bomIndex = 0;
40930
+ continue;
40931
+ }
40932
+ this.bomIndex += 1;
40933
+ continue;
40934
+ }
40935
+ break;
40936
+ case TokenizerStates.ENDED:
40937
+ if (n === charset.SPACE ||
40938
+ n === charset.NEWLINE ||
40939
+ n === charset.CARRIAGE_RETURN ||
40940
+ n === charset.TAB) {
40941
+ continue;
40942
+ }
40943
+ }
40944
+ throw new TokenizerError(`Unexpected "${String.fromCharCode(n)}" at position "${i}" in state ${TokenizerStateToString(this.state)}`);
40945
+ }
40946
+ if (this.emitPartialTokens) {
40947
+ switch (this.state) {
40948
+ case TokenizerStates.TRUE1:
40949
+ case TokenizerStates.TRUE2:
40950
+ case TokenizerStates.TRUE3:
40951
+ this.onToken({
40952
+ token: TokenType.TRUE,
40953
+ value: true,
40954
+ offset: this.offset,
40955
+ partial: true,
40956
+ });
40957
+ break;
40958
+ case TokenizerStates.FALSE1:
40959
+ case TokenizerStates.FALSE2:
40960
+ case TokenizerStates.FALSE3:
40961
+ case TokenizerStates.FALSE4:
40962
+ this.onToken({
40963
+ token: TokenType.FALSE,
40964
+ value: false,
40965
+ offset: this.offset,
40966
+ partial: true,
40967
+ });
40968
+ break;
40969
+ case TokenizerStates.NULL1:
40970
+ case TokenizerStates.NULL2:
40971
+ case TokenizerStates.NULL3:
40972
+ this.onToken({
40973
+ token: TokenType.NULL,
40974
+ value: null,
40975
+ offset: this.offset,
40976
+ partial: true,
40977
+ });
40978
+ break;
40979
+ case TokenizerStates.STRING_DEFAULT: {
40980
+ const string = this.bufferedString.toString();
40981
+ this.onToken({
40982
+ token: TokenType.STRING,
40983
+ value: string,
40984
+ offset: this.offset,
40985
+ partial: true,
40986
+ });
40987
+ break;
40988
+ }
40989
+ case TokenizerStates.NUMBER_AFTER_INITIAL_ZERO:
40990
+ case TokenizerStates.NUMBER_AFTER_INITIAL_NON_ZERO:
40991
+ case TokenizerStates.NUMBER_AFTER_DECIMAL:
40992
+ case TokenizerStates.NUMBER_AFTER_E_AND_DIGIT:
40993
+ try {
40994
+ this.onToken({
40995
+ token: TokenType.NUMBER,
40996
+ value: this.parseNumber(this.bufferedNumber.toString()),
40997
+ offset: this.offset,
40998
+ partial: true,
40999
+ });
41000
+ }
41001
+ catch (_a) {
41002
+ }
41003
+ }
41004
+ }
41005
+ }
41006
+ catch (err) {
41007
+ this.error(err);
41008
+ }
41009
+ }
41010
+ emitNumber() {
41011
+ this.onToken({
41012
+ token: TokenType.NUMBER,
41013
+ value: this.parseNumber(this.bufferedNumber.toString()),
41014
+ offset: this.offset,
41015
+ });
41016
+ this.offset += this.bufferedNumber.byteLength - 1;
41017
+ }
41018
+ parseNumber(numberStr) {
41019
+ return Number(numberStr);
41020
+ }
41021
+ error(err) {
41022
+ if (this.state !== TokenizerStates.ENDED) {
41023
+ this.state = TokenizerStates.ERROR;
41024
+ }
41025
+ this.onError(err);
41026
+ }
41027
+ end() {
41028
+ switch (this.state) {
41029
+ case TokenizerStates.NUMBER_AFTER_INITIAL_ZERO:
41030
+ case TokenizerStates.NUMBER_AFTER_INITIAL_NON_ZERO:
41031
+ case TokenizerStates.NUMBER_AFTER_DECIMAL:
41032
+ case TokenizerStates.NUMBER_AFTER_E_AND_DIGIT:
41033
+ this.state = TokenizerStates.ENDED;
41034
+ this.emitNumber();
41035
+ this.onEnd();
41036
+ break;
41037
+ case TokenizerStates.BOM_OR_START:
41038
+ case TokenizerStates.START:
41039
+ case TokenizerStates.ERROR:
41040
+ case TokenizerStates.SEPARATOR:
41041
+ this.state = TokenizerStates.ENDED;
41042
+ this.onEnd();
41043
+ break;
41044
+ default:
41045
+ this.error(new TokenizerError(`Tokenizer ended in the middle of a token (state: ${TokenizerStateToString(this.state)}). Either not all the data was received or the data was invalid.`));
41046
+ }
41047
+ }
41048
+ onToken(parsedToken) {
41049
+ throw new TokenizerError('Can\'t emit tokens before the "onToken" callback has been set up.');
41050
+ }
41051
+ onError(err) {
41052
+ throw err;
41053
+ }
41054
+ onEnd() {
41055
+ }
41056
+ }
41057
+
41058
+ var TokenParserMode;
41059
+ (function (TokenParserMode) {
41060
+ TokenParserMode[TokenParserMode["OBJECT"] = 0] = "OBJECT";
41061
+ TokenParserMode[TokenParserMode["ARRAY"] = 1] = "ARRAY";
41062
+ })(TokenParserMode || (TokenParserMode = {}));
41063
+
41064
+ var TokenParserState;
41065
+ (function (TokenParserState) {
41066
+ TokenParserState[TokenParserState["VALUE"] = 0] = "VALUE";
41067
+ TokenParserState[TokenParserState["KEY"] = 1] = "KEY";
41068
+ TokenParserState[TokenParserState["COLON"] = 2] = "COLON";
41069
+ TokenParserState[TokenParserState["COMMA"] = 3] = "COMMA";
41070
+ TokenParserState[TokenParserState["ENDED"] = 4] = "ENDED";
41071
+ TokenParserState[TokenParserState["ERROR"] = 5] = "ERROR";
41072
+ TokenParserState[TokenParserState["SEPARATOR"] = 6] = "SEPARATOR";
41073
+ })(TokenParserState || (TokenParserState = {}));
41074
+ function TokenParserStateToString(state) {
41075
+ return ["VALUE", "KEY", "COLON", "COMMA", "ENDED", "ERROR", "SEPARATOR"][state];
41076
+ }
41077
+ const defaultOpts = {
41078
+ paths: undefined,
41079
+ keepStack: true,
41080
+ separator: undefined,
41081
+ emitPartialValues: false,
41082
+ };
41083
+ class TokenParserError extends Error {
41084
+ constructor(message) {
41085
+ super(message);
41086
+ Object.setPrototypeOf(this, TokenParserError.prototype);
41087
+ }
41088
+ }
41089
+ class TokenParser {
41090
+ constructor(opts) {
41091
+ this.state = TokenParserState.VALUE;
41092
+ this.mode = undefined;
41093
+ this.key = undefined;
41094
+ this.value = undefined;
41095
+ this.stack = [];
41096
+ opts = Object.assign(Object.assign({}, defaultOpts), opts);
41097
+ if (opts.paths) {
41098
+ this.paths = opts.paths.map((path) => {
41099
+ if (path === undefined || path === "$*")
41100
+ return undefined;
41101
+ if (!path.startsWith("$"))
41102
+ throw new TokenParserError(`Invalid selector "${path}". Should start with "$".`);
41103
+ const pathParts = path.split(".").slice(1);
41104
+ if (pathParts.includes(""))
41105
+ throw new TokenParserError(`Invalid selector "${path}". ".." syntax not supported.`);
41106
+ return pathParts;
41107
+ });
41108
+ }
41109
+ this.keepStack = opts.keepStack || false;
41110
+ this.separator = opts.separator;
41111
+ if (!opts.emitPartialValues) {
41112
+ this.emitPartial = () => { };
41113
+ }
41114
+ }
41115
+ shouldEmit() {
41116
+ if (!this.paths)
41117
+ return true;
41118
+ return this.paths.some((path) => {
41119
+ var _a;
41120
+ if (path === undefined)
41121
+ return true;
41122
+ if (path.length !== this.stack.length)
41123
+ return false;
41124
+ for (let i = 0; i < path.length - 1; i++) {
41125
+ const selector = path[i];
41126
+ const key = this.stack[i + 1].key;
41127
+ if (selector === "*")
41128
+ continue;
41129
+ if (selector !== (key === null || key === void 0 ? void 0 : key.toString()))
41130
+ return false;
41131
+ }
41132
+ const selector = path[path.length - 1];
41133
+ if (selector === "*")
41134
+ return true;
41135
+ return selector === ((_a = this.key) === null || _a === void 0 ? void 0 : _a.toString());
41136
+ });
41137
+ }
41138
+ push() {
41139
+ this.stack.push({
41140
+ key: this.key,
41141
+ value: this.value,
41142
+ mode: this.mode,
41143
+ emit: this.shouldEmit(),
41144
+ });
41145
+ }
41146
+ pop() {
41147
+ const value = this.value;
41148
+ let emit;
41149
+ ({
41150
+ key: this.key,
41151
+ value: this.value,
41152
+ mode: this.mode,
41153
+ emit,
41154
+ } = this.stack.pop());
41155
+ this.state =
41156
+ this.mode !== undefined ? TokenParserState.COMMA : TokenParserState.VALUE;
41157
+ this.emit(value, emit);
41158
+ }
41159
+ emit(value, emit) {
41160
+ if (!this.keepStack &&
41161
+ this.value &&
41162
+ this.stack.every((item) => !item.emit)) {
41163
+ delete this.value[this.key];
41164
+ }
41165
+ if (emit) {
41166
+ this.onValue({
41167
+ value: value,
41168
+ key: this.key,
41169
+ parent: this.value,
41170
+ stack: this.stack,
41171
+ });
41172
+ }
41173
+ if (this.stack.length === 0) {
41174
+ if (this.separator) {
41175
+ this.state = TokenParserState.SEPARATOR;
41176
+ }
41177
+ else if (this.separator === undefined) {
41178
+ this.end();
41179
+ }
41180
+ }
41181
+ }
41182
+ emitPartial(value) {
41183
+ if (!this.shouldEmit())
41184
+ return;
41185
+ if (this.state === TokenParserState.KEY) {
41186
+ this.onValue({
41187
+ value: undefined,
41188
+ key: value,
41189
+ parent: this.value,
41190
+ stack: this.stack,
41191
+ partial: true,
41192
+ });
41193
+ return;
40149
41194
  }
41195
+ this.onValue({
41196
+ value: value,
41197
+ key: this.key,
41198
+ parent: this.value,
41199
+ stack: this.stack,
41200
+ partial: true,
41201
+ });
41202
+ }
41203
+ get isEnded() {
41204
+ return this.state === TokenParserState.ENDED;
41205
+ }
41206
+ write({ token, value, partial, }) {
41207
+ try {
41208
+ if (partial) {
41209
+ this.emitPartial(value);
41210
+ return;
41211
+ }
41212
+ if (this.state === TokenParserState.VALUE) {
41213
+ if (token === TokenType.STRING ||
41214
+ token === TokenType.NUMBER ||
41215
+ token === TokenType.TRUE ||
41216
+ token === TokenType.FALSE ||
41217
+ token === TokenType.NULL) {
41218
+ if (this.mode === TokenParserMode.OBJECT) {
41219
+ this.value[this.key] = value;
41220
+ this.state = TokenParserState.COMMA;
41221
+ }
41222
+ else if (this.mode === TokenParserMode.ARRAY) {
41223
+ this.value.push(value);
41224
+ this.state = TokenParserState.COMMA;
41225
+ }
41226
+ this.emit(value, this.shouldEmit());
41227
+ return;
41228
+ }
41229
+ if (token === TokenType.LEFT_BRACE) {
41230
+ this.push();
41231
+ if (this.mode === TokenParserMode.OBJECT) {
41232
+ this.value = this.value[this.key] = {};
41233
+ }
41234
+ else if (this.mode === TokenParserMode.ARRAY) {
41235
+ const val = {};
41236
+ this.value.push(val);
41237
+ this.value = val;
41238
+ }
41239
+ else {
41240
+ this.value = {};
41241
+ }
41242
+ this.mode = TokenParserMode.OBJECT;
41243
+ this.state = TokenParserState.KEY;
41244
+ this.key = undefined;
41245
+ this.emitPartial();
41246
+ return;
41247
+ }
41248
+ if (token === TokenType.LEFT_BRACKET) {
41249
+ this.push();
41250
+ if (this.mode === TokenParserMode.OBJECT) {
41251
+ this.value = this.value[this.key] = [];
41252
+ }
41253
+ else if (this.mode === TokenParserMode.ARRAY) {
41254
+ const val = [];
41255
+ this.value.push(val);
41256
+ this.value = val;
41257
+ }
41258
+ else {
41259
+ this.value = [];
41260
+ }
41261
+ this.mode = TokenParserMode.ARRAY;
41262
+ this.state = TokenParserState.VALUE;
41263
+ this.key = 0;
41264
+ this.emitPartial();
41265
+ return;
41266
+ }
41267
+ if (this.mode === TokenParserMode.ARRAY &&
41268
+ token === TokenType.RIGHT_BRACKET &&
41269
+ this.value.length === 0) {
41270
+ this.pop();
41271
+ return;
41272
+ }
41273
+ }
41274
+ if (this.state === TokenParserState.KEY) {
41275
+ if (token === TokenType.STRING) {
41276
+ this.key = value;
41277
+ this.state = TokenParserState.COLON;
41278
+ this.emitPartial();
41279
+ return;
41280
+ }
41281
+ if (token === TokenType.RIGHT_BRACE &&
41282
+ Object.keys(this.value).length === 0) {
41283
+ this.pop();
41284
+ return;
41285
+ }
41286
+ }
41287
+ if (this.state === TokenParserState.COLON) {
41288
+ if (token === TokenType.COLON) {
41289
+ this.state = TokenParserState.VALUE;
41290
+ return;
41291
+ }
41292
+ }
41293
+ if (this.state === TokenParserState.COMMA) {
41294
+ if (token === TokenType.COMMA) {
41295
+ if (this.mode === TokenParserMode.ARRAY) {
41296
+ this.state = TokenParserState.VALUE;
41297
+ this.key += 1;
41298
+ return;
41299
+ }
41300
+ if (this.mode === TokenParserMode.OBJECT) {
41301
+ this.state = TokenParserState.KEY;
41302
+ return;
41303
+ }
41304
+ }
41305
+ if ((token === TokenType.RIGHT_BRACE &&
41306
+ this.mode === TokenParserMode.OBJECT) ||
41307
+ (token === TokenType.RIGHT_BRACKET &&
41308
+ this.mode === TokenParserMode.ARRAY)) {
41309
+ this.pop();
41310
+ return;
41311
+ }
41312
+ }
41313
+ if (this.state === TokenParserState.SEPARATOR) {
41314
+ if (token === TokenType.SEPARATOR && value === this.separator) {
41315
+ this.state = TokenParserState.VALUE;
41316
+ return;
41317
+ }
41318
+ }
41319
+ if (token === TokenType.SEPARATOR &&
41320
+ this.state !== TokenParserState.SEPARATOR &&
41321
+ Array.from(value)
41322
+ .map((n) => n.charCodeAt(0))
41323
+ .every((n) => n === charset.SPACE ||
41324
+ n === charset.NEWLINE ||
41325
+ n === charset.CARRIAGE_RETURN ||
41326
+ n === charset.TAB)) {
41327
+ return;
41328
+ }
41329
+ throw new TokenParserError(`Unexpected ${TokenType[token]} (${JSON.stringify(value)}) in state ${TokenParserStateToString(this.state)}`);
41330
+ }
41331
+ catch (err) {
41332
+ this.error(err);
41333
+ }
41334
+ }
41335
+ error(err) {
41336
+ if (this.state !== TokenParserState.ENDED) {
41337
+ this.state = TokenParserState.ERROR;
41338
+ }
41339
+ this.onError(err);
41340
+ }
41341
+ end() {
41342
+ if ((this.state !== TokenParserState.VALUE &&
41343
+ this.state !== TokenParserState.SEPARATOR) ||
41344
+ this.stack.length > 0) {
41345
+ this.error(new Error(`Parser ended in mid-parsing (state: ${TokenParserStateToString(this.state)}). Either not all the data was received or the data was invalid.`));
41346
+ }
41347
+ else {
41348
+ this.state = TokenParserState.ENDED;
41349
+ this.onEnd();
41350
+ }
41351
+ }
41352
+ onValue(parsedElementInfo) {
41353
+ throw new TokenParserError('Can\'t emit data before the "onValue" callback has been set up.');
41354
+ }
41355
+ onError(err) {
41356
+ throw err;
41357
+ }
41358
+ onEnd() {
41359
+ }
41360
+ }
41361
+
41362
+ class JSONParser {
41363
+ constructor(opts = {}) {
41364
+ this.tokenizer = new Tokenizer(opts);
41365
+ this.tokenParser = new TokenParser(opts);
41366
+ this.tokenizer.onToken = this.tokenParser.write.bind(this.tokenParser);
41367
+ this.tokenizer.onEnd = () => {
41368
+ if (!this.tokenParser.isEnded)
41369
+ this.tokenParser.end();
41370
+ };
41371
+ this.tokenParser.onError = this.tokenizer.error.bind(this.tokenizer);
41372
+ this.tokenParser.onEnd = () => {
41373
+ if (!this.tokenizer.isEnded)
41374
+ this.tokenizer.end();
41375
+ };
41376
+ }
41377
+ get isEnded() {
41378
+ return this.tokenizer.isEnded && this.tokenParser.isEnded;
41379
+ }
41380
+ write(input) {
41381
+ this.tokenizer.write(input);
41382
+ }
41383
+ end() {
41384
+ this.tokenizer.end();
41385
+ }
41386
+ set onToken(cb) {
41387
+ this.tokenizer.onToken = (parsedToken) => {
41388
+ cb(parsedToken);
41389
+ this.tokenParser.write(parsedToken);
41390
+ };
41391
+ }
41392
+ set onValue(cb) {
41393
+ this.tokenParser.onValue = cb;
41394
+ }
41395
+ set onError(cb) {
41396
+ this.tokenizer.onError = cb;
41397
+ }
41398
+ set onEnd(cb) {
41399
+ this.tokenParser.onEnd = () => {
41400
+ if (!this.tokenizer.isEnded)
41401
+ this.tokenizer.end();
41402
+ cb.call(this.tokenParser);
41403
+ };
41404
+ }
41405
+ }
41406
+
41407
+ class JSONStreamParser extends JSONParser {
41408
+ constructor(data) {
41409
+ super();
41410
+ this.onValue = ({ value, stack }) => {
41411
+ if (stack.length === 0)
41412
+ this.json = value;
41413
+ };
41414
+ if (data)
41415
+ this.write(data);
40150
41416
  }
40151
41417
  }
40152
41418
 
@@ -40255,13 +41521,13 @@ void main() {
40255
41521
  this.viewer.emitEvent({ type: "geometryprogress", data: progress, file });
40256
41522
  };
40257
41523
  const data = await loader.loadAsync(this.manager.fileURL, progress);
40258
- const extension = new GLTFBinaryExtension(data);
40259
- this.gltf = JSON.parse(extension.content);
40260
- this.glb = extension.body;
40261
- if (/\.glb$/i.test(this.manager.fileURL) && !this.glb) {
40262
- throw new Error("GLTFFileDynamicLoader: Binary buffer chunk not found or type not supported.");
41524
+ const binaryParser = new GLTFBinaryParser(data);
41525
+ const jsonParser = new JSONStreamParser(binaryParser.content);
41526
+ if (!jsonParser.json) {
41527
+ throw new Error("GLTFFileDynamicLoader: JSON content not found or invalid.");
40263
41528
  }
40264
- return this.gltf;
41529
+ this.glb = binaryParser.body;
41530
+ return jsonParser.json;
40265
41531
  },
40266
41532
  loadBinaryData: (ranges, uri = "") => {
40267
41533
  const loader = new RangesLoader();
@@ -40332,13 +41598,16 @@ void main() {
40332
41598
  });
40333
41599
  const loadController = {
40334
41600
  loadJson: async () => {
40335
- const progress = (progress) => {
41601
+ const jsonParser = new JSONStreamParser();
41602
+ const progress = (progress, chunk) => {
41603
+ jsonParser.write(chunk);
40336
41604
  this.viewer.emitEvent({ type: "geometryprogress", data: progress, file: model.file, model });
40337
41605
  };
40338
- const arrayBuffer = await model.downloadResource(model.database, progress, this.gltfLoader.getAbortController().signal);
40339
- const text = new TextDecoder().decode(arrayBuffer);
40340
- const json = JSON.parse(text);
40341
- return json;
41606
+ await model.downloadResource(model.database, progress, this.gltfLoader.getAbortController().signal);
41607
+ if (!jsonParser.json) {
41608
+ throw new Error("GLTFCloudDynamicLoader: JSON content not found or invalid.");
41609
+ }
41610
+ return jsonParser.json;
40342
41611
  },
40343
41612
  loadBinaryData: (requests) => {
40344
41613
  const ranges = requests.map((request) => ({
@@ -55588,10 +56857,8 @@ js: import "konva/skia-backend";
55588
56857
  if (model && typeof model.database === "string") {
55589
56858
  file = model.file;
55590
56859
  }
55591
- if (!model)
55592
- throw new Error(`Format not supported`);
55593
56860
  let format = params.format;
55594
- if (!format && typeof file["type"] === "string")
56861
+ if (!format && file && typeof file["type"] === "string")
55595
56862
  format = file["type"].split(".").pop();
55596
56863
  if (!format && typeof file === "string")
55597
56864
  format = file.split(".").pop();
@@ -55599,7 +56866,7 @@ js: import "konva/skia-backend";
55599
56866
  format = file.name.split(".").pop();
55600
56867
  const loader = loaders.createLoader(this, model, format);
55601
56868
  if (!loader)
55602
- throw new Error(`Format not supported`);
56869
+ throw new Error(`Format not supported (${format})`);
55603
56870
  this.loaders.push(loader);
55604
56871
  this.emitEvent({ type: "geometrystart", file, model });
55605
56872
  try {
@@ -55641,7 +56908,6 @@ js: import "konva/skia-backend";
55641
56908
  this.scene.clear();
55642
56909
  this.helpers.clear();
55643
56910
  this.extents.makeEmpty();
55644
- this.target.set(0, 0, 0);
55645
56911
  this.syncOptions();
55646
56912
  this.syncOverlay();
55647
56913
  this.emitEvent({ type: "clear" });
@@ -55757,7 +57023,7 @@ js: import "konva/skia-backend";
55757
57023
  const getVector3FromPoint3d = ({ x, y, z }) => new Vector3(x, y, z);
55758
57024
  const setOrthogonalCamera = (orthogonal_camera) => {
55759
57025
  if (orthogonal_camera) {
55760
- const extentsSize = this.extents.getBoundingSphere(new Sphere()).radius * 2;
57026
+ const extentsSize = this.extents.getSize(new Vector3()).length() || 1;
55761
57027
  const rendererSize = this.renderer.getSize(new Vector2());
55762
57028
  const aspectRatio = rendererSize.x / rendererSize.y;
55763
57029
  const camera = new OrthographicCamera();
@@ -55783,7 +57049,7 @@ js: import "konva/skia-backend";
55783
57049
  };
55784
57050
  const setPerspectiveCamera = (perspective_camera) => {
55785
57051
  if (perspective_camera) {
55786
- const extentsSize = this.extents.getBoundingSphere(new Sphere()).radius * 2;
57052
+ const extentsSize = this.extents.getSize(new Vector3()).length() || 1;
55787
57053
  const rendererSize = this.renderer.getSize(new Vector2());
55788
57054
  const aspectRatio = rendererSize.x / rendererSize.y;
55789
57055
  const camera = new PerspectiveCamera();