@itwin/ecschema-rpcinterface-tests 5.13.0-dev.10 → 5.13.0-dev.12

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.
@@ -28324,15 +28324,28 @@ class QueryBinder {
28324
28324
  * @param indexOrName Specify parameter index or its name used in ECSQL statement.
28325
28325
  * @param val @type OrderedId64Iterable value to bind to ECSQL statement.
28326
28326
  * @returns @type QueryBinder to allow fluent interface.
28327
+ * @throws an [[ITwinError]] with scope `"itwin-QueryBinder"` and key `"invalid-arguments"` if any entry is not a valid [Id64String]($bentley).
28327
28328
  */
28328
28329
  bindIdSet(indexOrName, val) {
28329
28330
  this.verify(indexOrName);
28330
28331
  const name = String(indexOrName);
28331
- _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.OrderedId64Iterable.uniqueIterator(val);
28332
+ const ids = [];
28333
+ // `string` is an Iterable<string>. In that case assume caller passed a single Id64String, matching CompressedId64Set.sortAndCompress.
28334
+ const iterable = typeof val === "string" ? [val] : val;
28335
+ for (const id of iterable) {
28336
+ if (!_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Id64.isValidId64(id)) {
28337
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.ITwinError.throwError({
28338
+ message: `QueryBinder.bindIdSet: entry ${JSON.stringify(id)} for parameter "${name}" is not a valid Id64String`,
28339
+ iTwinErrorId: { scope: "itwin-QueryBinder", key: "invalid-arguments" },
28340
+ });
28341
+ }
28342
+ ids.push(id);
28343
+ }
28344
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.OrderedId64Iterable.sortArray(ids);
28332
28345
  Object.defineProperty(this._args, name, {
28333
28346
  enumerable: true, value: {
28334
28347
  type: QueryParamType.IdSet,
28335
- value: _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.CompressedId64Set.sortAndCompress(_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.OrderedId64Iterable.uniqueIterator(val)),
28348
+ value: _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.CompressedId64Set.compressArray(ids),
28336
28349
  },
28337
28350
  });
28338
28351
  return this;
@@ -31399,7 +31412,7 @@ var ExternalSourceAttachmentRole;
31399
31412
  /** The attached [ExternalSource]($backend) models a part of the whole. */
31400
31413
  ExternalSourceAttachmentRole[ExternalSourceAttachmentRole["SpecifyPart"] = 1] = "SpecifyPart";
31401
31414
  })(ExternalSourceAttachmentRole || (ExternalSourceAttachmentRole = {}));
31402
- /** The *rank* for a Category
31415
+ /** The *rank* for a [Category]($backend), [SubCategory]($backend), or [DefinitionSet]($backend).
31403
31416
  * @public @preview
31404
31417
  * @extensions
31405
31418
  */
