{"version":3,"file":"pinia.js","sources":["../../src/pinia.ts"],"sourcesContent":["import {\n addBreadcrumb,\n getClient,\n getCurrentScope,\n getGlobalScope,\n setNormalizationDepthOverrideHint,\n} from '@sentry/core';\nimport type { Ref } from 'vue';\n\n// Inline Pinia types\ntype StateTree = Record;\ntype PiniaPlugin = (context: {\n store: {\n $id: string;\n $state: unknown;\n $onAction: (callback: (context: { name: string; after: (callback: () => void) => void }) => void) => void;\n };\n pinia: { state: Ref> };\n}) => void;\n\ntype SentryPiniaPluginOptions = {\n attachPiniaState: boolean;\n addBreadcrumbs: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n actionTransformer: (action: string) => any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n stateTransformer: (state: Record) => any;\n};\n\nconst DEFAULT_PINIA_PLUGIN_OPTIONS: SentryPiniaPluginOptions = {\n attachPiniaState: true,\n addBreadcrumbs: true,\n actionTransformer: action => action,\n stateTransformer: state => state,\n};\n\nconst getAllStoreStates = (\n pinia: { state: Ref> },\n stateTransformer?: SentryPiniaPluginOptions['stateTransformer'],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any => {\n const states: Record = {};\n\n try {\n Object.keys(pinia.state.value).forEach(storeId => {\n states[storeId] = pinia.state.value[storeId];\n });\n\n return stateTransformer ? stateTransformer(states) : states;\n } catch {\n return states;\n }\n};\n\nexport const createSentryPiniaPlugin: (\n userOptions?: Partial,\n) => PiniaPlugin = userOptions => {\n const options: SentryPiniaPluginOptions = { ...DEFAULT_PINIA_PLUGIN_OPTIONS, ...userOptions };\n\n const plugin: PiniaPlugin = ({ store, pinia }) => {\n options.attachPiniaState !== false &&\n getGlobalScope().addEventProcessor((event, hint) => {\n try {\n // Get current timestamp in hh:mm:ss\n const timestamp = new Date().toTimeString().split(' ')[0];\n const filename = `pinia_state_all_stores_${timestamp}.json`;\n\n // event processor runs for each pinia store - attachment should only be added once per event\n const hasExistingPiniaStateAttachment = hint.attachments?.some(attachment =>\n attachment.filename.startsWith('pinia_state_all_stores_'),\n );\n\n if (!hasExistingPiniaStateAttachment) {\n hint.attachments = [\n ...(hint.attachments || []),\n {\n filename,\n data: JSON.stringify(getAllStoreStates(pinia, options.stateTransformer)),\n },\n ];\n }\n } catch {\n // empty\n }\n\n return event;\n });\n\n store.$onAction(context => {\n context.after(() => {\n const transformedActionName = options.actionTransformer(context.name);\n\n if (\n typeof transformedActionName !== 'undefined' &&\n transformedActionName !== null &&\n options.addBreadcrumbs !== false\n ) {\n addBreadcrumb({\n category: 'pinia.action',\n message: `Store: ${store.$id} | Action: ${transformedActionName}`,\n level: 'info',\n });\n }\n\n /* Set latest state of all stores to scope */\n const allStates = getAllStoreStates(pinia, options.stateTransformer);\n const scope = getCurrentScope();\n const currentState = scope.getScopeData().contexts.state;\n\n if (typeof allStates !== 'undefined' && allStates !== null) {\n const client = getClient();\n const options = client?.getOptions();\n const normalizationDepth = options?.normalizeDepth || 3; // default state normalization depth to 3\n const piniaStateContext = { type: 'pinia', value: allStates };\n\n const newState = {\n ...(currentState || {}),\n state: piniaStateContext,\n };\n\n setNormalizationDepthOverrideHint(\n newState,\n 3 + // 3 layers for `state.value.transformedState\n normalizationDepth, // rest for the actual state\n );\n\n scope.setContext('state', newState);\n } else {\n scope.setContext('state', {\n ...(currentState || {}),\n state: { type: 'pinia', value: 'undefined' },\n });\n }\n });\n });\n };\n\n return plugin;\n};\n"],"names":["getGlobalScope","addBreadcrumb","getCurrentScope","getClient","options","setNormalizationDepthOverrideHint"],"mappings":"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"}