@itwin/rpcinterface-full-stack-tests 3.4.3 → 3.4.5

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.
@@ -165851,9 +165851,9 @@ class TileAdmin {
165851
165851
  // start dynamically loading default implementation and save the promise to avoid duplicate instances
165852
165852
  this._tileStoragePromise = (async () => {
165853
165853
  await __webpack_require__.e(/*! import() */ "vendors-common_temp_node_modules_pnpm_reflect-metadata_0_1_13_node_modules_reflect-metadata_R-610cb3").then(__webpack_require__.t.bind(__webpack_require__, /*! reflect-metadata */ "../../common/temp/node_modules/.pnpm/reflect-metadata@0.1.13/node_modules/reflect-metadata/Reflect.js", 23));
165854
- // eslint-disable-next-line @typescript-eslint/no-var-requires
165855
- const azureFrontend = await __webpack_require__(/*! ./object-storage-azure */ "../../core/frontend/lib/esm/tile/object-storage-azure.js")();
165856
- const azureStorage = new azureFrontend.AzureFrontendStorage(new azureFrontend.FrontendBlockBlobClientWrapperFactory());
165854
+ // eslint-disable-next-line @typescript-eslint/naming-convention
165855
+ const { AzureFrontendStorage, FrontendBlockBlobClientWrapperFactory } = await Promise.all(/*! import() | object-storage */[__webpack_require__.e("vendors-common_temp_node_modules_pnpm_reflect-metadata_0_1_13_node_modules_reflect-metadata_R-610cb3"), __webpack_require__.e("vendors-common_temp_node_modules_pnpm_itwin_object-storage-azure_1_4_0_node_modules_itwin_obj-3576c6"), __webpack_require__.e("object-storage")]).then(__webpack_require__.t.bind(__webpack_require__, /*! @itwin/object-storage-azure/lib/frontend */ "../../common/temp/node_modules/.pnpm/@itwin+object-storage-azure@1.4.0/node_modules/@itwin/object-storage-azure/lib/frontend/index.js", 23));
165856
+ const azureStorage = new AzureFrontendStorage(new FrontendBlockBlobClientWrapperFactory());
165857
165857
  this._tileStorage = new _internal__WEBPACK_IMPORTED_MODULE_6__.TileStorage(azureStorage);
165858
165858
  return this._tileStorage;
165859
165859
  })();
@@ -175409,21 +175409,6 @@ class WmtsCapabilities {
175409
175409
  WmtsCapabilities._capabilitiesCache = new Map();
175410
175410
 
175411
175411
 
175412
- /***/ }),
175413
-
175414
- /***/ "../../core/frontend/lib/esm/tile/object-storage-azure.js":
175415
- /*!****************************************************************!*\
175416
- !*** ../../core/frontend/lib/esm/tile/object-storage-azure.js ***!
175417
- \****************************************************************/
175418
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
175419
-
175420
- // this wrapper is needed when compiling the package with CJS.
175421
- // In that case, Typescript will convert the dynamic import into a require and Webpack won't parse the magic comment.
175422
- module.exports = async () => {
175423
- return Promise.all(/*! import() | object-storage */[__webpack_require__.e("vendors-common_temp_node_modules_pnpm_reflect-metadata_0_1_13_node_modules_reflect-metadata_R-610cb3"), __webpack_require__.e("vendors-common_temp_node_modules_pnpm_itwin_object-storage-azure_1_4_0_node_modules_itwin_obj-3576c6"), __webpack_require__.e("object-storage")]).then(__webpack_require__.t.bind(__webpack_require__, /*! @itwin/object-storage-azure/lib/frontend */ "../../common/temp/node_modules/.pnpm/@itwin+object-storage-azure@1.4.0/node_modules/@itwin/object-storage-azure/lib/frontend/index.js", 23));
175424
- }
175425
-
175426
-
175427
175412
  /***/ }),
175428
175413
 
175429
175414
  /***/ "../../core/frontend/lib/esm/tools/AccuDrawTool.js":
@@ -288130,83 +288115,83 @@ __webpack_require__.r(__webpack_exports__);
288130
288115
  /* harmony export */ });
288131
288116
  /* harmony import */ var _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @itwin/core-bentley */ "../../core/bentley/lib/esm/core-bentley.js");
288132
288117
  /* harmony import */ var _TelemetryClientLoggerCategory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./TelemetryClientLoggerCategory */ "../../core/telemetry/lib/esm/TelemetryClientLoggerCategory.js");
288133
- /*---------------------------------------------------------------------------------------------
288134
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
288135
- * See LICENSE.md in the project root for license terms and full copyright notice.
288136
- *--------------------------------------------------------------------------------------------*/
288137
- /** @packageDocumentation
288138
- * @module Telemetry
288139
- */
288140
-
288141
-
288142
- /**
288143
- * @alpha
288144
- * Represents a particular occurrence of an event that can be tracked through various telemetry services
288145
- */
288146
- class TelemetryEvent {
288147
- constructor(
288148
- /** Human-readable name for the event being tracked */
288149
- eventName,
288150
- /**
288151
- * Optional Guid that can be used to more accurately identify the telemetry event.
288152
- * This field is required when posting a telemetry event as feature usage to ULAS.
288153
- */
288154
- eventId,
288155
- /** iModel parent iTwin id */
288156
- iTwinId, iModelId, changeSetId, time,
288157
- /** Custom properties */
288158
- additionalProperties = {}) {
288159
- this.eventName = eventName;
288160
- this.eventId = eventId;
288161
- this.iTwinId = iTwinId;
288162
- this.iModelId = iModelId;
288163
- this.changeSetId = changeSetId;
288164
- this.time = time;
288165
- this.additionalProperties = additionalProperties;
288166
- }
288167
- /**
288168
- * Returns all properties as a new object
288169
- */
288170
- getProperties() {
288171
- const properties = {
288172
- eventName: this.eventName,
288173
- eventId: this.eventId,
288174
- iTwinId: this.iTwinId,
288175
- iModelId: this.iModelId,
288176
- changeSetId: this.changeSetId,
288177
- time: this.time,
288178
- additionalProperties: this.additionalProperties,
288179
- };
288180
- return properties;
288181
- }
288182
- }
288183
- /** @alpha */
288184
- class TelemetryManager {
288185
- constructor(...clients) {
288186
- this._clients = new Set(clients);
288187
- }
288188
- async postTelemetry(requestContext, telemetryEvent) {
288189
- const postPerClient = async (subClient) => {
288190
- try {
288191
- await subClient.postTelemetry(requestContext, telemetryEvent);
288192
- }
288193
- catch (err) {
288194
- _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logError(_TelemetryClientLoggerCategory__WEBPACK_IMPORTED_MODULE_1__.TelemetryClientLoggerCategory.Telemetry, `Failed to post telemetry via subclient`, () => _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.BentleyError.getErrorProps(err));
288195
- }
288196
- };
288197
- const subClientPromises = [];
288198
- for (const subClient of this._clients) {
288199
- subClientPromises.push(postPerClient(subClient));
288200
- }
288201
- await Promise.all(subClientPromises);
288202
- }
288203
- addClient(client) {
288204
- this._clients.add(client);
288205
- }
288206
- hasClient(client) {
288207
- return this._clients.has(client);
288208
- }
288209
- }
288118
+ /*---------------------------------------------------------------------------------------------
288119
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
288120
+ * See LICENSE.md in the project root for license terms and full copyright notice.
288121
+ *--------------------------------------------------------------------------------------------*/
288122
+ /** @packageDocumentation
288123
+ * @module Telemetry
288124
+ */
288125
+
288126
+
288127
+ /**
288128
+ * @alpha
288129
+ * Represents a particular occurrence of an event that can be tracked through various telemetry services
288130
+ */
288131
+ class TelemetryEvent {
288132
+ constructor(
288133
+ /** Human-readable name for the event being tracked */
288134
+ eventName,
288135
+ /**
288136
+ * Optional Guid that can be used to more accurately identify the telemetry event.
288137
+ * This field is required when posting a telemetry event as feature usage to ULAS.
288138
+ */
288139
+ eventId,
288140
+ /** iModel parent iTwin id */
288141
+ iTwinId, iModelId, changeSetId, time,
288142
+ /** Custom properties */
288143
+ additionalProperties = {}) {
288144
+ this.eventName = eventName;
288145
+ this.eventId = eventId;
288146
+ this.iTwinId = iTwinId;
288147
+ this.iModelId = iModelId;
288148
+ this.changeSetId = changeSetId;
288149
+ this.time = time;
288150
+ this.additionalProperties = additionalProperties;
288151
+ }
288152
+ /**
288153
+ * Returns all properties as a new object
288154
+ */
288155
+ getProperties() {
288156
+ const properties = {
288157
+ eventName: this.eventName,
288158
+ eventId: this.eventId,
288159
+ iTwinId: this.iTwinId,
288160
+ iModelId: this.iModelId,
288161
+ changeSetId: this.changeSetId,
288162
+ time: this.time,
288163
+ additionalProperties: this.additionalProperties,
288164
+ };
288165
+ return properties;
288166
+ }
288167
+ }
288168
+ /** @alpha */
288169
+ class TelemetryManager {
288170
+ constructor(...clients) {
288171
+ this._clients = new Set(clients);
288172
+ }
288173
+ async postTelemetry(requestContext, telemetryEvent) {
288174
+ const postPerClient = async (subClient) => {
288175
+ try {
288176
+ await subClient.postTelemetry(requestContext, telemetryEvent);
288177
+ }
288178
+ catch (err) {
288179
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logError(_TelemetryClientLoggerCategory__WEBPACK_IMPORTED_MODULE_1__.TelemetryClientLoggerCategory.Telemetry, `Failed to post telemetry via subclient`, () => _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.BentleyError.getErrorProps(err));
288180
+ }
288181
+ };
288182
+ const subClientPromises = [];
288183
+ for (const subClient of this._clients) {
288184
+ subClientPromises.push(postPerClient(subClient));
288185
+ }
288186
+ await Promise.all(subClientPromises);
288187
+ }
288188
+ addClient(client) {
288189
+ this._clients.add(client);
288190
+ }
288191
+ hasClient(client) {
288192
+ return this._clients.has(client);
288193
+ }
288194
+ }
288210
288195
 
288211
288196
 
288212
288197
  /***/ }),
@@ -288222,23 +288207,23 @@ __webpack_require__.r(__webpack_exports__);
288222
288207
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
288223
288208
  /* harmony export */ "TelemetryClientLoggerCategory": () => (/* binding */ TelemetryClientLoggerCategory)
288224
288209
  /* harmony export */ });
