From 142be3c9a097a19a205236981d7593b5c429932b Mon Sep 17 00:00:00 2001 From: s1gr1d Date: Wed, 5 Feb 2025 15:56:07 +0100 Subject: [PATCH 1/2] feat(pinia): Include state of all stores in breadcrumb --- .../nuxt-4/sentry.client.config.ts | 2 +- .../nuxt-4/tests/pinia.test.ts | 6 +- .../test-applications/vue-3/src/main.ts | 2 +- .../vue-3/src/stores/cart.ts | 3 +- .../vue-3/src/stores/counter.ts | 10 +++ .../vue-3/src/views/CartView.vue | 61 +++++++-------- .../vue-3/tests/pinia.test.ts | 75 ++++++++++++++++++- docs/migration/v8-to-v9.md | 2 + packages/vue/src/pinia.ts | 34 ++++++--- 9 files changed, 142 insertions(+), 53 deletions(-) create mode 100644 dev-packages/e2e-tests/test-applications/vue-3/src/stores/counter.ts diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4/sentry.client.config.ts b/dev-packages/e2e-tests/test-applications/nuxt-4/sentry.client.config.ts index e8b628595975..3cbea64827cb 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4/sentry.client.config.ts +++ b/dev-packages/e2e-tests/test-applications/nuxt-4/sentry.client.config.ts @@ -8,7 +8,7 @@ Sentry.init({ tracesSampleRate: 1.0, integrations: [ Sentry.piniaIntegration(usePinia(), { - actionTransformer: action => `Transformed: ${action}`, + actionTransformer: action => `${action}.transformed`, stateTransformer: state => ({ transformed: true, ...state, diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4/tests/pinia.test.ts b/dev-packages/e2e-tests/test-applications/nuxt-4/tests/pinia.test.ts index 44b057a29f15..93130e2b115f 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4/tests/pinia.test.ts +++ b/dev-packages/e2e-tests/test-applications/nuxt-4/tests/pinia.test.ts @@ -18,10 +18,10 @@ test('sends pinia action breadcrumbs and state context', async ({ page }) => { expect(error).toBeTruthy(); expect(error.breadcrumbs?.length).toBeGreaterThan(0); - const actionBreadcrumb = error.breadcrumbs?.find(breadcrumb => breadcrumb.category === 'action'); + const actionBreadcrumb = error.breadcrumbs?.find(breadcrumb => breadcrumb.category === 'action.pinia'); expect(actionBreadcrumb).toBeDefined(); - expect(actionBreadcrumb?.message).toBe('Transformed: addItem'); + expect(actionBreadcrumb?.message).toBe('Store: cart | Action: addItem.transformed'); expect(actionBreadcrumb?.level).toBe('info'); const stateContext = error.contexts?.state?.state; @@ -30,6 +30,6 @@ test('sends pinia action breadcrumbs and state context', async ({ page }) => { expect(stateContext?.type).toBe('pinia'); expect(stateContext?.value).toEqual({ transformed: true, - rawItems: ['item'], + cart: { rawItems: ['item'] }, }); }); diff --git a/dev-packages/e2e-tests/test-applications/vue-3/src/main.ts b/dev-packages/e2e-tests/test-applications/vue-3/src/main.ts index 4a08ed4ddbcc..340820d333ec 100644 --- a/dev-packages/e2e-tests/test-applications/vue-3/src/main.ts +++ b/dev-packages/e2e-tests/test-applications/vue-3/src/main.ts @@ -31,7 +31,7 @@ Sentry.init({ pinia.use( Sentry.createSentryPiniaPlugin({ - actionTransformer: action => `Transformed: ${action}`, + actionTransformer: action => `${action}.transformed`, stateTransformer: state => ({ transformed: true, ...state, diff --git a/dev-packages/e2e-tests/test-applications/vue-3/src/stores/cart.ts b/dev-packages/e2e-tests/test-applications/vue-3/src/stores/cart.ts index 7786c7f27cd9..2f406b19b5a6 100644 --- a/dev-packages/e2e-tests/test-applications/vue-3/src/stores/cart.ts +++ b/dev-packages/e2e-tests/test-applications/vue-3/src/stores/cart.ts @@ -1,7 +1,6 @@ import { acceptHMRUpdate, defineStore } from 'pinia'; -export const useCartStore = defineStore({ - id: 'cart', +export const useCartStore = defineStore('cart', { state: () => ({ rawItems: [] as string[], }), diff --git a/dev-packages/e2e-tests/test-applications/vue-3/src/stores/counter.ts b/dev-packages/e2e-tests/test-applications/vue-3/src/stores/counter.ts new file mode 100644 index 000000000000..ae315c62ba8a --- /dev/null +++ b/dev-packages/e2e-tests/test-applications/vue-3/src/stores/counter.ts @@ -0,0 +1,10 @@ +import { defineStore } from 'pinia'; + +export const useCounterStore = defineStore('counter', { + state: () => ({ name: 'Counter Store', count: 0 }), + actions: { + increment() { + this.count++; + }, + }, +}); diff --git a/dev-packages/e2e-tests/test-applications/vue-3/src/views/CartView.vue b/dev-packages/e2e-tests/test-applications/vue-3/src/views/CartView.vue index ba7037e68bfe..06510a276192 100644 --- a/dev-packages/e2e-tests/test-applications/vue-3/src/views/CartView.vue +++ b/dev-packages/e2e-tests/test-applications/vue-3/src/views/CartView.vue @@ -29,50 +29,45 @@ data-testid="clear" >Clear the cart + +
+ +
+

Counter: {{ $counter.count }}

+ +
-