pinia-plugin-subscription 1.0.0-beta.2 → 1.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../src/system/log.ts","../src/system/Tracer.ts","../src/factories/console-trace-listener.ts","../src/factories/trace-listener.ts","../src/factories/trace-registry.ts"],"sourcesContent":["import { pluginName } from '../utils/constantes'\nimport type { Console, LogType, StyleDefinition, StyleDefinitions } from '../types/log'\nimport type { ConsoleTraceEvent } from '../types/trace'\n\n\nconst style = (bgColor: string, color: string = 'white') =>\n `background-color: ${bgColor}; color: ${color}; padding: 1px; margin-right: 5px; font-size: 12px`\n\nexport function printObject(label: string, payload: object) {\n const isArray = Array.isArray(payload)\n const isEmpty = isArray ? payload.length === 0 : Object.keys(payload).length === 0\n if (isEmpty) {\n console.log(\n '%c%s',\n 'color: #f86f63; padding: 1px; margin-right: 5px; font-size: 10px',\n `[ ${label} ] Empty`\n )\n return\n }\n\n console.groupCollapsed(\n '%c%s',\n 'color: #fafa05; padding: 1px; margin-right: 5px; font-size: 11px',\n `[ ${label} ]`)\n\n if (Array.isArray(payload)) {\n if (typeof payload[0] === 'object') {\n payload.forEach((item: any) => {\n if (item._name) {\n printObject(item._name, item)\n } else if (item._id) {\n printObject(item._id, item)\n } else {\n console.dir(item)\n }\n })\n } else {\n payload.forEach((item: any, index: number) => {\n console.log(\n '%c%s',\n 'color: #cae38f; padding: 1px; margin-right: 5px; font-size: 10px',\n `[ ${index} ]`, item\n )\n })\n }\n } else {\n let emptyKeys: string[] = []\n Object.keys(payload).forEach(key => {\n const value = (payload as Record<string, unknown>)[key]\n if (typeof value === 'object') {\n if (Array.isArray(value)) {\n if (typeof value[0] === 'object') {\n printObject(key, value)\n } else {\n console.groupCollapsed(key)\n console.log(value)\n console.groupEnd()\n }\n } else {\n printObject(key, Object.assign({}, value))\n }\n } else {\n if (!value) {\n emptyKeys.push(key)\n } else {\n console.log(\n '%c%s',\n 'color: #b0fa05; padding: 1px; margin-right: 5px; font-size: 10px',\n `[ ${key} ]`, value\n )\n }\n }\n })\n if (emptyKeys.length) {\n console.log(\n '%c%s',\n 'color: #f86f63; font-size: 9px',\n `[ Empty properties ]`, emptyKeys\n )\n }\n }\n console.groupEnd()\n}\n\nfunction printTracePayload(tracePayload: Record<string, unknown>) {\n Object.keys(tracePayload).forEach((key: string) => {\n if (['label', 'namespace', 'scope', 'source'].includes(key)) {\n return\n }\n const arg = tracePayload[key]\n if (!arg) {\n return\n }\n\n switch (typeof arg) {\n case 'string':\n console.log(\n '%c%s',\n 'color: #fafa05; padding: 1px; margin-right: 5px; font-size: 10px',\n `[ ${key} ]`, arg\n )\n break;\n case 'object':\n switch (key) {\n case 'mutation':\n console.groupCollapsed('[mutation]')\n console.dir(arg)\n console.groupEnd()\n break;\n case 'options':\n printObject(key, (arg as { storeOptions?: unknown })?.storeOptions ?? arg)\n break;\n case 'payload':\n printTracePayload(arg as Record<string, unknown>)\n break;\n case 'store':\n printObject(key, Object.keys(arg).reduce((acc, curr) => {\n if ((curr.startsWith('$') && !['$id', '$state'].includes(curr)) || curr.startsWith('_')) {\n return acc\n }\n\n acc[curr] = (arg as Record<string, unknown>)[curr]\n return acc\n }, {} as Record<string, unknown>))\n break;\n default:\n printObject(key, arg)\n }\n break;\n case 'function':\n console.dir(arg)\n break;\n default:\n console.info(arg)\n }\n })\n}\nexport function log(logStyle: string, args: any) {\n if (!logStyle) {\n throw new Error('Style instructions are required')\n }\n\n console.log(\n '%c%s',\n logStyle,\n args.shift(),\n ...args\n )\n}\n\n\nexport function logTrace(logStyle: string, args: any, pluginName: string) {\n if (!logStyle) {\n throw new Error('Style instructions are required')\n }\n\n const label = args.shift()\n const event = args[0]\n\n console.groupCollapsed(\n '%c%s',\n logStyle,\n `${label}\n`,\n event?.source\n )\n\n args.forEach((arg: any) => {\n switch (typeof arg) {\n case 'string':\n console.info(arg)\n break;\n case 'object':\n if (Array.isArray(arg)) {\n console.table(arg)\n } else {\n printTracePayload(arg)\n }\n break;\n case 'function':\n console.dir(arg)\n break;\n default:\n console.info(arg)\n }\n })\n\n console.groupCollapsed(\n '%c%s',\n 'color: #fafa05; padding: 1px; margin-right: 5px; font-size: 10px',\n `[ trace ]`\n )\n console.trace()\n console.groupEnd()\n\n console.groupEnd()\n}\n\nexport abstract class CustomConsole implements Console {\n protected _bgColor: string = 'transparent'\n protected _color: string = '#f2f286'\n protected _icon: string = '🍍⚡'\n protected _errorBgColor: string = '#d24545'\n protected _errorColor: string = 'white'\n protected _errorIcon: string = '🍍⚠️'\n protected _pluginName?: string\n protected _styles: StyleDefinitions = {\n error: { bgColor: this._errorBgColor, color: this._errorColor, icon: this._errorIcon },\n info: { bgColor: this._bgColor, color: this._color, icon: this._icon }\n }\n\n protected formatMessage(message: string, icon: string): string {\n return this._pluginName ? ` [${icon} ${this._pluginName}] \n ${message} \n` : message\n }\n\n protected generateStyle(styleDefinition: StyleDefinition): string {\n return style(styleDefinition.bgColor, styleDefinition.color)\n }\n\n protected getStyleDefinition(messageType?: LogType): StyleDefinition {\n return this._styles[messageType ?? 'info']\n }\n\n log(...args: any) {\n this.useLog(\n this.getStyleDefinition(),\n args\n )\n }\n\n error(...args: any) {\n const logType = 'error'\n this.useLog(\n this.getStyleDefinition(logType),\n args\n )\n }\n\n protected rebuildArgs(args: string | any[], icon: string) {\n if (typeof args === 'string') {\n return [args]\n }\n\n if (Array.isArray(args)) {\n return [args.shift(), ...(args ?? [])]\n }\n }\n\n protected useLog(styleDefinition: StyleDefinition, args: any) {\n log(\n this.generateStyle(styleDefinition),\n this.rebuildArgs(args, styleDefinition.icon)\n )\n }\n}\n\nclass PluginConsoleClass extends CustomConsole {\n protected _pluginName: string = pluginName\n}\n\nexport const PluginConsole = new PluginConsoleClass()\n\nexport class TraceConsole extends CustomConsole {\n protected _pluginName: string = pluginName\n\n constructor(pluginName?: string) {\n super()\n if (pluginName) {\n this._pluginName = pluginName\n }\n }\n\n\n logGroup(label: string, group: ConsoleTraceEvent[]) {\n this.startGroup()\n this.log(label, group)\n this.endGroup()\n }\n\n private startGroup(groupName?: string) {\n console.group(groupName)\n }\n\n private endGroup() {\n console.groupEnd()\n }\n\n protected useLog(styleDefinition: StyleDefinition, args: any) {\n logTrace(\n this.generateStyle(styleDefinition),\n this.rebuildArgs(args, styleDefinition.icon),\n this._pluginName\n )\n }\n}","import type { AnyObject } from '../types'\nimport type {\n TraceEvent,\n TraceEventMetadata,\n TraceLevel,\n TraceListener,\n TracePayload,\n TracerOptions,\n} from '../types/trace'\n\nfunction resolvePayload(payload: TracePayload): AnyObject | undefined {\n if (typeof payload !== 'function') {\n return payload\n }\n\n try {\n return payload()\n } catch (error) {\n return { __tracePayloadError: error }\n }\n}\n\n/**\n * Emits structured trace events.\n *\n * Nothing is allocated when no listener matches:\n * the payload is a factory resolved only once a consumer is known.\n */\nexport default class Tracer {\n private readonly _listeners: TraceListener[] = []\n private _scope?: string\n private readonly _source: string\n\n constructor(source: string, listeners: TraceListener[], options: TracerOptions = {}) {\n this._scope = options.scope\n this._source = source\n this._listeners = listeners\n }\n\n get scope(): string | undefined {\n return this._scope\n }\n\n set scope(scope: string | undefined) {\n this._scope = scope\n }\n\n get source(): string {\n return this._source\n }\n\n debug(label: string, namespace: string, payload?: TracePayload, scope?: string): void {\n this.emit('debug', label, namespace, payload, scope)\n }\n\n /** Relays the error to matching listeners, or reports it when none match. */\n error(label: string, namespace: string, error: unknown, payload?: TracePayload, scope?: string): void {\n this.emit('error', label, namespace, payload, scope, error)\n }\n\n private emit(\n level: TraceLevel,\n label: string,\n namespace: string,\n payload?: TracePayload,\n scope?: string,\n error?: unknown\n ): void {\n if (this._listeners.length === 0) {\n if (level === 'error') {\n console.error('Unhandled error trace event:', error)\n }\n return\n }\n\n const metadata: TraceEventMetadata = {\n label,\n level,\n namespace,\n scope: scope ?? this._scope,\n source: this._source\n }\n\n const matched = this._listeners.filter(listener => {\n try {\n return listener.filter(metadata)\n } catch (error) {\n console.error('Error in trace listener filter:', error)\n return false\n }\n })\n\n if (matched.length === 0) {\n if (level === 'error') {\n console.error('Unhandled error trace event:', error)\n }\n return\n }\n\n const event: TraceEvent = {\n ...metadata,\n ...(error !== undefined && { error }),\n ...(payload !== undefined && { payload: resolvePayload(payload) }),\n timestamp: Date.now()\n }\n\n for (const listener of matched) {\n try {\n listener.handler(event)\n } catch (error) {\n // a faulty listener must never break the traced code\n console.error('Error in trace listener:', error)\n }\n }\n }\n}\n","import { PluginConsole, TraceConsole } from '../system/log'\n\nimport type { Console } from '../types/log'\nimport type {\n ConsoleTraceEvent, ConsoleTraceEventArgs, TraceEvent, TraceListenerGroupBy, ConsoleTraceGroupListener, TraceListener\n} from '../types/trace'\n\n\n/**\n * Builds the console arguments from a trace event.\n * @param event The trace event to build console arguments from.\n * @returns An array containing the formatted trace label and the sanitized event data.\n */\nfunction buildConsoleArgsFromEvent(event: TraceEvent): ConsoleTraceEvent {\n const sanitizedEvent = Object.keys(event).reduce((acc, curr) => {\n if (curr !== 'level' && curr !== 'timestamp') {\n acc[curr] = event[curr as keyof ConsoleTraceEventArgs]\n }\n return acc\n }, {} as Record<string, unknown>)\n\n return [formatTraceLabel(event), sanitizedEvent as ConsoleTraceEventArgs]\n\n /**\n if (event.error !== undefined) {\n args.push(event.error)\n }\n\n if (event.payload !== undefined) {\n if (Array.isArray(event.payload)) {\n args.push(...event.payload)\n } else {\n args.push(event.payload)\n }\n }\n */\n}\n\nfunction formatTraceLabel(event: TraceEvent): string {\n return event.scope\n ? `${event.label} [${event.scope}]`\n : `${event.label}`\n}\n\n/**\n * Creates an opt-in trace listener that reproduces the former console output.\n */\nexport function createConsoleTraceListener(target?: Console): Omit<TraceListener, 'filter'> {\n if (!target) {\n target = new TraceConsole()\n }\n\n return {\n handler(event): void {\n const consoleMethod = event.level === 'error' ? 'error' : 'log'\n target[consoleMethod](...buildConsoleArgsFromEvent(event))\n }\n }\n}\n\n\nexport function createConsoleGroupTraceListener(groupBy: TraceListenerGroupBy = 'scope'): ConsoleTraceGroupListener {\n const target = new TraceConsole()\n const groups = new Map<string, ConsoleTraceEvent[]>()\n\n\n function createGroup(key: string) {\n groups.set(key, [])\n }\n\n function logGroup(key: string): void {\n const group = groups.get(key)\n\n if (!group) {\n target.error(`No group found for key \"${key}\"`)\n return\n }\n\n if (group.length) { target.logGroup(`[ ${groupBy} ] ${key}`, group) }\n\n //groups.delete(key)\n }\n\n return {\n createGroup,\n logGroup,\n handler(event): void {\n const groupKey = event[groupBy] as string\n if (!groups.has(groupKey)) {\n target.error(`No group found for key \"${groupKey}\"`)\n return\n }\n\n groups.get(groupKey)?.push(buildConsoleArgsFromEvent(event))\n }\n }\n}\n\n\n","import { createConsoleTraceListener, createConsoleGroupTraceListener } from \"./console-trace-listener\"\nimport type {\n ConsoleTraceGroupListener,\n TraceEventMetadata,\n TraceFilterFactoryCriterion,\n TraceFilterFactoryParam,\n TraceGroupListener,\n TraceListener\n} from \"../types/trace\"\n\n\nfunction createFilter(criteria: TraceFilterFactoryCriterion[], mode: 'every' | 'some') {\n return (event: TraceEventMetadata) => {\n return criteria[mode](({ comparator = 'equals', target, value }) => {\n const eventValue = event[target]\n if (typeof eventValue !== 'string') return false\n let result = false\n switch (comparator) {\n case 'equals':\n result = eventValue === value\n break\n case 'contains':\n result = eventValue.includes(value)\n break\n case 'startsWith':\n result = eventValue.startsWith(value)\n break\n case 'endsWith':\n result = eventValue.endsWith(value)\n break\n default:\n result = false\n break\n }\n return result\n })\n }\n}\n\n/**\n * Creates a trace group listener with optional filtering.\n * @param filterDef The filter criteria for the trace events.\n * @param filterMode The mode to apply when evaluating multiple filter criteria: 'every' or 'some'.\n * @param groupBy The key of the trace event metadata to group by.\n * @returns A trace listener configured with group handling and filtering.\n */\nexport function createTraceGroupListener(\n filterDef: TraceFilterFactoryCriterion[],\n filterMode: 'every' | 'some' = 'every',\n groupBy: keyof TraceEventMetadata = 'scope'\n) {\n return {\n groupBy,\n ...createConsoleGroupTraceListener(groupBy),\n ...createTraceFilter(filterDef, filterMode)\n } as TraceGroupListener\n\n}\n\nfunction createTraceFilter(\n listenerDef: TraceFilterFactoryParam | TraceFilterFactoryCriterion[],\n filterMode: 'every' | 'some' = 'every'\n) {\n if (Array.isArray(listenerDef)) {\n listenerDef = {\n filter: createFilter(listenerDef, filterMode)\n }\n }\n\n if (listenerDef.filter && Array.isArray(listenerDef.filter)) {\n listenerDef.filter = createFilter(listenerDef.filter, filterMode)\n }\n\n if (!listenerDef.filter || typeof listenerDef.filter !== 'function') {\n listenerDef = { ...listenerDef, filter: () => true }\n }\n\n return listenerDef\n}\n\n/**\n * Creates a trace listener with optional filtering.\n * @param param The trace listener parameters including handler and optional filter criteria.\n * @param filterMode The mode to apply when evaluating multiple filter criteria: 'every' or 'some'.\n * @returns A trace listener configured with the specified handler and filter.\n */\nexport function createTraceListener(listenerDef: TraceFilterFactoryParam | TraceFilterFactoryCriterion[], filterMode: 'every' | 'some' = 'every'): TraceListener {\n listenerDef = createTraceFilter(listenerDef, filterMode)\n\n if (!listenerDef?.handler) {\n listenerDef = { ...listenerDef, ...createConsoleTraceListener() } as TraceFilterFactoryParam\n }\n\n return listenerDef as TraceListener\n}","import Tracer from '../system/Tracer'\nimport { createTraceGroupListener, createTraceListener } from './trace-listener'\nimport type {\n AddTraceListenerOptions,\n TraceEvent,\n TraceFilterFactoryCriterion,\n TraceFilterFactoryParam,\n TraceGroupListener,\n TraceListener,\n TraceListenerFilterMode,\n TraceListenerRemover,\n TraceRegistry,\n TracerOptions,\n} from '../types/trace'\n\n/**\n * Creates a registry for managing trace listeners and creating tracers.\n * @returns An object containing methods to add and clear trace listeners, and to create tracers.\n */\nexport function createTracerRegistry(): TraceRegistry {\n let listeners: TraceListener[] = []\n\n /**\n * Registers a trace listener and returns its remover.\n * Listeners are evaluated in registration order.\n * @param listener The trace listener to register.\n * @param filterMode The mode to use when creating a trace listener from a filter factory parameter. Defaults to 'every'.\n * @returns A function that removes the registered listener when called.\n */\n function addTraceListener(listener: TraceListener | TraceFilterFactoryParam, filterMode: TraceListenerFilterMode = 'every'): TraceListenerRemover {\n if (!listener || !listener?.handler) {\n listener = createTraceListener(listener, filterMode)\n }\n\n if (!('filter' in listener) || typeof listener.filter !== 'function') {\n listener = { ...listener, filter: () => true }\n }\n\n listeners.push(listener as TraceListener)\n\n return () => {\n const index = listeners.indexOf(listener as TraceListener)\n\n if (index !== -1) {\n listeners.splice(index, 1)\n }\n }\n }\n\n /**\n * Clears all registered trace listeners.\n */\n function clearTraceListeners(): void {\n listeners = []\n }\n\n /**\n * Checks if there are any registered trace listeners.\n * @returns True if there are registered trace listeners, otherwise false.\n */\n function hasTraceListeners(): boolean {\n return listeners.length > 0\n }\n\n return {\n addTraceListener,\n clearTraceListeners,\n createTracer: (source: string, options: TracerOptions = {}) => new Tracer(source, listeners, options),\n hasTraceListeners\n }\n}\n\nexport function createTraceGroupsRegistry() {\n let listeners: TraceGroupListener[] = []\n\n /**\n * Registers a trace listener and returns its remover.\n * Listeners are evaluated in registration order.\n * @param listener The trace listener to register.\n * @param filterMode The mode to use when creating a trace listener from a filter factory parameter. Defaults to 'every'.\n * @returns A function that removes the registered listener when called.\n */\n function addListener(\n criteria: TraceFilterFactoryCriterion[],\n { filterMode = 'every', groupBy = 'scope' }: AddTraceListenerOptions = {}\n ): TraceListenerRemover {\n const listenerGroup = createTraceGroupListener(criteria, filterMode ?? 'every', groupBy ?? 'scope')\n listeners.push(listenerGroup)\n\n return () => {\n const index = listeners.indexOf(listenerGroup)\n\n if (index !== -1) {\n listeners.splice(index, 1)\n }\n }\n }\n\n /**\n * Clears all registered trace listeners.\n */\n function clearTraceListeners(): void {\n listeners = []\n }\n\n function getMatchedListener(payload: TraceEvent) {\n return listeners.filter(listener => listener.filter(payload))\n }\n\n /**\n * Checks if there are any registered trace listeners.\n * @returns True if there are registered trace listeners, otherwise false.\n */\n function hasTraceListeners(): boolean {\n return listeners.length > 0\n }\n\n function listenerGroupAction(actionName: 'createGroup' | 'logGroup', payload: TraceEvent) {\n if (!listeners.length) return\n\n getMatchedListener(payload).forEach(listener => {\n const groupLabel = payload[listener.groupBy]\n if (typeof groupLabel === 'string') { listener[actionName](groupLabel) }\n })\n }\n\n\n return {\n addListener,\n clearTraceListeners,\n tracerHandler: {\n closeGroup: (payload: TraceEvent) => listenerGroupAction('logGroup', payload),\n createTracer: (source: string, options: TracerOptions = {}) => new Tracer(source, listeners, options),\n startGroup: (payload: TraceEvent) => listenerGroupAction('createGroup', payload)\n },\n hasTraceListeners\n }\n}"],"names":["style","bgColor","color","printObject","label","payload","item","index","emptyKeys","key","value","printTracePayload","tracePayload","arg","acc","curr","log","logStyle","args","logTrace","pluginName","event","CustomConsole","__publicField","message","icon","styleDefinition","messageType","TraceConsole","group","groupName","resolvePayload","error","Tracer","source","listeners","options","scope","namespace","level","metadata","matched","listener","buildConsoleArgsFromEvent","sanitizedEvent","formatTraceLabel","createConsoleTraceListener","target","consoleMethod","createFilter","criteria","mode","comparator","eventValue","result","createTraceFilter","listenerDef","filterMode","createTraceListener","createTracerRegistry","addTraceListener","clearTraceListeners","hasTraceListeners"],"mappings":";;;;;AAKA,MAAMA,IAAQ,CAACC,GAAiBC,IAAgB,YAC5C,qBAAqBD,CAAO,YAAYC,CAAK;AAE1C,SAASC,EAAYC,GAAeC,GAAiB;AAGxD,MAFgB,MAAM,QAAQA,CAAO,IACXA,EAAQ,WAAW,IAAI,OAAO,KAAKA,CAAO,EAAE,WAAW,GACpE;AACT,YAAQ;AAAA,MACJ;AAAA,MACA;AAAA,MACA,KAAKD,CAAK;AAAA,IAAA;AAEd;AAAA,EACJ;AAOA,MALA,QAAQ;AAAA,IACJ;AAAA,IACA;AAAA,IACA,KAAKA,CAAK;AAAA,EAAA,GAEV,MAAM,QAAQC,CAAO;AACrB,IAAI,OAAOA,EAAQ,CAAC,KAAM,WACtBA,EAAQ,QAAQ,CAACC,MAAc;AAC3B,MAAIA,EAAK,QACLH,EAAYG,EAAK,OAAOA,CAAI,IACrBA,EAAK,MACZH,EAAYG,EAAK,KAAKA,CAAI,IAE1B,QAAQ,IAAIA,CAAI;AAAA,IAExB,CAAC,IAEDD,EAAQ,QAAQ,CAACC,GAAWC,MAAkB;AAC1C,cAAQ;AAAA,QACJ;AAAA,QACA;AAAA,QACA,KAAKA,CAAK;AAAA,QAAMD;AAAA,MAAA;AAAA,IAExB,CAAC;AAAA,OAEF;AACH,QAAIE,IAAsB,CAAA;AAC1B,WAAO,KAAKH,CAAO,EAAE,QAAQ,CAAAI,MAAO;AAChC,YAAMC,IAASL,EAAoCI,CAAG;AACtD,MAAI,OAAOC,KAAU,WACb,MAAM,QAAQA,CAAK,IACf,OAAOA,EAAM,CAAC,KAAM,WACpBP,EAAYM,GAAKC,CAAK,KAEtB,QAAQ,eAAeD,CAAG,GAC1B,QAAQ,IAAIC,CAAK,GACjB,QAAQ,SAAA,KAGZP,EAAYM,GAAK,OAAO,OAAO,CAAA,GAAIC,CAAK,CAAC,IAGxCA,IAGD,QAAQ;AAAA,QACJ;AAAA,QACA;AAAA,QACA,KAAKD,CAAG;AAAA,QAAMC;AAAA,MAAA,IALlBF,EAAU,KAAKC,CAAG;AAAA,IAS9B,CAAC,GACGD,EAAU,UACV,QAAQ;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MAAwBA;AAAA,IAAA;AAAA,EAGpC;AACA,UAAQ,SAAA;AACZ;AAEA,SAASG,EAAkBC,GAAuC;AAC9D,SAAO,KAAKA,CAAY,EAAE,QAAQ,CAACH,MAAgB;AAC/C,QAAI,CAAC,SAAS,aAAa,SAAS,QAAQ,EAAE,SAASA,CAAG;AACtD;AAEJ,UAAMI,IAAMD,EAAaH,CAAG;AAC5B,QAAKI;AAIL,cAAQ,OAAOA,GAAA;AAAA,QACX,KAAK;AACD,kBAAQ;AAAA,YACJ;AAAA,YACA;AAAA,YACA,KAAKJ,CAAG;AAAA,YAAMI;AAAA,UAAA;AAElB;AAAA,QACJ,KAAK;AACD,kBAAQJ,GAAA;AAAA,YACJ,KAAK;AACD,sBAAQ,eAAe,YAAY,GACnC,QAAQ,IAAII,CAAG,GACf,QAAQ,SAAA;AACR;AAAA,YACJ,KAAK;AACD,cAAAV,EAAYM,GAAMI,GAAoC,gBAAgBA,CAAG;AACzE;AAAA,YACJ,KAAK;AACD,cAAAF,EAAkBE,CAA8B;AAChD;AAAA,YACJ,KAAK;AACD,cAAAV,EAAYM,GAAK,OAAO,KAAKI,CAAG,EAAE,OAAO,CAACC,GAAKC,OACtCA,EAAK,WAAW,GAAG,KAAK,CAAC,CAAC,OAAO,QAAQ,EAAE,SAASA,CAAI,KAAMA,EAAK,WAAW,GAAG,MAItFD,EAAIC,CAAI,IAAKF,EAAgCE,CAAI,IAC1CD,IACR,CAAA,CAA6B,CAAC;AACjC;AAAA,YACJ;AACI,cAAAX,EAAYM,GAAKI,CAAG;AAAA,UAAA;AAE5B;AAAA,QACJ,KAAK;AACD,kBAAQ,IAAIA,CAAG;AACf;AAAA,QACJ;AACI,kBAAQ,KAAKA,CAAG;AAAA,MAAA;AAAA,EAE5B,CAAC;AACL;AACO,SAASG,EAAIC,GAAkBC,GAAW;AAC7C,MAAI,CAACD;AACD,UAAM,IAAI,MAAM,iCAAiC;AAGrD,UAAQ;AAAA,IACJ;AAAA,IACAA;AAAA,IACAC,EAAK,MAAA;AAAA,IACL,GAAGA;AAAA,EAAA;AAEX;AAGO,SAASC,EAASF,GAAkBC,GAAWE,GAAoB;AACtE,MAAI,CAACH;AACD,UAAM,IAAI,MAAM,iCAAiC;AAGrD,QAAMb,IAAQc,EAAK,MAAA,GACbG,IAAQH,EAAK,CAAC;AAEpB,UAAQ;AAAA,IACJ;AAAA,IACAD;AAAA,IACA,GAAGb,CAAK;AAAA;AAAA,IAERiB,GAAO;AAAA,EAAA,GAGXH,EAAK,QAAQ,CAACL,MAAa;AACvB,YAAQ,OAAOA,GAAA;AAAA,MACX,KAAK;AACD,gBAAQ,KAAKA,CAAG;AAChB;AAAA,MACJ,KAAK;AACD,QAAI,MAAM,QAAQA,CAAG,IACjB,QAAQ,MAAMA,CAAG,IAEjBF,EAAkBE,CAAG;AAEzB;AAAA,MACJ,KAAK;AACD,gBAAQ,IAAIA,CAAG;AACf;AAAA,MACJ;AACI,gBAAQ,KAAKA,CAAG;AAAA,IAAA;AAAA,EAE5B,CAAC,GAED,QAAQ;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GAEJ,QAAQ,MAAA,GACR,QAAQ,SAAA,GAER,QAAQ,SAAA;AACZ;AAEO,MAAeS,EAAiC;AAAA,EAAhD;AACO,IAAAC,EAAA,kBAAmB;AACnB,IAAAA,EAAA,gBAAiB;AACjB,IAAAA,EAAA,eAAgB;AAChB,IAAAA,EAAA,uBAAwB;AACxB,IAAAA,EAAA,qBAAsB;AACtB,IAAAA,EAAA,oBAAqB;AACrB,IAAAA,EAAA;AACA,IAAAA,EAAA,iBAA4B;AAAA,MAClC,OAAO,EAAE,SAAS,KAAK,eAAe,OAAO,KAAK,aAAa,MAAM,KAAK,WAAA;AAAA,MAC1E,MAAM,EAAE,SAAS,KAAK,UAAU,OAAO,KAAK,QAAQ,MAAM,KAAK,MAAA;AAAA,IAAM;AAAA;AAAA,EAG/D,cAAcC,GAAiBC,GAAsB;AAC3D,WAAO,KAAK,cAAc,KAAKA,CAAI,IAAI,KAAK,WAAW;AAAA,GAC5DD,CAAO;AAAA,IACNA;AAAA,EACA;AAAA,EAEU,cAAcE,GAA0C;AAC9D,WAAO1B,EAAM0B,EAAgB,SAASA,EAAgB,KAAK;AAAA,EAC/D;AAAA,EAEU,mBAAmBC,GAAwC;AACjE,WAAO,KAAK,QAAQA,KAAe,MAAM;AAAA,EAC7C;AAAA,EAEA,OAAOT,GAAW;AACd,SAAK;AAAA,MACD,KAAK,mBAAA;AAAA,MACLA;AAAA,IAAA;AAAA,EAER;AAAA,EAEA,SAASA,GAAW;AAEhB,SAAK;AAAA,MACD,KAAK,mBAFO,OAEmB;AAAA,MAC/BA;AAAA,IAAA;AAAA,EAER;AAAA,EAEU,YAAYA,GAAsBO,GAAc;AACtD,QAAI,OAAOP,KAAS;AAChB,aAAO,CAACA,CAAI;AAGhB,QAAI,MAAM,QAAQA,CAAI;AAClB,aAAO,CAACA,EAAK,MAAA,GAAS,GAAIA,KAAQ,CAAA,CAAG;AAAA,EAE7C;AAAA,EAEU,OAAOQ,GAAkCR,GAAW;AAC1D,IAAAF;AAAA,MACI,KAAK,cAAcU,CAAe;AAAA,MAClC,KAAK,YAAYR,GAAMQ,EAAgB,IAAI;AAAA,IAAA;AAAA,EAEnD;AACJ;AAQO,MAAME,UAAqBN,EAAc;AAAA,EAG5C,YAAYF,GAAqB;AAC7B,UAAA;AAHM,IAAAG,EAAA,qBAAsBH;AAIxBA,IAAAA,MACA,KAAK,cAAcA;AAAAA,EAE3B;AAAA,EAGA,SAAShB,GAAeyB,GAA4B;AAChD,SAAK,WAAA,GACL,KAAK,IAAIzB,GAAOyB,CAAK,GACrB,KAAK,SAAA;AAAA,EACT;AAAA,EAEQ,WAAWC,GAAoB;AACnC,YAAQ,MAAMA,CAAS;AAAA,EAC3B;AAAA,EAEQ,WAAW;AACf,YAAQ,SAAA;AAAA,EACZ;AAAA,EAEU,OAAOJ,GAAkCR,GAAW;AAC1D,IAAAC;AAAA,MACI,KAAK,cAAcO,CAAe;AAAA,MAClC,KAAK,YAAYR,GAAMQ,EAAgB,IAAI;AAAA,IAE/C;AAAA,EACJ;AACJ;AC9RA,SAASK,EAAe1B,GAA8C;AAClE,MAAI,OAAOA,KAAY;AACnB,WAAOA;AAGX,MAAI;AACA,WAAOA,EAAA;AAAA,EACX,SAAS2B,GAAO;AACZ,WAAO,EAAE,qBAAqBA,EAAA;AAAA,EAClC;AACJ;AAQA,MAAqBC,EAAO;AAAA,EAKxB,YAAYC,GAAgBC,GAA4BC,IAAyB,CAAA,GAAI;AAJpE,IAAAb,EAAA,oBAA8B,CAAA;AACvC,IAAAA,EAAA;AACS,IAAAA,EAAA;AAGb,SAAK,SAASa,EAAQ,OACtB,KAAK,UAAUF,GACf,KAAK,aAAaC;AAAA,EACtB;AAAA,EAEA,IAAI,QAA4B;AAC5B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,MAAME,GAA2B;AACjC,SAAK,SAASA;AAAA,EAClB;AAAA,EAEA,IAAI,SAAiB;AACjB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,MAAMjC,GAAekC,GAAmBjC,GAAwBgC,GAAsB;AAClF,SAAK,KAAK,SAASjC,GAAOkC,GAAWjC,GAASgC,CAAK;AAAA,EACvD;AAAA,EAGA,MAAMjC,GAAekC,GAAmBN,GAAgB3B,GAAwBgC,GAAsB;AAClG,SAAK,KAAK,SAASjC,GAAOkC,GAAWjC,GAASgC,GAAOL,CAAK;AAAA,EAC9D;AAAA,EAEQ,KACJO,GACAnC,GACAkC,GACAjC,GACAgC,GACAL,GACI;AACJ,QAAI,KAAK,WAAW,WAAW,GAAG;AAC9B,MAAIO,MAAU,WACV,QAAQ,MAAM,gCAAgCP,CAAK;AAEvD;AAAA,IACJ;AAEA,UAAMQ,IAA+B;AAAA,MACjC,OAAApC;AAAA,MACA,OAAAmC;AAAA,MACA,WAAAD;AAAA,MACA,OAAOD,KAAS,KAAK;AAAA,MACrB,QAAQ,KAAK;AAAA,IAAA,GAGXI,IAAU,KAAK,WAAW,OAAO,CAAAC,MAAY;AAC/C,UAAI;AACA,eAAOA,EAAS,OAAOF,CAAQ;AAAA,MACnC,SAASR,GAAO;AACZ,uBAAQ,MAAM,mCAAmCA,CAAK,GAC/C;AAAA,MACX;AAAA,IACJ,CAAC;AAED,QAAIS,EAAQ,WAAW,GAAG;AACtB,MAAIF,MAAU,WACV,QAAQ,MAAM,gCAAgCP,CAAK;AAEvD;AAAA,IACJ;AAEA,UAAMX,IAAoB;AAAA,MACtB,GAAGmB;AAAA,MACH,GAAIR,MAAU,UAAa,EAAE,OAAAA,EAAA;AAAA,MAC7B,GAAI3B,MAAY,UAAa,EAAE,SAAS0B,EAAe1B,CAAO,EAAA;AAAA,MAC9D,WAAW,KAAK,IAAA;AAAA,IAAI;AAGxB,eAAWqC,KAAYD;AACnB,UAAI;AACA,QAAAC,EAAS,QAAQrB,CAAK;AAAA,MAC1B,SAASW,GAAO;AAEZ,gBAAQ,MAAM,4BAA4BA,CAAK;AAAA,MACnD;AAAA,EAER;AACJ;ACtGA,SAASW,EAA0BtB,GAAsC;AACrE,QAAMuB,IAAiB,OAAO,KAAKvB,CAAK,EAAE,OAAO,CAACP,GAAKC,OAC/CA,MAAS,WAAWA,MAAS,gBAC7BD,EAAIC,CAAI,IAAIM,EAAMN,CAAmC,IAElDD,IACR,CAAA,CAA6B;AAEhC,SAAO,CAAC+B,EAAiBxB,CAAK,GAAGuB,CAAuC;AAe5E;AAEA,SAASC,EAAiBxB,GAA2B;AACjD,SAAOA,EAAM,QACP,GAAGA,EAAM,KAAK,KAAKA,EAAM,KAAK,MAC9B,GAAGA,EAAM,KAAK;AACxB;AAKO,SAASyB,EAA2BC,GAAiD;AACxF,SAAKA,MACDA,IAAS,IAAInB,EAAA,IAGV;AAAA,IACH,QAAQP,GAAa;AACjB,YAAM2B,IAAgB3B,EAAM,UAAU,UAAU,UAAU;AAC1D,MAAA0B,EAAOC,CAAa,EAAE,GAAGL,EAA0BtB,CAAK,CAAC;AAAA,IAC7D;AAAA,EAAA;AAER;AC/CA,SAAS4B,EAAaC,GAAyCC,GAAwB;AACnF,SAAO,CAAC9B,MACG6B,EAASC,CAAI,EAAE,CAAC,EAAE,YAAAC,IAAa,UAAU,QAAAL,GAAQ,OAAArC,QAAY;AAChE,UAAM2C,IAAahC,EAAM0B,CAAM;AAC/B,QAAI,OAAOM,KAAe,SAAU,QAAO;AAC3C,QAAIC,IAAS;AACb,YAAQF,GAAA;AAAA,MACJ,KAAK;AACD,QAAAE,IAASD,MAAe3C;AACxB;AAAA,MACJ,KAAK;AACD,QAAA4C,IAASD,EAAW,SAAS3C,CAAK;AAClC;AAAA,MACJ,KAAK;AACD,QAAA4C,IAASD,EAAW,WAAW3C,CAAK;AACpC;AAAA,MACJ,KAAK;AACD,QAAA4C,IAASD,EAAW,SAAS3C,CAAK;AAClC;AAAA,MACJ;AACI,QAAA4C,IAAS;AACT;AAAA,IAAA;AAER,WAAOA;AAAA,EACX,CAAC;AAET;AAsBA,SAASC,EACLC,GACAC,IAA+B,SACjC;AACE,SAAI,MAAM,QAAQD,CAAW,MACzBA,IAAc;AAAA,IACV,QAAQP,EAAaO,GAAaC,CAAU;AAAA,EAAA,IAIhDD,EAAY,UAAU,MAAM,QAAQA,EAAY,MAAM,MACtDA,EAAY,SAASP,EAAaO,EAAY,QAAQC,CAAU,KAGhE,CAACD,EAAY,UAAU,OAAOA,EAAY,UAAW,gBACrDA,IAAc,EAAE,GAAGA,GAAa,QAAQ,MAAM,GAAA,IAG3CA;AACX;AAQO,SAASE,EAAoBF,GAAsEC,IAA+B,SAAwB;AAC7J,SAAAD,IAAcD,EAAkBC,GAAaC,CAAU,GAElDD,GAAa,YACdA,IAAc,EAAE,GAAGA,GAAa,GAAGV,IAA2B,IAG3DU;AACX;AC3EO,SAASG,IAAsC;AAClD,MAAIxB,IAA6B,CAAA;AASjC,WAASyB,EAAiBlB,GAAmDe,IAAsC,SAA+B;AAC9I,YAAI,CAACf,KAAY,CAACA,GAAU,aACxBA,IAAWgB,EAAoBhB,GAAUe,CAAU,KAGnD,EAAE,YAAYf,MAAa,OAAOA,EAAS,UAAW,gBACtDA,IAAW,EAAE,GAAGA,GAAU,QAAQ,MAAM,GAAA,IAG5CP,EAAU,KAAKO,CAAyB,GAEjC,MAAM;AACT,YAAMnC,IAAQ4B,EAAU,QAAQO,CAAyB;AAEzD,MAAInC,MAAU,MACV4B,EAAU,OAAO5B,GAAO,CAAC;AAAA,IAEjC;AAAA,EACJ;AAKA,WAASsD,IAA4B;AACjC,IAAA1B,IAAY,CAAA;AAAA,EAChB;AAMA,WAAS2B,IAA6B;AAClC,WAAO3B,EAAU,SAAS;AAAA,EAC9B;AAEA,SAAO;AAAA,IACH,kBAAAyB;AAAA,IACA,qBAAAC;AAAA,IACA,cAAc,CAAC3B,GAAgBE,IAAyB,CAAA,MAAO,IAAIH,EAAOC,GAAQC,GAAWC,CAAO;AAAA,IACpG,mBAAA0B;AAAA,EAAA;AAER;"}
1
+ {"version":3,"file":"helpers.js","sources":["../src/system/log.ts","../src/system/Tracer.ts","../src/factories/console-trace-listener.ts","../src/factories/trace-listener.ts","../src/factories/trace-registry.ts"],"sourcesContent":["import { pluginName } from '../utils/constantes'\nimport type { Console, LogType, StyleDefinition, StyleDefinitions } from '../types/log'\nimport type { ConsoleTraceEvent, ConsoleTraceEventArgs } from '../types/trace'\nimport { Store } from 'pinia'\n\n\nconst style = (bgColor: string, color: string = 'white') =>\n `background-color: ${bgColor}; color: ${color}; padding: 1px; margin-right: 5px; font-size: 12px`\n\nexport function printObject(label: string, payload: object) {\n const isArray = Array.isArray(payload)\n const isEmpty = isArray ? payload.length === 0 : Object.keys(payload).length === 0\n if (isEmpty) {\n console.log(\n '%c%s',\n 'color: #f86f63; padding: 1px; margin-right: 5px; font-size: 10px',\n `[ ${label} ] Empty`\n )\n return\n }\n\n console.groupCollapsed(\n '%c%s',\n 'color: #f7f7b0; padding: 1px; margin-right: 5px; font-size: 11px',\n `[ ${label} ]`)\n\n if (Array.isArray(payload)) {\n if (typeof payload[0] === 'object') {\n payload.forEach((item: any) => {\n if (item._name) {\n printObject(item._name, item)\n } else if (item._id) {\n printObject(item._id, item)\n } else {\n console.dir(item)\n }\n })\n } else {\n payload.forEach((item: any, index: number) => {\n console.log(\n '%c%s',\n 'color: #cae38f; padding: 1px; margin-right: 5px; font-size: 10px',\n `[ ${index} ]`, item\n )\n })\n }\n } else {\n let emptyKeys: string[] = []\n Object.keys(payload).forEach(key => {\n const value = (payload as Record<string, unknown>)[key]\n if (typeof value === 'object') {\n if (Array.isArray(value)) {\n if (typeof value[0] === 'object') {\n printObject(key, value)\n } else {\n console.groupCollapsed(key)\n console.log(value)\n console.groupEnd()\n }\n } else {\n printObject(key, Object.assign({}, value))\n }\n } else {\n if (!value) {\n emptyKeys.push(key)\n } else {\n console.log(\n '%c%s',\n 'color: #b0fa05; padding: 1px; margin-right: 5px; font-size: 10px',\n `[ ${key} ]`, value\n )\n }\n }\n })\n if (emptyKeys.length) {\n console.log(\n '%c%s',\n 'color: #f86f63; font-size: 9px',\n `[ Empty properties ]`, emptyKeys\n )\n }\n }\n console.groupEnd()\n}\n\nfunction printTracePayload(tracePayload: Record<string, unknown>) {\n Object.keys(tracePayload).forEach((key: string) => {\n if (['label', 'namespace', 'scope', 'source'].includes(key)) {\n return\n }\n const arg = tracePayload[key]\n if (!arg) {\n return\n }\n\n switch (typeof arg) {\n case 'string':\n console.log(\n '%c%s',\n 'color: #fafa05; padding: 1px; margin-right: 5px; font-size: 10px',\n `[ ${key} ]`, arg\n )\n break;\n case 'object':\n switch (key) {\n case 'mutation':\n console.groupCollapsed('[mutation]')\n console.dir(arg)\n console.groupEnd()\n break;\n case 'options':\n printObject(key, (arg as { storeOptions?: unknown })?.storeOptions ?? arg)\n break;\n case 'payload':\n printTracePayload(arg as Record<string, unknown>)\n break;\n case 'store':\n printObject(key, {\n $state: (arg as Store)['$state'],\n ...Object.keys(arg).reduce((acc, curr) => {\n if ((curr.startsWith('$') && !['$id', '$state'].includes(curr)) || curr.startsWith('_')) {\n return acc\n }\n\n acc[curr] = (arg as Record<string, unknown>)[curr]\n return acc\n }, {} as Record<string, unknown>)\n })\n break;\n default:\n printObject(key, arg)\n }\n break;\n case 'function':\n console.dir(arg)\n break;\n default:\n console.info(arg)\n }\n })\n}\nexport function log(logStyle: string, args: any) {\n if (!logStyle) {\n throw new Error('Style instructions are required')\n }\n\n console.log(\n '%c%s',\n logStyle,\n args.shift(),\n ...args\n )\n}\n\n\nexport function logTrace(logStyle: string, args: any, pluginName: string) {\n if (!logStyle) {\n throw new Error('Style instructions are required')\n }\n\n const label = args.shift()\n const event = args[0]\n\n if (!event?.payload || Object.keys(event.payload).length === 0) {\n console.log(\n '%c%s',\n logStyle,\n `${event?.label ?? event?.namespace}`,\n event?.source\n )\n return\n }\n\n console.groupCollapsed(\n '%c%s',\n logStyle,\n `${label}\n`, event?.source\n )\n\n args.forEach((arg: any) => {\n switch (typeof arg) {\n case 'string':\n console.info(arg)\n break;\n case 'object':\n if (Array.isArray(arg)) {\n console.table(arg)\n } else {\n printTracePayload(arg)\n }\n break;\n case 'function':\n console.dir(arg)\n break;\n default:\n console.info(arg)\n }\n })\n\n /**\n console.groupCollapsed(\n '%c%s',\n 'color: #fafa05; padding: 1px; margin-right: 5px; font-size: 10px',\n `[ trace ]`\n )\n console.trace()\n console.groupEnd()\n */\n\n console.groupEnd()\n}\n\nexport abstract class CustomConsole implements Console {\n protected _bgColor: string = 'transparent'\n protected _color: string = '#f2f286'\n protected _icon: string = '🍍⚡'\n protected _errorBgColor: string = '#d24545'\n protected _errorColor: string = 'white'\n protected _errorIcon: string = '🍍⚠️'\n protected _pluginName?: string\n protected _styles: StyleDefinitions = {\n error: { bgColor: this._errorBgColor, color: this._errorColor, icon: this._errorIcon },\n info: { bgColor: this._bgColor, color: this._color, icon: this._icon }\n }\n\n protected formatMessage(message: string, icon: string): string {\n return this._pluginName ? ` [${icon} ${this._pluginName}] \n ${message} \n` : message\n }\n\n protected generateStyle(styleDefinition: StyleDefinition): string {\n return style(styleDefinition.bgColor, styleDefinition.color)\n }\n\n protected getStyleDefinition(messageType?: LogType): StyleDefinition {\n return this._styles[messageType ?? 'info']\n }\n\n log(...args: any) {\n this.useLog(\n this.getStyleDefinition(),\n args\n )\n }\n\n error(...args: any) {\n const logType = 'error'\n this.useLog(\n this.getStyleDefinition(logType),\n args\n )\n }\n\n protected rebuildArgs(args: string | any[], icon: string) {\n if (typeof args === 'string') {\n return [args]\n }\n\n if (Array.isArray(args)) {\n return [args.shift(), ...(args ?? [])]\n }\n }\n\n protected useLog(styleDefinition: StyleDefinition, args: any) {\n log(\n this.generateStyle(styleDefinition),\n this.rebuildArgs(args, styleDefinition.icon)\n )\n }\n}\n\nclass PluginConsoleClass extends CustomConsole {\n protected _pluginName: string = pluginName\n}\n\nexport const PluginConsole = new PluginConsoleClass()\n\nexport class TraceConsole extends CustomConsole {\n protected _pluginName: string = pluginName\n\n constructor(pluginName?: string) {\n super()\n if (pluginName) {\n this._pluginName = pluginName\n }\n }\n\n\n logGroup(groups: ConsoleTraceEvent[]) {\n const firstEntry = groups.shift()\n const context = firstEntry?.[1] as ConsoleTraceEventArgs\n\n console.groupCollapsed(\n '%c%s',\n 'color: #68ca59; padding: 1px; margin-right: 5px; font-size: 12px',\n `[ 🍍 ${context?.label ?? context?.namespace} ] - ${context?.scope}`\n )\n if (context?.payload) {\n printTracePayload(context.payload)\n }\n console.groupCollapsed(\n '%c%s',\n 'color: #f1f6b7; padding: 1px; margin-right: 5px; font-size: 11px',\n `[ TRACES ]`\n )\n groups.forEach(group => this.log(...group))\n console.groupEnd()\n console.groupEnd()\n }\n\n protected useLog(styleDefinition: StyleDefinition, args: any) {\n logTrace(\n this.generateStyle(styleDefinition),\n this.rebuildArgs(args, styleDefinition.icon),\n this._pluginName\n )\n }\n}","import type { AnyObject } from '../types'\nimport type {\n TraceEvent,\n TraceEventMetadata,\n TraceLevel,\n TraceListener,\n TracePayload,\n TracerOptions,\n} from '../types/trace'\n\nfunction resolvePayload(payload: TracePayload): AnyObject | undefined {\n if (typeof payload !== 'function') {\n return payload\n }\n\n try {\n return payload()\n } catch (error) {\n return { __tracePayloadError: error }\n }\n}\n\n/**\n * Emits structured trace events.\n *\n * Nothing is allocated when no listener matches:\n * the payload is a factory resolved only once a consumer is known.\n */\nexport default class Tracer {\n private readonly _listeners: TraceListener[] = []\n private _scope?: string\n private readonly _source: string\n\n constructor(source: string, listeners: TraceListener[], options: TracerOptions = {}) {\n this._scope = options.scope\n this._source = source\n this._listeners = listeners\n }\n\n get scope(): string | undefined {\n return this._scope\n }\n\n set scope(scope: string | undefined) {\n this._scope = scope\n }\n\n get source(): string {\n return this._source\n }\n\n debug(label: string, namespace: string, payload?: TracePayload, scope?: string): void {\n this.emit('debug', label, namespace, payload, scope)\n }\n\n /** Relays the error to matching listeners, or reports it when none match. */\n error(label: string, namespace: string, error: unknown, payload?: TracePayload, scope?: string): void {\n this.emit('error', label, namespace, payload, scope, error)\n }\n\n private emit(\n level: TraceLevel,\n label: string,\n namespace: string,\n payload?: TracePayload,\n scope?: string,\n error?: unknown\n ): void {\n if (this._listeners.length === 0) {\n if (level === 'error') {\n console.error('Unhandled error trace event:', error)\n }\n return\n }\n\n const metadata: TraceEventMetadata = {\n label,\n level,\n namespace,\n scope: scope ?? this._scope,\n source: this._source\n }\n\n const matched = this._listeners.filter(listener => {\n try {\n return listener.filter(metadata)\n } catch (error) {\n console.error('Error in trace listener filter:', error)\n return false\n }\n })\n\n if (matched.length === 0) {\n if (level === 'error') {\n console.error('Unhandled error trace event:', error)\n }\n return\n }\n\n const event: TraceEvent = {\n ...metadata,\n ...(error !== undefined && { error }),\n ...(payload !== undefined && { payload: resolvePayload(payload) }),\n timestamp: Date.now()\n }\n\n for (const listener of matched) {\n try {\n listener.handler(event)\n } catch (error) {\n // a faulty listener must never break the traced code\n console.error('Error in trace listener:', error)\n }\n }\n }\n}\n","import { PluginConsole, TraceConsole } from '../system/log'\n\nimport type { Console } from '../types/log'\nimport type {\n ConsoleTraceEvent, ConsoleTraceEventArgs, TraceEvent, TraceListenerGroupBy, ConsoleTraceGroupListener, TraceListener\n} from '../types/trace'\n\n\n/**\n * Builds the console arguments from a trace event.\n * @param event The trace event to build console arguments from.\n * @returns An array containing the formatted trace label and the sanitized event data.\n */\nfunction buildConsoleArgsFromEvent(event: TraceEvent): ConsoleTraceEvent {\n const sanitizedEvent = Object.keys(event).reduce((acc, curr) => {\n if (curr !== 'level' && curr !== 'timestamp') {\n acc[curr] = event[curr as keyof ConsoleTraceEventArgs]\n }\n return acc\n }, {} as Record<string, unknown>)\n\n return [formatTraceLabel(event), sanitizedEvent as ConsoleTraceEventArgs]\n\n /**\n if (event.error !== undefined) {\n args.push(event.error)\n }\n\n if (event.payload !== undefined) {\n if (Array.isArray(event.payload)) {\n args.push(...event.payload)\n } else {\n args.push(event.payload)\n }\n }\n */\n}\n\nfunction formatTraceLabel(event: TraceEvent): string {\n return event.scope\n ? `${event.label} [${event.scope}]`\n : `${event.label}`\n}\n\nfunction log(target: Console, event: TraceEvent): void {\n const consoleMethod = event.level === 'error' ? 'error' : 'log'\n target[consoleMethod](...buildConsoleArgsFromEvent(event))\n}\n\n/**\n * Creates an opt-in trace listener that reproduces the former console output.\n */\nexport function createConsoleTraceListener(target?: Console): Omit<TraceListener, 'filter'> {\n if (!target) {\n target = new TraceConsole()\n }\n\n return {\n handler(event): void {\n log(target, event)\n }\n }\n}\n\n\nexport function createConsoleGroupTraceListener(groupBy: TraceListenerGroupBy = 'scope'): ConsoleTraceGroupListener {\n const target = new TraceConsole()\n const groups = new Map<string, ConsoleTraceEvent[]>()\n\n\n function createGroup(key: string) {\n groups.set(key, [])\n }\n\n function logGroup(key: string): void {\n const group = groups.get(key)\n\n if (!group) {\n target.error(`No group found for key \"${key}\"`)\n return\n }\n\n if (group.length) { target.logGroup(group) }\n\n groups.delete(key)\n }\n\n return {\n createGroup,\n logGroup,\n handler(event): void {\n const groupKey = event[groupBy] as string\n if (!groups.has(groupKey)) {\n log(target, event)\n return\n }\n\n groups.get(groupKey)?.push(buildConsoleArgsFromEvent(event))\n }\n }\n}\n\n\n","import { createConsoleTraceListener, createConsoleGroupTraceListener } from \"./console-trace-listener\"\nimport type {\n ConsoleTraceGroupListener,\n TraceEventMetadata,\n TraceFilterFactoryCriterion,\n TraceFilterFactoryParam,\n TraceGroupListener,\n TraceListener\n} from \"../types/trace\"\n\n\nfunction createFilter(criteria: TraceFilterFactoryCriterion[], mode: 'every' | 'some') {\n return (event: TraceEventMetadata) => {\n return criteria[mode](({ comparator = 'equals', target, value }) => {\n const eventValue = event[target]\n if (typeof eventValue !== 'string') return false\n let result = false\n switch (comparator) {\n case 'equals':\n result = eventValue === value\n break\n case 'contains':\n result = eventValue.includes(value)\n break\n case 'startsWith':\n result = eventValue.startsWith(value)\n break\n case 'endsWith':\n result = eventValue.endsWith(value)\n break\n default:\n result = false\n break\n }\n return result\n })\n }\n}\n\n/**\n * Creates a trace group listener with optional filtering.\n * @param filterDef The filter criteria for the trace events.\n * @param filterMode The mode to apply when evaluating multiple filter criteria: 'every' or 'some'.\n * @param groupBy The key of the trace event metadata to group by.\n * @returns A trace listener configured with group handling and filtering.\n */\nexport function createTraceGroupListener(\n filterDef: TraceFilterFactoryCriterion[],\n filterMode: 'every' | 'some' = 'every',\n groupBy: keyof TraceEventMetadata = 'scope'\n) {\n return {\n groupBy,\n ...createConsoleGroupTraceListener(groupBy),\n ...createTraceFilter(filterDef, filterMode)\n } as TraceGroupListener\n\n}\n\nfunction createTraceFilter(\n listenerDef: TraceFilterFactoryParam | TraceFilterFactoryCriterion[],\n filterMode: 'every' | 'some' = 'every'\n) {\n if (Array.isArray(listenerDef)) {\n listenerDef = {\n filter: createFilter(listenerDef, filterMode)\n }\n }\n\n if (listenerDef.filter && Array.isArray(listenerDef.filter)) {\n listenerDef.filter = createFilter(listenerDef.filter, filterMode)\n }\n\n if (!listenerDef.filter || typeof listenerDef.filter !== 'function') {\n listenerDef = { ...listenerDef, filter: () => true }\n }\n\n return listenerDef\n}\n\n/**\n * Creates a trace listener with optional filtering.\n * @param param The trace listener parameters including handler and optional filter criteria.\n * @param filterMode The mode to apply when evaluating multiple filter criteria: 'every' or 'some'.\n * @returns A trace listener configured with the specified handler and filter.\n */\nexport function createTraceListener(listenerDef: TraceFilterFactoryParam | TraceFilterFactoryCriterion[], filterMode: 'every' | 'some' = 'every'): TraceListener {\n listenerDef = createTraceFilter(listenerDef, filterMode)\n\n if (!listenerDef?.handler) {\n listenerDef = { ...listenerDef, ...createConsoleTraceListener() } as TraceFilterFactoryParam\n }\n\n return listenerDef as TraceListener\n}","import Tracer from '../system/Tracer'\nimport { createTraceGroupListener, createTraceListener } from './trace-listener'\nimport type {\n AddTraceListenerOptions,\n TraceEvent,\n TraceFilterFactoryCriterion,\n TraceFilterFactoryParam,\n TraceGroupListener,\n TraceListener,\n TraceListenerFilterMode,\n TraceListenerRemover,\n TraceRegistry,\n TracerOptions,\n} from '../types/trace'\n\n/**\n * Creates a registry for managing trace listeners and creating tracers.\n * @returns An object containing methods to add and clear trace listeners, and to create tracers.\n */\nexport function createTracerRegistry(): TraceRegistry {\n let listeners: TraceListener[] = []\n\n /**\n * Registers a trace listener and returns its remover.\n * Listeners are evaluated in registration order.\n * @param listener The trace listener to register.\n * @param filterMode The mode to use when creating a trace listener from a filter factory parameter. Defaults to 'every'.\n * @returns A function that removes the registered listener when called.\n */\n function addTraceListener(listener: TraceListener | TraceFilterFactoryParam, filterMode: TraceListenerFilterMode = 'every'): TraceListenerRemover {\n if (!listener || !listener?.handler) {\n listener = createTraceListener(listener, filterMode)\n }\n\n if (!('filter' in listener) || typeof listener.filter !== 'function') {\n listener = { ...listener, filter: () => true }\n }\n\n listeners.push(listener as TraceListener)\n\n return () => {\n const index = listeners.indexOf(listener as TraceListener)\n\n if (index !== -1) {\n listeners.splice(index, 1)\n }\n }\n }\n\n /**\n * Clears all registered trace listeners.\n */\n function clearTraceListeners(): void {\n listeners = []\n }\n\n /**\n * Checks if there are any registered trace listeners.\n * @returns True if there are registered trace listeners, otherwise false.\n */\n function hasTraceListeners(): boolean {\n return listeners.length > 0\n }\n\n return {\n addTraceListener,\n clearTraceListeners,\n createTracer: (source: string, options: TracerOptions = {}) => new Tracer(source, listeners, options),\n hasTraceListeners\n }\n}\n\nexport function createTraceGroupsRegistry() {\n let listeners: TraceGroupListener[] = []\n\n /**\n * Registers a trace listener and returns its remover.\n * Listeners are evaluated in registration order.\n * @param criteria The criteria used to create the trace group listener.\n * @param filterMode The mode to use when creating the trace group listener from the criteria. Defaults to 'every'.\n * @param groupBy The property to group traces by. Defaults to 'scope'.\n * @returns A function that removes the registered trace group listener when called.\n */\n function addListener(\n criteria: TraceFilterFactoryCriterion[],\n { filterMode = 'every', groupBy = 'scope' }: AddTraceListenerOptions = {}\n ): TraceListenerRemover {\n const listenerGroup = createTraceGroupListener(criteria, filterMode ?? 'every', groupBy ?? 'scope')\n listeners.push(listenerGroup)\n\n return () => {\n const index = listeners.indexOf(listenerGroup)\n\n if (index !== -1) {\n listeners.splice(index, 1)\n }\n }\n }\n\n /**\n * Clears all registered trace listeners.\n */\n function clearTraceListeners(): void {\n listeners = []\n }\n\n function getMatchedListener(payload: TraceEvent) {\n return listeners.filter(listener => listener.filter(payload))\n }\n\n /**\n * Checks if there are any registered trace listeners.\n * @returns True if there are registered trace listeners, otherwise false.\n */\n function hasTraceListeners(): boolean {\n return listeners.length > 0\n }\n\n function listenerGroupAction(actionName: 'createGroup' | 'logGroup', payload: TraceEvent) {\n if (!listeners.length) return\n\n getMatchedListener(payload).forEach(listener => {\n const groupLabel = payload[listener.groupBy]\n if (typeof groupLabel === 'string') { listener[actionName](groupLabel) }\n })\n }\n\n\n return {\n addListener,\n clearTraceListeners,\n tracerHandler: {\n closeGroup: (payload: TraceEvent) => listenerGroupAction('logGroup', payload),\n createTracer: (source: string, options: TracerOptions = {}) => new Tracer(source, listeners, options),\n startGroup: (payload: TraceEvent) => listenerGroupAction('createGroup', payload)\n },\n hasTraceListeners\n }\n}"],"names":["style","bgColor","color","printObject","label","payload","item","index","emptyKeys","key","value","printTracePayload","tracePayload","arg","acc","curr","log","logStyle","args","logTrace","pluginName","event","CustomConsole","__publicField","message","icon","styleDefinition","messageType","TraceConsole","groups","context","group","resolvePayload","error","Tracer","source","listeners","options","scope","namespace","level","metadata","matched","listener","buildConsoleArgsFromEvent","sanitizedEvent","formatTraceLabel","target","consoleMethod","createConsoleTraceListener","createFilter","criteria","mode","comparator","eventValue","result","createTraceFilter","listenerDef","filterMode","createTraceListener","createTracerRegistry","addTraceListener","clearTraceListeners","hasTraceListeners"],"mappings":";;;;;AAMA,MAAMA,IAAQ,CAACC,GAAiBC,IAAgB,YAC5C,qBAAqBD,CAAO,YAAYC,CAAK;AAE1C,SAASC,EAAYC,GAAeC,GAAiB;AAGxD,MAFgB,MAAM,QAAQA,CAAO,IACXA,EAAQ,WAAW,IAAI,OAAO,KAAKA,CAAO,EAAE,WAAW,GACpE;AACT,YAAQ;AAAA,MACJ;AAAA,MACA;AAAA,MACA,KAAKD,CAAK;AAAA,IAAA;AAEd;AAAA,EACJ;AAOA,MALA,QAAQ;AAAA,IACJ;AAAA,IACA;AAAA,IACA,KAAKA,CAAK;AAAA,EAAA,GAEV,MAAM,QAAQC,CAAO;AACrB,IAAI,OAAOA,EAAQ,CAAC,KAAM,WACtBA,EAAQ,QAAQ,CAACC,MAAc;AAC3B,MAAIA,EAAK,QACLH,EAAYG,EAAK,OAAOA,CAAI,IACrBA,EAAK,MACZH,EAAYG,EAAK,KAAKA,CAAI,IAE1B,QAAQ,IAAIA,CAAI;AAAA,IAExB,CAAC,IAEDD,EAAQ,QAAQ,CAACC,GAAWC,MAAkB;AAC1C,cAAQ;AAAA,QACJ;AAAA,QACA;AAAA,QACA,KAAKA,CAAK;AAAA,QAAMD;AAAA,MAAA;AAAA,IAExB,CAAC;AAAA,OAEF;AACH,QAAIE,IAAsB,CAAA;AAC1B,WAAO,KAAKH,CAAO,EAAE,QAAQ,CAAAI,MAAO;AAChC,YAAMC,IAASL,EAAoCI,CAAG;AACtD,MAAI,OAAOC,KAAU,WACb,MAAM,QAAQA,CAAK,IACf,OAAOA,EAAM,CAAC,KAAM,WACpBP,EAAYM,GAAKC,CAAK,KAEtB,QAAQ,eAAeD,CAAG,GAC1B,QAAQ,IAAIC,CAAK,GACjB,QAAQ,SAAA,KAGZP,EAAYM,GAAK,OAAO,OAAO,CAAA,GAAIC,CAAK,CAAC,IAGxCA,IAGD,QAAQ;AAAA,QACJ;AAAA,QACA;AAAA,QACA,KAAKD,CAAG;AAAA,QAAMC;AAAA,MAAA,IALlBF,EAAU,KAAKC,CAAG;AAAA,IAS9B,CAAC,GACGD,EAAU,UACV,QAAQ;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MAAwBA;AAAA,IAAA;AAAA,EAGpC;AACA,UAAQ,SAAA;AACZ;AAEA,SAASG,EAAkBC,GAAuC;AAC9D,SAAO,KAAKA,CAAY,EAAE,QAAQ,CAACH,MAAgB;AAC/C,QAAI,CAAC,SAAS,aAAa,SAAS,QAAQ,EAAE,SAASA,CAAG;AACtD;AAEJ,UAAMI,IAAMD,EAAaH,CAAG;AAC5B,QAAKI;AAIL,cAAQ,OAAOA,GAAA;AAAA,QACX,KAAK;AACD,kBAAQ;AAAA,YACJ;AAAA,YACA;AAAA,YACA,KAAKJ,CAAG;AAAA,YAAMI;AAAA,UAAA;AAElB;AAAA,QACJ,KAAK;AACD,kBAAQJ,GAAA;AAAA,YACJ,KAAK;AACD,sBAAQ,eAAe,YAAY,GACnC,QAAQ,IAAII,CAAG,GACf,QAAQ,SAAA;AACR;AAAA,YACJ,KAAK;AACD,cAAAV,EAAYM,GAAMI,GAAoC,gBAAgBA,CAAG;AACzE;AAAA,YACJ,KAAK;AACD,cAAAF,EAAkBE,CAA8B;AAChD;AAAA,YACJ,KAAK;AACD,cAAAV,EAAYM,GAAK;AAAA,gBACb,QAASI,EAAc;AAAA,gBACvB,GAAG,OAAO,KAAKA,CAAG,EAAE,OAAO,CAACC,GAAKC,OACxBA,EAAK,WAAW,GAAG,KAAK,CAAC,CAAC,OAAO,QAAQ,EAAE,SAASA,CAAI,KAAMA,EAAK,WAAW,GAAG,MAItFD,EAAIC,CAAI,IAAKF,EAAgCE,CAAI,IAC1CD,IACR,CAAA,CAA6B;AAAA,cAAA,CACnC;AACD;AAAA,YACJ;AACI,cAAAX,EAAYM,GAAKI,CAAG;AAAA,UAAA;AAE5B;AAAA,QACJ,KAAK;AACD,kBAAQ,IAAIA,CAAG;AACf;AAAA,QACJ;AACI,kBAAQ,KAAKA,CAAG;AAAA,MAAA;AAAA,EAE5B,CAAC;AACL;AACO,SAASG,EAAIC,GAAkBC,GAAW;AAC7C,MAAI,CAACD;AACD,UAAM,IAAI,MAAM,iCAAiC;AAGrD,UAAQ;AAAA,IACJ;AAAA,IACAA;AAAA,IACAC,EAAK,MAAA;AAAA,IACL,GAAGA;AAAA,EAAA;AAEX;AAGO,SAASC,EAASF,GAAkBC,GAAWE,GAAoB;AACtE,MAAI,CAACH;AACD,UAAM,IAAI,MAAM,iCAAiC;AAGrD,QAAMb,IAAQc,EAAK,MAAA,GACbG,IAAQH,EAAK,CAAC;AAEpB,MAAI,CAACG,GAAO,WAAW,OAAO,KAAKA,EAAM,OAAO,EAAE,WAAW,GAAG;AAC5D,YAAQ;AAAA,MACJ;AAAA,MACAJ;AAAA,MACA,GAAGI,GAAO,SAASA,GAAO,SAAS;AAAA,MACnCA,GAAO;AAAA,IAAA;AAEX;AAAA,EACJ;AAEA,UAAQ;AAAA,IACJ;AAAA,IACAJ;AAAA,IACA,GAAGb,CAAK;AAAA;AAAA,IACbiB,GAAO;AAAA,EAAA,GAGNH,EAAK,QAAQ,CAACL,MAAa;AACvB,YAAQ,OAAOA,GAAA;AAAA,MACX,KAAK;AACD,gBAAQ,KAAKA,CAAG;AAChB;AAAA,MACJ,KAAK;AACD,QAAI,MAAM,QAAQA,CAAG,IACjB,QAAQ,MAAMA,CAAG,IAEjBF,EAAkBE,CAAG;AAEzB;AAAA,MACJ,KAAK;AACD,gBAAQ,IAAIA,CAAG;AACf;AAAA,MACJ;AACI,gBAAQ,KAAKA,CAAG;AAAA,IAAA;AAAA,EAE5B,CAAC,GAYD,QAAQ,SAAA;AACZ;AAEO,MAAeS,EAAiC;AAAA,EAAhD;AACO,IAAAC,EAAA,kBAAmB;AACnB,IAAAA,EAAA,gBAAiB;AACjB,IAAAA,EAAA,eAAgB;AAChB,IAAAA,EAAA,uBAAwB;AACxB,IAAAA,EAAA,qBAAsB;AACtB,IAAAA,EAAA,oBAAqB;AACrB,IAAAA,EAAA;AACA,IAAAA,EAAA,iBAA4B;AAAA,MAClC,OAAO,EAAE,SAAS,KAAK,eAAe,OAAO,KAAK,aAAa,MAAM,KAAK,WAAA;AAAA,MAC1E,MAAM,EAAE,SAAS,KAAK,UAAU,OAAO,KAAK,QAAQ,MAAM,KAAK,MAAA;AAAA,IAAM;AAAA;AAAA,EAG/D,cAAcC,GAAiBC,GAAsB;AAC3D,WAAO,KAAK,cAAc,KAAKA,CAAI,IAAI,KAAK,WAAW;AAAA,GAC5DD,CAAO;AAAA,IACNA;AAAA,EACA;AAAA,EAEU,cAAcE,GAA0C;AAC9D,WAAO1B,EAAM0B,EAAgB,SAASA,EAAgB,KAAK;AAAA,EAC/D;AAAA,EAEU,mBAAmBC,GAAwC;AACjE,WAAO,KAAK,QAAQA,KAAe,MAAM;AAAA,EAC7C;AAAA,EAEA,OAAOT,GAAW;AACd,SAAK;AAAA,MACD,KAAK,mBAAA;AAAA,MACLA;AAAA,IAAA;AAAA,EAER;AAAA,EAEA,SAASA,GAAW;AAEhB,SAAK;AAAA,MACD,KAAK,mBAFO,OAEmB;AAAA,MAC/BA;AAAA,IAAA;AAAA,EAER;AAAA,EAEU,YAAYA,GAAsBO,GAAc;AACtD,QAAI,OAAOP,KAAS;AAChB,aAAO,CAACA,CAAI;AAGhB,QAAI,MAAM,QAAQA,CAAI;AAClB,aAAO,CAACA,EAAK,MAAA,GAAS,GAAIA,KAAQ,CAAA,CAAG;AAAA,EAE7C;AAAA,EAEU,OAAOQ,GAAkCR,GAAW;AAC1DF,IAAAA;AAAAA,MACI,KAAK,cAAcU,CAAe;AAAA,MAClC,KAAK,YAAYR,GAAMQ,EAAgB,IAAI;AAAA,IAAA;AAAA,EAEnD;AACJ;AAQO,MAAME,UAAqBN,EAAc;AAAA,EAG5C,YAAYF,GAAqB;AAC7B,UAAA;AAHM,IAAAG,EAAA,qBAAsBH;AAIxBA,IAAAA,MACA,KAAK,cAAcA;AAAAA,EAE3B;AAAA,EAGA,SAASS,GAA6B;AAElC,UAAMC,IADaD,EAAO,MAAA,IACG,CAAC;AAE9B,YAAQ;AAAA,MACJ;AAAA,MACA;AAAA,MACA,QAAQC,GAAS,SAASA,GAAS,SAAS,QAAQA,GAAS,KAAK;AAAA,IAAA,GAElEA,GAAS,WACTnB,EAAkBmB,EAAQ,OAAO,GAErC,QAAQ;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,IAAA,GAEJD,EAAO,QAAQ,CAAAE,MAAS,KAAK,IAAI,GAAGA,CAAK,CAAC,GAC1C,QAAQ,SAAA,GACR,QAAQ,SAAA;AAAA,EACZ;AAAA,EAEU,OAAOL,GAAkCR,GAAW;AAC1D,IAAAC;AAAA,MACI,KAAK,cAAcO,CAAe;AAAA,MAClC,KAAK,YAAYR,GAAMQ,EAAgB,IAAI;AAAA,IAE/C;AAAA,EACJ;AACJ;ACrTA,SAASM,EAAe3B,GAA8C;AAClE,MAAI,OAAOA,KAAY;AACnB,WAAOA;AAGX,MAAI;AACA,WAAOA,EAAA;AAAA,EACX,SAAS4B,GAAO;AACZ,WAAO,EAAE,qBAAqBA,EAAA;AAAA,EAClC;AACJ;AAQA,MAAqBC,EAAO;AAAA,EAKxB,YAAYC,GAAgBC,GAA4BC,IAAyB,CAAA,GAAI;AAJpE,IAAAd,EAAA,oBAA8B,CAAA;AACvC,IAAAA,EAAA;AACS,IAAAA,EAAA;AAGb,SAAK,SAASc,EAAQ,OACtB,KAAK,UAAUF,GACf,KAAK,aAAaC;AAAA,EACtB;AAAA,EAEA,IAAI,QAA4B;AAC5B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,MAAME,GAA2B;AACjC,SAAK,SAASA;AAAA,EAClB;AAAA,EAEA,IAAI,SAAiB;AACjB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,MAAMlC,GAAemC,GAAmBlC,GAAwBiC,GAAsB;AAClF,SAAK,KAAK,SAASlC,GAAOmC,GAAWlC,GAASiC,CAAK;AAAA,EACvD;AAAA,EAGA,MAAMlC,GAAemC,GAAmBN,GAAgB5B,GAAwBiC,GAAsB;AAClG,SAAK,KAAK,SAASlC,GAAOmC,GAAWlC,GAASiC,GAAOL,CAAK;AAAA,EAC9D;AAAA,EAEQ,KACJO,GACApC,GACAmC,GACAlC,GACAiC,GACAL,GACI;AACJ,QAAI,KAAK,WAAW,WAAW,GAAG;AAC9B,MAAIO,MAAU,WACV,QAAQ,MAAM,gCAAgCP,CAAK;AAEvD;AAAA,IACJ;AAEA,UAAMQ,IAA+B;AAAA,MACjC,OAAArC;AAAA,MACA,OAAAoC;AAAA,MACA,WAAAD;AAAA,MACA,OAAOD,KAAS,KAAK;AAAA,MACrB,QAAQ,KAAK;AAAA,IAAA,GAGXI,IAAU,KAAK,WAAW,OAAO,CAAAC,MAAY;AAC/C,UAAI;AACA,eAAOA,EAAS,OAAOF,CAAQ;AAAA,MACnC,SAASR,GAAO;AACZ,uBAAQ,MAAM,mCAAmCA,CAAK,GAC/C;AAAA,MACX;AAAA,IACJ,CAAC;AAED,QAAIS,EAAQ,WAAW,GAAG;AACtB,MAAIF,MAAU,WACV,QAAQ,MAAM,gCAAgCP,CAAK;AAEvD;AAAA,IACJ;AAEA,UAAMZ,IAAoB;AAAA,MACtB,GAAGoB;AAAA,MACH,GAAIR,MAAU,UAAa,EAAE,OAAAA,EAAA;AAAA,MAC7B,GAAI5B,MAAY,UAAa,EAAE,SAAS2B,EAAe3B,CAAO,EAAA;AAAA,MAC9D,WAAW,KAAK,IAAA;AAAA,IAAI;AAGxB,eAAWsC,KAAYD;AACnB,UAAI;AACA,QAAAC,EAAS,QAAQtB,CAAK;AAAA,MAC1B,SAASY,GAAO;AAEZ,gBAAQ,MAAM,4BAA4BA,CAAK;AAAA,MACnD;AAAA,EAER;AACJ;ACtGA,SAASW,EAA0BvB,GAAsC;AACrE,QAAMwB,IAAiB,OAAO,KAAKxB,CAAK,EAAE,OAAO,CAACP,GAAKC,OAC/CA,MAAS,WAAWA,MAAS,gBAC7BD,EAAIC,CAAI,IAAIM,EAAMN,CAAmC,IAElDD,IACR,CAAA,CAA6B;AAEhC,SAAO,CAACgC,EAAiBzB,CAAK,GAAGwB,CAAuC;AAe5E;AAEA,SAASC,EAAiBzB,GAA2B;AACjD,SAAOA,EAAM,QACP,GAAGA,EAAM,KAAK,KAAKA,EAAM,KAAK,MAC9B,GAAGA,EAAM,KAAK;AACxB;AAEA,SAASL,EAAI+B,GAAiB1B,GAAyB;AACnD,QAAM2B,IAAgB3B,EAAM,UAAU,UAAU,UAAU;AAC1D,EAAA0B,EAAOC,CAAa,EAAE,GAAGJ,EAA0BvB,CAAK,CAAC;AAC7D;AAKO,SAAS4B,EAA2BF,GAAiD;AACxF,SAAKA,MACDA,IAAS,IAAInB,EAAA,IAGV;AAAA,IACH,QAAQP,GAAa;AACjB,MAAAL,EAAI+B,GAAQ1B,CAAK;AAAA,IACrB;AAAA,EAAA;AAER;ACnDA,SAAS6B,EAAaC,GAAyCC,GAAwB;AACnF,SAAO,CAAC/B,MACG8B,EAASC,CAAI,EAAE,CAAC,EAAE,YAAAC,IAAa,UAAU,QAAAN,GAAQ,OAAArC,QAAY;AAChE,UAAM4C,IAAajC,EAAM0B,CAAM;AAC/B,QAAI,OAAOO,KAAe,SAAU,QAAO;AAC3C,QAAIC,IAAS;AACb,YAAQF,GAAA;AAAA,MACJ,KAAK;AACD,QAAAE,IAASD,MAAe5C;AACxB;AAAA,MACJ,KAAK;AACD,QAAA6C,IAASD,EAAW,SAAS5C,CAAK;AAClC;AAAA,MACJ,KAAK;AACD,QAAA6C,IAASD,EAAW,WAAW5C,CAAK;AACpC;AAAA,MACJ,KAAK;AACD,QAAA6C,IAASD,EAAW,SAAS5C,CAAK;AAClC;AAAA,MACJ;AACI,QAAA6C,IAAS;AACT;AAAA,IAAA;AAER,WAAOA;AAAA,EACX,CAAC;AAET;AAsBA,SAASC,EACLC,GACAC,IAA+B,SACjC;AACE,SAAI,MAAM,QAAQD,CAAW,MACzBA,IAAc;AAAA,IACV,QAAQP,EAAaO,GAAaC,CAAU;AAAA,EAAA,IAIhDD,EAAY,UAAU,MAAM,QAAQA,EAAY,MAAM,MACtDA,EAAY,SAASP,EAAaO,EAAY,QAAQC,CAAU,KAGhE,CAACD,EAAY,UAAU,OAAOA,EAAY,UAAW,gBACrDA,IAAc,EAAE,GAAGA,GAAa,QAAQ,MAAM,GAAA,IAG3CA;AACX;AAQO,SAASE,EAAoBF,GAAsEC,IAA+B,SAAwB;AAC7J,SAAAD,IAAcD,EAAkBC,GAAaC,CAAU,GAElDD,GAAa,YACdA,IAAc,EAAE,GAAGA,GAAa,GAAGR,IAA2B,IAG3DQ;AACX;AC3EO,SAASG,IAAsC;AAClD,MAAIxB,IAA6B,CAAA;AASjC,WAASyB,EAAiBlB,GAAmDe,IAAsC,SAA+B;AAC9I,YAAI,CAACf,KAAY,CAACA,GAAU,aACxBA,IAAWgB,EAAoBhB,GAAUe,CAAU,KAGnD,EAAE,YAAYf,MAAa,OAAOA,EAAS,UAAW,gBACtDA,IAAW,EAAE,GAAGA,GAAU,QAAQ,MAAM,GAAA,IAG5CP,EAAU,KAAKO,CAAyB,GAEjC,MAAM;AACT,YAAMpC,IAAQ6B,EAAU,QAAQO,CAAyB;AAEzD,MAAIpC,MAAU,MACV6B,EAAU,OAAO7B,GAAO,CAAC;AAAA,IAEjC;AAAA,EACJ;AAKA,WAASuD,IAA4B;AACjC,IAAA1B,IAAY,CAAA;AAAA,EAChB;AAMA,WAAS2B,IAA6B;AAClC,WAAO3B,EAAU,SAAS;AAAA,EAC9B;AAEA,SAAO;AAAA,IACH,kBAAAyB;AAAA,IACA,qBAAAC;AAAA,IACA,cAAc,CAAC3B,GAAgBE,IAAyB,CAAA,MAAO,IAAIH,EAAOC,GAAQC,GAAWC,CAAO;AAAA,IACpG,mBAAA0B;AAAA,EAAA;AAER;"}
@@ -1,59 +1,59 @@
1
1
  var k = Object.defineProperty;
2
- var E = (r, t, e) => t in r ? k(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;
3
- var c = (r, t, e) => E(r, typeof t != "symbol" ? t + "" : t, e);
4
- import { h as O, g as b, i as _, p as g } from "./chunks/constantes-CaTNAbzX.js";
5
- import { P as M, S as x, d as F, a as W, b as I, c as q, e as z, s as L } from "./chunks/constantes-CaTNAbzX.js";
2
+ var E = (s, t, e) => t in s ? k(s, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[t] = e;
3
+ var c = (s, t, e) => E(s, typeof t != "symbol" ? t + "" : t, e);
4
+ import { h as O, g as b, i as _, p as g } from "./chunks/constantes-2FeJfVVy.js";
5
+ import { P as T, S as K, d as M, a as F, b as W, c as I, e as z, s as q } from "./chunks/constantes-2FeJfVVy.js";
6
6
  import { toRaw as y } from "vue";
7
- function h(r) {
7
+ function h(s) {
8
8
  if (typeof structuredClone == "function")
9
9
  try {
10
- return structuredClone(r);
10
+ return structuredClone(s);
11
11
  } catch {
12
12
  }
13
- if (r === null || typeof r != "object")
14
- return r;
15
- if (r instanceof Map)
13
+ if (s === null || typeof s != "object")
14
+ return s;
15
+ if (s instanceof Map)
16
16
  return new Map(
17
- Array.from(r.entries(), ([e, i]) => [h(e), h(i)])
17
+ Array.from(s.entries(), ([e, i]) => [h(e), h(i)])
18
18
  );
19
- if (r instanceof Set)
20
- return new Set(Array.from(r.values(), (e) => h(e)));
21
- if (Array.isArray(r))
22
- return r.map((e) => h(e));
23
- if (Object.getPrototypeOf(r) === Object.prototype || Object.getPrototypeOf(r) === null)
19
+ if (s instanceof Set)
20
+ return new Set(Array.from(s.values(), (e) => h(e)));
21
+ if (Array.isArray(s))
22
+ return s.map((e) => h(e));
23
+ if (Object.getPrototypeOf(s) === Object.prototype || Object.getPrototypeOf(s) === null)
24
24
  return Object.fromEntries(
25
- Object.entries(r).map(([e, i]) => [e, h(i)])
25
+ Object.entries(s).map(([e, i]) => [e, h(i)])
26
26
  );
27
- const t = Object.create(Object.getPrototypeOf(r));
28
- for (const [e, i] of Object.entries(r))
27
+ const t = Object.create(Object.getPrototypeOf(s));
28
+ for (const [e, i] of Object.entries(s))
29
29
  t[e] = h(i);
30
30
  return t;
31
31
  }
32
- function m(r, t = "all") {
32
+ function $(s, t = "all") {
33
33
  if (Array.isArray(t)) {
34
34
  const e = {};
35
35
  for (const i of t)
36
- i in r && (e[i] = h(y(r[i])));
36
+ i in s && (e[i] = h(y(s[i])));
37
37
  return e;
38
38
  }
39
39
  if (t !== "all")
40
40
  throw new Error(`Invalid keys parameter: ${t}`);
41
- return h(y(r));
41
+ return h(y(s));
42
42
  }
43
- class C {
43
+ class m {
44
44
  constructor() {
45
45
  c(this, "_stateSnapshots", /* @__PURE__ */ new Map());
46
46
  c(this, "_storeHasRollbackSnapshots", /* @__PURE__ */ new Set());
47
47
  c(this, "_storeRollbackSnapshotsParams", /* @__PURE__ */ new Map());
48
48
  }
49
49
  addRollbackAction(t) {
50
- typeof t.$rollbackAfterFailure != "function" && (t.$rollbackAfterFailure = async ({ action: e, stateKeys: i }, s = []) => {
50
+ typeof t.$rollbackAfterFailure != "function" && (t.$rollbackAfterFailure = async ({ action: e, stateKeys: i }, r = []) => {
51
51
  const n = t[e];
52
52
  if (typeof n != "function" || O(e))
53
53
  return;
54
54
  const o = !i || i.length === 0 ? "all" : i, a = this.saveStateSnapshot(t, e, o);
55
55
  try {
56
- await n.apply(t, s);
56
+ await n.apply(t, r);
57
57
  } catch (u) {
58
58
  throw this.patchStore(a, t), u;
59
59
  } finally {
@@ -67,7 +67,7 @@ class C {
67
67
  );
68
68
  if (!i)
69
69
  return;
70
- const s = i.length === 0 ? "all" : i, n = this.saveStateSnapshot(e, t, s);
70
+ const r = i.length === 0 ? "all" : i, n = this.saveStateSnapshot(e, t, r);
71
71
  return {
72
72
  after: () => {
73
73
  this.removeStateSnapshot(n);
@@ -79,10 +79,10 @@ class C {
79
79
  }
80
80
  initFromPluginContext({ options: t, store: e }) {
81
81
  const i = t?.storeOptions?.rollbackAfterFailure;
82
- i && !this._storeHasRollbackSnapshots.has(e.$id) && (Object.keys(i).forEach((s) => {
82
+ i && !this._storeHasRollbackSnapshots.has(e.$id) && (Object.keys(i).forEach((r) => {
83
83
  this._storeRollbackSnapshotsParams.set(
84
- b(s, e),
85
- i[s]
84
+ b(r, e),
85
+ i[r]
86
86
  );
87
87
  }), this._storeHasRollbackSnapshots.add(e.$id)), this.addRollbackAction(e);
88
88
  }
@@ -99,38 +99,38 @@ class C {
99
99
  if (i)
100
100
  try {
101
101
  e.$patch(i);
102
- } catch (s) {
103
- console.error(`Failed to patch store with snapshot ${String(t)}`, s);
102
+ } catch (r) {
103
+ console.error(`Failed to patch store with snapshot ${String(t)}`, r);
104
104
  }
105
105
  }
106
106
  removeStateSnapshot(t) {
107
107
  t && this._stateSnapshots.delete(t);
108
108
  }
109
109
  saveStateSnapshot(t, e, i) {
110
- const s = m(
110
+ const r = $(
111
111
  t.$state,
112
112
  i
113
113
  ), n = /* @__PURE__ */ Symbol(`${t.$id}:${e}`);
114
- return this._stateSnapshots.set(n, s), n;
114
+ return this._stateSnapshots.set(n, r), n;
115
115
  }
116
116
  storeHasRollbackSnapshots(t) {
117
117
  return this._storeHasRollbackSnapshots.has(t.$id);
118
118
  }
119
119
  }
120
- const $ = "PluginSubscription", w = {
120
+ const C = "PluginSubscription", w = {
121
121
  environment: "both",
122
122
  hydration: "immediate"
123
123
  };
124
- function R(r) {
124
+ function H(s) {
125
125
  if (typeof window < "u" && typeof window.requestAnimationFrame == "function") {
126
- window.requestAnimationFrame(() => globalThis.setTimeout(r, 0));
126
+ window.requestAnimationFrame(() => globalThis.setTimeout(s, 0));
127
127
  return;
128
128
  }
129
- globalThis.setTimeout(r, 0);
129
+ globalThis.setTimeout(s, 0);
130
130
  }
131
131
  class A {
132
132
  constructor(t, e) {
133
- c(this, "_className", $);
133
+ c(this, "_className", C);
134
134
  c(this, "_hydrationScheduler");
135
135
  c(this, "_onActionSubscriptions", /* @__PURE__ */ new Map());
136
136
  c(this, "_onActionStores", /* @__PURE__ */ new Set());
@@ -139,7 +139,7 @@ class A {
139
139
  c(this, "_options");
140
140
  c(this, "_resetStoreCallback", /* @__PURE__ */ new Map());
141
141
  c(this, "_disposedStores", /* @__PURE__ */ new WeakSet());
142
- c(this, "_storeRollbackSnapshotsHandler", new C());
142
+ c(this, "_storeRollbackSnapshotsHandler", new m());
143
143
  c(this, "_subscribers", []);
144
144
  c(this, "_subscribersDelivered", /* @__PURE__ */ new Set());
145
145
  c(this, "_subscribersScheduled", /* @__PURE__ */ new Set());
@@ -147,7 +147,7 @@ class A {
147
147
  c(this, "_subscriptionsDelivered", /* @__PURE__ */ new Set());
148
148
  c(this, "_subscriptionsScheduled", /* @__PURE__ */ new Set());
149
149
  c(this, "_tracer");
150
- this._hydrationScheduler = e?.hydrationScheduler ?? R, this._options = e, this._subscribers = t, this.initializeTracer();
150
+ this._hydrationScheduler = e?.hydrationScheduler ?? H, this._options = e, this._subscribers = t, this.initializeTracer();
151
151
  }
152
152
  set subscribers(t) {
153
153
  this._subscribers = t;
@@ -157,12 +157,12 @@ class A {
157
157
  return this._subscriptions;
158
158
  }
159
159
  addOnActionAfterCallback(t, e, i) {
160
- const s = b(t, e);
161
- this._onActionAfterSubscriptions[s] || (this._onActionAfterSubscriptions[s] = []), this._onActionAfterSubscriptions[s]?.push(i);
160
+ const r = b(t, e);
161
+ this._onActionAfterSubscriptions[r] || (this._onActionAfterSubscriptions[r] = []), this._onActionAfterSubscriptions[r]?.push(i);
162
162
  }
163
163
  addOnActionOnErrorCallback(t, e, i) {
164
- const s = b(t, e);
165
- this._onActionOnErrorSubscriptions[s] || (this._onActionOnErrorSubscriptions[s] = []), this._onActionOnErrorSubscriptions[s]?.push(i);
164
+ const r = b(t, e);
165
+ this._onActionOnErrorSubscriptions[r] || (this._onActionOnErrorSubscriptions[r] = []), this._onActionOnErrorSubscriptions[r]?.push(i);
166
166
  }
167
167
  addResetStoreCallback(t, e) {
168
168
  this._resetStoreCallback.has(t) || this._resetStoreCallback.set(t, /* @__PURE__ */ new Set()), this._resetStoreCallback.get(t).add(e);
@@ -199,12 +199,12 @@ class A {
199
199
  createRollbackSnapshot(t, e) {
200
200
  const {
201
201
  after: i,
202
- onError: s
202
+ onError: r
203
203
  } = this._storeRollbackSnapshotsHandler.createOnActionCallbacks(
204
204
  t,
205
205
  e
206
206
  ) ?? {};
207
- !i || !s || (this.addOnActionAfterCallback(t, e, i), this.addOnActionOnErrorCallback(t, e, s));
207
+ !i || !r || (this.addOnActionAfterCallback(t, e, i), this.addOnActionOnErrorCallback(t, e, r));
208
208
  }
209
209
  defineCurrentEnvironment() {
210
210
  return this._options?.runtimeEnvironment ?? (typeof window > "u" ? "server" : "client");
@@ -233,13 +233,10 @@ class A {
233
233
  if (this._onActionStores.has(t) || typeof t.$onAction != "function")
234
234
  return;
235
235
  const e = this._onActionSubscriptions.get(t), i = this._storeRollbackSnapshotsHandler.storeHasRollbackSnapshots(t);
236
- !e?.size && !i || (this._onActionStores.add(t), t.$onAction(({ after: s, args: n, name: o, onError: a }) => {
236
+ !e?.size && !i || (this._onActionStores.add(t), t.$onAction(({ after: r, args: n, name: o, onError: a }) => {
237
+ this.traceGroupStart(() => ({ args: n, name: o }), t.$id, "onAction");
237
238
  const u = b(o, t);
238
- this.trace("plugin:onAction", {
239
- args: n,
240
- name: o,
241
- store: t
242
- }, t.$id), this._storeRollbackSnapshotsHandler.storeHasRollbackSnapshots(t) && this.createRollbackSnapshot(o, t);
239
+ this._storeRollbackSnapshotsHandler.storeHasRollbackSnapshots(t) && this.createRollbackSnapshot(o, t);
243
240
  const l = this._onActionSubscriptions.get(t);
244
241
  l?.size && l.forEach((d) => d({
245
242
  after: this.createOnActionAfterCallbackCollector(o, t),
@@ -247,60 +244,62 @@ class A {
247
244
  name: o,
248
245
  onError: this.createOnActionOnErrorCallbackCollector(o, t)
249
246
  }));
250
- const p = this._onActionAfterSubscriptions[u], f = this._onActionOnErrorSubscriptions[u];
251
- this.clearOnActionCallbacksSubscriptions(u), p?.length && s((d) => {
247
+ const f = this._onActionAfterSubscriptions[u], p = this._onActionOnErrorSubscriptions[u];
248
+ this.clearOnActionCallbacksSubscriptions(u), f?.length && r((d) => {
249
+ f.forEach((S) => S(d)), this.traceGroupEnd({}, t.$id);
250
+ }), p?.length && a((d) => {
252
251
  p.forEach((S) => S(d));
253
- }), f?.length && a((d) => {
254
- f.forEach((S) => S(d));
255
- });
252
+ }), f?.length || this.traceGroupEnd({}, t.$id);
256
253
  }));
257
254
  }
258
255
  executeSubscriber(t, e) {
259
256
  const i = this.defineSubscriberKey(e, t.store);
260
- if (this._subscribersDelivered.has(i) || !e.invoke(t, this._options?.createTracer))
257
+ if (this._subscribersDelivered.has(i) || !e.invoke(t, this._options?.tracerHandler?.createTracer))
261
258
  return;
262
259
  this._subscribersDelivered.add(i);
263
- let s;
260
+ let r;
264
261
  try {
265
- s = e.hydrate?.(t);
262
+ r = e.hydrate?.(t);
266
263
  } catch (o) {
267
- this.traceError("subscriber:hydrate", o, () => ({ store: t.store, options: t.options }), t.store.$id);
264
+ this.traceError("subscriber:hydrate", o, t.store.$id);
268
265
  return;
269
266
  }
270
267
  const n = () => {
271
268
  try {
272
269
  const o = e.afterHydration?.(t);
273
- o && typeof o.then == "function" && o.catch((a) => this.traceError("subscriber:afterHydration", a, () => ({ store: t.store, options: t.options }), t.store.$id));
270
+ o && typeof o.then == "function" && o.catch(
271
+ (a) => this.traceError("subscriber:afterHydration", a, t.store.$id)
272
+ );
274
273
  } catch (o) {
275
- this.traceError("subscriber:afterHydration", o, () => ({ store: t.store, options: t.options }), t.store.$id);
274
+ this.traceError("subscriber:afterHydration", o, t.store.$id);
276
275
  }
277
276
  };
278
- s && typeof s.then == "function" ? s.then(() => n()).catch((o) => this.traceError("subscriber:hydrate", o, () => ({ store: t.store, options: t.options }), t.store.$id)) : n(), e.subscriptions && this.subscriptionDelivery(t, e.subscriptions), e.storeMutationSubscription && this.storeMutationSubscription(e.storeMutationSubscription), this.storeOnActionSubscription(e), e.resetStoreCallback && this.addResetStoreCallback(t.store, e.resetStoreCallback);
277
+ r && typeof r.then == "function" ? r.then(() => n()).catch((o) => this.traceError("subscriber:hydrate", o, t.store.$id)) : n(), e.subscriptions && this.subscriptionDelivery(t, e.subscriptions), e.storeMutationSubscription && this.storeMutationSubscription(e.storeMutationSubscription), this.storeOnActionSubscription(e), e.resetStoreCallback && this.addResetStoreCallback(t.store, e.resetStoreCallback);
279
278
  }
280
279
  executeSubscriberSafely(t, e) {
281
280
  try {
282
281
  this.executeSubscriber(t, e);
283
282
  } catch (i) {
284
- this.traceError("subscriber:execute", i, () => ({ store: t.store, options: t.options }), t.store.$id);
283
+ this.traceError("subscriber:execute", i, t.store.$id);
285
284
  }
286
285
  }
287
286
  initializeTracer() {
288
- this._options?.createTracer && (this._tracer = this._options.createTracer(g));
287
+ console.log("Initializing tracer", this._options?.tracerHandler, this._options), this._options?.tracerHandler && (this._tracer = this._options.tracerHandler.createTracer(g));
289
288
  }
290
289
  plugin({ store: t, options: e }) {
291
290
  if (this._subscribers.length) {
292
- this.trace("plugin", {
291
+ this.traceGroupStart(() => ({
293
292
  subscribers: this._subscribers,
294
293
  store: t,
295
294
  options: e
296
- }, t.$id);
295
+ }), t.$id);
297
296
  try {
298
297
  this._subscribers.forEach(
299
298
  (i) => {
300
- const s = this.defineSubscriberKey(i, t), n = this.definePluginExecution(i);
301
- if (!(this._subscribersDelivered.has(s) || this._subscribersScheduled.has(s)) && this.shouldInvokePlugin(n)) {
299
+ const r = this.defineSubscriberKey(i, t), n = this.definePluginExecution(i);
300
+ if (!(this._subscribersDelivered.has(r) || this._subscribersScheduled.has(r)) && this.shouldInvokePlugin(n)) {
302
301
  if (this.shouldScheduleAfterHydration(n)) {
303
- this.queueSubscriberExecution({ store: t, options: e }, i, s);
302
+ this.queueSubscriberExecution({ store: t, options: e }, i, r);
304
303
  return;
305
304
  }
306
305
  this.executeSubscriber({ store: t, options: e }, i);
@@ -308,13 +307,14 @@ class A {
308
307
  }
309
308
  ), this.rewriteResetStore({ store: t }, t.$state), this._storeRollbackSnapshotsHandler.initFromPluginContext({ store: t, options: e }), this.executeStoreOnActionSubscription(t), this.registerStoreCleanup(t);
310
309
  } catch (i) {
311
- this.traceError("plugin:invoke", i, () => ({ store: t, options: e }), t.$id);
310
+ this.traceError("plugin:invoke", i, t.$id);
312
311
  }
312
+ this.traceGroupEnd(() => ({}), t.$id);
313
313
  }
314
314
  }
315
315
  queueSubscriberExecution(t, e, i) {
316
- const s = this.defineHydrationScheduler(e);
317
- this._subscribersScheduled.add(i), s(() => {
316
+ const r = this.defineHydrationScheduler(e);
317
+ this._subscribersScheduled.add(i), r(() => {
318
318
  this._disposedStores.has(t.store) || (this._subscribersScheduled.delete(i), this.executeSubscriberSafely(t, e));
319
319
  });
320
320
  }
@@ -327,10 +327,7 @@ class A {
327
327
  rewriteResetStore({ store: t }, e) {
328
328
  const i = h(e);
329
329
  t.$reset = () => {
330
- this.trace("store:reset", {
331
- initState: i,
332
- store: t
333
- }, t.$id), this.executeResetStoreCallbacks(t), t.$patch(h(i));
330
+ this.trace("store:reset", t.$id, () => ({ initialState: i })), this.executeResetStoreCallbacks(t), t.$patch(h(i));
334
331
  };
335
332
  }
336
333
  shouldInvokePlugin(t) {
@@ -346,36 +343,35 @@ class A {
346
343
  }
347
344
  storeMutationSubscription(t) {
348
345
  const { store: e, callback: i } = t();
349
- e.$subscribe((s) => {
350
- this.trace("store:mutation", { mutation: s, store: e }, e.$id), i(s);
346
+ e.$subscribe((r) => {
347
+ this.traceGroupStart(() => ({ mutation: r }), e.$id, "store:mutation"), i(r), this.traceGroupEnd({}, e.$id);
351
348
  });
352
349
  }
353
350
  subscriptionDelivery(t, e) {
354
- Object.entries(e).forEach(([i, s]) => {
355
- const n = this.defineSubscriptionKey(i, t.store), o = this.definePluginExecution(s.subscription);
351
+ Object.entries(e).forEach(([i, r]) => {
352
+ const n = this.defineSubscriptionKey(i, t.store), o = this.definePluginExecution(r.subscription);
356
353
  if (!(this._subscriptionsDelivered.has(n) || this._subscriptionsScheduled.has(n)) && this.shouldInvokePlugin(o)) {
357
354
  if (this.shouldScheduleAfterHydration(o)) {
358
- const a = this.defineHydrationScheduler(s.subscription);
355
+ const a = this.defineHydrationScheduler(r.subscription);
359
356
  this._subscriptionsScheduled.add(n), a(() => {
360
- this._disposedStores.has(t.store) || (this._subscriptionsScheduled.delete(n), this.subscriptionDeliverySafely(t, i, s));
357
+ this._disposedStores.has(t.store) || (this._subscriptionsScheduled.delete(n), this.subscriptionDeliverySafely(t, i, r));
361
358
  });
362
359
  return;
363
360
  }
364
- this.subscriptionDeliverySafely(t, i, s);
361
+ this.subscriptionDeliverySafely(t, i, r);
365
362
  }
366
363
  });
367
364
  }
368
- subscriptionDeliverySafely({ store: t, options: e }, i, s) {
365
+ subscriptionDeliverySafely({ store: t, options: e }, i, r) {
369
366
  try {
370
367
  if (this._subscriptionsDelivered.has(this.defineSubscriptionKey(i, t)))
371
368
  return;
372
- const { subscription: n, subscriptionOptions: o, stores: a } = s;
373
- this.trace("subscription:delivery", {
369
+ const { subscription: n, subscriptionOptions: o, stores: a } = r;
370
+ this.trace("Subscription:delivery", t.$id, () => ({
374
371
  pluginName: i,
375
372
  subscription: n,
376
- options: o,
377
- stores: a
378
- }, t.$id);
373
+ subscriptionOptions: o
374
+ }));
379
375
  const u = {
380
376
  storeOptions: { ...e?.storeOptions ?? {}, ...o }
381
377
  };
@@ -392,22 +388,28 @@ class A {
392
388
  })
393
389
  );
394
390
  } catch (n) {
395
- this.traceError("subscription:delivery", n, () => ({ store: t, options: e }), t.$id);
391
+ this.traceError("subscription:delivery", n, t.$id);
396
392
  }
397
393
  }
398
394
  trace(t, e, i) {
399
- this._tracer && (t = this._className + ":" + t, this._tracer.debug(t, t.toLowerCase(), e, i));
395
+ this._tracer && (t = this._className + ":" + t, this._tracer.debug(t, t.toLowerCase(), i, e));
396
+ }
397
+ traceError(t, e, i, r) {
398
+ this._tracer ? (t = this._className + ":" + t, this._tracer.error(t, t.toLowerCase(), e, r, i)) : console.error(e);
399
+ }
400
+ traceGroupEnd(t, e) {
401
+ this._options?.tracerHandler && this._options.tracerHandler.closeGroup({ ...typeof t == "function" ? t() : t, scope: e });
400
402
  }
401
- traceError(t, e, i, s) {
402
- this._tracer ? (t = this._className + ":" + t, this._tracer.error(t, t.toLowerCase(), e, i, s)) : console.error(e);
403
+ traceGroupStart(t, e, i) {
404
+ this._options?.tracerHandler && (this._options.tracerHandler.startGroup({ ...typeof t == "function" ? t() : t, scope: e }), this.trace(i ?? "context", e, t));
403
405
  }
404
406
  }
405
- function D(r, t) {
406
- const e = new A(r, t);
407
+ function x(s, t) {
408
+ const e = new A(s, t);
407
409
  return e.plugin.bind(e);
408
410
  }
409
- function j(r, t) {
410
- const e = new A(r, {
411
+ function D(s, t) {
412
+ const e = new A(s, {
411
413
  execution: t?.execution,
412
414
  hydrationScheduler: t?.hydrationScheduler,
413
415
  runtimeEnvironment: t?.runtimeEnvironment,
@@ -417,16 +419,16 @@ function j(r, t) {
417
419
  }
418
420
  export {
419
421
  g as PLUGIN_NAME,
420
- M as PluginSubscriber,
422
+ T as PluginSubscriber,
421
423
  A as PluginSubscription,
422
- x as Store,
423
- j as createHydrationPlugin,
424
- D as createPlugin,
425
- F as defineAStore,
426
- W as defineAStoreCtx,
427
- I as getDefineAStoreSetupContext,
428
- q as getEnhancedStore,
424
+ K as Store,
425
+ D as createHydrationPlugin,
426
+ x as createPlugin,
427
+ M as defineAStore,
428
+ F as defineAStoreCtx,
429
+ W as getDefineAStoreSetupContext,
430
+ I as getEnhancedStore,
429
431
  z as getExtendingStore,
430
- L as setEnhancedStore
432
+ q as setEnhancedStore
431
433
  };
432
434
  //# sourceMappingURL=pinia-plugin-subscription.js.map