@ifc-lite/bcf 2.0.1 → 3.0.0
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/README.md +12 -1
- package/dist/ids-camera.d.ts +115 -0
- package/dist/ids-camera.d.ts.map +1 -0
- package/dist/ids-camera.js +266 -0
- package/dist/ids-camera.js.map +1 -0
- package/dist/ids-reporter.d.ts +17 -13
- package/dist/ids-reporter.d.ts.map +1 -1
- package/dist/ids-reporter.js +32 -64
- package/dist/ids-reporter.js.map +1 -1
- package/dist/reader-components.d.ts +1 -1
- package/dist/reader-components.d.ts.map +1 -1
- package/dist/reader-components.js +49 -10
- package/dist/reader-components.js.map +1 -1
- package/dist/reader.js +28 -30
- package/dist/reader.js.map +1 -1
- package/dist/types.d.ts +30 -8
- package/dist/types.d.ts.map +1 -1
- package/dist/viewpoint.d.ts +10 -0
- package/dist/viewpoint.d.ts.map +1 -1
- package/dist/viewpoint.js +12 -0
- package/dist/viewpoint.js.map +1 -1
- package/dist/writer-camera.d.ts.map +1 -1
- package/dist/writer-camera.js +30 -1
- package/dist/writer-camera.js.map +1 -1
- package/dist/writer.d.ts.map +1 -1
- package/dist/writer.js +93 -79
- package/dist/writer.js.map +1 -1
- package/dist/xml-text.d.ts +62 -5
- package/dist/xml-text.d.ts.map +1 -1
- package/dist/xml-text.js +131 -8
- package/dist/xml-text.js.map +1 -1
- package/dist/xsd-required-string.d.ts +38 -0
- package/dist/xsd-required-string.d.ts.map +1 -0
- package/dist/xsd-required-string.js +158 -0
- package/dist/xsd-required-string.js.map +1 -0
- package/package.json +2 -2
package/dist/ids-reporter.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
4
|
import { generateUuid } from '@ifc-lite/encoding';
|
|
5
|
+
import { DEFAULT_ASPECT_RATIO, computeCameraFromBounds, requireAspectRatioOption, requireCamerasForVersion, unionBoundsForEveryKey, } from './ids-camera.js';
|
|
5
6
|
// ============================================================================
|
|
6
7
|
// Internal BCF helpers (avoiding index.js import to prevent jszip dependency)
|
|
7
8
|
// ============================================================================
|
|
@@ -68,7 +69,10 @@ const MAX_COMMENTS_PER_TOPIC = 50;
|
|
|
68
69
|
* @returns BCF project ready for writeBCF()
|
|
69
70
|
*/
|
|
70
71
|
export function createBCFFromIDSReport(report, options = {}) {
|
|
71
|
-
const { author = DEFAULT_AUTHOR, projectName, version = '2.1', topicGrouping = 'per-entity', includePassingEntities = false, failureTopicType = DEFAULT_FAILURE_TOPIC_TYPE, passTopicType = DEFAULT_PASS_TOPIC_TYPE, maxTopics = DEFAULT_MAX_TOPICS, failureColor = DEFAULT_FAILURE_COLOR, entityBounds, entitySnapshots, } = options;
|
|
72
|
+
const { author = DEFAULT_AUTHOR, projectName, version = '2.1', topicGrouping = 'per-entity', includePassingEntities = false, failureTopicType = DEFAULT_FAILURE_TOPIC_TYPE, passTopicType = DEFAULT_PASS_TOPIC_TYPE, maxTopics = DEFAULT_MAX_TOPICS, failureColor = DEFAULT_FAILURE_COLOR, aspectRatio: requestedAspectRatio = DEFAULT_ASPECT_RATIO, entityBounds, entitySnapshots, } = options;
|
|
73
|
+
// Checked here, where the caller set it, rather than left to writeBCF --
|
|
74
|
+
// which can only name a viewpoint GUID this file generated (#3849).
|
|
75
|
+
const aspectRatio = requireAspectRatioOption(requestedAspectRatio);
|
|
72
76
|
const project = createProject(projectName ?? report.title, version);
|
|
73
77
|
switch (topicGrouping) {
|
|
74
78
|
case 'per-entity':
|
|
@@ -79,6 +83,7 @@ export function createBCFFromIDSReport(report, options = {}) {
|
|
|
79
83
|
passTopicType,
|
|
80
84
|
maxTopics,
|
|
81
85
|
failureColor,
|
|
86
|
+
aspectRatio,
|
|
82
87
|
entityBounds,
|
|
83
88
|
entitySnapshots,
|
|
84
89
|
});
|
|
@@ -89,6 +94,7 @@ export function createBCFFromIDSReport(report, options = {}) {
|
|
|
89
94
|
failureTopicType,
|
|
90
95
|
maxTopics,
|
|
91
96
|
failureColor,
|
|
97
|
+
aspectRatio,
|
|
92
98
|
entityBounds,
|
|
93
99
|
entitySnapshots,
|
|
94
100
|
});
|
|
@@ -99,11 +105,15 @@ export function createBCFFromIDSReport(report, options = {}) {
|
|
|
99
105
|
failureTopicType,
|
|
100
106
|
maxTopics,
|
|
101
107
|
failureColor,
|
|
108
|
+
aspectRatio,
|
|
102
109
|
entityBounds,
|
|
103
110
|
entitySnapshots,
|
|
104
111
|
});
|
|
105
112
|
break;
|
|
106
113
|
}
|
|
114
|
+
// Refuse an unwritable 3.0 project here, where the caller can still see
|
|
115
|
+
// which option produced it, rather than leaving it to writeBCF (#3849).
|
|
116
|
+
requireCamerasForVersion(project);
|
|
107
117
|
return project;
|
|
108
118
|
}
|
|
109
119
|
/**
|
|
@@ -146,6 +156,13 @@ function addTruncationNoticeTopic(project, author, remaining, itemLabel) {
|
|
|
146
156
|
});
|
|
147
157
|
project.topics.set(topic.guid, topic);
|
|
148
158
|
}
|
|
159
|
+
// ============================================================================
|
|
160
|
+
// Per-entity grouping (default — recommended)
|
|
161
|
+
// ============================================================================
|
|
162
|
+
/** How `entityBounds` and `entitySnapshots` are keyed. */
|
|
163
|
+
function boundsKeyOf(entity) {
|
|
164
|
+
return `${entity.modelId}:${entity.expressId}`;
|
|
165
|
+
}
|
|
149
166
|
function buildTopicsPerEntity(project, report, opts) {
|
|
150
167
|
let topicCount = 0;
|
|
151
168
|
let qualifyingCount = 0;
|
|
@@ -189,10 +206,10 @@ function buildTopicsPerEntity(project, report, opts) {
|
|
|
189
206
|
// Viewpoint MUST be created first so comments can reference it via viewpointGuid
|
|
190
207
|
let viewpointGuid;
|
|
191
208
|
if (entity.globalId) {
|
|
192
|
-
const boundsKey =
|
|
209
|
+
const boundsKey = boundsKeyOf(entity);
|
|
193
210
|
const bounds = opts.entityBounds?.get(boundsKey);
|
|
194
211
|
const snapshot = opts.entitySnapshots?.get(boundsKey);
|
|
195
|
-
const viewpoint = buildEntityViewpoint(entity.globalId, isFailed ? opts.failureColor : undefined, bounds, snapshot);
|
|
212
|
+
const viewpoint = buildEntityViewpoint(entity.globalId, isFailed ? opts.failureColor : undefined, bounds, opts.aspectRatio, snapshot);
|
|
196
213
|
topic.viewpoints.push(viewpoint);
|
|
197
214
|
viewpointGuid = viewpoint.guid;
|
|
198
215
|
}
|
|
@@ -239,7 +256,7 @@ function buildTopicsPerSpecification(project, report, opts) {
|
|
|
239
256
|
.filter((g) => g !== undefined);
|
|
240
257
|
let viewpointGuid;
|
|
241
258
|
if (failedGuids.length > 0) {
|
|
242
|
-
const viewpoint = buildMultiEntityViewpoint(failedGuids, opts.failureColor);
|
|
259
|
+
const viewpoint = buildMultiEntityViewpoint(failedGuids, opts.failureColor, unionBoundsForEveryKey(failedEntities.map(boundsKeyOf), opts.entityBounds), opts.aspectRatio);
|
|
243
260
|
topic.viewpoints.push(viewpoint);
|
|
244
261
|
viewpointGuid = viewpoint.guid;
|
|
245
262
|
}
|
|
@@ -313,10 +330,10 @@ function buildTopicsPerRequirement(project, report, opts) {
|
|
|
313
330
|
// Viewpoint for single entity (must be first for comment linking)
|
|
314
331
|
let viewpointGuid;
|
|
315
332
|
if (entity.globalId) {
|
|
316
|
-
const boundsKey =
|
|
333
|
+
const boundsKey = boundsKeyOf(entity);
|
|
317
334
|
const bounds = opts.entityBounds?.get(boundsKey);
|
|
318
335
|
const snapshot = opts.entitySnapshots?.get(boundsKey);
|
|
319
|
-
const viewpoint = buildEntityViewpoint(entity.globalId, opts.failureColor, bounds, snapshot);
|
|
336
|
+
const viewpoint = buildEntityViewpoint(entity.globalId, opts.failureColor, bounds, opts.aspectRatio, snapshot);
|
|
320
337
|
topic.viewpoints.push(viewpoint);
|
|
321
338
|
viewpointGuid = viewpoint.guid;
|
|
322
339
|
}
|
|
@@ -387,61 +404,6 @@ function buildRequirementComment(req) {
|
|
|
387
404
|
return lines.join('\n');
|
|
388
405
|
}
|
|
389
406
|
// ============================================================================
|
|
390
|
-
// Helpers — Camera computation
|
|
391
|
-
// ============================================================================
|
|
392
|
-
/**
|
|
393
|
-
* Compute a BCF perspective camera from entity bounds.
|
|
394
|
-
*
|
|
395
|
-
* Bounds are in viewer coordinates (Y-up).
|
|
396
|
-
* BCF uses Z-up, so we convert:
|
|
397
|
-
* BCF.x = Viewer.x
|
|
398
|
-
* BCF.y = -Viewer.z
|
|
399
|
-
* BCF.z = Viewer.y
|
|
400
|
-
*
|
|
401
|
-
* Camera is placed at a southeast-isometric angle from the entity center,
|
|
402
|
-
* at a distance that frames the entity's bounding box with padding.
|
|
403
|
-
*/
|
|
404
|
-
function computeCameraFromBounds(bounds) {
|
|
405
|
-
// Center in viewer coords (Y-up)
|
|
406
|
-
const cx = (bounds.min.x + bounds.max.x) / 2;
|
|
407
|
-
const cy = (bounds.min.y + bounds.max.y) / 2;
|
|
408
|
-
const cz = (bounds.min.z + bounds.max.z) / 2;
|
|
409
|
-
// Max extent for framing distance
|
|
410
|
-
const sx = bounds.max.x - bounds.min.x;
|
|
411
|
-
const sy = bounds.max.y - bounds.min.y;
|
|
412
|
-
const sz = bounds.max.z - bounds.min.z;
|
|
413
|
-
const maxSize = Math.max(sx, sy, sz, 0.1); // Floor to avoid zero
|
|
414
|
-
// Camera distance: fit maxSize into 60deg FOV with 1.5x padding
|
|
415
|
-
const fovRad = (60 * Math.PI) / 180;
|
|
416
|
-
const distance = (maxSize / 2) / Math.tan(fovRad / 2) * 1.5;
|
|
417
|
-
// Southeast-isometric offset in viewer coords (Y-up):
|
|
418
|
-
// camera position = center + normalized(0.6, 0.5, 0.6) * distance
|
|
419
|
-
const offsetLen = Math.sqrt(0.6 * 0.6 + 0.5 * 0.5 + 0.6 * 0.6);
|
|
420
|
-
const ox = (0.6 / offsetLen) * distance;
|
|
421
|
-
const oy = (0.5 / offsetLen) * distance;
|
|
422
|
-
const oz = (0.6 / offsetLen) * distance;
|
|
423
|
-
const camX = cx + ox;
|
|
424
|
-
const camY = cy + oy;
|
|
425
|
-
const camZ = cz + oz;
|
|
426
|
-
// Direction: from camera to center (viewer coords)
|
|
427
|
-
const dx = cx - camX;
|
|
428
|
-
const dy = cy - camY;
|
|
429
|
-
const dz = cz - camZ;
|
|
430
|
-
const dLen = Math.sqrt(dx * dx + dy * dy + dz * dz);
|
|
431
|
-
// Convert to BCF coords (Z-up)
|
|
432
|
-
// Viewer (x, y, z) → BCF (x, -z, y)
|
|
433
|
-
return {
|
|
434
|
-
cameraViewPoint: { x: camX, y: -camZ, z: camY },
|
|
435
|
-
cameraDirection: {
|
|
436
|
-
x: dx / dLen,
|
|
437
|
-
y: -dz / dLen,
|
|
438
|
-
z: dy / dLen,
|
|
439
|
-
},
|
|
440
|
-
cameraUpVector: { x: 0, y: 0, z: 1 }, // BCF Z-up
|
|
441
|
-
fieldOfView: 60,
|
|
442
|
-
};
|
|
443
|
-
}
|
|
444
|
-
// ============================================================================
|
|
445
407
|
// Helpers — Viewpoint builders
|
|
446
408
|
// ============================================================================
|
|
447
409
|
/**
|
|
@@ -449,7 +411,7 @@ function computeCameraFromBounds(bounds) {
|
|
|
449
411
|
* Optionally includes a perspective camera computed from entity bounds,
|
|
450
412
|
* and a snapshot image if provided.
|
|
451
413
|
*/
|
|
452
|
-
function buildEntityViewpoint(globalId, failureColor, bounds, snapshot) {
|
|
414
|
+
function buildEntityViewpoint(globalId, failureColor, bounds, aspectRatio, snapshot) {
|
|
453
415
|
// Create independent component objects to prevent mutation side effects
|
|
454
416
|
const viewpoint = {
|
|
455
417
|
guid: generateUuid(),
|
|
@@ -471,7 +433,7 @@ function buildEntityViewpoint(globalId, failureColor, bounds, snapshot) {
|
|
|
471
433
|
}
|
|
472
434
|
// Compute camera from bounds (viewer Y-up → BCF Z-up)
|
|
473
435
|
if (bounds) {
|
|
474
|
-
viewpoint.perspectiveCamera = computeCameraFromBounds(bounds);
|
|
436
|
+
viewpoint.perspectiveCamera = computeCameraFromBounds(bounds, aspectRatio);
|
|
475
437
|
}
|
|
476
438
|
// Attach snapshot
|
|
477
439
|
if (snapshot) {
|
|
@@ -482,8 +444,11 @@ function buildEntityViewpoint(globalId, failureColor, bounds, snapshot) {
|
|
|
482
444
|
/**
|
|
483
445
|
* Build a viewpoint for multiple entities: all selected and visible, colored.
|
|
484
446
|
* Used by per-specification grouping where one topic covers many entities.
|
|
447
|
+
*
|
|
448
|
+
* `bounds` is the union of the entities' boxes (see `unionBounds`), so the
|
|
449
|
+
* camera frames the whole failing set rather than whichever entity came first.
|
|
485
450
|
*/
|
|
486
|
-
function buildMultiEntityViewpoint(globalIds, failureColor) {
|
|
451
|
+
function buildMultiEntityViewpoint(globalIds, failureColor, bounds, aspectRatio) {
|
|
487
452
|
// Use independent arrays per field to prevent mutation side effects
|
|
488
453
|
const viewpoint = {
|
|
489
454
|
guid: generateUuid(),
|
|
@@ -503,6 +468,9 @@ function buildMultiEntityViewpoint(globalIds, failureColor) {
|
|
|
503
468
|
},
|
|
504
469
|
];
|
|
505
470
|
}
|
|
471
|
+
if (bounds) {
|
|
472
|
+
viewpoint.perspectiveCamera = computeCameraFromBounds(bounds, aspectRatio);
|
|
473
|
+
}
|
|
506
474
|
return viewpoint;
|
|
507
475
|
}
|
|
508
476
|
//# sourceMappingURL=ids-reporter.js.map
|
package/dist/ids-reporter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ids-reporter.js","sourceRoot":"","sources":["../src/ids-reporter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ids-reporter.js","sourceRoot":"","sources":["../src/ids-reporter.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAsB/D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAKzB,+EAA+E;AAC/E,8EAA8E;AAC9E,+EAA+E;AAE/E,SAAS,aAAa,CAAC,IAAY,EAAE,OAAsB;IACzD,OAAO;QACL,OAAO;QACP,SAAS,EAAE,YAAY,EAAE;QACzB,IAAI;QACJ,MAAM,EAAE,IAAI,GAAG,EAAE;KAClB,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,IAQpB;IACC,OAAO;QACL,IAAI,EAAE,YAAY,EAAE;QACpB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,OAAO;QACpC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,MAAM;QACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACtC,cAAc,EAAE,IAAI,CAAC,MAAM;QAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;KACf,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,IAAiE;IACtF,OAAO;QACL,IAAI,EAAE,YAAY,EAAE;QACpB,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC9B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,aAAa,EAAE,IAAI,CAAC,aAAa;KAClC,CAAC;AACJ,CAAC;AA2HD,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,cAAc,GAAG,wBAAwB,CAAC;AAChD,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,qBAAqB,GAAG,UAAU,CAAC,CAAC,kBAAkB;AAC5D,MAAM,0BAA0B,GAAG,OAAO,CAAC;AAC3C,MAAM,uBAAuB,GAAG,MAAM,CAAC;AACvC;;;;GAIG;AACH,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAsB,EACtB,UAA+B,EAAE;IAEjC,MAAM,EACJ,MAAM,GAAG,cAAc,EACvB,WAAW,EACX,OAAO,GAAG,KAAK,EACf,aAAa,GAAG,YAAY,EAC5B,sBAAsB,GAAG,KAAK,EAC9B,gBAAgB,GAAG,0BAA0B,EAC7C,aAAa,GAAG,uBAAuB,EACvC,SAAS,GAAG,kBAAkB,EAC9B,YAAY,GAAG,qBAAqB,EACpC,WAAW,EAAE,oBAAoB,GAAG,oBAAoB,EACxD,YAAY,EACZ,eAAe,GAChB,GAAG,OAAO,CAAC;IAEZ,yEAAyE;IACzE,oEAAoE;IACpE,MAAM,WAAW,GAAG,wBAAwB,CAAC,oBAAoB,CAAC,CAAC;IAEnE,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAEpE,QAAQ,aAAa,EAAE,CAAC;QACtB,KAAK,YAAY;YACf,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE;gBACpC,MAAM;gBACN,sBAAsB;gBACtB,gBAAgB;gBAChB,aAAa;gBACb,SAAS;gBACT,YAAY;gBACZ,WAAW;gBACX,YAAY;gBACZ,eAAe;aAChB,CAAC,CAAC;YACH,MAAM;QACR,KAAK,mBAAmB;YACtB,2BAA2B,CAAC,OAAO,EAAE,MAAM,EAAE;gBAC3C,MAAM;gBACN,gBAAgB;gBAChB,SAAS;gBACT,YAAY;gBACZ,WAAW;gBACX,YAAY;gBACZ,eAAe;aAChB,CAAC,CAAC;YACH,MAAM;QACR,KAAK,iBAAiB;YACpB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE;gBACzC,MAAM;gBACN,gBAAgB;gBAChB,SAAS;gBACT,YAAY;gBACZ,WAAW;gBACX,YAAY;gBACZ,eAAe;aAChB,CAAC,CAAC;YACH,MAAM;IACV,CAAC;IAED,wEAAwE;IACxE,wEAAwE;IACxE,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAElC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,6BAA6B,CACpC,UAA8B,EAC9B,MAAc,EACd,gBAAwB;IAExB,MAAM,OAAO,GAAG,UAAU,CAAC,iBAAiB,EAAE,OAAO,IAAI,uCAAuC,CAAC;IACjG,OAAO,WAAW,CAAC;QACjB,KAAK,EAAE,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,mCAAmC;QAC1E,WAAW,EAAE,kBAAkB,UAAU,CAAC,aAAa,CAAC,IAAI,KAAK,UAAU,CAAC,aAAa,CAAC,WAAW,IAAI,EAAE,OAAO,OAAO,mCAAmC;QAC5J,MAAM;QACN,SAAS,EAAE,gBAAgB;QAC3B,WAAW,EAAE,MAAM;QACnB,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC;KAC9D,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,SAAS,wBAAwB,CAC/B,OAAmB,EACnB,MAAc,EACd,SAAiB,EACjB,SAAiB;IAEjB,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO;IAC3B,MAAM,KAAK,GAAG,WAAW,CAAC;QACxB,KAAK,EAAE,WAAW,SAAS,SAAS,SAAS,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,2BAA2B;QACrG,WAAW,EAAE,4CAA4C,SAAS,0CAA0C,SAAS,eAAe,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,8BAA8B;QAChN,MAAM;QACN,SAAS,EAAE,MAAM;QACjB,WAAW,EAAE,MAAM;QACnB,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC;KAC7B,CAAC,CAAC;IACH,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,+EAA+E;AAC/E,8CAA8C;AAC9C,+EAA+E;AAE/E,0DAA0D;AAC1D,SAAS,WAAW,CAAC,MAA4B;IAC/C,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;AACjD,CAAC;AAcD,SAAS,oBAAoB,CAC3B,OAAmB,EACnB,MAAsB,EACtB,IAAkB;IAElB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;QACrD,IAAI,UAAU,CAAC,MAAM,KAAK,gBAAgB;YAAE,SAAS;QAErD,gEAAgE;QAChE,oEAAoE;QACpE,+CAA+C;QAC/C,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1E,eAAe,EAAE,CAAC;YAClB,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,6BAA6B,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAC5F,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACtC,UAAU,EAAE,CAAC;YACf,CAAC;YACD,SAAS;QACX,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;YAC9C,yCAAyC;YACzC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,sBAAsB;gBAAE,SAAS;YAE5D,eAAe,EAAE,CAAC;YAClB,IAAI,UAAU,IAAI,IAAI,CAAC,SAAS;gBAAE,SAAS;YAE3C,MAAM,UAAU,GAAG,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;YAC9E,MAAM,SAAS,GAAG,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,gBAAgB,CAAC,CAAC,MAAM,CAAC;YAE9F,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YAChE,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;YAEhC,cAAc;YACd,MAAM,KAAK,GAAG,WAAW,CAAC;gBACxB,KAAK,EAAE,GAAG,MAAM,CAAC,UAAU,KAAK,WAAW,EAAE;gBAC7C,WAAW,EAAE,sBAAsB,CACjC,UAAU,EACV,MAAM,EACN,UAAU,CAAC,MAAM,EACjB,SAAS,CACV;gBACD,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,uBAAuB,CAAC;gBAC7F,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;gBACzC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;gBACtF,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC;aAC/C,CAAC,CAAC;YAEH,iFAAiF;YACjF,iFAAiF;YACjF,IAAI,aAAiC,CAAC;YACtC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;gBACtC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;gBACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;gBACtD,MAAM,SAAS,GAAG,oBAAoB,CACpC,MAAM,CAAC,QAAQ,EACf,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EACxC,MAAM,EACN,IAAI,CAAC,WAAW,EAChB,QAAQ,CACT,CAAC;gBACF,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACjC,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC;YACjC,CAAC;YAED,gEAAgE;YAChE,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,aAAa,CAAC;oBAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,OAAO,EAAE,uBAAuB,CAAC,GAAG,CAAC;oBACrC,aAAa;iBACd,CAAC,CAAC;gBACH,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;YAED,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACtC,UAAU,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,UAAU,EAAE,QAAQ,CAAC,CAAC;AACzF,CAAC;AAED,+EAA+E;AAC/E,6BAA6B;AAC7B,+EAA+E;AAE/E,SAAS,2BAA2B,CAClC,OAAmB,EACnB,MAAsB,EACtB,IAAoE;IAEpE,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;QACrD,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM;YAAE,SAAS;QAC3C,eAAe,EAAE,CAAC;QAClB,IAAI,UAAU,IAAI,IAAI,CAAC,SAAS;YAAE,SAAS;QAE3C,MAAM,cAAc,GAAG,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAEvE,MAAM,KAAK,GAAG,WAAW,CAAC;YACxB,KAAK,EAAE,UAAU,UAAU,CAAC,aAAa,CAAC,IAAI,EAAE;YAChD,WAAW,EAAE,oBAAoB,CAAC,UAAU,CAAC;YAC7C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,gBAAgB;YAChC,WAAW,EAAE,MAAM;YACnB,QAAQ,EAAE,UAAU,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;YAC7E,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC;SAC/C,CAAC,CAAC;QAEH,iGAAiG;QACjG,MAAM,WAAW,GAAG,cAAc;aAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;QAE/C,IAAI,aAAiC,CAAC;QACtC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,yBAAyB,CACzC,WAAW,EACX,IAAI,CAAC,YAAY,EACjB,sBAAsB,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,EAC1E,IAAI,CAAC,WAAW,CACjB,CAAC;YACF,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACjC,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC;QACjC,CAAC;QAED,sFAAsF;QACtF,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;QACnD,MAAM,iBAAiB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;QAEvE,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;YACvC,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YAChE,MAAM,UAAU,GAAG,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;YAC9E,MAAM,cAAc,GAAG,UAAU;iBAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,kBAAkB,CAAC;iBACjD,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,MAAM,OAAO,GAAG,aAAa,CAAC;gBAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,GAAG,MAAM,CAAC,UAAU,KAAK,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,EAAE;gBACnH,aAAa;aACd,CAAC,CAAC;YACH,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC;YAChD,MAAM,OAAO,GAAG,aAAa,CAAC;gBAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,WAAW,cAAc,CAAC,MAAM,GAAG,mBAAmB,wBAAwB;aACxF,CAAC,CAAC;YACH,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACtC,UAAU,EAAE,CAAC;IACf,CAAC;IAED,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,UAAU,EAAE,eAAe,CAAC,CAAC;AAChG,CAAC;AAED,+EAA+E;AAC/E,6DAA6D;AAC7D,+EAA+E;AAE/E,SAAS,yBAAyB,CAChC,OAAmB,EACnB,MAAsB,EACtB,IAAoE;IAEpE,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;QACrD,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM;YAAE,SAAS;QAE3C,qEAAqE;QACrE,gEAAgE;QAChE,2DAA2D;QAC3D,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1C,eAAe,EAAE,CAAC;YAClB,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,6BAA6B,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAC5F,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACtC,UAAU,EAAE,CAAC;YACf,CAAC;YACD,SAAS;QACX,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;YAC9C,IAAI,MAAM,CAAC,MAAM;gBAAE,SAAS;YAE5B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBAC5C,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM;oBAAE,SAAS;gBACpC,eAAe,EAAE,CAAC;gBAClB,IAAI,UAAU,IAAI,IAAI,CAAC,SAAS;oBAAE,SAAS;gBAE3C,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBAEhE,MAAM,KAAK,GAAG,WAAW,CAAC;oBACxB,KAAK,EAAE,GAAG,MAAM,CAAC,UAAU,KAAK,WAAW,MAAM,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,kBAAkB,EAAE;oBAC9F,WAAW,EAAE,kBAAkB,UAAU,CAAC,aAAa,CAAC,IAAI,KAAK,UAAU,CAAC,aAAa,CAAC,WAAW,IAAI,EAAE,oBAAoB,GAAG,CAAC,kBAAkB,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;oBACjN,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,SAAS,EAAE,IAAI,CAAC,gBAAgB;oBAChC,WAAW,EAAE,MAAM;oBACnB,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC;iBAC/C,CAAC,CAAC;gBAEH,kEAAkE;gBAClE,IAAI,aAAiC,CAAC;gBACtC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;oBACtC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;oBACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;oBACtD,MAAM,SAAS,GAAG,oBAAoB,CACpC,MAAM,CAAC,QAAQ,EACf,IAAI,CAAC,YAAY,EACjB,MAAM,EACN,IAAI,CAAC,WAAW,EAChB,QAAQ,CACT,CAAC;oBACF,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACjC,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC;gBACjC,CAAC;gBAED,+DAA+D;gBAC/D,MAAM,OAAO,GAAG,aAAa,CAAC;oBAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,OAAO,EAAE,uBAAuB,CAAC,GAAG,CAAC;oBACrC,aAAa;iBACd,CAAC,CAAC;gBACH,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAE7B,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACtC,UAAU,EAAE,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAED,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,UAAU,EAAE,qBAAqB,CAAC,CAAC;AACtG,CAAC;AAED,+EAA+E;AAC/E,iCAAiC;AACjC,+EAA+E;AAE/E,SAAS,sBAAsB,CAC7B,UAA8B,EAC9B,MAA4B,EAC5B,WAAmB,EACnB,UAAkB;IAElB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,4BAA4B,WAAW,OAAO,UAAU,sBAAsB,CAAC,CAAC;IAC7F,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,kBAAkB,UAAU,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9D,IAAI,UAAU,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,gBAAgB,UAAU,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAChD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,oBAAoB,CAAC,UAA8B;IAC1D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,+BAA+B,UAAU,CAAC,WAAW,OAAO,UAAU,CAAC,eAAe,kBAAkB,CAAC,CAAC;IAErH,IAAI,UAAU,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,eAAe,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,CAAC,WAAW,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,WAAW,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAEhD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,uBAAuB,CAAC,GAA8B;IAC7D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAE3D,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,+EAA+E;AAC/E,+BAA+B;AAC/B,+EAA+E;AAE/E;;;;GAIG;AACH,SAAS,oBAAoB,CAC3B,QAAgB,EAChB,YAAgC,EAChC,MAAqC,EACrC,WAAmB,EACnB,QAAiB;IAEjB,wEAAwE;IACxE,MAAM,SAAS,GAAiB;QAC9B,IAAI,EAAE,YAAY,EAAE;QACpB,UAAU,EAAE;YACV,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;YAClC,UAAU,EAAE;gBACV,iBAAiB,EAAE,KAAK;gBACxB,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;aACpC;SACF;KACF,CAAC;IAEF,IAAI,YAAY,EAAE,CAAC;QACjB,SAAS,CAAC,UAAW,CAAC,QAAQ,GAAG;YAC/B;gBACE,KAAK,EAAE,YAAY;gBACnB,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;aACpC;SACF,CAAC;IACJ,CAAC;IAED,sDAAsD;IACtD,IAAI,MAAM,EAAE,CAAC;QACX,SAAS,CAAC,iBAAiB,GAAG,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC7E,CAAC;IAED,kBAAkB;IAClB,IAAI,QAAQ,EAAE,CAAC;QACb,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAChC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,yBAAyB,CAChC,SAAmB,EACnB,YAAgC,EAChC,MAAqC,EACrC,WAAmB;IAEnB,oEAAoE;IACpE,MAAM,SAAS,GAAiB;QAC9B,IAAI,EAAE,YAAY,EAAE;QACpB,UAAU,EAAE;YACV,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YACjD,UAAU,EAAE;gBACV,iBAAiB,EAAE,KAAK;gBACxB,UAAU,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;aACnD;SACF;KACF,CAAC;IAEF,IAAI,YAAY,EAAE,CAAC;QACjB,SAAS,CAAC,UAAW,CAAC,QAAQ,GAAG;YAC/B;gBACE,KAAK,EAAE,YAAY;gBACnB,UAAU,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;aACnD;SACF,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,SAAS,CAAC,iBAAiB,GAAG,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -11,5 +11,5 @@ import type { BCFComponents } from './types.js';
|
|
|
11
11
|
/**
|
|
12
12
|
* Parse components (selection/visibility/coloring)
|
|
13
13
|
*/
|
|
14
|
-
export declare function parseComponents(content: string): BCFComponents | undefined;
|
|
14
|
+
export declare function parseComponents(content: string, versionId: '2.1' | '3.0'): BCFComponents | undefined;
|
|
15
15
|
//# sourceMappingURL=reader-components.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reader-components.d.ts","sourceRoot":"","sources":["../src/reader-components.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAGV,aAAa,EAGd,MAAM,YAAY,CAAC;AA+BpB;;GAEG;AACH,wBAAgB,eAAe,
|
|
1
|
+
{"version":3,"file":"reader-components.d.ts","sourceRoot":"","sources":["../src/reader-components.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAGV,aAAa,EAGd,MAAM,YAAY,CAAC;AA+BpB;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,KAAK,GAAG,KAAK,GACvB,aAAa,GAAG,SAAS,CA6C3B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
-
import { extractElement, unescapeXml } from './xml-text.js';
|
|
4
|
+
import { extractElement, parseXsBoolean, unescapeXml } from './xml-text.js';
|
|
5
5
|
/**
|
|
6
6
|
* Every `<Component>` element in an XML fragment.
|
|
7
7
|
*
|
|
@@ -32,7 +32,7 @@ function parseComponentElements(xml) {
|
|
|
32
32
|
/**
|
|
33
33
|
* Parse components (selection/visibility/coloring)
|
|
34
34
|
*/
|
|
35
|
-
export function parseComponents(content) {
|
|
35
|
+
export function parseComponents(content, versionId) {
|
|
36
36
|
const componentsMatch = content.match(/<Components>([\s\S]*?)<\/Components>/);
|
|
37
37
|
if (!componentsMatch)
|
|
38
38
|
return undefined;
|
|
@@ -40,7 +40,7 @@ export function parseComponents(content) {
|
|
|
40
40
|
// Parse selection
|
|
41
41
|
const selection = parseComponentList(componentsContent, 'Selection');
|
|
42
42
|
// Parse visibility
|
|
43
|
-
let visibility = parseVisibility(componentsContent);
|
|
43
|
+
let visibility = parseVisibility(componentsContent, versionId);
|
|
44
44
|
// Parse coloring
|
|
45
45
|
const coloring = parseColoring(componentsContent);
|
|
46
46
|
// Nothing read `ViewSetupHints` back, so every hint was lost on read —
|
|
@@ -55,9 +55,13 @@ export function parseComponents(content) {
|
|
|
55
55
|
// read half the files we produce.
|
|
56
56
|
const viewSetupHints = parseViewSetupHints(componentsContent);
|
|
57
57
|
if (viewSetupHints) {
|
|
58
|
-
// Visibility is required by the schema, but tolerate a file that omits
|
|
59
|
-
//
|
|
60
|
-
|
|
58
|
+
// Visibility is required by the schema, but tolerate a file that omits
|
|
59
|
+
// it entirely: fall back to the same per-version DefaultVisibility
|
|
60
|
+
// default used below when the attribute itself is present-but-omitted.
|
|
61
|
+
visibility = {
|
|
62
|
+
...(visibility ?? { defaultVisibility: defaultVisibilityFallback(versionId) }),
|
|
63
|
+
viewSetupHints,
|
|
64
|
+
};
|
|
61
65
|
}
|
|
62
66
|
if (!selection && !visibility && !coloring) {
|
|
63
67
|
return undefined;
|
|
@@ -128,10 +132,29 @@ function parseComponent(content) {
|
|
|
128
132
|
originatingSystem,
|
|
129
133
|
};
|
|
130
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* The `DefaultVisibility` attribute's value when a `<Visibility>` element
|
|
137
|
+
* omits it entirely.
|
|
138
|
+
*
|
|
139
|
+
* visinfo.xsd disagrees by version: 2.1 declares
|
|
140
|
+
* `<xs:attribute name="DefaultVisibility" type="xs:boolean"/>` with no
|
|
141
|
+
* schema default, while 3.0 changes this to
|
|
142
|
+
* `<xs:attribute name="DefaultVisibility" type="xs:boolean" default="false"/>`.
|
|
143
|
+
* Per XML Schema attribute defaulting, an omitted attribute with a declared
|
|
144
|
+
* default takes that default, so a spec-legal 3.0 file that omits it means
|
|
145
|
+
* "hide everything except the listed exceptions". ifc-lite's own writer
|
|
146
|
+
* always emits the attribute explicitly (writeVisibility in writer.ts), so
|
|
147
|
+
* this only matters for a third-party file -- which is why no round-trip
|
|
148
|
+
* fixture caught the reader treating every omission as `true` regardless of
|
|
149
|
+
* version.
|
|
150
|
+
*/
|
|
151
|
+
function defaultVisibilityFallback(versionId) {
|
|
152
|
+
return versionId !== '3.0';
|
|
153
|
+
}
|
|
131
154
|
/**
|
|
132
155
|
* Parse visibility settings
|
|
133
156
|
*/
|
|
134
|
-
function parseVisibility(content) {
|
|
157
|
+
function parseVisibility(content, versionId) {
|
|
135
158
|
// Both branches, for the same reason as `COMPONENT_ELEMENT`: `<Exceptions>`
|
|
136
159
|
// and `<ViewSetupHints>` are optional, so `<Visibility DefaultVisibility=
|
|
137
160
|
// "false"/>` is schema-legal. Matching only the paired form made the whole
|
|
@@ -146,7 +169,18 @@ function parseVisibility(content) {
|
|
|
146
169
|
// `<Selection>` component, say) won the match and inverted the answer, so a
|
|
147
170
|
// file saying show-all hid everything.
|
|
148
171
|
const defaultVisMatch = visibilityMatch[0].match(/DefaultVisibility="([^"]+)"/);
|
|
149
|
-
|
|
172
|
+
// A whitespace-only value collapses to '' under xs:boolean's whiteSpace=
|
|
173
|
+
// collapse, which is not in the {true, false, 1, 0} lexical space at all --
|
|
174
|
+
// the same as the attribute being absent -- so both fall back to the
|
|
175
|
+
// per-version default via parseXsBoolean's caller-owns-absent contract,
|
|
176
|
+
// rather than surviving into parseXsBoolean's unrecognized-value branch.
|
|
177
|
+
// An unrecognized but non-blank value (e.g. "yes") leans true here: this
|
|
178
|
+
// site's existing behavior for garbage input, preserved via
|
|
179
|
+
// `ifUnrecognized: true`.
|
|
180
|
+
const rawDefaultVis = defaultVisMatch?.[1].trim();
|
|
181
|
+
const defaultVisibility = rawDefaultVis !== undefined && rawDefaultVis !== ''
|
|
182
|
+
? parseXsBoolean(rawDefaultVis, { ifUnrecognized: true })
|
|
183
|
+
: defaultVisibilityFallback(versionId);
|
|
150
184
|
const exceptions = parseComponentList(visibilityMatch[0], 'Exceptions');
|
|
151
185
|
return {
|
|
152
186
|
defaultVisibility,
|
|
@@ -185,9 +219,14 @@ function parseViewSetupHints(content) {
|
|
|
185
219
|
const attrs = match[1];
|
|
186
220
|
const flag = (name) => {
|
|
187
221
|
const raw = attrs.match(new RegExp(`\\b${name}="([^"]*)"`))?.[1];
|
|
188
|
-
|
|
222
|
+
// Blank (whitespace-only, or empty) is treated the same as absent -- see
|
|
223
|
+
// parseXsBoolean's absent-vs-blank note -- so both stay `undefined` here
|
|
224
|
+
// rather than reading as false. Unrecognized-but-non-blank content also
|
|
225
|
+
// leans false: unlike DefaultVisibility, an unset hint should not be
|
|
226
|
+
// read as an emphatic "show it".
|
|
227
|
+
if (raw === undefined || raw.trim() === '')
|
|
189
228
|
return undefined;
|
|
190
|
-
return raw
|
|
229
|
+
return parseXsBoolean(raw, { ifUnrecognized: false });
|
|
191
230
|
};
|
|
192
231
|
const spacesVisible = flag('SpacesVisible');
|
|
193
232
|
const spaceBoundariesVisible = flag('SpaceBoundariesVisible');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reader-components.js","sourceRoot":"","sources":["../src/reader-components.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAkB/D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"reader-components.js","sourceRoot":"","sources":["../src/reader-components.ts"],"names":[],"mappings":"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"}
|
package/dist/reader.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import JSZip from 'jszip';
|
|
10
10
|
import { parseComponents } from './reader-components.js';
|
|
11
|
-
import { extractElement, unescapeXml } from './xml-text.js';
|
|
11
|
+
import { extractElement, unescapeXml, parseLabels, parseXsBoolean } from './xml-text.js';
|
|
12
12
|
import { parseFiniteFloat } from './numeric.js';
|
|
13
13
|
/**
|
|
14
14
|
* Resource caps guarding against a malicious (zip-bomb) .bcfzip: a tiny
|
|
@@ -138,7 +138,7 @@ export async function readBCF(file, limits) {
|
|
|
138
138
|
// Read project file (optional)
|
|
139
139
|
const { projectId, name, extensions } = await readProjectFile(zip, budget);
|
|
140
140
|
// Read topics
|
|
141
|
-
const topics = await readTopics(zip, budget);
|
|
141
|
+
const topics = await readTopics(zip, budget, version.versionId);
|
|
142
142
|
return {
|
|
143
143
|
version: version.versionId,
|
|
144
144
|
projectId,
|
|
@@ -178,21 +178,21 @@ async function readProjectFile(zip, budget) {
|
|
|
178
178
|
return {};
|
|
179
179
|
}
|
|
180
180
|
const content = await readEntryCapped(projectFile, 'string', budget);
|
|
181
|
-
const projectIdMatch = content.match(/ProjectId="([^"]+)"/);
|
|
181
|
+
const projectIdMatch = content.match(/ProjectId="([^"]+)"/); // unescaped below, same reason as extractElement underneath
|
|
182
182
|
// extractElement, not a raw regex: writeProjectFile escapes the name with
|
|
183
183
|
// escapeXml, so a raw match hands back the literal entities (`A & B`) and
|
|
184
184
|
// the next export escapes them again. Every other element in this reader goes
|
|
185
185
|
// through extractElement precisely so the escape has an inverse.
|
|
186
186
|
const name = extractElement(content, 'Name');
|
|
187
187
|
return {
|
|
188
|
-
projectId: projectIdMatch?.[1],
|
|
188
|
+
projectId: projectIdMatch?.[1] !== undefined ? unescapeXml(projectIdMatch[1]) : undefined,
|
|
189
189
|
name,
|
|
190
190
|
};
|
|
191
191
|
}
|
|
192
192
|
/**
|
|
193
193
|
* Read all topics from the BCF archive
|
|
194
194
|
*/
|
|
195
|
-
async function readTopics(zip, budget) {
|
|
195
|
+
async function readTopics(zip, budget, versionId) {
|
|
196
196
|
const topics = new Map();
|
|
197
197
|
// Find all topic folders (folders with markup.bcf)
|
|
198
198
|
const topicFolders = new Set();
|
|
@@ -205,7 +205,7 @@ async function readTopics(zip, budget) {
|
|
|
205
205
|
// Parse each topic
|
|
206
206
|
for (const topicGuid of topicFolders) {
|
|
207
207
|
try {
|
|
208
|
-
const topic = await readTopic(zip, topicGuid, budget);
|
|
208
|
+
const topic = await readTopic(zip, topicGuid, budget, versionId);
|
|
209
209
|
if (topic) {
|
|
210
210
|
topics.set(topic.guid, topic);
|
|
211
211
|
}
|
|
@@ -221,7 +221,7 @@ async function readTopics(zip, budget) {
|
|
|
221
221
|
/**
|
|
222
222
|
* Read a single topic from the BCF archive
|
|
223
223
|
*/
|
|
224
|
-
async function readTopic(zip, topicFolder, budget) {
|
|
224
|
+
async function readTopic(zip, topicFolder, budget, versionId) {
|
|
225
225
|
const markupFile = zip.file(`${topicFolder}/markup.bcf`);
|
|
226
226
|
if (!markupFile) {
|
|
227
227
|
return null;
|
|
@@ -253,19 +253,15 @@ async function readTopic(zip, topicFolder, budget) {
|
|
|
253
253
|
const description = extractElement(topicContent, 'Description');
|
|
254
254
|
const priority = extractElement(topicContent, 'Priority');
|
|
255
255
|
const index = extractElement(topicContent, 'Index');
|
|
256
|
-
const creationDate = extractElement(topicContent, 'CreationDate')
|
|
257
|
-
const creationAuthor = extractElement(topicContent, 'CreationAuthor')
|
|
256
|
+
const creationDate = extractElement(topicContent, 'CreationDate'); // required no-default in markup.xsd; leave undefined, don't fabricate
|
|
257
|
+
const creationAuthor = extractElement(topicContent, 'CreationAuthor'); // same: required no-default, don't fabricate 'Unknown'
|
|
258
258
|
const modifiedDate = extractElement(topicContent, 'ModifiedDate');
|
|
259
259
|
const modifiedAuthor = extractElement(topicContent, 'ModifiedAuthor');
|
|
260
260
|
const dueDate = extractElement(topicContent, 'DueDate');
|
|
261
261
|
const assignedTo = extractElement(topicContent, 'AssignedTo');
|
|
262
262
|
const stage = extractElement(topicContent, 'Stage');
|
|
263
|
-
// Extract labels
|
|
264
|
-
const labels =
|
|
265
|
-
const labelMatches = topicContent.matchAll(/<Labels>([^<]+)<\/Labels>/g);
|
|
266
|
-
for (const match of labelMatches) {
|
|
267
|
-
labels.push(unescapeXml(match[1]));
|
|
268
|
-
}
|
|
263
|
+
// Extract labels (tolerant of both BCF 2.1 and 3.0 markup.xsd shapes; see parseLabels)
|
|
264
|
+
const labels = parseLabels(topicContent);
|
|
269
265
|
// Extract BIM snippet
|
|
270
266
|
const bimSnippet = extractBimSnippet(topicContent);
|
|
271
267
|
// Extract document references
|
|
@@ -281,7 +277,7 @@ async function readTopic(zip, topicFolder, budget) {
|
|
|
281
277
|
// Parse comments
|
|
282
278
|
const comments = parseComments(markupContent);
|
|
283
279
|
// Parse viewpoints
|
|
284
|
-
const viewpoints = await parseViewpoints(zip, topicFolder, markupContent, budget);
|
|
280
|
+
const viewpoints = await parseViewpoints(zip, topicFolder, markupContent, budget, versionId);
|
|
285
281
|
return {
|
|
286
282
|
guid,
|
|
287
283
|
title,
|
|
@@ -325,12 +321,12 @@ function parseHeaderFiles(markupContent) {
|
|
|
325
321
|
const ifcProject = attrs.match(/IfcProject="([^"]*)"/)?.[1];
|
|
326
322
|
const ifcSpatial = attrs.match(/IfcSpatialStructureElement="([^"]*)"/)?.[1];
|
|
327
323
|
// BCF 2.1 spells this `isExternal`, 3.0 `IsExternal`; accept either casing
|
|
328
|
-
//
|
|
324
|
+
// and the xs:boolean `1`/`0` forms. Blank is absent, per parseXsBoolean.
|
|
329
325
|
const isExternalRaw = attrs.match(/\b[Ii]sExternal="([^"]*)"/)?.[1];
|
|
330
326
|
files.push({
|
|
331
327
|
ifcProject: ifcProject || undefined,
|
|
332
328
|
ifcSpatialStructureElement: ifcSpatial || undefined,
|
|
333
|
-
isExternal: isExternalRaw
|
|
329
|
+
isExternal: isExternalRaw?.trim() ? parseXsBoolean(isExternalRaw, { ifUnrecognized: false }) : undefined,
|
|
334
330
|
filename: extractElement(body, 'Filename'),
|
|
335
331
|
date: extractElement(body, 'Date'),
|
|
336
332
|
reference: extractElement(body, 'Reference'),
|
|
@@ -370,15 +366,15 @@ function extractBimSnippet(content) {
|
|
|
370
366
|
if (!snippetType)
|
|
371
367
|
return undefined;
|
|
372
368
|
// BCF 2.1 spells this `isExternal`, 3.0 `IsExternal` (same rename as the
|
|
373
|
-
// Header `<File>`
|
|
374
|
-
//
|
|
375
|
-
//
|
|
369
|
+
// Header `<File>` site above); accept either casing and `1`/`0`. Unlike
|
|
370
|
+
// that site, `isExternal` here is a required boolean, so absent and blank
|
|
371
|
+
// both resolve to `false`, not `undefined`.
|
|
376
372
|
const isExternalRaw = match[1].match(/\b[Ii]sExternal="([^"]*)"/)?.[1];
|
|
377
373
|
const reference = extractElement(match[2], 'Reference');
|
|
378
374
|
const referenceSchema = extractElement(match[2], 'ReferenceSchema');
|
|
379
375
|
return {
|
|
380
376
|
snippetType,
|
|
381
|
-
isExternal: isExternalRaw
|
|
377
|
+
isExternal: isExternalRaw?.trim() ? parseXsBoolean(isExternalRaw, { ifUnrecognized: false }) : false,
|
|
382
378
|
reference: reference || '',
|
|
383
379
|
referenceSchema,
|
|
384
380
|
};
|
|
@@ -402,7 +398,9 @@ function extractDocumentReferences(content) {
|
|
|
402
398
|
const matches = content.matchAll(/<DocumentReference(?![A-Za-z])[^>]*>([\s\S]*?)<\/DocumentReference>/g);
|
|
403
399
|
for (const match of matches) {
|
|
404
400
|
const guidMatch = match[0].match(/Guid="([^"]+)"/);
|
|
405
|
-
|
|
401
|
+
// xs:boolean's lexical space is {true, false, 1, 0}; see isExternal above.
|
|
402
|
+
// Blank is absent, per parseXsBoolean (same as the header <File> site).
|
|
403
|
+
const isExternalRaw = match[0].match(/\bisExternal="([^"]*)"/)?.[1];
|
|
406
404
|
const referencedDoc = extractElement(match[1], 'ReferencedDocument');
|
|
407
405
|
const documentGuid = extractElement(match[1], 'DocumentGuid');
|
|
408
406
|
const url = extractElement(match[1], 'Url');
|
|
@@ -410,7 +408,7 @@ function extractDocumentReferences(content) {
|
|
|
410
408
|
if (referencedDoc || documentGuid || url) {
|
|
411
409
|
refs.push({
|
|
412
410
|
guid: guidMatch?.[1],
|
|
413
|
-
isExternal:
|
|
411
|
+
isExternal: isExternalRaw?.trim() ? parseXsBoolean(isExternalRaw, { ifUnrecognized: false }) : undefined,
|
|
414
412
|
referencedDocument: referencedDoc,
|
|
415
413
|
documentGuid,
|
|
416
414
|
url,
|
|
@@ -459,8 +457,8 @@ function parseComments(markupContent) {
|
|
|
459
457
|
if (close < 0)
|
|
460
458
|
continue; // malformed: no wrapper closer, skip rather than throw
|
|
461
459
|
const content = span.slice(0, close);
|
|
462
|
-
const date = extractElement(content, 'Date')
|
|
463
|
-
const author = extractElement(content, 'Author')
|
|
460
|
+
const date = extractElement(content, 'Date'); // don't fabricate; see CreationDate above
|
|
461
|
+
const author = extractElement(content, 'Author'); // same: required no-default, don't fabricate 'Unknown'
|
|
464
462
|
const comment = extractElement(content, 'Comment') || '';
|
|
465
463
|
const modifiedDate = extractElement(content, 'ModifiedDate');
|
|
466
464
|
const modifiedAuthor = extractElement(content, 'ModifiedAuthor');
|
|
@@ -482,7 +480,7 @@ function parseComments(markupContent) {
|
|
|
482
480
|
/**
|
|
483
481
|
* Parse viewpoints from the BCF archive
|
|
484
482
|
*/
|
|
485
|
-
async function parseViewpoints(zip, topicFolder, markupContent, budget) {
|
|
483
|
+
async function parseViewpoints(zip, topicFolder, markupContent, budget, versionId) {
|
|
486
484
|
const viewpoints = [];
|
|
487
485
|
// Parse viewpoint references from markup.bcf to get snapshot filenames.
|
|
488
486
|
// The markup element is plural -- <Viewpoints Guid="xxx"><Viewpoint>file.bcfv</Viewpoint>
|
|
@@ -561,7 +559,7 @@ async function parseViewpoints(zip, topicFolder, markupContent, budget) {
|
|
|
561
559
|
if (!viewpointFile)
|
|
562
560
|
continue;
|
|
563
561
|
const viewpointContent = await readEntryCapped(viewpointFile, 'string', budget);
|
|
564
|
-
const viewpoint = parseViewpointContent(viewpointContent);
|
|
562
|
+
const viewpoint = parseViewpointContent(viewpointContent, versionId);
|
|
565
563
|
if (viewpoint) {
|
|
566
564
|
// Get snapshot filename from markup.bcf if available
|
|
567
565
|
const viewpointInfo = viewpointInfoMap.get(viewpoint.guid);
|
|
@@ -642,7 +640,7 @@ async function parseViewpoints(zip, topicFolder, markupContent, budget) {
|
|
|
642
640
|
/**
|
|
643
641
|
* Parse viewpoint XML content
|
|
644
642
|
*/
|
|
645
|
-
function parseViewpointContent(content) {
|
|
643
|
+
function parseViewpointContent(content, versionId) {
|
|
646
644
|
// Extract viewpoint GUID from root element (Guid can be anywhere in the tag)
|
|
647
645
|
const guidMatch = content.match(/<VisualizationInfo[^>]+Guid="([^"]+)"/);
|
|
648
646
|
const guid = guidMatch?.[1] || crypto.randomUUID?.() || `vp-${Date.now()}`;
|
|
@@ -651,7 +649,7 @@ function parseViewpointContent(content) {
|
|
|
651
649
|
// Parse orthogonal camera
|
|
652
650
|
const orthogonalCamera = parseOrthogonalCamera(content);
|
|
653
651
|
// Parse components
|
|
654
|
-
const components = parseComponents(content);
|
|
652
|
+
const components = parseComponents(content, versionId);
|
|
655
653
|
// Parse lines
|
|
656
654
|
const lines = parseLines(content);
|
|
657
655
|
// Parse clipping planes
|