@@ -100475,6 +100488,7 @@ class ViewManager {
100475
100488
  cursor = "default";
100476
100489
  _viewports = [];
100477
100490
  decorators = [];
100491
+ _selectedViewportChange = Promise.resolve();
100478
100492
  _selectedView;
100479
100493
  _invalidateScenes = false;
100480
100494
  _skipSceneCreation = false;
@@ -100602,9 +100616,16 @@ class ViewManager {
100602
100616
  }
100603
100617
  /** @internal */
100604
100618
  notifySelectedViewportChanged(previous, current) {
100605
- _IModelApp__WEBPACK_IMPORTED_MODULE_1__.IModelApp.toolAdmin.onSelectedViewportChanged(previous, current); // eslint-disable-line @typescript-eslint/no-floating-promises
100619
+ const selectedViewportChange = _IModelApp__WEBPACK_IMPORTED_MODULE_1__.IModelApp.toolAdmin.onSelectedViewportChanged(previous, current)
100620
+ .catch(() => undefined);
100621
+ this._selectedViewportChange = this._selectedViewportChange.then(async () => selectedViewportChange, async () => selectedViewportChange)
100622
+ .then(() => undefined, () => undefined);
100606
100623
  this.onSelectedViewportChanged.emit({ previous, current });
100607
100624
  }
100625
+ /** @internal */
100626
+ async waitForSelectedViewportChange() {
100627
+ await this._selectedViewportChange;
100628
+ }
100608
100629
  /** The "selected view" is the default for certain operations. */
100609
100630
  get selectedView() { return this._selectedView; }
100610
100631
  /** Get the first opened view. */
@@ -186431,7 +186452,11 @@ class InteractiveTool extends Tool {
186431
186452
  async onPostInstall() { }
186432
186453
  /** Override Call to reset tool to initial state */
186433
186454
  async onReinitialize() { }
186434
- /** Invoked when the tool becomes no longer active, to perform additional cleanup logic */
186455
+ /** Invoked when the tool becomes no longer active, to perform additional cleanup logic.
186456
+ * Cleanup must not assume that the EditCommand associated with the tool is still active: an immediate tool may have finished or
186457
+ * replaced it while this tool remained active. Tools must not start an EditCommand from onCleanup; ToolAdmin owns finishing the active EditCommand during tool cleanup.
186458
+ * @note A ViewTool should never start an EditCommand. An InputCollector may start an EditCommand only if suspending a tool that supports EditManipulators (ex. SelectionTool).
186459
+ */
186435
186460
  async onCleanup() { }
186436
186461
  /** Notification of a ViewTool or InputCollector starting and this tool is being suspended.
186437
186462
  * @note Applies only to PrimitiveTool and InputCollector, a ViewTool can't be suspended.
@@ -188605,23 +188630,54 @@ class ToolAdmin {
188605
188630
  }
188606
188631
  /** @internal */
188607
188632
  async setPrimitiveTool(newTool) {
188608
- if (undefined !== this._primitiveTool) {
188609
- await this._primitiveTool.onCleanup();
188610
- if (undefined !== this._editCommandHandler)
188611
- await this._editCommandHandler.finishCommand();
188612
- this._primitiveTool = undefined;
188633
+ return this.setPrimitiveToolInternal(newTool);
188634
+ }
188635
+ async setPrimitiveToolInternal(newTool, pendingFinishCommand) {
188636
+ const oldTool = this._primitiveTool;
188637
+ let ownsOldTool = undefined === oldTool;
188638
+ if (undefined !== oldTool) {
188639
+ let mainError;
188640
+ try {
188641
+ await oldTool.onCleanup();
188642
+ }
188643
+ catch (err) {
188644
+ mainError = (err instanceof Error) ? err : new Error(_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.BentleyError.getErrorMessage(err));
188645
+ }
188646
+ try {
188647
+ if (undefined !== pendingFinishCommand)
188648
+ await pendingFinishCommand;
188649
+ else if (undefined !== this._editCommandHandler)
188650
+ await this._editCommandHandler.finishCommand();
188651
+ }
188652
+ catch (err) {
188653
+ // throw finishCommand error if onCleanup succeeded, otherwise log finishCommand failure...
188654
+ if (undefined === mainError)
188655
+ mainError = (err instanceof Error) ? err : new Error(_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.BentleyError.getErrorMessage(err));
188656
+ else
188657
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logError(`${_common_FrontendLoggerCategory__WEBPACK_IMPORTED_MODULE_4__.FrontendLoggerCategory.Package}.toolAdmin`, err);
188658
+ }
188659
+ finally {
188660
+ // Force-clear stale tool state if either onCleanup or finishCommand failed...
188661
+ ownsOldTool = this._primitiveTool === oldTool;
188662
+ if (ownsOldTool)
188663
+ this._primitiveTool = undefined;
188664
+ }
188665
+ if (undefined !== mainError)
188666
+ throw mainError;
188613
188667
  }
188614
- this._primitiveTool = newTool;
188668
+ // Do not let a delayed transition overwrite a tool installed by a newer transition.
188669
+ if (ownsOldTool)
188670
+ this._primitiveTool = newTool;
188615
188671
  }
188616
- // serialize concurrent starts to avoid two tools installing simultaneously.
188617
- _primitiveToolStarting;
188672
+ // Serialize primitive starts and last-viewport cleanup to avoid overlapping transitions.
188673
+ _primitiveToolTransition;
188618
188674
  /** @internal */
188619
188675
  async startPrimitiveTool(newTool) {
188620
188676
  // If another start is in progress wait for it to finish before proceeding.
188621
- while (undefined !== this._primitiveToolStarting)
188622
- await this._primitiveToolStarting;
188623
- let resolveStarting;
188624
- this._primitiveToolStarting = new Promise((r) => { resolveStarting = r; });
188677
+ while (undefined !== this._primitiveToolTransition)
188678
+ await this._primitiveToolTransition;
188679
+ let resolveTransition;
188680
+ const transition = this._primitiveToolTransition = new Promise((resolve) => { resolveTransition = resolve; });
188625
188681
  try {
188626
188682
  _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.notifications.outputPrompt("");
188627
188683
  await this.exitViewTool();
@@ -188649,9 +188705,9 @@ class ToolAdmin {
188649
188705
  this.onActiveToolChanged(activeTool, StartOrResume.Start);
188650
188706
  }
188651
188707
  finally {
188652
- if (resolveStarting)
188653
- resolveStarting();
188654
- this._primitiveToolStarting = undefined;
188708
+ resolveTransition?.();
188709
+ if (this._primitiveToolTransition === transition)
188710
+ this._primitiveToolTransition = undefined;
188655
188711
  }
188656
188712
  }
188657
188713
  /** Method used by interactive tools to send updated values to UI components, typically showing tool settings.
@@ -188898,10 +188954,41 @@ class ToolAdmin {
188898
188954
  set coordinateLockOverrides(coordLockOvr) { this.toolState.coordLockOvr = coordLockOvr; }
188899
188955
  /** @internal */
188900
188956
  async callOnCleanup() {
188901
- await this.exitViewTool();
188902
- await this.exitInputCollector();
188903
- if (undefined !== this._primitiveTool)
188904
- await this._primitiveTool.onCleanup();
188957
+ let pendingFinishCommand;
188958
+ const previousTransition = this._primitiveToolTransition;
188959
+ let resolveTransition;
188960
+ const transition = this._primitiveToolTransition = new Promise((resolve) => { resolveTransition = resolve; });
188961
+ try {
188962
+ // Start the edit-command cleanup before the first await. ViewManager can invoke this method
188963
+ // without awaiting it when the last viewport is dropped.
188964
+ if (undefined !== this._editCommandHandler) {
188965
+ const finishCommand = this._editCommandHandler.finishCommand();
188966
+ // Attach a rejection handler immediately: another cleanup operation may fail before this promise is awaited.
188967
+ pendingFinishCommand = finishCommand.catch((err) => {
188968
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logError(`${_common_FrontendLoggerCategory__WEBPACK_IMPORTED_MODULE_4__.FrontendLoggerCategory.Package}.toolAdmin`, err);
188969
+ return "";
188970
+ });
188971
+ }
188972
+ if (undefined !== previousTransition)
188973
+ await previousTransition;
188974
+ if (undefined !== this._viewTool)
188975
+ await this.exitViewTool();
188976
+ if (undefined !== this._inputCollector)
188977
+ await this.exitInputCollector();
188978
+ // Keep cleanup path consistent with other primitive-tool transitions.
188979
+ if (undefined !== this._primitiveTool)
188980
+ await this.setPrimitiveToolInternal(undefined, pendingFinishCommand); // NOTE: ViewManager.setSelectedView will call startDefaultTool if a new view is opened...
188981
+ else if (undefined !== pendingFinishCommand)
188982
+ await pendingFinishCommand;
188983
+ }
188984
+ catch (err) {
188985
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logError(`${_common_FrontendLoggerCategory__WEBPACK_IMPORTED_MODULE_4__.FrontendLoggerCategory.Package}.toolAdmin`, err);
188986
+ }
188987
+ finally {
188988
+ resolveTransition?.();
188989
+ if (this._primitiveToolTransition === transition)
188990
+ this._primitiveToolTransition = undefined;
188991
+ }
188905
188992
  }
188906
188993
  }
188907
188994
  /**
@@ -269892,18 +269979,19 @@ class PolyfaceQuery {
269892
269979
  */
269893
269980
  static dihedralAngleSummary(source, ignoreBoundaries = false) {
269894
269981
  // more info can be found at geometry/internaldocs/Polyface.md
269982
+ // visit all facets and collect normals and edges
269895
269983
  const edges = new _IndexedEdgeMatcher__WEBPACK_IMPORTED_MODULE_29__.IndexedEdgeMatcher();
269896
269984
  const vertices = source instanceof _Polyface__WEBPACK_IMPORTED_MODULE_34__.Polyface ? source.data.point : undefined;
269897
269985
  const visitor = source instanceof _Polyface__WEBPACK_IMPORTED_MODULE_34__.Polyface ? source.createVisitor(1) : source;
269898
269986
  visitor.setNumWrap(1);
269899
- const centroidNormal = [];
269987
+ const facetNormals = [];
269900
269988
  let normalCounter = 0;
269901
269989
  for (visitor.reset(); visitor.moveToNextFacet();) {
269902
269990
  const numEdges = visitor.pointCount - 1;
269903
269991
  const normal = _geometry3d_PolygonOps__WEBPACK_IMPORTED_MODULE_14__.PolygonOps.centroidAreaNormal(visitor.point);
269904
269992
  if (normal === undefined)
269905
269993
  return -2;
269906
- centroidNormal.push(normal);
269994
+ facetNormals.push(normal);
269907
269995
  for (let i = 0; i < numEdges; i++) {
269908
269996
  const edge = edges.addEdge(visitor.clientPointIndex(i), visitor.clientPointIndex(i + 1), normalCounter);
269909
269997
  if (!vertices) // decorate if we don't have vertices to query later
@@ -269919,21 +270007,24 @@ class PolyfaceQuery {
269919
270007
  edges.sortAndCollectClusters(manifoldClusters, ignoreBoundaries ? undefined : badClusters, undefined, badClusters);
269920
270008
  if (badClusters.length > 0)
269921
270009
  return -2;
269922
- // find angle between facet centroid normals (dihedral angles)
270010
+ // find angle between facet normals (dihedral angles)
269923
270011
  let numPositive = 0;
269924
270012
  let numPlanar = 0;
269925
270013
  let numNegative = 0;
269926
270014
  const edgeVector = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_12__.Vector3d.create();
269927
270015
  for (const cluster of manifoldClusters) {
269928
270016
  if (Array.isArray(cluster) && cluster.length === 2) {
269929
- const sideA = cluster[0];
269930
- const sideB = cluster[1];
269931
- if (vertices)
269932
- vertices.vectorIndexIndex(sideA.startVertex, sideA.endVertex, edgeVector);
269933
- else
270017
+ const sideA = cluster[0]; // edge on facetA
270018
+ const sideB = cluster[1]; // edge on facetB
270019
+ if (vertices) {
270020
+ if (!vertices.vectorIndexIndex(sideA.startVertex, sideA.endVertex, edgeVector))
270021
+ return -2;
270022
+ }
270023
+ else {
269934
270024
  edgeVector.setFrom(sideA.edgeVector);
269935
- const facetNormalA = centroidNormal[sideA.facetIndex].direction;
269936
- const facetNormalB = centroidNormal[sideB.facetIndex].direction;
270025
+ }
270026
+ const facetNormalA = facetNormals[sideA.facetIndex].direction;
270027
+ const facetNormalB = facetNormals[sideB.facetIndex].direction;
269937
270028
  const dihedralAngle = facetNormalA.signedAngleTo(facetNormalB, edgeVector);
269938
270029
  if (dihedralAngle.isAlmostZero)
269939
270030
  numPlanar++;
@@ -334369,7 +334460,7 @@ var loadLanguages = instance.loadLanguages;
334369
334460
  (module) {
334370
334461
 
334371
334462
  "use strict";
334372
- module.exports = /*#__PURE__*/JSON.parse('{"name":"@itwin/core-frontend","version":"5.13.0-dev.10","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/chai-as-promised":"^7","@types/draco3d":"^1.4.10","@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-multiple-assets":"^1.3.1","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.3.4","@loaders.gl/draco":"~4.3.4","fuse.js":"^3.3.0","wms-capabilities":"0.4.0"}}');
334463
+ module.exports = /*#__PURE__*/JSON.parse('{"name":"@itwin/core-frontend","version":"5.13.0-dev.12","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/chai-as-promised":"^7","@types/draco3d":"^1.4.10","@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-multiple-assets":"^1.3.1","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.3.4","@loaders.gl/draco":"~4.3.4","fuse.js":"^3.3.0","wms-capabilities":"0.4.0"}}');
334373
334464
 
334374
334465
  /***/ }
334375
334466