{"version":3,"sources":["../../../node_modules/.pnpm/flex-tools@1.4.41/node_modules/flex-tools/src/events/liteEvent.ts","../../../node_modules/.pnpm/flex-tools@1.4.41/node_modules/flex-tools/dist/chunk-R42SWOGE.mjs","../src/utils/getId.ts","../../../node_modules/.pnpm/flex-tools@1.4.41/node_modules/flex-tools/src/typecheck/isNumber.ts","../src/utils/isMessageId.ts","../src/utils/isI18nScope.ts","../src/utils/loadAsyncModule.ts","../src/utils/isStorage.ts","../src/utils/execAsyncs.ts","../src/utils/isBrowser.ts","../src/manager/index.ts","../src/storage.ts","../src/consts.ts","../src/scope/mixins/eventEmitter.ts","../../../node_modules/.pnpm/flex-tools@1.4.41/node_modules/flex-tools/src/typecheck/isFunction.ts","../../../node_modules/.pnpm/flex-tools@1.4.41/node_modules/flex-tools/src/typecheck/isPlainObject.ts","../../../node_modules/.pnpm/flex-tools@1.4.41/node_modules/flex-tools/src/async/asyncSignal.ts","../src/scope/mixins/patch.ts","../src/errors.ts","../src/scope/mixins/change.ts","../src/logger.ts","../src/formatter/manager.ts","../src/utils/isI18nManger.ts","../src/scope/mixins/language.ts","../src/scope/mixins/translate.ts","../src/scope/mixins/restore.ts","../../../node_modules/.pnpm/flex-tools@1.4.41/node_modules/flex-tools/src/object/getByPath.ts","../src/scope/mixins/interpolator.ts","../../../node_modules/.pnpm/flex-tools@1.4.41/node_modules/flex-tools/src/object/assignObject.ts","../src/scope/index.ts","../src/formatter/utils.ts","../src/plugin.ts"],"names":["_LiteEvent","_a","options","event","callback","objectify","count","listenerId","eventListeners","__name","isAbort","listener","matchedListeners","eventName","timeout","resolve","reject","tmId","isTimeout","message","listeners","e","results","retain","LiteEvent","o","a","__require","b","c","getId","Date","now","toString","parseInt","String","Math","random","isNumber","value","strict","v","isMessageId","content","isI18nScope","obj","__VoerkaI18nScope__","loadAsyncModule","module","loadResult","call","Symbol","toStringTag","default","isStorage","get","set","remove","execAsyncs","promises","Promise","allSettled","map","result","status","reason","isBrowser","window","document","createElement","VoerkaI18nManager","constructor","appScope","__VoerkaI18nManager__","_scopes","_appScope","instance","Error","_registerAppScope","_registerScopes","_loadPlugins","globalThis","VoerkaI18n","debug","scope","logger","scopes","activeLanguage","defaultLanguage","loader","storage","languages","__VoerkaI18nScopes__","Array","isArray","forEach","register","getScope","id","find","plugins","__VoerkaI18nPlugins__","plugin","registerPlugin","push","emitAsync","bind","change","language","_refreshScopes","saveLanguage","emit","info","newLanguage","scopeRefreshers","refresh","ready","waitFor","then","lang","clearPatchedMessages","hasLanguage","findIndex","name","clearLanguage","restoreLanguage","__publicField","_VoerkaI18nManager","LocalStorage","key","localStorage","getItem","setItem","removeItem","DefaultFallbackLanguage","DefaultLanguageSettings","title","active","DataTypes","VOERKAI18N_FORMATTER","VOERKAI18N_FORMATTER_BUILDER","defaultLanguageSettings","TEleClassName","TEleMsgIdAttr","TEleScopeIdAttr","EventEmitterMixin","_eventEmitter","_getEventEmitter","attached","manager","on","once","off","payload","_EventEmitterMixin","isFunction","fn","isPlainObject","proto","baseProto","AsyncSignalAbort","AsyncSignalId","asyncSignal","constraint","isResolved","isRejected","isPending","resolveSignal","rejectSignal","timeoutId","objPromise","signalId","reset","signal","returns","PatchMessageMixin","_patching","_getPatchKey","langs","_patch","_restorePatchedMessages","activeMessages","pachedMessages","_loadMessagesFromLoader","Object","assign","_activeMessages","_setPatchedMessages","warn","stack","undefined","messages","patchedMessages","_getPatchedMessages","JSON","stringify","error","cachePatch","_PatchMessageMixin","VoerkaI18nError","_VoerkaI18nError","VoerkaI18nInvalidLanguageError","_VoerkaI18nInvalidLanguageError","VoerkaI18nOnlyOneAppScopeError","_VoerkaI18nOnlyOneAppScopeError","VoerkaI18nChangeLanguageError","_VoerkaI18nChangeLanguageError","VoerkaI18nLoadLanguageError","_VoerkaI18nLoadLanguageError","ChangeLanguageMixin","_refreshSignal","finalLanguage","finalMessages","patch","fallback","_loadLanguageMessages","$remote","fallbackLanguage","getFallbackLanguage","_activeLanguage","_activeParagraphs","paragraphs","_setLanguageAttr","remoteMessages","arguments","changing","all","_ChangeLanguageMixin","ConsoleLogger","console","createLogger","logFn","logCache","logOutput","level","args","join","log","splice","length","FormattersNotLoadedError","_FormattersNotLoadedError","VoerkaI18nFormatterManager","_formatters","_scope","formatters","_registerFormatters","formatter","apply","_addFormatter","filter","interpolator","addFilter","configs","defaultConfig","oldNext","next","ctx","langConfig","getConfig","_VoerkaI18nFormatterManager","isI18nManger","LanguageMixin","getLanguage","index","lng","lngOptions","_defaultLanguage","_LanguageMixin","TranslateMixin","_getPluraMessage","_getPluraValue","pluraValue","vars","dictVars","entries","isNum","startsWith","arg","_getTranslateComponent","_translateComponent","builder","component","_getTranslateTransformer","_translateTransformer","transform","_getActiveMessages","translate","replace","finalArgs","msgId","idMap","_TranslateMixin","RestoreMixin","_getStorage","_getStorageKey","storageKey","savedLanguage","_RestoreMixin","getByPath","path","defaultValue","delimiter","matched","keys","current","parent","indexOrKey","InterpolatorMixin","_flexVars","_initInterpolators","FlexVars","filterContext","configKey","_InterpolatorMixin","assignObject","target","sources","mapSources","source","sourceEntries","k","VoerkaI18nScope","Mixin","_options","_manager","_formatterManager","_logger","_patchedMessages","$id","idSeq","library","injectLangAttr","_init","defaultMessages","t","Translate","activeParagraphs","getScopeOption","$t","scopeOpts","_initOptions","activeLang","defaultLang","lanMessages","registerToManager","_initRefresh","getInitLanguage","tasks","isAppScope","finalLang","ele","body","querySelector","setAttribute","getRawMessage","getMessageId","_VoerkaI18nScope","createFormatter","definePlugin"],"mappings":"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","file":"index.mjs","sourcesContent":["/** \n* 一个简单的事件触发器 \n*/\n \nexport interface FlexLiteEvents{\n\n}\n\nexport interface LiteEventSubscribeOptions{\n    objectify?: boolean                 //  当调用时返回一个对象用来退订\n    count?:number                       // 触发几次\n}\nexport interface LiteEventOptions{\n    ignoreError?:boolean                // 执行侦听器出错时是否忽略错误\n}\n\nexport interface LiteEventListener<Message=any>{\n    (message:Message):void \n}\n\n\nexport type ForEachLiteEventListenerCallback<Events,Message> = ({event,listenerId,listener,count,eventListeners}:{event:Events,listenerId:number,listener:LiteEventListener<Message>,count:number,eventListeners:LiteEventListenerRegistry<Message>})=>boolean | void\n\n\nexport interface LiteEventSubscriber{\n    off():void\n}\n\n\nexport type LiteEventListenerRegistry<M> = Map<number,[LiteEventListener<M>,number]>\nexport type LiteListenerRegistry<E,M> = Map<E,LiteEventListenerRegistry<M>>\n\n\nexport class LiteEvent<\n    Events extends FlexLiteEvents = Record<string,any>,\n    EventNames extends keyof Events = keyof Events,\n    Message = any\n>{\n     \n    private _listeners:LiteListenerRegistry<EventNames,Message>= new Map()     // {\"<事件名称>\":{<listenerId>:[Callback,<侦听次数>]}}\n     \n    private _lastMessage:Record<string,any> = {}                       // 保留最后一次触发的消息,key=事件名称,value=消息\n    static listenerSeqId:number = 0\n    options:Required<LiteEventOptions>\n    constructor(options?:LiteEventOptions){\n        this.options = Object.assign({\n            ignoreError:false\n        },options) as Required<LiteEventOptions>\n     }\n    get listeners(){return this._listeners}\n     /**\n      * 订阅事件并返回一个事件订阅ID\n      * \n      * @param event \n      * @param callback \n      * @param options \n      * @returns \n      */\n    on<T extends EventNames>(event:T,callback:LiteEventListener<Events[T]>,options?:LiteEventSubscribeOptions):LiteEventSubscriber | number\n    on(event:'*',callback:LiteEventListener<Message>,options?:LiteEventSubscribeOptions):LiteEventSubscriber | number\n    on():LiteEventSubscriber | number{\n        const event    = arguments[0] as EventNames\n        const callback = arguments[1] as LiteEventListener<Message>\n        const options  = arguments[2] as LiteEventSubscribeOptions\n        const { objectify=true,count=-1 } = Object.assign({},options) as Required<LiteEventSubscribeOptions>        \n        if(!this._listeners.has(event)){\n             this._listeners.set(event,new Map())        \n        }\n        const listenerId     = ++LiteEvent.listenerSeqId            \n        const eventListeners = this._listeners.get(event) as LiteEventListenerRegistry<Message>\n        eventListeners?.set(listenerId,[callback,count])        \n        this._emitRetainEvent(event,listenerId,eventListeners)      \n        if(objectify){\n            return {\n                off:()=>{\n                    eventListeners?.delete(listenerId)\n                    if(eventListeners?.size==0){\n                        this._listeners.delete(event)\n                    }\n                }\n            }\n        }else{\n            return listenerId\n        }\n     } \n    onAny(callback:LiteEventListener<Message>,options?:LiteEventSubscribeOptions):LiteEventSubscriber | number{\n        return this.on('*',callback,options)\n    }\n     /**\n      * 如果事件已经有最近触发时保留的数据，则立即触发事件将最近的数据传递给侦听器\n      * @param event \n      */\n    private _emitRetainEvent(event:EventNames,listenerId:number,eventListeners:LiteEventListenerRegistry<Message>){\n        if(event in this._lastMessage){\n            this._executeListener(listenerId,eventListeners,this._lastMessage[event as string])   \n        }        \n    }\n     /**\n      * 只订阅一次事件\n      * @param event \n      * @param callback \n      * @param options \n      * @returns \n      */\n    once<T extends EventNames>(event:T,callback:LiteEventListener<Events[T]>,options?:LiteEventSubscribeOptions){\n         return this.on(event,callback,Object.assign({},options,{count:1}))        \n    }  \n \n    /**\n      * 遍历所有侦听器\n      *   {\"<事件名称>\":{<listenerId>:[Callback,<侦听次数>]}}\n      * @param callback  ={}\n      */\n    private _forEachListeners(callback:({event,listenerId,listener,count,eventListeners}:{event:EventNames,listenerId:number,listener:LiteEventListener<Message>,count:number,eventListeners:LiteEventListenerRegistry<Message>})=>boolean | void){\n         // {\"<事件名称>\":{<listenerId>:[Callback,<侦听次数>]}}\n         let isAbort = false\n         for(let [event,eventListeners] of this._listeners.entries()){\n             if(isAbort) break\n             for(let [listenerId,[listener,count]] of eventListeners.entries()){\n                 if(isAbort) break\n                 let r = callback({event,listenerId,listener,count,eventListeners})                \n                 isAbort = r === false // 显式返回false时中止遍历\n             }\n         }         \n     }\n     /**\n      * 遍历符合event事件的侦听器\n      * \n      * forEachEventListeners(event,callback)\n      * \n      * @param event         事件名称\n      * @param callback \n      * @returns \n      */\n     private _forEachEventListeners(event:EventNames,callback:ForEachLiteEventListenerCallback<EventNames,Message>){\n         // {\"<事件名称>\":{<listenerId>:[Callback,<侦听次数>]}}        \n         let isAbort = false        \n         let matchedListeners = [[event,this._listeners.get(event)]] as [EventNames,LiteEventListenerRegistry<Message> | undefined][]       \n         for(let [eventName,eventListeners] of matchedListeners){\n             if(!eventListeners) continue\n             for(let [listenerId,[listener,count]] of eventListeners){\n                 if(isAbort) break\n                 let r = callback({event:eventName,listenerId,listener,count,eventListeners})            \n                 isAbort = r === false// 显式返回false时中止遍历\n             }     \n         }\n     }  \n     /**\n      * 注销订阅\n      * \n      * - 通过listenerId进行退订\n      * - 直接指定一个callback并且callback严格相等\n      * - 具备同一样原型链的callback的均退订\n      * \n      *  let listenerId = emitter.on(event,callback)\n      * \n      *  emitter.off(listenerId)              // 精确退订指定的订阅，需要自行保存订阅Id\n      *  emitter.off(callback)                // 所有callback均会退订\n      *  emitter.off(event,callback)          // 退订指定事件的callback均会退订 \n      * \n      * @param event \n      * @param callback \n      * @returns \n      */ \n      off(listener:LiteEventListener<Message>):void;\n      off(listenerId:number):void;\n      off(event:EventNames,listener:LiteEventListener<any>):void;\n      off(){\n         // {\"<事件名称>\":{<listenerId>:[Callback,<侦听次数>]}}\n        if(arguments.length==1){\n             if(typeof(arguments[0])=='number'){// off(listenerId) 根据订阅ID退订\n                 this._forEachListeners(({listenerId,eventListeners,event})=>{\n                     if(listenerId == arguments[0]){\n                         eventListeners.delete(listenerId)\n                         if(this._listeners.get(event)?.size==0) this._listeners.delete(event)\n                         return false\n                     }   \n                 })\n             }else if(typeof(arguments[0])=='function'){  // off(callback) \n                 let callback = arguments[0]\n                 this._forEachListeners(({listenerId,listener,eventListeners,event})=>{\n                     if(listener == callback){\n                         eventListeners.delete(listenerId) \n                         if(this._listeners.get(event)?.size==0) this._listeners.delete(event)\n                     }   \n                 })\n             }\n        }else if(arguments.length==2){\n             if(typeof(arguments[0])=='string' && typeof(arguments[1])=='function'){// off(event,callback)\n                 this._forEachEventListeners(arguments[0] as EventNames,({event,listenerId,listener,eventListeners})=>{\n                     if(event == arguments[0] && listener ==  arguments[1] ){\n                         eventListeners.delete(listenerId) \n                         if(this._listeners.get(event)?.size==0) this._listeners.delete(event)\n                     }\n                 })\n             }\n        } \n     }\n \n     /**\n      * 等待某个事件触发后返回\n      * @param event  事件名称\n      */\n    waitFor(event:EventNames,timeout:number=0){        \n         return new Promise<Message>((resolve,reject)=>{\n             let tmId:any,isTimeout:boolean=false \n             let listenerId:number\n             if(timeout>0){\n                 tmId=setTimeout(()=>{\n                     isTimeout=true\n                     this.off(listenerId)\n                     reject(new Error(\"Timeout\"))    \n                 },timeout)\n             }        \n            listenerId = this.once(event,(message:any)=>{     \n                if(isTimeout) return\n                clearTimeout(tmId) \n                resolve(message)\n            }) as number\n        })\n    }\n    offAll(event?:EventNames){\n         if(event){\n             this._listeners.delete(event)\n         }else{\n             this._listeners.clear()\n         }        \n     }\n     /**    \n      * 执行侦听器函数\n      * \n      * @param listenerId  侦听器ID\n      * @param listeners   事件侦听器列表  \n      * @param message \n      * @returns \n      */\n    private _executeListener(listenerId:number,listeners:LiteEventListenerRegistry<Message>,message?:Message){\n         if(!listeners) return \n         const listener = listeners!.get(listenerId)\n         if(!listener) return \n         try{\n            return listener[0](message!) \n         }catch(e){\n            if(!this.options.ignoreError) throw e\n         }finally{\n             if(listener[1]>-1){\n                 listener[1] = listener[1]-1\n                 if(listener[1]==0){\n                     listeners.delete(listenerId)\n                 }\n             }            \n         }  \n     }   \n     private _executeListeners(event:EventNames,message?:Message,callback?:(listenerId?:number)=>void){\n         let results:any[] = []\n         this._forEachEventListeners(event,({event:eventName,listenerId,eventListeners})=>{\n             results.push(this._executeListener(listenerId,eventListeners,message))\n             if(typeof(callback)=='function') callback(listenerId)\n             if(eventListeners.size==0){\n                 this._listeners.delete(eventName)\n             }\n         })   \n         return results\n     }\n     /**\n      * 触发事件\n      * @param event \n      * @param message \n      */\n    emit<T extends EventNames>(event:T,message?:Events[T],retain?:boolean){\n        if(retain){\n            this._lastMessage[event as any] = message\n        }\n        return this._executeListeners(event,message as any)\n    }\n    async emitAsync<T extends EventNames>(event:T,message?:Events[T],retain?:boolean){\n        return await Promise.allSettled(this.emit(event,message,retain))\n     }\n } \n\n \n  \n//  export type VoerkaI18nEvents = {\n//     log        : { level: string, message:string }       // 当有日志输出时，data={level\n//     ready      : { scope:string,language:string }                        // 当默认语言第一次加载完成后触发，data={language,scope}\n//     Change     : string                                                 // 当语言切换时    data=language\n//     Registered : string                                                 // 当Scope注册到成功后    \n//     Restore    : { scope:string,language:string }                        // 当Scope加载并从本地存储中读取语言包合并到语言包时 ，data={language,scope}\n//     Patched    : { scope:string,language:string }                        // 当Scope加载并从本地存储中读取语言包合并到语言包时 ，data={language,scope}               \n// }      \n    \n\n\n//  const ev = new LiteEvent<VoerkaI18nEvents>()\n\n//  ev.on(\"log\",({level,message})=>{\n//     console.log(level,message)\n//  })\n//  ev.on(\"*\",({level,message})=>{\n//     console.log(level,message)\n//  })\n//  ev.emit(\"log\",{level:\"\",message:\"\"})","/**\n*   ---=== FlexTools ===---\n*   https://zhangfisher.github.com/flex-tools \n*/\nvar i=Object.create;var f=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var l=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty;var g=a=>{throw TypeError(a)};var o=(a=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(a,{get:(b,c)=>(typeof require<\"u\"?require:b)[c]}):a)(function(a){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+a+'\" is not supported')});var p=(a,b)=>()=>(b||a((b={exports:{}}).exports,b),b.exports);var n=(a,b,c,d)=>{if(b&&typeof b==\"object\"||typeof b==\"function\")for(let e of k(b))!m.call(a,e)&&e!==c&&f(a,e,{get:()=>b[e],enumerable:!(d=j(b,e))||d.enumerable});return a};var q=(a,b,c)=>(c=a!=null?i(l(a)):{},n(b||!a||!a.__esModule?f(c,\"default\",{value:a,enumerable:true}):c,a));var h=(a,b,c)=>b.has(a)||g(\"Cannot \"+c);var r=(a,b,c)=>(h(a,b,\"read from private field\"),c?c.call(a):b.get(a)),s=(a,b,c)=>b.has(a)?g(\"Cannot add the same private member more than once\"):b instanceof WeakSet?b.add(a):b.set(a,c),t=(a,b,c,d)=>(h(a,b,\"write to private field\"),d?d.call(a,c):b.set(a,c),c);export{o as a,p as b,q as c,r as d,s as e,t as f};//# sourceMappingURL=chunk-R42SWOGE.mjs.map\n//# sourceMappingURL=chunk-R42SWOGE.mjs.map","export function getId():string{\r\n    return Date.now().toString() + parseInt(String(Math.random() * 1000))\r\n}","/**\n * 判断值是否是一个数字\n * \n * 默认情况下，也会对字符串类型的数字进行判断\n * 如isNumber('123')返回true\n * \n * \n * @param {*} value \n * @returns \n */\nexport function isNumber(value:any,strict:boolean=false):boolean {    \n    if(typeof(value)=='number') return true\n    if(typeof(value)!='string') return false\n    // 如果是严格模式，那么不允许字符串类型的数字\n    if(strict) return false        \n    try{\n        if(value.includes(\".\")){\n            let v = parseFloat(value)\n            if(value.endsWith(\".\")){                \n                return !isNaN(v) && String(v).length===value.length-1\n            }else{\n                return !isNaN(v) && String(v).length===value.length\n            }            \n        }else{\n            let v = parseInt(value)\n            return !isNaN(v) && String(v).length===value.length\n        }    \n    }catch{\n        return false\n    }\n}\n","import { isNumber } from \"flex-tools/typecheck/isNumber\";\r\n\r\n/**\r\n * 文本id必须是一个数字\r\n * @param {*} content \r\n * @returns \r\n */\r\nexport function isMessageId(content:string){\r\n    return isNumber(content)\r\n}","\r\nexport function isI18nScope(obj:any){\r\n    return obj && typeof(obj)==='object' && obj.__VoerkaI18nScope__ \r\n}"," \r\nexport async function loadAsyncModule(this:any,module:Function):Promise<any>{\r\n    const loadResult = (await (module as any).call(this))    \r\n    // @ts-ignore      \r\n    if((loadResult && \"__esModule\" in loadResult) || (Symbol.toStringTag in loadResult)){\r\n        return  (loadResult as any).default \r\n    }else{\r\n        return  loadResult\r\n    }  \r\n    \r\n} ","import { IVoerkaI18nStorage } from \"@/types\";\r\n\r\n\r\nexport function isStorage(obj:any):obj is IVoerkaI18nStorage{\r\n    return obj \r\n        && typeof obj.get === 'function' \r\n        && typeof obj.set === 'function' \r\n        && typeof obj.remove === 'function'\r\n}","/**\r\n * 异步执行一组Promise，并返回所有Promise的结果\r\n * \r\n * 该函数会处理所有Promise，无论成功或失败都会返回结果。\r\n * 如果环境支持Promise.allSettled，则直接使用；\r\n * 否则会手动包装每个Promise，确保不会抛出未捕获的异常。\r\n * \r\n * @template T Promise的返回值类型\r\n * @param {Promise<T>[]} promises 要执行的Promise数组\r\n * @returns {Promise<(T | Error)[]>} 返回一个Promise，resolve为包含所有结果的数组，\r\n *                                   每个元素要么是Promise的返回值，要么是Error对象\r\n */\r\nexport async function execAsyncs<T=any>(promises: Promise<T>[]): Promise<(T | Error)[]> {\r\n    // if (typeof Promise.allSettled === 'function') { // 更安全地检查Promise.allSettled是否存在      \r\n    const results = await Promise.allSettled(promises);\r\n    return results.map(result => \r\n        result.status === 'fulfilled' ? result.value : result.reason\r\n    );\r\n    // } else {\r\n    //     // 先包装每个Promise，统一处理错误\r\n    //     const wrappedPromises = promises.map(promise =>{\r\n    //         return new Promise<T | Error>(resolve => {\r\n    //             Promise.resolve(promise)\r\n    //                 .then(r => resolve(r))\r\n    //                 .catch(e => resolve(e instanceof Error ? e : new Error(String(e)))); // 确保错误是Error实例            \r\n    //         });            \r\n    //     })\r\n    //     return await Promise.all(wrappedPromises); \r\n    // }\r\n}","export function isBrowser():boolean {\r\n    try{\r\n    return typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined';\r\n    }catch{\r\n        return false\r\n    }\r\n}","import type {  VoerkaI18nScope } from \"../scope\"\r\nimport type { VoerkaI18nLanguage, VoerkaI18nEvents, VoerkaI18nPlugin }  from \"../types\"\r\nimport { LiteEvent } from \"flex-tools/events/liteEvent\" \r\nimport { execAsyncs, isI18nScope } from \"../utils\"  \r\n \r\n/** \r\n * 多语言管理类\r\n * \r\n * 当导入编译后的多语言文件时(import(\"./languages\"))，会自动生成全局实例VoerkaI18n\r\n *  \r\n * VoerkaI18n.languages             // 返回支持的语言列表\r\n * VoerkaI18n.defaultLanguage       // 默认语言\r\n * VoerkaI18n.language              // 当前语言\r\n * VoerkaI18n.change(language)      // 切换到新的语言 \r\n * \r\n * \r\n * VoerkaI18n.on(\"change\",(language)=>{})  // 注册语言切换事件\r\n * VoerkaI18n.off(\"change\",(language)=>{}) \r\n * \r\n * */ \r\n\r\nexport class VoerkaI18nManager extends LiteEvent<VoerkaI18nEvents>{\r\n    __VoerkaI18nManager__ = true\r\n    static instance?              : VoerkaI18nManager  \r\n    private _scopes               : VoerkaI18nScope[] = []    \r\n    private _appScope!            : VoerkaI18nScope \r\n    \r\n    constructor(appScope?:VoerkaI18nScope){\r\n        super()      \r\n        if(VoerkaI18nManager.instance){\r\n            return VoerkaI18nManager.instance;\r\n        }        \r\n        if(!appScope) throw new Error(\"create VoerkaI18nManager failed, appScope is required\")\r\n        this._registerAppScope(appScope)                                // 注册应用作用域     \r\n        this._registerScopes()                                          // 注册所有作用域\r\n        this._loadPlugins()\r\n        VoerkaI18nManager.instance = this                               // 加载初始格式化器   \r\n        // @ts-ignore\r\n        globalThis.VoerkaI18n = this   \r\n    }\r\n    get debug(){return this.scope.debug }  \r\n    get logger(){ return this.scope.logger! }                            // 日志记录器                        \r\n    get scopes(){ return this._scopes }                                 // 注册VoerkaI18nScope实例 \r\n    get activeLanguage(){ return this._appScope.activeLanguage }        // 当前激活语言名称   \r\n    get defaultLanguage(){ return this._appScope.defaultLanguage }      // 当前默认语言名称   \r\n    get loader(){ return this._appScope.loader}                         // 默认语言包加载器 \r\n    get storage(){return this.scope!.storage}\r\n    get languages(){return this.scope.languages}\r\n    get scope(){return this._appScope!}\r\n \r\n    /**\r\n     * 注册所有i18nScope作用域。\r\n     * 该方法会检查全局对象中的 `__VoerkaI18nScopes__` 属性，\r\n     * 如果该属性存在且为数组，则遍历数组并注册每个作用域。\r\n     * 这是内部实现细节，不对外暴露。\r\n     */\r\n    private _registerScopes() {\r\n        const scopes = globalThis.__VoerkaI18nScopes__\r\n        if(scopes && Array.isArray(scopes)){\r\n            scopes.forEach(scope=>this.register(scope)) \r\n        }        \r\n        // @ts-ignore\r\n        delete globalThis.__VoerkaI18nScopes__\r\n    }\r\n    getScope(id:string | undefined | null){\r\n        return this._scopes.find(scope=>scope.id===id)\r\n    }\r\n    private _loadPlugins(){\r\n        const plugins = globalThis.__VoerkaI18nPlugins__\r\n        if(plugins && Array.isArray(plugins)){\r\n            plugins.forEach(plugin=>plugin(this)) \r\n        }        \r\n        // @ts-ignore\r\n        delete globalThis.__VoerkaI18nPlugins__\r\n    }    \r\n\r\n    registerPlugin(plugin:VoerkaI18nPlugin){\r\n        if(typeof(plugin)==='function'){\r\n            plugin(this)\r\n        }\r\n    }\r\n\r\n    /** \r\n     * 将应用Scope注册到管理器中 \r\n     */\r\n    private _registerAppScope(scope:VoerkaI18nScope){ \r\n        this._scopes.push(scope)\r\n        this._appScope = scope\r\n        this.logger.debug(\"VoerkaI18nScope<\"+scope.id+\"> is registered as appScope\")\r\n        this.emitAsync(\"init\",()=>{ \r\n            return this._appScope.activeLanguage\r\n        },true)\r\n    }\r\n    /**\r\n     * \r\n     * 注册一个新的作用域\r\n     * \r\n     * 每一个库均对应一个作用域，每个作用域可以有多个语言包，且对应一个翻译函数\r\n     * 除了默认语言外，其他语言采用动态加载的方式\r\n     * \r\n     * @param {*} scope \r\n     */\r\n    register(scope:VoerkaI18nScope){ \r\n        if(!isI18nScope(scope)) throw new Error(\"register scope failed, invalid scope\")\r\n        this._scopes.push(scope)     \r\n        scope.bind(this)            \r\n        this.logger.debug(`VoerkaI18nScope<${scope.id}> is registered`)\r\n    }    \r\n    /**\r\n     *  切换语言\r\n     */\r\n    async change(language:string){\r\n        await this._refreshScopes(language)          // 刷新所有作用域    \r\n        const activeLanguage = this._appScope.activeLanguage                                 \r\n        this.scope.saveLanguage()                    // 保存语言配置到存储器        \r\n        this.emit(\"change\",activeLanguage,true)     \r\n        this.logger.info(\"language changed to: \"+activeLanguage)\r\n        return activeLanguage\r\n    } \r\n     /**\r\n     * 当切换语言时调用此方法来加载更新语言包\r\n     * @param {*} newLanguage \r\n     */\r\n     private async _refreshScopes(newLanguage:string){       \r\n        const scopeRefreshers = this._scopes.map(scope=>scope.refresh(newLanguage))\r\n        await execAsyncs(scopeRefreshers)         \r\n    }     \r\n\r\n    /**\r\n     * 刷新所有作用域\r\n     */\r\n    async refresh(){\r\n        return await this._refreshScopes(this.activeLanguage)\r\n    }\r\n    /**\r\n     * 等待管理器初始化完成\r\n     *  \r\n     * @returns \r\n     */\r\n    ready(callback:(language:string)=>void,timeout?:number){\r\n        return this.waitFor(\"ready\",timeout).then((lang)=>{\r\n            if(callback) callback.call(this,lang)\r\n        })\r\n    } \r\n    /**\r\n     * 清除所有作用域的翻译补丁信息\r\n     */\r\n    clearPatchedMessages(){\r\n        this._scopes.forEach(scope=>scope.clearPatchedMessages())\r\n    }\r\n    /**\r\n\t * 返回是否存在指定的语言\r\n\t * @param {*} language 语言名称\r\n\t * @returns\r\n\t */\r\n\thasLanguage(language:string) {\r\n\t\treturn this.languages.findIndex((lang:VoerkaI18nLanguage) => lang.name == language) != -1;\r\n\t}\r\n    clearLanguage(){\r\n        this.scope.clearLanguage()\r\n    }\r\n    saveLanguage(){\r\n        this.scope.saveLanguage()\r\n    }\r\n    restoreLanguage(){\r\n        this.scope.restoreLanguage()        \r\n    }\r\n\r\n} \r\n ","import { IVoerkaI18nStorage } from \"./types\" \r\n\r\nexport const LocalStorage = {\r\n    get(key:string){\r\n        if(globalThis.localStorage){\r\n            return globalThis.localStorage.getItem(key)\r\n        }\r\n    },\r\n    set(key:string,value:any){\r\n        if(globalThis.localStorage){\r\n            globalThis.localStorage.setItem(key,value)\r\n        }\r\n    },\r\n    remove(key:string){\r\n        if(globalThis.localStorage){\r\n            globalThis.localStorage.removeItem(key)\r\n        }\r\n    }\r\n} as IVoerkaI18nStorage","import { LocalStorage } from \"./storage\"\r\nexport const DefaultFallbackLanguage = 'en'    \r\n\r\n\r\nexport const DefaultLanguageSettings =  [\r\n    {name: \"zh\",title: \"中文\",default:true,active:true},\r\n    {name: \"en\",title: \"英文\"}\r\n] \r\n\r\nexport const DataTypes =  [\"String\",\"Number\",\"Boolean\",\"Object\",\"Array\",\"Function\",\"Error\",\"Symbol\",\"RegExp\",\"Date\",\"Null\",\"Undefined\",\"Set\",\"Map\",\"WeakSet\",\"WeakMap\"]\r\n\r\nexport const VOERKAI18N_FORMATTER = Symbol(\"VoerkaI18nFormatter\")\r\n\r\n\r\nexport const VOERKAI18N_FORMATTER_BUILDER = Symbol(\"VoerkaI18nFormatterBuilder\")\r\n// 默认语言配置\r\nexport const defaultLanguageSettings = {  \r\n    debug          : true,\r\n    storage        : LocalStorage,\r\n    languages      : [\r\n        { name: \"zh\", title: \"中文\", default: true, active: true },\r\n        { name: \"en\", title: \"英文\" }\r\n    ]\r\n}  \r\n\r\n\r\nexport const TEleClassName   = \"vt-msg\"\r\nexport const TEleMsgIdAttr   = \"data-id\"\r\nexport const TEleScopeIdAttr = \"data-scope\"","/**\r\n * \r\n *  事件发射器混入\r\n * \r\n */ \r\nimport { VoerkaI18nEvents, VoerkaI18nEventListener, VoerkaI18nEventSubscriber } from \"@/types\"\r\nimport type { VoerkaI18nScope } from \"..\"  \r\nimport { LiteEvent, LiteEventListener,LiteEventSubscriber } from \"flex-tools/events/liteEvent\" \r\n\r\n\r\n\r\n \r\nexport class EventEmitterMixin{\r\n    private _eventEmitter!: LiteEvent<VoerkaI18nEvents>\r\n    protected _getEventEmitter(this:VoerkaI18nScope):LiteEvent<VoerkaI18nEvents>{\r\n        if(this.attached){\r\n            return this.manager\r\n        }else{\r\n            if(!this._eventEmitter) this._eventEmitter = new LiteEvent<VoerkaI18nEvents>()\r\n            return this._eventEmitter\r\n        }\r\n    } \r\n\t// 以下方法引用全局VoerkaI18n实例的方法\r\n\ton(this:VoerkaI18nScope,event: keyof VoerkaI18nEvents,callback:VoerkaI18nEventListener) {\r\n        return this._getEventEmitter().on(event,callback) as VoerkaI18nEventSubscriber\r\n    }\r\n    once(this:VoerkaI18nScope,event: keyof VoerkaI18nEvents,callback:VoerkaI18nEventListener) {\r\n        return this._getEventEmitter().once(event,callback)  as VoerkaI18nEventSubscriber\r\n    }\r\n\toff(this:VoerkaI18nScope,event: keyof VoerkaI18nEvents,callback:VoerkaI18nEventListener) {\r\n        return this._getEventEmitter().off(event,callback); \r\n    }\r\n    waitFor(this:VoerkaI18nScope,event: keyof VoerkaI18nEvents,timeout?:number):Promise<any>{\r\n        return this._getEventEmitter().waitFor(event,timeout);\r\n    }\r\n    async emit(this:VoerkaI18nScope,event: keyof VoerkaI18nEvents,payload?:any,retain?:boolean):Promise<any> {\r\n        return await this._getEventEmitter().emitAsync(event,payload,retain);\r\n    }\r\n}\r\n\r\n\r\n ","export function isFunction(fn:any):fn is Function{\n    return fn && typeof(fn)==\"function\"\n}","/**\n * 返回是否原始{}\n * @param obj\n * @returns {boolean}\n */\nexport function isPlainObject(obj:any):boolean{\n    if (typeof obj !== 'object' || obj === null) return false;\n    var proto = Object.getPrototypeOf(obj);\n    if (proto === null) return true;\n    var baseProto = proto;\n    while (Object.getPrototypeOf(baseProto) !== null) {\n        baseProto = Object.getPrototypeOf(baseProto);\n    }\n    return proto === baseProto;\n}\n","/**\n *  生成一个异步控制信号\n *\n *  当满足condition时会进行等待\n *\n *  定义一个异步等待信号\n *  let signal = asyncSignal()\n *\n *  //\n *  然后在需要等待的地方\n *  await signal()\n *  await signal(100)  代表信号会自动超时resolve\n *  await signal(100,new Error())  代表信号会自动超时reject\n *\n *  可以手动resolve或reject该signal\n *  当要结束等待时调用 signal.resolve()\n *  当等待出错时调用 signal.reject()\n *\n * 可以传入一个condition函数，当signal.resolve时，会同时进行调用，该函数必须返回true，否则会继承等待\n * 超时时不会调用\n * let signal = asyncSignal(()=>{})\n *\n *  当signal使用一次后，如果需要再次使用，则需要signal.reset()复位一下，然后就可以\n *   await signal()\n *\n *  @param {Function} constraint 约束函数，指定当resolve或reject时，需要同时满足这个约束函数返回true才会进行resolve或reject\n *\n */ \n\n \n export class AsyncSignalAbort extends Error {}\n \n export interface IAsyncSignal {\n    (timeout?:number,returns?:any):Awaited<Promise<any>>\n    id:number\n    reset(): void\n    reject(e?:Error | string):void\n    resolve(result?: any):void\n    destroy():void\n    isResolved():boolean\n    isRejected():boolean\n    isPending():boolean\n }\n\n\nlet AsyncSignalId = 0\n\n/**\n * 生成一个异步信号\n * \n * const signal = asyncSignal()\n * const signal = asyncSignal(()=>x==1,{timeout:10})\n * \n * await  signal(timeout)\n * signal.resolve()\n * signal.reject()\n * signal.destroy()\n *\n * @param {function} constraint\n *      当调用signal.resolve()时，还需要满足额外的约束条件，仅当constraint返回true，则signal才可以进行真正resolve\n * @returns {function}\n */\n\nexport function asyncSignal(constraint?:Function,options:{timeout:number}={timeout:0}) : IAsyncSignal {     \n     let isResolved:boolean = false,isRejected:boolean = false,isPending:boolean = false\n     let resolveSignal:Function, rejectSignal:Function, timeoutId:any = 0\n     let objPromise:Promise<any> | null\n     let signalId = ++AsyncSignalId\n\n     // 重置信号，可以再次复用\n     const reset = function () {\n         clearTimeout(timeoutId)\n         isResolved = false\n         isRejected = false\n         isPending = false\n         objPromise = new Promise((resolve, reject) => {\n             resolveSignal = resolve\n             rejectSignal = reject\n         })\n     }\n     \n     reset()\n\n    async function signal(timeout:number =0 , returns?:any){\n         // 如果constraint返回的true，代表不需要等待\n         if (typeof (constraint) === \"function\" && constraint()) {\n             isResolved = true\n             return\n         }\n\n         // 如果信号上次已经完成了，则需要重置信号\n         if (isResolved || isRejected) reset()\n \n         // 指定超时功能\n         if (timeout > 0) {\n             timeoutId = setTimeout(() => {\n                 isResolved = true\n                 try {\n                     if (returns instanceof Error) {\n                         rejectSignal(returns)\n                     } else {\n                         resolveSignal(returns)\n                     }\n                 } catch {\n                 }\n             }, timeout)\n         }\n         isPending = true\n         return objPromise\n     }\n     signal.id = signalId\n     signal.resolve = (result?:any) => {        \n         clearTimeout(timeoutId)\n         if(!isPending) return \n         if (isResolved || isRejected) return\n         // 注意：是否真正resolve还受约束条件的约束，只有满足约束条件时才会真正resolve\n         if (typeof (constraint) === \"function\" && constraint()) {\n             if(constraint()){\n                 resolveSignal(result)\n             }else{\n                // 如果不满足约束条件，则静默返回，可以通过signal.isFulfilled()来判断是否完成\n                return    \n             }\n         } else {\n             resolveSignal(result)\n         }\n         isResolved = true\n     } \n\n     signal.reject = (e?:Error | string) => {        \n         clearTimeout(timeoutId)\n         if(!isPending) return \n         if (isResolved || isRejected) return\n         rejectSignal(typeof(e)==='string' ? new Error(e) : ((e instanceof Error) ? e : new Error()))\n         isRejected = true\n     }\n \n     // 信号被销毁时，产生一个中止错误，信号的使用者可以据此进行善后处理\n     signal.destroy = () => {\n        clearTimeout(timeoutId)\n        if(isPending) rejectSignal(new AsyncSignalAbort())   \n        isResolved =false\n        isPending = false         \n        isRejected =false\n        objPromise = null\n     }\n\n     signal.reset = reset\n     signal.isResolved = () => isResolved\n     signal.isRejected = () => isRejected \n     signal.isPending = () => isPending \n     return signal as unknown as IAsyncSignal\n }\n \n /**\n  *   管理多个异步信号，并确保能正确resolve和reject\n  *\n  *\n  *\n  *  let signals = new AsyncSignalManager({\n  *      timeout:60 * 1000,               // 所有信号均在1分钟后自动超时，0代表不设超时，并且此值应该大于signal(timeout)时指定的超时值\n  *  })\n  *\n  *  signal = signals.create() 创建一个asyncSignal\n  *\n  *  signals.destroy()   销毁所有异步信号\n  *  signal.resolve()    resolve所有异步信号\n  *  signal.reject()     reject所有异步信号\n  *  signal.reset()      reset所有异步信号\n  *\n  *\n  */\n  \n\n export class AsyncSignalManager {\n    #_signals:Record<string,IAsyncSignal> = {}\n    constructor(public options?:{timeout: number} ) {\n         this.options = Object.assign({\n             timeout:0,// 为所有异步信号提供一个默认的超时时间，当信号超时未resolve时，会自动进行reject(timeout)\n         },options)\n     }\n     get signals():Record<string,IAsyncSignal> {return this.#_signals} \n \n     /**\n      * 创建新的异步信号\n      * @param constraint         额外的约束条件\n      * @param id\n      */\n     create(constraint?:Function){\n         let signal = asyncSignal(constraint,this.options)\n         this.#_signals[signal.id] = signal\n         return signal\n     }\n \n     /**\n      * 销毁指定的或者所有异步信号\n      *\n      *  destroy(id)\n      *  destroy([id,id,...])\n      *  destroy()                   // 销毁所有\n      * @param {string} id           可选的信号id,如果未指定则删除所有的信号\n      *\n      */ \n      \n    destroy(id:number | number[] | undefined) {\n         let ids = Array.isArray(id) ? id : (id===undefined ? Object.keys(this.#_signals) : [id])\n         for(let id of ids){\n             if(id in this.#_signals){\n                 try{\n                     this.#_signals[id].destroy()\n                     delete this.#_signals[id]\n                 }catch (e) { }\n             }\n         }\n    }\n    resolve(){\n         let args = arguments\n         Object.values(this.#_signals).forEach(signal=>signal.resolve(args))\n    }\n    reject(e:Error | string){\n         Object.values(this.#_signals).forEach(signal=>signal.reject(e))\n    }\n    reset(){\n         Object.values(this.#_signals).forEach(signal=>signal.reset())\n    }\n } \n\n ","import type { VoerkaI18nLanguageMessages } from \"@/types\";\r\nimport type { VoerkaI18nScope } from \"..\";\r\nimport { isFunction  } from \"flex-tools/typecheck/isFunction\";\r\nimport { isPlainObject } from \"flex-tools/typecheck/isPlainObject\"; \r\nimport { IAsyncSignal,asyncSignal } from \"flex-tools/async/asyncSignal\";\r\n\r\n/**\r\n * 语言包补丁\r\n * \r\n */\r\nexport class PatchMessageMixin{    \r\n\tprotected _patching:IAsyncSignal | undefined\r\n\tprivate _getPatchKey(this:VoerkaI18nScope,language:string){\r\n\t\treturn `voerkai18n_${this.id}_${language}_patched_messages`\r\n\t}\r\n    /**\r\n     * 清除保存在本地的补丁语言包\r\n     * @param language \r\n     */\r\n    clearPatchedMessages(this:VoerkaI18nScope,language?:string) {\r\n        if(this.storage){\r\n            let langs = language ? [language] : this.languages.map(language=>language.name);\r\n            for(let lang of langs){\r\n                this.storage.remove(this._getPatchKey(lang));\r\n            }\r\n        }\r\n    } \r\n\t/**\r\n\t * 当指定了默认语言包加载器后，会从服务加载语言补丁包来更新本地的语言包\r\n\t *\r\n\t * 补丁包会自动存储到本地的LocalStorage中\r\n\t *\r\n\t * @param {*} messages\r\n\t * @param {*} language\r\n\t * @returns {Promise<number>} 返回补丁包的数量\r\n\t */\r\n\tprotected async _patch(this:VoerkaI18nScope, language?:string){\r\n\t\tthis._patching = asyncSignal();\r\n\t\tif (!language) language = this.activeLanguage;\r\n      \t// 1. 从本地存储中恢复补丁\r\n        this._restorePatchedMessages(this.activeMessages, language); \r\n\t\t// 2. 从远程加载语言包补丁\t\t\r\n\t\ttry {\r\n\t\t\tif (isFunction(this.loader)){\r\n\t\t\t\tconst pachedMessages = (await this._loadMessagesFromLoader(language)) as unknown as VoerkaI18nLanguageMessages;\r\n\t\t\t\tif(isPlainObject(pachedMessages)){\r\n\t\t\t\t\tObject.assign(this._activeMessages, pachedMessages);\r\n\t\t\t\t\tthis._setPatchedMessages(pachedMessages, language);\r\n\t\t\t\t\tthis.emit('patched',{ language:language,scope:this.id })\r\n\t\t\t\t}\r\n\t\t\t}\t\t\t\r\n\t\t}catch (e:any) {\r\n\t\t\tthis.logger.warn(`从远程加载语言补丁包<${language}>时出错: ${e.stack}(scope=${this.id})`);\r\n\t\t}finally{\r\n\t\t\tthis._patching?.resolve()\r\n\t\t\tthis._patching = undefined\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * 从本地存储中读取语言包补丁合并到当前语言包中\r\n\t */\r\n\tprotected _restorePatchedMessages(this:VoerkaI18nScope,messages:VoerkaI18nLanguageMessages,language:string) {\r\n\t\tconst patchedMessages = this._getPatchedMessages(language);\r\n\t\tif (isPlainObject(patchedMessages)){\r\n            Object.assign(messages, patchedMessages);\r\n            this.emit('restore',{language,scope:this.id})\r\n            this.logger.debug(`成功恢复补丁语言包<${language}>(scope=${this.id})`);\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * 将读取的补丁包保存到本地的LocalStorage中\r\n\t *\r\n\t * 为什么要保存到本地的LocalStorage中？\r\n\t *\r\n\t * 因为默认语言是静态嵌入到源码中的，而加载语言包补丁是延后异步的，\r\n\t * 当应用启动第一次就会渲染出来的是没有打过补丁的内容。\r\n\t *\r\n\t * - 如果还需要等待从服务器加载语言补丁合并后再渲染会影响速度\r\n\t * - 如果不等待从服务器加载语言补丁就渲染，则会先显示未打补丁的内容，然后在打完补丁后再对应用进行重新渲染生效\r\n\t *   这明显不是个好的方式\r\n\t *\r\n\t * 因此，采用的方式是：\r\n\t * - 加载语言包补丁后，将之保存到到本地的LocalStorage中\r\n\t * - 当应用加载时会查询是否存在补丁，如果存在就会合并渲染\r\n\t *\r\n\t * @param {*} messages\r\n\t */\r\n\tprotected _setPatchedMessages(this:VoerkaI18nScope,messages:VoerkaI18nLanguageMessages, language:string) {\r\n        if(!this.attached && !this.storage) return \r\n\t\ttry {\r\n            this.storage && this.storage.set(this._getPatchKey(language),JSON.stringify(messages));\r\n\t\t} catch (e:any) {\r\n\t\t\tthis.logger.error(`保存语言包补丁(${language})时出错: ${e.stack}(scope=${this.id})`);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * 从本地缓存中读取补丁语言包\r\n\t * @param {*} language\r\n\t * @returns\r\n\t */\r\n\tprotected _getPatchedMessages(this:VoerkaI18nScope,language:string) {\r\n\t\ttry {\r\n            if(this.storage && this.options.cachePatch){\r\n                return this.storage.get(this._getPatchKey(language)) \r\n            }else{\r\n                return {};\r\n            }\r\n\t\t} catch (e:any) {\r\n            this.logger.error(`读取语言包补丁(${language})时出错:${e.stack}(scope=${this.id})`);\r\n\t\t\treturn {};\r\n\t\t}\r\n\t}\r\n}\r\n\r\n","export class VoerkaI18nError extends Error{}\r\nexport class VoerkaI18nInvalidLanguageError extends VoerkaI18nError{}\r\nexport class VoerkaI18nOnlyOneAppScopeError extends VoerkaI18nError{}\r\nexport class VoerkaI18nChangeLanguageError extends VoerkaI18nError{}\r\nexport class VoerkaI18nLoadLanguageError extends VoerkaI18nError{}\r\n","/**\r\n * \r\n * \r\n * 加载语言包\r\n * \r\n */\r\n\r\nimport { isFunction } from \"flex-tools/typecheck/isFunction\";\r\nimport { isPlainObject } from \"flex-tools/typecheck/isPlainObject\";\r\nimport type { VoerkaI18nScope } from \"..\";\r\nimport type { VoerkaI18nDynamicLanguageMessages, VoerkaI18nLanguageMessages } from \"@/types\";\r\nimport { IAsyncSignal,asyncSignal } from \"asyncsignal\"\r\nimport {  VoerkaI18nError, VoerkaI18nLoadLanguageError } from \"@/errors\";\r\nimport { loadAsyncModule } from \"@/utils/loadAsyncModule\";\r\n\r\n\r\n\r\nexport class ChangeLanguageMixin{     \r\n    protected _refreshSignal? :IAsyncSignal \r\n\r\n    /** \r\n     * 刷新语言包 \r\n     * @param language \r\n     */\r\n    async refresh(this:VoerkaI18nScope,language?:string,options?:{fallback?:boolean,patch:boolean}):Promise<string>{\r\n        if(!this._refreshSignal) this._refreshSignal = asyncSignal() \r\n        if (!language) language   = this.activeLanguage;        \r\n        let finalLanguage : string = language; \r\n        let finalMessages : VoerkaI18nLanguageMessages | undefined = undefined\r\n        const { patch,fallback } = Object.assign({ fallback:false,patch:true },options)\r\n\r\n        try{\r\n            finalMessages = await this._loadLanguageMessages(language)\r\n            this._activeMessages = finalMessages as VoerkaI18nLanguageMessages\r\n            // 打语言包补丁, 如果是从远程加载语言包则不需要再打补丁了,因为远程加载的语言包已经是补丁过的了            \r\n            if(finalMessages && !finalMessages.$remote && patch) {\r\n                await this._patch(language);\r\n            }\r\n        }catch(e:any){\r\n            // 切换语言失败，回退到默认语言,  注意：回退语言是不可能出错的，无论回退到了何种语言，默认语言总是可以兜底的回退语言\r\n            if(e && e instanceof VoerkaI18nError){\r\n                const fallbackLanguage = this.getFallbackLanguage(language)\r\n                if(fallbackLanguage && fallbackLanguage!==language){\r\n                    finalLanguage = await this.refresh(fallbackLanguage,{ patch,fallback:true })\r\n                }\r\n            }\r\n        }finally{\r\n            if(!fallback){\r\n                this._activeLanguage = finalLanguage\r\n                if(typeof(this.messages[finalLanguage])==='function' || !(finalLanguage in this.messages)) this.messages[finalLanguage] = this._activeMessages\r\n                this._activeParagraphs = this.paragraphs[finalLanguage]\r\n                this._refreshSignal.resolve()\r\n                this._refreshSignal = undefined\r\n                await this.emit('scope/change',finalLanguage,true)\r\n            }\r\n        }\r\n        this._setLanguageAttr()    \r\n        return finalLanguage\r\n    }\r\n    /**\r\n     * \r\n     *   通过加载器从远程加载指定语言的语言包\r\n     * \r\n     *   - 简单的对象{}\r\n     *   - 或者是一个返回Promise<VoerkaI18nLanguageMessages>的异步函数\r\n     *   - 或者是全局的默认加载器 \r\n     * \r\n     * @param language 语言名称\r\n     * @returns \r\n     */\r\n    private async _loadLanguageMessages(this:VoerkaI18nScope,language:string):Promise<VoerkaI18nLanguageMessages | undefined>{\r\n        \r\n        this.logger.debug(`准备加载语言包:${language}`)\r\n\r\n        // 非默认语言可以是：语言包对象，也可以是一个异步加载语言包文件,加载器是一个异步函数\r\n\t\t// 如果没有加载器，则无法加载语言包，因此回退到默认语言\r\n\t\tconst loader = this.messages[language];\r\n        let messages:VoerkaI18nLanguageMessages | undefined = undefined;\r\n\r\n        if (isPlainObject(loader)) {                // 静态语言包\r\n            messages = loader as unknown as VoerkaI18nLanguageMessages;\r\n        } else if(isFunction(loader)) {             // 异步chunk语言包 \r\n            try{\r\n                messages = await loadAsyncModule.call(this,loader)\r\n            }catch(e:any){\r\n                this.logger.error(`加载异步语言包<${language}>失败:${e.message}`)\r\n                messages = undefined\r\n            }\r\n        } \r\n\r\n        // 使用全局默认加载器从服务器加载语言包\r\n        if (!messages && isFunction(this.loader)) { \r\n            // 从远程加载语言包:如果该语言没有指定加载器，则使用全局配置的默认加载器\r\n            try{\r\n                const remoteMessages = (await this._loadMessagesFromLoader(language)) as unknown as VoerkaI18nDynamicLanguageMessages;\r\n                if(isPlainObject(remoteMessages)){  \r\n                    messages = Object.assign(\r\n                        { $remote : true },                     // 添加一个标识，表示该语言包是从远程加载的                     \r\n                        this.messages[this.defaultLanguage], \r\n                        remoteMessages\r\n                    ) as VoerkaI18nLanguageMessages;            // 合并默认语言包和动态语言包,这样就可以局部覆盖默认语言包\r\n                }else{\r\n                    this.logger.error(`错误的语言包<${language}>数据:${remoteMessages}`)\r\n                }\r\n            }catch(e:any){\r\n                throw new VoerkaI18nLoadLanguageError(e.message)\r\n            }\r\n        }\r\n        if(!isPlainObject(messages)) throw new VoerkaI18nLoadLanguageError(language)\r\n        return messages\r\n    }\r\n    /**\r\n     * \r\n     * 从远程加载信息包\r\n     * \r\n     * @param this \r\n     * @param language \r\n     */\r\n    protected async _loadMessagesFromLoader(this:VoerkaI18nScope,language:string){\r\n        if(isFunction(this.loader)){\r\n            return await this.loader.call(this,language,this)      \r\n        }\r\n    }\r\n    /**\r\n     * \r\n     * - 如果正在刷新语言包，则等待刷新完成\r\n     *  \r\n     * i18nScope.ready(callback,timeout)\r\n     *   \r\n     * @param this \r\n     * @returns \r\n     */\r\n    ready(this:VoerkaI18nScope,timeout?:number):Promise<void>  \r\n    ready(this:VoerkaI18nScope,callback:(activeLanguage:string)=>void,timeout?:number):void\r\n    ready(this:VoerkaI18nScope):any{  \r\n        const callback = typeof arguments[0] === 'function' ? arguments[0] : undefined\r\n        const timeout = typeof arguments[0] === 'number' ? arguments[0] : arguments[1]\r\n        if(typeof(callback)==='function'){\r\n            this.manager.ready(callback,timeout)      \r\n        }else{\r\n            return new Promise(resolve=>{\r\n                this.manager.ready(resolve,timeout)      \r\n            })\r\n        }        \r\n    }\r\n    /**\r\n     * await changing()\r\n     * \r\n     * @param this \r\n     * @param timeout \r\n     * @returns \r\n     */\r\n    async changing(this:VoerkaI18nScope,timeout?:number){\r\n        if(!this._refreshSignal && !this._patching) {\r\n            return        \r\n        }\r\n        await Promise.all([this._refreshSignal?.(timeout), this._patching?.(timeout)]) \r\n    }\r\n}","import { VoerkaI18nManager } from \"./manager\"\r\n\r\nexport type VoerkaI18nLoggerLevels = 'warn' | 'error' | 'info' | 'debug'\r\n\r\nexport type VoerkaI18nLogger = {\r\n    [key in VoerkaI18nLoggerLevels]: (message:string,...args:any[])=>void\r\n}\r\n\r\nexport type VoerkaI18nLoggerOutput = (level:VoerkaI18nLoggerLevels,message:string)=>void\r\n\r\nexport const ConsoleLogger =  {\r\n    warn : console.warn,\r\n    error: console.error,\r\n    info : console.info,\r\n    debug: console.debug        \r\n}\r\n\r\n\r\n\r\nexport function createLogger(logFn:VoerkaI18nLoggerOutput):VoerkaI18nLogger{        \r\n    let  manager:VoerkaI18nManager    \r\n    const logCache:[string,string][] = []\r\n    const logOutput = (level:VoerkaI18nLoggerLevels,...args:any[])=>{\r\n        const message = args.join(\" \")\r\n        if(!manager){\r\n            // @ts-ignore\r\n            manager =  globalThis.VoerkaI18n \r\n            if(manager && manager instanceof VoerkaI18nManager){\r\n                if(manager.debug){\r\n                    logCache.push([level,message])\r\n                    const log = (level:VoerkaI18nLoggerLevels,message:string)=>{                        \r\n                        if(logFn){\r\n                            logFn(level,message)\r\n                        }else{\r\n                            ConsoleLogger[level as VoerkaI18nLoggerLevels](message)\r\n                        }\r\n                    }\r\n                    manager.on(\"log\",({level, message}) => log(level as any, message))\r\n                    logCache.forEach(([level,message])=>log(level as any,message))\r\n                }else{                    \r\n                    logCache.splice(0,logCache.length)      // 清空缓存\r\n                }\r\n            }else{\r\n                logCache.push([level,message])\r\n            }\r\n        }else{\r\n            if(!manager.debug) return\r\n            manager.emit(\"log\",{level,message})    \r\n        }\r\n    }\r\n    return { \r\n        warn: ( ...args: any[]) => logOutput(\"warn\",...args),\r\n        error: ( ...args: any[]) => logOutput(\"error\",...args),\r\n        info: ( ...args: any[]) => logOutput(\"info\",...args),\r\n        debug: (...args: any[]) => logOutput(\"debug\",...args)\r\n    }\r\n}\r\n ","/**\r\n * \r\n *  保存所有格式化器数据\r\n *  \r\n */\r\nimport { Dict, LanguageName } from '@/types';\r\nimport type { VoerkaI18nScope } from '../scope';        \r\nimport { VoerkaI18nFormatter, VoerkaI18nFormatterBuilder, VoerkaI18nFormatters } from './types';\r\n \r\nexport interface VoerkaI18nScopeCache{\r\n    activeLanguage :string | null,\r\n    typedFormatters: VoerkaI18nFormatters,\r\n    formatters     : VoerkaI18nFormatters,\r\n}\r\n\r\nexport class FormattersNotLoadedError extends Error{\r\n    constructor(language:string){\r\n        super(`Formatters of language<${language}> is not loaded,try to call load()`)\r\n    }\r\n} \r\n\r\nexport class VoerkaI18nFormatterManager{\r\n    private _formatters        : VoerkaI18nFormatters = [] \r\n    private _scope             : VoerkaI18nScope                                         \r\n\r\n    constructor(scope:VoerkaI18nScope){ \r\n        this._scope = scope   \r\n        this._formatters = scope?.options.formatters     \r\n        this._registerFormatters()\r\n    }    \r\n    get scope(){ return this._scope! }      \r\n    get formatters(){ return this._formatters }    \r\n    /** \r\n     * 加载所有格式化器 \r\n     */\r\n    private _registerFormatters(){\r\n        this._formatters && this._formatters.forEach((formatter)=>{\r\n            if(Array.isArray(formatter)){\r\n                this.register.apply(this,formatter as any);\r\n            }else{\r\n                this.register.apply(this,[formatter]);\r\n            }\r\n        })        \r\n    }   \r\n    private _addFormatter(filter:VoerkaI18nFormatter<any,any>){\r\n        try{\r\n            this.scope.interpolator.addFilter(filter)\r\n            // 如果是全局格式化器，则注册到全局scope(即appCcope)里面\r\n            if(filter){\r\n                const appScope = this.scope.manager.scope\r\n                if(appScope.id !== this.scope.id){\r\n                    appScope.interpolator.addFilter(filter)\r\n                }\r\n            }\r\n        }catch(e:any){\r\n            this.scope.logger.error(`fail while register formatter<${filter.name}>：${e.stack}`)\r\n        }\r\n    }\r\n    register<Args extends Dict,Config extends  Dict = Args>(\r\n        formatter: VoerkaI18nFormatter<Args, Config>,\r\n        configs? : Partial<Record<LanguageName,Partial<Config>>>,\r\n        defaultConfig? : Partial<Config>\r\n    ){\r\n        const scope = this.scope\r\n        const oldNext = formatter.next\r\n        formatter.next = function (value, args, ctx) {\r\n            const langConfig = ctx.getConfig as any // 语言包中的$config\r\n            ctx.getConfig = () => {\r\n                return Object.assign({}, \r\n                    defaultConfig,\r\n                    configs?.[scope.activeLanguage],                    \r\n                    langConfig(formatter.name),                    \r\n                ) as Config;\r\n            }\r\n            return oldNext.call(this, value, args, ctx);\r\n        }  \r\n        // \r\n        this._addFormatter(formatter) \r\n    }\r\n\r\n}","\r\n/**\r\n * 判断给定对象是否为管理者对象。\r\n * 管理者对象需满足以下条件：\r\n * 1. 是一个对象。\r\n * 2. 具有 `__VOERKAI18N_MANAGER__` 属性。\r\n * \r\n * 为什么不用 `instanceof` 运算符？\r\n * \r\n * 为了兼容让scope可以注册到不同版本的VoerkaI18nManager中，不能使用instanceof运算符。\r\n * \r\n * \r\n * @param obj 要检查的对象\r\n * @returns 如果对象是管理者对象，则返回 true；否则返回 false。\r\n */\r\nexport function isI18nManger(obj: any) {\r\n    return obj && typeof (obj) === 'object' && obj.__VoerkaI18nManager__\r\n}","import type { VoerkaI18nLanguage } from \"@/types\";\r\nimport type { VoerkaI18nScope } from \"..\";\r\n\r\n\r\nexport class LanguageMixin{\r\n\t/**\r\n\t * 获取指定语言信息\r\n\t * @param {*} language\r\n\t * @returns\r\n\t */\r\n\tgetLanguage(this:VoerkaI18nScope,language:string):VoerkaI18nLanguage | undefined{\r\n\t\tlet index = this.languages.findIndex((lng) => lng.name == language);\r\n\t\tif (index !== -1) return this.languages[index];\r\n    }\r\n\r\n    /**\r\n     * 获取指定语言的备用语言。如果指定的语言存在备用语言选项，则返回该备用语言；否则返回默认语言。\r\n     * @param this - VoerkaI18nScope 实例\r\n     * @param language - 需要获取备用语言的目标语言代码\r\n     * @returns 返回备用语言代码或默认语言代码\r\n     */\r\n    getFallbackLanguage(this: VoerkaI18nScope, language: string): string {\r\n        const lngOptions = this.getLanguage(language)\r\n\t\treturn (lngOptions && lngOptions.fallback)\r\n\t\t\t\t\t|| this.options.fallback\r\n\t\t\t\t\t|| this._defaultLanguage        \r\n    }\r\n\t/**\r\n\t * 返回是否存在指定的语言\r\n\t * @param {*} language 语言名称\r\n\t * @returns\r\n\t */\r\n\thasLanguage(this:VoerkaI18nScope,language:string) {\r\n\t\treturn this.languages.findIndex((lang:VoerkaI18nLanguage) => lang.name == language) != -1;\r\n\t} \r\n}\r\n\r\n ","import { isMessageId } from \"@/utils/isMessageId\"\r\nimport { isFunction } from \"flex-tools/typecheck/isFunction\"\r\nimport { isNumber } from \"flex-tools/typecheck/isNumber\"\r\nimport { isPlainObject } from \"flex-tools/typecheck/isPlainObject\"\r\nimport type { VoerkaI18nScope } from \"..\"\r\nimport type { VoerkaI18nTranslateVars, VoerkaI18nTranslateOptions, VoerkaI18nLanguageMessages } from \"@/types\"\r\n\r\n\r\n\r\nexport class TranslateMixin {    \r\n    /**\r\n     * 根据值的单数和复数形式，从messages中取得相应的消息\r\n     * \r\n     * @param {*} messages  复数形式的文本内容 = [<=0时的内容>，<=1时的内容>，<=2时的内容>,...,<>=N的内容>]\r\n     * @param {*} value \r\n     */\r\n    private _getPluraMessage(this:VoerkaI18nScope,messages:string | string[],value:number){\r\n        try{\r\n            if(Array.isArray(messages)){\r\n                return messages.length > value ? messages[value] : messages[messages.length-1]\r\n            }else{\r\n                return messages\r\n            }\r\n        }catch{\r\n            return Array.isArray(messages) ? messages[0] : messages\r\n        }\r\n    }\r\n    private _getPluraValue(args:any):[number | null,any[]]{\r\n        let pluraValue:number | null = null                 // 复数值        \r\n        let vars:any[] = []                                 // 插值变量列表\r\n        // 1. 预处理变量:  复数变量保存至pluralVars中 , 变量如果是Function则调用 \r\n        if(isPlainObject(args)){// 字典插值\r\n            const dictVars:Record<string,any> = args\r\n            for(const [name,value] of Object.entries(dictVars)){\r\n                if(isFunction(value)){\r\n                    try{\r\n                        dictVars[name] = value()\r\n                    }catch{\r\n                        dictVars[name] = value\r\n                    }\r\n                }                   \r\n                const isNum:boolean = typeof(dictVars[name])===\"number\"  // 以$开头的视为复数变量，记录下来\r\n                if((pluraValue==null && isNum) || name.startsWith(\"$\") && isNum){\r\n                    pluraValue = dictVars[name]\r\n                }\r\n            }            \r\n            vars = [dictVars]\r\n        }else if(Array.isArray(args)){      // 位置插值\r\n            vars = args.map((arg)=>{\r\n                try{\r\n                    arg = isFunction(arg) ? arg() : arg\r\n                    if(isNumber(arg) && !pluraValue) pluraValue = parseInt(arg)     // 约定：位置参数中以第一个数值变量作为指示复数变量\r\n                }catch{\r\n                    return String(arg)\r\n                 }\r\n                return arg   \r\n            })            \r\n        }else if(args!==undefined){         // 单个插值\r\n            pluraValue = isNumber(args) ? parseInt(args) : 0\r\n            vars = [args]\r\n        }\r\n        return [pluraValue,vars]\r\n    } \r\n \r\n    /**\r\n     * 翻译组件\r\n     * \r\n     */\r\n    protected _getTranslateComponent(this: VoerkaI18nScope ): any {\r\n        if(!this._translateComponent){\r\n            const builder =  this.options.component || this.appScope.options.component\r\n            if(typeof(builder)==='function'){\r\n                this._translateComponent =  builder.call(this,this)\r\n            }else{\r\n                this._translateComponent = ()=>{}\r\n                this.logger.warn(\"No translate component builder configured\")\r\n            }\r\n        }\r\n        return this._translateComponent\r\n    }\r\n    protected _getTranslateTransformer(this: VoerkaI18nScope ): any {\r\n        if(!this._translateTransformer){\r\n            const builder =  this.options.transform || this.appScope.options.transform\r\n            if(typeof(builder)==='function'){\r\n                this._translateTransformer =  builder.call(this,this)\r\n            }\r\n        }\r\n        return this._translateTransformer\r\n    }\r\n\r\n    private _getActiveMessages(this:VoerkaI18nScope,language:string):VoerkaI18nLanguageMessages{\r\n        const messages = this.messages[language]         \r\n        if(typeof messages === 'function') {\r\n            this.logger.warn(`When the t function specifies the language <${language}> , only synchronized language packs can be used`)\r\n            return this.activeMessages \r\n        }\r\n        return (this.messages as any)[language] as VoerkaI18nLanguageMessages\r\n    }\r\n    translate<R=string>(this:VoerkaI18nScope, message:string, vars?:VoerkaI18nTranslateVars, options?:VoerkaI18nTranslateOptions):R{ \r\n        if(typeof(message)!=='string'){\r\n            this.logger.debug(`failed to translate message:${message},it is not a string`)\r\n            return '' as R\r\n        } \r\n        const activeLanguage = options?.language || this.activeLanguage\r\n        const activeMessages = this._getActiveMessages(activeLanguage)\r\n        \r\n        // 为什么样要转义换行符？因为在translates/*.json中key不允许换行符存在，需要转义为\\\\n，这里需要转回来\r\n        message = message.replace(/\\n/g,\"\\\\n\")\r\n        // 如果内容是复数，则其值是一个数组，数组中的每个元素是从1-N数量形式的文本内容\r\n        let result:any = message        \r\n        if(!(typeof(message)===\"string\")) return message \r\n        const finalArgs = vars===undefined ? [] : (isFunction(vars) ? vars() : vars) \r\n        try{            \r\n            if(isMessageId(message)){ // 如果是数字id,\r\n                result = (activeMessages as any)[message] || message\r\n            }else{\r\n                const msgId = this.idMap[message]  \r\n                // 语言包可能是使用idMap映射过的，则需要转换\r\n                result = ( activeMessages[msgId]  || activeMessages[message] || message ) as string | string[]\r\n            }\r\n            const [pluraValue,vars] = this._getPluraValue(finalArgs)\r\n             // 2. 处理复数\r\n            // 经过上面的处理，content可能是字符串或者数组\r\n            // content = \"原始文本内容\" || 复数形式[\"原始文本内容\",\"原始文本内容\"....]\r\n            // 如果是数组说明要启用复数机制，需要根据插值变量中的某个变量来判断复数形式\r\n            if(Array.isArray(result) && result.length>0){\r\n                // 如果存在复数命名变量，只取第一个复数变量\r\n                if(pluraValue!==null){  // 启用的是位置插值 \r\n                    result = this._getPluraMessage(result,pluraValue!)\r\n                }else{ // 如果找不到复数变量，则使用第一个内容\r\n                    result = result[0]\r\n                }\r\n            }         \r\n            // 如果没有传入插值变量，则直接返回\r\n            if(finalArgs.length===0) result as string\r\n            // 进行插值处理\r\n            result = this.interpolator.replace(result as string,...vars)\r\n            \r\n            if(this._translateTransformer && options?.transform){\r\n                result = this._translateTransformer(result,vars,options)\r\n            }\r\n\r\n        }catch(e:any){\r\n            this.logger.error(`翻译失败：${e.stack}`) \r\n        }  \r\n        return result as R\r\n    } \r\n}","/**\r\n * \r\n * 从存储中恢复语言\r\n * \r\n */\r\nimport { IVoerkaI18nStorage } from \"@/types\"\r\nimport type { VoerkaI18nScope } from \"..\"\r\nimport { isStorage } from \"@/utils/isStorage\"\r\n\r\n\r\nexport class RestoreMixin{\r\n    private _getStorage(this:VoerkaI18nScope):IVoerkaI18nStorage | undefined{\r\n        const storage = this.storage \r\n        return isStorage(storage) ? storage: undefined\r\n    }\r\n    /**\r\n     * \r\n     * @param this \r\n     */\r\n    private _getStorageKey(this:VoerkaI18nScope){\r\n        const storageKey = this.options.storageKey       \r\n        return storageKey.replace(\"{scope}\",this.id)\r\n    }\r\n    /**\r\n     * 从存储器加载语言配置\r\n     */\r\n    restoreLanguage(this:VoerkaI18nScope){\r\n        const storage = this._getStorage()\r\n        if(storage){      \r\n            const storageKey = this._getStorageKey()      \r\n            const savedLanguage = storage.get(storageKey)\r\n            if(!savedLanguage || !this.hasLanguage(savedLanguage))  return \r\n            this._activeLanguage = savedLanguage\r\n            this.logger.debug(`从存储<${storageKey}>中恢复保存的语言：${savedLanguage}`)\r\n        }\r\n    }\r\n    /**\r\n     * \r\n     * 将当前语言保存到Storage\r\n     * \r\n     */\r\n    saveLanguage(this:VoerkaI18nScope){\r\n        const storage = this._getStorage()\r\n        if(storage){\r\n            if(!this._activeLanguage)  return\r\n            const storageKey = this._getStorageKey()\r\n            storage.set(storageKey,this.activeLanguage)            \r\n            this.logger.debug(`当前语言已保存到存储${storageKey}=${this.activeLanguage}`)\r\n        }\r\n    }  \r\n    clearLanguage(this:VoerkaI18nScope){\r\n        const storage = this._getStorage()\r\n        if(storage){\r\n            storage.remove(this._getStorageKey())\r\n        }\r\n    }\r\n    \r\n}","export interface GetByPathArgs {\n    defaultValue?: any; // 默认值\n    delimiter?: string; // 路径分隔符，默认为 '.',\n    matched?: ({ value, parent, indexOrKey }: {\n        value?     : any;\n        parent?    : object | any[];\n        indexOrKey?:  string | symbol | number;\n    }) => void;\n}\n\nexport function getByPath<R = any, T = object>(obj: T, path: string, options?: GetByPathArgs): R {\n    const { defaultValue, delimiter,matched } = Object.assign({\n        delimiter : '.'\n    },options)\n\n    if (!obj || typeof path !== 'string') {\n        return defaultValue as R;\n    }\n    if(!path) return obj as R    \n\n    const keys = path.split(delimiter);\n    let current: any = obj;\n    let parent: any \n    let indexOrKey:any\n    try{\n        for (const key of keys) {\n            if (current instanceof Map || current instanceof WeakMap) {\n                if(!current.has(key as any)) {\n                    return defaultValue as R\n                }\n                parent =  current                \n                indexOrKey = key\n                current = current.get(key as any);\n            } else if (current instanceof Set)  {\n                const index = parseInt(key, 10)\n                if(index>=current.size) return defaultValue as R\n                parent =  current\n                indexOrKey = index\n                current = [...current][index];\n            } else if (current && typeof current === 'object' && key in current) {\n                parent =  current\n                indexOrKey = Array.isArray(current) ? parseInt(key) : key\n                current = current[key];\n            } else {\n                return defaultValue as R;\n            }\n        }\n    }catch{\n        return defaultValue as R\n    }   \n    if(typeof(matched)===\"function\"){\n        matched({ value:current, parent, indexOrKey })\n    }\n    return current as R\n}","import { FlexVars } from \"flexvars\"\r\nimport type { VoerkaI18nScope } from \"..\"\r\nimport {  getByPath } from \"flex-tools/object/getByPath\"\r\nimport { VoerkaI18nFormatterContext } from \"@/formatter/types\"\r\n\r\nexport class InterpolatorMixin{\r\n    protected _flexVars?        : FlexVars<VoerkaI18nFormatterContext>          // 变量插值处理器,使用flexvars    \r\n    protected _initInterpolators(this:VoerkaI18nScope){\r\n        this._flexVars = new FlexVars<VoerkaI18nFormatterContext>({\r\n            filterContext:{\r\n                getConfig:(configKey?:string)=>{\r\n                    const configs = (this.activeMessages['$config'] || {}) as any\r\n                    if(!configKey) return configs\r\n                    return getByPath(configs,configKey)\r\n                },\r\n                scope:this\r\n            }\r\n        })\r\n    }\r\n}","/**\n * \n * 使用方法与object.assign一样，差别在于\n * \n *  Object.assign({a:1},{a:undefined}) === {a:undefined}\n * \n *  assignObject({a:1},{a:undefined}) === {a:1}\n * \n * 会忽略掉里面的undefined\n * \n *  当最后一参数是函数时传入(key)=>boolean，表示只有返回true时才会覆盖\n * \n \n * \n\n * \n */\n\nexport function assignObject<T extends Record<any,any> = Record<any,any>>(target:object , ...sources: any[]): T{   \n    if(sources.length === 0) return target as any;\n    let mapSources = sources.map((source,index) =>{\n        const sourceEntries = Object.entries(source || {})\n        if(sourceEntries.some(([k,v]) =>v ===undefined)){\n            return sourceEntries.reduce((result:any,[k,v])=>{\n                if(v!==undefined){\n                    result[k] = v\n                }\n                return result\n            },{})\n        }else{\n            return source\n        }\n    })\n    return  Object.assign(target as any, ...mapSources);\n}\n\n ","import type { \r\n    Voerkai18nIdMap, \r\n    VoerkaI18nLanguage, \r\n    VoerkaI18nLanguageMessages,   \r\n    VoerkaI18nLanguageMessagePack,\r\n    IVoerkaI18nStorage,  \r\n    VoerkaI18nLanguagePack,\r\n    VoerkaI18nLanguageLoader,\r\n    VoerkaI18nTranslate, \r\n    VoerkaI18nTranslateComponentBuilder,\r\n    VoerkaI18nParagraphs,\r\n    VoerkaI18nLanguageParagraphs,\r\n    VoerkaI18nTranslateVars,\r\n    VoerkaI18nTranslateOptions,\r\n    VoerkaI18nTranslateTransformBuilder,\r\n    VoerkaI18nTranslateTransformer\r\n} from \"@/types\" \r\nimport { DefaultLanguageSettings } from '../consts';\r\nimport { Mixin } from \"ts-mixer\"\r\nimport { EventEmitterMixin } from \"./mixins/eventEmitter\"\r\nimport { PatchMessageMixin } from \"./mixins/patch\"\r\nimport { ChangeLanguageMixin } from \"./mixins/change\"\r\nimport { VoerkaI18nLogger, VoerkaI18nLoggerOutput } from \"../logger\";\r\nimport { VoerkaI18nFormatters } from \"../formatter/types\"\r\nimport { getId } from \"@/utils/getId\"  \r\nimport { createLogger } from \"@/logger\";\r\nimport { VoerkaI18nFormatterManager } from \"../formatter/manager\"; \r\nimport { isI18nManger } from \"@/utils/isI18nManger\"\r\nimport { LanguageMixin } from \"./mixins/language\"\r\nimport { TranslateMixin } from \"./mixins/translate\"\r\nimport { RestoreMixin } from \"./mixins/restore\";\r\nimport { InterpolatorMixin } from \"./mixins/interpolator\"; \r\nimport { isFunction } from \"flex-tools/typecheck/isFunction\" \r\nimport { assignObject } from \"flex-tools/object/assignObject\"\r\nimport { VoerkaI18nManager } from \"../manager\"\r\nimport { LocalStorage } from \"@/storage\";\r\nimport { isBrowser } from \"@/utils/isBrowser\";\r\nimport { isMessageId } from \"@/utils/isMessageId\"; \r\n\r\n\r\n\r\nexport interface VoerkaI18nScopeOptions<TranslateComponent=any,TranslateTransformResult=any> {\r\n    id?            : string                                                  // 作用域唯一id，一般可以使用package.json中的name字段\r\n    debug?         : boolean                                                 // 是否开启调试模式，开启后会输出调试信息\r\n    library?       : boolean                                                 // 当使用在库中时应该置为true\r\n    languages      : VoerkaI18nLanguage[]                              // 当前作用域支持的语言列表\r\n    fallback?      : string                                                  // 默认回退语言\r\n    messages       : VoerkaI18nLanguageMessagePack                           // 当前语言包\r\n    paragraphs     : VoerkaI18nParagraphs                                    // 段落\r\n    idMap?         : Voerkai18nIdMap                                         // 消息id映射列表\r\n    storage?       : IVoerkaI18nStorage                                      // 语言包存储器\r\n    formatters?    : VoerkaI18nFormatters                                    // 当前作用域的格式化\r\n    log?           : VoerkaI18nLoggerOutput                                  // 日志记录器\r\n    attached?      : boolean                                                 // 是否挂接到appScope\r\n    storageKey?    : string                                                  // 保存到Storeage时的Key\r\n    loader?        : VoerkaI18nLanguageLoader                                // 从远程加载语言包 \r\n    cachePatch?    : boolean                                                 // 是否缓存补丁语言包    \r\n    injectLangAttr?: boolean | string                                        // 是否注入到html元素上注入一个langauge属性指向当前活动语言\r\n    namespaces?    : Record<string,string>                                   // 命名空间\r\n    patterns?      : string[]                                                // 源文件匹配清单，使用fast-glob匹配文件\r\n    component?     : VoerkaI18nTranslateComponentBuilder<TranslateComponent> // 翻译组件       \r\n    transform?     : VoerkaI18nTranslateTransformBuilder<TranslateTransformResult>  // 对翻译结果进行变换，比如变换为vue/ref对象\r\n} \r\n\r\nexport class VoerkaI18nScope<TranslateComponent=any,TranslateTransformResult=any> extends Mixin(\r\n        EventEmitterMixin,\r\n        PatchMessageMixin,\r\n        ChangeLanguageMixin,\r\n        LanguageMixin,\r\n        TranslateMixin,\r\n        InterpolatorMixin,\r\n        RestoreMixin\r\n    ){\r\n    __VoerkaI18nScope__ = true\r\n    static idSeq:number = 0\r\n    private _options              : Required<VoerkaI18nScopeOptions<TranslateComponent>>\r\n    private _manager!             : VoerkaI18nManager                                   // 引用全局VoerkaI18nManager配置，注册后自动引用\r\n    private _formatterManager     : VoerkaI18nFormatterManager | null = null\r\n    private _logger!              : VoerkaI18nLogger    \r\n    protected _defaultLanguage    : string ='zh-CN'                                     // 默认语言名称\r\n    protected _activeLanguage     : string ='zh-CN'                                     // 默认语言名称    \r\n    protected _activeMessages     : VoerkaI18nLanguageMessages = {}                     // 当前语言包\r\n    protected _patchedMessages    : VoerkaI18nLanguagePack = {}                         // 补丁语言包\r\n    protected _translateComponent?: TranslateComponent\r\n    protected _translateTransformer?:VoerkaI18nTranslateTransformer<TranslateTransformResult>\r\n    protected _activeParagraphs   : VoerkaI18nLanguageParagraphs = {}                   // 当前段落\r\n\r\n    $id:number = ++VoerkaI18nScope.idSeq                        \r\n\r\n    /**\r\n     * \r\n     * @param options  \r\n     */\r\n\tconstructor(options:VoerkaI18nScopeOptions) {\r\n        super()\r\n        this._options = assignObject({\r\n            id             : getId(),                       // 作用域唯一id\r\n            library        : false,                         // 当使用在库中时应该置为true\r\n            debug          : false,                         // 是否开启调试模式，开启后会输出调试信息\r\n            injectLangAttr : true,                          // 是否注入一个langauge属性到body元素，或者指定元素选择器\r\n            languages      : [],                            // 当前作用域支持的语言列表\r\n            messages       : {},                            // 所有语言包={[language]:VoerkaI18nLanguageMessages}\r\n            paragraphs     : {},                            // 段落\r\n            idMap          : {},                            // 消息id映射列表\r\n            formatters     : [],                            // 是否挂接到appScope\r\n            attached       : true,                          // 是否挂接到appScope\r\n            storageKey     : 'language',                    // 保存语言配置到Storage时的Key\r\n            cachePatch     : true                           // 是否缓存补丁语言包\r\n        },options) as Required<VoerkaI18nScopeOptions>\r\n        this._init()\r\n\t}\r\n    get id() { return this._options.id;}                                        // 作用域唯一id\t    \r\n    get options(){ return this._options}                                        // \r\n\tget attached() { return this._options.attached}                             // 作用域唯一id\t    \r\n    get debug(){return this._options.debug }                                    // 是否开启调试模式\r\n    get library(){return this._options.library }                                // 是否是库\r\n    get formatters() {\treturn this._formatterManager! }                        // 格式化器管理器\r\n    get defaultLanguage() { return this._defaultLanguage }                      // 默认语言名称    \r\n    get defaultMessages() { return this.messages[this.defaultLanguage];}        // 默认语言包    \r\n\tget messages() { return this._options.messages;\t}                           // 所有语言包\t\r\n    get paragraphs() { return this._options.paragraphs;}                        // 段落\r\n\tget idMap() { return this._options.idMap;}                                  // 消息id映射列表\t\r\n\tget languages() { return this._options.languages;}                          // 当前作用域支持的语言列表[{name,title,fallback}]\t\r\n\tget manager() {\treturn this._manager;}                                      // 引用全局VoerkaI18n配置，注册后自动引用    \r\n    get appScope() { return this._manager.scope}                                // 全局作用域\r\n\tget interpolator(){ return this._flexVars! }                                // 变量插值处理器,使用flexvars    \r\n    get logger(){ return this._logger!}                                         // 日志记录器\r\n    get t():VoerkaI18nTranslate{ return this.translate.bind(this) as VoerkaI18nTranslate}\r\n    get Translate():TranslateComponent { return this._getTranslateComponent()! as TranslateComponent }\r\n    get activeMessages() { return this._activeMessages;}                        // 当前语言包 \r\n    get activeParagraphs() { return this._activeParagraphs;}                    // 当前段落\r\n\tget activeLanguage():string { return this._activeLanguage   }  \r\n    get storage(){ return this.getScopeOption<IVoerkaI18nStorage>('storage')}    \r\n    get loader(){ return this.getScopeOption<VoerkaI18nLanguageLoader>('loader') }\r\n    get $t():VoerkaI18nTranslate<TranslateTransformResult>{ \r\n        return (message:string,vars?:VoerkaI18nTranslateVars,options?:VoerkaI18nTranslateOptions)=>{\r\n            this._getTranslateTransformer()\r\n            if(!options)  options = {}\r\n            options.transform = true\r\n            return this.translate(message,vars,options)\r\n        }\r\n    }\r\n    /**\r\n     * 有些配置项是以appScope为准\r\n     * @param name \r\n     * @returns \r\n     */\r\n    private getScopeOption<T>(name:string):T | undefined{\r\n        const scopeOpts = this._options as any\r\n        // @ts-ignore\r\n        return (this.attached ? scopeOpts[name] || (this.library ? this._manager[name] : undefined) : scopeOpts[name]) as T | undefined\r\n    }\r\n\r\n    private _initOptions(){\r\n        // 1. 检测语言配置列表是否有效\r\n        if(!Array.isArray(this.languages)){\r\n            this.logger.warn(\"[VoerkaI18n] invalid language settings, will use default language settings.\")\r\n            this._options.languages = Object.assign([],DefaultLanguageSettings)\r\n        }else if(this.languages.length==0){      \r\n            throw new Error(\"[VoerkaI18n] must provide valid language settings.\")\r\n        }\r\n        // 2.为语言配置默认回退语言，并且提取默认语言和活动语言\r\n        let activeLang: string, defaultLang: string\r\n        this.languages.forEach(language => {\r\n            if (language.default) defaultLang = language.name\r\n            if (language.active) activeLang = language.name\r\n        })\r\n        // 3. 确保提供了有效的默认语言和活动语言\r\n        const lanMessages = this._options.messages\r\n        if (!(defaultLang! in lanMessages)) defaultLang = Object.keys(lanMessages)[0]\r\n        if (!(activeLang! in lanMessages)) activeLang = defaultLang!\r\n        if (!(defaultLang! in lanMessages)) {\r\n            throw new Error(\"[VoerkaI18n] invalid language configuration, must provide valid default and active languages.\")\r\n        } \r\n        this._activeLanguage  = activeLang!\r\n        this._defaultLanguage = defaultLang!\r\n\r\n        if(!this._options.library && !this._options.storage){\r\n            this._options.storage = LocalStorage\r\n        }        \r\n        // 初始化时，默认和激活的语言包只能是静态语言包，不能是动态语言包\r\n        // 因为初始化时激活语言需要马上显示，如果是异步语言包，会导致显示延迟\r\n        if(isFunction(this.messages[this._defaultLanguage])){\r\n            throw new Error(\"[VoerkaI18n] default language pack must be static content, can't use async load way.\")\r\n        }\r\n        this._activeMessages   = this.messages[this._activeLanguage] as VoerkaI18nLanguageMessages\r\n        this._activeParagraphs = this.paragraphs[this._activeLanguage] as VoerkaI18nLanguageParagraphs\r\n    } \r\n    /**\r\n     * 对输入的语言配置进行处理\r\n     * - 将en配置为默认回退语言\r\n     * - 确保提供了有效的默认语言和活动语言\r\n     */\r\n    private _init(){         \r\n        this._logger = createLogger(this._options.log)\r\n        // 处理初始化参数\r\n        this._initOptions()\r\n        // appScope需要从应用中恢复保存的\r\n        if(!this.library) this.restoreLanguage()\r\n        // 初始化格式化器\r\n        this._initInterpolators()        \r\n        // 将当前实例注册到全局单例VoerkaI18nManager中\r\n\t\tthis.registerToManager()               \r\n        // 初始化格式化器\r\n        this._formatterManager = new VoerkaI18nFormatterManager(this)       \r\n    } \r\n    /**\r\n     * \r\n     * 当scope上在全局应用scope创建之后时，会调用此方法\r\n     * 本方法在注册到全局VoerkaI18nManager时由Manager调用，\r\n     * \r\n     * 注意：本方法仅当\r\n     * scope是在全局应用scope创建之前时才会调用\r\n     * \r\n     * 如果scope是在全局应用scope创建之后时创建的，则不会调用此方法\r\n     * 因为此时scope会直接注册到全局VoerkaI18nManager中，不会保存到全局变量__VoerkaI18nScopes__中\r\n     * \r\n     * @param manager \r\n     * @returns \r\n     */\r\n    bind(manager:VoerkaI18nManager){\r\n        this._manager = manager               \r\n        this._manager.once('init',this._initRefresh.bind(this))        \r\n    }\r\n    /**\r\n     * 第一次初始化时刷新语言\r\n     */\r\n    private _initRefresh(getInitLanguage?:()=>string){\r\n        if(this.library){\r\n            this.refresh(getInitLanguage && getInitLanguage())\r\n        }else{  \r\n            const tasks:any[]=[]\r\n            if(this._defaultLanguage !== this._activeLanguage || isFunction(this.activeMessages)){\r\n                tasks.push(this.refresh(undefined,{ patch:false }))                \r\n            }    \r\n            tasks.push(\r\n                this._patch()\r\n            )\r\n            Promise.all(tasks).then(()=>{\r\n                this.emit('ready',this.activeLanguage,true)                \r\n                this._setLanguageAttr()   \r\n            })\r\n        }        \r\n    }\r\n\r\n    /**\r\n     * 注册当前作用域到全局作用域\r\n     * @param callback \r\n     */\r\n    private registerToManager(){ \r\n        if(!this.attached) return\r\n        const isAppScope = !this.options.library \r\n        if(isAppScope){\r\n            if(globalThis.VoerkaI18n && globalThis.VoerkaI18n.scope && isBrowser()){\r\n               console.warn(\"Only can have one i18nScope with library=false\")\r\n            }\r\n            this._manager = new VoerkaI18nManager(this)            \r\n        }\r\n        // 当前作用域是库时，如果此时Manager和应用Scope还没创建就先保存到了全局变量__VoerkaI18nScopes__中\r\n        // 当应用Scope创建后，会再调用registerToManager方法注册到全局VoerkaI18nManager中\r\n        const manager = globalThis.VoerkaI18n as VoerkaI18nManager\r\n        if(manager && isI18nManger(manager)){\r\n            if(isAppScope){\r\n                this._initRefresh()\r\n            }else{\r\n                manager.register(this)  \r\n            } \r\n        }else{\r\n            if(!globalThis.__VoerkaI18nScopes__) globalThis.__VoerkaI18nScopes__ = []\r\n            globalThis.__VoerkaI18nScopes__.push(this)\r\n        }\r\n    }\r\n\tasync change(language:string) {\r\n        let finalLang:string = this.activeLanguage\r\n        if(this.attached){\r\n            finalLang = await this._manager.change(language)\r\n        }else{\r\n            finalLang = await this.refresh(language)\r\n        }            \r\n        return finalLang \r\n    }  \r\n    /**\r\n     * 检查当前环境是是否是在浏览器环境中，如果是，则在body上添加language=<activeLanguage>属性\r\n     */\r\n    protected _setLanguageAttr(){       \r\n        if(this.library || !isBrowser()) return\r\n        try{\r\n            const injectLangAttr = this._options.injectLangAttr\r\n            if(!injectLangAttr) return\r\n            const ele = injectLangAttr===true ? document.body : document.body.querySelector(injectLangAttr as string)\r\n            if(ele){\r\n                ele.setAttribute(\"lang\",this.activeLanguage)\r\n            }            \r\n        }catch{}\r\n    }\r\n    /**\r\n     * \r\n     * @param message \r\n     * @returns \r\n     */\r\n    getRawMessage(message:string){\r\n        if(isMessageId(message)){\r\n            if(message in this.defaultMessages){\r\n                return (this.defaultMessages as any)[message]\r\n            }\r\n        }else{\r\n            return message\r\n        }\r\n    }\r\n    getMessageId(message:any){\r\n        if(isMessageId(message)){\r\n            return message\r\n        }else{\r\n            if(message in this.idMap){\r\n                return this.idMap[message]\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n","/**\r\n * \r\n * 提供格式化相关逻辑\r\n * \r\n */\r\nimport type { VoerkaI18nScope } from \"@/scope\";\r\nimport { Dict, LanguageName  } from \"@/types\";\r\nimport type { VoerkaI18nFormatter } from \"./types\";  \r\nimport { VoerkaI18nFormatterBuilder } from './types';\r\n\r\n\r\nexport function createFormatter<Args extends Dict,Config extends  Dict = Args>(\r\n    formatter: VoerkaI18nFormatter<Args, Config>,\r\n    configs? : Partial<Record<LanguageName,Partial<Config>>>,\r\n    defaultConfig? : Partial<Config>\r\n){\r\n    return ((scope: VoerkaI18nScope)=>{\r\n        const oldNext = formatter.next\r\n        formatter.next = function (value, args, ctx) {\r\n            const langConfig = ctx.getConfig as any // 语言包中的$config\r\n            ctx.getConfig = () => {\r\n                return Object.assign({}, \r\n                    defaultConfig,\r\n                    configs?.[scope.activeLanguage],                    \r\n                    langConfig(formatter.name),                    \r\n                ) as Config;\r\n            }\r\n            return oldNext.call(this, value, args, ctx);\r\n        }  \r\n        return formatter as VoerkaI18nFormatter<Args, Config>\r\n    }) as VoerkaI18nFormatterBuilder<Args,Config>\r\n}\r\n \r\n","import type { VoerkaI18nPlugin } from \"./types\"\r\n\r\n\r\nexport function definePlugin(plugin:VoerkaI18nPlugin){    \r\n    const manager = globalThis.VoerkaI18n\r\n    if(manager){\r\n        manager.registerPlugin(plugin)\r\n    }else{\r\n        if(!globalThis.__VoerkaI18nPlugins__) globalThis.__VoerkaI18nPlugins__ = []\r\n        globalThis.__VoerkaI18nPlugins__.push(plugin)\r\n    }\r\n}"]}