@itwin/rpcinterface-full-stack-tests 4.3.0-dev.16 → 4.3.0-dev.18

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.
@@ -145251,7 +145251,7 @@ class RealityModelTileLoader extends _internal__WEBPACK_IMPORTED_MODULE_8__.Real
145251
145251
  }
145252
145252
  get doDrapeBackgroundMap() { return this.tree.doDrapeBackgroundMap; }
145253
145253
  get wantDeduplicatedVertices() { return this._deduplicateVertices; }
145254
- get maxDepth() { return 32; } // Can be removed when element tile selector is working.
145254
+ get maxDepth() { return Number.MAX_SAFE_INTEGER; }
145255
145255
  get minDepth() { return 0; }
145256
145256
  get priority() { return _internal__WEBPACK_IMPORTED_MODULE_8__.TileLoadPriority.Context; }
145257
145257
  getBatchIdMap() { return this._batchedIdMap; }
@@ -188670,7 +188670,7 @@ class CurveOps {
188670
188670
  /**
188671
188671
  * Construct a separate xy-offset for each input curve.
188672
188672
  * * For best offset results, the inputs should be parallel to the xy-plane.
188673
- * @param curves input curve(s), z-coordinates ignored. Only [[ChainTypes]] are handled.
188673
+ * @param curves input curve(s), z-coordinates ignored. Only curves of type [[AnyChain]] are handled.
188674
188674
  * @param offset offset distance (positive to left of curve, negative to right)
188675
188675
  * @param result array to collect offset curves
188676
188676
  * @returns summed length of offset curves
@@ -200289,7 +200289,10 @@ class Joint {
200289
200289
  return numOut++ < maxTest;
200290
200290
  }, maxTest);
200291
200291
  }
200292
- /** Execute `joint.annotateJointMode()` at all joints on the chain to set some of the joints attributes. */
200292
+ /**
200293
+ * Execute `joint.annotateJointMode()` at all joints on the chain to set some of the joints' attributes,
200294
+ * such as whether to extend both curves to intersection or to fill the gap between curves.
200295
+ */
200293
200296
  static annotateChain(start, options, maxTest = 100) {
200294
200297
  if (start)
200295
200298
  Joint.visitJointsOnChain(start, (joint) => { joint.annotateJointMode(options); return true; }, maxTest);
@@ -200321,6 +200324,7 @@ class Joint {
200321
200324
  if (this.curve0 && this.curve1) {
200322
200325
  const ray0 = this.curve0.fractionToPointAndDerivative(1.0);
200323
200326
  const ray1 = this.curve1.fractionToPointAndDerivative(0.0);
200327
+ ray0.direction.z = ray1.direction.z = 0.0; // xy-offset
200324
200328
  const intersection = _geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_6__.Ray3d.closestApproachRay3dRay3d(ray0, ray1); // intersection of the 2 ray lines
200325
200329
  if (intersection.approachType === _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_7__.CurveCurveApproachType.Intersection) {
200326
200330
  if (intersection.detailA.fraction >= 0.0 && intersection.detailB.fraction <= 0.0) {
@@ -200399,7 +200403,7 @@ class Joint {
200399
200403
  this.fraction0 = 1.0;
200400
200404
  }
200401
200405
  else if (this.curve0 && this.curve1) { // joints at the middle of the chain
200402
- if (this.curve0.endPoint().isAlmostEqual(this.curve1.startPoint())) { // joint between colinear segments
200406
+ if (this.curve0.endPoint().isAlmostEqualXY(this.curve1.startPoint())) { // joint between colinear xy-segments
200403
200407
  this.fraction0 = 1.0;
200404
200408
  this.fraction1 = 0.0;
200405
200409
  this.flexure = JointMode.Trim;
@@ -200407,8 +200411,9 @@ class Joint {
200407
200411
  else if (this.curve0 instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_4__.LineSegment3d && this.curve1 instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_4__.LineSegment3d) { // pair of lines
200408
200412
  const ray0 = this.curve0.fractionToPointAndDerivative(0.0);
200409
200413
  const ray1 = this.curve1.fractionToPointAndDerivative(0.0);
200414
+ ray0.direction.z = ray1.direction.z = 0.0; // xy-offset
200410
200415
  const intersection = _geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_6__.Ray3d.closestApproachRay3dRay3d(ray0, ray1); // intersection of the 2 ray lines
200411
- if (intersection.approachType === _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_7__.CurveCurveApproachType.Intersection) {
200416
+ if (intersection.approachType === _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_7__.CurveCurveApproachType.Intersection || intersection.approachType === _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_7__.CurveCurveApproachType.PerpendicularChord) {
200412
200417
  this.fraction0 = intersection.detailA.fraction;
200413
200418
  this.fraction1 = intersection.detailB.fraction;
200414
200419
  if (this.fraction0 >= 1.0 && this.fraction1 <= 0.0) { // need to extend
@@ -200529,7 +200534,7 @@ class Joint {
200529
200534
  }
200530
200535
  }
200531
200536
  /**
200532
- * Context for building a wire offset.
200537
+ * Context for building a wire xy-offset.
200533
200538
  * @internal
200534
200539
  */
200535
200540
  class PolygonWireOffsetContext {
@@ -200538,6 +200543,7 @@ class PolygonWireOffsetContext {
200538
200543
  // Construct a single offset from base points
200539
200544
  static createOffsetSegment(basePointA, basePointB, distance) {
200540
200545
  _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.createStartEnd(basePointA, basePointB, this._unitAlong);
200546
+ this._unitAlong.z = 0.0; // xy-offset
200541
200547
  if (this._unitAlong.normalizeInPlace()) {
200542
200548
  this._unitAlong.rotate90CCWXY(this._unitPerp);
200543
200549
  const segment = _LineSegment3d__WEBPACK_IMPORTED_MODULE_4__.LineSegment3d.create(basePointA.plusScaled(this._unitPerp, distance, this._offsetA), basePointB.plusScaled(this._unitPerp, distance, this._offsetB));
@@ -200547,8 +200553,8 @@ class PolygonWireOffsetContext {
200547
200553
  return undefined;
200548
200554
  }
200549
200555
  /**
200550
- * Construct a wire (not area) that is offset from given polyline or polygon (which must be in xy-plane or in
200551
- * a plane parallel to xy-plane).
200556
+ * Construct a wire (not area) that is offset from given polyline or polygon.
200557
+ * * For best results, points should be in a horizontal plane because z-coordinates are ignored.
200552
200558
  * * This is a simple wire offset (in the form of a line string), not an area.
200553
200559
  * * If offsetDistance is given as a number, default OffsetOptions are applied.
200554
200560
  * * See [[JointOptions]] class doc for offset construction rules.
@@ -200558,36 +200564,34 @@ class PolygonWireOffsetContext {
200558
200564
  * object.
200559
200565
  */
200560
200566
  constructPolygonWireXYOffset(points, wrap, leftOffsetDistanceOrOptions) {
200561
- /**
200562
- * if "wrap = true", then first and last point in the points array must be close; otherwise
200563
- * generated offset will be invalid.
200564
- */
200565
- if (wrap && !points[0].isAlmostEqual(points[points.length - 1])) {
200566
- wrap = false;
200567
- }
200568
- /** create raw offsets as a linked list (joint0) */
200567
+ if (wrap && !points[0].isAlmostEqual(points[points.length - 1]))
200568
+ wrap = false; // no wrap possible for polylines
200569
+ // create raw offset segments as a linked list of Joints, starting with joint0
200569
200570
  const options = _OffsetOptions__WEBPACK_IMPORTED_MODULE_9__.JointOptions.create(leftOffsetDistanceOrOptions);
200570
200571
  const numPoints = points.length;
200571
- let fragment0 = PolygonWireOffsetContext.createOffsetSegment(points[0], points[1], options.leftOffsetDistance);
200572
- let joint0 = new Joint(undefined, fragment0, points[0]);
200573
- let newJoint;
200574
- let previousJoint = joint0;
200575
- for (let i = 1; i + 1 < numPoints; i++) {
200576
- const fragment1 = PolygonWireOffsetContext.createOffsetSegment(points[i], points[i + 1], options.leftOffsetDistance);
200577
- newJoint = new Joint(fragment0, fragment1, points[i]);
200578
- Joint.link(previousJoint, newJoint);
200579
- previousJoint = newJoint;
200580
- fragment0 = fragment1;
200581
- }
200582
- if (wrap)
200583
- Joint.link(previousJoint, joint0);
200584
- else {
200585
- newJoint = new Joint(fragment0, undefined, points[numPoints - 1]);
200586
- Joint.link(previousJoint, newJoint);
200572
+ let fragment0;
200573
+ let joint0, previousJoint;
200574
+ for (let i = 0; i + 1 < numPoints; ++i) {
200575
+ if (!previousJoint) { // start the linked list at the first nontrivial xy-segment
200576
+ if (fragment0 = PolygonWireOffsetContext.createOffsetSegment(points[i], points[i + 1], options.leftOffsetDistance))
200577
+ previousJoint = joint0 = new Joint(undefined, fragment0, points[i]);
200578
+ }
200579
+ else {
200580
+ const fragment1 = PolygonWireOffsetContext.createOffsetSegment(points[i], points[i + 1], options.leftOffsetDistance);
200581
+ if (fragment1) { // append the next nontrivial xy-segment
200582
+ const newJoint = new Joint(fragment0, fragment1, points[i]);
200583
+ Joint.link(previousJoint, newJoint);
200584
+ previousJoint = newJoint;
200585
+ fragment0 = fragment1;
200586
+ }
200587
+ }
200587
200588
  }
200588
- /** annotateChain sets some of the joints attributes (including how to extend curves or fill the gap between curves) */
200589
+ if (!fragment0 || !previousJoint || !joint0)
200590
+ return undefined; // no edge with positive xy-length
200591
+ const lastJoint = wrap ? joint0 : new Joint(fragment0, undefined, points[numPoints - 1]);
200592
+ Joint.link(previousJoint, lastJoint);
200589
200593
  Joint.annotateChain(joint0, options, numPoints);
200590
- /** make limited passes through the Joint chain until no self-intersections are removed */
200594
+ // make limited passes through the Joint chain until no self-intersections are removed
200591
200595
  for (let pass = 0; pass++ < 5;) {
200592
200596
  const state = Joint.removeDegeneratePrimitives(joint0, options, numPoints);
200593
200597
  joint0 = state.newStart;
@@ -200600,10 +200604,8 @@ class PolygonWireOffsetContext {
200600
200604
  }
200601
200605
  */
200602
200606
  }
200603
- // Joint.collectPrimitivesFromChain(joint0, result, numPoints);
200604
- /** turn the Joint linked list into a CurveCollection (Loop or Path). trimming is done in collectStrokesFromChain */
200605
200607
  const chain = _LineString3d__WEBPACK_IMPORTED_MODULE_5__.LineString3d.create();
200606
- Joint.collectStrokesFromChain(joint0, chain, numPoints);
200608
+ Joint.collectStrokesFromChain(joint0, chain, numPoints); // compute offset corners (by extension/trim)
200607
200609
  const n = chain.packedPoints.length;
200608
200610
  if (n > 1) {
200609
200611
  if (chain.packedPoints.front().isAlmostEqual(chain.packedPoints.back()))
@@ -200620,7 +200622,7 @@ PolygonWireOffsetContext._offsetA = _geometry3d_Point3dVector3d__WEBPACK_IMPORTE
200620
200622
  PolygonWireOffsetContext._offsetB = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create();
200621
200623
 
200622
200624
  /**
200623
- * Context for building a wire offset from a Path or Loop of CurvePrimitives
200625
+ * Context for building a wire xy-offset from a Path or Loop of CurvePrimitives
200624
200626
  * @internal
200625
200627
  */
200626
200628
  class CurveChainWireOffsetContext {
@@ -216454,6 +216456,16 @@ class Vector3d extends XYZ {
216454
216456
  angleFromPerpendicular(planeNormal) {
216455
216457
  return _Angle__WEBPACK_IMPORTED_MODULE_2__.Angle.createAtan2(this.dotProduct(planeNormal), this.crossProductMagnitude(planeNormal));
216456
216458
  }
216459
+ /**
216460
+ * Return the angle in radians (not as strongly typed Angle) from this vector to the plane perpendicular to planeNormal.
216461
+ * * The returned angle is between -PI/2 and PI/2.
216462
+ * * The returned angle is measured in the plane containing the two vectors.
216463
+ * * The function returns PI/2 - radiansTo(planeNormal).
216464
+ * @param planeNormal a normal vector to the plane.
216465
+ */
216466
+ radiansFromPerpendicular(planeNormal) {
216467
+ return Math.atan2(this.dotProduct(planeNormal), this.crossProductMagnitude(planeNormal));
216468
+ }
216457
216469
  /**
216458
216470
  * Return the (strongly-typed) angle from this vector to vectorB, using only the xy parts.
216459
216471
  * * The returned angle is between -180 and 180 degrees.
@@ -235330,8 +235342,12 @@ class PolyfaceBuilder extends _geometry3d_GeometryHandler__WEBPACK_IMPORTED_MODU
235330
235342
  */
235331
235343
  addTorusPipe(surface, phiStrokeCount, thetaStrokeCount) {
235332
235344
  const thetaFraction = surface.getThetaFraction();
235333
- const numU = _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.clamp(_Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.resolveNumber(phiStrokeCount, 8), 4, 64);
235334
- const numV = _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.clamp(_Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.resolveNumber(thetaStrokeCount, Math.ceil(16 * thetaFraction)), 2, 64);
235345
+ let numU = _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.clamp(_Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.resolveNumber(phiStrokeCount, 8), 4, 64);
235346
+ let numV = _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.clamp(_Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.resolveNumber(thetaStrokeCount, Math.ceil(16 * thetaFraction)), 2, 64);
235347
+ if (this._options) {
235348
+ numU = this._options.applyTolerancesToArc(surface.getMinorRadius());
235349
+ numV = this._options.applyTolerancesToArc(surface.getMajorRadius(), surface.getSweepAngle().radians);
235350
+ }
235335
235351
  this.toggleReversedFacetFlag();
235336
235352
  const sizes = surface.maxIsoParametricDistance();
235337
235353
  this.addUVGridBody(surface, numU, numV, _geometry3d_Segment1d__WEBPACK_IMPORTED_MODULE_14__.Segment1d.create(0, sizes.x), _geometry3d_Segment1d__WEBPACK_IMPORTED_MODULE_14__.Segment1d.create(0, sizes.y));
@@ -235801,6 +235817,12 @@ class PolyfaceBuilder extends _geometry3d_GeometryHandler__WEBPACK_IMPORTED_MODU
235801
235817
  addFacetFromVisitor(visitor) {
235802
235818
  this.addFacetFromGrowableArrays(visitor.point, visitor.normal, visitor.param, visitor.color, visitor.edgeVisible);
235803
235819
  }
235820
+ /** Add all visitor facets to the evolving polyface (in reverse order if indicated by the builder state) */
235821
+ addFacetsFromVisitor(visitor) {
235822
+ visitor.reset();
235823
+ for (; visitor.moveToNextFacet();)
235824
+ this.addFacetFromVisitor(visitor);
235825
+ }
235804
235826
  /**
235805
235827
  * Add the subset of visitor data indexed by the indices.
235806
235828
  * * Ideally, the subset represents a sub-facet of the visited facet.
@@ -237451,7 +237473,7 @@ __webpack_require__.r(__webpack_exports__);
237451
237473
  /* harmony export */ });
237452
237474
  /* harmony import */ var _curve_CurveCollection__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../curve/CurveCollection */ "../../core/geometry/lib/esm/curve/CurveCollection.js");
237453
237475
  /* harmony import */ var _curve_CurveOps__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../curve/CurveOps */ "../../core/geometry/lib/esm/curve/CurveOps.js");
237454
- /* harmony import */ var _curve_internalContexts_MultiChainCollector__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../curve/internalContexts/MultiChainCollector */ "../../core/geometry/lib/esm/curve/internalContexts/MultiChainCollector.js");
237476
+ /* harmony import */ var _curve_internalContexts_MultiChainCollector__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../curve/internalContexts/MultiChainCollector */ "../../core/geometry/lib/esm/curve/internalContexts/MultiChainCollector.js");
237455
237477
  /* harmony import */ var _curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../curve/LineSegment3d */ "../../core/geometry/lib/esm/curve/LineSegment3d.js");
237456
237478
  /* harmony import */ var _curve_LineString3d__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../curve/LineString3d */ "../../core/geometry/lib/esm/curve/LineString3d.js");
237457
237479
  /* harmony import */ var _curve_Loop__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../curve/Loop */ "../../core/geometry/lib/esm/curve/Loop.js");
@@ -237467,7 +237489,7 @@ __webpack_require__.r(__webpack_exports__);
237467
237489
  /* harmony import */ var _geometry3d_Range__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../geometry3d/Range */ "../../core/geometry/lib/esm/geometry3d/Range.js");
237468
237490
  /* harmony import */ var _geometry4d_Matrix4d__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../geometry4d/Matrix4d */ "../../core/geometry/lib/esm/geometry4d/Matrix4d.js");
237469
237491
  /* harmony import */ var _geometry4d_MomentData__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../geometry4d/MomentData */ "../../core/geometry/lib/esm/geometry4d/MomentData.js");
237470
- /* harmony import */ var _numerics_UnionFind__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../numerics/UnionFind */ "../../core/geometry/lib/esm/numerics/UnionFind.js");
237492
+ /* harmony import */ var _numerics_UnionFind__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../numerics/UnionFind */ "../../core/geometry/lib/esm/numerics/UnionFind.js");
237471
237493
  /* harmony import */ var _topology_ChainMerge__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../topology/ChainMerge */ "../../core/geometry/lib/esm/topology/ChainMerge.js");
237472
237494
  /* harmony import */ var _topology_Graph__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../topology/Graph */ "../../core/geometry/lib/esm/topology/Graph.js");
237473
237495
  /* harmony import */ var _topology_HalfEdgeGraphFromIndexedLoopsContext__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../topology/HalfEdgeGraphFromIndexedLoopsContext */ "../../core/geometry/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js");
@@ -237477,10 +237499,10 @@ __webpack_require__.r(__webpack_exports__);
237477
237499
  /* harmony import */ var _FacetLocationDetail__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./FacetLocationDetail */ "../../core/geometry/lib/esm/polyface/FacetLocationDetail.js");
237478
237500
  /* harmony import */ var _FacetOrientation__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./FacetOrientation */ "../../core/geometry/lib/esm/polyface/FacetOrientation.js");
237479
237501
  /* harmony import */ var _IndexedEdgeMatcher__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./IndexedEdgeMatcher */ "../../core/geometry/lib/esm/polyface/IndexedEdgeMatcher.js");
237480
- /* harmony import */ var _IndexedPolyfaceVisitor__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./IndexedPolyfaceVisitor */ "../../core/geometry/lib/esm/polyface/IndexedPolyfaceVisitor.js");
237502
+ /* harmony import */ var _IndexedPolyfaceVisitor__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./IndexedPolyfaceVisitor */ "../../core/geometry/lib/esm/polyface/IndexedPolyfaceVisitor.js");
237481
237503
  /* harmony import */ var _multiclip_BuildAverageNormalsContext__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./multiclip/BuildAverageNormalsContext */ "../../core/geometry/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js");
