@itwin/rpcinterface-full-stack-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.
@@ -48330,15 +48330,28 @@ class QueryBinder {
48330
48330
  * @param indexOrName Specify parameter index or its name used in ECSQL statement.
48331
48331
  * @param val @type OrderedId64Iterable value to bind to ECSQL statement.
48332
48332
  * @returns @type QueryBinder to allow fluent interface.
48333
+ * @throws an [[ITwinError]] with scope `"itwin-QueryBinder"` and key `"invalid-arguments"` if any entry is not a valid [Id64String]($bentley).
48333
48334
  */
48334
48335
  bindIdSet(indexOrName, val) {
48335
48336
  this.verify(indexOrName);
48336
48337
  const name = String(indexOrName);
48337
- _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.OrderedId64Iterable.uniqueIterator(val);
48338
+ const ids = [];
48339
+ // `string` is an Iterable<string>. In that case assume caller passed a single Id64String, matching CompressedId64Set.sortAndCompress.
48340
+ const iterable = typeof val === "string" ? [val] : val;
48341
+ for (const id of iterable) {
48342
+ if (!_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Id64.isValidId64(id)) {
48343
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.ITwinError.throwError({
48344
+ message: `QueryBinder.bindIdSet: entry ${JSON.stringify(id)} for parameter "${name}" is not a valid Id64String`,
48345
+ iTwinErrorId: { scope: "itwin-QueryBinder", key: "invalid-arguments" },
48346
+ });
48347
+ }
48348
+ ids.push(id);
48349
+ }
48350
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.OrderedId64Iterable.sortArray(ids);
48338
48351
  Object.defineProperty(this._args, name, {
48339
48352
  enumerable: true, value: {
48340
48353
  type: QueryParamType.IdSet,
48341
- value: _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.CompressedId64Set.sortAndCompress(_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.OrderedId64Iterable.uniqueIterator(val)),
48354
+ value: _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.CompressedId64Set.compressArray(ids),
48342
48355
  },
48343
48356
  });
48344
48357
  return this;
@@ -51405,7 +51418,7 @@ var ExternalSourceAttachmentRole;
51405
51418
  /** The attached [ExternalSource]($backend) models a part of the whole. */
51406
51419
  ExternalSourceAttachmentRole[ExternalSourceAttachmentRole["SpecifyPart"] = 1] = "SpecifyPart";
51407
51420
  })(ExternalSourceAttachmentRole || (ExternalSourceAttachmentRole = {}));
51408
- /** The *rank* for a Category
51421
+ /** The *rank* for a [Category]($backend), [SubCategory]($backend), or [DefinitionSet]($backend).
51409
51422
  * @public @preview
51410
51423
  * @extensions
51411
51424
  */
