@itwin/core-i18n 5.13.0-dev.6 → 5.13.0-dev.8

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.
@@ -17,13 +17,13 @@
17
17
  /** @packageDocumentation
18
18
  * @module Localization
19
19
  */
20
- function cov_ogldeftyv() {
21
- var path = "C:\\agent\\_work\\1\\s\\core\\i18n\\lib\\cjs\\ITwinLocalization.js";
22
- var hash = "d940188727f7c3f13464903c9fef76d730c540e6";
20
+ function cov_1wctd2lw3r() {
21
+ var path = "C:\\agent\\_work\\2\\s\\core\\i18n\\lib\\cjs\\ITwinLocalization.js";
22
+ var hash = "c62969131924018e5347a18fd98028451b653feb";
23
23
  var global = new Function("return this")();
24
24
  var gcv = "__coverage__";
25
25
  var coverageData = {
26
- path: "C:\\agent\\_work\\1\\s\\core\\i18n\\lib\\cjs\\ITwinLocalization.js",
26
+ path: "C:\\agent\\_work\\2\\s\\core\\i18n\\lib\\cjs\\ITwinLocalization.js",
27
27
  statementMap: {
28
28
  "0": {
29
29
  start: {
@@ -2120,13 +2120,13 @@ function cov_ogldeftyv() {
2120
2120
  inputSourceMap: {
2121
2121
  version: 3,
2122
2122
  file: "ITwinLocalization.js",
2123
- sources: ["C:\\agent\\_work\\1\\s\\core\\i18n\\src\\ITwinLocalization.ts"],
2123
+ sources: ["C:\\agent\\_work\\2\\s\\core\\i18n\\src\\ITwinLocalization.ts"],
2124
2124
  names: [],
2125
2125
  mappings: "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",
2126
- sourcesContent: ["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Localization\n */\n\nimport i18next, { i18n, InitOptions, Module, TOptionsBase } from \"i18next\";\nimport i18nextBrowserLanguageDetector, { DetectorOptions } from \"i18next-browser-languagedetector\";\nimport Backend, { HttpBackendOptions as BackendOptions } from \"i18next-http-backend\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport type { Localization } from \"@itwin/core-common\";\n\nconst DEFAULT_MAX_RETRIES: number = 1; // a low number prevents wasted time and potential timeouts when requesting localization files throws an error\n\n/** Options for ITwinLocalization\n * @public\n */\nexport interface LocalizationOptions {\n urlTemplate?: string;\n backendPlugin?: Module;\n detectorPlugin?: Module;\n initOptions?: InitOptions;\n backendHttpOptions?: BackendOptions;\n detectorOptions?: DetectorOptions;\n}\n\n/** Supplies localizations for iTwin.js\n * @note this class uses the [i18next](https://www.i18next.com/) package.\n * @public\n */\nexport class ITwinLocalization implements Localization {\n public i18next: i18n;\n private readonly _initOptions: InitOptions;\n private readonly _backendOptions: BackendOptions;\n private readonly _detectionOptions: DetectorOptions;\n private readonly _namespaces = new Map<string, Promise<void>>();\n\n public constructor(options?: LocalizationOptions) {\n this.i18next = i18next.createInstance();\n\n this._backendOptions = {\n loadPath: options?.urlTemplate ?? \"locales/{{lng}}/{{ns}}.json\",\n crossDomain: true,\n ...options?.backendHttpOptions,\n };\n\n this._detectionOptions = {\n order: [\"querystring\", \"navigator\", \"htmlTag\"],\n lookupQuerystring: \"lng\",\n caches: [],\n ...options?.detectorOptions,\n };\n\n this._initOptions = {\n interpolation: { escapeValue: true },\n fallbackLng: \"en\",\n maxRetries: DEFAULT_MAX_RETRIES,\n backend: this._backendOptions,\n detection: this._detectionOptions,\n ...options?.initOptions,\n };\n\n this.i18next\n .use(options?.detectorPlugin ?? i18nextBrowserLanguageDetector)\n .use(options?.backendPlugin ?? Backend)\n .use(TranslationLogger);\n }\n\n public async initialize(namespaces: string[]): Promise<void> {\n\n // Also consider namespaces passed into constructor\n const initNamespaces: string[] = [this._initOptions.ns || []].flat();\n const combinedNamespaces: Set<string> = new Set([...namespaces, ...initNamespaces]); // without duplicates\n\n const defaultNamespace: string | false | readonly string[] = this._initOptions.defaultNS ?? namespaces[0];\n if (defaultNamespace)\n combinedNamespaces.add(defaultNamespace as string); // Make sure default namespace is in namespaces list\n\n const initOptions: InitOptions = {\n ...this._initOptions,\n defaultNS: defaultNamespace,\n ns: [...combinedNamespaces],\n };\n\n // if in a development environment, set debugging\n if (process.env.NODE_ENV === \"development\")\n initOptions.debug = true;\n\n const initPromise = this.i18next.init(initOptions) as unknown as Promise<void>;\n\n for (const ns of namespaces)\n this._namespaces.set(ns, initPromise);\n\n return initPromise;\n }\n\n /** Replace all instances of `%{key}` within a string with the translations of those keys.\n * For example:\n * ``` ts\n * \"MyKeys\": {\n * \"Key1\": \"First value\",\n * \"Key2\": \"Second value\"\n * }\n * ```\n *\n * ``` ts\n * i18.translateKeys(\"string with %{MyKeys.Key1} followed by %{MyKeys.Key2}!\"\") // returns \"string with First Value followed by Second Value!\"\n * ```\n * @param line The input line, potentially containing %{keys}.\n * @returns The line with all %{keys} translated\n * @public\n */\n public getLocalizedKeys(line: string): string {\n return line.replace(/\\%\\{(.+?)\\}/g, (_match, tag) => this.getLocalizedString(tag));\n }\n\n /** Return the translated value of a key.\n * @param key - the key that matches a property in the JSON localization file.\n * @note The key includes the namespace, which identifies the particular localization file that contains the property,\n * followed by a colon, followed by the property in the JSON file.\n * For example:\n * ``` ts\n * const dataString: string = IModelApp.localization.getLocalizedString(\"iModelJs:BackgroundMap.BingDataAttribution\");\n * ```\n * assigns to dataString the string with property BackgroundMap.BingDataAttribution from the iModelJs.json localization file.\n * @returns The string corresponding to the first key that resolves.\n * @throws Error if no keys resolve to a string.\n * @public\n */\n public getLocalizedString(key: string | string[], options?: TOptionsBase): string {\n if (options?.returnDetails || options?.returnObjects) {\n throw new Error(\"Translation key must map to a string, but the given options will result in an object\");\n }\n\n const value = this.i18next.t(key, options);\n\n if (typeof value !== \"string\") {\n throw new Error(\"Translation key(s) string not found\");\n }\n\n return value;\n }\n\n /** Gets the English translation.\n * @param namespace - the namespace that identifies the particular localization file that contains the property.\n * @param key - the key that matches a property in the JSON localization file.\n * @returns The string corresponding to the first key that resolves.\n * @throws Error if no keys resolve to a string.\n * @internal\n */\n public getEnglishString(namespace: string, key: string | string[], options?: TOptionsBase): string {\n if (options?.returnDetails || options?.returnObjects) {\n throw new Error(\"Translation key must map to a string, but the given options will result in an object\");\n }\n\n options = {\n ...options,\n ns: namespace, // ensure namespace argument is used\n };\n\n const en = this.i18next.getFixedT(\"en\", namespace);\n const str = en(key, options);\n if (typeof str !== \"string\")\n throw new Error(\"Translation key(s) not found\");\n\n return str;\n }\n\n /** Get the promise for an already registered Namespace.\n * @param name - the name of the namespace\n * @public\n */\n public getNamespacePromise(name: string): Promise<void> | undefined {\n return this._namespaces.get(name);\n }\n\n /** @internal */\n public getLanguageList(): readonly string[] {\n return this.i18next.languages;\n }\n\n /** override the language detected in the browser */\n public async changeLanguage(language: string) {\n return this.i18next.changeLanguage(language) as unknown as Promise<void>;\n }\n\n /** Register a new Namespace and return it. If the namespace is already registered, it will be returned.\n * @param name - the name of the namespace, which is the base name of the JSON file that contains the localization properties.\n * @note - The registerNamespace method starts fetching the appropriate version of the JSON localization file from the server,\n * based on the current locale. To make sure that fetch is complete before performing translations from this namespace, await\n * fulfillment of the readPromise Promise property of the returned LocalizationNamespace.\n * @see [Localization in iTwin.js]($docs/learning/frontend/Localization.md)\n * @public\n */\n public async registerNamespace(name: string): Promise<void> {\n const existing = this._namespaces.get(name);\n if (existing !== undefined)\n return existing;\n\n const theReadPromise = new Promise<void>((resolve) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.i18next.loadNamespaces(name, (err) => {\n if (!err)\n return resolve();\n\n // Here we got a non-null err object.\n // This method is called when the system has attempted to load the resources for the namespaces for each possible locale.\n // For example 'fr-ca' might be the most specific locale, in which case 'fr' and 'en' are fallback locales.\n // Using Backend from i18next-http-backend, err will be an array of strings of each namespace it tried to read and its locale.\n // There might be errs for some other namespaces as well as this one. We resolve the promise unless there's an error for each possible locale.\n let locales = this.getLanguageList().map((thisLocale: any) => `/${thisLocale}/`);\n\n try {\n for (const thisError of err) {\n if (typeof thisError === \"string\")\n locales = locales.filter((thisLocale) => !thisError.includes(thisLocale));\n }\n } catch {\n locales = [];\n }\n // if we removed every locale from the array, it wasn't loaded.\n if (locales.length === 0)\n Logger.logError(\"i18n\", `No resources for namespace ${name} could be loaded`);\n\n resolve();\n });\n });\n this._namespaces.set(name, theReadPromise);\n return theReadPromise;\n }\n\n /** @internal */\n public unregisterNamespace(name: string): void {\n this._namespaces.delete(name);\n }\n}\n\nclass TranslationLogger {\n public static readonly type = \"logger\";\n public log(args: string[]) { Logger.logInfo(\"i18n\", this.createLogMessage(args)); }\n public warn(args: string[]) { Logger.logWarning(\"i18n\", this.createLogMessage(args)); }\n public error(args: string[]) { Logger.logError(\"i18n\", this.createLogMessage(args)); }\n private createLogMessage(args: string[]) {\n let message = args[0];\n for (let i = 1; i < args.length; ++i) {\n if (typeof args[i] === \"string\")\n message += `\\n ${args[i]}`;\n }\n return message;\n }\n}\n"]
2126
+ sourcesContent: ["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Localization\r\n */\r\n\r\nimport i18next, { i18n, InitOptions, Module, TOptionsBase } from \"i18next\";\r\nimport i18nextBrowserLanguageDetector, { DetectorOptions } from \"i18next-browser-languagedetector\";\r\nimport Backend, { HttpBackendOptions as BackendOptions } from \"i18next-http-backend\";\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport type { Localization } from \"@itwin/core-common\";\r\n\r\nconst DEFAULT_MAX_RETRIES: number = 1; // a low number prevents wasted time and potential timeouts when requesting localization files throws an error\r\n\r\n/** Options for ITwinLocalization\r\n * @public\r\n */\r\nexport interface LocalizationOptions {\r\n urlTemplate?: string;\r\n backendPlugin?: Module;\r\n detectorPlugin?: Module;\r\n initOptions?: InitOptions;\r\n backendHttpOptions?: BackendOptions;\r\n detectorOptions?: DetectorOptions;\r\n}\r\n\r\n/** Supplies localizations for iTwin.js\r\n * @note this class uses the [i18next](https://www.i18next.com/) package.\r\n * @public\r\n */\r\nexport class ITwinLocalization implements Localization {\r\n public i18next: i18n;\r\n private readonly _initOptions: InitOptions;\r\n private readonly _backendOptions: BackendOptions;\r\n private readonly _detectionOptions: DetectorOptions;\r\n private readonly _namespaces = new Map<string, Promise<void>>();\r\n\r\n public constructor(options?: LocalizationOptions) {\r\n this.i18next = i18next.createInstance();\r\n\r\n this._backendOptions = {\r\n loadPath: options?.urlTemplate ?? \"locales/{{lng}}/{{ns}}.json\",\r\n crossDomain: true,\r\n ...options?.backendHttpOptions,\r\n };\r\n\r\n this._detectionOptions = {\r\n order: [\"querystring\", \"navigator\", \"htmlTag\"],\r\n lookupQuerystring: \"lng\",\r\n caches: [],\r\n ...options?.detectorOptions,\r\n };\r\n\r\n this._initOptions = {\r\n interpolation: { escapeValue: true },\r\n fallbackLng: \"en\",\r\n maxRetries: DEFAULT_MAX_RETRIES,\r\n backend: this._backendOptions,\r\n detection: this._detectionOptions,\r\n ...options?.initOptions,\r\n };\r\n\r\n this.i18next\r\n .use(options?.detectorPlugin ?? i18nextBrowserLanguageDetector)\r\n .use(options?.backendPlugin ?? Backend)\r\n .use(TranslationLogger);\r\n }\r\n\r\n public async initialize(namespaces: string[]): Promise<void> {\r\n\r\n // Also consider namespaces passed into constructor\r\n const initNamespaces: string[] = [this._initOptions.ns || []].flat();\r\n const combinedNamespaces: Set<string> = new Set([...namespaces, ...initNamespaces]); // without duplicates\r\n\r\n const defaultNamespace: string | false | readonly string[] = this._initOptions.defaultNS ?? namespaces[0];\r\n if (defaultNamespace)\r\n combinedNamespaces.add(defaultNamespace as string); // Make sure default namespace is in namespaces list\r\n\r\n const initOptions: InitOptions = {\r\n ...this._initOptions,\r\n defaultNS: defaultNamespace,\r\n ns: [...combinedNamespaces],\r\n };\r\n\r\n // if in a development environment, set debugging\r\n if (process.env.NODE_ENV === \"development\")\r\n initOptions.debug = true;\r\n\r\n const initPromise = this.i18next.init(initOptions) as unknown as Promise<void>;\r\n\r\n for (const ns of namespaces)\r\n this._namespaces.set(ns, initPromise);\r\n\r\n return initPromise;\r\n }\r\n\r\n /** Replace all instances of `%{key}` within a string with the translations of those keys.\r\n * For example:\r\n * ``` ts\r\n * \"MyKeys\": {\r\n * \"Key1\": \"First value\",\r\n * \"Key2\": \"Second value\"\r\n * }\r\n * ```\r\n *\r\n * ``` ts\r\n * i18.translateKeys(\"string with %{MyKeys.Key1} followed by %{MyKeys.Key2}!\"\") // returns \"string with First Value followed by Second Value!\"\r\n * ```\r\n * @param line The input line, potentially containing %{keys}.\r\n * @returns The line with all %{keys} translated\r\n * @public\r\n */\r\n public getLocalizedKeys(line: string): string {\r\n return line.replace(/\\%\\{(.+?)\\}/g, (_match, tag) => this.getLocalizedString(tag));\r\n }\r\n\r\n /** Return the translated value of a key.\r\n * @param key - the key that matches a property in the JSON localization file.\r\n * @note The key includes the namespace, which identifies the particular localization file that contains the property,\r\n * followed by a colon, followed by the property in the JSON file.\r\n * For example:\r\n * ``` ts\r\n * const dataString: string = IModelApp.localization.getLocalizedString(\"iModelJs:BackgroundMap.BingDataAttribution\");\r\n * ```\r\n * assigns to dataString the string with property BackgroundMap.BingDataAttribution from the iModelJs.json localization file.\r\n * @returns The string corresponding to the first key that resolves.\r\n * @throws Error if no keys resolve to a string.\r\n * @public\r\n */\r\n public getLocalizedString(key: string | string[], options?: TOptionsBase): string {\r\n if (options?.returnDetails || options?.returnObjects) {\r\n throw new Error(\"Translation key must map to a string, but the given options will result in an object\");\r\n }\r\n\r\n const value = this.i18next.t(key, options);\r\n\r\n if (typeof value !== \"string\") {\r\n throw new Error(\"Translation key(s) string not found\");\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /** Gets the English translation.\r\n * @param namespace - the namespace that identifies the particular localization file that contains the property.\r\n * @param key - the key that matches a property in the JSON localization file.\r\n * @returns The string corresponding to the first key that resolves.\r\n * @throws Error if no keys resolve to a string.\r\n * @internal\r\n */\r\n public getEnglishString(namespace: string, key: string | string[], options?: TOptionsBase): string {\r\n if (options?.returnDetails || options?.returnObjects) {\r\n throw new Error(\"Translation key must map to a string, but the given options will result in an object\");\r\n }\r\n\r\n options = {\r\n ...options,\r\n ns: namespace, // ensure namespace argument is used\r\n };\r\n\r\n const en = this.i18next.getFixedT(\"en\", namespace);\r\n const str = en(key, options);\r\n if (typeof str !== \"string\")\r\n throw new Error(\"Translation key(s) not found\");\r\n\r\n return str;\r\n }\r\n\r\n /** Get the promise for an already registered Namespace.\r\n * @param name - the name of the namespace\r\n * @public\r\n */\r\n public getNamespacePromise(name: string): Promise<void> | undefined {\r\n return this._namespaces.get(name);\r\n }\r\n\r\n /** @internal */\r\n public getLanguageList(): readonly string[] {\r\n return this.i18next.languages;\r\n }\r\n\r\n /** override the language detected in the browser */\r\n public async changeLanguage(language: string) {\r\n return this.i18next.changeLanguage(language) as unknown as Promise<void>;\r\n }\r\n\r\n /** Register a new Namespace and return it. If the namespace is already registered, it will be returned.\r\n * @param name - the name of the namespace, which is the base name of the JSON file that contains the localization properties.\r\n * @note - The registerNamespace method starts fetching the appropriate version of the JSON localization file from the server,\r\n * based on the current locale. To make sure that fetch is complete before performing translations from this namespace, await\r\n * fulfillment of the readPromise Promise property of the returned LocalizationNamespace.\r\n * @see [Localization in iTwin.js]($docs/learning/frontend/Localization.md)\r\n * @public\r\n */\r\n public async registerNamespace(name: string): Promise<void> {\r\n const existing = this._namespaces.get(name);\r\n if (existing !== undefined)\r\n return existing;\r\n\r\n const theReadPromise = new Promise<void>((resolve) => {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.i18next.loadNamespaces(name, (err) => {\r\n if (!err)\r\n return resolve();\r\n\r\n // Here we got a non-null err object.\r\n // This method is called when the system has attempted to load the resources for the namespaces for each possible locale.\r\n // For example 'fr-ca' might be the most specific locale, in which case 'fr' and 'en' are fallback locales.\r\n // Using Backend from i18next-http-backend, err will be an array of strings of each namespace it tried to read and its locale.\r\n // There might be errs for some other namespaces as well as this one. We resolve the promise unless there's an error for each possible locale.\r\n let locales = this.getLanguageList().map((thisLocale: any) => `/${thisLocale}/`);\r\n\r\n try {\r\n for (const thisError of err) {\r\n if (typeof thisError === \"string\")\r\n locales = locales.filter((thisLocale) => !thisError.includes(thisLocale));\r\n }\r\n } catch {\r\n locales = [];\r\n }\r\n // if we removed every locale from the array, it wasn't loaded.\r\n if (locales.length === 0)\r\n Logger.logError(\"i18n\", `No resources for namespace ${name} could be loaded`);\r\n\r\n resolve();\r\n });\r\n });\r\n this._namespaces.set(name, theReadPromise);\r\n return theReadPromise;\r\n }\r\n\r\n /** @internal */\r\n public unregisterNamespace(name: string): void {\r\n this._namespaces.delete(name);\r\n }\r\n}\r\n\r\nclass TranslationLogger {\r\n public static readonly type = \"logger\";\r\n public log(args: string[]) { Logger.logInfo(\"i18n\", this.createLogMessage(args)); }\r\n public warn(args: string[]) { Logger.logWarning(\"i18n\", this.createLogMessage(args)); }\r\n public error(args: string[]) { Logger.logError(\"i18n\", this.createLogMessage(args)); }\r\n private createLogMessage(args: string[]) {\r\n let message = args[0];\r\n for (let i = 1; i < args.length; ++i) {\r\n if (typeof args[i] === \"string\")\r\n message += `\\n ${args[i]}`;\r\n }\r\n return message;\r\n }\r\n}\r\n"]
2127
2127
  },
2128
2128
  _coverageSchema: "1a1c01bbd47fc00a2c39e90264f33305004495a9",
2129
- hash: "d940188727f7c3f13464903c9fef76d730c540e6"
2129
+ hash: "c62969131924018e5347a18fd98028451b653feb"
2130
2130
  };
2131
2131
  var coverage = global[gcv] || (global[gcv] = {});
2132
2132
  if (!coverage[path] || coverage[path].hash !== hash) {
@@ -2135,31 +2135,31 @@ function cov_ogldeftyv() {
2135
2135
  var actualCoverage = coverage[path];
2136
2136
  {
2137
2137
  // @ts-ignore
2138
- cov_ogldeftyv = function () {
2138
+ cov_1wctd2lw3r = function () {
2139
2139
  return actualCoverage;
2140
2140
  };
2141
2141
  }
2142
2142
  return actualCoverage;
2143
2143
  }
2144
- cov_ogldeftyv();
2145
- var __importDefault = (cov_ogldeftyv().s[0]++, (cov_ogldeftyv().b[0][0]++, this) && (cov_ogldeftyv().b[0][1]++, this.__importDefault) || (cov_ogldeftyv().b[0][2]++, function (mod) {
2146
- cov_ogldeftyv().f[0]++;
2147
- cov_ogldeftyv().s[1]++;
2148
- return (cov_ogldeftyv().b[2][0]++, mod) && (cov_ogldeftyv().b[2][1]++, mod.__esModule) ? (cov_ogldeftyv().b[1][0]++, mod) : (cov_ogldeftyv().b[1][1]++, {
2144
+ cov_1wctd2lw3r();
2145
+ var __importDefault = (cov_1wctd2lw3r().s[0]++, (cov_1wctd2lw3r().b[0][0]++, this) && (cov_1wctd2lw3r().b[0][1]++, this.__importDefault) || (cov_1wctd2lw3r().b[0][2]++, function (mod) {
2146
+ cov_1wctd2lw3r().f[0]++;
2147
+ cov_1wctd2lw3r().s[1]++;
2148
+ return (cov_1wctd2lw3r().b[2][0]++, mod) && (cov_1wctd2lw3r().b[2][1]++, mod.__esModule) ? (cov_1wctd2lw3r().b[1][0]++, mod) : (cov_1wctd2lw3r().b[1][1]++, {
2149
2149
  "default": mod
2150
2150
  });
2151
2151
  }));
2152
- cov_ogldeftyv().s[2]++;
2152
+ cov_1wctd2lw3r().s[2]++;
2153
2153
  Object.defineProperty(exports, "__esModule", ({
2154
2154
  value: true
2155
2155
  }));
2156
- cov_ogldeftyv().s[3]++;
2156
+ cov_1wctd2lw3r().s[3]++;
2157
2157
  exports.ITwinLocalization = void 0;
2158
- const i18next_1 = (cov_ogldeftyv().s[4]++, __importDefault(__webpack_require__(/*! i18next */ "../../common/temp/node_modules/.pnpm/i18next@21.10.0/node_modules/i18next/dist/cjs/i18next.js")));
2159
- const i18next_browser_languagedetector_1 = (cov_ogldeftyv().s[5]++, __importDefault(__webpack_require__(/*! i18next-browser-languagedetector */ "../../common/temp/node_modules/.pnpm/i18next-browser-languagedetector@6.1.8/node_modules/i18next-browser-languagedetector/dist/cjs/i18nextBrowserLanguageDetector.js")));
2160
- const i18next_http_backend_1 = (cov_ogldeftyv().s[6]++, __importDefault(__webpack_require__(/*! i18next-http-backend */ "../../common/temp/node_modules/.pnpm/i18next-http-backend@3.0.6/node_modules/i18next-http-backend/esm/index.js")));
2161
- const core_bentley_1 = (cov_ogldeftyv().s[7]++, __webpack_require__(/*! @itwin/core-bentley */ "../bentley/lib/esm/core-bentley.js"));
2162
- const DEFAULT_MAX_RETRIES = (cov_ogldeftyv().s[8]++, 1); // a low number prevents wasted time and potential timeouts when requesting localization files throws an error
2158
+ const i18next_1 = (cov_1wctd2lw3r().s[4]++, __importDefault(__webpack_require__(/*! i18next */ "../../common/temp/node_modules/.pnpm/i18next@21.10.0/node_modules/i18next/dist/cjs/i18next.js")));
2159
+ const i18next_browser_languagedetector_1 = (cov_1wctd2lw3r().s[5]++, __importDefault(__webpack_require__(/*! i18next-browser-languagedetector */ "../../common/temp/node_modules/.pnpm/i18next-browser-languagedetector@6.1.8/node_modules/i18next-browser-languagedetector/dist/cjs/i18nextBrowserLanguageDetector.js")));
2160
+ const i18next_http_backend_1 = (cov_1wctd2lw3r().s[6]++, __importDefault(__webpack_require__(/*! i18next-http-backend */ "../../common/temp/node_modules/.pnpm/i18next-http-backend@3.0.6/node_modules/i18next-http-backend/esm/index.js")));
2161
+ const core_bentley_1 = (cov_1wctd2lw3r().s[7]++, __webpack_require__(/*! @itwin/core-bentley */ "../bentley/lib/esm/core-bentley.js"));
2162
+ const DEFAULT_MAX_RETRIES = (cov_1wctd2lw3r().s[8]++, 1); // a low number prevents wasted time and potential timeouts when requesting localization files throws an error
2163
2163
  /** Supplies localizations for iTwin.js
2164
2164
  * @note this class uses the [i18next](https://www.i18next.com/) package.
2165
2165
  * @public
@@ -2169,25 +2169,25 @@ class ITwinLocalization {
2169
2169
  _initOptions;
2170
2170
  _backendOptions;
2171
2171
  _detectionOptions;
2172
- _namespaces = (cov_ogldeftyv().s[9]++, new Map());
2172
+ _namespaces = (cov_1wctd2lw3r().s[9]++, new Map());
2173
2173
  constructor(options) {
2174
- cov_ogldeftyv().f[1]++;
2175
- cov_ogldeftyv().s[10]++;
2174
+ cov_1wctd2lw3r().f[1]++;
2175
+ cov_1wctd2lw3r().s[10]++;
2176
2176
  this.i18next = i18next_1.default.createInstance();
2177
- cov_ogldeftyv().s[11]++;
2177
+ cov_1wctd2lw3r().s[11]++;
2178
2178
  this._backendOptions = {
2179
- loadPath: (cov_ogldeftyv().b[3][0]++, options?.urlTemplate) ?? (cov_ogldeftyv().b[3][1]++, "locales/{{lng}}/{{ns}}.json"),
2179
+ loadPath: (cov_1wctd2lw3r().b[3][0]++, options?.urlTemplate) ?? (cov_1wctd2lw3r().b[3][1]++, "locales/{{lng}}/{{ns}}.json"),
2180
2180
  crossDomain: true,
2181
2181
  ...options?.backendHttpOptions
2182
2182
  };
2183
- cov_ogldeftyv().s[12]++;
2183
+ cov_1wctd2lw3r().s[12]++;
2184
2184
  this._detectionOptions = {
2185
2185
  order: ["querystring", "navigator", "htmlTag"],
2186
2186
  lookupQuerystring: "lng",
2187
2187
  caches: [],
2188
2188
  ...options?.detectorOptions
2189
2189
  };
2190
- cov_ogldeftyv().s[13]++;
2190
+ cov_1wctd2lw3r().s[13]++;
2191
2191
  this._initOptions = {
2192
2192
  interpolation: {
2193
2193
  escapeValue: true
@@ -2198,41 +2198,41 @@ class ITwinLocalization {
2198
2198
  detection: this._detectionOptions,
2199
2199
  ...options?.initOptions
2200
2200
  };
2201
- cov_ogldeftyv().s[14]++;
2202
- this.i18next.use((cov_ogldeftyv().b[4][0]++, options?.detectorPlugin) ?? (cov_ogldeftyv().b[4][1]++, i18next_browser_languagedetector_1.default)).use((cov_ogldeftyv().b[5][0]++, options?.backendPlugin) ?? (cov_ogldeftyv().b[5][1]++, i18next_http_backend_1.default)).use(TranslationLogger);
2201
+ cov_1wctd2lw3r().s[14]++;
2202
+ this.i18next.use((cov_1wctd2lw3r().b[4][0]++, options?.detectorPlugin) ?? (cov_1wctd2lw3r().b[4][1]++, i18next_browser_languagedetector_1.default)).use((cov_1wctd2lw3r().b[5][0]++, options?.backendPlugin) ?? (cov_1wctd2lw3r().b[5][1]++, i18next_http_backend_1.default)).use(TranslationLogger);
2203
2203
  }
2204
2204
  async initialize(namespaces) {
2205
- cov_ogldeftyv().f[2]++;
2205
+ cov_1wctd2lw3r().f[2]++;
2206
2206
  // Also consider namespaces passed into constructor
2207
- const initNamespaces = (cov_ogldeftyv().s[15]++, [(cov_ogldeftyv().b[6][0]++, this._initOptions.ns) || (cov_ogldeftyv().b[6][1]++, [])].flat());
2208
- const combinedNamespaces = (cov_ogldeftyv().s[16]++, new Set([...namespaces, ...initNamespaces])); // without duplicates
2209
- const defaultNamespace = (cov_ogldeftyv().s[17]++, (cov_ogldeftyv().b[7][0]++, this._initOptions.defaultNS) ?? (cov_ogldeftyv().b[7][1]++, namespaces[0]));
2210
- cov_ogldeftyv().s[18]++;
2207
+ const initNamespaces = (cov_1wctd2lw3r().s[15]++, [(cov_1wctd2lw3r().b[6][0]++, this._initOptions.ns) || (cov_1wctd2lw3r().b[6][1]++, [])].flat());
2208
+ const combinedNamespaces = (cov_1wctd2lw3r().s[16]++, new Set([...namespaces, ...initNamespaces])); // without duplicates
2209
+ const defaultNamespace = (cov_1wctd2lw3r().s[17]++, (cov_1wctd2lw3r().b[7][0]++, this._initOptions.defaultNS) ?? (cov_1wctd2lw3r().b[7][1]++, namespaces[0]));
2210
+ cov_1wctd2lw3r().s[18]++;
2211
2211
  if (defaultNamespace) {
2212
- cov_ogldeftyv().b[8][0]++;
2213
- cov_ogldeftyv().s[19]++;
2212
+ cov_1wctd2lw3r().b[8][0]++;
2213
+ cov_1wctd2lw3r().s[19]++;
2214
2214
  combinedNamespaces.add(defaultNamespace);
2215
2215
  } else {
2216
- cov_ogldeftyv().b[8][1]++;
2216
+ cov_1wctd2lw3r().b[8][1]++;
2217
2217
  } // Make sure default namespace is in namespaces list
2218
- const initOptions = (cov_ogldeftyv().s[20]++, {
2218
+ const initOptions = (cov_1wctd2lw3r().s[20]++, {
2219
2219
  ...this._initOptions,
2220
2220
  defaultNS: defaultNamespace,
2221
2221
  ns: [...combinedNamespaces]
2222
2222
  });
2223
2223
  // if in a development environment, set debugging
2224
- cov_ogldeftyv().s[21]++;
2224
+ cov_1wctd2lw3r().s[21]++;
2225
2225
  if (false) // removed by dead control flow
2226
2226
  {} else {
2227
- cov_ogldeftyv().b[9][1]++;
2227
+ cov_1wctd2lw3r().b[9][1]++;
2228
2228
  }
2229
- const initPromise = (cov_ogldeftyv().s[23]++, this.i18next.init(initOptions));
2230
- cov_ogldeftyv().s[24]++;
2229
+ const initPromise = (cov_1wctd2lw3r().s[23]++, this.i18next.init(initOptions));
2230
+ cov_1wctd2lw3r().s[24]++;
2231
2231
  for (const ns of namespaces) {
2232
- cov_ogldeftyv().s[25]++;
2232
+ cov_1wctd2lw3r().s[25]++;
2233
2233
  this._namespaces.set(ns, initPromise);
2234
2234
  }
2235
- cov_ogldeftyv().s[26]++;
2235
+ cov_1wctd2lw3r().s[26]++;
2236
2236
  return initPromise;
2237
2237
  }
2238
2238
  /** Replace all instances of `%{key}` within a string with the translations of those keys.
@@ -2252,11 +2252,11 @@ class ITwinLocalization {
2252
2252
  * @public
2253
2253
  */
2254
2254
  getLocalizedKeys(line) {
2255
- cov_ogldeftyv().f[3]++;
2256
- cov_ogldeftyv().s[27]++;
2255
+ cov_1wctd2lw3r().f[3]++;
2256
+ cov_1wctd2lw3r().s[27]++;
2257
2257
  return line.replace(/\%\{(.+?)\}/g, (_match, tag) => {
2258
- cov_ogldeftyv().f[4]++;
2259
- cov_ogldeftyv().s[28]++;
2258
+ cov_1wctd2lw3r().f[4]++;
2259
+ cov_1wctd2lw3r().s[28]++;
2260
2260
  return this.getLocalizedString(tag);
2261
2261
  });
2262
2262
  }
@@ -2274,25 +2274,25 @@ class ITwinLocalization {
2274
2274
  * @public
2275
2275
  */
2276
2276
  getLocalizedString(key, options) {
2277
- cov_ogldeftyv().f[5]++;
2278
- cov_ogldeftyv().s[29]++;
2279
- if ((cov_ogldeftyv().b[11][0]++, options?.returnDetails) || (cov_ogldeftyv().b[11][1]++, options?.returnObjects)) {
2280
- cov_ogldeftyv().b[10][0]++;
2281
- cov_ogldeftyv().s[30]++;
2277
+ cov_1wctd2lw3r().f[5]++;
2278
+ cov_1wctd2lw3r().s[29]++;
2279
+ if ((cov_1wctd2lw3r().b[11][0]++, options?.returnDetails) || (cov_1wctd2lw3r().b[11][1]++, options?.returnObjects)) {
2280
+ cov_1wctd2lw3r().b[10][0]++;
2281
+ cov_1wctd2lw3r().s[30]++;
2282
2282
  throw new Error("Translation key must map to a string, but the given options will result in an object");
2283
2283
  } else {
2284
- cov_ogldeftyv().b[10][1]++;
2284
+ cov_1wctd2lw3r().b[10][1]++;
2285
2285
  }
2286
- const value = (cov_ogldeftyv().s[31]++, this.i18next.t(key, options));
2287
- cov_ogldeftyv().s[32]++;
2286
+ const value = (cov_1wctd2lw3r().s[31]++, this.i18next.t(key, options));
2287
+ cov_1wctd2lw3r().s[32]++;
2288
2288
  if (typeof value !== "string") {
2289
- cov_ogldeftyv().b[12][0]++;
2290
- cov_ogldeftyv().s[33]++;
2289
+ cov_1wctd2lw3r().b[12][0]++;
2290
+ cov_1wctd2lw3r().s[33]++;
2291
2291
  throw new Error("Translation key(s) string not found");
2292
2292
  } else {
2293
- cov_ogldeftyv().b[12][1]++;
2293
+ cov_1wctd2lw3r().b[12][1]++;
2294
2294
  }
2295
- cov_ogldeftyv().s[34]++;
2295
+ cov_1wctd2lw3r().s[34]++;
2296
2296
  return value;
2297
2297
  }
2298
2298
  /** Gets the English translation.
@@ -2303,31 +2303,31 @@ class ITwinLocalization {
2303
2303
  * @internal
2304
2304
  */
2305
2305
  getEnglishString(namespace, key, options) {
2306
- cov_ogldeftyv().f[6]++;
2307
- cov_ogldeftyv().s[35]++;
2308
- if ((cov_ogldeftyv().b[14][0]++, options?.returnDetails) || (cov_ogldeftyv().b[14][1]++, options?.returnObjects)) {
2309
- cov_ogldeftyv().b[13][0]++;
2310
- cov_ogldeftyv().s[36]++;
2306
+ cov_1wctd2lw3r().f[6]++;
2307
+ cov_1wctd2lw3r().s[35]++;
2308
+ if ((cov_1wctd2lw3r().b[14][0]++, options?.returnDetails) || (cov_1wctd2lw3r().b[14][1]++, options?.returnObjects)) {
2309
+ cov_1wctd2lw3r().b[13][0]++;
2310
+ cov_1wctd2lw3r().s[36]++;
2311
2311
  throw new Error("Translation key must map to a string, but the given options will result in an object");
2312
2312
  } else {
2313
- cov_ogldeftyv().b[13][1]++;
2313
+ cov_1wctd2lw3r().b[13][1]++;
2314
2314
  }
2315
- cov_ogldeftyv().s[37]++;
2315
+ cov_1wctd2lw3r().s[37]++;
2316
2316
  options = {
2317
2317
  ...options,
2318
2318
  ns: namespace // ensure namespace argument is used
2319
2319
  };
2320
- const en = (cov_ogldeftyv().s[38]++, this.i18next.getFixedT("en", namespace));
2321
- const str = (cov_ogldeftyv().s[39]++, en(key, options));
2322
- cov_ogldeftyv().s[40]++;
2320
+ const en = (cov_1wctd2lw3r().s[38]++, this.i18next.getFixedT("en", namespace));
2321
+ const str = (cov_1wctd2lw3r().s[39]++, en(key, options));
2322
+ cov_1wctd2lw3r().s[40]++;
2323
2323
  if (typeof str !== "string") {
2324
- cov_ogldeftyv().b[15][0]++;
2325
- cov_ogldeftyv().s[41]++;
2324
+ cov_1wctd2lw3r().b[15][0]++;
2325
+ cov_1wctd2lw3r().s[41]++;
2326
2326
  throw new Error("Translation key(s) not found");
2327
2327
  } else {
2328
- cov_ogldeftyv().b[15][1]++;
2328
+ cov_1wctd2lw3r().b[15][1]++;
2329
2329
  }
2330
- cov_ogldeftyv().s[42]++;
2330
+ cov_1wctd2lw3r().s[42]++;
2331
2331
  return str;
2332
2332
  }
2333
2333
  /** Get the promise for an already registered Namespace.
@@ -2335,20 +2335,20 @@ class ITwinLocalization {
2335
2335
  * @public
2336
2336
  */
2337
2337
  getNamespacePromise(name) {
2338
- cov_ogldeftyv().f[7]++;
2339
- cov_ogldeftyv().s[43]++;
2338
+ cov_1wctd2lw3r().f[7]++;
2339
+ cov_1wctd2lw3r().s[43]++;
2340
2340
  return this._namespaces.get(name);
2341
2341
  }
2342
2342
  /** @internal */
2343
2343
  getLanguageList() {
2344
- cov_ogldeftyv().f[8]++;
2345
- cov_ogldeftyv().s[44]++;
2344
+ cov_1wctd2lw3r().f[8]++;
2345
+ cov_1wctd2lw3r().s[44]++;
2346
2346
  return this.i18next.languages;
2347
2347
  }
2348
2348
  /** override the language detected in the browser */
2349
2349
  async changeLanguage(language) {
2350
- cov_ogldeftyv().f[9]++;
2351
- cov_ogldeftyv().s[45]++;
2350
+ cov_1wctd2lw3r().f[9]++;
2351
+ cov_1wctd2lw3r().s[45]++;
2352
2352
  return this.i18next.changeLanguage(language);
2353
2353
  }
2354
2354
  /** Register a new Namespace and return it. If the namespace is already registered, it will be returned.
@@ -2360,120 +2360,120 @@ class ITwinLocalization {
2360
2360
  * @public
2361
2361
  */
2362
2362
  async registerNamespace(name) {
2363
- cov_ogldeftyv().f[10]++;
2364
- const existing = (cov_ogldeftyv().s[46]++, this._namespaces.get(name));
2365
- cov_ogldeftyv().s[47]++;
2363
+ cov_1wctd2lw3r().f[10]++;
2364
+ const existing = (cov_1wctd2lw3r().s[46]++, this._namespaces.get(name));
2365
+ cov_1wctd2lw3r().s[47]++;
2366
2366
  if (existing !== undefined) {
2367
- cov_ogldeftyv().b[16][0]++;
2368
- cov_ogldeftyv().s[48]++;
2367
+ cov_1wctd2lw3r().b[16][0]++;
2368
+ cov_1wctd2lw3r().s[48]++;
2369
2369
  return existing;
2370
2370
  } else {
2371
- cov_ogldeftyv().b[16][1]++;
2371
+ cov_1wctd2lw3r().b[16][1]++;
2372
2372
  }
2373
- const theReadPromise = (cov_ogldeftyv().s[49]++, new Promise(resolve => {
2374
- cov_ogldeftyv().f[11]++;
2375
- cov_ogldeftyv().s[50]++;
2373
+ const theReadPromise = (cov_1wctd2lw3r().s[49]++, new Promise(resolve => {
2374
+ cov_1wctd2lw3r().f[11]++;
2375
+ cov_1wctd2lw3r().s[50]++;
2376
2376
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
2377
2377
  this.i18next.loadNamespaces(name, err => {
2378
- cov_ogldeftyv().f[12]++;
2379
- cov_ogldeftyv().s[51]++;
2378
+ cov_1wctd2lw3r().f[12]++;
2379
+ cov_1wctd2lw3r().s[51]++;
2380
2380
  if (!err) {
2381
- cov_ogldeftyv().b[17][0]++;
2382
- cov_ogldeftyv().s[52]++;
2381
+ cov_1wctd2lw3r().b[17][0]++;
2382
+ cov_1wctd2lw3r().s[52]++;
2383
2383
  return resolve();
2384
2384
  } else {
2385
- cov_ogldeftyv().b[17][1]++;
2385
+ cov_1wctd2lw3r().b[17][1]++;
2386
2386
  }
2387
2387
  // Here we got a non-null err object.
2388
2388
  // This method is called when the system has attempted to load the resources for the namespaces for each possible locale.
2389
2389
  // For example 'fr-ca' might be the most specific locale, in which case 'fr' and 'en' are fallback locales.
2390
2390
  // Using Backend from i18next-http-backend, err will be an array of strings of each namespace it tried to read and its locale.
2391
2391
  // There might be errs for some other namespaces as well as this one. We resolve the promise unless there's an error for each possible locale.
2392
- let locales = (cov_ogldeftyv().s[53]++, this.getLanguageList().map(thisLocale => {
2393
- cov_ogldeftyv().f[13]++;
2394
- cov_ogldeftyv().s[54]++;
2392
+ let locales = (cov_1wctd2lw3r().s[53]++, this.getLanguageList().map(thisLocale => {
2393
+ cov_1wctd2lw3r().f[13]++;
2394
+ cov_1wctd2lw3r().s[54]++;
2395
2395
  return `/${thisLocale}/`;
2396
2396
  }));
2397
- cov_ogldeftyv().s[55]++;
2397
+ cov_1wctd2lw3r().s[55]++;
2398
2398
  try {
2399
- cov_ogldeftyv().s[56]++;
2399
+ cov_1wctd2lw3r().s[56]++;
2400
2400
  for (const thisError of err) {
2401
- cov_ogldeftyv().s[57]++;
2401
+ cov_1wctd2lw3r().s[57]++;
2402
2402
  if (typeof thisError === "string") {
2403
- cov_ogldeftyv().b[18][0]++;
2404
- cov_ogldeftyv().s[58]++;
2403
+ cov_1wctd2lw3r().b[18][0]++;
2404
+ cov_1wctd2lw3r().s[58]++;
2405
2405
  locales = locales.filter(thisLocale => {
2406
- cov_ogldeftyv().f[14]++;
2407
- cov_ogldeftyv().s[59]++;
2406
+ cov_1wctd2lw3r().f[14]++;
2407
+ cov_1wctd2lw3r().s[59]++;
2408
2408
  return !thisError.includes(thisLocale);
2409
2409
  });
2410
2410
  } else {
2411
- cov_ogldeftyv().b[18][1]++;
2411
+ cov_1wctd2lw3r().b[18][1]++;
2412
2412
  }
2413
2413
  }
2414
2414
  } catch {
2415
- cov_ogldeftyv().s[60]++;
2415
+ cov_1wctd2lw3r().s[60]++;
2416
2416
  locales = [];
2417
2417
  }
2418
2418
  // if we removed every locale from the array, it wasn't loaded.
2419
- cov_ogldeftyv().s[61]++;
2419
+ cov_1wctd2lw3r().s[61]++;
2420
2420
  if (locales.length === 0) {
2421
- cov_ogldeftyv().b[19][0]++;
2422
- cov_ogldeftyv().s[62]++;
2421
+ cov_1wctd2lw3r().b[19][0]++;
2422
+ cov_1wctd2lw3r().s[62]++;
2423
2423
  core_bentley_1.Logger.logError("i18n", `No resources for namespace ${name} could be loaded`);
2424
2424
  } else {
2425
- cov_ogldeftyv().b[19][1]++;
2425
+ cov_1wctd2lw3r().b[19][1]++;
2426
2426
  }
2427
- cov_ogldeftyv().s[63]++;
2427
+ cov_1wctd2lw3r().s[63]++;
2428
2428
  resolve();
2429
2429
  });
2430
2430
  }));
2431
- cov_ogldeftyv().s[64]++;
2431
+ cov_1wctd2lw3r().s[64]++;
2432
2432
  this._namespaces.set(name, theReadPromise);
2433
- cov_ogldeftyv().s[65]++;
2433
+ cov_1wctd2lw3r().s[65]++;
2434
2434
  return theReadPromise;
2435
2435
  }
2436
2436
  /** @internal */
2437
2437
  unregisterNamespace(name) {
2438
- cov_ogldeftyv().f[15]++;
2439
- cov_ogldeftyv().s[66]++;
2438
+ cov_1wctd2lw3r().f[15]++;
2439
+ cov_1wctd2lw3r().s[66]++;
2440
2440
  this._namespaces.delete(name);
2441
2441
  }
2442
2442
  }
2443
- cov_ogldeftyv().s[67]++;
2443
+ cov_1wctd2lw3r().s[67]++;
2444
2444
  exports.ITwinLocalization = ITwinLocalization;
2445
2445
  class TranslationLogger {
2446
- static type = (cov_ogldeftyv().s[68]++, "logger");
2446
+ static type = (cov_1wctd2lw3r().s[68]++, "logger");
2447
2447
  log(args) {
2448
- cov_ogldeftyv().f[16]++;
2449
- cov_ogldeftyv().s[69]++;
2448
+ cov_1wctd2lw3r().f[16]++;
2449
+ cov_1wctd2lw3r().s[69]++;
2450
2450
  core_bentley_1.Logger.logInfo("i18n", this.createLogMessage(args));
2451
2451
  }
2452
2452
  warn(args) {
2453
- cov_ogldeftyv().f[17]++;
2454
- cov_ogldeftyv().s[70]++;
2453
+ cov_1wctd2lw3r().f[17]++;
2454
+ cov_1wctd2lw3r().s[70]++;
2455
2455
  core_bentley_1.Logger.logWarning("i18n", this.createLogMessage(args));
2456
2456
  }
2457
2457
  error(args) {
2458
- cov_ogldeftyv().f[18]++;
2459
- cov_ogldeftyv().s[71]++;
2458
+ cov_1wctd2lw3r().f[18]++;
2459
+ cov_1wctd2lw3r().s[71]++;
2460
2460
  core_bentley_1.Logger.logError("i18n", this.createLogMessage(args));
2461
2461
  }
2462
2462
  createLogMessage(args) {
2463
- cov_ogldeftyv().f[19]++;
2464
- let message = (cov_ogldeftyv().s[72]++, args[0]);
2465
- cov_ogldeftyv().s[73]++;
2466
- for (let i = (cov_ogldeftyv().s[74]++, 1); i < args.length; ++i) {
2467
- cov_ogldeftyv().s[75]++;
2463
+ cov_1wctd2lw3r().f[19]++;
2464
+ let message = (cov_1wctd2lw3r().s[72]++, args[0]);
2465
+ cov_1wctd2lw3r().s[73]++;
2466
+ for (let i = (cov_1wctd2lw3r().s[74]++, 1); i < args.length; ++i) {
2467
+ cov_1wctd2lw3r().s[75]++;
2468
2468
  if (typeof args[i] === "string") {
2469
- cov_ogldeftyv().b[20][0]++;
2470
- cov_ogldeftyv().s[76]++;
2469
+ cov_1wctd2lw3r().b[20][0]++;
2470
+ cov_1wctd2lw3r().s[76]++;
2471
2471
  message += `\n ${args[i]}`;
2472
2472
  } else {
2473
- cov_ogldeftyv().b[20][1]++;
2473
+ cov_1wctd2lw3r().b[20][1]++;
2474
2474
  }
2475
2475
  }
2476
- cov_ogldeftyv().s[77]++;
2476
+ cov_1wctd2lw3r().s[77]++;
2477
2477
  return message;
2478
2478
  }
2479
2479
  }