@itwin/rpcinterface-full-stack-tests 5.14.0-dev.7 → 5.14.0-dev.9

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.
@@ -55931,6 +55931,7 @@ function isBinaryImageSource(source) {
55931
55931
  __webpack_require__.r(__webpack_exports__);
55932
55932
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
55933
55933
  /* harmony export */ getPullChangesIpcChannel: () => (/* binding */ getPullChangesIpcChannel),
55934
+ /* harmony export */ getPushChangesIpcChannel: () => (/* binding */ getPushChangesIpcChannel),
55934
55935
  /* harmony export */ ipcAppChannels: () => (/* binding */ ipcAppChannels)
55935
55936
  /* harmony export */ });
55936
55937
  /*---------------------------------------------------------------------------------------------
@@ -55941,9 +55942,16 @@ __webpack_require__.r(__webpack_exports__);
55941
55942
  * @module NativeApp
55942
55943
  */
55943
55944
  /** Get IPC channel name used for reporting progress of pulling changes into iModel.
55945
+ * @param key the key of the briefcase being pulled into.
55944
55946
  * @internal
55945
55947
  */
55946
- const getPullChangesIpcChannel = (iModelId) => `${ipcAppChannels.functions}/pullChanges/${iModelId}`;
55948
+ const getPullChangesIpcChannel = (key) => `${ipcAppChannels.functions}/pullChanges/${key}`;
55949
+ /** Get IPC channel name used for reporting the progress of the changeset download that [[IpcAppFunctions.pushChanges]] performs before
55950
+ * uploading. Kept distinct from [[getPullChangesIpcChannel]] so that a listener attached for a pull never observes a push's download.
55951
+ * @param key the key of the briefcase being pushed from.
55952
+ * @internal
55953
+ */
55954
+ const getPushChangesIpcChannel = (key) => `${ipcAppChannels.functions}/pushChanges/pullProgress/${key}`;
55947
55955
  /** @internal */
