{"version":3,"names":["loggedDeprecations","Set","logLevels","trace","debug","info","warn","error","off","willLog","level","logLevel","forwardToConsole","data","badgeTemplate","badgeStyle","console","call","this","listFormatter","logger","message","deprecated","context","component","name","suggested","removalVersion","key","has","add","multiSuggestions","Array","isArray","Intl","ListFormat","style","type","format","map","suggestion"],"sources":["src/utils/logger.ts"],"sourcesContent":["import type { JSX } from \"../components\";\nimport { logLevel } from \"./config\";\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\" | \"trace\" | \"off\";\n\ntype Message = string;\ntype MajorVersion = number;\n\ntype DeprecatedContext = \"component\" | \"property\" | \"method\" | \"event\" | \"slot\";\n\ntype DeprecatedParams = {\n name: string;\n suggested?: string | string[];\n component?: string;\n removalVersion: MajorVersion | \"future\";\n};\n\ntype SimpleComponentName = T extends `calcite-${infer Name}` ? Name : T;\n\ntype ComponentDeprecatedParams = Omit & {\n name: SimpleComponentName;\n};\n\n/**\n * Exported for testing purposes only\n */\nexport const loggedDeprecations = new Set();\n\nconst logLevels = {\n trace: 0,\n debug: 1,\n info: 2,\n warn: 4,\n error: 8,\n off: 10,\n} as const;\n\nfunction willLog(level: LogLevel): boolean {\n return logLevels[level] >= logLevels[logLevel];\n}\n\nfunction forwardToConsole(level: LogLevel, ...data: any[]): void {\n if (!willLog(level)) {\n return;\n }\n\n const badgeTemplate = \"%ccalcite\";\n const badgeStyle = \"background: #007AC2; color: #fff; border-radius: 4px; padding: 2px 4px;\";\n\n console[level].call(this, badgeTemplate, badgeStyle, ...data);\n}\n\nlet listFormatter: Intl.ListFormat;\n\nexport const logger = {\n debug: (message: Message) => forwardToConsole(\"debug\", message),\n info: (message: Message) => forwardToConsole(\"info\", message),\n warn: (message: Message) => forwardToConsole(\"warn\", message),\n error: (message: Message) => forwardToConsole(\"error\", message),\n trace: (message: Message) => forwardToConsole(\"trace\", message),\n\n deprecated,\n} as const;\n\n/**\n * Logs a deprecation warning to the console.\n *\n * @param context the context in which the deprecation is occurring\n * @param params the deprecation details\n */\nfunction deprecated(context: Exclude, params: DeprecatedParams): void;\nfunction deprecated(context: Extract, params: ComponentDeprecatedParams): void;\nfunction deprecated(\n context: DeprecatedContext,\n { component, name, suggested, removalVersion }: DeprecatedParams | ComponentDeprecatedParams,\n): void {\n const key = `${context}:${context === \"component\" ? \"\" : component}${name}`;\n\n if (loggedDeprecations.has(key)) {\n return;\n }\n\n loggedDeprecations.add(key);\n\n const multiSuggestions = Array.isArray(suggested);\n\n if (multiSuggestions && !listFormatter) {\n listFormatter = new Intl.ListFormat(\"en\", { style: \"long\", type: \"disjunction\" });\n }\n\n const message = `[${name}] ${context} is deprecated and will be removed in ${removalVersion === \"future\" ? `a future version` : `v${removalVersion}`}.${suggested ? ` Use ${multiSuggestions ? listFormatter.format(suggested.map((suggestion) => `\"${suggestion}\"`)) : `\"${suggested}\"`} instead.` : \"\"}`;\n\n forwardToConsole(\"warn\", message);\n}\n"],"mappings":";;;;;oCA0BO,MAAMA,EAAqB,IAAIC,IAEtC,MAAMC,EAAY,CAChBC,MAAO,EACPC,MAAO,EACPC,KAAM,EACNC,KAAM,EACNC,MAAO,EACPC,IAAK,IAGP,SAASC,EAAQC,GACf,OAAOR,EAAUQ,IAAUR,EAAUS,EACvC,CAEA,SAASC,EAAiBF,KAAoBG,GAC5C,IAAKJ,EAAQC,GAAQ,CACnB,M,CAGF,MAAMI,EAAgB,YACtB,MAAMC,EAAa,0EAEnBC,QAAQN,GAAOO,KAAKC,KAAMJ,EAAeC,KAAeF,EAC1D,CAEA,IAAIM,E,MAESC,EAAS,CACpBhB,MAAQiB,GAAqBT,EAAiB,QAASS,GACvDhB,KAAOgB,GAAqBT,EAAiB,OAAQS,GACrDf,KAAOe,GAAqBT,EAAiB,OAAQS,GACrDd,MAAQc,GAAqBT,EAAiB,QAASS,GACvDlB,MAAQkB,GAAqBT,EAAiB,QAASS,GAEvDC,cAWF,SAASA,EACPC,GACAC,UAAEA,EAASC,KAAEA,EAAIC,UAAEA,EAASC,eAAEA,IAE9B,MAAMC,EAAM,GAAGL,KAAWA,IAAY,YAAc,GAAKC,IAAYC,IAErE,GAAIzB,EAAmB6B,IAAID,GAAM,CAC/B,M,CAGF5B,EAAmB8B,IAAIF,GAEvB,MAAMG,EAAmBC,MAAMC,QAAQP,GAEvC,GAAIK,IAAqBZ,EAAe,CACtCA,EAAgB,IAAIe,KAAKC,WAAW,KAAM,CAAEC,MAAO,OAAQC,KAAM,e,CAGnE,MAAMhB,EAAU,IAAII,MAASF,0CAAgDI,IAAmB,SAAW,mBAAqB,IAAIA,OAAoBD,EAAY,QAAQK,EAAmBZ,EAAcmB,OAAOZ,EAAUa,KAAKC,GAAe,IAAIA,QAAkB,IAAId,gBAA0B,KAEtSd,EAAiB,OAAQS,EAC3B,Q","ignoreList":[]}