288225
- /*---------------------------------------------------------------------------------------------
288226
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
288227
- * See LICENSE.md in the project root for license terms and full copyright notice.
288228
- *--------------------------------------------------------------------------------------------*/
288229
- /** @packageDocumentation
288230
- * @module Logging
288231
- */
288232
- /** Logger categories used by this package
288233
- * @note All logger categories in this package start with the `telemetry-client` prefix.
288234
- * @see [Logger]($bentley)
288235
- * @alpha
288236
- */
288237
- var TelemetryClientLoggerCategory;
288238
- (function (TelemetryClientLoggerCategory) {
288239
- /** The logger category used for Telemetry */
288240
- TelemetryClientLoggerCategory["Telemetry"] = "telemetry-client.Telemetry";
288241
- })(TelemetryClientLoggerCategory || (TelemetryClientLoggerCategory = {}));
288210
+ /*---------------------------------------------------------------------------------------------
288211
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
288212
+ * See LICENSE.md in the project root for license terms and full copyright notice.
288213
+ *--------------------------------------------------------------------------------------------*/
288214
+ /** @packageDocumentation
288215
+ * @module Logging
288216
+ */
288217
+ /** Logger categories used by this package
288218
+ * @note All logger categories in this package start with the `telemetry-client` prefix.
288219
+ * @see [Logger]($bentley)
288220
+ * @alpha
288221
+ */
288222
+ var TelemetryClientLoggerCategory;
288223
+ (function (TelemetryClientLoggerCategory) {
288224
+ /** The logger category used for Telemetry */
288225
+ TelemetryClientLoggerCategory["Telemetry"] = "telemetry-client.Telemetry";
288226
+ })(TelemetryClientLoggerCategory || (TelemetryClientLoggerCategory = {}));
288242
288227
 
288243
288228
 
288244
288229
  /***/ }),
@@ -288258,12 +288243,12 @@ __webpack_require__.r(__webpack_exports__);
288258
288243
  /* harmony export */ });
288259
288244
  /* harmony import */ var _TelemetryClient__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TelemetryClient */ "../../core/telemetry/lib/esm/TelemetryClient.js");
288260
288245
  /* harmony import */ var _TelemetryClientLoggerCategory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./TelemetryClientLoggerCategory */ "../../core/telemetry/lib/esm/TelemetryClientLoggerCategory.js");
288261
- /*---------------------------------------------------------------------------------------------
288262
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
288263
- * See LICENSE.md in the project root for license terms and full copyright notice.
288264
- *--------------------------------------------------------------------------------------------*/
288265
-
288266
-
288246
+ /*---------------------------------------------------------------------------------------------
288247
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
288248
+ * See LICENSE.md in the project root for license terms and full copyright notice.
288249
+ *--------------------------------------------------------------------------------------------*/
288250
+
288251
+
288267
288252
 
288268
288253
 
288269
288254
  /***/ }),
@@ -288283,364 +288268,364 @@ __webpack_require__.r(__webpack_exports__);
288283
288268
  /* harmony export */ });
288284
288269
  /* harmony import */ var _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @itwin/core-bentley */ "../../core/bentley/lib/esm/core-bentley.js");
288285
288270
  /* harmony import */ var _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./RenderCompatibility */ "../../core/webgl-compatibility/lib/esm/RenderCompatibility.js");
