UNPKG

@nlabs/gothamjs

Version:
1 lines 211 kB
"use strict";(self.webpackChunk_nlabs_gothamjs=self.webpackChunk_nlabs_gothamjs||[]).push([[253],{"./node_modules/@nlabs/arkhamjs-middleware-logger/lib/index.js":function(__unused_webpack_module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,{V:function(){return h},G:function(){return n}});var d,lib=__webpack_require__("./node_modules/@nlabs/utils/lib/index.js"),n=((d=n||{})[d.DISABLED=0]="DISABLED",d[d.LOGS=1]="LOGS",d[d.DISPATCH=2]="DISPATCH",d);class h{name="Logger";previousStore={};defaultOptions={debugLevel:n.DISABLED};options=this.defaultOptions;constructor(o){this.config=this.config.bind(this),this.debugError=this.debugError.bind(this),this.debugInfo=this.debugInfo.bind(this),this.debugLog=this.debugLog.bind(this),this.enableDebugger=this.enableDebugger.bind(this),this.getOptions=this.getOptions.bind(this),this.postDispatch=this.postDispatch.bind(this),this.preDispatch=this.preDispatch.bind(this),this.config(o)}config(o){this.options={...this.defaultOptions,...o}}debugError(...o){const{debugErrorFnc:e,debugLevel:t}=this.options;e&&e(t,...o)}debugInfo(...o){const{debugInfoFnc:e,debugLevel:t}=this.options;e&&e(t,...o)}debugLog(...o){const{debugLogFnc:e,debugLevel:t}=this.options;e&&e(t,...o)}enableDebugger(o=n.DISPATCH){this.options={...this.options,debugLevel:o}}getOptions(){return this.options}preDispatch(o,e){return this.previousStore=e,Promise.resolve(o)}postDispatch(o,e){const{debugLevel:t}=this.options;if(t&&t>n.LOGS){const{type:p}=o;(0,lib.n4)(e,this.previousStore),(0,lib.mg)(e)}return Promise.resolve(o)}}},"./node_modules/@nlabs/arkhamjs-storage-browser/lib/BrowserStorage/BrowserStorage.js":function(__unused_webpack_module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,{s:function(){return a}});const n=i=>!!i.ttl&&Date.now()-i.timestamp>i.ttl,l=i=>new Blob([i]).size,g=i=>{try{return JSON.parse(i)}catch{return null}};class a{static window=typeof window<"u"?window:{};options;storageCache=new Map;storage;constructor(e={}){this.options={compression:!1,maxSize:5242880,prefix:"arkhamjs_",ttl:864e5,type:"session",...e},this.storage=this.getStorage()}static delLocalData(e){try{const t=a.window.localStorage;if(t)return t.removeItem(e),!0}catch{}return!1}static delSessionData(e){try{const t=a.window.sessionStorage;if(t)return t.removeItem(e),!0}catch{}return!1}static getLocalData(e){try{const t=a.window.localStorage;if(t){const r=t.getItem(e);return r?JSON.parse(r):null}}catch{}return null}static getSessionData(e){try{const t=a.window.sessionStorage;if(t){const r=t.getItem(e);return r?JSON.parse(r):null}}catch{}return null}static setLocalData(e,t){try{const r=a.window.localStorage;if(r)return r.setItem(e,JSON.stringify(t)),!0}catch{}return!1}static setSessionData(e,t){try{const r=a.window.sessionStorage;if(r)return r.setItem(e,JSON.stringify(t)),!0}catch{}return!1}static getLocalStorage(){try{return a.window.localStorage||null}catch{return null}}static getSessionStorage(){try{return a.window.sessionStorage||null}catch{return null}}async getStorageData(e){if(!this.isStorageAvailable())return null;const t=this.getPrefixedKey(e);if(this.storageCache.has(t))return this.storageCache.get(t);try{const r=this.storage.getItem(t);if(!r)return null;const s=g(r);return s?n(s)?(this.storage.removeItem(t),this.storageCache.delete(t),null):(this.storageCache.set(t,s.value),s.value):null}catch{return null}}async setStorageData(e,t){if(!this.isStorageAvailable())return!1;const r=this.getPrefixedKey(e);try{Math.random()<.1&&this.cleanExpiredData();const s={timestamp:Date.now(),ttl:this.options.ttl,value:t},o=this.options.compression?(i=>{const e=JSON.stringify(i);return e.length,e})(s):JSON.stringify(s);return!!this.validateSize(o)&&(this.storage.setItem(r,o),this.storageCache.set(r,t),!0)}catch{return!1}}async removeStorageData(e){if(!this.isStorageAvailable())return!1;const t=this.getPrefixedKey(e);try{return this.storage.removeItem(t),this.storageCache.delete(t),!0}catch{return!1}}async clearStorageData(){if(!this.isStorageAvailable())return!1;try{const e=[];for(let t=0;t<this.storage.length;t++){const r=this.storage.key(t);r?.startsWith(this.options.prefix)&&e.push(r)}return e.forEach(t=>{this.storage.removeItem(t),this.storageCache.delete(t)}),!0}catch{return!1}}getStorageStats(){if(!this.isStorageAvailable())return{available:0,total:0,used:0};let e=0;const t=[];for(let r=0;r<this.storage.length;r++){const s=this.storage.key(r);if(s?.startsWith(this.options.prefix)){t.push(s);const o=this.storage.getItem(s);o&&(e+=l(o))}}return{available:this.options.maxSize-e,total:this.options.maxSize,used:e}}getStorage(){try{const{type:e}=this.options;return("local"===e?a.window.localStorage:a.window.sessionStorage)||null}catch{return null}}getPrefixedKey(e){return`${this.options.prefix}${e}`}isStorageAvailable(){return null!==this.storage}validateSize(e){return l(e)<=this.options.maxSize}cleanExpiredData(){if(!this.isStorageAvailable())return;const e=[];for(let t=0;t<this.storage.length;t++){const r=this.storage.key(t);r?.startsWith(this.options.prefix)&&e.push(r)}e.forEach(t=>{try{const r=this.storage.getItem(t);if(r){const s=g(r);s&&n(s)&&(this.storage.removeItem(t),this.storageCache.delete(t))}}catch{this.storage.removeItem(t),this.storageCache.delete(t)}})}}},"./node_modules/cookie/dist/index.js":function(__unused_webpack_module,exports){const cookieNameRegExp=/^[\u0021-\u003A\u003C\u003E-\u007E]+$/,cookieValueRegExp=/^[\u0021-\u003A\u003C-\u007E]*$/,domainValueRegExp=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,pathValueRegExp=/^[\u0020-\u003A\u003D-\u007E]*$/,__toString=Object.prototype.toString,NullObject=(()=>{const C=function(){};return C.prototype=Object.create(null),C})();function startIndex(str,index,max){do{const code=str.charCodeAt(index);if(32!==code&&9!==code)return index}while(++index<max);return max}function endIndex(str,index,min){for(;index>min;){const code=str.charCodeAt(--index);if(32!==code&&9!==code)return index+1}return min}function decode(str){if(-1===str.indexOf("%"))return str;try{return decodeURIComponent(str)}catch(e){return str}}},"./node_modules/i18next/dist/esm/i18next.js":function(__unused_webpack_module,__webpack_exports__,__webpack_require__){__webpack_require__.d(__webpack_exports__,{Q_:function(){return createInstance}});const isString=obj=>"string"==typeof obj,defer=()=>{let res,rej;const promise=new Promise((resolve,reject)=>{res=resolve,rej=reject});return promise.resolve=res,promise.reject=rej,promise},makeString=object=>null==object?"":""+object,lastOfPathSeparatorRegExp=/###/g,cleanKey=key=>key&&key.indexOf("###")>-1?key.replace(lastOfPathSeparatorRegExp,"."):key,canNotTraverseDeeper=object=>!object||isString(object),getLastOfPath=(object,path,Empty)=>{const stack=isString(path)?path.split("."):path;let stackIndex=0;for(;stackIndex<stack.length-1;){if(canNotTraverseDeeper(object))return{};const key=cleanKey(stack[stackIndex]);!object[key]&&Empty&&(object[key]=new Empty),object=Object.prototype.hasOwnProperty.call(object,key)?object[key]:{},++stackIndex}return canNotTraverseDeeper(object)?{}:{obj:object,k:cleanKey(stack[stackIndex])}},setPath=(object,path,newValue)=>{const{obj:obj,k:k}=getLastOfPath(object,path,Object);if(void 0!==obj||1===path.length)return void(obj[k]=newValue);let e=path[path.length-1],p=path.slice(0,path.length-1),last=getLastOfPath(object,p,Object);for(;void 0===last.obj&&p.length;)e=`${p[p.length-1]}.${e}`,p=p.slice(0,p.length-1),last=getLastOfPath(object,p,Object),last?.obj&&void 0!==last.obj[`${last.k}.${e}`]&&(last.obj=void 0);last.obj[`${last.k}.${e}`]=newValue},getPath=(object,path)=>{const{obj:obj,k:k}=getLastOfPath(object,path);if(obj&&Object.prototype.hasOwnProperty.call(obj,k))return obj[k]},deepExtend=(target,source,overwrite)=>{for(const prop in source)"__proto__"!==prop&&"constructor"!==prop&&(prop in target?isString(target[prop])||target[prop]instanceof String||isString(source[prop])||source[prop]instanceof String?overwrite&&(target[prop]=source[prop]):deepExtend(target[prop],source[prop],overwrite):target[prop]=source[prop]);return target},regexEscape=str=>str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");var _entityMap={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"};const escape=data=>isString(data)?data.replace(/[&<>"'\/]/g,s=>_entityMap[s]):data;const chars=[" ",",","?","!",";"],looksLikeObjectPathRegExpCache=new class RegExpCache{constructor(capacity){this.capacity=capacity,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(pattern){const regExpFromCache=this.regExpMap.get(pattern);if(void 0!==regExpFromCache)return regExpFromCache;const regExpNew=new RegExp(pattern);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(pattern,regExpNew),this.regExpQueue.push(pattern),regExpNew}}(20),deepFind=(obj,path,keySeparator=".")=>{if(!obj)return;if(obj[path]){if(!Object.prototype.hasOwnProperty.call(obj,path))return;return obj[path]}const tokens=path.split(keySeparator);let current=obj;for(let i=0;i<tokens.length;){if(!current||"object"!=typeof current)return;let next,nextPath="";for(let j=i;j<tokens.length;++j)if(j!==i&&(nextPath+=keySeparator),nextPath+=tokens[j],next=current[nextPath],void 0!==next){if(["string","number","boolean"].indexOf(typeof next)>-1&&j<tokens.length-1)continue;i+=j-i+1;break}current=next}return current},getCleanedCode=code=>code?.replace("_","-"),consoleLogger={type:"logger",log(args){this.output("log",args)},warn(args){this.output("warn",args)},error(args){this.output("error",args)},output(type,args){console?.[type]?.apply?.(console,args)}};class Logger{constructor(concreteLogger,options={}){this.init(concreteLogger,options)}init(concreteLogger,options={}){this.prefix=options.prefix||"i18next:",this.logger=concreteLogger||consoleLogger,this.options=options,this.debug=options.debug}log(...args){return this.forward(args,"log","",!0)}warn(...args){return this.forward(args,"warn","",!0)}error(...args){return this.forward(args,"error","")}deprecate(...args){return this.forward(args,"warn","WARNING DEPRECATED: ",!0)}forward(args,lvl,prefix,debugOnly){return debugOnly&&!this.debug?null:(isString(args[0])&&(args[0]=`${prefix}${this.prefix} ${args[0]}`),this.logger[lvl](args))}create(moduleName){return new Logger(this.logger,{prefix:`${this.prefix}:${moduleName}:`,...this.options})}clone(options){return(options=options||this.options).prefix=options.prefix||this.prefix,new Logger(this.logger,options)}}var baseLogger=new Logger;class EventEmitter{constructor(){this.observers={}}on(events,listener){return events.split(" ").forEach(event=>{this.observers[event]||(this.observers[event]=new Map);const numListeners=this.observers[event].get(listener)||0;this.observers[event].set(listener,numListeners+1)}),this}off(event,listener){this.observers[event]&&(listener?this.observers[event].delete(listener):delete this.observers[event])}emit(event,...args){if(this.observers[event]){Array.from(this.observers[event].entries()).forEach(([observer,numTimesAdded])=>{for(let i=0;i<numTimesAdded;i++)observer(...args)})}if(this.observers["*"]){Array.from(this.observers["*"].entries()).forEach(([observer,numTimesAdded])=>{for(let i=0;i<numTimesAdded;i++)observer.apply(observer,[event,...args])})}}}class ResourceStore extends EventEmitter{constructor(data,options={ns:["translation"],defaultNS:"translation"}){super(),this.data=data||{},this.options=options,void 0===this.options.keySeparator&&(this.options.keySeparator="."),void 0===this.options.ignoreJSONStructure&&(this.options.ignoreJSONStructure=!0)}addNamespaces(ns){this.options.ns.indexOf(ns)<0&&this.options.ns.push(ns)}removeNamespaces(ns){const index=this.options.ns.indexOf(ns);index>-1&&this.options.ns.splice(index,1)}getResource(lng,ns,key,options={}){const keySeparator=void 0!==options.keySeparator?options.keySeparator:this.options.keySeparator,ignoreJSONStructure=void 0!==options.ignoreJSONStructure?options.ignoreJSONStructure:this.options.ignoreJSONStructure;let path;lng.indexOf(".")>-1?path=lng.split("."):(path=[lng,ns],key&&(Array.isArray(key)?path.push(...key):isString(key)&&keySeparator?path.push(...key.split(keySeparator)):path.push(key)));const result=getPath(this.data,path);return!result&&!ns&&!key&&lng.indexOf(".")>-1&&(lng=path[0],ns=path[1],key=path.slice(2).join(".")),!result&&ignoreJSONStructure&&isString(key)?deepFind(this.data?.[lng]?.[ns],key,keySeparator):result}addResource(lng,ns,key,value,options={silent:!1}){const keySeparator=void 0!==options.keySeparator?options.keySeparator:this.options.keySeparator;let path=[lng,ns];key&&(path=path.concat(keySeparator?key.split(keySeparator):key)),lng.indexOf(".")>-1&&(path=lng.split("."),value=ns,ns=path[1]),this.addNamespaces(ns),setPath(this.data,path,value),options.silent||this.emit("added",lng,ns,key,value)}addResources(lng,ns,resources,options={silent:!1}){for(const m in resources)(isString(resources[m])||Array.isArray(resources[m]))&&this.addResource(lng,ns,m,resources[m],{silent:!0});options.silent||this.emit("added",lng,ns,resources)}addResourceBundle(lng,ns,resources,deep,overwrite,options={silent:!1,skipCopy:!1}){let path=[lng,ns];lng.indexOf(".")>-1&&(path=lng.split("."),deep=resources,resources=ns,ns=path[1]),this.addNamespaces(ns);let pack=getPath(this.data,path)||{};options.skipCopy||(resources=JSON.parse(JSON.stringify(resources))),deep?deepExtend(pack,resources,overwrite):pack={...pack,...resources},setPath(this.data,path,pack),options.silent||this.emit("added",lng,ns,resources)}removeResourceBundle(lng,ns){this.hasResourceBundle(lng,ns)&&delete this.data[lng][ns],this.removeNamespaces(ns),this.emit("removed",lng,ns)}hasResourceBundle(lng,ns){return void 0!==this.getResource(lng,ns)}getResourceBundle(lng,ns){return ns||(ns=this.options.defaultNS),this.getResource(lng,ns)}getDataByLanguage(lng){return this.data[lng]}hasLanguageSomeTranslations(lng){const data=this.getDataByLanguage(lng);return!!(data&&Object.keys(data)||[]).find(v=>data[v]&&Object.keys(data[v]).length>0)}toJSON(){return this.data}}var postProcessor={processors:{},addPostProcessor(module){this.processors[module.name]=module},handle(processors,value,key,options,translator){return processors.forEach(processor=>{value=this.processors[processor]?.process(value,key,options,translator)??value}),value}};const checkedLoadedFor={},shouldHandleAsObject=res=>!isString(res)&&"boolean"!=typeof res&&"number"!=typeof res;class Translator extends EventEmitter{constructor(services,options={}){super(),((a,s,t)=>{a.forEach(m=>{s[m]&&(t[m]=s[m])})})(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],services,this),this.options=options,void 0===this.options.keySeparator&&(this.options.keySeparator="."),this.logger=baseLogger.create("translator")}changeLanguage(lng){lng&&(this.language=lng)}exists(key,o={interpolation:{}}){const opt={...o};if(null==key)return!1;const resolved=this.resolve(key,opt);return void 0!==resolved?.res}extractFromKey(key,opt){let nsSeparator=void 0!==opt.nsSeparator?opt.nsSeparator:this.options.nsSeparator;void 0===nsSeparator&&(nsSeparator=":");const keySeparator=void 0!==opt.keySeparator?opt.keySeparator:this.options.keySeparator;let namespaces=opt.ns||this.options.defaultNS||[];const wouldCheckForNsInKey=nsSeparator&&key.indexOf(nsSeparator)>-1,seemsNaturalLanguage=!(this.options.userDefinedKeySeparator||opt.keySeparator||this.options.userDefinedNsSeparator||opt.nsSeparator||((key,nsSeparator,keySeparator)=>{nsSeparator=nsSeparator||"",keySeparator=keySeparator||"";const possibleChars=chars.filter(c=>nsSeparator.indexOf(c)<0&&keySeparator.indexOf(c)<0);if(0===possibleChars.length)return!0;const r=looksLikeObjectPathRegExpCache.getRegExp(`(${possibleChars.map(c=>"?"===c?"\\?":c).join("|")})`);let matched=!r.test(key);if(!matched){const ki=key.indexOf(keySeparator);ki>0&&!r.test(key.substring(0,ki))&&(matched=!0)}return matched})(key,nsSeparator,keySeparator));if(wouldCheckForNsInKey&&!seemsNaturalLanguage){const m=key.match(this.interpolator.nestingRegexp);if(m&&m.length>0)return{key:key,namespaces:isString(namespaces)?[namespaces]:namespaces};const parts=key.split(nsSeparator);(nsSeparator!==keySeparator||nsSeparator===keySeparator&&this.options.ns.indexOf(parts[0])>-1)&&(namespaces=parts.shift()),key=parts.join(keySeparator)}return{key:key,namespaces:isString(namespaces)?[namespaces]:namespaces}}translate(keys,o,lastKey){let opt="object"==typeof o?{...o}:o;if("object"!=typeof opt&&this.options.overloadTranslationOptionHandler&&(opt=this.options.overloadTranslationOptionHandler(arguments)),"object"==typeof options&&(opt={...opt}),opt||(opt={}),null==keys)return"";Array.isArray(keys)||(keys=[String(keys)]);const returnDetails=void 0!==opt.returnDetails?opt.returnDetails:this.options.returnDetails,keySeparator=void 0!==opt.keySeparator?opt.keySeparator:this.options.keySeparator,{key:key,namespaces:namespaces}=this.extractFromKey(keys[keys.length-1],opt),namespace=namespaces[namespaces.length-1];let nsSeparator=void 0!==opt.nsSeparator?opt.nsSeparator:this.options.nsSeparator;void 0===nsSeparator&&(nsSeparator=":");const lng=opt.lng||this.language,appendNamespaceToCIMode=opt.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if("cimode"===lng?.toLowerCase())return appendNamespaceToCIMode?returnDetails?{res:`${namespace}${nsSeparator}${key}`,usedKey:key,exactUsedKey:key,usedLng:lng,usedNS:namespace,usedParams:this.getUsedParamsDetails(opt)}:`${namespace}${nsSeparator}${key}`:returnDetails?{res:key,usedKey:key,exactUsedKey:key,usedLng:lng,usedNS:namespace,usedParams:this.getUsedParamsDetails(opt)}:key;const resolved=this.resolve(keys,opt);let res=resolved?.res;const resUsedKey=resolved?.usedKey||key,resExactUsedKey=resolved?.exactUsedKey||key,joinArrays=void 0!==opt.joinArrays?opt.joinArrays:this.options.joinArrays,handleAsObjectInI18nFormat=!this.i18nFormat||this.i18nFormat.handleAsObject,needsPluralHandling=void 0!==opt.count&&!isString(opt.count),hasDefaultValue=Translator.hasDefaultValue(opt),defaultValueSuffix=needsPluralHandling?this.pluralResolver.getSuffix(lng,opt.count,opt):"",defaultValueSuffixOrdinalFallback=opt.ordinal&&needsPluralHandling?this.pluralResolver.getSuffix(lng,opt.count,{ordinal:!1}):"",needsZeroSuffixLookup=needsPluralHandling&&!opt.ordinal&&0===opt.count,defaultValue=needsZeroSuffixLookup&&opt[`defaultValue${this.options.pluralSeparator}zero`]||opt[`defaultValue${defaultValueSuffix}`]||opt[`defaultValue${defaultValueSuffixOrdinalFallback}`]||opt.defaultValue;let resForObjHndl=res;handleAsObjectInI18nFormat&&!res&&hasDefaultValue&&(resForObjHndl=defaultValue);const handleAsObject=shouldHandleAsObject(resForObjHndl),resType=Object.prototype.toString.apply(resForObjHndl);if(!(handleAsObjectInI18nFormat&&resForObjHndl&&handleAsObject&&["[object Number]","[object Function]","[object RegExp]"].indexOf(resType)<0)||isString(joinArrays)&&Array.isArray(resForObjHndl))if(handleAsObjectInI18nFormat&&isString(joinArrays)&&Array.isArray(res))res=res.join(joinArrays),res&&(res=this.extendTranslation(res,keys,opt,lastKey));else{let usedDefault=!1,usedKey=!1;!this.isValidLookup(res)&&hasDefaultValue&&(usedDefault=!0,res=defaultValue),this.isValidLookup(res)||(usedKey=!0,res=key);const resForMissing=(opt.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&usedKey?void 0:res,updateMissing=hasDefaultValue&&defaultValue!==res&&this.options.updateMissing;if(usedKey||usedDefault||updateMissing){if(this.logger.log(updateMissing?"updateKey":"missingKey",lng,namespace,key,updateMissing?defaultValue:res),keySeparator){const fk=this.resolve(key,{...opt,keySeparator:!1});fk&&fk.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let lngs=[];const fallbackLngs=this.languageUtils.getFallbackCodes(this.options.fallbackLng,opt.lng||this.language);if("fallback"===this.options.saveMissingTo&&fallbackLngs&&fallbackLngs[0])for(let i=0;i<fallbackLngs.length;i++)lngs.push(fallbackLngs[i]);else"all"===this.options.saveMissingTo?lngs=this.languageUtils.toResolveHierarchy(opt.lng||this.language):lngs.push(opt.lng||this.language);const send=(l,k,specificDefaultValue)=>{const defaultForMissing=hasDefaultValue&&specificDefaultValue!==res?specificDefaultValue:resForMissing;this.options.missingKeyHandler?this.options.missingKeyHandler(l,namespace,k,defaultForMissing,updateMissing,opt):this.backendConnector?.saveMissing&&this.backendConnector.saveMissing(l,namespace,k,defaultForMissing,updateMissing,opt),this.emit("missingKey",l,namespace,k,res)};this.options.saveMissing&&(this.options.saveMissingPlurals&&needsPluralHandling?lngs.forEach(language=>{const suffixes=this.pluralResolver.getSuffixes(language,opt);needsZeroSuffixLookup&&opt[`defaultValue${this.options.pluralSeparator}zero`]&&suffixes.indexOf(`${this.options.pluralSeparator}zero`)<0&&suffixes.push(`${this.options.pluralSeparator}zero`),suffixes.forEach(suffix=>{send([language],key+suffix,opt[`defaultValue${suffix}`]||defaultValue)})}):send(lngs,key,defaultValue))}res=this.extendTranslation(res,keys,opt,resolved,lastKey),usedKey&&res===key&&this.options.appendNamespaceToMissingKey&&(res=`${namespace}${nsSeparator}${key}`),(usedKey||usedDefault)&&this.options.parseMissingKeyHandler&&(res=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${namespace}${nsSeparator}${key}`:key,usedDefault?res:void 0,opt))}else{if(!opt.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const r=this.options.returnedObjectHandler?this.options.returnedObjectHandler(resUsedKey,resForObjHndl,{...opt,ns:namespaces}):`key '${key} (${this.language})' returned an object instead of string.`;return returnDetails?(resolved.res=r,resolved.usedParams=this.getUsedParamsDetails(opt),resolved):r}if(keySeparator){const resTypeIsArray=Array.isArray(resForObjHndl),copy=resTypeIsArray?[]:{},newKeyToUse=resTypeIsArray?resExactUsedKey:resUsedKey;for(const m in resForObjHndl)if(Object.prototype.hasOwnProperty.call(resForObjHndl,m)){const deepKey=`${newKeyToUse}${keySeparator}${m}`;copy[m]=hasDefaultValue&&!res?this.translate(deepKey,{...opt,defaultValue:shouldHandleAsObject(defaultValue)?defaultValue[m]:void 0,joinArrays:!1,ns:namespaces}):this.translate(deepKey,{...opt,joinArrays:!1,ns:namespaces}),copy[m]===deepKey&&(copy[m]=resForObjHndl[m])}res=copy}}return returnDetails?(resolved.res=res,resolved.usedParams=this.getUsedParamsDetails(opt),resolved):res}extendTranslation(res,key,opt,resolved,lastKey){if(this.i18nFormat?.parse)res=this.i18nFormat.parse(res,{...this.options.interpolation.defaultVariables,...opt},opt.lng||this.language||resolved.usedLng,resolved.usedNS,resolved.usedKey,{resolved:resolved});else if(!opt.skipInterpolation){opt.interpolation&&this.interpolator.init({...opt,interpolation:{...this.options.interpolation,...opt.interpolation}});const skipOnVariables=isString(res)&&(void 0!==opt?.interpolation?.skipOnVariables?opt.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let nestBef;if(skipOnVariables){const nb=res.match(this.interpolator.nestingRegexp);nestBef=nb&&nb.length}let data=opt.replace&&!isString(opt.replace)?opt.replace:opt;if(this.options.interpolation.defaultVariables&&(data={...this.options.interpolation.defaultVariables,...data}),res=this.interpolator.interpolate(res,data,opt.lng||this.language||resolved.usedLng,opt),skipOnVariables){const na=res.match(this.interpolator.nestingRegexp);nestBef<(na&&na.length)&&(opt.nest=!1)}!opt.lng&&resolved&&resolved.res&&(opt.lng=this.language||resolved.usedLng),!1!==opt.nest&&(res=this.interpolator.nest(res,(...args)=>lastKey?.[0]!==args[0]||opt.context?this.translate(...args,key):(this.logger.warn(`It seems you are nesting recursively key: ${args[0]} in key: ${key[0]}`),null),opt)),opt.interpolation&&this.interpolator.reset()}const postProcess=opt.postProcess||this.options.postProcess,postProcessorNames=isString(postProcess)?[postProcess]:postProcess;return null!=res&&postProcessorNames?.length&&!1!==opt.applyPostProcessor&&(res=postProcessor.handle(postProcessorNames,res,key,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...resolved,usedParams:this.getUsedParamsDetails(opt)},...opt}:opt,this)),res}resolve(keys,opt={}){let found,usedKey,exactUsedKey,usedLng,usedNS;return isString(keys)&&(keys=[keys]),keys.forEach(k=>{if(this.isValidLookup(found))return;const extracted=this.extractFromKey(k,opt),key=extracted.key;usedKey=key;let namespaces=extracted.namespaces;this.options.fallbackNS&&(namespaces=namespaces.concat(this.options.fallbackNS));const needsPluralHandling=void 0!==opt.count&&!isString(opt.count),needsZeroSuffixLookup=needsPluralHandling&&!opt.ordinal&&0===opt.count,needsContextHandling=void 0!==opt.context&&(isString(opt.context)||"number"==typeof opt.context)&&""!==opt.context,codes=opt.lngs?opt.lngs:this.languageUtils.toResolveHierarchy(opt.lng||this.language,opt.fallbackLng);namespaces.forEach(ns=>{this.isValidLookup(found)||(usedNS=ns,checkedLoadedFor[`${codes[0]}-${ns}`]||!this.utils?.hasLoadedNamespace||this.utils?.hasLoadedNamespace(usedNS)||(checkedLoadedFor[`${codes[0]}-${ns}`]=!0,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!!!")),codes.forEach(code=>{if(this.isValidLookup(found))return;usedLng=code;const finalKeys=[key];if(this.i18nFormat?.addLookupKeys)this.i18nFormat.addLookupKeys(finalKeys,key,code,ns,opt);else{let pluralSuffix;needsPluralHandling&&(pluralSuffix=this.pluralResolver.getSuffix(code,opt.count,opt));const zeroSuffix=`${this.options.pluralSeparator}zero`,ordinalPrefix=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(needsPluralHandling&&(finalKeys.push(key+pluralSuffix),opt.ordinal&&0===pluralSuffix.indexOf(ordinalPrefix)&&finalKeys.push(key+pluralSuffix.replace(ordinalPrefix,this.options.pluralSeparator)),needsZeroSuffixLookup&&finalKeys.push(key+zeroSuffix)),needsContextHandling){const contextKey=`${key}${this.options.contextSeparator}${opt.context}`;finalKeys.push(contextKey),needsPluralHandling&&(finalKeys.push(contextKey+pluralSuffix),opt.ordinal&&0===pluralSuffix.indexOf(ordinalPrefix)&&finalKeys.push(contextKey+pluralSuffix.replace(ordinalPrefix,this.options.pluralSeparator)),needsZeroSuffixLookup&&finalKeys.push(contextKey+zeroSuffix))}}let possibleKey;for(;possibleKey=finalKeys.pop();)this.isValidLookup(found)||(exactUsedKey=possibleKey,found=this.getResource(code,ns,possibleKey,opt))}))})}),{res:found,usedKey:usedKey,exactUsedKey:exactUsedKey,usedLng:usedLng,usedNS:usedNS}}isValidLookup(res){return!(void 0===res||!this.options.returnNull&&null===res||!this.options.returnEmptyString&&""===res)}getResource(code,ns,key,options={}){return this.i18nFormat?.getResource?this.i18nFormat.getResource(code,ns,key,options):this.resourceStore.getResource(code,ns,key,options)}getUsedParamsDetails(options={}){const optionsKeys=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],useOptionsReplaceForData=options.replace&&!isString(options.replace);let data=useOptionsReplaceForData?options.replace:options;if(useOptionsReplaceForData&&void 0!==options.count&&(data.count=options.count),this.options.interpolation.defaultVariables&&(data={...this.options.interpolation.defaultVariables,...data}),!useOptionsReplaceForData){data={...data};for(const key of optionsKeys)delete data[key]}return data}static hasDefaultValue(options){for(const option in options)if(Object.prototype.hasOwnProperty.call(options,option)&&"defaultValue"===option.substring(0,12)&&void 0!==options[option])return!0;return!1}}class LanguageUtil{constructor(options){this.options=options,this.supportedLngs=this.options.supportedLngs||!1,this.logger=baseLogger.create("languageUtils")}getScriptPartFromCode(code){if(!(code=getCleanedCode(code))||code.indexOf("-")<0)return null;const p=code.split("-");return 2===p.length?null:(p.pop(),"x"===p[p.length-1].toLowerCase()?null:this.formatLanguageCode(p.join("-")))}getLanguagePartFromCode(code){if(!(code=getCleanedCode(code))||code.indexOf("-")<0)return code;const p=code.split("-");return this.formatLanguageCode(p[0])}formatLanguageCode(code){if(isString(code)&&code.indexOf("-")>-1){let formattedCode;try{formattedCode=Intl.getCanonicalLocales(code)[0]}catch(e){}return formattedCode&&this.options.lowerCaseLng&&(formattedCode=formattedCode.toLowerCase()),formattedCode||(this.options.lowerCaseLng?code.toLowerCase():code)}return this.options.cleanCode||this.options.lowerCaseLng?code.toLowerCase():code}isSupportedCode(code){return("languageOnly"===this.options.load||this.options.nonExplicitSupportedLngs)&&(code=this.getLanguagePartFromCode(code)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(code)>-1}getBestMatchFromCodes(codes){if(!codes)return null;let found;return codes.forEach(code=>{if(found)return;const cleanedLng=this.formatLanguageCode(code);this.options.supportedLngs&&!this.isSupportedCode(cleanedLng)||(found=cleanedLng)}),!found&&this.options.supportedLngs&&codes.forEach(code=>{if(found)return;const lngScOnly=this.getScriptPartFromCode(code);if(this.isSupportedCode(lngScOnly))return found=lngScOnly;const lngOnly=this.getLanguagePartFromCode(code);if(this.isSupportedCode(lngOnly))return found=lngOnly;found=this.options.supportedLngs.find(supportedLng=>supportedLng===lngOnly?supportedLng:supportedLng.indexOf("-")<0&&lngOnly.indexOf("-")<0?void 0:supportedLng.indexOf("-")>0&&lngOnly.indexOf("-")<0&&supportedLng.substring(0,supportedLng.indexOf("-"))===lngOnly||0===supportedLng.indexOf(lngOnly)&&lngOnly.length>1?supportedLng:void 0)}),found||(found=this.getFallbackCodes(this.options.fallbackLng)[0]),found}getFallbackCodes(fallbacks,code){if(!fallbacks)return[];if("function"==typeof fallbacks&&(fallbacks=fallbacks(code)),isString(fallbacks)&&(fallbacks=[fallbacks]),Array.isArray(fallbacks))return fallbacks;if(!code)return fallbacks.default||[];let found=fallbacks[code];return found||(found=fallbacks[this.getScriptPartFromCode(code)]),found||(found=fallbacks[this.formatLanguageCode(code)]),found||(found=fallbacks[this.getLanguagePartFromCode(code)]),found||(found=fallbacks.default),found||[]}toResolveHierarchy(code,fallbackCode){const fallbackCodes=this.getFallbackCodes((!1===fallbackCode?[]:fallbackCode)||this.options.fallbackLng||[],code),codes=[],addCode=c=>{c&&(this.isSupportedCode(c)?codes.push(c):this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`))};return isString(code)&&(code.indexOf("-")>-1||code.indexOf("_")>-1)?("languageOnly"!==this.options.load&&addCode(this.formatLanguageCode(code)),"languageOnly"!==this.options.load&&"currentOnly"!==this.options.load&&addCode(this.getScriptPartFromCode(code)),"currentOnly"!==this.options.load&&addCode(this.getLanguagePartFromCode(code))):isString(code)&&addCode(this.formatLanguageCode(code)),fallbackCodes.forEach(fc=>{codes.indexOf(fc)<0&&addCode(this.formatLanguageCode(fc))}),codes}}const suffixesOrder={zero:0,one:1,two:2,few:3,many:4,other:5},dummyRule={select:count=>1===count?"one":"other",resolvedOptions:()=>({pluralCategories:["one","other"]})};class PluralResolver{constructor(languageUtils,options={}){this.languageUtils=languageUtils,this.options=options,this.logger=baseLogger.create("pluralResolver"),this.pluralRulesCache={}}addRule(lng,obj){this.rules[lng]=obj}clearCache(){this.pluralRulesCache={}}getRule(code,options={}){const cleanedCode=getCleanedCode("dev"===code?"en":code),type=options.ordinal?"ordinal":"cardinal",cacheKey=JSON.stringify({cleanedCode:cleanedCode,type:type});if(cacheKey in this.pluralRulesCache)return this.pluralRulesCache[cacheKey];let rule;try{rule=new Intl.PluralRules(cleanedCode,{type:type})}catch(err){if(!Intl)return this.logger.error("No Intl support, please use an Intl polyfill!"),dummyRule;if(!code.match(/-|_/))return dummyRule;const lngPart=this.languageUtils.getLanguagePartFromCode(code);rule=this.getRule(lngPart,options)}return this.pluralRulesCache[cacheKey]=rule,rule}needsPlural(code,options={}){let rule=this.getRule(code,options);return rule||(rule=this.getRule("dev",options)),rule?.resolvedOptions().pluralCategories.length>1}getPluralFormsOfKey(code,key,options={}){return this.getSuffixes(code,options).map(suffix=>`${key}${suffix}`)}getSuffixes(code,options={}){let rule=this.getRule(code,options);return rule||(rule=this.getRule("dev",options)),rule?rule.resolvedOptions().pluralCategories.sort((pluralCategory1,pluralCategory2)=>suffixesOrder[pluralCategory1]-suffixesOrder[pluralCategory2]).map(pluralCategory=>`${this.options.prepend}${options.ordinal?`ordinal${this.options.prepend}`:""}${pluralCategory}`):[]}getSuffix(code,count,options={}){const rule=this.getRule(code,options);return rule?`${this.options.prepend}${options.ordinal?`ordinal${this.options.prepend}`:""}${rule.select(count)}`:(this.logger.warn(`no plural rule found for: ${code}`),this.getSuffix("dev",count,options))}}const deepFindWithDefaults=(data,defaultData,key,keySeparator=".",ignoreJSONStructure=!0)=>{let path=((data,defaultData,key)=>{const value=getPath(data,key);return void 0!==value?value:getPath(defaultData,key)})(data,defaultData,key);return!path&&ignoreJSONStructure&&isString(key)&&(path=deepFind(data,key,keySeparator),void 0===path&&(path=deepFind(defaultData,key,keySeparator))),path},regexSafe=val=>val.replace(/\$/g,"$$$$");class Interpolator{constructor(options={}){this.logger=baseLogger.create("interpolator"),this.options=options,this.format=options?.interpolation?.format||(value=>value),this.init(options)}init(options={}){options.interpolation||(options.interpolation={escapeValue:!0});const{escape:escape$1,escapeValue:escapeValue,useRawValueToEscape:useRawValueToEscape,prefix:prefix,prefixEscaped:prefixEscaped,suffix:suffix,suffixEscaped:suffixEscaped,formatSeparator:formatSeparator,unescapeSuffix:unescapeSuffix,unescapePrefix:unescapePrefix,nestingPrefix:nestingPrefix,nestingPrefixEscaped:nestingPrefixEscaped,nestingSuffix:nestingSuffix,nestingSuffixEscaped:nestingSuffixEscaped,nestingOptionsSeparator:nestingOptionsSeparator,maxReplaces:maxReplaces,alwaysFormat:alwaysFormat}=options.interpolation;this.escape=void 0!==escape$1?escape$1:escape,this.escapeValue=void 0===escapeValue||escapeValue,this.useRawValueToEscape=void 0!==useRawValueToEscape&&useRawValueToEscape,this.prefix=prefix?regexEscape(prefix):prefixEscaped||"{{",this.suffix=suffix?regexEscape(suffix):suffixEscaped||"}}",this.formatSeparator=formatSeparator||",",this.unescapePrefix=unescapeSuffix?"":unescapePrefix||"-",this.unescapeSuffix=this.unescapePrefix?"":unescapeSuffix||"",this.nestingPrefix=nestingPrefix?regexEscape(nestingPrefix):nestingPrefixEscaped||regexEscape("$t("),this.nestingSuffix=nestingSuffix?regexEscape(nestingSuffix):nestingSuffixEscaped||regexEscape(")"),this.nestingOptionsSeparator=nestingOptionsSeparator||",",this.maxReplaces=maxReplaces||1e3,this.alwaysFormat=void 0!==alwaysFormat&&alwaysFormat,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const getOrResetRegExp=(existingRegExp,pattern)=>existingRegExp?.source===pattern?(existingRegExp.lastIndex=0,existingRegExp):new RegExp(pattern,"g");this.regexp=getOrResetRegExp(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=getOrResetRegExp(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=getOrResetRegExp(this.nestingRegexp,`${this.nestingPrefix}(.+?)${this.nestingSuffix}`)}interpolate(str,data,lng,options){let match,value,replaces;const defaultData=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},handleFormat=key=>{if(key.indexOf(this.formatSeparator)<0){const path=deepFindWithDefaults(data,defaultData,key,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(path,void 0,lng,{...options,...data,interpolationkey:key}):path}const p=key.split(this.formatSeparator),k=p.shift().trim(),f=p.join(this.formatSeparator).trim();return this.format(deepFindWithDefaults(data,defaultData,k,this.options.keySeparator,this.options.ignoreJSONStructure),f,lng,{...options,...data,interpolationkey:k})};this.resetRegExp();const missingInterpolationHandler=options?.missingInterpolationHandler||this.options.missingInterpolationHandler,skipOnVariables=void 0!==options?.interpolation?.skipOnVariables?options.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:val=>regexSafe(val)},{regex:this.regexp,safeValue:val=>this.escapeValue?regexSafe(this.escape(val)):regexSafe(val)}].forEach(todo=>{for(replaces=0;match=todo.regex.exec(str);){const matchedVar=match[1].trim();if(value=handleFormat(matchedVar),void 0===value)if("function"==typeof missingInterpolationHandler){const temp=missingInterpolationHandler(str,match,options);value=isString(temp)?temp:""}else if(options&&Object.prototype.hasOwnProperty.call(options,matchedVar))value="";else{if(skipOnVariables){value=match[0];continue}this.logger.warn(`missed to pass in variable ${matchedVar} for interpolating ${str}`),value=""}else isString(value)||this.useRawValueToEscape||(value=makeString(value));const safeValue=todo.safeValue(value);if(str=str.replace(match[0],safeValue),skipOnVariables?(todo.regex.lastIndex+=value.length,todo.regex.lastIndex-=match[0].length):todo.regex.lastIndex=0,replaces++,replaces>=this.maxReplaces)break}}),str}nest(str,fc,options={}){let match,value,clonedOptions;const handleHasOptions=(key,inheritedOptions)=>{const sep=this.nestingOptionsSeparator;if(key.indexOf(sep)<0)return key;const c=key.split(new RegExp(`${sep}[ ]*{`));let optionsString=`{${c[1]}`;key=c[0],optionsString=this.interpolate(optionsString,clonedOptions);const matchedSingleQuotes=optionsString.match(/'/g),matchedDoubleQuotes=optionsString.match(/"/g);((matchedSingleQuotes?.length??0)%2==0&&!matchedDoubleQuotes||matchedDoubleQuotes.length%2!=0)&&(optionsString=optionsString.replace(/'/g,'"'));try{clonedOptions=JSON.parse(optionsString),inheritedOptions&&(clonedOptions={...inheritedOptions,...clonedOptions})}catch(e){return this.logger.warn(`failed parsing options string in nesting for key ${key}`,e),`${key}${sep}${optionsString}`}return clonedOptions.defaultValue&&clonedOptions.defaultValue.indexOf(this.prefix)>-1&&delete clonedOptions.defaultValue,key};for(;match=this.nestingRegexp.exec(str);){let formatters=[];clonedOptions={...options},clonedOptions=clonedOptions.replace&&!isString(clonedOptions.replace)?clonedOptions.replace:clonedOptions,clonedOptions.applyPostProcessor=!1,delete clonedOptions.defaultValue;const keyEndIndex=/{.*}/.test(match[1])?match[1].lastIndexOf("}")+1:match[1].indexOf(this.formatSeparator);if(-1!==keyEndIndex&&(formatters=match[1].slice(keyEndIndex).split(this.formatSeparator).map(elem=>elem.trim()).filter(Boolean),match[1]=match[1].slice(0,keyEndIndex)),value=fc(handleHasOptions.call(this,match[1].trim(),clonedOptions),clonedOptions),value&&match[0]===str&&!isString(value))return value;isString(value)||(value=makeString(value)),value||(this.logger.warn(`missed to resolve ${match[1]} for nesting ${str}`),value=""),formatters.length&&(value=formatters.reduce((v,f)=>this.format(v,f,options.lng,{...options,interpolationkey:match[1].trim()}),value.trim())),str=str.replace(match[0],value),this.regexp.lastIndex=0}return str}}const createCachedFormatter=fn=>{const cache={};return(v,l,o)=>{let optForCache=o;o&&o.interpolationkey&&o.formatParams&&o.formatParams[o.interpolationkey]&&o[o.interpolationkey]&&(optForCache={...optForCache,[o.interpolationkey]:void 0});const key=l+JSON.stringify(optForCache);let frm=cache[key];return frm||(frm=fn(getCleanedCode(l),o),cache[key]=frm),frm(v)}},createNonCachedFormatter=fn=>(v,l,o)=>fn(getCleanedCode(l),o)(v);class Formatter{constructor(options={}){this.logger=baseLogger.create("formatter"),this.options=options,this.init(options)}init(services,options={interpolation:{}}){this.formatSeparator=options.interpolation.formatSeparator||",";const cf=options.cacheInBuiltFormats?createCachedFormatter:createNonCachedFormatter;this.formats={number:cf((lng,opt)=>{const formatter=new Intl.NumberFormat(lng,{...opt});return val=>formatter.format(val)}),currency:cf((lng,opt)=>{const formatter=new Intl.NumberFormat(lng,{...opt,style:"currency"});return val=>formatter.format(val)}),datetime:cf((lng,opt)=>{const formatter=new Intl.DateTimeFormat(lng,{...opt});return val=>formatter.format(val)}),relativetime:cf((lng,opt)=>{const formatter=new Intl.RelativeTimeFormat(lng,{...opt});return val=>formatter.format(val,opt.range||"day")}),list:cf((lng,opt)=>{const formatter=new Intl.ListFormat(lng,{...opt});return val=>formatter.format(val)})}}add(name,fc){this.formats[name.toLowerCase().trim()]=fc}addCached(name,fc){this.formats[name.toLowerCase().trim()]=createCachedFormatter(fc)}format(value,format,lng,options={}){const formats=format.split(this.formatSeparator);if(formats.length>1&&formats[0].indexOf("(")>1&&formats[0].indexOf(")")<0&&formats.find(f=>f.indexOf(")")>-1)){const lastIndex=formats.findIndex(f=>f.indexOf(")")>-1);formats[0]=[formats[0],...formats.splice(1,lastIndex)].join(this.formatSeparator)}return formats.reduce((mem,f)=>{const{formatName:formatName,formatOptions:formatOptions}=(formatStr=>{let formatName=formatStr.toLowerCase().trim();const formatOptions={};if(formatStr.indexOf("(")>-1){const p=formatStr.split("(");formatName=p[0].toLowerCase().trim();const optStr=p[1].substring(0,p[1].length-1);"currency"===formatName&&optStr.indexOf(":")<0?formatOptions.currency||(formatOptions.currency=optStr.trim()):"relativetime"===formatName&&optStr.indexOf(":")<0?formatOptions.range||(formatOptions.range=optStr.trim()):optStr.split(";").forEach(opt=>{if(opt){const[key,...rest]=opt.split(":"),val=rest.join(":").trim().replace(/^'+|'+$/g,""),trimmedKey=key.trim();formatOptions[trimmedKey]||(formatOptions[trimmedKey]=val),"false"===val&&(formatOptions[trimmedKey]=!1),"true"===val&&(formatOptions[trimmedKey]=!0),isNaN(val)||(formatOptions[trimmedKey]=parseInt(val,10))}})}return{formatName:formatName,formatOptions:formatOptions}})(f);if(this.formats[formatName]){let formatted=mem;try{const valOptions=options?.formatParams?.[options.interpolationkey]||{},l=valOptions.locale||valOptions.lng||options.locale||options.lng||lng;formatted=this.formats[formatName](mem,l,{...formatOptions,...options,...valOptions})}catch(error){this.logger.warn(error)}return formatted}return this.logger.warn(`there was no format function for ${formatName}`),mem},value)}}class Connector extends EventEmitter{constructor(backend,store,services,options={}){super(),this.backend=backend,this.store=store,this.services=services,this.languageUtils=services.languageUtils,this.options=options,this.logger=baseLogger.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=options.maxParallelReads||10,this.readingCalls=0,this.maxRetries=options.maxRetries>=0?options.maxRetries:5,this.retryTimeout=options.retryTimeout>=1?options.retryTimeout:350,this.state={},this.queue=[],this.backend?.init?.(services,options.backend,options)}queueLoad(languages,namespaces,options,callback){const toLoad={},pending={},toLoadLanguages={},toLoadNamespaces={};return languages.forEach(lng=>{let hasAllNamespaces=!0;namespaces.forEach(ns=>{const name=`${lng}|${ns}`;!options.reload&&this.store.hasResourceBundle(lng,ns)?this.state[name]=2:this.state[name]<0||(1===this.state[name]?void 0===pending[name]&&(pending[name]=!0):(this.state[name]=1,hasAllNamespaces=!1,void 0===pending[name]&&(pending[name]=!0),void 0===toLoad[name]&&(toLoad[name]=!0),void 0===toLoadNamespaces[ns]&&(toLoadNamespaces[ns]=!0)))}),hasAllNamespaces||(toLoadLanguages[lng]=!0)}),(Object.keys(toLoad).length||Object.keys(pending).length)&&this.queue.push({pending:pending,pendingCount:Object.keys(pending).length,loaded:{},errors:[],callback:callback}),{toLoad:Object.keys(toLoad),pending:Object.keys(pending),toLoadLanguages:Object.keys(toLoadLanguages),toLoadNamespaces:Object.keys(toLoadNamespaces)}}loaded(name,err,data){const s=name.split("|"),lng=s[0],ns=s[1];err&&this.emit("failedLoading",lng,ns,err),!err&&data&&this.store.addResourceBundle(lng,ns,data,void 0,void 0,{skipCopy:!0}),this.state[name]=err?-1:2,err&&data&&(this.state[name]=0);const loaded={};this.queue.forEach(q=>{((object,path,newValue)=>{const{obj:obj,k:k}=getLastOfPath(object,path,Object);obj[k]=obj[k]||[],obj[k].push(newValue)})(q.loaded,[lng],ns),((q,name)=>{void 0!==q.pending[name]&&(delete q.pending[name],q.pendingCount--)})(q,name),err&&q.errors.push(err),0!==q.pendingCount||q.done||(Object.keys(q.loaded).forEach(l=>{loaded[l]||(loaded[l]={});const loadedKeys=q.loaded[l];loadedKeys.length&&loadedKeys.forEach(n=>{void 0===loaded[l][n]&&(loaded[l][n]=!0)})}),q.done=!0,q.errors.length?q.callback(q.errors):q.callback())}),this.emit("loaded",loaded),this.queue=this.queue.filter(q=>!q.done)}read(lng,ns,fcName,tried=0,wait=this.retryTimeout,callback){if(!lng.length)return callback(null,{});if(this.readingCalls>=this.maxParallelReads)return void this.waitingReads.push({lng:lng,ns:ns,fcName:fcName,tried:tried,wait:wait,callback:callback});this.readingCalls++;const resolver=(err,data)=>{if(this.readingCalls--,this.waitingReads.length>0){const next=this.waitingReads.shift();this.read(next.lng,next.ns,next.fcName,next.tried,next.wait,next.callback)}err&&data&&tried<this.maxRetries?setTimeout(()=>{this.read.call(this,lng,ns,fcName,tried+1,2*wait,callback)},wait):callback(err,data)},fc=this.backend[fcName].bind(this.backend);if(2!==fc.length)return fc(lng,ns,resolver);try{const r=fc(lng,ns);r&&"function"==typeof r.then?r.then(data=>resolver(null,data)).catch(resolver):resolver(null,r)}catch(err){resolver(err)}}prepareLoading(languages,namespaces,options={},callback){if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),callback&&callback();isString(languages)&&(languages=this.languageUtils.toResolveHierarchy(languages)),isString(namespaces)&&(namespaces=[namespaces]);const toLoad=this.queueLoad(languages,namespaces,options,callback);if(!toLoad.toLoad.length)return toLoad.pending.length||callback(),null;toLoad.toLoad.forEach(name=>{this.loadOne(name)})}load(languages,namespaces,callback){this.prepareLoading(languages,namespaces,{},callback)}reload(languages,namespaces,callback){this.prepareLoading(languages,namespaces,{reload:!0},callback)}loadOne(name,prefix=""){const s=name.split("|"),lng=s[0],ns=s[1];this.read(lng,ns,"read",void 0,void 0,(err,data)=>{err&&this.logger.warn(`${prefix}loading namespace ${ns} for language ${lng} failed`,err),!err&&data&&this.logger.log(`${prefix}loaded namespace ${ns} for language ${lng}`,data),this.loaded(name,err,data)})}saveMissing(languages,namespace,key,fallbackValue,isUpdate,options={},clb=()=>{}){if(!this.services?.utils?.hasLoadedNamespace||this.services?.utils?.hasLoadedNamespace(namespace)){if(null!=key&&""!==key){if(this.backend?.create){const opts={...options,isUpdate:isUpdate},fc=this.backend.create.bind(this.backend);if(fc.length<6)try{let r;r=5===fc.length?fc(languages,namespace,key,fallbackValue,opts):fc(languages,namespace,key,fallbackValue),r&&"function"==typeof r.then?r.then(data=>clb(null,data)).catch(clb):clb(null,r)}catch(err){clb(err)}else fc(languages,namespace,key,fallbackValue,clb,opts)}languages&&languages[0]&&this.store.addResource(languages[0],namespace,key,fallbackValue)}}else this.logger.warn(`did not save key "${key}" as the namespace "${namespace}" 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!!!")}}const get=()=>({debug:!1,initAsync:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:args=>{let ret={};if("object"==typeof args[1]&&(ret=args[1]),isString(args[1])&&(ret.defaultValue=args[1]),isString(args[2])&&(ret.tDescription=args[2]),"object"==typeof args[2]||"object"==typeof args[3]){const options=args[3]||args[2];Object.keys(options).forEach(key=>{ret[key]=options[key]})}return ret},interpolation:{escapeValue:!0,format:value=>value,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0},cacheInBuiltFormats:!0}),transformOptions=options=>(isString(options.ns)&&(options.ns=[options.ns]),isString(options.fallbackLng)&&(options.fallbackLng=[options.fallbackLng]),isString(options.fal