237482
237504
  /* harmony import */ var _multiclip_OffsetMeshContext__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./multiclip/OffsetMeshContext */ "../../core/geometry/lib/esm/polyface/multiclip/OffsetMeshContext.js");
237483
- /* harmony import */ var _multiclip_SweepLineStringToFacetContext__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./multiclip/SweepLineStringToFacetContext */ "../../core/geometry/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js");
237505
+ /* harmony import */ var _multiclip_SweepLineStringToFacetContext__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./multiclip/SweepLineStringToFacetContext */ "../../core/geometry/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js");
237484
237506
  /* harmony import */ var _multiclip_XYPointBuckets__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./multiclip/XYPointBuckets */ "../../core/geometry/lib/esm/polyface/multiclip/XYPointBuckets.js");
237485
237507
  /* harmony import */ var _Polyface__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Polyface */ "../../core/geometry/lib/esm/polyface/Polyface.js");
237486
237508
  /* harmony import */ var _PolyfaceBuilder__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./PolyfaceBuilder */ "../../core/geometry/lib/esm/polyface/PolyfaceBuilder.js");
@@ -237904,30 +237926,42 @@ class PolyfaceQuery {
237904
237926
  * construct a CurveCollection containing boundary edges.
237905
237927
  * * each edge is a LineSegment3d
237906
237928
  * @param source polyface or visitor
237907
- * @param includeDanglers true to in include typical boundary edges with a single incident facet
237929
+ * @param includeTypical true to in include typical boundary edges with a single incident facet
237908
237930
  * @param includeMismatch true to include edges with more than 2 incident facets
237909
237931
  * @param includeNull true to include edges with identical start and end vertex indices.
237910
- * @returns
237911
237932
  */
237912
- static boundaryEdges(source, includeDanglers = true, includeMismatch = true, includeNull = true) {
237933
+ static boundaryEdges(source, includeTypical = true, includeMismatch = true, includeNull = true) {
237913
237934
  const result = new _curve_CurveCollection__WEBPACK_IMPORTED_MODULE_5__.BagOfCurves();
237914
237935
  const announceEdge = (pointA, pointB, _indexA, _indexB, _readIndex) => {
237915
237936
  result.tryAddChild(_curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_11__.LineSegment3d.create(pointA, pointB));
237916
237937
  };
237917
- PolyfaceQuery.announceBoundaryEdges(source, announceEdge, includeDanglers, includeMismatch, includeNull);
237938
+ PolyfaceQuery.announceBoundaryEdges(source, announceEdge, includeTypical, includeMismatch, includeNull);
237918
237939
  if (result.children.length === 0)
237919
237940
  return undefined;
237920
237941
  return result;
237921
237942
  }
237922
237943
  /**
237923
- * Test if the facets in `source` occur in perfectly mated pairs, as is required for a closed manifold volume.
237924
- * If not, extract the boundary edges as lines.
237925
- * @param source polyface or visitor
237926
- * @param announceEdge function to be called with each boundary edge. The announcement is start and end points, start and end indices, and facet index.
237927
- * @param includeTypical true to announce typical boundary edges with a single incident facet
237928
- * @param includeMismatch true to announce edges with more than 2 incident facets
237929
- * @param includeNull true to announce edges with identical start and end vertex indices.
237930
- */
237944
+ * Collect boundary edges.
237945
+ * * Return the edges as the simplest collection of chains of line segments.
237946
+ * @param source facets
237947
+ * @param includeTypical true to in include typical boundary edges with a single incident facet
237948
+ * @param includeMismatch true to include edges with more than 2 incident facets
237949
+ * @param includeNull true to include edges with identical start and end vertex indices.
237950
+ */
237951
+ static collectBoundaryEdges(source, includeTypical = true, includeMismatch = true, includeNull = true) {
237952
+ const collector = new _curve_internalContexts_MultiChainCollector__WEBPACK_IMPORTED_MODULE_12__.MultiChainCollector(_Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.smallMetricDistance, _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.smallMetricDistance);
237953
+ PolyfaceQuery.announceBoundaryEdges(source, (ptA, ptB) => collector.captureCurve(_curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_11__.LineSegment3d.create(ptA, ptB)), includeTypical, includeMismatch, includeNull);
237954
+ return collector.grabResult(true);
237955
+ }
237956
+ /**
237957
+ * Test if the facets in `source` occur in perfectly mated pairs, as is required for a closed manifold volume.
237958
+ * If not, extract the boundary edges as lines.
237959
+ * @param source polyface or visitor
237960
+ * @param announceEdge function to be called with each boundary edge. The announcement is start and end points, start and end indices, and facet index.
237961
+ * @param includeTypical true to announce typical boundary edges with a single incident facet
237962
+ * @param includeMismatch true to announce edges with more than 2 incident facets
237963
+ * @param includeNull true to announce edges with identical start and end vertex indices.
237964
+ */
237931
237965
  static announceBoundaryEdges(source, announceEdge, includeTypical = true, includeMismatch = true, includeNull = true) {
237932
237966
  if (source === undefined)
237933
237967
  return undefined;
@@ -237955,24 +237989,89 @@ class PolyfaceQuery {
237955
237989
  if (badList.length === 0)
237956
237990
  return undefined;
237957
237991
  const sourcePolyface = visitor.clientPolyface();
237992
+ const pointA = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_0__.Point3d.create();
237993
+ const pointB = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_0__.Point3d.create();
237958
237994
  for (const list of badList) {
237959
237995
  for (const e of list) {
237960
237996
  const e1 = e instanceof _IndexedEdgeMatcher__WEBPACK_IMPORTED_MODULE_10__.SortableEdge ? e : e[0];
237961
237997
  const indexA = e1.vertexIndexA;
237962
237998
  const indexB = e1.vertexIndexB;
237963
- const pointA = sourcePolyface.data.getPoint(indexA);
237964
- const pointB = sourcePolyface.data.getPoint(indexB);
237965
- if (pointA && pointB)
237966
- announceEdge(pointA, pointB, indexA, indexB, visitor.currentReadIndex());
237999
+ if (sourcePolyface.data.getPoint(indexA, pointA) && sourcePolyface.data.getPoint(indexB, pointB))
238000
+ announceEdge(pointA, pointB, indexA, indexB, e1.facetIndex);
237967
238001
  }
237968
238002
  }
237969
238003
  }
238004
+ /**
238005
+ * Invoke the callback on each manifold edge whose adjacent facet normals form vectorToEye dot products with opposite sign.
238006
+ * * The callback is not called on boundary edges.
238007
+ * @param source facets
238008
+ * @param announce callback function invoked on manifold silhouette edges
238009
+ * @param vectorToEye normal of plane in which to compute silhouette edges
238010
+ * @param sideAngle angular tolerance for perpendicularity test
238011
+ */
238012
+ static announceSilhouetteEdges(source, announce, vectorToEye, sideAngle = _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_1__.Angle.createSmallAngle()) {
238013
+ if (source instanceof _Polyface__WEBPACK_IMPORTED_MODULE_6__.Polyface)
238014
+ return this.announceSilhouetteEdges(source.createVisitor(1), announce, vectorToEye, sideAngle);
238015
+ const mesh = source.clientPolyface();
238016
+ if (undefined === mesh)
238017
+ return;
238018
+ source.setNumWrap(1);
238019
+ const allEdges = this.createIndexedEdges(source);
238020
+ const manifoldEdges = [];
238021
+ allEdges.sortAndCollectClusters(manifoldEdges);
238022
+ const sideAngleTol = sideAngle.radians < 0.0 ? -sideAngle.radians : sideAngle.radians;
238023
+ const pointA = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_0__.Point3d.create();
238024
+ const pointB = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_0__.Point3d.create();
238025
+ const normal = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_0__.Vector3d.create();
238026
+ const analyzeFace = (iFacet) => {
238027
+ if (!PolyfaceQuery.computeFacetUnitNormal(source, iFacet, normal))
238028
+ return { isSideFace: false, perpAngle: 0.0 };
238029
+ const perpAngle = normal.radiansFromPerpendicular(vectorToEye);
238030
+ const isSideFace = Math.abs(perpAngle) <= sideAngleTol;
238031
+ return { isSideFace, perpAngle };
238032
+ };
238033
+ for (const pair of manifoldEdges) {
238034
+ if (!Array.isArray(pair) || pair.length !== 2)
238035
+ continue;
238036
+ const indexA = pair[0].vertexIndexA;
238037
+ const indexB = pair[0].vertexIndexB;
238038
+ if (!mesh.data.getPoint(indexA, pointA) || !mesh.data.getPoint(indexB, pointB))
238039
+ continue;
238040
+ const face0 = analyzeFace(pair[0].facetIndex);
238041
+ if (face0.isSideFace) {
238042
+ announce(pointA, pointB, indexA, indexB, pair[0].facetIndex);
238043
+ continue;
238044
+ }
238045
+ const face1 = analyzeFace(pair[1].facetIndex);
238046
+ if (face1.isSideFace) {
238047
+ announce(pointB, pointA, indexB, indexA, pair[1].facetIndex);
238048
+ continue;
238049
+ }
238050
+ if (face0.perpAngle * face1.perpAngle < 0.0) { // normals straddle plane
238051
+ announce(pointA, pointB, indexA, indexB, pair[0].facetIndex);
238052
+ continue;
238053
+ }
238054
+ }
238055
+ }
238056
+ /**
238057
+ * Collect manifold edges whose adjacent facet normals form vectorToEye dot products with opposite sign.
238058
+ * * Does not return boundary edges.
238059
+ * * Return the edges as chains of line segments.
238060
+ * @param source facets
238061
+ * @param vectorToEye normal of plane in which to compute silhouette edges
238062
+ * @param sideAngle angular tolerance for perpendicularity test
238063
+ */
238064
+ static collectSilhouetteEdges(source, vectorToEye, sideAngle = _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_1__.Angle.createSmallAngle()) {
238065
+ const collector = new _curve_internalContexts_MultiChainCollector__WEBPACK_IMPORTED_MODULE_12__.MultiChainCollector(_Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.smallMetricDistance, _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.smallMetricDistance);
238066
+ PolyfaceQuery.announceSilhouetteEdges(source, (ptA, ptB) => collector.captureCurve(_curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_11__.LineSegment3d.create(ptA, ptB)), vectorToEye, sideAngle);
238067
+ return collector.grabResult(true);
238068
+ }
237970
238069
  /** Find segments (within the linestring) which project to facets.
237971
238070
  * * Announce each pair of linestring segment and on-facet segment through a callback.
237972
238071
  * * Facets are ASSUMED to be convex and planar, and not overlap in the z direction.
237973
238072
  */
237974
238073
  static announceSweepLinestringToConvexPolyfaceXY(linestringPoints, polyface, announce) {
237975
- const context = _multiclip_SweepLineStringToFacetContext__WEBPACK_IMPORTED_MODULE_12__.SweepLineStringToFacetContext.create(linestringPoints);
238074
+ const context = _multiclip_SweepLineStringToFacetContext__WEBPACK_IMPORTED_MODULE_13__.SweepLineStringToFacetContext.create(linestringPoints);
237976
238075
  if (context) {
237977
238076
  const visitor = polyface.createVisitor(0);
237978
238077
  for (visitor.reset(); visitor.moveToNextFacet();) {
@@ -238005,7 +238104,7 @@ class PolyfaceQuery {
238005
238104
  * @internal
238006
238105
  */
238007
238106
  static async asyncAnnounceSweepLinestringToConvexPolyfaceXY(linestringPoints, polyface, announce) {
238008
- const context = _multiclip_SweepLineStringToFacetContext__WEBPACK_IMPORTED_MODULE_12__.SweepLineStringToFacetContext.create(linestringPoints);
238107
+ const context = _multiclip_SweepLineStringToFacetContext__WEBPACK_IMPORTED_MODULE_13__.SweepLineStringToFacetContext.create(linestringPoints);
238009
238108
  this.awaitBlockCount = 0;
238010
238109
  let workTotal = 0;
238011
238110
  if (context) {
@@ -238028,7 +238127,7 @@ class PolyfaceQuery {
238028
238127
  return this.partitionFacetIndicesByVertexConnectedComponent(polyface.createVisitor(0));
238029
238128
  }
238030
238129
  // The polyface is really a visitor !!!
238031
- const context = new _numerics_UnionFind__WEBPACK_IMPORTED_MODULE_13__.UnionFindContext(this.visitorClientPointCount(polyface));
238130
+ const context = new _numerics_UnionFind__WEBPACK_IMPORTED_MODULE_14__.UnionFindContext(this.visitorClientPointCount(polyface));
238032
238131
  for (polyface.reset(); polyface.moveToNextFacet();) {
238033
238132
  const firstVertexIndexOnThisFacet = polyface.pointIndex[0];
238034
238133
  for (const vertexIndex of polyface.pointIndex)
@@ -238104,7 +238203,7 @@ class PolyfaceQuery {
238104
238203
  const partitionedIndices = this.partitionFacetIndicesByVisibilityVector(polyface, vectorToEye, sideAngleTolerance);
238105
238204
  if (partitionedIndices[visibilitySelect].length === 0)
238106
238205
  return undefined;
238107
- const visitor = _IndexedPolyfaceVisitor__WEBPACK_IMPORTED_MODULE_14__.IndexedPolyfaceSubsetVisitor.createSubsetVisitor(polyface, partitionedIndices[visibilitySelect], 1);
238206
+ const visitor = _IndexedPolyfaceVisitor__WEBPACK_IMPORTED_MODULE_15__.IndexedPolyfaceSubsetVisitor.createSubsetVisitor(polyface, partitionedIndices[visibilitySelect], 1);
238108
238207
  return this.boundaryEdges(visitor, true, false, false);
238109
238208
  }
238110
238209
  /**
@@ -238114,7 +238213,7 @@ class PolyfaceQuery {
238114
238213
  * @param mesh
238115
238214
  */
238116
238215
  static announceBoundaryChainsAsLineString3d(mesh, announceLoop) {
238117
- const collector = new _curve_internalContexts_MultiChainCollector__WEBPACK_IMPORTED_MODULE_15__.MultiChainCollector(_Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.smallMetricDistance, 1000);
238216
+ const collector = new _curve_internalContexts_MultiChainCollector__WEBPACK_IMPORTED_MODULE_12__.MultiChainCollector(_Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.smallMetricDistance, 1000);
238118
238217
  PolyfaceQuery.announceBoundaryEdges(mesh, (pointA, pointB, _indexA, _indexB) => collector.captureCurve(_curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_11__.LineSegment3d.create(pointA, pointB)), true, false, false);
238119
238218
  collector.announceChainsAsLineString3d(announceLoop);
238120
238219
  }
@@ -238356,7 +238455,7 @@ class PolyfaceQuery {
238356
238455
  * @return collection of facet index arrays, one array per connected component
238357
238456
  */
238358
238457
  static partitionFacetIndicesBySortableEdgeClusters(edgeClusters, numFacets) {
238359
- const context = new _numerics_UnionFind__WEBPACK_IMPORTED_MODULE_13__.UnionFindContext(numFacets);
238458
+ const context = new _numerics_UnionFind__WEBPACK_IMPORTED_MODULE_14__.UnionFindContext(numFacets);
238360
238459
  for (const cluster of edgeClusters) {
238361
238460
  if (cluster instanceof _IndexedEdgeMatcher__WEBPACK_IMPORTED_MODULE_10__.SortableEdge) {
238362
238461
  // this edge does not connect anywhere. Ignore it!!
@@ -238447,7 +238546,7 @@ class PolyfaceQuery {
238447
238546
  let chainContext;
238448
238547
  if (options.assembleChains)
238449
238548
  chainContext = _topology_ChainMerge__WEBPACK_IMPORTED_MODULE_25__.ChainMergeContext.create();
238450
- const context = _multiclip_SweepLineStringToFacetContext__WEBPACK_IMPORTED_MODULE_12__.ClipSweptLineStringContext.create(linestringPoints, options.vectorToEye);
238549
+ const context = _multiclip_SweepLineStringToFacetContext__WEBPACK_IMPORTED_MODULE_13__.ClipSweptLineStringContext.create(linestringPoints, options.vectorToEye);
238451
238550
  if (context) {
238452
238551
  let visitor;
238453
238552
  if (polyfaceOrVisitor instanceof _Polyface__WEBPACK_IMPORTED_MODULE_6__.Polyface)
@@ -238505,7 +238604,7 @@ class PolyfaceQuery {
238505
238604
  for (let i = 1; i < lineStringSource.length; i++) {
238506
238605
  const point0 = lineStringSource.getPoint3dAtUncheckedPointIndex(i - 1);
238507
238606
  const point1 = lineStringSource.getPoint3dAtUncheckedPointIndex(i);
238508
- const edgeClipper = _multiclip_SweepLineStringToFacetContext__WEBPACK_IMPORTED_MODULE_12__.EdgeClipData.createPointPointSweep(point0, point1, sweepVector);
238607
+ const edgeClipper = _multiclip_SweepLineStringToFacetContext__WEBPACK_IMPORTED_MODULE_13__.EdgeClipData.createPointPointSweep(point0, point1, sweepVector);
238509
238608
  if (edgeClipper !== undefined) {
238510
238609
  _geometry3d_Range__WEBPACK_IMPORTED_MODULE_26__.Range3d.createNull(searchRange);
238511
238610
  searchRange.extendPoint(point0);
@@ -281790,7 +281889,7 @@ class TestContext {
281790
281889
  this.initializeRpcInterfaces({ title: this.settings.Backend.name, version: this.settings.Backend.version });
281791
281890
  const iModelClient = new imodels_client_management_1.IModelsClient({ api: { baseUrl: `https://${process.env.IMJS_URL_PREFIX ?? ""}api.bentley.com/imodels` } });
281792
281891
  await core_frontend_1.NoRenderApp.startup({
281793
- applicationVersion: "4.3.0-dev.16",
281892
+ applicationVersion: "4.3.0-dev.18",
281794
281893
  applicationId: this.settings.gprid,
281795
281894
  authorizationClient: new frontend_1.TestFrontendAuthorizationClient(this.adminUserAccessToken),
281796
281895
  hubAccess: new imodels_access_frontend_1.FrontendIModelsAccess(iModelClient),
@@ -285936,32 +286035,36 @@ class ContentPropertyValueFormatter {
285936
286035
  this._koqValueFormatter = _koqValueFormatter;
285937
286036
  }
285938
286037
  async formatPropertyValue(field, value, unitSystem) {
285939
- if (isFieldWithKoq(field) && typeof value === "number") {
285940
- const koq = field.properties[0].property.kindOfQuantity;
285941
- const formattedValue = await this._koqValueFormatter.format(value, { koqName: koq.name, unitSystem });
285942
- if (formattedValue !== undefined)
285943
- return formattedValue;
285944
- }
285945
- return this.formatValue(field.type, value);
285946
- }
285947
- formatValue(type, value) {
286038
+ const doubleFormatter = isFieldWithKoq(field)
286039
+ ? async (rawValue) => {
286040
+ const koq = field.properties[0].property.kindOfQuantity;
286041
+ const formattedValue = await this._koqValueFormatter.format(rawValue, { koqName: koq.name, unitSystem });
286042
+ if (formattedValue !== undefined)
286043
+ return formattedValue;
286044
+ return formatDouble(rawValue);
286045
+ }
286046
+ : async (rawValue) => formatDouble(rawValue);
286047
+ return this.formatValue(field.type, value, { doubleFormatter });
286048
+ }
286049
+ async formatValue(type, value, ctx) {
285948
286050
  switch (type.valueFormat) {
285949
286051
  case _TypeDescription__WEBPACK_IMPORTED_MODULE_1__.PropertyValueFormat.Primitive:
285950
- return this.formatPrimitiveValue(type, value);
286052
+ return this.formatPrimitiveValue(type, value, ctx);
285951
286053
  case _TypeDescription__WEBPACK_IMPORTED_MODULE_1__.PropertyValueFormat.Array:
285952
286054
  return this.formatArrayValue(type, value);
285953
286055
  case _TypeDescription__WEBPACK_IMPORTED_MODULE_1__.PropertyValueFormat.Struct:
285954
286056
  return this.formatStructValue(type, value);
285955
286057
  }
285956
286058
  }
285957
- formatPrimitiveValue(type, value) {
286059
+ async formatPrimitiveValue(type, value, ctx) {
285958
286060
  if (value === undefined)
285959
286061
  return "";
286062
+ const formatDoubleValue = async (raw) => ctx ? ctx.doubleFormatter(raw) : formatDouble(raw);
285960
286063
  if (type.typeName === "point2d" && isPoint2d(value)) {
285961
- return `X: ${formatDouble(value.x)} Y: ${formatDouble(value.y)}`;
286064
+ return `X: ${await formatDoubleValue(value.x)}; Y: ${await formatDoubleValue(value.y)}`;
285962
286065
  }
285963
286066
  if (type.typeName === "point3d" && isPoint3d(value)) {
285964
- return `X: ${formatDouble(value.x)} Y: ${formatDouble(value.y)} Z: ${formatDouble(value.z)}`;
286067
+ return `X: ${await formatDoubleValue(value.x)}; Y: ${await formatDoubleValue(value.y)}; Z: ${await formatDoubleValue(value.z)}`;
285965
286068
  }
285966
286069
  if (type.typeName === "dateTime") {
285967
286070
  (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(typeof value === "string");
@@ -285977,7 +286080,7 @@ class ContentPropertyValueFormatter {
285977
286080
  }
285978
286081
  if (type.typeName === "double") {
285979
286082
  (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(isNumber(value));
285980
- return formatDouble(value);
286083
+ return formatDoubleValue(value);
285981
286084
  }
285982
286085
  if (type.typeName === "navigation") {
285983
286086
  (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(_Value__WEBPACK_IMPORTED_MODULE_2__.Value.isNavigationValue(value));
@@ -285985,19 +286088,19 @@ class ContentPropertyValueFormatter {
285985
286088
  }
285986
286089
  return value.toString();
285987
286090
  }
285988
- formatStructValue(type, value) {
286091
+ async formatStructValue(type, value) {
285989
286092
  if (!_Value__WEBPACK_IMPORTED_MODULE_2__.Value.isMap(value))
285990
286093
  return {};
285991
286094
  const formattedMember = {};
285992
286095
  for (const member of type.members) {
285993
- formattedMember[member.name] = this.formatValue(member.type, value[member.name]);
286096
+ formattedMember[member.name] = await this.formatValue(member.type, value[member.name]);
285994
286097
  }
285995
286098
  return formattedMember;
285996
286099
  }
285997
- formatArrayValue(type, value) {
286100
+ async formatArrayValue(type, value) {
285998
286101
  if (!_Value__WEBPACK_IMPORTED_MODULE_2__.Value.isArray(value))
285999
286102
  return [];
286000
- return value.map((arrayVal) => this.formatValue(type.memberType, arrayVal));
286103
+ return Promise.all(value.map(async (arrayVal) => this.formatValue(type.memberType, arrayVal)));
286001
286104
  }
286002
286105
  }
286003
286106
  function formatDouble(value) {
@@ -301198,7 +301301,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"P
301198
301301
  /***/ ((module) => {
301199
301302
 
301200
301303
  "use strict";
301201
- module.exports = JSON.parse('{"name":"@itwin/core-frontend","version":"4.3.0-dev.16","description":"iTwin.js frontend components","main":"lib/cjs/core-frontend.js","module":"lib/esm/core-frontend.js","typings":"lib/cjs/core-frontend","license":"MIT","scripts":{"build":"npm run -s copy:public && npm run -s build:cjs && npm run -s build:esm && npm run -s webpackWorkers && npm run -s copy:workers","build:cjs":"npm run -s copy:js:cjs && tsc 1>&2 --outDir lib/cjs","build:esm":"npm run -s copy:js:esm && tsc 1>&2 --module ES2020 --outDir lib/esm","clean":"rimraf lib .rush/temp/package-deps*.json","copy:public":"cpx \\"./src/public/**/*\\" ./lib/public","copy:js:cjs":"cpx \\"./src/**/*.js\\" ./lib/cjs","copy:js:esm":"cpx \\"./src/**/*.js\\" ./lib/esm","copy:workers":"cpx \\"./lib/workers/webpack/parse-imdl-worker.js\\" ./lib/public/scripts","docs":"betools docs --includes=../../generated-docs/extract --json=../../generated-docs/core/core-frontend/file.json --tsIndexFile=./core-frontend.ts --onlyJson --excludes=webgl/**/*,**/map/*.d.ts,**/tile/*.d.ts,**/*-css.ts","extract-api":"betools extract-api --entry=core-frontend && npm run extract-extension-api","extract-extension-api":"eslint -c extraction.eslint.config.js \\"./src/**/*.ts\\" 1>&2","lint":"eslint -f visualstudio \\"./src/**/*.ts\\" 1>&2","pseudolocalize":"betools pseudolocalize --englishDir ./src/public/locales/en --out ./public/locales/en-PSEUDO","test":"npm run -s webpackTests && certa -r chrome","cover":"npm -s test","test:debug":"certa -r chrome --debug","webpackTests":"webpack --config ./src/test/utils/webpack.config.js 1>&2 && npm run -s webpackTestWorker","webpackTestWorker":"webpack --config ./src/test/worker/webpack.config.js 1>&2 && cpx \\"./lib/test/test-worker.js\\" ./lib/test","webpackWorkers":"webpack --config ./src/workers/ImdlParser/webpack.config.js 1>&2"},"repository":{"type":"git","url":"https://github.com/iTwin/itwinjs-core.git","directory":"core/frontend"},"keywords":["Bentley","BIM","iModel","digital-twin","iTwin"],"author":{"name":"Bentley Systems, Inc.","url":"http://www.bentley.com"},"peerDependencies":{"@itwin/appui-abstract":"workspace:^4.3.0-dev.16","@itwin/core-bentley":"workspace:^4.3.0-dev.16","@itwin/core-common":"workspace:^4.3.0-dev.16","@itwin/core-geometry":"workspace:^4.3.0-dev.16","@itwin/core-orbitgt":"workspace:^4.3.0-dev.16","@itwin/core-quantity":"workspace:^4.3.0-dev.16"},"//devDependencies":["NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install","NOTE: All tools used by scripts in this package must be listed as devDependencies"],"devDependencies":{"@itwin/appui-abstract":"workspace:*","@itwin/build-tools":"workspace:*","@itwin/core-bentley":"workspace:*","@itwin/core-common":"workspace:*","@itwin/core-geometry":"workspace:*","@itwin/core-orbitgt":"workspace:*","@itwin/core-quantity":"workspace:*","@itwin/certa":"workspace:*","@itwin/eslint-plugin":"4.0.0-dev.44","@types/chai":"4.3.1","@types/chai-as-promised":"^7","@types/mocha":"^8.2.2","@types/node":"18.16.1","@types/sinon":"^10.0.15","babel-loader":"~8.2.5","babel-plugin-istanbul":"~6.1.1","chai":"^4.3.10","chai-as-promised":"^7","cpx2":"^3.0.0","eslint":"^8.44.0","glob":"^7.1.2","mocha":"^10.0.0","nyc":"^15.1.0","rimraf":"^3.0.2","sinon":"^15.0.4","source-map-loader":"^4.0.0","typescript":"~5.0.2","typemoq":"^2.1.0","webpack":"^5.76.0"},"//dependencies":["NOTE: these dependencies should be only for things that DO NOT APPEAR IN THE API","NOTE: core-frontend should remain UI technology agnostic, so no react/angular dependencies are allowed"],"dependencies":{"@itwin/cloud-agnostic-core":"^2.1.0","@itwin/object-storage-core":"^2.1.0","@itwin/core-i18n":"workspace:*","@itwin/core-telemetry":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@loaders.gl/core":"^3.1.6","@loaders.gl/draco":"^3.1.6","fuse.js":"^3.3.0","wms-capabilities":"0.4.0"},"nyc":{"extends":"./node_modules/@itwin/build-tools/.nycrc"}}');
301304
+ module.exports = JSON.parse('{"name":"@itwin/core-frontend","version":"4.3.0-dev.18","description":"iTwin.js frontend components","main":"lib/cjs/core-frontend.js","module":"lib/esm/core-frontend.js","typings":"lib/cjs/core-frontend","license":"MIT","scripts":{"build":"npm run -s copy:public && npm run -s build:cjs && npm run -s build:esm && npm run -s webpackWorkers && npm run -s copy:workers","build:cjs":"npm run -s copy:js:cjs && tsc 1>&2 --outDir lib/cjs","build:esm":"npm run -s copy:js:esm && tsc 1>&2 --module ES2020 --outDir lib/esm","clean":"rimraf lib .rush/temp/package-deps*.json","copy:public":"cpx \\"./src/public/**/*\\" ./lib/public","copy:js:cjs":"cpx \\"./src/**/*.js\\" ./lib/cjs","copy:js:esm":"cpx \\"./src/**/*.js\\" ./lib/esm","copy:workers":"cpx \\"./lib/workers/webpack/parse-imdl-worker.js\\" ./lib/public/scripts","docs":"betools docs --includes=../../generated-docs/extract --json=../../generated-docs/core/core-frontend/file.json --tsIndexFile=./core-frontend.ts --onlyJson --excludes=webgl/**/*,**/map/*.d.ts,**/tile/*.d.ts,**/*-css.ts","extract-api":"betools extract-api --entry=core-frontend && npm run extract-extension-api","extract-extension-api":"eslint -c extraction.eslint.config.js \\"./src/**/*.ts\\" 1>&2","lint":"eslint -f visualstudio \\"./src/**/*.ts\\" 1>&2","pseudolocalize":"betools pseudolocalize --englishDir ./src/public/locales/en --out ./public/locales/en-PSEUDO","test":"npm run -s webpackTests && certa -r chrome","cover":"npm -s test","test:debug":"certa -r chrome --debug","webpackTests":"webpack --config ./src/test/utils/webpack.config.js 1>&2 && npm run -s webpackTestWorker","webpackTestWorker":"webpack --config ./src/test/worker/webpack.config.js 1>&2 && cpx \\"./lib/test/test-worker.js\\" ./lib/test","webpackWorkers":"webpack --config ./src/workers/ImdlParser/webpack.config.js 1>&2"},"repository":{"type":"git","url":"https://github.com/iTwin/itwinjs-core.git","directory":"core/frontend"},"keywords":["Bentley","BIM","iModel","digital-twin","iTwin"],"author":{"name":"Bentley Systems, Inc.","url":"http://www.bentley.com"},"peerDependencies":{"@itwin/appui-abstract":"workspace:^4.3.0-dev.18","@itwin/core-bentley":"workspace:^4.3.0-dev.18","@itwin/core-common":"workspace:^4.3.0-dev.18","@itwin/core-geometry":"workspace:^4.3.0-dev.18","@itwin/core-orbitgt":"workspace:^4.3.0-dev.18","@itwin/core-quantity":"workspace:^4.3.0-dev.18"},"//devDependencies":["NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install","NOTE: All tools used by scripts in this package must be listed as devDependencies"],"devDependencies":{"@itwin/appui-abstract":"workspace:*","@itwin/build-tools":"workspace:*","@itwin/core-bentley":"workspace:*","@itwin/core-common":"workspace:*","@itwin/core-geometry":"workspace:*","@itwin/core-orbitgt":"workspace:*","@itwin/core-quantity":"workspace:*","@itwin/certa":"workspace:*","@itwin/eslint-plugin":"4.0.0-dev.44","@types/chai":"4.3.1","@types/chai-as-promised":"^7","@types/mocha":"^8.2.2","@types/node":"18.16.1","@types/sinon":"^10.0.15","babel-loader":"~8.2.5","babel-plugin-istanbul":"~6.1.1","chai":"^4.3.10","chai-as-promised":"^7","cpx2":"^3.0.0","eslint":"^8.44.0","glob":"^7.1.2","mocha":"^10.0.0","nyc":"^15.1.0","rimraf":"^3.0.2","sinon":"^15.0.4","source-map-loader":"^4.0.0","typescript":"~5.0.2","typemoq":"^2.1.0","webpack":"^5.76.0"},"//dependencies":["NOTE: these dependencies should be only for things that DO NOT APPEAR IN THE API","NOTE: core-frontend should remain UI technology agnostic, so no react/angular dependencies are allowed"],"dependencies":{"@itwin/cloud-agnostic-core":"^2.1.0","@itwin/object-storage-core":"^2.1.0","@itwin/core-i18n":"workspace:*","@itwin/core-telemetry":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@loaders.gl/core":"^3.1.6","@loaders.gl/draco":"^3.1.6","fuse.js":"^3.3.0","wms-capabilities":"0.4.0"},"nyc":{"extends":"./node_modules/@itwin/build-tools/.nycrc"}}');
301202
301305
 
301203
301306
  /***/ }),
301204
301307