288286
- /*---------------------------------------------------------------------------------------------
288287
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
288288
- * See LICENSE.md in the project root for license terms and full copyright notice.
288289
- *--------------------------------------------------------------------------------------------*/
288290
- /** @packageDocumentation
288291
- * @module Compatibility
288292
- */
288293
-
288294
-
288295
- const knownExtensions = [
288296
- "WEBGL_draw_buffers",
288297
- "OES_element_index_uint",
288298
- "OES_texture_float",
288299
- "OES_texture_float_linear",
288300
- "OES_texture_half_float",
288301
- "OES_texture_half_float_linear",
288302
- "EXT_texture_filter_anisotropic",
288303
- "WEBGL_depth_texture",
288304
- "EXT_color_buffer_float",
288305
- "EXT_shader_texture_lod",
288306
- "EXT_frag_depth",
288307
- "ANGLE_instanced_arrays",
288308
- "OES_vertex_array_object",
288309
- "WEBGL_lose_context",
288310
- "EXT_disjoint_timer_query",
288311
- "EXT_disjoint_timer_query_webgl2",
288312
- "OES_standard_derivatives",
288313
- "EXT_float_blend",
288314
- ];
288315
- /** Describes the type of a render target. Used by Capabilities to represent maximum precision render target available on host system.
288316
- * @internal
288317
- */
288318
- var RenderType;
288319
- (function (RenderType) {
288320
- RenderType[RenderType["TextureUnsignedByte"] = 0] = "TextureUnsignedByte";
288321
- RenderType[RenderType["TextureHalfFloat"] = 1] = "TextureHalfFloat";
288322
- RenderType[RenderType["TextureFloat"] = 2] = "TextureFloat";
288323
- })(RenderType || (RenderType = {}));
288324
- /**
288325
- * Describes the type of a depth buffer. Used by Capabilities to represent maximum depth buffer precision available on host system.
288326
- * Note: the commented-out values are unimplemented but left in place for reference, in case desired for future implementation.
288327
- * @internal
288328
- */
288329
- var DepthType;
288330
- (function (DepthType) {
288331
- DepthType[DepthType["RenderBufferUnsignedShort16"] = 0] = "RenderBufferUnsignedShort16";
288332
- // TextureUnsignedShort16, // core to WebGL2; available to WebGL1 via WEBGL_depth_texture
288333
- // TextureUnsignedInt24, // core to WebGL2
288334
- DepthType[DepthType["TextureUnsignedInt24Stencil8"] = 1] = "TextureUnsignedInt24Stencil8";
288335
- DepthType[DepthType["TextureUnsignedInt32"] = 2] = "TextureUnsignedInt32";
288336
- // TextureFloat32, // core to WebGL2
288337
- // TextureFloat32Stencil8, // core to WeBGL2
288338
- })(DepthType || (DepthType = {}));
288339
- const maxTexSizeAllowed = 4096; // many devices and browsers have issues with source textures larger than this
288340
- // Regexes to match Intel UHD/HD 620/630 integrated GPUS that suffer from GraphicsDriverBugs.fragDepthDoesNotDisableEarlyZ.
288341
- const buggyIntelMatchers = [
288342
- // Original unmasked renderer string when workaround we implemented.
288343
- /ANGLE \(Intel\(R\) (U)?HD Graphics 6(2|3)0 Direct3D11/,
288344
- // New unmasked renderer string circa October 2021.
288345
- /ANGLE \(Intel, Intel\(R\) (U)?HD Graphics 6(2|3)0 Direct3D11/,
288346
- ];
288347
- // Regexes to match Mali GPUs known to suffer from GraphicsDriverBugs.msaaWillHang.
288348
- const buggyMaliMatchers = [
288349
- /Mali-G71/,
288350
- /Mali-G72/,
288351
- /Mali-G76/,
288352
- ];
288353
- // Regexes to match as many Intel integrated GPUs as possible.
288354
- // https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units
288355
- const integratedIntelGpuMatchers = [
288356
- /(U)?HD Graphics/,
288357
- /Iris/,
288358
- ];
288359
- function isIntegratedGraphics(args) {
288360
- if (args.unmaskedRenderer && args.unmaskedRenderer.includes("Intel") && integratedIntelGpuMatchers.some((x) => x.test(args.unmaskedRenderer)))
288361
- return true;
288362
- // NB: For now, we do not attempt to detect AMD integrated graphics.
288363
- // It appears that AMD integrated graphics are not usually paired with a graphics card so detecting integrated usage there is less important than Intel.
288364
- return false;
288365
- }
288366
- /** Describes the rendering capabilities of the host system.
288367
- * @internal
288368
- */
288369
- class Capabilities {
288370
- constructor() {
288371
- this._maxRenderType = RenderType.TextureUnsignedByte;
288372
- this._maxDepthType = DepthType.RenderBufferUnsignedShort16;
288373
- this._maxTextureSize = 0;
288374
- this._maxColorAttachments = 0;
288375
- this._maxDrawBuffers = 0;
288376
- this._maxFragTextureUnits = 0;
288377
- this._maxVertTextureUnits = 0;
288378
- this._maxVertAttribs = 0;
288379
- this._maxVertUniformVectors = 0;
288380
- this._maxVaryingVectors = 0;
288381
- this._maxFragUniformVectors = 0;
288382
- this._canRenderDepthWithoutColor = false;
288383
- this._maxAntialiasSamples = 1;
288384
- this._supportsCreateImageBitmap = false;
288385
- this._maxTexSizeAllow = maxTexSizeAllowed;
288386
- this._extensionMap = {}; // Use this map to store actual extension objects retrieved from GL.
288387
- this._presentFeatures = []; // List of features the system can support (not necessarily dependent on extensions)
288388
- this._isWebGL2 = false;
288389
- this._isMobile = false;
288390
- this._driverBugs = {};
288391
- }
288392
- get maxRenderType() { return this._maxRenderType; }
288393
- get maxDepthType() { return this._maxDepthType; }
288394
- get maxTextureSize() { return this._maxTextureSize; }
288395
- get maxTexSizeAllow() { return this._maxTexSizeAllow; }
288396
- get supportsCreateImageBitmap() { return this._supportsCreateImageBitmap; }
288397
- get maxColorAttachments() { return this._maxColorAttachments; }
288398
- get maxDrawBuffers() { return this._maxDrawBuffers; }
288399
- get maxFragTextureUnits() { return this._maxFragTextureUnits; }
288400
- get maxVertTextureUnits() { return this._maxVertTextureUnits; }
288401
- get maxVertAttribs() { return this._maxVertAttribs; }
288402
- get maxVertUniformVectors() { return this._maxVertUniformVectors; }
288403
- get maxVaryingVectors() { return this._maxVaryingVectors; }
288404
- get maxFragUniformVectors() { return this._maxFragUniformVectors; }
288405
- get maxAntialiasSamples() { return this._maxAntialiasSamples; }
288406
- get isWebGL2() { return this._isWebGL2; }
288407
- get driverBugs() { return this._driverBugs; }
288408
- /** These getters check for existence of extension objects to determine availability of features. In WebGL2, could just return true for some. */
288409
- get supportsNonPowerOf2Textures() { return false; }
288410
- get supportsDrawBuffers() { return this._isWebGL2 || this.queryExtensionObject("WEBGL_draw_buffers") !== undefined; }
288411
- get supportsInstancing() { return this._isWebGL2 || this.queryExtensionObject("ANGLE_instanced_arrays") !== undefined; }
288412
- get supports32BitElementIndex() { return this._isWebGL2 || this.queryExtensionObject("OES_element_index_uint") !== undefined; }
288413
- get supportsTextureFloat() { return this._isWebGL2 || this.queryExtensionObject("OES_texture_float") !== undefined; }
288414
- get supportsTextureFloatLinear() { return this._isWebGL2 || this.queryExtensionObject("OES_texture_float_linear") !== undefined; }
288415
- get supportsTextureHalfFloat() { return this._isWebGL2 || this.queryExtensionObject("OES_texture_half_float") !== undefined; }
288416
- get supportsTextureHalfFloatLinear() { return this._isWebGL2 || this.queryExtensionObject("OES_texture_half_float_linear") !== undefined; }
288417
- get supportsTextureFilterAnisotropic() { return this.queryExtensionObject("EXT_texture_filter_anisotropic") !== undefined; }
288418
- get supportsShaderTextureLOD() { return this._isWebGL2 || this.queryExtensionObject("EXT_shader_texture_lod") !== undefined; }
288419
- get supportsVertexArrayObjects() { return this._isWebGL2 || this.queryExtensionObject("OES_vertex_array_object") !== undefined; }
288420
- get supportsFragDepth() { return this._isWebGL2 || this.queryExtensionObject("EXT_frag_depth") !== undefined; }
288421
- get supportsDisjointTimerQuery() { return (this._isWebGL2 && this.queryExtensionObject("EXT_disjoint_timer_query_webgl2") !== undefined) || this.queryExtensionObject("EXT_disjoint_timer_query") !== undefined; }
288422
- get supportsStandardDerivatives() { return this._isWebGL2 || this.queryExtensionObject("OES_standard_derivatives") !== undefined; }
288423
- get supportsMRTTransparency() { return this.maxColorAttachments >= 2; }
288424
- get supportsMRTPickShaders() { return this.maxColorAttachments >= 3; }
288425
- get canRenderDepthWithoutColor() { return this._canRenderDepthWithoutColor; }
288426
- get supportsShadowMaps() {
288427
- return this.supportsTextureFloat || this.supportsTextureHalfFloat;
288428
- }
288429
- get supportsAntiAliasing() { return this._isWebGL2 && this.maxAntialiasSamples > 1; }
288430
- get isMobile() { return this._isMobile; }
288431
- findExtension(name) {
288432
- const ext = this._extensionMap[name];
288433
- return null !== ext ? ext : undefined;
288434
- }
288435
- /** Queries an extension object if available. This is necessary for other parts of the system to access some constants within extensions. */
288436
- queryExtensionObject(ext) {
288437
- return this.findExtension(ext);
288438
- }
288439
- get _hasRequiredTextureUnits() { return this.maxFragTextureUnits >= 4 && this.maxVertTextureUnits >= 5; }
288440
- /** Return an array containing any features not supported by the system as compared to the input array. */
288441
- _findMissingFeatures(featuresToSeek) {
288442
- const missingFeatures = [];
288443
- for (const featureName of featuresToSeek) {
288444
- if (-1 === this._presentFeatures.indexOf(featureName))
288445
- missingFeatures.push(featureName);
288446
- }
288447
- return missingFeatures;
288448
- }
288449
- /** Populate and return an array containing features that this system supports. */
288450
- _gatherFeatures() {
288451
- const features = [];
288452
- // simply check for presence of various extensions if that gives enough information
288453
- if (this._isWebGL2 || this._extensionMap["OES_element_index_uint"] !== undefined)
288454
- features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.UintElementIndex);
288455
- if (this._isWebGL2 || this._extensionMap["ANGLE_instanced_arrays"] !== undefined)
288456
- features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.Instancing);
288457
- if (this.supportsMRTTransparency)
288458
- features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.MrtTransparency);
288459
- if (this.supportsMRTPickShaders)
288460
- features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.MrtPick);
288461
- if (this.supportsShadowMaps)
288462
- features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.ShadowMaps);
288463
- if (this._hasRequiredTextureUnits)
288464
- features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.MinimalTextureUnits);
288465
- if (this.supportsFragDepth)
288466
- features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.FragDepth);
288467
- if (this.supportsStandardDerivatives)
288468
- features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.StandardDerivatives);
288469
- if (this.supportsAntiAliasing)
288470
- features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.AntiAliasing);
288471
- if (DepthType.TextureUnsignedInt24Stencil8 === this._maxDepthType)
288472
- features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.DepthTexture);
288473
- // check if at least half-float rendering is available based on maximum discovered renderable target
288474
- if (RenderType.TextureUnsignedByte !== this._maxRenderType)
288475
- features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.FloatRendering);
288476
- return features;
288477
- }
288478
- /** Retrieve compatibility status based on presence of various features. */
288479
- _getCompatibilityStatus(missingRequiredFeatures, missingOptionalFeatures) {
288480
- let status = _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLRenderCompatibilityStatus.AllOkay;
288481
- if (missingOptionalFeatures.length > 0)
288482
- status = _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLRenderCompatibilityStatus.MissingOptionalFeatures;
288483
- if (missingRequiredFeatures.length > 0)
288484
- status = _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLRenderCompatibilityStatus.MissingRequiredFeatures;
288485
- return status;
288486
- }
288487
- /** Initializes the capabilities based on a GL context. Must be called first. */
288488
- init(gl, disabledExtensions) {
288489
- const gl2 = !(gl instanceof WebGLRenderingContext) ? gl : undefined;
288490
- this._isWebGL2 = undefined !== gl2;
288491
- this._isMobile = _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.ProcessDetector.isMobileBrowser;
288492
- const debugInfo = gl.getExtension("WEBGL_debug_renderer_info");
288493
- const unmaskedRenderer = debugInfo !== null ? gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL) : undefined;
288494
- const unmaskedVendor = debugInfo !== null ? gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL) : undefined;
288495
- this._driverBugs = {};
288496
- if (unmaskedRenderer && buggyIntelMatchers.some((x) => x.test(unmaskedRenderer)))
288497
- this._driverBugs.fragDepthDoesNotDisableEarlyZ = true;
288498
- if (unmaskedRenderer && buggyMaliMatchers.some((x) => x.test(unmaskedRenderer)))
288499
- this._driverBugs.msaaWillHang = true;
288500
- this._maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);
288501
- this._supportsCreateImageBitmap = typeof createImageBitmap === "function" && _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.ProcessDetector.isChromium && !_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.ProcessDetector.isIOSBrowser;
288502
- this._maxTexSizeAllow = Math.min(this._maxTextureSize, maxTexSizeAllowed);
288503
- this._maxFragTextureUnits = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);
288504
- this._maxVertTextureUnits = gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS);
288505
- this._maxVertAttribs = gl.getParameter(gl.MAX_VERTEX_ATTRIBS);
288506
- this._maxVertUniformVectors = gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);
288507
- this._maxVaryingVectors = gl.getParameter(gl.MAX_VARYING_VECTORS);
288508
- this._maxFragUniformVectors = gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS);
288509
- this._maxAntialiasSamples = this._driverBugs.msaaWillHang ? 1 : (this._isWebGL2 && undefined !== gl2 ? gl.getParameter(gl2.MAX_SAMPLES) : 1);
288510
- const extensions = gl.getSupportedExtensions(); // This just retrieves a list of available extensions (not necessarily enabled).
288511
- if (extensions) {
288512
- for (const extStr of extensions) {
288513
- const ext = extStr;
288514
- if (-1 === knownExtensions.indexOf(ext))
288515
- continue;
288516
- else if (undefined !== disabledExtensions && -1 !== disabledExtensions.indexOf(ext))
288517
- continue;
288518
- const extObj = gl.getExtension(ext); // This call enables the extension and returns a WebGLObject containing extension instance.
288519
- if (null !== extObj)
288520
- this._extensionMap[ext] = extObj;
288521
- }
288522
- }
288523
- if (this._isWebGL2 && undefined !== gl2) {
288524
- this._maxColorAttachments = gl.getParameter(gl2.MAX_COLOR_ATTACHMENTS);
288525
- this._maxDrawBuffers = gl.getParameter(gl2.MAX_DRAW_BUFFERS);
288526
- }
288527
- else {
288528
- const dbExt = this.queryExtensionObject("WEBGL_draw_buffers");
288529
- this._maxColorAttachments = dbExt !== undefined ? gl.getParameter(dbExt.MAX_COLOR_ATTACHMENTS_WEBGL) : 1;
288530
- this._maxDrawBuffers = dbExt !== undefined ? gl.getParameter(dbExt.MAX_DRAW_BUFFERS_WEBGL) : 1;
288531
- }
288532
- // Determine the maximum color-renderable attachment type.
288533
- const allowFloatRender = (undefined === disabledExtensions || -1 === disabledExtensions.indexOf("OES_texture_float"))
288534
- // iOS>=15 allows full-float rendering. However, it does not actually work on non-M1 devices.
288535
- // Because of this, for now we disallow full float rendering on iOS devices.
288536
- // ###TODO: Re-assess this after future iOS updates.
288537
- && !_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.ProcessDetector.isIOSBrowser
288538
- // Samsung Galaxy Note 8 exhibits same issue as described above for iOS >= 15.
288539
- // It uses specifically Mali-G71 MP20 but reports its renderer as follows.
288540
- // Samsung Galaxy A50 and S9 exhibits same issue; they use Mali-G72.
288541
- // HUAWEI P30 exhibits same issue; it uses Mali-G76.
288542
- && unmaskedRenderer !== "Mali-G71" && unmaskedRenderer !== "Mali-G72" && unmaskedRenderer !== "Mali-G76";
288543
- if (allowFloatRender && undefined !== this.queryExtensionObject("EXT_float_blend") && this.isTextureRenderable(gl, gl.FLOAT)) {
288544
- this._maxRenderType = RenderType.TextureFloat;
288545
- }
288546
- else if (this.isWebGL2) {
288547
- this._maxRenderType = (this.isTextureRenderable(gl, gl.HALF_FLOAT)) ? RenderType.TextureHalfFloat : RenderType.TextureUnsignedByte;
288548
- }
288549
- else {
288550
- const hfExt = this.queryExtensionObject("OES_texture_half_float");
288551
- this._maxRenderType = (hfExt !== undefined && this.isTextureRenderable(gl, hfExt.HALF_FLOAT_OES)) ? RenderType.TextureHalfFloat : RenderType.TextureUnsignedByte;
288552
- }
288553
- // Determine the maximum depth attachment type.
288554
- // this._maxDepthType = this.queryExtensionObject("WEBGL_depth_texture") !== undefined ? DepthType.TextureUnsignedInt32 : DepthType.RenderBufferUnsignedShort16;
288555
- this._maxDepthType = this._isWebGL2 || this.queryExtensionObject("WEBGL_depth_texture") !== undefined ? DepthType.TextureUnsignedInt24Stencil8 : DepthType.RenderBufferUnsignedShort16;
288556
- this._canRenderDepthWithoutColor = this._maxDepthType === DepthType.TextureUnsignedInt24Stencil8 ? this.isDepthRenderableWithoutColor(gl) : false;
288557
- this._presentFeatures = this._gatherFeatures();
288558
- const missingRequiredFeatures = this._findMissingFeatures(Capabilities.requiredFeatures);
288559
- const missingOptionalFeatures = this._findMissingFeatures(Capabilities.optionalFeatures);
288560
- return {
288561
- status: this._getCompatibilityStatus(missingRequiredFeatures, missingOptionalFeatures),
288562
- missingRequiredFeatures,
288563
- missingOptionalFeatures,
288564
- unmaskedRenderer,
288565
- unmaskedVendor,
288566
- usingIntegratedGraphics: isIntegratedGraphics({ unmaskedVendor, unmaskedRenderer }),
288567
- driverBugs: { ...this._driverBugs },
288568
- userAgent: navigator.userAgent,
288569
- createdContext: gl,
288570
- };
288571
- }
288572
- static create(gl, disabledExtensions) {
288573
- const caps = new Capabilities();
288574
- const compatibility = caps.init(gl, disabledExtensions);
288575
- if (_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLRenderCompatibilityStatus.CannotCreateContext === compatibility.status || _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLRenderCompatibilityStatus.MissingRequiredFeatures === compatibility.status)
288576
- return undefined;
288577
- return caps;
288578
- }
288579
- /** Determines if a particular texture type is color-renderable on the host system. */
288580
- isTextureRenderable(gl, texType) {
288581
- const tex = gl.createTexture();
288582
- gl.bindTexture(gl.TEXTURE_2D, tex);
288583
- if (this.isWebGL2) {
288584
- if (gl.FLOAT === texType)
288585
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA32F, 1, 1, 0, gl.RGBA, texType, null);
288586
- else
288587
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA16F, 1, 1, 0, gl.RGBA, texType, null);
288588
- }
288589
- else
288590
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, texType, null);
288591
- const fb = gl.createFramebuffer();
288592
- gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
288593
- gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);
288594
- const fbStatus = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
288595
- gl.bindFramebuffer(gl.FRAMEBUFFER, null);
288596
- gl.deleteFramebuffer(fb);
288597
- gl.deleteTexture(tex);
288598
- gl.getError(); // clear any errors
288599
- return fbStatus === gl.FRAMEBUFFER_COMPLETE;
288600
- }
288601
- /** Determines if depth textures can be rendered without also having a color attachment bound on the host system. */
288602
- isDepthRenderableWithoutColor(gl) {
288603
- const dtExt = this.queryExtensionObject("WEBGL_depth_texture");
288604
- if (dtExt === undefined)
288605
- return false;
288606
- const tex = gl.createTexture();
288607
- gl.bindTexture(gl.TEXTURE_2D, tex);
288608
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.DEPTH_STENCIL, 1, 1, 0, gl.DEPTH_STENCIL, dtExt.UNSIGNED_INT_24_8_WEBGL, null);
288609
- const fb = gl.createFramebuffer();
288610
- gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
288611
- gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.TEXTURE_2D, tex, 0);
288612
- const fbStatus = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
288613
- gl.bindFramebuffer(gl.FRAMEBUFFER, null);
288614
- gl.deleteFramebuffer(fb);
288615
- gl.deleteTexture(tex);
288616
- gl.getError(); // clear any errors
288617
- return fbStatus === gl.FRAMEBUFFER_COMPLETE;
288618
- }
288619
- setMaxAnisotropy(desiredMax, gl) {
288620
- const ext = this.queryExtensionObject("EXT_texture_filter_anisotropic");
288621
- if (undefined === ext)
288622
- return;
288623
- if (undefined === this._maxAnisotropy)
288624
- this._maxAnisotropy = gl.getParameter(ext.MAX_TEXTURE_MAX_ANISOTROPY_EXT);
288625
- const max = (undefined !== desiredMax) ? Math.min(desiredMax, this._maxAnisotropy) : this._maxAnisotropy;
288626
- gl.texParameterf(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, max);
288627
- }
288628
- }
288629
- Capabilities.optionalFeatures = [
288630
- _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.MrtTransparency,
288631
- _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.MrtPick,
288632
- _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.DepthTexture,
288633
- _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.FloatRendering,
288634
- _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.Instancing,
288635
- _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.ShadowMaps,
288636
- _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.FragDepth,
288637
- _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.StandardDerivatives,
288638
- _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.AntiAliasing,
288639
- ];
288640
- Capabilities.requiredFeatures = [
288641
- _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.UintElementIndex,
288642
- _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.MinimalTextureUnits,
288643
- ];
288271
+ /*---------------------------------------------------------------------------------------------
288272
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
288273
+ * See LICENSE.md in the project root for license terms and full copyright notice.
288274
+ *--------------------------------------------------------------------------------------------*/
288275
+ /** @packageDocumentation
288276
+ * @module Compatibility
288277
+ */
288278
+
288279
+
288280
+ const knownExtensions = [
288281
+ "WEBGL_draw_buffers",
288282
+ "OES_element_index_uint",
288283
+ "OES_texture_float",
288284
+ "OES_texture_float_linear",
288285
+ "OES_texture_half_float",
288286
+ "OES_texture_half_float_linear",
288287
+ "EXT_texture_filter_anisotropic",
288288
+ "WEBGL_depth_texture",
288289
+ "EXT_color_buffer_float",
288290
+ "EXT_shader_texture_lod",
288291
+ "EXT_frag_depth",
288292
+ "ANGLE_instanced_arrays",
288293
+ "OES_vertex_array_object",
288294
+ "WEBGL_lose_context",
288295
+ "EXT_disjoint_timer_query",
288296
+ "EXT_disjoint_timer_query_webgl2",
288297
+ "OES_standard_derivatives",
288298
+ "EXT_float_blend",
288299
+ ];
288300
+ /** Describes the type of a render target. Used by Capabilities to represent maximum precision render target available on host system.
288301
+ * @internal
288302
+ */
288303
+ var RenderType;
288304
+ (function (RenderType) {
288305
+ RenderType[RenderType["TextureUnsignedByte"] = 0] = "TextureUnsignedByte";
288306
+ RenderType[RenderType["TextureHalfFloat"] = 1] = "TextureHalfFloat";
288307
+ RenderType[RenderType["TextureFloat"] = 2] = "TextureFloat";
288308
+ })(RenderType || (RenderType = {}));
288309
+ /**
288310
+ * Describes the type of a depth buffer. Used by Capabilities to represent maximum depth buffer precision available on host system.
288311
+ * Note: the commented-out values are unimplemented but left in place for reference, in case desired for future implementation.
288312
+ * @internal
288313
+ */
288314
+ var DepthType;
288315
+ (function (DepthType) {
288316
+ DepthType[DepthType["RenderBufferUnsignedShort16"] = 0] = "RenderBufferUnsignedShort16";
288317
+ // TextureUnsignedShort16, // core to WebGL2; available to WebGL1 via WEBGL_depth_texture
288318
+ // TextureUnsignedInt24, // core to WebGL2
288319
+ DepthType[DepthType["TextureUnsignedInt24Stencil8"] = 1] = "TextureUnsignedInt24Stencil8";
288320
+ DepthType[DepthType["TextureUnsignedInt32"] = 2] = "TextureUnsignedInt32";
288321
+ // TextureFloat32, // core to WebGL2
288322
+ // TextureFloat32Stencil8, // core to WeBGL2
288323
+ })(DepthType || (DepthType = {}));
288324
+ const maxTexSizeAllowed = 4096; // many devices and browsers have issues with source textures larger than this
288325
+ // Regexes to match Intel UHD/HD 620/630 integrated GPUS that suffer from GraphicsDriverBugs.fragDepthDoesNotDisableEarlyZ.
288326
+ const buggyIntelMatchers = [
288327
+ // Original unmasked renderer string when workaround we implemented.
288328
+ /ANGLE \(Intel\(R\) (U)?HD Graphics 6(2|3)0 Direct3D11/,
288329
+ // New unmasked renderer string circa October 2021.
288330
+ /ANGLE \(Intel, Intel\(R\) (U)?HD Graphics 6(2|3)0 Direct3D11/,
288331
+ ];
288332
+ // Regexes to match Mali GPUs known to suffer from GraphicsDriverBugs.msaaWillHang.
288333
+ const buggyMaliMatchers = [
288334
+ /Mali-G71/,
288335
+ /Mali-G72/,
288336
+ /Mali-G76/,
288337
+ ];
288338
+ // Regexes to match as many Intel integrated GPUs as possible.
288339
+ // https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units
288340
+ const integratedIntelGpuMatchers = [
288341
+ /(U)?HD Graphics/,
288342
+ /Iris/,
288343
+ ];
288344
+ function isIntegratedGraphics(args) {
288345
+ if (args.unmaskedRenderer && args.unmaskedRenderer.includes("Intel") && integratedIntelGpuMatchers.some((x) => x.test(args.unmaskedRenderer)))
288346
+ return true;
288347
+ // NB: For now, we do not attempt to detect AMD integrated graphics.
288348
+ // It appears that AMD integrated graphics are not usually paired with a graphics card so detecting integrated usage there is less important than Intel.
288349
+ return false;
288350
+ }
288351
+ /** Describes the rendering capabilities of the host system.
288352
+ * @internal
288353
+ */
288354
+ class Capabilities {
288355
+ constructor() {
288356
+ this._maxRenderType = RenderType.TextureUnsignedByte;
288357
+ this._maxDepthType = DepthType.RenderBufferUnsignedShort16;
288358
+ this._maxTextureSize = 0;
288359
+ this._maxColorAttachments = 0;
288360
+ this._maxDrawBuffers = 0;
288361
+ this._maxFragTextureUnits = 0;
288362
+ this._maxVertTextureUnits = 0;
288363
+ this._maxVertAttribs = 0;
288364
+ this._maxVertUniformVectors = 0;
288365
+ this._maxVaryingVectors = 0;
288366
+ this._maxFragUniformVectors = 0;
288367
+ this._canRenderDepthWithoutColor = false;
288368
+ this._maxAntialiasSamples = 1;
288369
+ this._supportsCreateImageBitmap = false;
288370
+ this._maxTexSizeAllow = maxTexSizeAllowed;
288371
+ this._extensionMap = {}; // Use this map to store actual extension objects retrieved from GL.
288372
+ this._presentFeatures = []; // List of features the system can support (not necessarily dependent on extensions)
288373
+ this._isWebGL2 = false;
288374
+ this._isMobile = false;
288375
+ this._driverBugs = {};
288376
+ }
288377
+ get maxRenderType() { return this._maxRenderType; }
288378
+ get maxDepthType() { return this._maxDepthType; }
288379
+ get maxTextureSize() { return this._maxTextureSize; }
288380
+ get maxTexSizeAllow() { return this._maxTexSizeAllow; }
288381
+ get supportsCreateImageBitmap() { return this._supportsCreateImageBitmap; }
288382
+ get maxColorAttachments() { return this._maxColorAttachments; }
288383
+ get maxDrawBuffers() { return this._maxDrawBuffers; }
288384
+ get maxFragTextureUnits() { return this._maxFragTextureUnits; }
288385
+ get maxVertTextureUnits() { return this._maxVertTextureUnits; }
288386
+ get maxVertAttribs() { return this._maxVertAttribs; }
288387
+ get maxVertUniformVectors() { return this._maxVertUniformVectors; }
288388
+ get maxVaryingVectors() { return this._maxVaryingVectors; }
288389
+ get maxFragUniformVectors() { return this._maxFragUniformVectors; }
288390
+ get maxAntialiasSamples() { return this._maxAntialiasSamples; }
288391
+ get isWebGL2() { return this._isWebGL2; }
288392
+ get driverBugs() { return this._driverBugs; }
288393
+ /** These getters check for existence of extension objects to determine availability of features. In WebGL2, could just return true for some. */
288394
+ get supportsNonPowerOf2Textures() { return false; }
288395
+ get supportsDrawBuffers() { return this._isWebGL2 || this.queryExtensionObject("WEBGL_draw_buffers") !== undefined; }
288396
+ get supportsInstancing() { return this._isWebGL2 || this.queryExtensionObject("ANGLE_instanced_arrays") !== undefined; }
288397
+ get supports32BitElementIndex() { return this._isWebGL2 || this.queryExtensionObject("OES_element_index_uint") !== undefined; }
288398
+ get supportsTextureFloat() { return this._isWebGL2 || this.queryExtensionObject("OES_texture_float") !== undefined; }
288399
+ get supportsTextureFloatLinear() { return this._isWebGL2 || this.queryExtensionObject("OES_texture_float_linear") !== undefined; }
288400
+ get supportsTextureHalfFloat() { return this._isWebGL2 || this.queryExtensionObject("OES_texture_half_float") !== undefined; }
288401
+ get supportsTextureHalfFloatLinear() { return this._isWebGL2 || this.queryExtensionObject("OES_texture_half_float_linear") !== undefined; }
288402
+ get supportsTextureFilterAnisotropic() { return this.queryExtensionObject("EXT_texture_filter_anisotropic") !== undefined; }
288403
+ get supportsShaderTextureLOD() { return this._isWebGL2 || this.queryExtensionObject("EXT_shader_texture_lod") !== undefined; }
288404
+ get supportsVertexArrayObjects() { return this._isWebGL2 || this.queryExtensionObject("OES_vertex_array_object") !== undefined; }
288405
+ get supportsFragDepth() { return this._isWebGL2 || this.queryExtensionObject("EXT_frag_depth") !== undefined; }
288406
+ get supportsDisjointTimerQuery() { return (this._isWebGL2 && this.queryExtensionObject("EXT_disjoint_timer_query_webgl2") !== undefined) || this.queryExtensionObject("EXT_disjoint_timer_query") !== undefined; }
288407
+ get supportsStandardDerivatives() { return this._isWebGL2 || this.queryExtensionObject("OES_standard_derivatives") !== undefined; }
288408
+ get supportsMRTTransparency() { return this.maxColorAttachments >= 2; }
288409
+ get supportsMRTPickShaders() { return this.maxColorAttachments >= 3; }
288410
+ get canRenderDepthWithoutColor() { return this._canRenderDepthWithoutColor; }
288411
+ get supportsShadowMaps() {
288412
+ return this.supportsTextureFloat || this.supportsTextureHalfFloat;
288413
+ }
288414
+ get supportsAntiAliasing() { return this._isWebGL2 && this.maxAntialiasSamples > 1; }
288415
+ get isMobile() { return this._isMobile; }
288416
+ findExtension(name) {
288417
+ const ext = this._extensionMap[name];
288418
+ return null !== ext ? ext : undefined;
288419
+ }
288420
+ /** Queries an extension object if available. This is necessary for other parts of the system to access some constants within extensions. */
288421
+ queryExtensionObject(ext) {
288422
+ return this.findExtension(ext);
288423
+ }
288424
+ get _hasRequiredTextureUnits() { return this.maxFragTextureUnits >= 4 && this.maxVertTextureUnits >= 5; }
288425
+ /** Return an array containing any features not supported by the system as compared to the input array. */
288426
+ _findMissingFeatures(featuresToSeek) {
288427
+ const missingFeatures = [];
288428
+ for (const featureName of featuresToSeek) {
288429
+ if (-1 === this._presentFeatures.indexOf(featureName))
288430
+ missingFeatures.push(featureName);
288431
+ }
288432
+ return missingFeatures;
288433
+ }
288434
+ /** Populate and return an array containing features that this system supports. */
288435
+ _gatherFeatures() {
288436
+ const features = [];
288437
+ // simply check for presence of various extensions if that gives enough information
288438
+ if (this._isWebGL2 || this._extensionMap["OES_element_index_uint"] !== undefined)
288439
+ features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.UintElementIndex);
288440
+ if (this._isWebGL2 || this._extensionMap["ANGLE_instanced_arrays"] !== undefined)
288441
+ features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.Instancing);
288442
+ if (this.supportsMRTTransparency)
288443
+ features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.MrtTransparency);
288444
+ if (this.supportsMRTPickShaders)
288445
+ features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.MrtPick);
288446
+ if (this.supportsShadowMaps)
288447
+ features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.ShadowMaps);
288448
+ if (this._hasRequiredTextureUnits)
288449
+ features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.MinimalTextureUnits);
288450
+ if (this.supportsFragDepth)
288451
+ features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.FragDepth);
288452
+ if (this.supportsStandardDerivatives)
288453
+ features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.StandardDerivatives);
288454
+ if (this.supportsAntiAliasing)
288455
+ features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.AntiAliasing);
288456
+ if (DepthType.TextureUnsignedInt24Stencil8 === this._maxDepthType)
288457
+ features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.DepthTexture);
288458
+ // check if at least half-float rendering is available based on maximum discovered renderable target
288459
+ if (RenderType.TextureUnsignedByte !== this._maxRenderType)
288460
+ features.push(_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.FloatRendering);
288461
+ return features;
288462
+ }
288463
+ /** Retrieve compatibility status based on presence of various features. */
288464
+ _getCompatibilityStatus(missingRequiredFeatures, missingOptionalFeatures) {
288465
+ let status = _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLRenderCompatibilityStatus.AllOkay;
288466
+ if (missingOptionalFeatures.length > 0)
288467
+ status = _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLRenderCompatibilityStatus.MissingOptionalFeatures;
288468
+ if (missingRequiredFeatures.length > 0)
288469
+ status = _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLRenderCompatibilityStatus.MissingRequiredFeatures;
288470
+ return status;
288471
+ }
288472
+ /** Initializes the capabilities based on a GL context. Must be called first. */
288473
+ init(gl, disabledExtensions) {
288474
+ const gl2 = !(gl instanceof WebGLRenderingContext) ? gl : undefined;
288475
+ this._isWebGL2 = undefined !== gl2;
288476
+ this._isMobile = _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.ProcessDetector.isMobileBrowser;
288477
+ const debugInfo = gl.getExtension("WEBGL_debug_renderer_info");
288478
+ const unmaskedRenderer = debugInfo !== null ? gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL) : undefined;
288479
+ const unmaskedVendor = debugInfo !== null ? gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL) : undefined;
288480
+ this._driverBugs = {};
288481
+ if (unmaskedRenderer && buggyIntelMatchers.some((x) => x.test(unmaskedRenderer)))
288482
+ this._driverBugs.fragDepthDoesNotDisableEarlyZ = true;
288483
+ if (unmaskedRenderer && buggyMaliMatchers.some((x) => x.test(unmaskedRenderer)))
288484
+ this._driverBugs.msaaWillHang = true;
288485
+ this._maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);
288486
+ this._supportsCreateImageBitmap = typeof createImageBitmap === "function" && _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.ProcessDetector.isChromium && !_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.ProcessDetector.isIOSBrowser;
288487
+ this._maxTexSizeAllow = Math.min(this._maxTextureSize, maxTexSizeAllowed);
288488
+ this._maxFragTextureUnits = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);
288489
+ this._maxVertTextureUnits = gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS);
288490
+ this._maxVertAttribs = gl.getParameter(gl.MAX_VERTEX_ATTRIBS);
288491
+ this._maxVertUniformVectors = gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);
288492
+ this._maxVaryingVectors = gl.getParameter(gl.MAX_VARYING_VECTORS);
288493
+ this._maxFragUniformVectors = gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS);
288494
+ this._maxAntialiasSamples = this._driverBugs.msaaWillHang ? 1 : (this._isWebGL2 && undefined !== gl2 ? gl.getParameter(gl2.MAX_SAMPLES) : 1);
288495
+ const extensions = gl.getSupportedExtensions(); // This just retrieves a list of available extensions (not necessarily enabled).
288496
+ if (extensions) {
288497
+ for (const extStr of extensions) {
288498
+ const ext = extStr;
288499
+ if (-1 === knownExtensions.indexOf(ext))
288500
+ continue;
288501
+ else if (undefined !== disabledExtensions && -1 !== disabledExtensions.indexOf(ext))
288502
+ continue;
288503
+ const extObj = gl.getExtension(ext); // This call enables the extension and returns a WebGLObject containing extension instance.
288504
+ if (null !== extObj)
288505
+ this._extensionMap[ext] = extObj;
288506
+ }
288507
+ }
288508
+ if (this._isWebGL2 && undefined !== gl2) {
288509
+ this._maxColorAttachments = gl.getParameter(gl2.MAX_COLOR_ATTACHMENTS);
288510
+ this._maxDrawBuffers = gl.getParameter(gl2.MAX_DRAW_BUFFERS);
288511
+ }
288512
+ else {
288513
+ const dbExt = this.queryExtensionObject("WEBGL_draw_buffers");
288514
+ this._maxColorAttachments = dbExt !== undefined ? gl.getParameter(dbExt.MAX_COLOR_ATTACHMENTS_WEBGL) : 1;
288515
+ this._maxDrawBuffers = dbExt !== undefined ? gl.getParameter(dbExt.MAX_DRAW_BUFFERS_WEBGL) : 1;
288516
+ }
288517
+ // Determine the maximum color-renderable attachment type.
288518
+ const allowFloatRender = (undefined === disabledExtensions || -1 === disabledExtensions.indexOf("OES_texture_float"))
288519
+ // iOS>=15 allows full-float rendering. However, it does not actually work on non-M1 devices.
288520
+ // Because of this, for now we disallow full float rendering on iOS devices.
288521
+ // ###TODO: Re-assess this after future iOS updates.
288522
+ && !_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.ProcessDetector.isIOSBrowser
288523
+ // Samsung Galaxy Note 8 exhibits same issue as described above for iOS >= 15.
288524
+ // It uses specifically Mali-G71 MP20 but reports its renderer as follows.
288525
+ // Samsung Galaxy A50 and S9 exhibits same issue; they use Mali-G72.
288526
+ // HUAWEI P30 exhibits same issue; it uses Mali-G76.
288527
+ && unmaskedRenderer !== "Mali-G71" && unmaskedRenderer !== "Mali-G72" && unmaskedRenderer !== "Mali-G76";
288528
+ if (allowFloatRender && undefined !== this.queryExtensionObject("EXT_float_blend") && this.isTextureRenderable(gl, gl.FLOAT)) {
288529
+ this._maxRenderType = RenderType.TextureFloat;
288530
+ }
288531
+ else if (this.isWebGL2) {
288532
+ this._maxRenderType = (this.isTextureRenderable(gl, gl.HALF_FLOAT)) ? RenderType.TextureHalfFloat : RenderType.TextureUnsignedByte;
288533
+ }
288534
+ else {
288535
+ const hfExt = this.queryExtensionObject("OES_texture_half_float");
288536
+ this._maxRenderType = (hfExt !== undefined && this.isTextureRenderable(gl, hfExt.HALF_FLOAT_OES)) ? RenderType.TextureHalfFloat : RenderType.TextureUnsignedByte;
288537
+ }
288538
+ // Determine the maximum depth attachment type.
288539
+ // this._maxDepthType = this.queryExtensionObject("WEBGL_depth_texture") !== undefined ? DepthType.TextureUnsignedInt32 : DepthType.RenderBufferUnsignedShort16;
288540
+ this._maxDepthType = this._isWebGL2 || this.queryExtensionObject("WEBGL_depth_texture") !== undefined ? DepthType.TextureUnsignedInt24Stencil8 : DepthType.RenderBufferUnsignedShort16;
288541
+ this._canRenderDepthWithoutColor = this._maxDepthType === DepthType.TextureUnsignedInt24Stencil8 ? this.isDepthRenderableWithoutColor(gl) : false;
288542
+ this._presentFeatures = this._gatherFeatures();
288543
+ const missingRequiredFeatures = this._findMissingFeatures(Capabilities.requiredFeatures);
288544
+ const missingOptionalFeatures = this._findMissingFeatures(Capabilities.optionalFeatures);
288545
+ return {
288546
+ status: this._getCompatibilityStatus(missingRequiredFeatures, missingOptionalFeatures),
288547
+ missingRequiredFeatures,
288548
+ missingOptionalFeatures,
288549
+ unmaskedRenderer,
288550
+ unmaskedVendor,
288551
+ usingIntegratedGraphics: isIntegratedGraphics({ unmaskedVendor, unmaskedRenderer }),
288552
+ driverBugs: { ...this._driverBugs },
288553
+ userAgent: navigator.userAgent,
288554
+ createdContext: gl,
288555
+ };
288556
+ }
288557
+ static create(gl, disabledExtensions) {
288558
+ const caps = new Capabilities();
288559
+ const compatibility = caps.init(gl, disabledExtensions);
288560
+ if (_RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLRenderCompatibilityStatus.CannotCreateContext === compatibility.status || _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLRenderCompatibilityStatus.MissingRequiredFeatures === compatibility.status)
288561
+ return undefined;
288562
+ return caps;
288563
+ }
288564
+ /** Determines if a particular texture type is color-renderable on the host system. */
288565
+ isTextureRenderable(gl, texType) {
288566
+ const tex = gl.createTexture();
288567
+ gl.bindTexture(gl.TEXTURE_2D, tex);
288568
+ if (this.isWebGL2) {
288569
+ if (gl.FLOAT === texType)
288570
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA32F, 1, 1, 0, gl.RGBA, texType, null);
288571
+ else
288572
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA16F, 1, 1, 0, gl.RGBA, texType, null);
288573
+ }
288574
+ else
288575
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, texType, null);
288576
+ const fb = gl.createFramebuffer();
288577
+ gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
288578
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);
288579
+ const fbStatus = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
288580
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
288581
+ gl.deleteFramebuffer(fb);
288582
+ gl.deleteTexture(tex);
288583
+ gl.getError(); // clear any errors
288584
+ return fbStatus === gl.FRAMEBUFFER_COMPLETE;
288585
+ }
288586
+ /** Determines if depth textures can be rendered without also having a color attachment bound on the host system. */
288587
+ isDepthRenderableWithoutColor(gl) {
288588
+ const dtExt = this.queryExtensionObject("WEBGL_depth_texture");
288589
+ if (dtExt === undefined)
288590
+ return false;
288591
+ const tex = gl.createTexture();
288592
+ gl.bindTexture(gl.TEXTURE_2D, tex);
288593
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.DEPTH_STENCIL, 1, 1, 0, gl.DEPTH_STENCIL, dtExt.UNSIGNED_INT_24_8_WEBGL, null);
288594
+ const fb = gl.createFramebuffer();
288595
+ gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
288596
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.TEXTURE_2D, tex, 0);
288597
+ const fbStatus = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
288598
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
288599
+ gl.deleteFramebuffer(fb);
288600
+ gl.deleteTexture(tex);
288601
+ gl.getError(); // clear any errors
288602
+ return fbStatus === gl.FRAMEBUFFER_COMPLETE;
288603
+ }
288604
+ setMaxAnisotropy(desiredMax, gl) {
288605
+ const ext = this.queryExtensionObject("EXT_texture_filter_anisotropic");
288606
+ if (undefined === ext)
288607
+ return;
288608
+ if (undefined === this._maxAnisotropy)
288609
+ this._maxAnisotropy = gl.getParameter(ext.MAX_TEXTURE_MAX_ANISOTROPY_EXT);
288610
+ const max = (undefined !== desiredMax) ? Math.min(desiredMax, this._maxAnisotropy) : this._maxAnisotropy;
288611
+ gl.texParameterf(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, max);
288612
+ }
288613
+ }
288614
+ Capabilities.optionalFeatures = [
288615
+ _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.MrtTransparency,
288616
+ _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.MrtPick,
288617
+ _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.DepthTexture,
288618
+ _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.FloatRendering,
288619
+ _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.Instancing,
288620
+ _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.ShadowMaps,
288621
+ _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.FragDepth,
288622
+ _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.StandardDerivatives,
288623
+ _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.AntiAliasing,
288624
+ ];
288625
+ Capabilities.requiredFeatures = [
288626
+ _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.UintElementIndex,
288627
+ _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__.WebGLFeature.MinimalTextureUnits,
288628
+ ];
288644
288629
 
