sap-ux-sap-systems-ext 1.0.13 → 1.0.14

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.
package/dist/extension.js CHANGED
@@ -208182,7 +208182,7 @@ var Entity;
208182
208182
  Entity2["TelemetrySetting"] = "telemetrySetting";
208183
208183
  })(Entity || (Entity = {}));
208184
208184
 
208185
- // ../../node_modules/.pnpm/i18next@25.10.10_typescript@5.9.3/node_modules/i18next/dist/esm/i18next.js
208185
+ // ../../node_modules/.pnpm/i18next@26.3.6_typescript@5.9.3/node_modules/i18next/dist/esm/i18next.js
208186
208186
  var isString = (obj) => typeof obj === "string";
208187
208187
  var defer = () => {
208188
208188
  let res;
@@ -208197,7 +208197,7 @@ var defer = () => {
208197
208197
  };
208198
208198
  var makeString = (object) => {
208199
208199
  if (object == null) return "";
208200
- return "" + object;
208200
+ return String(object);
208201
208201
  };
208202
208202
  var copy = (a, s, t4) => {
208203
208203
  a.forEach((m) => {
@@ -208205,7 +208205,7 @@ var copy = (a, s, t4) => {
208205
208205
  });
208206
208206
  };
208207
208207
  var lastOfPathSeparatorRegExp = /###/g;
208208
- var cleanKey = (key) => key && key.indexOf("###") > -1 ? key.replace(lastOfPathSeparatorRegExp, ".") : key;
208208
+ var cleanKey = (key) => key && key.includes("###") ? key.replace(lastOfPathSeparatorRegExp, ".") : key;
208209
208209
  var canNotTraverseDeeper = (object) => !object || isString(object);
208210
208210
  var getLastOfPath = (object, path14, Empty) => {
208211
208211
  const stack = !isString(path14) ? path14 : path14.split(".");
@@ -208276,7 +208276,7 @@ var getPathWithDefaults = (data, defaultData, key) => {
208276
208276
  var deepExtend = (target, source, overwrite) => {
208277
208277
  for (const prop in source) {
208278
208278
  if (prop !== "__proto__" && prop !== "constructor") {
208279
- if (prop in target) {
208279
+ if (Object.prototype.hasOwnProperty.call(target, prop)) {
208280
208280
  if (isString(target[prop]) || target[prop] instanceof String || isString(source[prop]) || source[prop] instanceof String) {
208281
208281
  if (overwrite) target[prop] = source[prop];
208282
208282
  } else {
@@ -208329,7 +208329,7 @@ var looksLikeObjectPathRegExpCache = new RegExpCache(20);
208329
208329
  var looksLikeObjectPath = (key, nsSeparator, keySeparator) => {
208330
208330
  nsSeparator = nsSeparator || "";
208331
208331
  keySeparator = keySeparator || "";
208332
- const possibleChars = chars.filter((c) => nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0);
208332
+ const possibleChars = chars.filter((c) => !nsSeparator.includes(c) && !keySeparator.includes(c));
208333
208333
  if (possibleChars.length === 0) return true;
208334
208334
  const r = looksLikeObjectPathRegExpCache.getRegExp(`(${possibleChars.map((c) => c === "?" ? "\\?" : c).join("|")})`);
208335
208335
  let matched = !r.test(key);
@@ -208362,7 +208362,7 @@ var deepFind = (obj, path14, keySeparator = ".") => {
208362
208362
  nextPath += tokens[j];
208363
208363
  next = current[nextPath];
208364
208364
  if (next !== void 0) {
208365
- if (["string", "number", "boolean"].indexOf(typeof next) > -1 && j < tokens.length - 1) {
208365
+ if (["string", "number", "boolean"].includes(typeof next) && j < tokens.length - 1) {
208366
208366
  continue;
208367
208367
  }
208368
208368
  i += j - i + 1;
@@ -208413,6 +208413,7 @@ var Logger = class _Logger {
208413
208413
  }
208414
208414
  forward(args, lvl, prefix, debugOnly) {
208415
208415
  if (debugOnly && !this.debug) return null;
208416
+ args = args.map((a) => isString(a) ? a.replace(/[\r\n\x00-\x1F\x7F]/g, " ") : a);
208416
208417
  if (isString(args[0])) args[0] = `${prefix}${this.prefix} ${args[0]}`;
208417
208418
  return this.logger[lvl](args);
208418
208419
  }
@@ -208451,6 +208452,14 @@ var EventEmitter = class {
208451
208452
  }
208452
208453
  this.observers[event].delete(listener);
208453
208454
  }
208455
+ once(event, listener) {
208456
+ const wrapper = (...args) => {
208457
+ listener(...args);
208458
+ this.off(event, wrapper);
208459
+ };
208460
+ this.on(event, wrapper);
208461
+ return this;
208462
+ }
208454
208463
  emit(event, ...args) {
208455
208464
  if (this.observers[event]) {
208456
208465
  const cloned = Array.from(this.observers[event].entries());
@@ -208464,7 +208473,7 @@ var EventEmitter = class {
208464
208473
  const cloned = Array.from(this.observers["*"].entries());
208465
208474
  cloned.forEach(([observer, numTimesAdded]) => {
208466
208475
  for (let i = 0; i < numTimesAdded; i++) {
208467
- observer.apply(observer, [event, ...args]);
208476
+ observer(event, ...args);
208468
208477
  }
208469
208478
  });
208470
208479
  }
@@ -208486,7 +208495,7 @@ var ResourceStore = class extends EventEmitter {
208486
208495
  }
208487
208496
  }
208488
208497
  addNamespaces(ns) {
208489
- if (this.options.ns.indexOf(ns) < 0) {
208498
+ if (!this.options.ns.includes(ns)) {
208490
208499
  this.options.ns.push(ns);
208491
208500
  }
208492
208501
  }
@@ -208500,7 +208509,7 @@ var ResourceStore = class extends EventEmitter {
208500
208509
  const keySeparator = options.keySeparator !== void 0 ? options.keySeparator : this.options.keySeparator;
208501
208510
  const ignoreJSONStructure = options.ignoreJSONStructure !== void 0 ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;
208502
208511
  let path14;
208503
- if (lng.indexOf(".") > -1) {
208512
+ if (lng.includes(".")) {
208504
208513
  path14 = lng.split(".");
208505
208514
  } else {
208506
208515
  path14 = [lng, ns];
@@ -208515,7 +208524,7 @@ var ResourceStore = class extends EventEmitter {
208515
208524
  }
208516
208525
  }
208517
208526
  const result = getPath(this.data, path14);
208518
- if (!result && !ns && !key && lng.indexOf(".") > -1) {
208527
+ if (!result && !ns && !key && lng.includes(".")) {
208519
208528
  lng = path14[0];
208520
208529
  ns = path14[1];
208521
208530
  key = path14.slice(2).join(".");
@@ -208529,7 +208538,7 @@ var ResourceStore = class extends EventEmitter {
208529
208538
  const keySeparator = options.keySeparator !== void 0 ? options.keySeparator : this.options.keySeparator;
208530
208539
  let path14 = [lng, ns];
208531
208540
  if (key) path14 = path14.concat(keySeparator ? key.split(keySeparator) : key);
208532
- if (lng.indexOf(".") > -1) {
208541
+ if (lng.includes(".")) {
208533
208542
  path14 = lng.split(".");
208534
208543
  value = ns;
208535
208544
  ns = path14[1];
@@ -208553,7 +208562,7 @@ var ResourceStore = class extends EventEmitter {
208553
208562
  skipCopy: false
208554
208563
  }) {
208555
208564
  let path14 = [lng, ns];
208556
- if (lng.indexOf(".") > -1) {
208565
+ if (lng.includes(".")) {
208557
208566
  path14 = lng.split(".");
208558
208567
  deep = resources;
208559
208568
  resources = ns;
@@ -208631,16 +208640,19 @@ function keysFromSelector(selector, opts) {
208631
208640
  } = selector(createProxy());
208632
208641
  const keySeparator = opts?.keySeparator ?? ".";
208633
208642
  const nsSeparator = opts?.nsSeparator ?? ":";
208643
+ const strict = opts?.enableSelector === "strict";
208634
208644
  if (path14.length > 1 && nsSeparator) {
208635
208645
  const ns = opts?.ns;
208636
- const nsArray = Array.isArray(ns) ? ns : null;
208637
- if (nsArray && nsArray.length > 1 && nsArray.slice(1).includes(path14[0])) {
208638
- return `${path14[0]}${nsSeparator}${path14.slice(1).join(keySeparator)}`;
208646
+ const nsList = strict ? Array.isArray(ns) ? ns : ns ? [ns] : null : Array.isArray(ns) ? ns : null;
208647
+ if (nsList) {
208648
+ const candidates = strict ? nsList : nsList.length > 1 ? nsList.slice(1) : [];
208649
+ if (candidates.includes(path14[0])) {
208650
+ return `${path14[0]}${nsSeparator}${path14.slice(1).join(keySeparator)}`;
208651
+ }
208639
208652
  }
208640
208653
  }
208641
208654
  return path14.join(keySeparator);
208642
208655
  }
208643
- var checkedLoadedFor = {};
208644
208656
  var shouldHandleAsObject = (res) => !isString(res) && typeof res !== "boolean" && typeof res !== "number";
208645
208657
  var Translator = class _Translator extends EventEmitter {
208646
208658
  constructor(services2, options = {}) {
@@ -208651,6 +208663,7 @@ var Translator = class _Translator extends EventEmitter {
208651
208663
  this.options.keySeparator = ".";
208652
208664
  }
208653
208665
  this.logger = baseLogger.create("translator");
208666
+ this.checkedLoadedFor = {};
208654
208667
  }
208655
208668
  changeLanguage(lng) {
208656
208669
  if (lng) this.language = lng;
@@ -208675,7 +208688,7 @@ var Translator = class _Translator extends EventEmitter {
208675
208688
  if (nsSeparator === void 0) nsSeparator = ":";
208676
208689
  const keySeparator = opt.keySeparator !== void 0 ? opt.keySeparator : this.options.keySeparator;
208677
208690
  let namespaces = opt.ns || this.options.defaultNS || [];
208678
- const wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1;
208691
+ const wouldCheckForNsInKey = nsSeparator && key.includes(nsSeparator);
208679
208692
  const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !opt.keySeparator && !this.options.userDefinedNsSeparator && !opt.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);
208680
208693
  if (wouldCheckForNsInKey && !seemsNaturalLanguage) {
208681
208694
  const m = key.match(this.interpolator.nestingRegexp);
@@ -208686,7 +208699,7 @@ var Translator = class _Translator extends EventEmitter {
208686
208699
  };
208687
208700
  }
208688
208701
  const parts = key.split(nsSeparator);
208689
- if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();
208702
+ if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.includes(parts[0])) namespaces = parts.shift();
208690
208703
  key = parts.join(keySeparator);
208691
208704
  }
208692
208705
  return {
@@ -208773,7 +208786,7 @@ var Translator = class _Translator extends EventEmitter {
208773
208786
  }
208774
208787
  const handleAsObject = shouldHandleAsObject(resForObjHndl);
208775
208788
  const resType = Object.prototype.toString.apply(resForObjHndl);
208776
- if (handleAsObjectInI18nFormat && resForObjHndl && handleAsObject && noObject.indexOf(resType) < 0 && !(isString(joinArrays) && Array.isArray(resForObjHndl))) {
208789
+ if (handleAsObjectInI18nFormat && resForObjHndl && handleAsObject && !noObject.includes(resType) && !(isString(joinArrays) && Array.isArray(resForObjHndl))) {
208777
208790
  if (!opt.returnObjects && !this.options.returnObjects) {
208778
208791
  if (!this.options.returnedObjectHandler) {
208779
208792
  this.logger.warn("accessing an object - but returnObjects options is not enabled!");
@@ -208837,7 +208850,7 @@ var Translator = class _Translator extends EventEmitter {
208837
208850
  const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? void 0 : res;
208838
208851
  const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;
208839
208852
  if (usedKey || usedDefault || updateMissing) {
208840
- this.logger.log(updateMissing ? "updateKey" : "missingKey", lng, namespace, key, updateMissing ? defaultValue : res);
208853
+ this.logger.log(updateMissing ? "updateKey" : "missingKey", lng, namespace, needsPluralHandling && !updateMissing ? `${key}${this.pluralResolver.getSuffix(lng, opt.count, opt)}` : key, updateMissing ? defaultValue : res);
208841
208854
  if (keySeparator) {
208842
208855
  const fk = this.resolve(key, {
208843
208856
  ...opt,
@@ -208869,7 +208882,7 @@ var Translator = class _Translator extends EventEmitter {
208869
208882
  if (this.options.saveMissingPlurals && needsPluralHandling) {
208870
208883
  lngs.forEach((language) => {
208871
208884
  const suffixes = this.pluralResolver.getSuffixes(language, opt);
208872
- if (needsZeroSuffixLookup && opt[`defaultValue${this.options.pluralSeparator}zero`] && suffixes.indexOf(`${this.options.pluralSeparator}zero`) < 0) {
208885
+ if (needsZeroSuffixLookup && opt[`defaultValue${this.options.pluralSeparator}zero`] && !suffixes.includes(`${this.options.pluralSeparator}zero`)) {
208873
208886
  suffixes.push(`${this.options.pluralSeparator}zero`);
208874
208887
  }
208875
208888
  suffixes.forEach((suffix) => {
@@ -208979,8 +208992,8 @@ var Translator = class _Translator extends EventEmitter {
208979
208992
  namespaces.forEach((ns) => {
208980
208993
  if (this.isValidLookup(found)) return;
208981
208994
  usedNS = ns;
208982
- if (!checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils?.hasLoadedNamespace && !this.utils?.hasLoadedNamespace(usedNS)) {
208983
- checkedLoadedFor[`${codes[0]}-${ns}`] = true;
208995
+ if (!this.checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils?.hasLoadedNamespace && !this.utils?.hasLoadedNamespace(usedNS)) {
208996
+ this.checkedLoadedFor[`${codes[0]}-${ns}`] = true;
208984
208997
  this.logger.warn(`key "${usedKey}" for languages "${codes.join(", ")}" won't get resolved as namespace "${usedNS}" was not yet loaded`, "This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");
208985
208998
  }
208986
208999
  codes.forEach((code) => {
@@ -208995,7 +209008,7 @@ var Translator = class _Translator extends EventEmitter {
208995
209008
  const zeroSuffix = `${this.options.pluralSeparator}zero`;
208996
209009
  const ordinalPrefix = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;
208997
209010
  if (needsPluralHandling) {
208998
- if (opt.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {
209011
+ if (opt.ordinal && pluralSuffix.startsWith(ordinalPrefix)) {
208999
209012
  finalKeys.push(key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));
209000
209013
  }
209001
209014
  finalKeys.push(key + pluralSuffix);
@@ -209007,7 +209020,7 @@ var Translator = class _Translator extends EventEmitter {
209007
209020
  const contextKey = `${key}${this.options.contextSeparator || "_"}${opt.context}`;
209008
209021
  finalKeys.push(contextKey);
209009
209022
  if (needsPluralHandling) {
209010
- if (opt.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {
209023
+ if (opt.ordinal && pluralSuffix.startsWith(ordinalPrefix)) {
209011
209024
  finalKeys.push(contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));
209012
209025
  }
209013
209026
  finalKeys.push(contextKey + pluralSuffix);
@@ -209047,7 +209060,10 @@ var Translator = class _Translator extends EventEmitter {
209047
209060
  const useOptionsReplaceForData = options.replace && !isString(options.replace);
209048
209061
  let data = useOptionsReplaceForData ? options.replace : options;
209049
209062
  if (useOptionsReplaceForData && typeof options.count !== "undefined") {
209050
- data.count = options.count;
209063
+ data = {
209064
+ ...data,
209065
+ count: options.count
209066
+ };
209051
209067
  }
209052
209068
  if (this.options.interpolation.defaultVariables) {
209053
209069
  data = {
@@ -209068,7 +209084,7 @@ var Translator = class _Translator extends EventEmitter {
209068
209084
  static hasDefaultValue(options) {
209069
209085
  const prefix = "defaultValue";
209070
209086
  for (const option in options) {
209071
- if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && void 0 !== options[option]) {
209087
+ if (Object.prototype.hasOwnProperty.call(options, option) && option.startsWith(prefix) && void 0 !== options[option]) {
209072
209088
  return true;
209073
209089
  }
209074
209090
  }
@@ -209083,7 +209099,7 @@ var LanguageUtil = class {
209083
209099
  }
209084
209100
  getScriptPartFromCode(code) {
209085
209101
  code = getCleanedCode(code);
209086
- if (!code || code.indexOf("-") < 0) return null;
209102
+ if (!code || !code.includes("-")) return null;
209087
209103
  const p = code.split("-");
209088
209104
  if (p.length === 2) return null;
209089
209105
  p.pop();
@@ -209092,12 +209108,12 @@ var LanguageUtil = class {
209092
209108
  }
209093
209109
  getLanguagePartFromCode(code) {
209094
209110
  code = getCleanedCode(code);
209095
- if (!code || code.indexOf("-") < 0) return code;
209111
+ if (!code || !code.includes("-")) return code;
209096
209112
  const p = code.split("-");
209097
209113
  return this.formatLanguageCode(p[0]);
209098
209114
  }
209099
209115
  formatLanguageCode(code) {
209100
- if (isString(code) && code.indexOf("-") > -1) {
209116
+ if (isString(code) && code.includes("-")) {
209101
209117
  let formattedCode;
209102
209118
  try {
209103
209119
  formattedCode = Intl.getCanonicalLocales(code)[0];
@@ -209118,7 +209134,7 @@ var LanguageUtil = class {
209118
209134
  if (this.options.load === "languageOnly" || this.options.nonExplicitSupportedLngs) {
209119
209135
  code = this.getLanguagePartFromCode(code);
209120
209136
  }
209121
- return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;
209137
+ return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.includes(code);
209122
209138
  }
209123
209139
  getBestMatchFromCodes(codes) {
209124
209140
  if (!codes) return null;
@@ -209136,10 +209152,11 @@ var LanguageUtil = class {
209136
209152
  const lngOnly = this.getLanguagePartFromCode(code);
209137
209153
  if (this.isSupportedCode(lngOnly)) return found = lngOnly;
209138
209154
  found = this.options.supportedLngs.find((supportedLng) => {
209139
- if (supportedLng === lngOnly) return supportedLng;
209140
- if (supportedLng.indexOf("-") < 0 && lngOnly.indexOf("-") < 0) return;
209141
- if (supportedLng.indexOf("-") > 0 && lngOnly.indexOf("-") < 0 && supportedLng.substring(0, supportedLng.indexOf("-")) === lngOnly) return supportedLng;
209142
- if (supportedLng.indexOf(lngOnly) === 0 && lngOnly.length > 1) return supportedLng;
209155
+ if (supportedLng === lngOnly) return true;
209156
+ if (!supportedLng.includes("-") && !lngOnly.includes("-")) return false;
209157
+ if (supportedLng.includes("-") && !lngOnly.includes("-") && supportedLng.slice(0, supportedLng.indexOf("-")) === lngOnly) return true;
209158
+ if (supportedLng.startsWith(lngOnly) && lngOnly.length > 1) return true;
209159
+ return false;
209143
209160
  });
209144
209161
  });
209145
209162
  }
@@ -209170,7 +209187,7 @@ var LanguageUtil = class {
209170
209187
  this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`);
209171
209188
  }
209172
209189
  };
209173
- if (isString(code) && (code.indexOf("-") > -1 || code.indexOf("_") > -1)) {
209190
+ if (isString(code) && (code.includes("-") || code.includes("_"))) {
209174
209191
  if (this.options.load !== "languageOnly") addCode(this.formatLanguageCode(code));
209175
209192
  if (this.options.load !== "languageOnly" && this.options.load !== "currentOnly") addCode(this.getScriptPartFromCode(code));
209176
209193
  if (this.options.load !== "currentOnly") addCode(this.getLanguagePartFromCode(code));
@@ -209178,7 +209195,7 @@ var LanguageUtil = class {
209178
209195
  addCode(this.formatLanguageCode(code));
209179
209196
  }
209180
209197
  fallbackCodes.forEach((fc) => {
209181
- if (codes.indexOf(fc) < 0) addCode(this.formatLanguageCode(fc));
209198
+ if (!codes.includes(fc)) addCode(this.formatLanguageCode(fc));
209182
209199
  });
209183
209200
  return codes;
209184
209201
  }
@@ -209302,8 +209319,8 @@ var Interpolator = class {
209302
209319
  this.prefix = prefix ? regexEscape(prefix) : prefixEscaped || "{{";
209303
209320
  this.suffix = suffix ? regexEscape(suffix) : suffixEscaped || "}}";
209304
209321
  this.formatSeparator = formatSeparator || ",";
209305
- this.unescapePrefix = unescapeSuffix ? "" : unescapePrefix || "-";
209306
- this.unescapeSuffix = this.unescapePrefix ? "" : unescapeSuffix || "";
209322
+ this.unescapePrefix = unescapeSuffix ? "" : unescapePrefix ? regexEscape(unescapePrefix) : "-";
209323
+ this.unescapeSuffix = this.unescapePrefix ? "" : unescapeSuffix ? regexEscape(unescapeSuffix) : "";
209307
209324
  this.nestingPrefix = nestingPrefix ? regexEscape(nestingPrefix) : nestingPrefixEscaped || regexEscape("$t(");
209308
209325
  this.nestingSuffix = nestingSuffix ? regexEscape(nestingSuffix) : nestingSuffixEscaped || regexEscape(")");
209309
209326
  this.nestingOptionsSeparator = nestingOptionsSeparator || ",";
@@ -209332,7 +209349,7 @@ var Interpolator = class {
209332
209349
  let replaces;
209333
209350
  const defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};
209334
209351
  const handleFormat = (key) => {
209335
- if (key.indexOf(this.formatSeparator) < 0) {
209352
+ if (!key.includes(this.formatSeparator)) {
209336
209353
  const path14 = deepFindWithDefaults(data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure);
209337
209354
  return this.alwaysFormat ? this.format(path14, void 0, lng, {
209338
209355
  ...options,
@@ -209350,14 +209367,17 @@ var Interpolator = class {
209350
209367
  });
209351
209368
  };
209352
209369
  this.resetRegExp();
209370
+ if (!this.escapeValue && typeof str === "string" && /\$t\([^)]*\{[^}]*\{\{/.test(str)) {
209371
+ this.logger.warn("nesting options string contains interpolated variables with escapeValue: false \u2014 if any of those values are attacker-controlled they can inject additional nesting options (e.g. redirect lng/ns). Sanitise untrusted input before passing it to t(), or keep escapeValue: true.");
209372
+ }
209353
209373
  const missingInterpolationHandler = options?.missingInterpolationHandler || this.options.missingInterpolationHandler;
209354
209374
  const skipOnVariables = options?.interpolation?.skipOnVariables !== void 0 ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;
209355
209375
  const todos = [{
209356
209376
  regex: this.regexpUnescape,
209357
- safeValue: (val) => regexSafe(val)
209377
+ safeValue: (val) => val
209358
209378
  }, {
209359
209379
  regex: this.regexp,
209360
- safeValue: (val) => this.escapeValue ? regexSafe(this.escape(val)) : regexSafe(val)
209380
+ safeValue: (val) => this.escapeValue ? this.escape(val) : val
209361
209381
  }];
209362
209382
  todos.forEach((todo) => {
209363
209383
  replaces = 0;
@@ -209381,9 +209401,9 @@ var Interpolator = class {
209381
209401
  value = makeString(value);
209382
209402
  }
209383
209403
  const safeValue = todo.safeValue(value);
209384
- str = str.replace(match[0], safeValue);
209404
+ str = str.replace(match[0], regexSafe(safeValue));
209385
209405
  if (skipOnVariables) {
209386
- todo.regex.lastIndex += value.length;
209406
+ todo.regex.lastIndex += safeValue.length;
209387
209407
  todo.regex.lastIndex -= match[0].length;
209388
209408
  } else {
209389
209409
  todo.regex.lastIndex = 0;
@@ -209402,7 +209422,7 @@ var Interpolator = class {
209402
209422
  let clonedOptions;
209403
209423
  const handleHasOptions = (key, inheritedOptions) => {
209404
209424
  const sep11 = this.nestingOptionsSeparator;
209405
- if (key.indexOf(sep11) < 0) return key;
209425
+ if (!key.includes(sep11)) return key;
209406
209426
  const c = key.split(new RegExp(`${regexEscape(sep11)}[ ]*{`));
209407
209427
  let optionsString = `{${c[1]}`;
209408
209428
  key = c[0];
@@ -209422,7 +209442,7 @@ var Interpolator = class {
209422
209442
  this.logger.warn(`failed parsing options string in nesting for key ${key}`, e);
209423
209443
  return `${key}${sep11}${optionsString}`;
209424
209444
  }
209425
- if (clonedOptions.defaultValue && clonedOptions.defaultValue.indexOf(this.prefix) > -1) delete clonedOptions.defaultValue;
209445
+ if (clonedOptions.defaultValue && clonedOptions.defaultValue.includes(this.prefix)) delete clonedOptions.defaultValue;
209426
209446
  return key;
209427
209447
  };
209428
209448
  while (match = this.nestingRegexp.exec(str)) {
@@ -209433,7 +209453,7 @@ var Interpolator = class {
209433
209453
  clonedOptions = clonedOptions.replace && !isString(clonedOptions.replace) ? clonedOptions.replace : clonedOptions;
209434
209454
  clonedOptions.applyPostProcessor = false;
209435
209455
  delete clonedOptions.defaultValue;
209436
- const keyEndIndex = /{.*}/.test(match[1]) ? match[1].lastIndexOf("}") + 1 : match[1].indexOf(this.formatSeparator);
209456
+ const keyEndIndex = /{.*}/s.test(match[1]) ? match[1].lastIndexOf("}") + 1 : match[1].indexOf(this.formatSeparator);
209437
209457
  if (keyEndIndex !== -1) {
209438
209458
  formatters = match[1].slice(keyEndIndex).split(this.formatSeparator).map((elem) => elem.trim()).filter(Boolean);
209439
209459
  match[1] = match[1].slice(0, keyEndIndex);
@@ -209460,13 +209480,13 @@ var Interpolator = class {
209460
209480
  var parseFormatStr = (formatStr) => {
209461
209481
  let formatName = formatStr.toLowerCase().trim();
209462
209482
  const formatOptions = {};
209463
- if (formatStr.indexOf("(") > -1) {
209483
+ if (formatStr.includes("(")) {
209464
209484
  const p = formatStr.split("(");
209465
209485
  formatName = p[0].toLowerCase().trim();
209466
- const optStr = p[1].substring(0, p[1].length - 1);
209467
- if (formatName === "currency" && optStr.indexOf(":") < 0) {
209486
+ const optStr = p[1].slice(0, -1);
209487
+ if (formatName === "currency" && !optStr.includes(":")) {
209468
209488
  if (!formatOptions.currency) formatOptions.currency = optStr.trim();
209469
- } else if (formatName === "relativetime" && optStr.indexOf(":") < 0) {
209489
+ } else if (formatName === "relativetime" && !optStr.includes(":")) {
209470
209490
  if (!formatOptions.range) formatOptions.range = optStr.trim();
209471
209491
  } else {
209472
209492
  const opts = optStr.split(";");
@@ -209560,10 +209580,16 @@ var Formatter = class {
209560
209580
  this.formats[name2.toLowerCase().trim()] = createCachedFormatter(fc);
209561
209581
  }
209562
209582
  format(value, format5, lng, options = {}) {
209563
- const formats = format5.split(this.formatSeparator);
209564
- if (formats.length > 1 && formats[0].indexOf("(") > 1 && formats[0].indexOf(")") < 0 && formats.find((f) => f.indexOf(")") > -1)) {
209565
- const lastIndex = formats.findIndex((f) => f.indexOf(")") > -1);
209566
- formats[0] = [formats[0], ...formats.splice(1, lastIndex)].join(this.formatSeparator);
209583
+ if (!format5) return value;
209584
+ if (value == null) return value;
209585
+ const rawFormats = format5.split(this.formatSeparator);
209586
+ const formats = [];
209587
+ for (let i = 0; i < rawFormats.length; i++) {
209588
+ let f = rawFormats[i];
209589
+ while (f.indexOf("(") > -1 && !f.includes(")") && i + 1 < rawFormats.length) {
209590
+ f = `${f}${this.formatSeparator}${rawFormats[++i]}`;
209591
+ }
209592
+ formats.push(f);
209567
209593
  }
209568
209594
  const result = formats.reduce((mem, f) => {
209569
209595
  const {
@@ -209716,7 +209742,7 @@ var Connector = class extends EventEmitter {
209716
209742
  }
209717
209743
  if (err && data && tried < this.maxRetries) {
209718
209744
  setTimeout(() => {
209719
- this.read.call(this, lng, ns, fcName, tried + 1, wait * 2, callback);
209745
+ this.read(lng, ns, fcName, tried + 1, wait * 2, callback);
209720
209746
  }, wait);
209721
209747
  return;
209722
209748
  }
@@ -209820,11 +209846,11 @@ var get = () => ({
209820
209846
  nonExplicitSupportedLngs: false,
209821
209847
  load: "all",
209822
209848
  preload: false,
209823
- simplifyPluralSuffix: true,
209824
209849
  keySeparator: ".",
209825
209850
  nsSeparator: ":",
209826
209851
  pluralSeparator: "_",
209827
209852
  contextSeparator: "_",
209853
+ enableSelector: false,
209828
209854
  partialBundledLanguages: false,
209829
209855
  saveMissing: false,
209830
209856
  updateMissing: false,
@@ -209857,7 +209883,6 @@ var get = () => ({
209857
209883
  },
209858
209884
  interpolation: {
209859
209885
  escapeValue: true,
209860
- format: (value) => value,
209861
209886
  prefix: "{{",
209862
209887
  suffix: "}}",
209863
209888
  formatSeparator: ",",
@@ -209874,10 +209899,9 @@ var transformOptions = (options) => {
209874
209899
  if (isString(options.ns)) options.ns = [options.ns];
209875
209900
  if (isString(options.fallbackLng)) options.fallbackLng = [options.fallbackLng];
209876
209901
  if (isString(options.fallbackNS)) options.fallbackNS = [options.fallbackNS];
209877
- if (options.supportedLngs?.indexOf?.("cimode") < 0) {
209902
+ if (options.supportedLngs && !options.supportedLngs.includes("cimode")) {
209878
209903
  options.supportedLngs = options.supportedLngs.concat(["cimode"]);
209879
209904
  }
209880
- if (typeof options.initImmediate === "boolean") options.initAsync = options.initImmediate;
209881
209905
  return options;
209882
209906
  };
209883
209907
  var noop = () => {
@@ -209890,28 +209914,6 @@ var bindMemberFunctions = (inst) => {
209890
209914
  }
209891
209915
  });
209892
209916
  };
209893
- var SUPPORT_NOTICE_KEY = "__i18next_supportNoticeShown";
209894
- var getSupportNoticeShown = () => {
209895
- if (typeof globalThis !== "undefined" && !!globalThis[SUPPORT_NOTICE_KEY]) return true;
209896
- if (typeof process !== "undefined" && process.env && process.env.I18NEXT_NO_SUPPORT_NOTICE) return true;
209897
- if (typeof process !== "undefined" && process.env && process.env.NODE_ENV === "production") return true;
209898
- return false;
209899
- };
209900
- var setSupportNoticeShown = () => {
209901
- if (typeof globalThis !== "undefined") globalThis[SUPPORT_NOTICE_KEY] = true;
209902
- };
209903
- var usesLocize = (inst) => {
209904
- if (inst?.modules?.backend?.name?.indexOf("Locize") > 0) return true;
209905
- if (inst?.modules?.backend?.constructor?.name?.indexOf("Locize") > 0) return true;
209906
- if (inst?.options?.backend?.backends) {
209907
- if (inst.options.backend.backends.some((b) => b?.name?.indexOf("Locize") > 0 || b?.constructor?.name?.indexOf("Locize") > 0)) return true;
209908
- }
209909
- if (inst?.options?.backend?.projectId) return true;
209910
- if (inst?.options?.backend?.backendOptions) {
209911
- if (inst.options.backend.backendOptions.some((b) => b?.projectId)) return true;
209912
- }
209913
- return false;
209914
- };
209915
209917
  var I18n = class _I18n extends EventEmitter {
209916
209918
  constructor(options = {}, callback) {
209917
209919
  super();
@@ -209941,7 +209943,7 @@ var I18n = class _I18n extends EventEmitter {
209941
209943
  if (options.defaultNS == null && options.ns) {
209942
209944
  if (isString(options.ns)) {
209943
209945
  options.defaultNS = options.ns;
209944
- } else if (options.ns.indexOf("translation") < 0) {
209946
+ } else if (!options.ns.includes("translation")) {
209945
209947
  options.defaultNS = options.ns[0];
209946
209948
  }
209947
209949
  }
@@ -209964,10 +209966,6 @@ var I18n = class _I18n extends EventEmitter {
209964
209966
  if (typeof this.options.overloadTranslationOptionHandler !== "function") {
209965
209967
  this.options.overloadTranslationOptionHandler = defOpts.overloadTranslationOptionHandler;
209966
209968
  }
209967
- if (this.options.showSupportNotice !== false && !usesLocize(this) && !getSupportNoticeShown()) {
209968
- if (typeof console !== "undefined" && typeof console.info !== "undefined") console.info("\u{1F310} i18next is made possible by our own product, Locize \u2014 consider powering your project with managed localization (AI, CDN, integrations): https://locize.com \u{1F499}");
209969
- setSupportNoticeShown();
209970
- }
209971
209969
  const createClassOnDemand = (ClassOrObject) => {
209972
209970
  if (!ClassOrObject) return null;
209973
209971
  if (typeof ClassOrObject === "function") return new ClassOrObject();
@@ -209992,14 +209990,9 @@ var I18n = class _I18n extends EventEmitter {
209992
209990
  s.resourceStore = this.store;
209993
209991
  s.languageUtils = lu;
209994
209992
  s.pluralResolver = new PluralResolver(lu, {
209995
- prepend: this.options.pluralSeparator,
209996
- simplifyPluralSuffix: this.options.simplifyPluralSuffix
209993
+ prepend: this.options.pluralSeparator
209997
209994
  });
209998
- const usingLegacyFormatFunction = this.options.interpolation.format && this.options.interpolation.format !== defOpts.interpolation.format;
209999
- if (usingLegacyFormatFunction) {
210000
- this.logger.deprecate(`init: you are still using the legacy format function, please use the new approach: https://www.i18next.com/translation-function/formatting`);
210001
- }
210002
- if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) {
209995
+ if (formatter) {
210003
209996
  s.formatter = createClassOnDemand(formatter);
210004
209997
  if (s.formatter.init) s.formatter.init(s, this.options);
210005
209998
  this.options.interpolation.format = s.formatter.format.bind(s.formatter);
@@ -210059,7 +210052,7 @@ var I18n = class _I18n extends EventEmitter {
210059
210052
  deferred.resolve(t4);
210060
210053
  callback(err, t4);
210061
210054
  };
210062
- if (this.languages && !this.isInitialized) return finish(null, this.t.bind(this));
210055
+ if ((this.languages || this.isLanguageChangingTo) && !this.isInitialized) return finish(null, this.t.bind(this));
210063
210056
  this.changeLanguage(this.options.lng, finish);
210064
210057
  };
210065
210058
  if (this.options.resources || !this.options.initAsync) {
@@ -210082,7 +210075,7 @@ var I18n = class _I18n extends EventEmitter {
210082
210075
  const lngs = this.services.languageUtils.toResolveHierarchy(lng);
210083
210076
  lngs.forEach((l) => {
210084
210077
  if (l === "cimode") return;
210085
- if (toLoad.indexOf(l) < 0) toLoad.push(l);
210078
+ if (!toLoad.includes(l)) toLoad.push(l);
210086
210079
  });
210087
210080
  };
210088
210081
  if (!usedLng) {
@@ -210147,16 +210140,16 @@ var I18n = class _I18n extends EventEmitter {
210147
210140
  }
210148
210141
  setResolvedLanguage(l) {
210149
210142
  if (!l || !this.languages) return;
210150
- if (["cimode", "dev"].indexOf(l) > -1) return;
210143
+ if (["cimode", "dev"].includes(l)) return;
210151
210144
  for (let li = 0; li < this.languages.length; li++) {
210152
210145
  const lngInLngs = this.languages[li];
210153
- if (["cimode", "dev"].indexOf(lngInLngs) > -1) continue;
210146
+ if (["cimode", "dev"].includes(lngInLngs)) continue;
210154
210147
  if (this.store.hasLanguageSomeTranslations(lngInLngs)) {
210155
210148
  this.resolvedLanguage = lngInLngs;
210156
210149
  break;
210157
210150
  }
210158
210151
  }
210159
- if (!this.resolvedLanguage && this.languages.indexOf(l) < 0 && this.store.hasLanguageSomeTranslations(l)) {
210152
+ if (!this.resolvedLanguage && !this.languages.includes(l) && this.store.hasLanguageSomeTranslations(l)) {
210160
210153
  this.resolvedLanguage = l;
210161
210154
  this.languages.unshift(l);
210162
210155
  }
@@ -210214,7 +210207,8 @@ var I18n = class _I18n extends EventEmitter {
210214
210207
  }
210215
210208
  return deferred;
210216
210209
  }
210217
- getFixedT(lng, ns, keyPrefix) {
210210
+ getFixedT(lng, ns, keyPrefix, fixedOpts) {
210211
+ const scopeNs = fixedOpts?.scopeNs;
210218
210212
  const fixedT = (key, opts, ...rest) => {
210219
210213
  let o;
210220
210214
  if (typeof opts !== "object") {
@@ -210226,12 +210220,14 @@ var I18n = class _I18n extends EventEmitter {
210226
210220
  }
210227
210221
  o.lng = o.lng || fixedT.lng;
210228
210222
  o.lngs = o.lngs || fixedT.lngs;
210223
+ const explicitCallNs = o.ns !== void 0 && o.ns !== null;
210229
210224
  o.ns = o.ns || fixedT.ns;
210230
210225
  if (o.keyPrefix !== "") o.keyPrefix = o.keyPrefix || keyPrefix || fixedT.keyPrefix;
210231
210226
  const selectorOpts = {
210232
210227
  ...this.options,
210233
210228
  ...o
210234
210229
  };
210230
+ if (Array.isArray(scopeNs) && !explicitCallNs) selectorOpts.ns = scopeNs;
210235
210231
  if (typeof o.keyPrefix === "function") o.keyPrefix = keysFromSelector(o.keyPrefix, selectorOpts);
210236
210232
  const keySeparator = this.options.keySeparator || ".";
210237
210233
  let resultKey;
@@ -210298,7 +210294,7 @@ var I18n = class _I18n extends EventEmitter {
210298
210294
  }
210299
210295
  if (isString(ns)) ns = [ns];
210300
210296
  ns.forEach((n) => {
210301
- if (this.options.ns.indexOf(n) < 0) this.options.ns.push(n);
210297
+ if (!this.options.ns.includes(n)) this.options.ns.push(n);
210302
210298
  });
210303
210299
  this.loadResources((err) => {
210304
210300
  deferred.resolve();
@@ -210310,7 +210306,7 @@ var I18n = class _I18n extends EventEmitter {
210310
210306
  const deferred = defer();
210311
210307
  if (isString(lngs)) lngs = [lngs];
210312
210308
  const preloaded = this.options.preload || [];
210313
- const newLngs = lngs.filter((lng) => preloaded.indexOf(lng) < 0 && this.services.languageUtils.isSupportedCode(lng));
210309
+ const newLngs = lngs.filter((lng) => !preloaded.includes(lng) && this.services.languageUtils.isSupportedCode(lng));
210314
210310
  if (!newLngs.length) {
210315
210311
  if (callback) callback();
210316
210312
  return Promise.resolve();
@@ -210336,7 +210332,7 @@ var I18n = class _I18n extends EventEmitter {
210336
210332
  const rtlLngs = ["ar", "shu", "sqr", "ssh", "xaa", "yhd", "yud", "aao", "abh", "abv", "acm", "acq", "acw", "acx", "acy", "adf", "ads", "aeb", "aec", "afb", "ajp", "apc", "apd", "arb", "arq", "ars", "ary", "arz", "auz", "avl", "ayh", "ayl", "ayn", "ayp", "bbz", "pga", "he", "iw", "ps", "pbt", "pbu", "pst", "prp", "prd", "ug", "ur", "ydd", "yds", "yih", "ji", "yi", "hbo", "men", "xmn", "fa", "jpr", "peo", "pes", "prs", "dv", "sam", "ckb"];
210337
210333
  const languageUtils = this.services?.languageUtils || new LanguageUtil(get());
210338
210334
  if (lng.toLowerCase().indexOf("-latn") > 1) return "ltr";
210339
- return rtlLngs.indexOf(languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf("-arab") > 1 ? "rtl" : "ltr";
210335
+ return rtlLngs.includes(languageUtils.getLanguagePartFromCode(lng)) || lng.toLowerCase().indexOf("-arab") > 1 ? "rtl" : "ltr";
210340
210336
  }
210341
210337
  static createInstance(options = {}, callback) {
210342
210338
  const instance2 = new _I18n(options, callback);
@@ -210476,8 +210472,7 @@ async function initI18n() {
210476
210472
  defaultNS: NS,
210477
210473
  fallbackNS: "default",
210478
210474
  ns: [NS],
210479
- interpolation: { escapeValue: false },
210480
- showSupportNotice: false
210475
+ interpolation: { escapeValue: false }
210481
210476
  });
210482
210477
  await i18nInstance.init();
210483
210478
  }
@@ -212805,8 +212800,7 @@ var i18n = instance.createInstance();
212805
212800
  async function initI18n2() {
212806
212801
  await i18n.init({
212807
212802
  lng: "en",
212808
- fallbackLng: "en",
212809
- showSupportNotice: false
212803
+ fallbackLng: "en"
212810
212804
  });
212811
212805
  i18n.addResourceBundle("en", sapSystemsExtNs, i18n_en_default);
212812
212806
  }
@@ -212965,7 +212959,7 @@ function configAzureTelemetryClient(client) {
212965
212959
  // ../telemetry/package.json
212966
212960
  var package_default = {
212967
212961
  name: "@sap-ux/telemetry",
212968
- version: "1.0.20",
212962
+ version: "1.0.21",
212969
212963
  description: "Library for sending usage telemetry data",
212970
212964
  type: "module",
212971
212965
  repository: {
@@ -217929,8 +217923,7 @@ async function initI18nNodejsUtils() {
217929
217923
  [nodejsUtilsNamespace]: nodejs_utils_i18n_default
217930
217924
  }
217931
217925
  },
217932
- interpolation: { escapeValue: false },
217933
- showSupportNotice: false
217926
+ interpolation: { escapeValue: false }
217934
217927
  });
217935
217928
  }
217936
217929
  initI18nNodejsUtils().catch(() => {
@@ -228775,7 +228768,7 @@ asyncInterceptorTypesMapping.set(InterceptorTypes.DURATION, durationAsync);
228775
228768
  asyncInterceptorTypesMapping.set(InterceptorTypes.CAPTURE_PARAM, captureParamAsync);
228776
228769
 
228777
228770
  // package.json
228778
- var version = "1.0.13";
228771
+ var version = "1.0.14";
228779
228772
 
228780
228773
  // ../feature-toggle/dist/constants.js
228781
228774
  var extensionConfigKeys = {