UNPKG

ng2-logger

Version:

isomorphic logger for browser/server in typescript

1 lines 16.9 kB
{"version":3,"file":"ng2-logger-browser.mjs","sources":["../../../tmp-libs-for-dist/ng2-logger/projects/ng2-logger/src/lib/ng2-logger.ts","../../../tmp-libs-for-dist/ng2-logger/projects/ng2-logger/src/lib/index.ts","../../../tmp-libs-for-dist/ng2-logger/projects/ng2-logger/src/ng2-logger-browser.ts"],"sourcesContent":["//#region imports\n/* */ \nimport * as stringify from 'json-stringify-safe';\nimport { Helpers, json5, UtilsOs } from 'tnp-core/browser';\n\n/* */\n/* */\n \n//#endregion\n\n//#region level\nexport enum Level {\n DATA,\n INFO,\n WARN,\n ERROR,\n SUCCESS,\n TASK_STARTED,\n TASK_DONE,\n}\n//#endregion\n\n//#region constants\nexport const LevelKey = {\n [Level.DATA]: 'data',\n [Level.INFO]: 'info',\n [Level.WARN]: 'warn',\n [Level.ERROR]: 'error',\n [Level.SUCCESS]: 'success',\n [Level.TASK_STARTED]: 'taskstarted',\n [Level.TASK_DONE]: 'taskdone',\n};\n\nexport const LevelOrder = [\n LevelKey[Level.DATA],\n LevelKey[Level.TASK_STARTED],\n LevelKey[Level.TASK_DONE],\n LevelKey[Level.INFO],\n LevelKey[Level.SUCCESS],\n LevelKey[Level.WARN],\n LevelKey[Level.ERROR],\n];\n\nconst levelIcon = {\n [Level.INFO]: 'ℹ️',\n [Level.ERROR]: '❌',\n [Level.WARN]: '⚠️',\n [Level.SUCCESS]: '✅',\n [Level.TASK_STARTED]: '🚀',\n [Level.TASK_DONE]: '🏁',\n [Level.DATA]: '',\n};\n\n//#endregion\n\n//#region log namespace\nexport namespace Log {\n //#region internal state\n\n const instances = new Map<string, Logger>();\n\n let originalConsole: Partial<typeof console> | null = null;\n let permanentlyDisabled = false;\n\n const consoleMethods = ['log', 'info', 'warn', 'error'] as const;\n\n let globalLevel: Level | null = null;\n\n //#endregion\n\n //#region settings\n\n export const settings = {\n mutedModules: [] as string[],\n showTimestamp: false,\n };\n\n //#endregion\n\n //#region helpers\n\n const isMutedModule = (moduleName: string): boolean => {\n if (settings.mutedModules.length === 0) return false;\n return !Helpers.contain(settings.mutedModules, moduleName);\n };\n\n //#endregion\n\n //#region public api\n\n export const create = (moduleName: string, ...level: Level[]): Logger => {\n const log = new Logger(\n moduleName,\n getRandomColor(),\n level,\n isMutedModule(moduleName),\n undefined,\n );\n\n instances.set(moduleName, log);\n return log;\n };\n\n export const setGlobalLevel = (level: Level) => {\n globalLevel = level;\n };\n\n export const onlyLevel = (...levels: Level[]): void => {\n instances.forEach(instance => {\n instance.allowed = levels;\n });\n };\n\n export const onlyModules = (...modules: (string | RegExp)[]): void => {\n instances.forEach(instance => {\n const moduleName = instance.moduleName;\n\n const isAllowed = modules.some(m => {\n if (typeof m === 'string') {\n return m === moduleName;\n }\n if (m instanceof RegExp) {\n return m.test(moduleName);\n }\n return false;\n });\n\n // mute if NOT allowed\n instance.isMuted = !isAllowed;\n });\n };\n\n export const disableAllLogsPermanetly = () => {\n if (permanentlyDisabled) return;\n\n if (!originalConsole) {\n originalConsole = {};\n consoleMethods.forEach(m => {\n originalConsole![m] = console[m];\n });\n }\n\n consoleMethods.forEach(m => {\n console[m] = () => {};\n });\n\n permanentlyDisabled = true;\n };\n\n export const disableAllLogs = () => {\n if (permanentlyDisabled) return;\n\n if (!originalConsole) {\n originalConsole = {};\n consoleMethods.forEach(m => {\n originalConsole![m] = console[m];\n });\n }\n\n consoleMethods.forEach(m => {\n console[m] = () => {};\n });\n };\n\n export const enableAllLogs = () => {\n if (permanentlyDisabled) return;\n if (!originalConsole) return;\n\n consoleMethods.forEach(m => {\n if (originalConsole && originalConsole[m]) {\n console[m] = originalConsole[m] as any;\n }\n });\n };\n\n //#endregion\n\n //#region logger class\n\n class Logger {\n constructor(\n public readonly moduleName: string,\n public color: string,\n public allowed: Level[],\n public isMuted: boolean,\n /**\n * Set how much characters in terminal/console\n * your module name should take\n */\n public moduleWidth: number | undefined,\n ) {\n this.createLevelMethod(Level.DATA);\n this.createLevelMethod(Level.DATA, 'd');\n this.createLevelMethod(Level.INFO);\n this.createLevelMethod(Level.INFO, 'i');\n this.createLevelMethod(Level.WARN);\n this.createLevelMethod(Level.WARN, 'w');\n this.createLevelMethod(Level.ERROR);\n this.createLevelMethod(Level.ERROR, 'er');\n this.createLevelMethod(Level.SUCCESS);\n this.createLevelMethod(Level.TASK_STARTED);\n this.createLevelMethod(Level.TASK_DONE);\n }\n\n declare data: (message: string, ...data: any[]) => void;\n\n declare d: (message: string, ...data: any[]) => void;\n\n declare info: (message: string, ...data: any[]) => void;\n\n declare i: (message: string, ...data: any[]) => void;\n\n declare warn: (message: string, ...data: any[]) => void;\n\n declare w: (message: string, ...data: any[]) => void;\n\n declare error: (message: string, ...data: any[]) => void;\n\n declare er: (message: string, ...data: any[]) => void;\n\n public setLevel(l: Level) {\n this.allowed = [l];\n return this;\n }\n\n public mute() {\n this.isMuted = true;\n return this;\n }\n\n public logOnlyWhen(expression: (() => boolean) | boolean): void {\n this.isMuted =\n typeof expression === 'function' ? !expression() : !expression;\n }\n\n private createLevelMethod(level: Level, overrideMethodName?: string) {\n const methodName = overrideMethodName\n ? overrideMethodName\n : LevelKey[level];\n\n (this as any)[methodName] = (message: string, ...data: any[]) => {\n if (this.isMuted) return this;\n\n if (globalLevel !== null && level < globalLevel) {\n return this;\n }\n\n if (this.allowed.length === 0 || Helpers.contain(this.allowed, level)) {\n displayMsg(\n message,\n data.length === 0 ? undefined : data,\n this.moduleName,\n this.color,\n level,\n this.moduleWidth,\n permanentlyDisabled,\n );\n }\n\n return this;\n };\n }\n }\n\n //#endregion\n}\n//#endregion\n\n//#region get random color\nconst getRandomColor = (): string => {\n/* */\n/* */\n/* */\n/* */\n \n\n const letters = '0123456789ABCDEF';\n return (\n '#' +\n Array.from({ length: 6 })\n .map(() => letters[Math.floor(Math.random() * 16)])\n .join('')\n );\n};\n//#endregion\n\n//#region console log\nconst consoleLog = (data: string, level: Level): void => {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n};\n//#endregion\n\n//#region display message\nconst displayMsg = (\n message: string,\n params: any[] | undefined,\n moduleName: string,\n moduleColor: string,\n level: Level,\n moduleWidth: number | undefined,\n permanentlyDisabled: boolean,\n): void => {\n if (permanentlyDisabled) return;\n\n if (message) {\n message = `${levelIcon[level]} ${message?.toString()}`;\n } else {\n message = levelIcon[level];\n }\n\n const timestamp = Log.settings.showTimestamp\n ? `[${new Date().toISOString()}] `\n : '';\n\n if (moduleWidth) {\n const diff = moduleWidth - moduleName.length;\n if (diff > 0) {\n for (let i = 0; i < diff; i++) {\n moduleName += ' ';\n }\n }\n }\n\n //#region @browser\n if (UtilsOs.isBrowser) {\n let levelColor = 'gray';\n\n switch (level) {\n case Level.INFO:\n levelColor = 'deepskyblue';\n break;\n case Level.WARN:\n levelColor = 'orange';\n break;\n case Level.ERROR:\n levelColor = 'red';\n break;\n case Level.SUCCESS:\n levelColor = 'green';\n break;\n case Level.TASK_STARTED:\n levelColor = 'purple';\n break;\n case Level.TASK_DONE:\n levelColor = 'mediumseagreen';\n break;\n case Level.DATA:\n default:\n levelColor = 'gray';\n }\n\n const moduleStyle = `background:${moduleColor};color:white;padding:2px 4px;border-radius:2px;`;\n\n const messageStyle = `color:${levelColor};font-weight:${level === Level.ERROR ? 'bold' : 'normal'};`;\n\n console.log(\n `%c ${moduleName} %c ${timestamp}${message}`,\n moduleStyle,\n messageStyle,\n ...(params ?? []),\n );\n }\n //#endregion\n\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n};\n//#endregion","export * from './ng2-logger';\n/* */ ","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;AAKA;AACA;AAEA;AAEA;IACY;AAAZ,CAAA,UAAY,KAAK,EAAA;AACf,IAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,KAAA,CAAA,KAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACL,IAAA,KAAA,CAAA,KAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,KAAA,CAAA,KAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAY;AACZ,IAAA,KAAA,CAAA,KAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACX,CAAC,EARW,KAAK,KAAL,KAAK,GAAA,EAAA,CAAA,CAAA;AASjB;AAEA;AACO,MAAM,QAAQ,GAAG;AACtB,IAAA,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM;AACpB,IAAA,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM;AACpB,IAAA,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM;AACpB,IAAA,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO;AACtB,IAAA,CAAC,KAAK,CAAC,OAAO,GAAG,SAAS;AAC1B,IAAA,CAAC,KAAK,CAAC,YAAY,GAAG,aAAa;AACnC,IAAA,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU;;AAGxB,MAAM,UAAU,GAAG;AACxB,IAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AACpB,IAAA,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;AAC5B,IAAA,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;AACzB,IAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AACpB,IAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;AACvB,IAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AACpB,IAAA,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;;AAGvB,MAAM,SAAS,GAAG;AAChB,IAAA,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI;AAClB,IAAA,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG;AAClB,IAAA,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI;AAClB,IAAA,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;AACpB,IAAA,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI;AAC1B,IAAA,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI;AACvB,IAAA,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE;CACjB;AAED;AAEA;AACM,IAAW;AAAjB,CAAA,UAAiB,GAAG,EAAA;;AAGlB,IAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB;IAE3C,IAAI,eAAe,GAAmC,IAAI;IAC1D,IAAI,mBAAmB,GAAG,KAAK;IAE/B,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAU;IAEhE,IAAI,WAAW,GAAiB,IAAI;;;AAMvB,IAAA,GAAA,CAAA,QAAQ,GAAG;AACtB,QAAA,YAAY,EAAE,EAAc;AAC5B,QAAA,aAAa,EAAE,KAAK;KACrB;;;AAMD,IAAA,MAAM,aAAa,GAAG,CAAC,UAAkB,KAAa;AACpD,QAAA,IAAI,IAAA,QAAQ,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;AACpD,QAAA,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAA,CAAA,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;AAC5D,IAAA,CAAC;;;AAMY,IAAA,GAAA,CAAA,MAAM,GAAG,CAAC,UAAkB,EAAE,GAAG,KAAc,KAAY;AACtE,QAAA,MAAM,GAAG,GAAG,IAAI,MAAM,CACpB,UAAU,EACV,cAAc,EAAE,EAChB,KAAK,EACL,aAAa,CAAC,UAAU,CAAC,EACzB,SAAS,CACV;AAED,QAAA,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC;AAC9B,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC;AAEY,IAAA,GAAA,CAAA,cAAc,GAAG,CAAC,KAAY,KAAI;QAC7C,WAAW,GAAG,KAAK;AACrB,IAAA,CAAC;AAEY,IAAA,GAAA,CAAA,SAAS,GAAG,CAAC,GAAG,MAAe,KAAU;AACpD,QAAA,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAG;AAC3B,YAAA,QAAQ,CAAC,OAAO,GAAG,MAAM;AAC3B,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;AAEY,IAAA,GAAA,CAAA,WAAW,GAAG,CAAC,GAAG,OAA4B,KAAU;AACnE,QAAA,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAG;AAC3B,YAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU;YAEtC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAG;AACjC,gBAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;oBACzB,OAAO,CAAC,KAAK,UAAU;gBACzB;AACA,gBAAA,IAAI,CAAC,YAAY,MAAM,EAAE;AACvB,oBAAA,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC3B;AACA,gBAAA,OAAO,KAAK;AACd,YAAA,CAAC,CAAC;;AAGF,YAAA,QAAQ,CAAC,OAAO,GAAG,CAAC,SAAS;AAC/B,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;IAEY,GAAA,CAAA,wBAAwB,GAAG,MAAK;AAC3C,QAAA,IAAI,mBAAmB;YAAE;QAEzB,IAAI,CAAC,eAAe,EAAE;YACpB,eAAe,GAAG,EAAE;AACpB,YAAA,cAAc,CAAC,OAAO,CAAC,CAAC,IAAG;gBACzB,eAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AAClC,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,cAAc,CAAC,OAAO,CAAC,CAAC,IAAG;YACzB,OAAO,CAAC,CAAC,CAAC,GAAG,MAAK,EAAE,CAAC;AACvB,QAAA,CAAC,CAAC;QAEF,mBAAmB,GAAG,IAAI;AAC5B,IAAA,CAAC;IAEY,GAAA,CAAA,cAAc,GAAG,MAAK;AACjC,QAAA,IAAI,mBAAmB;YAAE;QAEzB,IAAI,CAAC,eAAe,EAAE;YACpB,eAAe,GAAG,EAAE;AACpB,YAAA,cAAc,CAAC,OAAO,CAAC,CAAC,IAAG;gBACzB,eAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AAClC,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,cAAc,CAAC,OAAO,CAAC,CAAC,IAAG;YACzB,OAAO,CAAC,CAAC,CAAC,GAAG,MAAK,EAAE,CAAC;AACvB,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;IAEY,GAAA,CAAA,aAAa,GAAG,MAAK;AAChC,QAAA,IAAI,mBAAmB;YAAE;AACzB,QAAA,IAAI,CAAC,eAAe;YAAE;AAEtB,QAAA,cAAc,CAAC,OAAO,CAAC,CAAC,IAAG;AACzB,YAAA,IAAI,eAAe,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE;gBACzC,OAAO,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAQ;YACxC;AACF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;;;AAMD,IAAA,MAAM,MAAM,CAAA;AACV,QAAA,WAAA,CACkB,UAAkB,EAC3B,KAAa,EACb,OAAgB,EAChB,OAAgB;AACvB;;;AAGG;QACI,WAA+B,EAAA;YARtB,IAAA,CAAA,UAAU,GAAV,UAAU;YACnB,IAAA,CAAA,KAAK,GAAL,KAAK;YACL,IAAA,CAAA,OAAO,GAAP,OAAO;YACP,IAAA,CAAA,OAAO,GAAP,OAAO;YAKP,IAAA,CAAA,WAAW,GAAX,WAAW;AAElB,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC;YAClC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC;AACvC,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC;YAClC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC;AACvC,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC;YAClC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC;AACvC,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC;YACnC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;AACzC,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC;AACrC,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC;AAC1C,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;QACzC;AAkBO,QAAA,QAAQ,CAAC,CAAQ,EAAA;AACtB,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AAClB,YAAA,OAAO,IAAI;QACb;QAEO,IAAI,GAAA;AACT,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,OAAO,IAAI;QACb;AAEO,QAAA,WAAW,CAAC,UAAqC,EAAA;AACtD,YAAA,IAAI,CAAC,OAAO;AACV,gBAAA,OAAO,UAAU,KAAK,UAAU,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU;QAClE;QAEQ,iBAAiB,CAAC,KAAY,EAAE,kBAA2B,EAAA;YACjE,MAAM,UAAU,GAAG;AACjB,kBAAE;AACF,kBAAE,QAAQ,CAAC,KAAK,CAAC;YAElB,IAAY,CAAC,UAAU,CAAC,GAAG,CAAC,OAAe,EAAE,GAAG,IAAW,KAAI;gBAC9D,IAAI,IAAI,CAAC,OAAO;AAAE,oBAAA,OAAO,IAAI;gBAE7B,IAAI,WAAW,KAAK,IAAI,IAAI,KAAK,GAAG,WAAW,EAAE;AAC/C,oBAAA,OAAO,IAAI;gBACb;AAEA,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;AACrE,oBAAA,UAAU,CACR,OAAO,EACP,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,SAAS,GAAG,IAAI,EACpC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,EACV,KAAK,EACL,IAAI,CAAC,WAAW,EAChB,mBAAmB,CACpB;gBACH;AAEA,gBAAA,OAAO,IAAI;AACb,YAAA,CAAC;QACH;AACD;;AAGH,CAAC,EAjNgB,GAAG,KAAH,GAAG,GAAA,EAAA,CAAA,CAAA;AAkNpB;AAEA;AACA,MAAM,cAAc,GAAG,MAAa;;;;;IAOlC,MAAM,OAAO,GAAG,kBAAkB;AAClC,IAAA,QACE,GAAG;QACH,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;AACrB,aAAA,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AACjD,aAAA,IAAI,CAAC,EAAE,CAAC;AAEf,CAAC;AACD;AAEA;AACA,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,KAAY,KAAU;;;;;;;;;AAUxD,CAAC;AACD;AAEA;AACA,MAAM,UAAU,GAAG,CACjB,OAAe,EACf,MAAyB,EACzB,UAAkB,EAClB,WAAmB,EACnB,KAAY,EACZ,WAA+B,EAC/B,mBAA4B,KACpB;AACR,IAAA,IAAI,mBAAmB;QAAE;IAEzB,IAAI,OAAO,EAAE;AACX,QAAA,OAAO,GAAG,CAAA,EAAG,SAAS,CAAC,KAAK,CAAC,CAAA,EAAA,EAAK,OAAO,EAAE,QAAQ,EAAE,CAAA,CAAE;IACzD;SAAO;AACL,QAAA,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC;IAC5B;AAEA,IAAA,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC;UAC3B,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA,EAAA;UAC5B,EAAE;IAEN,IAAI,WAAW,EAAE;AACf,QAAA,MAAM,IAAI,GAAG,WAAW,GAAG,UAAU,CAAC,MAAM;AAC5C,QAAA,IAAI,IAAI,GAAG,CAAC,EAAE;AACZ,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC7B,UAAU,IAAI,GAAG;YACnB;QACF;IACF;;AAGA,IAAA,IAAI,OAAO,CAAC,SAAS,EAAE;QACrB,IAAI,UAAU,GAAG,MAAM;QAEvB,QAAQ,KAAK;YACX,KAAK,KAAK,CAAC,IAAI;gBACb,UAAU,GAAG,aAAa;gBAC1B;YACF,KAAK,KAAK,CAAC,IAAI;gBACb,UAAU,GAAG,QAAQ;gBACrB;YACF,KAAK,KAAK,CAAC,KAAK;gBACd,UAAU,GAAG,KAAK;gBAClB;YACF,KAAK,KAAK,CAAC,OAAO;gBAChB,UAAU,GAAG,OAAO;gBACpB;YACF,KAAK,KAAK,CAAC,YAAY;gBACrB,UAAU,GAAG,QAAQ;gBACrB;YACF,KAAK,KAAK,CAAC,SAAS;gBAClB,UAAU,GAAG,gBAAgB;gBAC7B;YACF,KAAK,KAAK,CAAC,IAAI;AACf,YAAA;gBACE,UAAU,GAAG,MAAM;;AAGvB,QAAA,MAAM,WAAW,GAAG,CAAA,WAAA,EAAc,WAAW,iDAAiD;AAE9F,QAAA,MAAM,YAAY,GAAG,CAAA,MAAA,EAAS,UAAU,CAAA,aAAA,EAAgB,KAAK,KAAK,KAAK,CAAC,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG;QAEpG,OAAO,CAAC,GAAG,CACT,CAAA,GAAA,EAAM,UAAU,CAAA,IAAA,EAAO,SAAS,CAAA,EAAG,OAAO,CAAA,CAAE,EAC5C,WAAW,EACX,YAAY,EACZ,IAAI,MAAM,IAAI,EAAE,CAAC,CAClB;IACH;;;;;;;;;;;;;;;AAiBF,CAAC;AACD;;AClYA;;ACDA;;AAEG;;;;"}