288645
288630
 
288646
288631
  /***/ }),
@@ -288659,120 +288644,120 @@ __webpack_require__.r(__webpack_exports__);
288659
288644
  /* harmony export */ "queryRenderCompatibility": () => (/* binding */ queryRenderCompatibility)
288660
288645
  /* harmony export */ });
288661
288646
  /* harmony import */ var _Capabilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Capabilities */ "../../core/webgl-compatibility/lib/esm/Capabilities.js");
288662
- /*---------------------------------------------------------------------------------------------
288663
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
288664
- * See LICENSE.md in the project root for license terms and full copyright notice.
288665
- *--------------------------------------------------------------------------------------------*/
288666
- /** @packageDocumentation
288667
- * @module Compatibility
288668
- */
288669
-
288670
- /** Enumerates the required and optional WebGL features used by the [RenderSystem]($frontend).
288671
- * @public
288672
- */
288673
- var WebGLFeature;
288674
- (function (WebGLFeature) {
288675
- /** This feature allows transparent geometry to be rendered more efficiently, using 1 pass instead of 2. */
288676
- WebGLFeature["MrtTransparency"] = "mrt transparency";
288677
- /** This feature allows picking to occur more efficiently, using 1 pass instead of 3. */
288678
- WebGLFeature["MrtPick"] = "mrt pick";
288679
- /** This feature ensures large meshes (with more than 21,845 triangles) can be rendered. */
288680
- WebGLFeature["UintElementIndex"] = "uint element index";
288681
- /** This feature allows transparency to achieve the optimal quality. Without this feature, overlapping transparent geometry will "wash out" more easily. */
288682
- WebGLFeature["FloatRendering"] = "float rendering";
288683
- /** This feature allows for the display of non-3D classification data and solar shadows. */
288684
- WebGLFeature["DepthTexture"] = "depth texture";
288685
- /** This feature allows instancing of repeated geometry, which can reduce memory consumption. */
288686
- WebGLFeature["Instancing"] = "instancing";
288687
- /** This feature indicates that the system has enough texture units available for the shaders to run properly. */
288688
- WebGLFeature["MinimalTextureUnits"] = "minimal texture units";
288689
- /** Indicates that shadow maps are supported. Without this feature, shadows cannot be displayed. */
288690
- WebGLFeature["ShadowMaps"] = "shadow maps";
288691
- /** This feature allows a logarithmic depth buffer to be used. Without this feature, z-fighting will be much more likely to occur. */
288692
- WebGLFeature["FragDepth"] = "fragment depth";
288693
- /** This feature allows the renderer to achieve accurate contour lines for isoline and stepped delimiter modes of thematic display. */
288694
- WebGLFeature["StandardDerivatives"] = "standard derivatives";
288695
- /** This feature allows the renderer to smooth curved lines. */
288696
- WebGLFeature["AntiAliasing"] = "anti-aliasing";
288697
- })(WebGLFeature || (WebGLFeature = {}));
288698
- /** An enumeration that describes a general "compatibility rating" based on the contents of a [[WebGLRenderCompatibilityInfo]].
288699
- * @public
288700
- */
288701
- var WebGLRenderCompatibilityStatus;
288702
- (function (WebGLRenderCompatibilityStatus) {
288703
- /**
288704
- * Signifies that everything is ideal: context created successfully, all required and optional features are available,
288705
- * and browser did not signal a major performance caveat.
288706
- */
288707
- WebGLRenderCompatibilityStatus[WebGLRenderCompatibilityStatus["AllOkay"] = 0] = "AllOkay";
288708
- /**
288709
- * Signifies that the base requirements of compatibility are met but at least some optional features are missing.
288710
- * Consult the contents of [[WebGLRenderCompatibilityInfo.missingOptionalFeatures]].
288711
- */
288712
- WebGLRenderCompatibilityStatus[WebGLRenderCompatibilityStatus["MissingOptionalFeatures"] = 1] = "MissingOptionalFeatures";
288713
- /**
288714
- * Signifies that the base requirements of compatibility are met but WebGL reported a major performance caveat. The browser
288715
- * has likely fallen back to software rendering due to lack of a usable GPU.
288716
- * Consult [[WebGLRenderCompatibilityInfo.contextErrorMessage]] for a possible description of what went wrong.
288717
- * There could also be some missing optional features; consult the contents of [[WebGLRenderCompatibilityInfo.missingOptionalFeatures]].
288718
- */
288719
- WebGLRenderCompatibilityStatus[WebGLRenderCompatibilityStatus["MajorPerformanceCaveat"] = 2] = "MajorPerformanceCaveat";
288720
- /**
288721
- * Signifies that the base requirements of compatibility are not met; rendering cannot occur.
288722
- * Consult the contents of [[WebGLRenderCompatibilityInfo.missingRequiredFeatures]].
288723
- */
288724
- WebGLRenderCompatibilityStatus[WebGLRenderCompatibilityStatus["MissingRequiredFeatures"] = 3] = "MissingRequiredFeatures";
288725
- /**
288726
- * Signifies an inability to create either a canvas or a WebGL rendering context; rendering cannot occur. Consult
288727
- * [[WebGLRenderCompatibilityInfo.contextErrorMessage]] for a possible description of what went wrong.
288728
- */
288729
- WebGLRenderCompatibilityStatus[WebGLRenderCompatibilityStatus["CannotCreateContext"] = 4] = "CannotCreateContext";
288730
- })(WebGLRenderCompatibilityStatus || (WebGLRenderCompatibilityStatus = {}));
288731
- function createDefaultContext(canvas, useWebGL2 = true, attributes) {
288732
- let context = useWebGL2 ? canvas.getContext("webgl2", attributes) : canvas.getContext("webgl", attributes);
288733
- if (context === null && useWebGL2)
288734
- context = canvas.getContext("webgl", attributes);
288735
- return context !== null && context !== void 0 ? context : undefined;
288736
- }
288737
- /** This function returns information about the client system's level of compatibility with the iTwin.js rendering system, describing the client system's support for both optional and required features. It will also report if there is a major issue with the client system such as the browser falling back to software rendering or an inability to create a either a canvas or a WebGL rendering context.
288738
- * @param useWebGL2 A boolean which will be passed to the createContext function in order to create the desired type of context; set this to `true` to use WebGL2, `false` to use WebGL1.
288739
- * @param createContext A function of type [[ContextCreator]] that returns a WebGLContext. If not specified, this by default uses `canvas.getContext()` to create the WebGLContext.
288740
- * @returns A [[WebGLRenderCompatibilityInfo]] object which contains a compatibility summary.
288741
- * @see [[WebGLRenderCompatibilityInfo]]
288742
- * @public
288743
- */
288744
- function queryRenderCompatibility(useWebGL2, createContext) {
288745
- const canvas = document.createElement("canvas");
288746
- if (null === canvas)
288747
- return { status: WebGLRenderCompatibilityStatus.CannotCreateContext, missingOptionalFeatures: [], missingRequiredFeatures: [], userAgent: navigator.userAgent, driverBugs: {} };
288748
- let errorMessage;
288749
- canvas.addEventListener("webglcontextcreationerror", (event) => {
288750
- errorMessage = event.statusMessage || "webglcontextcreationerror was triggered with no error provided";
288751
- }, false);
288752
- if (undefined === createContext)
288753
- createContext = createDefaultContext;
288754
- let hasMajorPerformanceCaveat = false;
288755
- let context = createContext(canvas, useWebGL2, { failIfMajorPerformanceCaveat: true });
288756
- if (undefined === context) {
288757
- hasMajorPerformanceCaveat = true;
288758
- context = createContext(canvas, useWebGL2); // try to create context without black-listed GPU
288759
- if (undefined === context)
288760
- return {
288761
- status: WebGLRenderCompatibilityStatus.CannotCreateContext,
288762
- missingOptionalFeatures: [],
288763
- missingRequiredFeatures: [],
288764
- userAgent: navigator.userAgent,
288765
- contextErrorMessage: errorMessage,
288766
- driverBugs: {},
288767
- };
288768
- }
288769
- const capabilities = new _Capabilities__WEBPACK_IMPORTED_MODULE_0__.Capabilities();
288770
- const compatibility = capabilities.init(context, undefined);
288771
- compatibility.contextErrorMessage = errorMessage;
288772
- if (hasMajorPerformanceCaveat && compatibility.status !== WebGLRenderCompatibilityStatus.MissingRequiredFeatures)
288773
- compatibility.status = WebGLRenderCompatibilityStatus.MajorPerformanceCaveat;
288774
- return compatibility;
288775
- }
288647
+ /*---------------------------------------------------------------------------------------------
288648
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
288649
+ * See LICENSE.md in the project root for license terms and full copyright notice.
288650
+ *--------------------------------------------------------------------------------------------*/
288651
+ /** @packageDocumentation
288652
+ * @module Compatibility
288653
+ */
288654
+
288655
+ /** Enumerates the required and optional WebGL features used by the [RenderSystem]($frontend).
288656
+ * @public
288657
+ */
288658
+ var WebGLFeature;
288659
+ (function (WebGLFeature) {
288660
+ /** This feature allows transparent geometry to be rendered more efficiently, using 1 pass instead of 2. */
288661
+ WebGLFeature["MrtTransparency"] = "mrt transparency";
288662
+ /** This feature allows picking to occur more efficiently, using 1 pass instead of 3. */
288663
+ WebGLFeature["MrtPick"] = "mrt pick";
288664
+ /** This feature ensures large meshes (with more than 21,845 triangles) can be rendered. */
288665
+ WebGLFeature["UintElementIndex"] = "uint element index";
288666
+ /** This feature allows transparency to achieve the optimal quality. Without this feature, overlapping transparent geometry will "wash out" more easily. */
288667
+ WebGLFeature["FloatRendering"] = "float rendering";
288668
+ /** This feature allows for the display of non-3D classification data and solar shadows. */
288669
+ WebGLFeature["DepthTexture"] = "depth texture";
288670
+ /** This feature allows instancing of repeated geometry, which can reduce memory consumption. */
288671
+ WebGLFeature["Instancing"] = "instancing";
288672
+ /** This feature indicates that the system has enough texture units available for the shaders to run properly. */
288673
+ WebGLFeature["MinimalTextureUnits"] = "minimal texture units";
288674
+ /** Indicates that shadow maps are supported. Without this feature, shadows cannot be displayed. */
288675
+ WebGLFeature["ShadowMaps"] = "shadow maps";
288676
+ /** This feature allows a logarithmic depth buffer to be used. Without this feature, z-fighting will be much more likely to occur. */
288677
+ WebGLFeature["FragDepth"] = "fragment depth";
288678
+ /** This feature allows the renderer to achieve accurate contour lines for isoline and stepped delimiter modes of thematic display. */
288679
+ WebGLFeature["StandardDerivatives"] = "standard derivatives";
288680
+ /** This feature allows the renderer to smooth curved lines. */
288681
+ WebGLFeature["AntiAliasing"] = "anti-aliasing";
288682
+ })(WebGLFeature || (WebGLFeature = {}));
288683
+ /** An enumeration that describes a general "compatibility rating" based on the contents of a [[WebGLRenderCompatibilityInfo]].
288684
+ * @public
288685
+ */
288686
+ var WebGLRenderCompatibilityStatus;
288687
+ (function (WebGLRenderCompatibilityStatus) {
288688
+ /**
288689
+ * Signifies that everything is ideal: context created successfully, all required and optional features are available,
288690
+ * and browser did not signal a major performance caveat.
288691
+ */
288692
+ WebGLRenderCompatibilityStatus[WebGLRenderCompatibilityStatus["AllOkay"] = 0] = "AllOkay";
288693
+ /**
288694
+ * Signifies that the base requirements of compatibility are met but at least some optional features are missing.
288695
+ * Consult the contents of [[WebGLRenderCompatibilityInfo.missingOptionalFeatures]].
288696
+ */
288697
+ WebGLRenderCompatibilityStatus[WebGLRenderCompatibilityStatus["MissingOptionalFeatures"] = 1] = "MissingOptionalFeatures";
288698
+ /**
288699
+ * Signifies that the base requirements of compatibility are met but WebGL reported a major performance caveat. The browser
288700
+ * has likely fallen back to software rendering due to lack of a usable GPU.
288701
+ * Consult [[WebGLRenderCompatibilityInfo.contextErrorMessage]] for a possible description of what went wrong.
288702
+ * There could also be some missing optional features; consult the contents of [[WebGLRenderCompatibilityInfo.missingOptionalFeatures]].
288703
+ */
288704
+ WebGLRenderCompatibilityStatus[WebGLRenderCompatibilityStatus["MajorPerformanceCaveat"] = 2] = "MajorPerformanceCaveat";
288705
+ /**
288706
+ * Signifies that the base requirements of compatibility are not met; rendering cannot occur.
288707
+ * Consult the contents of [[WebGLRenderCompatibilityInfo.missingRequiredFeatures]].
288708
+ */
288709
+ WebGLRenderCompatibilityStatus[WebGLRenderCompatibilityStatus["MissingRequiredFeatures"] = 3] = "MissingRequiredFeatures";
288710
+ /**
288711
+ * Signifies an inability to create either a canvas or a WebGL rendering context; rendering cannot occur. Consult
288712
+ * [[WebGLRenderCompatibilityInfo.contextErrorMessage]] for a possible description of what went wrong.
288713
+ */
288714
+ WebGLRenderCompatibilityStatus[WebGLRenderCompatibilityStatus["CannotCreateContext"] = 4] = "CannotCreateContext";
288715
+ })(WebGLRenderCompatibilityStatus || (WebGLRenderCompatibilityStatus = {}));
288716
+ function createDefaultContext(canvas, useWebGL2 = true, attributes) {
288717
+ let context = useWebGL2 ? canvas.getContext("webgl2", attributes) : canvas.getContext("webgl", attributes);
288718
+ if (context === null && useWebGL2)
288719
+ context = canvas.getContext("webgl", attributes);
288720
+ return context !== null && context !== void 0 ? context : undefined;
288721
+ }
288722
+ /** This function returns information about the client system's level of compatibility with the iTwin.js rendering system, describing the client system's support for both optional and required features. It will also report if there is a major issue with the client system such as the browser falling back to software rendering or an inability to create a either a canvas or a WebGL rendering context.
288723
+ * @param useWebGL2 A boolean which will be passed to the createContext function in order to create the desired type of context; set this to `true` to use WebGL2, `false` to use WebGL1.
288724
+ * @param createContext A function of type [[ContextCreator]] that returns a WebGLContext. If not specified, this by default uses `canvas.getContext()` to create the WebGLContext.
288725
+ * @returns A [[WebGLRenderCompatibilityInfo]] object which contains a compatibility summary.
288726
+ * @see [[WebGLRenderCompatibilityInfo]]
288727
+ * @public
288728
+ */
288729
+ function queryRenderCompatibility(useWebGL2, createContext) {
288730
+ const canvas = document.createElement("canvas");
288731
+ if (null === canvas)
288732
+ return { status: WebGLRenderCompatibilityStatus.CannotCreateContext, missingOptionalFeatures: [], missingRequiredFeatures: [], userAgent: navigator.userAgent, driverBugs: {} };
288733
+ let errorMessage;
288734
+ canvas.addEventListener("webglcontextcreationerror", (event) => {
288735
+ errorMessage = event.statusMessage || "webglcontextcreationerror was triggered with no error provided";
288736
+ }, false);
288737
+ if (undefined === createContext)
288738
+ createContext = createDefaultContext;
288739
+ let hasMajorPerformanceCaveat = false;
288740
+ let context = createContext(canvas, useWebGL2, { failIfMajorPerformanceCaveat: true });
288741
+ if (undefined === context) {
288742
+ hasMajorPerformanceCaveat = true;
288743
+ context = createContext(canvas, useWebGL2); // try to create context without black-listed GPU
288744
+ if (undefined === context)
288745
+ return {
288746
+ status: WebGLRenderCompatibilityStatus.CannotCreateContext,
288747
+ missingOptionalFeatures: [],
288748
+ missingRequiredFeatures: [],
288749
+ userAgent: navigator.userAgent,
288750
+ contextErrorMessage: errorMessage,
288751
+ driverBugs: {},
288752
+ };
288753
+ }
288754
+ const capabilities = new _Capabilities__WEBPACK_IMPORTED_MODULE_0__.Capabilities();
288755
+ const compatibility = capabilities.init(context, undefined);
288756
+ compatibility.contextErrorMessage = errorMessage;
288757
+ if (hasMajorPerformanceCaveat && compatibility.status !== WebGLRenderCompatibilityStatus.MissingRequiredFeatures)
288758
+ compatibility.status = WebGLRenderCompatibilityStatus.MajorPerformanceCaveat;
288759
+ return compatibility;
288760
+ }
288776
288761
 