@@ -120481,6 +120494,7 @@ class ViewManager {
120481
120494
  cursor = "default";
120482
120495
  _viewports = [];
120483
120496
  decorators = [];
120497
+ _selectedViewportChange = Promise.resolve();
120484
120498
  _selectedView;
120485
120499
  _invalidateScenes = false;
120486
120500
  _skipSceneCreation = false;
@@ -120608,9 +120622,16 @@ class ViewManager {
120608
120622
  }
120609
120623
  /** @internal */
120610
120624
  notifySelectedViewportChanged(previous, current) {
120611
- _IModelApp__WEBPACK_IMPORTED_MODULE_1__.IModelApp.toolAdmin.onSelectedViewportChanged(previous, current); // eslint-disable-line @typescript-eslint/no-floating-promises
120625
+ const selectedViewportChange = _IModelApp__WEBPACK_IMPORTED_MODULE_1__.IModelApp.toolAdmin.onSelectedViewportChanged(previous, current)
120626
+ .catch(() => undefined);
120627
+ this._selectedViewportChange = this._selectedViewportChange.then(async () => selectedViewportChange, async () => selectedViewportChange)
120628
+ .then(() => undefined, () => undefined);
120612
120629
  this.onSelectedViewportChanged.emit({ previous, current });
120613
120630
  }
120631
+ /** @internal */
120632
+ async waitForSelectedViewportChange() {
120633
+ await this._selectedViewportChange;
120634
+ }
120614
120635
  /** The "selected view" is the default for certain operations. */
120615
120636
  get selectedView() { return this._selectedView; }
120616
120637
  /** Get the first opened view. */
@@ -206437,7 +206458,11 @@ class InteractiveTool extends Tool {
206437
206458
  async onPostInstall() { }
206438
206459
  /** Override Call to reset tool to initial state */
206439
206460
  async onReinitialize() { }
206440
- /** Invoked when the tool becomes no longer active, to perform additional cleanup logic */
206461
+ /** Invoked when the tool becomes no longer active, to perform additional cleanup logic.
206462
+ * Cleanup must not assume that the EditCommand associated with the tool is still active: an immediate tool may have finished or
206463
+ * replaced it while this tool remained active. Tools must not start an EditCommand from onCleanup; ToolAdmin owns finishing the active EditCommand during tool cleanup.
206464
+ * @note A ViewTool should never start an EditCommand. An InputCollector may start an EditCommand only if suspending a tool that supports EditManipulators (ex. SelectionTool).
206465
+ */
206441
206466
  async onCleanup() { }
206442
206467
  /** Notification of a ViewTool or InputCollector starting and this tool is being suspended.
206443
206468
  * @note Applies only to PrimitiveTool and InputCollector, a ViewTool can't be suspended.
@@ -208611,23 +208636,54 @@ class ToolAdmin {
208611
208636
  }
208612
208637
  /** @internal */
208613
208638
  async setPrimitiveTool(newTool) {
208614
- if (undefined !== this._primitiveTool) {
208615
- await this._primitiveTool.onCleanup();
208616
- if (undefined !== this._editCommandHandler)
208617
- await this._editCommandHandler.finishCommand();
208618
- this._primitiveTool = undefined;
208639
+ return this.setPrimitiveToolInternal(newTool);
208640
+ }
208641
+ async setPrimitiveToolInternal(newTool, pendingFinishCommand) {
208642
+ const oldTool = this._primitiveTool;
208643
+ let ownsOldTool = undefined === oldTool;
208644
+ if (undefined !== oldTool) {
208645
+ let mainError;
208646
+ try {
208647
+ await oldTool.onCleanup();
208648
+ }
208649
+ catch (err) {
208650
+ mainError = (err instanceof Error) ? err : new Error(_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.BentleyError.getErrorMessage(err));
208651
+ }
208652
+ try {
208653
+ if (undefined !== pendingFinishCommand)
208654
+ await pendingFinishCommand;
208655
+ else if (undefined !== this._editCommandHandler)
208656
+ await this._editCommandHandler.finishCommand();
208657
+ }
208658
+ catch (err) {
208659
+ // throw finishCommand error if onCleanup succeeded, otherwise log finishCommand failure...
208660
+ if (undefined === mainError)
208661
+ mainError = (err instanceof Error) ? err : new Error(_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.BentleyError.getErrorMessage(err));
208662
+ else
208663
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logError(`${_common_FrontendLoggerCategory__WEBPACK_IMPORTED_MODULE_4__.FrontendLoggerCategory.Package}.toolAdmin`, err);
208664
+ }
208665
+ finally {
208666
+ // Force-clear stale tool state if either onCleanup or finishCommand failed...
208667
+ ownsOldTool = this._primitiveTool === oldTool;
208668
+ if (ownsOldTool)
208669
+ this._primitiveTool = undefined;
208670
+ }
208671
+ if (undefined !== mainError)
208672
+ throw mainError;
208619
208673
  }
208620
- this._primitiveTool = newTool;
208674
+ // Do not let a delayed transition overwrite a tool installed by a newer transition.
208675
+ if (ownsOldTool)
208676
+ this._primitiveTool = newTool;
208621
208677
  }
208622
- // serialize concurrent starts to avoid two tools installing simultaneously.
208623
- _primitiveToolStarting;
208678
+ // Serialize primitive starts and last-viewport cleanup to avoid overlapping transitions.
208679
+ _primitiveToolTransition;
208624
208680
  /** @internal */
208625
208681
  async startPrimitiveTool(newTool) {
208626
208682
  // If another start is in progress wait for it to finish before proceeding.
208627
- while (undefined !== this._primitiveToolStarting)
208628
- await this._primitiveToolStarting;
208629
- let resolveStarting;
208630
- this._primitiveToolStarting = new Promise((r) => { resolveStarting = r; });
208683
+ while (undefined !== this._primitiveToolTransition)
208684
+ await this._primitiveToolTransition;
208685
+ let resolveTransition;
208686
+ const transition = this._primitiveToolTransition = new Promise((resolve) => { resolveTransition = resolve; });
208631
208687
  try {
208632
208688
  _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.notifications.outputPrompt("");
208633
208689
  await this.exitViewTool();
@@ -208655,9 +208711,9 @@ class ToolAdmin {
208655
208711
  this.onActiveToolChanged(activeTool, StartOrResume.Start);
208656
208712
  }
208657
208713
  finally {
208658
- if (resolveStarting)
208659
- resolveStarting();
208660
- this._primitiveToolStarting = undefined;
208714
+ resolveTransition?.();
208715
+ if (this._primitiveToolTransition === transition)
208716
+ this._primitiveToolTransition = undefined;
208661
208717
  }
208662
208718
  }
208663
208719
  /** Method used by interactive tools to send updated values to UI components, typically showing tool settings.
@@ -208904,10 +208960,41 @@ class ToolAdmin {
208904
208960
  set coordinateLockOverrides(coordLockOvr) { this.toolState.coordLockOvr = coordLockOvr; }
208905
208961
  /** @internal */
208906
208962
  async callOnCleanup() {
208907
- await this.exitViewTool();
208908
- await this.exitInputCollector();
208909
- if (undefined !== this._primitiveTool)
208910
- await this._primitiveTool.onCleanup();
208963
+ let pendingFinishCommand;
208964
+ const previousTransition = this._primitiveToolTransition;
208965
+ let resolveTransition;
208966
+ const transition = this._primitiveToolTransition = new Promise((resolve) => { resolveTransition = resolve; });
208967
+ try {
208968
+ // Start the edit-command cleanup before the first await. ViewManager can invoke this method
208969
+ // without awaiting it when the last viewport is dropped.
208970
+ if (undefined !== this._editCommandHandler) {
208971
+ const finishCommand = this._editCommandHandler.finishCommand();
208972
+ // Attach a rejection handler immediately: another cleanup operation may fail before this promise is awaited.
208973
+ pendingFinishCommand = finishCommand.catch((err) => {
208974
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logError(`${_common_FrontendLoggerCategory__WEBPACK_IMPORTED_MODULE_4__.FrontendLoggerCategory.Package}.toolAdmin`, err);
208975
+ return "";
208976
+ });
208977
+ }
208978
+ if (undefined !== previousTransition)
208979
+ await previousTransition;
208980
+ if (undefined !== this._viewTool)
208981
+ await this.exitViewTool();
208982
+ if (undefined !== this._inputCollector)
208983
+ await this.exitInputCollector();
208984
+ // Keep cleanup path consistent with other primitive-tool transitions.
208985
+ if (undefined !== this._primitiveTool)
208986
+ await this.setPrimitiveToolInternal(undefined, pendingFinishCommand); // NOTE: ViewManager.setSelectedView will call startDefaultTool if a new view is opened...
208987
+ else if (undefined !== pendingFinishCommand)
208988
+ await pendingFinishCommand;
208989
+ }
208990
+ catch (err) {
208991
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logError(`${_common_FrontendLoggerCategory__WEBPACK_IMPORTED_MODULE_4__.FrontendLoggerCategory.Package}.toolAdmin`, err);
208992
+ }
208993
+ finally {
208994
+ resolveTransition?.();
208995
+ if (this._primitiveToolTransition === transition)
208996
+ this._primitiveToolTransition = undefined;
208997
+ }
208911
208998
  }
208912
208999
  }
208913
209000
  /**
@@ -289898,18 +289985,19 @@ class PolyfaceQuery {
289898
289985
  */
289899
289986
  static dihedralAngleSummary(source, ignoreBoundaries = false) {
289900
289987
  // more info can be found at geometry/internaldocs/Polyface.md
289988
+ // visit all facets and collect normals and edges
289901
289989
  const edges = new _IndexedEdgeMatcher__WEBPACK_IMPORTED_MODULE_29__.IndexedEdgeMatcher();
289902
289990
  const vertices = source instanceof _Polyface__WEBPACK_IMPORTED_MODULE_34__.Polyface ? source.data.point : undefined;
289903
289991
  const visitor = source instanceof _Polyface__WEBPACK_IMPORTED_MODULE_34__.Polyface ? source.createVisitor(1) : source;
289904
289992
  visitor.setNumWrap(1);
289905
- const centroidNormal = [];
289993
+ const facetNormals = [];
289906
289994
  let normalCounter = 0;
289907
289995
  for (visitor.reset(); visitor.moveToNextFacet();) {
289908
289996
  const numEdges = visitor.pointCount - 1;
289909
289997
  const normal = _geometry3d_PolygonOps__WEBPACK_IMPORTED_MODULE_14__.PolygonOps.centroidAreaNormal(visitor.point);
289910
289998
  if (normal === undefined)
289911
289999
  return -2;
289912
- centroidNormal.push(normal);
290000
+ facetNormals.push(normal);
289913
290001
  for (let i = 0; i < numEdges; i++) {
289914
290002
  const edge = edges.addEdge(visitor.clientPointIndex(i), visitor.clientPointIndex(i + 1), normalCounter);
289915
290003
  if (!vertices) // decorate if we don't have vertices to query later
@@ -289925,21 +290013,24 @@ class PolyfaceQuery {
289925
290013
  edges.sortAndCollectClusters(manifoldClusters, ignoreBoundaries ? undefined : badClusters, undefined, badClusters);
289926
290014
  if (badClusters.length > 0)
289927
290015
  return -2;
289928
- // find angle between facet centroid normals (dihedral angles)
290016
+ // find angle between facet normals (dihedral angles)
289929
290017
  let numPositive = 0;
289930
290018
  let numPlanar = 0;
289931
290019
  let numNegative = 0;
289932
290020
  const edgeVector = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_12__.Vector3d.create();
289933
290021
  for (const cluster of manifoldClusters) {
289934
290022
  if (Array.isArray(cluster) && cluster.length === 2) {
289935
- const sideA = cluster[0];
289936
- const sideB = cluster[1];
289937
- if (vertices)
289938
- vertices.vectorIndexIndex(sideA.startVertex, sideA.endVertex, edgeVector);
289939
- else
290023
+ const sideA = cluster[0]; // edge on facetA
290024
+ const sideB = cluster[1]; // edge on facetB
290025
+ if (vertices) {
290026
+ if (!vertices.vectorIndexIndex(sideA.startVertex, sideA.endVertex, edgeVector))
290027
+ return -2;
290028
+ }
290029
+ else {
289940
290030
  edgeVector.setFrom(sideA.edgeVector);
289941
- const facetNormalA = centroidNormal[sideA.facetIndex].direction;
289942
- const facetNormalB = centroidNormal[sideB.facetIndex].direction;
290031
+ }
290032
+ const facetNormalA = facetNormals[sideA.facetIndex].direction;
290033
+ const facetNormalB = facetNormals[sideB.facetIndex].direction;
289943
290034
  const dihedralAngle = facetNormalA.signedAngleTo(facetNormalB, edgeVector);
289944
290035
  if (dihedralAngle.isAlmostZero)
289945
290036
  numPlanar++;
@@ -342333,7 +342424,7 @@ class TestContext {
342333
342424
  this.initializeRpcInterfaces({ title: this.settings.Backend.name, version: this.settings.Backend.version });
342334
342425
  const iModelClient = new imodels_client_management_1.IModelsClient({ api: { baseUrl: `https://${process.env.IMJS_URL_PREFIX ?? ""}api.bentley.com/imodels` } });
342335
342426
  await core_frontend_1.NoRenderApp.startup({
342336
- applicationVersion: "5.13.0-dev.10",
342427
+ applicationVersion: "5.13.0-dev.12",
342337
342428
  applicationId: this.settings.gprid,
342338
342429
  authorizationClient: new frontend_1.TestFrontendAuthorizationClient(this.serviceAuthToken),
342339
342430
  hubAccess: new imodels_access_frontend_1.FrontendIModelsAccess(iModelClient),
@@ -367528,7 +367619,7 @@ var loadLanguages = instance.loadLanguages;
367528
367619
  (module) {
367529
367620
 
367530
367621
  "use strict";
367531
- 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"}}');
367622
+ 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"}}');
367532
367623
 
367533
367624
  /***/ },
367534
367625