@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.
- package/dist/extensions/components/AxesHelperComponent.js +12 -11
- package/dist/extensions/components/AxesHelperComponent.js.map +1 -1
- package/dist/extensions/components/AxesHelperComponent.min.js +1 -1
- package/dist/extensions/components/AxesHelperComponent.module.js +12 -11
- package/dist/extensions/components/AxesHelperComponent.module.js.map +1 -1
- package/dist/extensions/components/GridHelperComponent.js +4 -6
- package/dist/extensions/components/GridHelperComponent.js.map +1 -1
- package/dist/extensions/components/GridHelperComponent.min.js +1 -1
- package/dist/extensions/components/GridHelperComponent.module.js +4 -6
- package/dist/extensions/components/GridHelperComponent.module.js.map +1 -1
- package/dist/extensions/components/LightHelperComponent.js +5 -5
- package/dist/extensions/components/LightHelperComponent.js.map +1 -1
- package/dist/extensions/components/LightHelperComponent.min.js +1 -1
- package/dist/extensions/components/LightHelperComponent.module.js +6 -6
- package/dist/extensions/components/LightHelperComponent.module.js.map +1 -1
- package/dist/viewer-three.js +1344 -78
- package/dist/viewer-three.js.map +1 -1
- package/dist/viewer-three.min.js +4 -4
- package/dist/viewer-three.module.js +98 -79
- package/dist/viewer-three.module.js.map +1 -1
- package/extensions/components/AxesHelperComponent.ts +13 -12
- package/extensions/components/GridHelperComponent.ts +4 -6
- package/extensions/components/LightHelperComponent.ts +6 -6
- package/lib/Viewer/commands/SetDefaultViewPosition.d.ts +1 -1
- package/lib/Viewer/loaders/GLTFBinaryParser.d.ts +11 -0
- package/lib/Viewer/loaders/GLTFFileDynamicLoader.d.ts +0 -1
- package/lib/Viewer/loaders/JSONStreamParser.d.ts +5 -0
- package/package.json +7 -5
- package/src/Viewer/Viewer.ts +4 -7
- package/src/Viewer/commands/SetDefaultViewPosition.ts +3 -3
- package/src/Viewer/commands/ZoomTo.ts +6 -6
- package/src/Viewer/components/CameraComponent.ts +3 -3
- package/src/Viewer/components/LightComponent.ts +5 -8
- package/src/Viewer/components/SelectionComponent.ts +3 -1
- package/src/Viewer/draggers/CuttingPlaneDragger.ts +6 -6
- package/src/Viewer/draggers/FlyDragger.ts +1 -1
- package/src/Viewer/draggers/MeasureLineDragger.ts +10 -7
- package/src/Viewer/draggers/WalkDragger.ts +1 -1
- package/src/Viewer/loaders/DynamicGltfLoader/GltfStructure.js +7 -1
- package/src/Viewer/loaders/{GLTFBinaryExtension.ts → GLTFBinaryParser.ts} +34 -29
- package/src/Viewer/loaders/GLTFCloudDynamicLoader.ts +10 -9
- package/src/Viewer/loaders/GLTFFileDynamicLoader.ts +9 -8
- package/src/Viewer/loaders/JSONStreamParser.ts +38 -0
- package/lib/Viewer/loaders/GLTFBinaryExtension.d.ts +0 -5
package/dist/viewer-three.js
CHANGED
|
@@ -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
|
|
33880
|
-
const
|
|
33881
|
-
const constant = -
|
|
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,
|
|
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(
|
|
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 (
|
|
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 (
|
|
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 =
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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.
|
|
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
|
|
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 *
|
|
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 =
|
|
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
|
-
|
|
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:
|
|
40109
|
-
class
|
|
40120
|
+
const BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4e4f534a, BIN: 0x004e4942 };
|
|
40121
|
+
class GLTFBinaryParser {
|
|
40110
40122
|
constructor(data) {
|
|
40111
|
-
const
|
|
40123
|
+
const dataView = new DataView(data, 0);
|
|
40112
40124
|
const textDecoder = new TextDecoder();
|
|
40113
|
-
const magic = textDecoder.decode(new Uint8Array(data.
|
|
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 =
|
|
40127
|
+
this.content = new Uint8Array(data);
|
|
40116
40128
|
return;
|
|
40117
40129
|
}
|
|
40118
|
-
|
|
40130
|
+
this.header = {
|
|
40119
40131
|
magic,
|
|
40120
|
-
version:
|
|
40121
|
-
length:
|
|
40132
|
+
version: dataView.getUint32(4, true),
|
|
40133
|
+
length: dataView.getUint32(8, true),
|
|
40122
40134
|
};
|
|
40123
|
-
if (header.
|
|
40124
|
-
throw new Error("
|
|
40125
|
-
}
|
|
40126
|
-
if (header.version < 2.0) {
|
|
40127
|
-
throw new Error("Legacy binary file detected.");
|
|
40128
|
-
}
|
|
40129
|
-
|
|
40130
|
-
|
|
40131
|
-
|
|
40132
|
-
|
|
40133
|
-
const
|
|
40134
|
-
|
|
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
|
-
|
|
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
|
-
|
|
40143
|
-
this.body = data.slice(byteOffset, byteOffset + chunkLength);
|
|
40151
|
+
this.body = data.slice(offset, offset + chunkLength);
|
|
40144
40152
|
}
|
|
40145
|
-
|
|
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
|
|
40259
|
-
|
|
40260
|
-
|
|
40261
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
40339
|
-
|
|
40340
|
-
|
|
40341
|
-
|
|
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.
|
|
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.
|
|
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();
|