288777
288762
 
288778
288763
  /***/ }),
@@ -288795,19 +288780,19 @@ __webpack_require__.r(__webpack_exports__);
288795
288780
  /* harmony export */ });
288796
288781
  /* harmony import */ var _Capabilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Capabilities */ "../../core/webgl-compatibility/lib/esm/Capabilities.js");
288797
288782
  /* harmony import */ var _RenderCompatibility__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./RenderCompatibility */ "../../core/webgl-compatibility/lib/esm/RenderCompatibility.js");
288798
- /*---------------------------------------------------------------------------------------------
288799
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
288800
- * See LICENSE.md in the project root for license terms and full copyright notice.
288801
- *--------------------------------------------------------------------------------------------*/
288802
-
288803
-
288804
- /** @docs-package-description
288805
- * The webgl-compatibility package provides APIs for determining the level of compatibility of a browser+device with the iTwin.js rendering system.
288806
- */
288807
- /**
288808
- * @docs-group-description Compatibility
288809
- * APIs for evaluating compatibility with the iTwin.js rendering system.
288810
- */
288783
+ /*---------------------------------------------------------------------------------------------
288784
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
288785
+ * See LICENSE.md in the project root for license terms and full copyright notice.
288786
+ *--------------------------------------------------------------------------------------------*/
288787
+
288788
+
288789
+ /** @docs-package-description
288790
+ * The webgl-compatibility package provides APIs for determining the level of compatibility of a browser+device with the iTwin.js rendering system.
288791
+ */
288792
+ /**
288793
+ * @docs-group-description Compatibility
288794
+ * APIs for evaluating compatibility with the iTwin.js rendering system.
288795
+ */
288811
288796
 