55948
55956
  const ipcAppChannels = {
55949
55957
  functions: "itwinjs-core/ipc-app",
@@ -65779,6 +65787,7 @@ __webpack_require__.r(__webpack_exports__);
65779
65787
  /* harmony export */ getMarkerText: () => (/* reexport safe */ _annotation_TextBlock__WEBPACK_IMPORTED_MODULE_3__.getMarkerText),
65780
65788
  /* harmony export */ getMaximumMajorTileFormatVersion: () => (/* reexport safe */ _tile_TileMetadata__WEBPACK_IMPORTED_MODULE_163__.getMaximumMajorTileFormatVersion),
65781
65789
  /* harmony export */ getPullChangesIpcChannel: () => (/* reexport safe */ _IpcAppProps__WEBPACK_IMPORTED_MODULE_80__.getPullChangesIpcChannel),
65790
+ /* harmony export */ getPushChangesIpcChannel: () => (/* reexport safe */ _IpcAppProps__WEBPACK_IMPORTED_MODULE_80__.getPushChangesIpcChannel),
65782
65791
  /* harmony export */ getTileObjectReference: () => (/* reexport safe */ _TileProps__WEBPACK_IMPORTED_MODULE_122__.getTileObjectReference),
65783
65792
  /* harmony export */ iModelTileTreeIdToString: () => (/* reexport safe */ _tile_TileMetadata__WEBPACK_IMPORTED_MODULE_163__.iModelTileTreeIdToString),
65784
65793
  /* harmony export */ iTwinChannel: () => (/* reexport safe */ _ipc_IpcSocket__WEBPACK_IMPORTED_MODULE_74__.iTwinChannel),
@@ -82403,6 +82412,17 @@ class SchemaCache {
82403
82412
  return entry.schemaInfo;
82404
82413
  return undefined;
82405
82414
  }
82415
+ /**
82416
+ * Gets the schema info which matches the provided SchemaKey. The schema info may be returned before the schema is fully loaded.
82417
+ * Does not await partially loaded schemas.
82418
+ * @param schemaKey The SchemaKey describing the schema to get from the cache.
82419
+ * @param matchType The match type to use when locating the schema
82420
+ */
82421
+ getSchemaInfoSync(schemaKey, matchType = _ECObjects__WEBPACK_IMPORTED_MODULE_0__.SchemaMatchType.Latest) {
82422
+ if (this.count === 0)
82423
+ return undefined;
82424
+ return this.findEntry(schemaKey, matchType)?.schemaInfo;
82425
+ }
82406
82426
  /**
82407
82427
  * Gets the schema which matches the provided SchemaKey. If the schema is partially loaded an exception will be thrown.
82408
82428
  * @param schemaKey The SchemaKey describing the schema to get from the cache.
@@ -82600,6 +82620,16 @@ class SchemaContext {
82600
82620
  getCachedSchemaSync(schemaKey, matchType = _ECObjects__WEBPACK_IMPORTED_MODULE_0__.SchemaMatchType.Latest) {
82601
82621
  return this._knownSchemas.getSchemaSync(schemaKey, matchType);
82602
82622
  }
82623
+ /**
82624
+ * Attempts to get a SchemaInfo from the context's cache.
82625
+ * Returns the info even if the schema is only partially loaded.
82626
+ * @param schemaKey The SchemaKey to identify the Schema.
82627
+ * @param matchType The SchemaMatch type to use. Default is SchemaMatchType.Latest.
82628
+ * @internal
82629
+ */
82630
+ getCachedSchemaInfoSync(schemaKey, matchType = _ECObjects__WEBPACK_IMPORTED_MODULE_0__.SchemaMatchType.Latest) {
82631
+ return this._knownSchemas.getSchemaInfoSync(schemaKey, matchType);
82632
+ }
82603
82633
  async getSchemaItem(schemaNameOrKey, itemNameOrCtor, itemConstructor) {
82604
82634
  let schemaKey;
82605
82635
  if (typeof schemaNameOrKey === "string") {
@@ -82875,11 +82905,25 @@ class SchemaReadHelper {
82875
82905
  }
82876
82906
  this._schemaInfo = schemaInfo;
82877
82907
  // Need to add this schema to the context to be able to locate schemaItems within the context.
82878
- if (addSchemaToCache && !this._context.schemaExists(schema.schemaKey)) {
82879
- await this._context.addSchemaPromise(schemaInfo, schema, this.loadSchema(schemaInfo, schema));
82908
+ if (addSchemaToCache) {
82909
+ this.checkForReadVersionConflict(schema.schemaKey);
82910
+ if (!this._context.schemaExists(schema.schemaKey))
82911
+ await this._context.addSchemaPromise(schemaInfo, schema, this.loadSchema(schemaInfo, schema));
82880
82912
  }
82881
82913
  return schemaInfo;
82882
82914
  }
82915
+ /**
82916
+ * Two read-incompatible versions of the same schema can never substitute for one another.
82917
+ * Detect it here and fail with a clear error.
82918
+ * @param schemaKey The exact key of the schema about to be loaded into the context.
82919
+ */
82920
+ checkForReadVersionConflict(schemaKey) {
82921
+ const existingInfo = this._context.getCachedSchemaInfoSync(new _SchemaKey__WEBPACK_IMPORTED_MODULE_5__.SchemaKey(schemaKey.name), _ECObjects__WEBPACK_IMPORTED_MODULE_1__.SchemaMatchType.Latest);
82922
+ if (existingInfo && existingInfo.schemaKey.readVersion !== schemaKey.readVersion) {
82923
+ throw new _Exception__WEBPACK_IMPORTED_MODULE_2__.ECSchemaError(_Exception__WEBPACK_IMPORTED_MODULE_2__.ECSchemaStatus.DuplicateSchema, `The schema '${schemaKey.toString(true)}' cannot be loaded: the read-incompatible version '${existingInfo.schemaKey.toString(true)}' is already loaded in this context. ` +
82924
+ `A schema graph cannot require two read-incompatible versions of the same schema.`);
82925
+ }
82926
+ }
82883
82927
  /**
82884
82928
  * Populates the given Schema from a serialized representation.
82885
82929
  * @param schema The Schema to populate
@@ -82901,7 +82945,7 @@ class SchemaReadHelper {
82901
82945
  throw new _Exception__WEBPACK_IMPORTED_MODULE_2__.ECSchemaError(_Exception__WEBPACK_IMPORTED_MODULE_2__.ECSchemaStatus.UnableToLoadSchema, `Could not load schema ${schema.schemaKey.toString()}`);
82902
82946
  return loadedSchema;
82903
82947
  }
82904
- const cachedSchema = await this._context.getCachedSchema(schemaInfo.schemaKey, _ECObjects__WEBPACK_IMPORTED_MODULE_1__.SchemaMatchType.Latest);
82948
+ const cachedSchema = await this._context.getCachedSchema(schemaInfo.schemaKey, _ECObjects__WEBPACK_IMPORTED_MODULE_1__.SchemaMatchType.LatestReadCompatible);
82905
82949
  if (undefined === cachedSchema)
82906
82950
  throw new _Exception__WEBPACK_IMPORTED_MODULE_2__.ECSchemaError(_Exception__WEBPACK_IMPORTED_MODULE_2__.ECSchemaStatus.UnableToLoadSchema, `Could not load schema ${schema.schemaKey.toString()}`);
82907
82951
  return cachedSchema;
@@ -82953,6 +82997,7 @@ class SchemaReadHelper {
82953
82997
  schema.fromJSONSync(this._parser.parseSchema());
82954
82998
  this._schema = schema;
82955
82999
  // Need to add this schema to the context to be able to locate schemaItems within the context.
83000
+ this.checkForReadVersionConflict(schema.schemaKey);
82956
83001
  if (!this._context.schemaExists(schema.schemaKey))
82957
83002
  this._context.addSchemaSync(schema);
82958
83003
  // Load schema references first
@@ -105513,29 +105558,38 @@ class BriefcaseConnection extends _IModelConnection__WEBPACK_IMPORTED_MODULE_5__
105513
105558
  async abandonChanges() {
105514
105559
  await _IpcApp__WEBPACK_IMPORTED_MODULE_6__.IpcApp.appFunctionIpc.abandonChanges(this.key); // eslint-disable-line @typescript-eslint/no-deprecated
105515
105560
  }
105561
+ /** Subscribes to changeset download progress events on `channel` and wires `abortSignal` to `cancel`.
105562
+ * @returns a function that removes every listener that was added.
105563
+ */
105564
+ listenForChangesetDownloadProgress(args) {
105565
+ const { channel, cancel, downloadProgressCallback, abortSignal } = args;
105566
+ const removeListeners = [];
105567
+ if (downloadProgressCallback) {
105568
+ const handleProgress = (_evt, data) => downloadProgressCallback(data);
105569
+ removeListeners.push(_IpcApp__WEBPACK_IMPORTED_MODULE_6__.IpcApp.addListener(channel, handleProgress));
105570
+ }
105571
+ if (abortSignal) {
105572
+ const abort = () => void cancel();
105573
+ abortSignal.addEventListener("abort", abort);
105574
+ removeListeners.push(() => abortSignal.removeEventListener("abort", abort));
105575
+ }
105576
+ return () => removeListeners.forEach((remove) => remove());
105577
+ }
105516
105578
  /** Pull (and potentially merge if there are local changes) up to a specified changeset from iModelHub into this briefcase
105517
105579
  * @param toIndex The changeset index to pull changes to. If `undefined`, pull all changes.
105518
105580
  * @param options Options for pulling changes.
105519
105581
  * @see [[BriefcaseTxns.onChangesPulled]] for the event dispatched after changes are pulled.
105520
105582
  */
105521
105583
  async pullChanges(toIndex, options) {
105522
- const removeListeners = [];
105523
- const shouldReportProgress = !!options?.downloadProgressCallback;
105524
- if (shouldReportProgress) {
105525
- const handleProgress = (_evt, data) => {
105526
- options?.downloadProgressCallback?.(data);
105527
- };
105528
- const removeProgressListener = _IpcApp__WEBPACK_IMPORTED_MODULE_6__.IpcApp.addListener((0,_itwin_core_common__WEBPACK_IMPORTED_MODULE_1__.getPullChangesIpcChannel)(this.iModelId), handleProgress);
105529
- removeListeners.push(removeProgressListener);
105530
- }
105531
- if (options?.abortSignal) {
105532
- const abort = () => void _IpcApp__WEBPACK_IMPORTED_MODULE_6__.IpcApp.appFunctionIpc.cancelPullChangesRequest(this.key);
105533
- options?.abortSignal.addEventListener("abort", abort);
105534
- removeListeners.push(() => options?.abortSignal?.removeEventListener("abort", abort));
105535
- }
105536
105584
  this.requireTimeline();
105585
+ const removeListeners = this.listenForChangesetDownloadProgress({
105586
+ channel: (0,_itwin_core_common__WEBPACK_IMPORTED_MODULE_1__.getPullChangesIpcChannel)(this.key),
105587
+ cancel: async () => _IpcApp__WEBPACK_IMPORTED_MODULE_6__.IpcApp.appFunctionIpc.cancelPullChangesRequest(this.key),
105588
+ downloadProgressCallback: options?.downloadProgressCallback,
105589
+ abortSignal: options?.abortSignal,
105590
+ });
105537
105591
  const ipcAppOptions = {
105538
- reportProgress: shouldReportProgress,
105592
+ reportProgress: !!options?.downloadProgressCallback,
105539
105593
  progressInterval: options?.progressInterval,
105540
105594
  enableCancellation: !!options?.abortSignal,
105541
105595
  };
@@ -105543,18 +105597,29 @@ class BriefcaseConnection extends _IModelConnection__WEBPACK_IMPORTED_MODULE_5__
105543
105597
  this.changeset = await _IpcApp__WEBPACK_IMPORTED_MODULE_6__.IpcApp.appFunctionIpc.pullChanges(this.key, toIndex, ipcAppOptions);
105544
105598
  }
105545
105599
  finally {
105546
- removeListeners.forEach((remove) => remove());
105600
+ removeListeners();
105547
105601
  }
105548
105602
  await this.invalidateSchemaViewIfChanged();
105549
105603
  }
105550
- /** Create a changeset from local Txns and push to iModelHub. On success, clear Txn table.
105551
- * @param description The description for the changeset
105552
- * @returns the changesetId of the pushed changes
105553
- * @see [[BriefcaseTxns.onChangesPushed]] for the event dispatched after changes are pushed.
105554
- */
105555
- async pushChanges(description) {
105604
+ async pushChanges(description, options) {
105556
105605
  this.requireTimeline();
105557
- return this.changeset = await _IpcApp__WEBPACK_IMPORTED_MODULE_6__.IpcApp.appFunctionIpc.pushChanges(this.key, description);
105606
+ const removeListeners = this.listenForChangesetDownloadProgress({
105607
+ channel: (0,_itwin_core_common__WEBPACK_IMPORTED_MODULE_1__.getPushChangesIpcChannel)(this.key),
105608
+ cancel: async () => _IpcApp__WEBPACK_IMPORTED_MODULE_6__.IpcApp.appFunctionIpc.cancelPushChangesRequest(this.key),
105609
+ downloadProgressCallback: options?.downloadProgressCallback,
105610
+ abortSignal: options?.abortSignal,
105611
+ });
105612
+ const ipcAppOptions = {
105613
+ reportDownloadProgress: !!options?.downloadProgressCallback,
105614
+ downloadProgressInterval: options?.downloadProgressInterval,
105615
+ enableCancellation: !!options?.abortSignal,
105616
+ };
105617
+ try {
105618
+ return this.changeset = await _IpcApp__WEBPACK_IMPORTED_MODULE_6__.IpcApp.appFunctionIpc.pushChanges(this.key, description, ipcAppOptions);
105619
+ }
105620
+ finally {
105621
+ removeListeners();
105622
+ }
105558
105623
  }
105559
105624
  /** The current graphical editing scope, if one is in progress.
105560
105625
  * @see [[enterEditingScope]] to begin graphical editing.
@@ -215156,15 +215221,18 @@ __webpack_require__.r(__webpack_exports__);
215156
215221
 
215157
215222
 
215158
215223
  /**
215159
- * fitPoints and end condition data for [[AkimaCurve3d]]
215224
+ * Data for an [[AkimaCurve3d]]
215160
215225
  * * This is a "typed object" version of the serializer-friendly [[AkimaCurve3dProps]]
215161
- * * Typical use cases rarely require all parameters, so the constructor does not itemize them as parameters.
215162
215226
  * @public
215163
215227
  */
215164
215228
  class AkimaCurve3dOptions {
215229
+ /**
215230
+ * Points that the curve must pass through.
215231
+ * * Traditional DGN-style Akima curves interpret the first two and last two fit points as end tangent conditions,
215232
+ * however as the current implementation uses another interpolation algorithm, there is no such interpretation here.
215233
+ */
215165
215234
  fitPoints;
215166
215235
  /**
215167
- *
215168
215236
  * @param fitPoints points to CAPTURE
215169
215237
  * @param knots array to CAPTURE
215170
215238
  */
@@ -215175,7 +215243,7 @@ class AkimaCurve3dOptions {
215175
215243
  * First and last 2 points are "beyond the end" for control of end slope.
215176
215244
  fitPoints: Point3d[];
215177
215245
 
215178
- /** Clone with strongly typed members reduced to simple json. */
215246
+ /** Clone with strongly typed members reduced to simple json. */
215179
215247
  cloneAsAkimaCurve3dProps() {
215180
215248
  const props = {
215181
215249
  fitPoints: _geometry3d_PointHelpers__WEBPACK_IMPORTED_MODULE_2__.Point3dArray.cloneDeepJSONNumberArrays(this.fitPoints),
@@ -215192,24 +215260,25 @@ class AkimaCurve3dOptions {
215192
215260
  const result = new AkimaCurve3dOptions(_geometry3d_PointHelpers__WEBPACK_IMPORTED_MODULE_2__.Point3dArray.clonePoint3dArray(source.fitPoints));
215193
215261
  return result;
215194
215262
  }
215263
+ /** Whether the two options are equivalent or both undefined. */
215195
215264
  static areAlmostEqual(dataA, dataB) {
215196
215265
  if (dataA === undefined && dataB === undefined)
215197
215266
  return true;
215198
- if (dataA !== undefined && dataB !== undefined) {
215267
+ if (dataA !== undefined && dataB !== undefined)
215199
215268
  return _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.almostEqualArrays(dataA.fitPoints, dataB.fitPoints, (a, b) => a.isAlmostEqual(b));
215200
- }
215201
215269
  return false;
215202
215270
  }
215203
215271
  }
215204
215272
  /**
215205
- * Interpolating curve.
215273
+ * Interpolating curve using the Akima formulation.
215206
215274
  * * Derive from [[ProxyCurve]]
215207
215275
  * * Use a [[BSplineCurve3d]] as the proxy
215208
- * *
215276
+ * * Currently the Akima formulation is replaced with a Greville interpolation.
215209
215277
  * @public
215210
215278
  */
215211
215279
  class AkimaCurve3d extends _curve_ProxyCurve__WEBPACK_IMPORTED_MODULE_0__.ProxyCurve {
215212
- curvePrimitiveType = "interpolationCurve";
215280
+ /** String name for schema properties. */
215281
+ curvePrimitiveType = "akimaCurve";
215213
215282
  _options;
215214
215283
  /** CAPTURE properties and proxy curve. */
215215
215284
  constructor(properties, proxyCurve) {
@@ -215224,9 +215293,9 @@ class AkimaCurve3d extends _curve_ProxyCurve__WEBPACK_IMPORTED_MODULE_0__.ProxyC
215224
215293
  return result;
215225
215294
  }
215226
215295
  /**
215227
- * Create an [[AkimaCurve3d]] based on points, knots, and other properties in the [[AkimaCurve3dProps]] or [[AkimaCurve3dOptions]].
215296
+ * Create an [[AkimaCurve3d]] based on an [[AkimaCurve3dProps]] or [[AkimaCurve3dOptions]].
215228
215297
  * * This saves a COPY OF the options or props.
215229
- * * Use createCapture () if the options or props can be used without copy
215298
+ * * Use createCapture() if the options or props can be used without copy
215230
215299
  */
215231
215300
  static create(options) {
215232
215301
  let optionsCopy;
@@ -215279,11 +215348,9 @@ class AkimaCurve3d extends _curve_ProxyCurve__WEBPACK_IMPORTED_MODULE_0__.ProxyC
215279
215348
  * Transform this [[AkimaCurve3d]] and its defining data in place
215280
215349
  */
215281
215350
  tryTransformInPlace(transform) {
215282
- const proxyOk = this._proxyCurve.tryTransformInPlace(transform);
215283
- if (proxyOk) {
215284
- transform.multiplyPoint3dArray(this._options.fitPoints);
215285
- }
215286
- return proxyOk;
215351
+ this._proxyCurve.tryTransformInPlace(transform);
215352
+ transform.multiplyPoint3dArray(this._options.fitPoints);
215353
+ return true; // we know this succeeds
215287
215354
  }
215288
215355
  /**
215289
215356
  * Find intervals of this CurvePrimitive that are interior to a clipper.
@@ -215305,6 +215372,7 @@ class AkimaCurve3d extends _curve_ProxyCurve__WEBPACK_IMPORTED_MODULE_0__.ProxyC
215305
215372
  }
215306
215373
  /** Test if `other` is also an [[AkimaCurve3d]] */
215307
215374
  isSameGeometryClass(other) { return other instanceof AkimaCurve3d; }
215375
+ /** Test if this [[AkimaCurve3d]] is almost equal to another GeometryQuery object. */
215308
215376
  isAlmostEqual(other) {
215309
215377
  if (other instanceof AkimaCurve3d) {
215310
215378
  return AkimaCurve3dOptions.areAlmostEqual(this._options, other._options);
@@ -216209,10 +216277,11 @@ class BSplineCurve3d extends BSplineCurve3dBase {
216209
216277
  }
216210
216278
  /**
216211
216279
  * Create a B-spline curve from an Akima curve.
216212
- * @param options collection of points and end conditions.
216280
+ * * The Akima formulation of the curve is currently replaced by a Greville interpolation.
216281
+ * @param options data for construction
216213
216282
  */
216214
216283
  static createFromAkimaCurve3dOptions(options) {
216215
- return _BSplineCurveOps__WEBPACK_IMPORTED_MODULE_19__.BSplineCurveOps.createThroughPoints(options.fitPoints, 4); // temporary
216284
+ return _BSplineCurveOps__WEBPACK_IMPORTED_MODULE_19__.BSplineCurveOps.createThroughPoints(options.fitPoints, 4);
216216
216285
  }
216217
216286
  /**
216218
216287
  * Create a B-spline curve with given knots.
@@ -220249,8 +220318,7 @@ class InterpolationCurve3dOptions {
220249
220318
  result._endTangent = source.endTangent ? _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_3__.Vector3d.fromJSON(source.endTangent) : undefined;
220250
220319
  return result;
220251
220320
  }
220252
- // ugh.
220253
- // vector equality test with awkward rule that 000 matches undefined.
220321
+ /** Vector equality test, with the additional rule that the zero vector matches undefined. */
220254
220322
  static areAlmostEqualAllow000AsUndefined(a, b) {
220255
220323
  if (a !== undefined && a.maxAbs() === 0)
220256
220324
  a = undefined;
@@ -220260,6 +220328,7 @@ class InterpolationCurve3dOptions {
220260
220328
  return a.isAlmostEqual(b);
220261
220329
  return a === undefined && b === undefined;
220262
220330
  }
220331
+ /** Whether the two options are equivalent or both undefined. */
220263
220332
  static areAlmostEqual(dataA, dataB) {
220264
220333
  if (dataA === undefined && dataB === undefined)
220265
220334
  return true;
@@ -220308,6 +220377,7 @@ class InterpolationCurve3dOptions {
220308
220377
  * @public
220309
220378
  */
220310
220379
  class InterpolationCurve3d extends _curve_ProxyCurve__WEBPACK_IMPORTED_MODULE_1__.ProxyCurve {
220380
+ /** String name for schema properties. */
220311
220381
  curvePrimitiveType = "interpolationCurve";
220312
220382
  _options;
220313
220383
  /** CAPTURE properties and proxy curve. */
@@ -220380,15 +220450,13 @@ class InterpolationCurve3d extends _curve_ProxyCurve__WEBPACK_IMPORTED_MODULE_1_
220380
220450
  * Transform this [[InterpolationCurve3d]] and its defining data in place
220381
220451
  */
220382
220452
  tryTransformInPlace(transform) {
220383
- const proxyOk = this._proxyCurve.tryTransformInPlace(transform);
220384
- if (proxyOk) {
220385
- transform.multiplyPoint3dArrayInPlace(this._options.fitPoints);
220386
- if (this._options.startTangent)
220387
- transform.multiplyVectorInPlace(this._options.startTangent);
220388
- if (this._options.endTangent)
220389
- transform.multiplyVectorInPlace(this._options.endTangent);
220390
- }
220391
- return proxyOk;
220453
+ this._proxyCurve.tryTransformInPlace(transform);
220454
+ transform.multiplyPoint3dArrayInPlace(this._options.fitPoints);
220455
+ if (this._options.startTangent)
220456
+ transform.multiplyVectorInPlace(this._options.startTangent);
220457
+ if (this._options.endTangent)
220458
+ transform.multiplyVectorInPlace(this._options.endTangent);
220459
+ return true; // we know this succeeds
220392
220460
  }
220393
220461
  /**
220394
220462
  * Find intervals of this CurvePrimitive that are interior to a clipper.
@@ -220408,6 +220476,7 @@ class InterpolationCurve3d extends _curve_ProxyCurve__WEBPACK_IMPORTED_MODULE_1_
220408
220476
  cloneTransformed(transform) {
220409
220477
  return super.cloneTransformed(transform);
220410
220478
  }
220479
+ /** Test if this [[InterpolationCurve3d]] is almost equal to another GeometryQuery object. */
220411
220480
  isAlmostEqual(other) {
220412
220481
  if (other instanceof InterpolationCurve3d) {
220413
220482
  return InterpolationCurve3dOptions.areAlmostEqual(this._options, other._options);
@@ -223856,8 +223925,6 @@ class ClipUtilities {
223856
223925
  if (!worldToLocal)
223857
223926
  return result;
223858
223927
  const localRegion = region.cloneTransformed(worldToLocal); // parallel to xy-plane so we can ignore z
223859
- if (!localRegion)
223860
- return result;
223861
223928
  // We can only clip convex polygons with our clipper machinery, but the input region doesn't have to be
223862
223929
  // convex or even a polygon. We get around this limitation by using a Boolean operation, which admits
223863
223930
  // *any* planar regions, albeit in local coordinates. First, we clip a rectangle that covers the input region
@@ -229493,10 +229560,7 @@ class CurveChainWithDistanceIndex extends _curve_CurvePrimitive__WEBPACK_IMPORTE
229493
229560
  * @param options how finely to stroke the path to create the distance index
229494
229561
  */
229495
229562
  cloneTransformed(transform, options) {
229496
- const c = this._path.clone();
229497
- if (c.tryTransformInPlace(transform))
229498
- return CurveChainWithDistanceIndex.createCapture(c, options);
229499
- return undefined;
229563
+ return CurveChainWithDistanceIndex.createCapture(this._path.cloneTransformed(transform), options);
229500
229564
  }
229501
229565
  /**
229502
229566
  * Reference to the contained path.
@@ -229517,8 +229581,7 @@ class CurveChainWithDistanceIndex extends _curve_CurvePrimitive__WEBPACK_IMPORTE
229517
229581
  * @param options how finely to stroke the path to create the distance index
229518
229582
  */
229519
229583
  clone(options) {
229520
- const c = this._path.clone();
229521
- return CurveChainWithDistanceIndex.createCapture(c, options);
229584
+ return CurveChainWithDistanceIndex.createCapture(this._path.clone(), options);
229522
229585
  }
229523
229586
  /**
229524
229587
  * Return a portion of this curve with its own distance index.
@@ -229696,15 +229759,10 @@ class CurveChainWithDistanceIndex extends _curve_CurvePrimitive__WEBPACK_IMPORTE
229696
229759
  * @return cloned flattened CurveChain, or reference to the input chain if no nesting
229697
229760
  */
229698
229761
  static flattenNestedChains(chain) {
229699
- if (-1 === chain.children.findIndex((child) => { return child instanceof CurveChainWithDistanceIndex; }))
229762
+ if (-1 === chain.children.findIndex((c) => c instanceof CurveChainWithDistanceIndex))
229700
229763
  return chain;
229701
229764
  const flatChain = chain.clone();
229702
- const flatChildren = flatChain.children.flatMap((child) => {
229703
- if (child instanceof CurveChainWithDistanceIndex)
229704
- return child.path.children;
229705
- else
229706
- return [child];
229707
- });
229765
+ const flatChildren = flatChain.children.flatMap((c) => c instanceof CurveChainWithDistanceIndex ? c.path.children : c);
229708
229766
  flatChain.children.splice(0, Infinity, ...flatChildren);
229709
229767
  return flatChain;
229710
229768
  }
@@ -229885,18 +229943,13 @@ class CurveChainWithDistanceIndex extends _curve_CurvePrimitive__WEBPACK_IMPORTE
229885
229943
  return result;
229886
229944
  }
229887
229945
  /**
229888
- * Attempt to transform in place.
229889
- * * Warning: If any child transform fails, `this` object becomes invalid but that should never happen.
229890
- * @param transform the transform to be applied.
229891
- * @returns true if all of child transforms succeed and false otherwise.
229946
+ * Transform the chain in place.
229947
+ * * Does NOT recompute the distance index.
229948
+ * * For best results, use a rigid transform. Otherwise, it is better to call [[cloneTransformed]] so that the
229949
+ * distance index is recomputed.
229892
229950
  */
229893
229951
  tryTransformInPlace(transform) {
229894
- let numFail = 0;
229895
- for (const c of this._path.children) {
229896
- if (!c.tryTransformInPlace(transform))
229897
- numFail++;
229898
- }
229899
- return numFail === 0;
229952
+ return this._path.tryTransformInPlace(transform);
229900
229953
  }
229901
229954
  /** Reverse the curve's data so that its fractional stroking moves in the opposite direction. */
229902
229955
  reverseInPlace() {
@@ -230199,8 +230252,6 @@ __webpack_require__.r(__webpack_exports__);
230199
230252
  class CurveCollection extends _GeometryQuery__WEBPACK_IMPORTED_MODULE_6__.GeometryQuery {
230200
230253
  /** String name for schema properties */
230201
230254
  geometryCategory = "curveCollection";
230202
- /** Flag for inner loop status. Only used by `Loop`. */
230203
- isInner = false;
230204
230255
  /** Return the sum of the lengths of all contained curves. */
230205
230256
  sumLengths() {
230206
230257
  return _internalContexts_SumLengthsContext__WEBPACK_IMPORTED_MODULE_13__.SumLengthsContext.sumLengths(this);
@@ -230608,6 +230659,18 @@ class CurveChain extends CurveCollection {
230608
230659
  }
230609
230660
  return undefined;
230610
230661
  }
230662
+ /** Return a deep copy. */
230663
+ clone() {
230664
+ return super.clone();
230665
+ }
230666
+ /** Create a deep copy of transformed curves. */
230667
+ cloneTransformed(transform) {
230668
+ return super.cloneTransformed(transform);
230669
+ }
230670
+ /** Create a deep copy with all linestrings broken down into multiple LineSegment3d. */
230671
+ cloneWithExpandedLineStrings() {
230672
+ return super.cloneWithExpandedLineStrings();
230673
+ }
230611
230674
  /**
230612
230675
  * Add a child curve.
230613
230676
  * @param child curve to add to the chain. The curve is captured by this instance.
@@ -230738,6 +230801,18 @@ class BagOfCurves extends CurveCollection {
230738
230801
  cloneEmptyPeer() {
230739
230802
  return new BagOfCurves();
230740
230803
  }
230804
+ /** Return a deep copy. */
230805
+ clone() {
230806
+ return super.clone();
230807
+ }
230808
+ /** Create a deep copy of transformed curves. */
230809
+ cloneTransformed(transform) {
230810
+ return super.cloneTransformed(transform);
230811
+ }
230812
+ /** Create a deep copy with all linestrings broken down into multiple LineSegment3d. */
230813
+ cloneWithExpandedLineStrings() {
230814
+ return super.cloneWithExpandedLineStrings();
230815
+ }
230741
230816
  /** Add a child */
230742
230817
  tryAddChild(child) {
230743
230818
  if (child)
@@ -231729,11 +231804,10 @@ class CurveFactory {
231729
231804
  // The alignment condition is equivalent to positive projected curve area computed wrt to the plane normal.
231730
231805
  const toLocal = _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_4__.Matrix3d.createRigidHeadsUp(planeNormal).transpose();
231731
231806
  const projection = closedCurve.cloneTransformed(_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_11__.Transform.createOriginAndMatrix(undefined, toLocal));
231732
- if (projection) { // now we can ignore z-coords
231733
- const areaXY = _RegionOps__WEBPACK_IMPORTED_MODULE_25__.RegionOps.computeXYArea(projection);
231734
- if (areaXY && areaXY < 0)
231735
- curve.reverseInPlace();
231736
- }
231807
+ // now we can ignore z-coords
231808
+ const areaXY = _RegionOps__WEBPACK_IMPORTED_MODULE_25__.RegionOps.computeXYArea(projection);
231809
+ if (areaXY && areaXY < 0)
231810
+ curve.reverseInPlace();
231737
231811
  }
231738
231812
  }
231739
231813
  /**
@@ -232892,9 +232966,9 @@ __webpack_require__.r(__webpack_exports__);
232892
232966
  /* harmony import */ var _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../geometry3d/Transform */ "../../core/geometry/lib/esm/geometry3d/Transform.js");
232893
232967
  /* harmony import */ var _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./CurveLocationDetail */ "../../core/geometry/lib/esm/curve/CurveLocationDetail.js");
232894
232968
  /* harmony import */ var _GeometryQuery__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./GeometryQuery */ "../../core/geometry/lib/esm/curve/GeometryQuery.js");
232895
- /* harmony import */ var _internalContexts_AppendPlaneIntersectionStrokeHandler__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./internalContexts/AppendPlaneIntersectionStrokeHandler */ "../../core/geometry/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js");
232896
- /* harmony import */ var _internalContexts_ClosestPointStrokeHandler__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./internalContexts/ClosestPointStrokeHandler */ "../../core/geometry/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js");
232897
- /* harmony import */ var _internalContexts_AnnounceTangentStrokeHandler__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./internalContexts/AnnounceTangentStrokeHandler */ "../../core/geometry/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js");
232969
+ /* harmony import */ var _internalContexts_AnnounceTangentStrokeHandler__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./internalContexts/AnnounceTangentStrokeHandler */ "../../core/geometry/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js");
232970
+ /* harmony import */ var _internalContexts_AppendPlaneIntersectionStrokeHandler__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./internalContexts/AppendPlaneIntersectionStrokeHandler */ "../../core/geometry/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js");
232971
+ /* harmony import */ var _internalContexts_ClosestPointStrokeHandler__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./internalContexts/ClosestPointStrokeHandler */ "../../core/geometry/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js");
232898
232972
  /* harmony import */ var _internalContexts_CurveLengthContext__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./internalContexts/CurveLengthContext */ "../../core/geometry/lib/esm/curve/internalContexts/CurveLengthContext.js");
232899
232973
  /*---------------------------------------------------------------------------------------------
232900
232974
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
@@ -233313,7 +233387,7 @@ class CurvePrimitive extends _GeometryQuery__WEBPACK_IMPORTED_MODULE_9__.Geometr
233313
233387
  * @returns details `d` of the closest point. The distance from spacePoint to the closest point is stored in `d.a`.
233314
233388
  */
233315
233389
  closestPoint(spacePoint, extend = false, result) {
233316
- const strokeHandler = new _internalContexts_ClosestPointStrokeHandler__WEBPACK_IMPORTED_MODULE_11__.ClosestPointStrokeHandler(spacePoint, extend, result);
233390
+ const strokeHandler = new _internalContexts_ClosestPointStrokeHandler__WEBPACK_IMPORTED_MODULE_12__.ClosestPointStrokeHandler(spacePoint, extend, result);
233317
233391
  this.emitStrokableParts(strokeHandler);
233318
233392
  return strokeHandler.claimResult();
233319
233393
  }
@@ -233329,7 +233403,7 @@ class CurvePrimitive extends _GeometryQuery__WEBPACK_IMPORTED_MODULE_9__.Geometr
233329
233403
  * @returns details `d` of the closest point. The distance from spacePoint to the closest point is stored in `d.a`.
233330
233404
  */
233331
233405
  closestPointXY(spacePoint, extend = false, result) {
233332
- const strokeHandler = new _internalContexts_ClosestPointStrokeHandler__WEBPACK_IMPORTED_MODULE_11__.ClosestPointStrokeHandler(spacePoint, extend, result, true);
233406
+ const strokeHandler = new _internalContexts_ClosestPointStrokeHandler__WEBPACK_IMPORTED_MODULE_12__.ClosestPointStrokeHandler(spacePoint, extend, result, true);
233333
233407
  this.emitStrokableParts(strokeHandler);
233334
233408
  return strokeHandler.claimResult();
233335
233409
  }
@@ -233345,7 +233419,7 @@ class CurvePrimitive extends _GeometryQuery__WEBPACK_IMPORTED_MODULE_9__.Geometr
233345
233419
  * @param options (optional) options for computing tangents. See [[TangentOptions]] for defaults.
233346
233420
  */
233347
233421
  emitTangents(spacePoint, announceTangent, options) {
233348
- const strokeHandler = new _internalContexts_AnnounceTangentStrokeHandler__WEBPACK_IMPORTED_MODULE_12__.AnnounceTangentStrokeHandler(spacePoint, announceTangent, options);
233422
+ const strokeHandler = new _internalContexts_AnnounceTangentStrokeHandler__WEBPACK_IMPORTED_MODULE_10__.AnnounceTangentStrokeHandler(spacePoint, announceTangent, options);
233349
233423
  this.emitStrokableParts(strokeHandler, options?.strokeOptions);
233350
233424
  }
233351
233425
  /**
@@ -233440,7 +233514,7 @@ class CurvePrimitive extends _GeometryQuery__WEBPACK_IMPORTED_MODULE_9__.Geometr
233440
233514
  * @returns Return the number of CurveLocationDetail's added to the result array.
233441
233515
  */
233442
233516
  appendPlaneIntersectionPoints(plane, result) {
233443
- const strokeHandler = new _internalContexts_AppendPlaneIntersectionStrokeHandler__WEBPACK_IMPORTED_MODULE_10__.AppendPlaneIntersectionStrokeHandler(plane, result);
233517
+ const strokeHandler = new _internalContexts_AppendPlaneIntersectionStrokeHandler__WEBPACK_IMPORTED_MODULE_11__.AppendPlaneIntersectionStrokeHandler(plane, result);
233444
233518
  const n0 = result.length;
233445
233519
  this.emitStrokableParts(strokeHandler);
233446
233520
  return result.length - n0;
@@ -233638,6 +233712,13 @@ __webpack_require__.r(__webpack_exports__);
233638
233712
  /* harmony export */ RecursiveCurveProcessorWithStack: () => (/* binding */ RecursiveCurveProcessorWithStack)
233639
233713
  /* harmony export */ });
233640
233714
  /* harmony import */ var _CurvePrimitive__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CurvePrimitive */ "../../core/geometry/lib/esm/curve/CurvePrimitive.js");
233715
+ /*---------------------------------------------------------------------------------------------
233716
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
233717
+ * See LICENSE.md in the project root for license terms and full copyright notice.
233718
+ *--------------------------------------------------------------------------------------------*/
233719
+ /** @packageDocumentation
233720
+ * @module Curve
233721
+ */
233641
233722
 
233642
233723
  /** base class for detailed traversal of curve artifacts.
233643
233724
  * * This recurses to children in the quickest way (no records of path)
@@ -233673,7 +233754,10 @@ class RecursiveCurveProcessor {
233673
233754
  announceUnionRegion(data, _indexInParent = -1) {
233674
233755
  let i = 0;
233675
233756
  for (const child of data.children) {
233676
- child.announceToCurveProcessor(this, i++);
233757
+ if (child.curveCollectionType === "loop")
233758
+ this.announceLoop(child, i++);
233759
+ else
233760
+ this.announceParityRegion(child, i++);
233677
233761
  }
233678
233762
  }
233679
233763
  /** announce a bag of curves.
@@ -233735,9 +233819,15 @@ class RecursiveCurveProcessorWithStack extends RecursiveCurveProcessor {
233735
233819
  this.leave();
233736
233820
  }
233737
233821
  /** announce beginning or end of a parity region */
233738
- announceUnionRegion(data, indexInParent = -1) {
233822
+ announceUnionRegion(data, _indexInParent = -1) {
233739
233823
  this.enter(data);
233740
- super.announceUnionRegion(data, indexInParent);
233824
+ let i = 0;
233825
+ for (const child of data.children) {
233826
+ if (child.curveCollectionType === "loop")
233827
+ this.announceLoop(child, i++);
233828
+ else
233829
+ this.announceParityRegion(child, i++);
233830
+ }
233741
233831
  this.leave();
233742
233832
  }
233743
233833
  /**
@@ -234343,7 +234433,7 @@ class LineSegment3d extends _CurvePrimitive__WEBPACK_IMPORTED_MODULE_11__.CurveP
234343
234433
  this._point0 = this._point1;
234344
234434
  this._point1 = a;
234345
234435
  }
234346
- /** Transform the two endpoints of this LinSegment. */
234436
+ /** Transform the two endpoints of this line segment. */
234347
234437
  tryTransformInPlace(transform) {
234348
234438
  this._point0 = transform.multiplyPoint3d(this._point0, this._point0);
234349
234439
  this._point1 = transform.multiplyPoint3d(this._point1, this._point1);
@@ -236158,12 +236248,19 @@ __webpack_require__.r(__webpack_exports__);
236158
236248
  class Loop extends _CurveCollection__WEBPACK_IMPORTED_MODULE_1__.CurveChain {
236159
236249
  /** String name for schema properties */
236160
236250
  curveCollectionType = "loop";
236161
- /** Tag value that can be set to true for user code to mark inner and outer loops. */
236251
+ /**
236252
+ * Flag for inner loop status (default value is `false`).
236253
+ * * Typical usage is to set to `true` on hole `Loop`s in a `ParityRegion` to distinguish them from the outer `Loop`.
236254
+ * * This property is only set by the user, and does not affect region processing.
236255
+ * * This property is propagated through [[clone]] and JSON/FlatBuffer de/serialization.
236256
+ * * For best de/serialization results, avoid setting to `false` on multiple `Loop`s of a `ParityRegion`.
236257
+ */
236162
236258
  isInner = false;
236163
236259
  /** Test if `other` is a `Loop` */
236164
236260
  isSameGeometryClass(other) {
236165
236261
  return other instanceof Loop;
236166
236262
  }
236263
+ /** Construct an empty loop. */
236167
236264
  constructor() {
236168
236265
  super();
236169
236266
  }
@@ -236233,10 +236330,28 @@ class Loop extends _CurveCollection__WEBPACK_IMPORTED_MODULE_1__.CurveChain {
236233
236330
  emptyClone.isInner = this.isInner;
236234
236331
  return emptyClone;
236235
236332
  }
236333
+ /** Return a deep copy. */
236334
+ clone() {
236335
+ return super.clone();
236336
+ }
236337
+ /** Create a deep copy of transformed curves. */
236338
+ cloneTransformed(transform) {
236339
+ return super.cloneTransformed(transform);
236340
+ }
236341
+ /** Create a deep copy with all linestrings broken down into multiple LineSegment3d. */
236342
+ cloneWithExpandedLineStrings() {
236343
+ return super.cloneWithExpandedLineStrings();
236344
+ }
236236
236345
  /** Second step of double dispatch: call `handler.handleLoop(this)` */
236237
236346
  dispatchToGeometryHandler(handler) {
236238
236347
  return handler.handleLoop(this);
236239
236348
  }
236349
+ /** Test for near equality */
236350
+ isAlmostEqual(other) {
236351
+ if (!super.isAlmostEqual(other))
236352
+ return false;
236353
+ return this.isInner === other.isInner;
236354
+ }
236240
236355
  }
236241
236356
  /**
236242
236357
  * Structure carrying a pair of loops with curve geometry.
@@ -236544,14 +236659,15 @@ class ParityRegion extends _CurveCollection__WEBPACK_IMPORTED_MODULE_0__.CurveCo
236544
236659
  }
236545
236660
  /** Return a deep copy. */
236546
236661
  clone() {
236547
- const clone = new ParityRegion();
236548
- let child;
236549
- for (child of this.children) {
236550
- const childClone = child.clone();
236551
- if (childClone instanceof _Loop__WEBPACK_IMPORTED_MODULE_1__.Loop)
236552
- clone.children.push(childClone);
236553
- }
236554
- return clone;
236662
+ return super.clone();
236663
+ }
236664
+ /** Create a deep copy of transformed curves. */
236665
+ cloneTransformed(transform) {
236666
+ return super.cloneTransformed(transform);
236667
+ }
236668
+ /** Create a deep copy with all linestrings broken down into multiple LineSegment3d. */
236669
+ cloneWithExpandedLineStrings() {
236670
+ return super.cloneWithExpandedLineStrings();
236555
236671
  }
236556
236672
  /** Stroke these curves into a new ParityRegion. */
236557
236673
  cloneStroked(options) {
@@ -236680,6 +236796,18 @@ class Path extends _CurveCollection__WEBPACK_IMPORTED_MODULE_2__.CurveChain {
236680
236796
  cloneEmptyPeer() {
236681
236797
  return new Path();
236682
236798
  }
236799
+ /** Return a deep copy. */
236800
+ clone() {
236801
+ return super.clone();
236802
+ }
236803
+ /** Create a deep copy of transformed curves. */
236804
+ cloneTransformed(transform) {
236805
+ return super.cloneTransformed(transform);
236806
+ }
236807
+ /** Create a deep copy with all linestrings broken down into multiple LineSegment3d. */
236808
+ cloneWithExpandedLineStrings() {
236809
+ return super.cloneWithExpandedLineStrings();
236810
+ }
236683
236811
  /** Second step of double dispatch: call `handler.handlePath(this)` */
236684
236812
  dispatchToGeometryHandler(handler) {
236685
236813
  return handler.handlePath(this);
@@ -236955,9 +237083,8 @@ class ProxyCurve extends _curve_CurvePrimitive__WEBPACK_IMPORTED_MODULE_0__.Curv
236955
237083
  /** Return a transformed clone. */
236956
237084
  cloneTransformed(transform) {
236957
237085
  const myClone = this.clone();
236958
- if (myClone.tryTransformInPlace(transform))
236959
- return myClone;
236960
- return undefined;
237086
+ myClone.tryTransformInPlace(transform);
237087
+ return myClone;
236961
237088
  }
236962
237089
  /** Implement by proxyCurve. Subclasses may eventually override this default implementation. */
236963
237090
  clonePartialCurve(fractionA, fractionB) {
@@ -239026,8 +239153,6 @@ class RegionOps {
239026
239153
  const worldToLocal = localToWorld.inverse();
239027
239154
  (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(worldToLocal !== undefined, "FrameBuilder's transform is invertible");
239028
239155
  regionXY = region.cloneTransformed(worldToLocal);
239029
- if (!regionXY)
239030
- return undefined;
239031
239156
  }
239032
239157
  const momentData = RegionOps.computeXYAreaMoments(regionXY);
239033
239158
  if (!momentData)
@@ -241256,6 +241381,18 @@ class UnionRegion extends _CurveCollection__WEBPACK_IMPORTED_MODULE_0__.CurveCol
241256
241381
  cloneEmptyPeer() {
241257
241382
  return new UnionRegion();
241258
241383
  }
241384
+ /** Return a deep copy. */
241385
+ clone() {
241386
+ return super.clone();
241387
+ }
241388
+ /** Create a deep copy of transformed curves. */
241389
+ cloneTransformed(transform) {
241390
+ return super.cloneTransformed(transform);
241391
+ }
241392
+ /** Create a deep copy with all linestrings broken down into multiple LineSegment3d. */
241393
+ cloneWithExpandedLineStrings() {
241394
+ return super.cloneWithExpandedLineStrings();
241395
+ }
241259
241396
  /**
241260
241397
  * Try to add a child (by capturing it).
241261
241398
  * * Returns false if the `AnyCurve` child is not a region type.
@@ -241868,6 +242005,7 @@ __webpack_require__.r(__webpack_exports__);
241868
242005
  * Algorithmic class for cloning curve collections.
241869
242006
  * * recurse through collection nodes, building image nodes as needed and inserting clones of children.
241870
242007
  * * for individual primitive, invoke doClone (protected) for direct clone; insert into parent
242008
+ * @internal
241871
242009
  */
241872
242010
  class CloneCurvesContext extends _CurveProcessor__WEBPACK_IMPORTED_MODULE_1__.RecursiveCurveProcessorWithStack {
241873
242011
  _result;
@@ -241906,7 +242044,7 @@ class CloneCurvesContext extends _CurveProcessor__WEBPACK_IMPORTED_MODULE_1__.Re
241906
242044
  const c = this.doClone(primitive);
241907
242045
  if (c !== undefined && this._stack.length > 0) {
241908
242046
  const parent = this._stack[this._stack.length - 1];
241909
- if (parent instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_0__.CurveChain || parent instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_0__.BagOfCurves)
242047
+ if (parent instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_0__.CurveChain || parent instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_0__.BagOfCurves) {
241910
242048
  if (Array.isArray(c)) {
241911
242049
  for (const c1 of c) {
241912
242050
  parent.tryAddChild(c1);
@@ -241915,6 +242053,7 @@ class CloneCurvesContext extends _CurveProcessor__WEBPACK_IMPORTED_MODULE_1__.Re
241915
242053
  else {
241916
242054
  parent.tryAddChild(c);
241917
242055
  }
242056
+ }
241918
242057
  }
241919
242058
  }
241920
242059
  }
@@ -247742,26 +247881,34 @@ __webpack_require__.r(__webpack_exports__);
247742
247881
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
247743
247882
  /* harmony export */ TransformInPlaceContext: () => (/* binding */ TransformInPlaceContext)
247744
247883
  /* harmony export */ });
247745
- /* harmony import */ var _CurveProcessor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../CurveProcessor */ "../../core/geometry/lib/esm/curve/CurveProcessor.js");
247884
+ /* harmony import */ var _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @itwin/core-bentley */ "../../core/bentley/lib/esm/core-bentley.js");
247885
+ /* harmony import */ var _CurveProcessor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../CurveProcessor */ "../../core/geometry/lib/esm/curve/CurveProcessor.js");
247886
+ /*---------------------------------------------------------------------------------------------
247887
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
247888
+ * See LICENSE.md in the project root for license terms and full copyright notice.
247889
+ *--------------------------------------------------------------------------------------------*/
247890
+ /** @packageDocumentation
247891
+ * @module Curve
247892
+ */
247746
247893
 
247747
- /** Algorithmic class: Transform curves in place.
247894
+
247895
+ /** Algorithmic class: Transform curves in place. Always expected to succeed.
247748
247896
  * @internal
247749
247897
  */
247750
- class TransformInPlaceContext extends _CurveProcessor__WEBPACK_IMPORTED_MODULE_0__.RecursiveCurveProcessor {
247751
- numFail;
247752
- numOK;
247898
+ class TransformInPlaceContext extends _CurveProcessor__WEBPACK_IMPORTED_MODULE_1__.RecursiveCurveProcessor {
247753
247899
  transform;
247754
- constructor(transform) { super(); this.numFail = 0; this.numOK = 0; this.transform = transform; }
247900
+ constructor(transform) {
247901
+ super();
247902
+ this.transform = transform;
247903
+ }
247755
247904
  static tryTransformInPlace(target, transform) {
247756
247905
  const context = new TransformInPlaceContext(transform);
247757
247906
  target.announceToCurveProcessor(context);
247758
- return context.numFail === 0;
247907
+ return true;
247759
247908
  }
247760
247909
  announceCurvePrimitive(curvePrimitive, _indexInParent) {
247761
247910
  if (!curvePrimitive.tryTransformInPlace(this.transform))
247762
- this.numFail++;
247763
- else
247764
- this.numOK++;
247911
+ (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(false, "TransformInPlaceContext: unexpected failure of tryTransformInPlace");
247765
247912
  }
247766
247913
  }
247767
247914
 
@@ -251197,9 +251344,12 @@ class DirectSpiral3d extends _TransitionSpiral3d__WEBPACK_IMPORTED_MODULE_13__.T
251197
251344
  clone() {
251198
251345
  return new DirectSpiral3d(this.localToWorld.clone(), this._spiralType, this.designProperties?.clone(), this._nominalL1, this._nominalR1, this._activeFractionInterval?.clone(), this._evaluator.clone());
251199
251346
  }
251200
- /** Apply `transform` to this spiral's local to world transform. */
251201
- tryTransformInPlace(transformA) {
251202
- const rigidData = this.applyRigidPartOfTransform(transformA);
251347
+ /**
251348
+ * Apply `transform` to this spiral's local to world transform.
251349
+ * * Only the rigid part of the transform is applied.
251350
+ */
251351
+ tryTransformInPlace(transform) {
251352
+ const rigidData = this.applyRigidPartOfTransform(transform);
251203
251353
  if (rigidData !== undefined) {
251204
251354
  this._nominalL1 *= rigidData.scale;
251205
251355
  this._nominalR1 *= rigidData.scale;
@@ -251604,9 +251754,12 @@ class IntegratedSpiral3d extends _TransitionSpiral3d__WEBPACK_IMPORTED_MODULE_15
251604
251754
  clone() {
251605
251755
  return new IntegratedSpiral3d(this._spiralType, this._evaluator, this.radius01.clone(), this.bearing01.clone(), this.activeFractionInterval.clone(), this.localToWorld.clone(), this._arcLength01, this._designProperties?.clone());
251606
251756
  }
251607
- /** Apply `transform` to this spiral's local to world transform. */
251608
- tryTransformInPlace(transformA) {
251609
- const rigidData = this.applyRigidPartOfTransform(transformA);
251757
+ /**
251758
+ * Apply `transform` to this spiral's local to world transform.
251759
+ * * Only the rigid part of the transform is applied.
251760
+ */
251761
+ tryTransformInPlace(transform) {
251762
+ const rigidData = this.applyRigidPartOfTransform(transform);
251610
251763
  if (rigidData !== undefined) {
251611
251764
  this._curvature01.x0 /= rigidData.scale;
251612
251765
  this._curvature01.x1 /= rigidData.scale;
@@ -302554,8 +302707,11 @@ function nullToUndefined(data) {
302554
302707
  function createTypedCurveCollection(collectionType) {
302555
302708
  if (collectionType === 1)
302556
302709
  return new _curve_Path__WEBPACK_IMPORTED_MODULE_14__.Path();
302557
- if (collectionType === 2 || collectionType === 3)
302558
- return new _curve_Loop__WEBPACK_IMPORTED_MODULE_12__.Loop();
302710
+ if (collectionType === 2 || collectionType === 3) {
302711
+ const loop = new _curve_Loop__WEBPACK_IMPORTED_MODULE_12__.Loop();
302712
+ loop.isInner = collectionType === 3;
302713
+ return loop;
302714
+ }
302559
302715
  if (collectionType === 4)
302560
302716
  return new _curve_ParityRegion__WEBPACK_IMPORTED_MODULE_13__.ParityRegion();
302561
302717
  if (collectionType === 5)
@@ -302789,9 +302945,8 @@ class BGFBWriter {
302789
302945
  let cvType = 0;
302790
302946
  if (cv instanceof _curve_Path__WEBPACK_IMPORTED_MODULE_16__.Path)
302791
302947
  cvType = 1;
302792
- else if (cv instanceof _curve_Loop__WEBPACK_IMPORTED_MODULE_14__.Loop) {
302948
+ else if (cv instanceof _curve_Loop__WEBPACK_IMPORTED_MODULE_14__.Loop)
302793
302949
  cvType = cv.isInner ? 3 : 2;
302794
- }
302795
302950
  else if (cv instanceof _curve_ParityRegion__WEBPACK_IMPORTED_MODULE_15__.ParityRegion)
302796
302951
  cvType = 4;
302797
302952
  else if (cv instanceof _curve_UnionRegion__WEBPACK_IMPORTED_MODULE_21__.UnionRegion)
@@ -303997,16 +304152,17 @@ var IModelJson;
303997
304152
  return undefined;
303998
304153
  }
303999
304154
  /** parse contents of a curve collection to a CurveCollection instance */
304000
- static parseCurveCollectionMembers(result, data) {
304001
- if (data && Array.isArray(data)) {
304002
- for (const c of data) {
304003
- const g = Reader.parse(c);
304004
- if (g instanceof _curve_GeometryQuery__WEBPACK_IMPORTED_MODULE_11__.GeometryQuery && ("curveCollection" === g.geometryCategory || "curvePrimitive" === g.geometryCategory))
304005
- result.tryAddChild(g);
304006
- }
304007
- return result;
304155
+ static parseCurveCollectionMembers(result, data, isInner = false) {
304156
+ if (!data || !Array.isArray(data))
304157
+ return undefined;
304158
+ for (const c of data) {
304159
+ const g = Reader.parse(c);
304160
+ if (g instanceof _curve_GeometryQuery__WEBPACK_IMPORTED_MODULE_11__.GeometryQuery && ("curveCollection" === g.geometryCategory || "curvePrimitive" === g.geometryCategory))
304161
+ result.tryAddChild(g);
304008
304162
  }
304009
- return undefined;
304163
+ if (isInner && result instanceof _curve_Loop__WEBPACK_IMPORTED_MODULE_14__.Loop)
304164
+ result.isInner = true;
304165
+ return result;
304010
304166
  }
304011
304167
  /** Parse content of `bsurf` to BSplineSurface3d or BSplineSurface3dH */
304012
304168
  static parseBsurf(data) {
@@ -304224,7 +304380,7 @@ var IModelJson;
304224
304380
  return Reader.parseCurveCollectionMembers(new _curve_Path__WEBPACK_IMPORTED_MODULE_16__.Path(), json.path);
304225
304381
  }
304226
304382
  else if (json.hasOwnProperty("loop")) {
304227
- return Reader.parseCurveCollectionMembers(new _curve_Loop__WEBPACK_IMPORTED_MODULE_14__.Loop(), json.loop);
304383
+ return Reader.parseCurveCollectionMembers(new _curve_Loop__WEBPACK_IMPORTED_MODULE_14__.Loop(), json.loop, json.hasOwnProperty("isInner") && true === json.isInner);
304228
304384
  }
304229
304385
  else if (json.hasOwnProperty("parityRegion")) {
304230
304386
  return Reader.parseCurveCollectionMembers(new _curve_ParityRegion__WEBPACK_IMPORTED_MODULE_15__.ParityRegion(), json.parityRegion);
@@ -304550,7 +304706,7 @@ var IModelJson;
304550
304706
  }
304551
304707
  /** Convert strongly typed instance to tagged json */
304552
304708
  handleLoop(data) {
304553
- return { loop: this.collectChildren(data) };
304709
+ return { loop: this.collectChildren(data), isInner: data.isInner ? true : undefined };
304554
304710
  }
304555
304711
  /** Convert strongly typed instance to tagged json */
304556
304712
  handleParityRegion(data) {
@@ -304566,12 +304722,10 @@ var IModelJson;
304566
304722
  }
304567
304723
  collectChildren(data) {
304568
304724
  const children = [];
304569
- if (data.children && Array.isArray(data.children)) {
304570
- for (const child of data.children) {
304571
- const cdata = child.dispatchToGeometryHandler(this);
304572
- if (cdata)
304573
- children.push(cdata);
304574
- }
304725
+ for (const child of data.children) {
304726
+ const cdata = child.dispatchToGeometryHandler(this);
304727
+ if (cdata)
304728
+ children.push(cdata);
304575
304729
  }
304576
304730
  return children;
304577
304731
  }
@@ -315809,23 +315963,9 @@ class ITwinLocalization {
315809
315963
  this.i18next.loadNamespaces(name, (err) => {
315810
315964
  if (!err)
315811
315965
  return resolve();
315812
- // Here we got a non-null err object.
315813
- // This method is called when the system has attempted to load the resources for the namespaces for each possible locale.
315814
- // For example 'fr-ca' might be the most specific locale, in which case 'fr' and 'en' are fallback locales.
315815
- // Using Backend from i18next-http-backend, err will be an array of strings of each namespace it tried to read and its locale.
315816
- // There might be errs for some other namespaces as well as this one. We resolve the promise unless there's an error for each possible locale.
315817
- let locales = this.getLanguageList().map((thisLocale) => `/${thisLocale}/`);
315818
- try {
315819
- for (const thisError of err) {
315820
- if (typeof thisError === "string")
315821
- locales = locales.filter((thisLocale) => !thisError.includes(thisLocale));
315822
- }
315823
- }
315824
- catch {
315825
- locales = [];
315826
- }
315827
- // if we removed every locale from the array, it wasn't loaded.
315828
- if (locales.length === 0)
315966
+ // i18next can return errors from other concurrent namespace loads in this callback.
315967
+ const wasLoaded = this.getLanguageList().some((language) => this.i18next.hasResourceBundle(language, name));
315968
+ if (!wasLoaded)
315829
315969
  _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_3__.Logger.logError("i18n", `No resources for namespace ${name} could be loaded`);
315830
315970
  resolve();
315831
315971
  });
@@ -343250,7 +343390,7 @@ class TestContext {
343250
343390
  this.initializeRpcInterfaces({ title: this.settings.Backend.name, version: this.settings.Backend.version });
343251
343391
  const iModelClient = new imodels_client_management_1.IModelsClient({ api: { baseUrl: `https://${process.env.IMJS_URL_PREFIX ?? ""}api.bentley.com/imodels` } });
343252
343392
  await core_frontend_1.NoRenderApp.startup({
343253
- applicationVersion: "5.14.0-dev.7",
343393
+ applicationVersion: "5.14.0-dev.9",
343254
343394
  applicationId: this.settings.gprid,
343255
343395
  authorizationClient: new frontend_1.TestFrontendAuthorizationClient(this.serviceAuthToken),
343256
343396
  hubAccess: new imodels_access_frontend_1.FrontendIModelsAccess(iModelClient),
@@ -369992,7 +370132,7 @@ class WMS {
369992
370132
  (module) {
369993
370133
 
369994
370134
  "use strict";
369995
- module.exports = /*#__PURE__*/JSON.parse('{"name":"@itwin/core-frontend","version":"5.14.0-dev.7","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 build:workers && npm run -s copy:draco","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 ES2022 --outDir lib/esm","clean":"rimraf -g 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:draco":"cpx \\"./node_modules/@loaders.gl/draco/dist/libs/*\\" ./lib/public/scripts","docs":"betools docs --json=../../generated-docs/core/core-frontend/file.json --tsIndexFile=./core-frontend.ts --onlyJson --excludes=webgl/**/*,**/map/*.d.ts,**/tile/*.d.ts,**/*-css.ts && npm run -s extract","extract":"betools extract --fileExt=ts --extractFrom=./src/test/example-code --recursive --out=../../generated-docs/extract","extract-api":"betools extract-api --entry=core-frontend && npm run extract-extension-api","extract-extension-api":"eslint --no-inline-config -c extraction.eslint.config.js \\"./src/**/*.ts\\" 1>&2","lint":"eslint \\"./src/**/*.ts\\" 1>&2","lint-fix":"eslint --fix -f visualstudio \\"./src/**/*.ts\\" 1>&2","lint-deprecation":"eslint --fix -f visualstudio --no-inline-config -c ../../common/config/eslint/eslint.config.deprecation-policy.js \\"./src/**/*.ts\\"","pseudolocalize":"betools pseudolocalize --englishDir ./src/public/locales/en --out ./public/locales/en-PSEUDO","test":"npm run build:test-worker && vitest --run","cover":"npm run build:test-worker && vitest --run","build:test-worker":"vite build --config ./src/test/worker/vite.config.mts 1>&2","build:workers":"rimraf lib/workers/webpack && vite build --config ./src/workers/ImdlParser/vite.config.mts 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:*","@itwin/core-bentley":"workspace:*","@itwin/core-common":"workspace:*","@itwin/core-geometry":"workspace:*","@itwin/core-orbitgt":"workspace:*","@itwin/core-quantity":"workspace:*","@itwin/ecschema-metadata":"workspace:*","@itwin/ecschema-rpcinterface-common":"workspace:*"},"//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":{"@bentley/aec-units-schema":"^1.0.3","@bentley/formats-schema":"^1.0.0","@bentley/units-schema":"^1.0.11","@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/ecschema-metadata":"workspace:*","@itwin/ecschema-rpcinterface-common":"workspace:*","@itwin/object-storage-core":"^3.0.4","@itwin/eslint-plugin":"^6.0.0","@types/node":"~20.17.0","@types/sinon":"^17.0.2","@vitest/browser-playwright":"^4.1.10","@vitest/coverage-v8":"^4.1.10","cpx2":"^8.0.0","eslint":"^9.31.0","playwright":"~1.56.1","rimraf":"^6.0.1","sinon":"^17.0.2","typescript":"~5.6.2","vite":"^6.4.3","vitest":"^4.1.10","vite-plugin-static-copy":"2.2.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/core-i18n":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@loaders.gl/core":"^4.4.5","@loaders.gl/draco":"^4.4.5","fuse.js":"^3.3.0","wms-capabilities":"0.6.0"}}');
370135
+ module.exports = /*#__PURE__*/JSON.parse('{"name":"@itwin/core-frontend","version":"5.14.0-dev.9","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 build:workers && npm run -s copy:draco","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 ES2022 --outDir lib/esm","clean":"rimraf -g 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:draco":"cpx \\"./node_modules/@loaders.gl/draco/dist/libs/*\\" ./lib/public/scripts","docs":"betools docs --json=../../generated-docs/core/core-frontend/file.json --tsIndexFile=./core-frontend.ts --onlyJson --excludes=webgl/**/*,**/map/*.d.ts,**/tile/*.d.ts,**/*-css.ts && npm run -s extract","extract":"betools extract --fileExt=ts --extractFrom=./src/test/example-code --recursive --out=../../generated-docs/extract","extract-api":"betools extract-api --entry=core-frontend && npm run extract-extension-api","extract-extension-api":"eslint --no-inline-config -c extraction.eslint.config.js \\"./src/**/*.ts\\" 1>&2","lint":"eslint \\"./src/**/*.ts\\" 1>&2","lint-fix":"eslint --fix -f visualstudio \\"./src/**/*.ts\\" 1>&2","lint-deprecation":"eslint --fix -f visualstudio --no-inline-config -c ../../common/config/eslint/eslint.config.deprecation-policy.js \\"./src/**/*.ts\\"","pseudolocalize":"betools pseudolocalize --englishDir ./src/public/locales/en --out ./public/locales/en-PSEUDO","test":"npm run build:test-worker && vitest --run","cover":"npm run build:test-worker && vitest --run","build:test-worker":"vite build --config ./src/test/worker/vite.config.mts 1>&2","build:workers":"rimraf lib/workers/webpack && vite build --config ./src/workers/ImdlParser/vite.config.mts 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:*","@itwin/core-bentley":"workspace:*","@itwin/core-common":"workspace:*","@itwin/core-geometry":"workspace:*","@itwin/core-orbitgt":"workspace:*","@itwin/core-quantity":"workspace:*","@itwin/ecschema-metadata":"workspace:*","@itwin/ecschema-rpcinterface-common":"workspace:*"},"//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":{"@bentley/aec-units-schema":"^1.0.3","@bentley/formats-schema":"^1.0.0","@bentley/units-schema":"^1.0.11","@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/ecschema-metadata":"workspace:*","@itwin/ecschema-rpcinterface-common":"workspace:*","@itwin/object-storage-core":"^3.0.4","@itwin/eslint-plugin":"^6.0.0","@types/node":"~20.17.0","@types/sinon":"^17.0.2","@vitest/browser-playwright":"^4.1.10","@vitest/coverage-v8":"^4.1.10","cpx2":"^8.0.0","eslint":"^9.31.0","playwright":"~1.56.1","rimraf":"^6.0.1","sinon":"^17.0.2","typescript":"~5.6.2","vite":"^6.4.3","vitest":"^4.1.10","vite-plugin-static-copy":"2.2.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/core-i18n":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@loaders.gl/core":"^4.4.5","@loaders.gl/draco":"^4.4.5","fuse.js":"^3.3.0","wms-capabilities":"0.6.0"}}');
369996
370136
 
369997
370137
  /***/ },
369998
370138