@itwin/rpcinterface-full-stack-tests 4.3.1 → 4.3.3

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.
@@ -153495,19 +153495,23 @@ __webpack_require__.r(__webpack_exports__);
153495
153495
  */
153496
153496
 
153497
153497
 
153498
+ const loggerCategory = "ArcGISTileMap";
153498
153499
  const nonVisibleChildren = [false, false, false, false];
153499
153500
  /** @internal */
153500
153501
  class ArcGISTileMap {
153501
- constructor(restBaseUrl, settings, fetchFunc, nbLods) {
153502
- this.tileMapRequestSize = 32;
153502
+ // We want to query a tile map that covers an area all around the top-lef missing tile, we offset the top-left corner position of the tilemap.
153503
+ // We used to create a 32x32 tiles area around the missing tiles, but this was causing the tilemap top-left position
153504
+ // to fall outside the dataset bundle of the remote server, thus giving invalid response.
153505
+ get tileMapOffset() { return (this.tileMapRequestSize * 0.5); }
153506
+ constructor(restBaseUrl, settings, fetchFunc) {
153507
+ // For similar reasons as the corner offset, we need to keep the tile map size not too big to avoid covering multiple bundles.
153508
+ this.tileMapRequestSize = 8;
153503
153509
  this.fallbackTileMapRequestSize = 2;
153504
153510
  this._tilesCache = new _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Dictionary((lhs, rhs) => (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.compareStrings)(lhs, rhs));
153505
153511
  this._restBaseUrl = restBaseUrl;
153506
153512
  this._fetchFunc = fetchFunc;
153507
153513
  this._settings = settings;
153508
- if (nbLods !== undefined && nbLods > 0) {
153509
- this._callQueues = new Array(nbLods).fill(Promise.resolve(nonVisibleChildren));
153510
- }
153514
+ this._callQueues = new Array(ArcGISTileMap.maxLod).fill(Promise.resolve(nonVisibleChildren));
153511
153515
  }
153512
153516
  async fetchTileMapFromServer(level, row, column, width, height) {
153513
153517
  const tmpUrl = `${this._restBaseUrl}/tilemap/${level}/${row}/${column}/${width}/${height}?f=json`;
@@ -153529,10 +153533,12 @@ class ArcGISTileMap {
153529
153533
  async getChildrenAvailability(childIds) {
153530
153534
  if (!childIds.length)
153531
153535
  return [];
153532
- // We need to check cache again:
153533
- // Tiles we are looking for may have been added to cache while we were waiting in the call queue.
153536
+ // Before entering the queue for a backend request,
153537
+ // let check if cache doesn't already contain what we are looking for.
153534
153538
  const cacheInfo = this.getAvailableTilesFromCache(childIds);
153535
153539
  if (cacheInfo.allTilesFound) {
153540
+ if (cacheInfo.available.includes(false))
153541
+ return cacheInfo.available;
153536
153542
  return cacheInfo.available;
153537
153543
  }
153538
153544
  // If we never encountered this tile level before, then a tilemap request must be made to get tiles visibility.
@@ -153541,48 +153547,115 @@ class ArcGISTileMap {
153541
153547
  // before making another one.
153542
153548
  const childLevel = childIds[0].level + 1;
153543
153549
  if (this._callQueues && childLevel < this._callQueues.length) {
153544
- const res = this._callQueues[childLevel].then(async () => this.getChildrenAvailabilityFromServer(childIds));
153550
+ const res = this._callQueues[childLevel].then(async () => {
153551
+ return this.getChildrenAvailabilityFromServer(childIds);
153552
+ });
153545
153553
  this._callQueues[childLevel] = res.catch(() => nonVisibleChildren);
153546
153554
  return res;
153547
153555
  }
153548
153556
  else {
153549
153557
  // We should not be in this case, probably because server info is missing LODs in the capabilities?!
153558
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logWarning(loggerCategory, `Skipped request queue for child level ${childLevel}`);
153550
153559
  return this.getChildrenAvailabilityFromServer(childIds);
153551
153560
  }
153552
153561
  }
153562
+ isCacheMissingTile(level, startRow, startColumn, endRow, endColumn) {
153563
+ let missingTileFound = false;
153564
+ if (endRow <= startRow || endColumn <= startColumn)
153565
+ return missingTileFound;
153566
+ for (let j = startColumn; j <= endColumn && !missingTileFound; j++) {
153567
+ for (let i = startRow; i <= endRow && !missingTileFound; i++) {
153568
+ if (j >= 0 && i >= 0) {
153569
+ const contentId = _internal__WEBPACK_IMPORTED_MODULE_1__.QuadId.getTileContentId(level, j, i);
153570
+ if (this._tilesCache.get(contentId) === undefined) {
153571
+ missingTileFound = true;
153572
+ }
153573
+ }
153574
+ }
153575
+ }
153576
+ return missingTileFound;
153577
+ }
153578
+ collectTilesMissingFromCache(missingQueryTiles) {
153579
+ const missingTiles = [];
153580
+ for (const quad of missingQueryTiles) {
153581
+ const contentId = _internal__WEBPACK_IMPORTED_MODULE_1__.QuadId.getTileContentId(quad.level, quad.column, quad.row);
153582
+ const avail = this._tilesCache.get(contentId);
153583
+ if (avail === undefined)
153584
+ missingTiles.push(quad);
153585
+ }
153586
+ return missingTiles;
153587
+ }
153553
153588
  // Query tiles are tiles that we need to check availability
153554
153589
  // The array is assumed to be in in row major orientation, i.e.: [TileRow0Col0, TileRow0Col1, TileRow1Col0, TileRow1Col1,]
153555
153590
  async fetchAndReadTilemap(queryTiles, reqWidth, reqHeight) {
153556
- let available = [];
153591
+ let available = queryTiles.map(() => false);
153557
153592
  if (queryTiles.length === 0) {
153558
153593
  return available;
153559
153594
  }
153560
- const row = queryTiles[0].row;
153561
- const column = queryTiles[0].column;
153562
- const level = queryTiles[0].level;
153563
- let reqRow, reqColumn;
153564
- if (reqWidth === this.fallbackTileMapRequestSize && reqHeight === this.fallbackTileMapRequestSize) {
153565
- reqRow = row;
153566
- reqColumn = column;
153567
- }
153568
- else {
153569
- // If tile map if big enough. create offset that will place the current tile in the middle of the tilemap.
153570
- // If we place the first query tile in the top-left corner (i.e. without offset), any query for a tile located above or on the left
153571
- // will trigger a new request.
153572
- const offsetRow = (reqHeight / 2.0) - 1;
153573
- const offsetColumn = (reqWidth / 2.0) - 1;
153574
- reqRow = Math.max(row - offsetRow, 0);
153575
- reqColumn = Math.max(column - offsetColumn, 0);
153576
- }
153577
- try {
153578
- // console.log(`Tilemap request: ${level},${reqRow},${reqColumn},${reqWidth},${reqHeight}`);
153579
- const json = await this.fetchTileMapFromServer(level, reqRow, reqColumn, reqWidth, reqHeight);
153595
+ // console.log(`queryTiles: ${queryTiles.map((quad) => quad.contentId)}`);
153596
+ // Find the top-left most corner of the extent covering the query tiles.
153597
+ const getTopLeftCorner = (tiles) => {
153598
+ let row;
153599
+ let column;
153600
+ for (const quad of tiles) {
153601
+ if (row === undefined || quad.row <= row)
153602
+ row = quad.row;
153603
+ if (column === undefined || quad.column <= column) {
153604
+ column = quad.column;
153605
+ }
153606
+ }
153607
+ return { row, column };
153608
+ };
153609
+ const level = queryTiles[0].level; // We assume all tiles to be on the same level
153610
+ let missingQueryTiles = this.collectTilesMissingFromCache(queryTiles);
153611
+ let gotAdjusted = false;
153612
+ let nbAttempt = 0; // Safety: We should never be making more requests than the number of queries tiles (otherwise something is wrong)
153613
+ while (missingQueryTiles.length > 0
153614
+ && (nbAttempt++ < queryTiles.length)) {
153615
+ const tileMapTopLeft = getTopLeftCorner(missingQueryTiles);
153616
+ if (tileMapTopLeft.row === undefined || tileMapTopLeft.column === undefined)
153617
+ return available; // Should not occurs since missingQueryTiles is non empty
153618
+ let tileMapRow = tileMapTopLeft.row;
153619
+ let tileMapColumn = tileMapTopLeft.column;
153620
+ const logLocationOffset = (newRow, newCol) => `[Row:${newRow !== tileMapTopLeft.row ? `${tileMapTopLeft.row}->${newRow}` : `${newRow}`} Column:${newCol !== tileMapTopLeft.column ? `${tileMapTopLeft.column}->${newCol}` : `${newCol}`}]`;
153621
+ // Position the top-left missing tile in the middle of the tilemap; minimizing requests if sibling tiles are requested right after
153622
+ // If previous response got adjusted, don't try to optimize tile map location
153623
+ if (queryTiles.length < this.tileMapRequestSize && !gotAdjusted) {
153624
+ const tileMapOffset = this.tileMapOffset - Math.floor(Math.sqrt(queryTiles.length) * 0.5);
153625
+ const missingTileBufferSize = Math.ceil(tileMapOffset * 0.5);
153626
+ if (this.isCacheMissingTile(level, tileMapRow - missingTileBufferSize, tileMapColumn - missingTileBufferSize, tileMapRow - 1, tileMapColumn - 1)) {
153627
+ tileMapRow = Math.max(tileMapRow - tileMapOffset, 0);
153628
+ tileMapColumn = Math.max(tileMapColumn - tileMapOffset, 0);
153629
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logTrace(loggerCategory, `Offset applied to location in top-left direction: ${logLocationOffset(tileMapRow, tileMapColumn)}`);
153630
+ }
153631
+ else {
153632
+ const leftMissingTiles = this.isCacheMissingTile(level, tileMapRow, tileMapColumn - missingTileBufferSize, tileMapRow + missingTileBufferSize, tileMapColumn - 1);
153633
+ const topMissingTiles = this.isCacheMissingTile(level, tileMapRow - missingTileBufferSize, tileMapColumn, tileMapRow - 1, tileMapColumn + missingTileBufferSize);
153634
+ if (leftMissingTiles && topMissingTiles) {
153635
+ tileMapRow = Math.max(tileMapRow - tileMapOffset, 0);
153636
+ tileMapColumn = Math.max(tileMapColumn - tileMapOffset, 0);
153637
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logTrace(loggerCategory, `Offset applied to location in top-left direction. ${logLocationOffset(tileMapRow, tileMapColumn)}`);
153638
+ }
153639
+ else if (leftMissingTiles) {
153640
+ tileMapColumn = Math.max(tileMapColumn - tileMapOffset, 0);
153641
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logTrace(loggerCategory, `Offset applied to location in left direction. ${logLocationOffset(tileMapRow, tileMapColumn)}`);
153642
+ }
153643
+ else if (topMissingTiles) {
153644
+ tileMapRow = Math.max(tileMapRow - tileMapOffset, 0);
153645
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logTrace(loggerCategory, `Offset applied to location in top direction: ${logLocationOffset(tileMapRow, tileMapColumn)}`);
153646
+ }
153647
+ else
153648
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logTrace(loggerCategory, `No offset applied to location: ${logLocationOffset(tileMapRow, tileMapColumn)}`);
153649
+ }
153650
+ }
153651
+ const json = await this.fetchTileMapFromServer(level, tileMapRow, tileMapColumn, reqWidth, reqHeight);
153580
153652
  let tileMapWidth = reqWidth;
153581
153653
  let tileMapHeight = reqHeight;
153582
153654
  if (Array.isArray(json.data)) {
153583
153655
  // The response width and height might be different than the requested dimensions.
153584
153656
  // Ref: https://developers.arcgis.com/rest/services-reference/enterprise/tile-map.htm
153585
153657
  if (json.adjusted) {
153658
+ gotAdjusted = true;
153586
153659
  // If tilemap size got adjusted, I'm expecting to get adjusted size...
153587
153660
  // otherwise there is something really odd with this server.
153588
153661
  (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(json.location?.width !== undefined && json.location?.height !== undefined);
@@ -153591,71 +153664,57 @@ class ArcGISTileMap {
153591
153664
  tileMapHeight = json.location?.height;
153592
153665
  }
153593
153666
  }
153594
- let k = 0;
153595
- for (let j = 0; j < tileMapWidth; j++) {
153596
- for (let i = 0; i < tileMapHeight; i++) {
153667
+ // Build cache from tile map response
153668
+ for (let j = 0; j < tileMapHeight; j++) {
153669
+ for (let i = 0; i < tileMapWidth; i++) {
153597
153670
  const avail = json.data[(j * tileMapWidth) + i] !== 0;
153598
- const curColumn = reqColumn + i;
153599
- const curRow = reqRow + j;
153600
- // console.log(`Tilemap tile:: ${level},${curRow},${curColumn} => ${avail}`);
153671
+ const curColumn = tileMapColumn + i;
153672
+ const curRow = tileMapRow + j;
153601
153673
  this._tilesCache.set(_internal__WEBPACK_IMPORTED_MODULE_1__.QuadId.getTileContentId(level, curColumn, curRow), avail);
153602
- // Check if actual tile is among the children we are looking for, if so update the availability array.
153603
- if (curColumn >= queryTiles[0].column && curColumn <= queryTiles[queryTiles.length - 1].column
153604
- && curRow >= queryTiles[0].row && curRow <= queryTiles[queryTiles.length - 1].row) {
153605
- available[k++] = avail;
153606
- }
153607
153674
  }
153608
153675
  }
153676
+ // Collect tile missing from the cache
153677
+ // There are 2 reasons why the tile map response would not cover all the missing tiles:
153678
+ // 1. The requested tile map size is not large enough to cover all tiles
153679
+ // 2. The tile map size has been adjusted by the server (i.e. data bundle limits)
153680
+ missingQueryTiles = this.collectTilesMissingFromCache(missingQueryTiles);
153681
+ if (missingQueryTiles.length > 0)
153682
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logTrace(loggerCategory, `There are ${missingQueryTiles.length} missing tiles from previous request`);
153609
153683
  }
153610
153684
  else {
153611
- // If server returns data (i.e. error 422), thats fine we assume all tiles of tilemap are not available.
153612
- available = queryTiles.map(() => false);
153613
- // Mark all tilemap tiles to non-available in the cache too
153685
+ missingQueryTiles = [];
153686
+ // Mark all tilemap tiles to non-available in the cache too.
153614
153687
  for (let j = 0; j < tileMapWidth; j++) {
153615
153688
  for (let i = 0; i < tileMapHeight; i++) {
153616
- this._tilesCache.set(_internal__WEBPACK_IMPORTED_MODULE_1__.QuadId.getTileContentId(level, reqColumn + i, reqRow + j), false);
153689
+ this._tilesCache.set(_internal__WEBPACK_IMPORTED_MODULE_1__.QuadId.getTileContentId(level, tileMapColumn + i, tileMapRow + j), false);
153617
153690
  }
153618
153691
  }
153619
153692
  }
153693
+ } // end loop missing tiles
153694
+ if (nbAttempt > queryTiles.length) {
153695
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logError(loggerCategory, `Request loop was terminated; unable to get missing tiles; `);
153620
153696
  }
153621
- catch (_error) {
153622
- available = queryTiles.map(() => false);
153623
- }
153697
+ // Create final output array from cache
153698
+ available = queryTiles.map((quad) => this._tilesCache.get(quad.contentId) ?? false);
153699
+ if (available.includes(false))
153700
+ return available;
153624
153701
  return available;
153625
153702
  }
153626
153703
  async getChildrenAvailabilityFromServer(childIds) {
153627
- // We need to check cache again:
153628
- // Tiles we are looking for may have been added to cache while we were waiting in the call queue.
153629
- const cacheInfo = this.getAvailableTilesFromCache(childIds);
153630
- if (cacheInfo.allTilesFound) {
153631
- return cacheInfo.available;
153632
- }
153633
153704
  let available;
153634
153705
  try {
153635
153706
  available = await this.fetchAndReadTilemap(childIds, this.tileMapRequestSize, this.tileMapRequestSize);
153636
- if (available.length !== childIds.length) {
153637
- if (this.tileMapRequestSize > this.fallbackTileMapRequestSize) {
153638
- // Maybe we were unlucky and the tilemap got adjusted our the tiles we are looking for got clipped,
153639
- // so let try we a smaller tilemap
153640
- available = await this.fetchAndReadTilemap(childIds, this.fallbackTileMapRequestSize, this.fallbackTileMapRequestSize);
153641
- }
153642
- if (available.length < childIds.length) {
153643
- // Could not all tiles children tiles, returns what we got and fill any gaps with false.
153644
- const tmpAvail = childIds.map(() => false);
153645
- for (let i = 0; i < available.length; i++) {
153646
- tmpAvail[i] = available[i];
153647
- }
153648
- available = tmpAvail;
153649
- }
153650
- }
153651
153707
  }
153652
- catch (_error) {
153708
+ catch (err) {
153653
153709
  // if any error occurs, we assume tiles not to be visible
153710
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logError(loggerCategory, `Error while fetching tile map data : ${err}`);
153654
153711
  available = childIds.map(() => false);
153655
153712
  }
153656
153713
  return available;
153657
153714
  }
153658
153715
  }
153716
+ ArcGISTileMap.maxLod = 30;
153717
+
153659
153718
 
153660
153719
 
153661
153720
  /***/ }),
@@ -155095,7 +155154,7 @@ class ArcGISMapLayerImageryProvider extends _internal__WEBPACK_IMPORTED_MODULE_2
155095
155154
  const fetch = async (url, options) => {
155096
155155
  return this.fetch(url, options);
155097
155156
  };
155098
- this._tileMap = new _internal__WEBPACK_IMPORTED_MODULE_2__.ArcGISTileMap(this._settings.url, this._settings, fetch, json.tileInfo?.lods?.length);
155157
+ this._tileMap = new _internal__WEBPACK_IMPORTED_MODULE_2__.ArcGISTileMap(this._settings.url, this._settings, fetch);
155099
155158
  }
155100
155159
  }
155101
155160
  // Read range using fullextent from service metadata
@@ -284968,7 +285027,7 @@ class TestContext {
284968
285027
  this.initializeRpcInterfaces({ title: this.settings.Backend.name, version: this.settings.Backend.version });
284969
285028
  const iModelClient = new imodels_client_management_1.IModelsClient({ api: { baseUrl: `https://${process.env.IMJS_URL_PREFIX ?? ""}api.bentley.com/imodels` } });
284970
285029
  await core_frontend_1.NoRenderApp.startup({
284971
- applicationVersion: "4.3.1",
285030
+ applicationVersion: "4.3.3",
284972
285031
  applicationId: this.settings.gprid,
284973
285032
  authorizationClient: new frontend_1.TestFrontendAuthorizationClient(this.adminUserAccessToken),
284974
285033
  hubAccess: new imodels_access_frontend_1.FrontendIModelsAccess(iModelClient),
@@ -303732,7 +303791,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"P
303732
303791
  /***/ ((module) => {
303733
303792
 
303734
303793
  "use strict";
303735
- module.exports = JSON.parse('{"name":"@itwin/core-frontend","version":"4.3.1","description":"iTwin.js frontend components","main":"lib/cjs/core-frontend.js","module":"lib/esm/core-frontend.js","typings":"lib/cjs/core-frontend","license":"MIT","scripts":{"build":"npm run -s copy:public && npm run -s build:cjs && npm run -s build:esm && npm run -s webpackWorkers && npm run -s copy:workers","build:cjs":"npm run -s copy:js:cjs && tsc 1>&2 --outDir lib/cjs","build:esm":"npm run -s copy:js:esm && tsc 1>&2 --module ES2020 --outDir lib/esm","clean":"rimraf lib .rush/temp/package-deps*.json","copy:public":"cpx \\"./src/public/**/*\\" ./lib/public","copy:js:cjs":"cpx \\"./src/**/*.js\\" ./lib/cjs","copy:js:esm":"cpx \\"./src/**/*.js\\" ./lib/esm","copy:workers":"cpx \\"./lib/workers/webpack/parse-imdl-worker.js\\" ./lib/public/scripts","docs":"betools docs --includes=../../generated-docs/extract --json=../../generated-docs/core/core-frontend/file.json --tsIndexFile=./core-frontend.ts --onlyJson --excludes=webgl/**/*,**/map/*.d.ts,**/tile/*.d.ts,**/*-css.ts","extract-api":"betools extract-api --entry=core-frontend && npm run extract-extension-api","extract-extension-api":"eslint -c extraction.eslint.config.js \\"./src/**/*.ts\\" 1>&2","lint":"eslint -f visualstudio \\"./src/**/*.ts\\" 1>&2","pseudolocalize":"betools pseudolocalize --englishDir ./src/public/locales/en --out ./public/locales/en-PSEUDO","test":"npm run -s webpackTests && certa -r chrome","cover":"npm -s test","test:debug":"certa -r chrome --debug","webpackTests":"webpack --config ./src/test/utils/webpack.config.js 1>&2 && npm run -s webpackTestWorker","webpackTestWorker":"webpack --config ./src/test/worker/webpack.config.js 1>&2 && cpx \\"./lib/test/test-worker.js\\" ./lib/test","webpackWorkers":"webpack --config ./src/workers/ImdlParser/webpack.config.js 1>&2"},"repository":{"type":"git","url":"https://github.com/iTwin/itwinjs-core.git","directory":"core/frontend"},"keywords":["Bentley","BIM","iModel","digital-twin","iTwin"],"author":{"name":"Bentley Systems, Inc.","url":"http://www.bentley.com"},"peerDependencies":{"@itwin/appui-abstract":"workspace:^4.3.1","@itwin/core-bentley":"workspace:^4.3.1","@itwin/core-common":"workspace:^4.3.1","@itwin/core-geometry":"workspace:^4.3.1","@itwin/core-orbitgt":"workspace:^4.3.1","@itwin/core-quantity":"workspace:^4.3.1"},"//devDependencies":["NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install","NOTE: All tools used by scripts in this package must be listed as devDependencies"],"devDependencies":{"@itwin/appui-abstract":"workspace:*","@itwin/build-tools":"workspace:*","@itwin/core-bentley":"workspace:*","@itwin/core-common":"workspace:*","@itwin/core-geometry":"workspace:*","@itwin/core-orbitgt":"workspace:*","@itwin/core-quantity":"workspace:*","@itwin/certa":"workspace:*","@itwin/eslint-plugin":"4.0.0-dev.44","@types/chai":"4.3.1","@types/chai-as-promised":"^7","@types/mocha":"^8.2.2","@types/sinon":"^10.0.15","babel-loader":"~8.2.5","babel-plugin-istanbul":"~6.1.1","chai":"^4.3.10","chai-as-promised":"^7","cpx2":"^3.0.0","eslint":"^8.44.0","glob":"^7.1.2","mocha":"^10.0.0","nyc":"^15.1.0","rimraf":"^3.0.2","sinon":"^15.0.4","source-map-loader":"^4.0.0","typescript":"~5.0.2","typemoq":"^2.1.0","webpack":"^5.76.0"},"//dependencies":["NOTE: these dependencies should be only for things that DO NOT APPEAR IN THE API","NOTE: core-frontend should remain UI technology agnostic, so no react/angular dependencies are allowed"],"dependencies":{"@itwin/cloud-agnostic-core":"^2.1.0","@itwin/object-storage-core":"^2.1.0","@itwin/core-i18n":"workspace:*","@itwin/core-telemetry":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@loaders.gl/core":"^3.1.6","@loaders.gl/draco":"^3.1.6","fuse.js":"^3.3.0","wms-capabilities":"0.4.0"},"nyc":{"extends":"./node_modules/@itwin/build-tools/.nycrc"}}');
303794
+ module.exports = JSON.parse('{"name":"@itwin/core-frontend","version":"4.3.3","description":"iTwin.js frontend components","main":"lib/cjs/core-frontend.js","module":"lib/esm/core-frontend.js","typings":"lib/cjs/core-frontend","license":"MIT","scripts":{"build":"npm run -s copy:public && npm run -s build:cjs && npm run -s build:esm && npm run -s webpackWorkers && npm run -s copy:workers","build:cjs":"npm run -s copy:js:cjs && tsc 1>&2 --outDir lib/cjs","build:esm":"npm run -s copy:js:esm && tsc 1>&2 --module ES2020 --outDir lib/esm","clean":"rimraf lib .rush/temp/package-deps*.json","copy:public":"cpx \\"./src/public/**/*\\" ./lib/public","copy:js:cjs":"cpx \\"./src/**/*.js\\" ./lib/cjs","copy:js:esm":"cpx \\"./src/**/*.js\\" ./lib/esm","copy:workers":"cpx \\"./lib/workers/webpack/parse-imdl-worker.js\\" ./lib/public/scripts","docs":"betools docs --includes=../../generated-docs/extract --json=../../generated-docs/core/core-frontend/file.json --tsIndexFile=./core-frontend.ts --onlyJson --excludes=webgl/**/*,**/map/*.d.ts,**/tile/*.d.ts,**/*-css.ts","extract-api":"betools extract-api --entry=core-frontend && npm run extract-extension-api","extract-extension-api":"eslint -c extraction.eslint.config.js \\"./src/**/*.ts\\" 1>&2","lint":"eslint -f visualstudio \\"./src/**/*.ts\\" 1>&2","pseudolocalize":"betools pseudolocalize --englishDir ./src/public/locales/en --out ./public/locales/en-PSEUDO","test":"npm run -s webpackTests && certa -r chrome","cover":"npm -s test","test:debug":"certa -r chrome --debug","webpackTests":"webpack --config ./src/test/utils/webpack.config.js 1>&2 && npm run -s webpackTestWorker","webpackTestWorker":"webpack --config ./src/test/worker/webpack.config.js 1>&2 && cpx \\"./lib/test/test-worker.js\\" ./lib/test","webpackWorkers":"webpack --config ./src/workers/ImdlParser/webpack.config.js 1>&2"},"repository":{"type":"git","url":"https://github.com/iTwin/itwinjs-core.git","directory":"core/frontend"},"keywords":["Bentley","BIM","iModel","digital-twin","iTwin"],"author":{"name":"Bentley Systems, Inc.","url":"http://www.bentley.com"},"peerDependencies":{"@itwin/appui-abstract":"workspace:^4.3.3","@itwin/core-bentley":"workspace:^4.3.3","@itwin/core-common":"workspace:^4.3.3","@itwin/core-geometry":"workspace:^4.3.3","@itwin/core-orbitgt":"workspace:^4.3.3","@itwin/core-quantity":"workspace:^4.3.3"},"//devDependencies":["NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install","NOTE: All tools used by scripts in this package must be listed as devDependencies"],"devDependencies":{"@itwin/appui-abstract":"workspace:*","@itwin/build-tools":"workspace:*","@itwin/core-bentley":"workspace:*","@itwin/core-common":"workspace:*","@itwin/core-geometry":"workspace:*","@itwin/core-orbitgt":"workspace:*","@itwin/core-quantity":"workspace:*","@itwin/certa":"workspace:*","@itwin/eslint-plugin":"4.0.0-dev.44","@types/chai":"4.3.1","@types/chai-as-promised":"^7","@types/mocha":"^8.2.2","@types/sinon":"^10.0.15","babel-loader":"~8.2.5","babel-plugin-istanbul":"~6.1.1","chai":"^4.3.10","chai-as-promised":"^7","cpx2":"^3.0.0","eslint":"^8.44.0","glob":"^7.1.2","mocha":"^10.0.0","nyc":"^15.1.0","rimraf":"^3.0.2","sinon":"^15.0.4","source-map-loader":"^4.0.0","typescript":"~5.0.2","typemoq":"^2.1.0","webpack":"^5.76.0"},"//dependencies":["NOTE: these dependencies should be only for things that DO NOT APPEAR IN THE API","NOTE: core-frontend should remain UI technology agnostic, so no react/angular dependencies are allowed"],"dependencies":{"@itwin/cloud-agnostic-core":"^2.1.0","@itwin/object-storage-core":"^2.1.0","@itwin/core-i18n":"workspace:*","@itwin/core-telemetry":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@loaders.gl/core":"^3.1.6","@loaders.gl/draco":"^3.1.6","fuse.js":"^3.3.0","wms-capabilities":"0.4.0"},"nyc":{"extends":"./node_modules/@itwin/build-tools/.nycrc"}}');
303736
303795
 
303737
303796
  /***/ }),
303738
303797