288812
288797
 
288813
288798
  /***/ }),
@@ -290056,7 +290041,7 @@ class TestContext {
290056
290041
  this.initializeRpcInterfaces({ title: this.settings.Backend.name, version: this.settings.Backend.version });
290057
290042
  const iModelClient = new imodels_client_management_1.IModelsClient({ api: { baseUrl: `https://${(_a = process.env.IMJS_URL_PREFIX) !== null && _a !== void 0 ? _a : ""}api.bentley.com/imodels` } });
290058
290043
  await core_frontend_1.NoRenderApp.startup({
290059
- applicationVersion: "3.4.3",
290044
+ applicationVersion: "3.4.5",
290060
290045
  applicationId: this.settings.gprid,
290061
290046
  authorizationClient: new frontend_1.TestFrontendAuthorizationClient(this.adminUserAccessToken),
290062
290047
  hubAccess: new imodels_access_frontend_1.FrontendIModelsAccess(iModelClient),
@@ -298781,39 +298766,39 @@ function getScopeId(scope) {
298781
298766
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
298782
298767
 
298783
298768
  "use strict";
298784
-
298785
- Object.defineProperty(exports, "__esModule", ({ value: true }));
298786
- exports.executeBackendCallback = exports.registerBackendCallback = exports.executeRegisteredCallback = exports.getCallbacksRegisteredOnBackend = void 0;
298787
- const isFrontend = (typeof (window) !== "undefined");
298788
- /** @internal */
298789
- function getCallbacksRegisteredOnBackend() {
298790
- if (isFrontend)
298791
- throw new Error("This should only be called on the backend!");
298792
- __webpack_require__.g._CertaRegisteredCallbacks = __webpack_require__.g._CertaRegisteredCallbacks || {};
298793
- return __webpack_require__.g._CertaRegisteredCallbacks;
298794
- }
298795
- exports.getCallbacksRegisteredOnBackend = getCallbacksRegisteredOnBackend;
298796
- /** @internal */
298797
- function executeRegisteredCallback(name, args) {
298798
- const registeredCallbacks = getCallbacksRegisteredOnBackend();
298799
- if (!(name in registeredCallbacks))
298800
- throw new Error(`Unknown certa backend callback "${name}"`);
298801
- return registeredCallbacks[name](...args);
298802
- }
298803
- exports.executeRegisteredCallback = executeRegisteredCallback;
298804
- function registerBackendCallback(name, cb) {
298805
- if (isFrontend)
298806
- throw new Error("This should only be called on the backend!");
298807
- __webpack_require__.g._CertaRegisteredCallbacks = __webpack_require__.g._CertaRegisteredCallbacks || {};
298808
- __webpack_require__.g._CertaRegisteredCallbacks[name] = cb;
298809
- }
298810
- exports.registerBackendCallback = registerBackendCallback;
298811
- async function executeBackendCallback(name, ...args) {
298812
- if (!isFrontend)
298813
- return executeRegisteredCallback(name, args);
298814
- return window._CertaSendToBackend(name, args);
298815
- }
298816
- exports.executeBackendCallback = executeBackendCallback;
298769
+
298770
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
298771
+ exports.executeBackendCallback = exports.registerBackendCallback = exports.executeRegisteredCallback = exports.getCallbacksRegisteredOnBackend = void 0;
298772
+ const isFrontend = (typeof (window) !== "undefined");
298773
+ /** @internal */
298774
+ function getCallbacksRegisteredOnBackend() {
298775
+ if (isFrontend)
298776
+ throw new Error("This should only be called on the backend!");
298777
+ __webpack_require__.g._CertaRegisteredCallbacks = __webpack_require__.g._CertaRegisteredCallbacks || {};
298778
+ return __webpack_require__.g._CertaRegisteredCallbacks;
298779
+ }
298780
+ exports.getCallbacksRegisteredOnBackend = getCallbacksRegisteredOnBackend;
298781
+ /** @internal */
298782
+ function executeRegisteredCallback(name, args) {
298783
+ const registeredCallbacks = getCallbacksRegisteredOnBackend();
298784
+ if (!(name in registeredCallbacks))
298785
+ throw new Error(`Unknown certa backend callback "${name}"`);
298786
+ return registeredCallbacks[name](...args);
298787
+ }
298788
+ exports.executeRegisteredCallback = executeRegisteredCallback;
298789
+ function registerBackendCallback(name, cb) {
298790
+ if (isFrontend)
298791
+ throw new Error("This should only be called on the backend!");
298792
+ __webpack_require__.g._CertaRegisteredCallbacks = __webpack_require__.g._CertaRegisteredCallbacks || {};
298793
+ __webpack_require__.g._CertaRegisteredCallbacks[name] = cb;
298794
+ }
298795
+ exports.registerBackendCallback = registerBackendCallback;
298796
+ async function executeBackendCallback(name, ...args) {
298797
+ if (!isFrontend)
298798
+ return executeRegisteredCallback(name, args);
298799
+ return window._CertaSendToBackend(name, args);
298800
+ }
298801
+ exports.executeBackendCallback = executeBackendCallback;
298817
298802
 
298818
298803
 
298819
298804
  /***/ }),
@@ -309139,7 +309124,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"P
309139
309124
  /***/ ((module) => {
309140
309125
 
309141
309126
  "use strict";
309142
- module.exports = JSON.parse('{"name":"@itwin/core-frontend","version":"3.4.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","build:ci":"npm run -s build && npm run -s build:esm","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","docs":"betools docs --includes=../../generated-docs/extract --json=../../generated-docs/core/core-frontend/file.json --tsIndexFile=./core-frontend.ts --onlyJson --excludes=webgl/**/*,**/primitives,**/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 --no-eslintrc -c \\"../../tools/eslint-plugin/dist/configs/extension-exports-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"},"repository":{"type":"git","url":"https://github.com/iTwin/itwinjs-core/tree/master/core/frontend"},"keywords":["Bentley","BIM","iModel","digital-twin","iTwin"],"author":{"name":"Bentley Systems, Inc.","url":"http://www.bentley.com"},"peerDependencies":{"@itwin/appui-abstract":"workspace:^3.4.3","@itwin/core-bentley":"workspace:^3.4.3","@itwin/core-common":"workspace:^3.4.3","@itwin/core-geometry":"workspace:^3.4.3","@itwin/core-orbitgt":"workspace:^3.4.3","@itwin/core-quantity":"workspace:^3.4.3","@itwin/webgl-compatibility":"workspace:^3.4.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":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@types/chai":"4.3.1","@types/chai-as-promised":"^7","@types/deep-assign":"^0.1.0","@types/lodash":"^4.14.0","@types/mocha":"^8.2.2","@types/node":"16.11.59","@types/qs":"^6.5.0","@types/semver":"7.3.10","@types/superagent":"^4.1.14","@types/sinon":"^9.0.0","chai":"^4.1.2","chai-as-promised":"^7","cpx2":"^3.0.0","eslint":"^7.11.0","glob":"^7.1.2","mocha":"^10.0.0","nyc":"^15.1.0","rimraf":"^3.0.2","sinon":"^9.0.2","source-map-loader":"^4.0.0","typescript":"~4.4.0","webpack":"^5.64.4"},"//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/object-storage-azure":"~1.4.0","@itwin/cloud-agnostic-core":"~1.4.0","@itwin/object-storage-core":"~1.4.0","@itwin/core-i18n":"workspace:*","@itwin/core-telemetry":"workspace:*","@loaders.gl/core":"^3.1.6","@loaders.gl/draco":"^3.1.6","deep-assign":"^2.0.0","fuse.js":"^3.3.0","lodash":"^4.17.10","qs":"^6.5.1","semver":"^7.3.5","superagent":"7.1.3","wms-capabilities":"0.4.0","xml-js":"~1.6.11","reflect-metadata":"0.1.13"},"nyc":{"extends":"./node_modules/@itwin/build-tools/.nycrc"},"eslintConfig":{"plugins":["@itwin"],"extends":"plugin:@itwin/itwinjs-recommended","rules":{"@itwin/no-internal-barrel-imports":["error",{"required-barrel-modules":["./src/tile/internal.ts"]}],"@itwin/public-extension-exports":["error",{"releaseTags":["public","preview"],"outputApiFile":false}]},"overrides":[{"files":["*.test.ts","*.test.tsx","**/test/**/*.ts"],"rules":{"@itwin/no-internal-barrel-imports":"off"}}]}}');
309127
+ module.exports = JSON.parse('{"name":"@itwin/core-frontend","version":"3.4.5","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","build:ci":"npm run -s build && npm run -s build:esm","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","docs":"betools docs --includes=../../generated-docs/extract --json=../../generated-docs/core/core-frontend/file.json --tsIndexFile=./core-frontend.ts --onlyJson --excludes=webgl/**/*,**/primitives,**/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 --no-eslintrc -c \\"../../tools/eslint-plugin/dist/configs/extension-exports-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"},"repository":{"type":"git","url":"https://github.com/iTwin/itwinjs-core/tree/master/core/frontend"},"keywords":["Bentley","BIM","iModel","digital-twin","iTwin"],"author":{"name":"Bentley Systems, Inc.","url":"http://www.bentley.com"},"peerDependencies":{"@itwin/appui-abstract":"workspace:^3.4.5","@itwin/core-bentley":"workspace:^3.4.5","@itwin/core-common":"workspace:^3.4.5","@itwin/core-geometry":"workspace:^3.4.5","@itwin/core-orbitgt":"workspace:^3.4.5","@itwin/core-quantity":"workspace:^3.4.5","@itwin/webgl-compatibility":"workspace:^3.4.5"},"//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":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@types/chai":"4.3.1","@types/chai-as-promised":"^7","@types/deep-assign":"^0.1.0","@types/lodash":"^4.14.0","@types/mocha":"^8.2.2","@types/node":"16.11.59","@types/qs":"^6.5.0","@types/semver":"7.3.10","@types/superagent":"^4.1.14","@types/sinon":"^9.0.0","babel-loader":"~8.2.5","babel-plugin-istanbul":"~6.1.1","chai":"^4.1.2","chai-as-promised":"^7","cpx2":"^3.0.0","eslint":"^7.11.0","glob":"^7.1.2","mocha":"^10.0.0","nyc":"^15.1.0","rimraf":"^3.0.2","sinon":"^9.0.2","source-map-loader":"^4.0.0","typescript":"~4.4.0","webpack":"^5.64.4"},"//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/object-storage-azure":"~1.4.0","@itwin/cloud-agnostic-core":"~1.4.0","@itwin/object-storage-core":"~1.4.0","@itwin/core-i18n":"workspace:*","@itwin/core-telemetry":"workspace:*","@loaders.gl/core":"^3.1.6","@loaders.gl/draco":"^3.1.6","deep-assign":"^2.0.0","fuse.js":"^3.3.0","lodash":"^4.17.10","qs":"^6.5.1","semver":"^7.3.5","superagent":"7.1.3","wms-capabilities":"0.4.0","xml-js":"~1.6.11","reflect-metadata":"0.1.13"},"nyc":{"extends":"./node_modules/@itwin/build-tools/.nycrc"},"eslintConfig":{"plugins":["@itwin"],"extends":"plugin:@itwin/itwinjs-recommended","rules":{"@itwin/no-internal-barrel-imports":["error",{"required-barrel-modules":["./src/tile/internal.ts"]}],"@itwin/public-extension-exports":["error",{"releaseTags":["public","preview"],"outputApiFile":false}]},"overrides":[{"files":["*.test.ts","*.test.tsx","**/test/**/*.ts"],"rules":{"@itwin/no-internal-barrel-imports":"off"}}]}}');
309143
309128
 
309144
309129
  /***/ }),
309145
309130