From 9342179ede8a7e22a4de145cf8127c06f5683e19 Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Wed, 24 Jan 2024 11:19:23 +0100 Subject: [PATCH 01/10] ref(svelte): Prepare `package.json` entry points for Svelte 5 support --- packages/svelte/package.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/svelte/package.json b/packages/svelte/package.json index fcd914710db7..aee1233db8de 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -15,6 +15,20 @@ "types", "types-ts3.8" ], + "type": "module", + "exports": { + ".": { + "import": "./build/esm/index.js", + "svelte": "./build/esm/index.js", + "require": "./build/cjs/index.js", + "types": "./build/types/index.d.ts", + "typesVersions": { + "<4.9": { + "types": "./build/types-ts3.8/index.d.ts" + } + } + } + }, "main": "build/cjs/index.js", "module": "build/esm/index.js", "types": "build/types/index.d.ts", From cf36352e9bfa2da6ea62c97a03a4752621531cd8 Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Wed, 24 Jan 2024 11:24:59 +0100 Subject: [PATCH 02/10] s/svelte/default --- packages/svelte/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/svelte/package.json b/packages/svelte/package.json index aee1233db8de..0052dfa33b22 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -18,8 +18,8 @@ "type": "module", "exports": { ".": { + "default": "./build/esm/index.js", "import": "./build/esm/index.js", - "svelte": "./build/esm/index.js", "require": "./build/cjs/index.js", "types": "./build/types/index.d.ts", "typesVersions": { From 772c23bbbd682d0bb1e77c447165361cb8f2699d Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Wed, 24 Jan 2024 11:26:23 +0100 Subject: [PATCH 03/10] fix(svelte): Make component tracking compatible with Svelte 5 --- packages/svelte/src/performance.ts | 4 ++-- packages/svelte/src/preprocessors.ts | 2 ++ packages/svelte/src/types.ts | 5 +++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/svelte/src/performance.ts b/packages/svelte/src/performance.ts index d2e23b53daba..f92034606ffa 100644 --- a/packages/svelte/src/performance.ts +++ b/packages/svelte/src/performance.ts @@ -1,7 +1,6 @@ import { getCurrentScope } from '@sentry/browser'; import type { Span, Transaction } from '@sentry/types'; import { afterUpdate, beforeUpdate, onMount } from 'svelte'; -import { current_component } from 'svelte/internal'; import { getRootSpan } from '@sentry/core'; import { DEFAULT_COMPONENT_NAME, UI_SVELTE_INIT, UI_SVELTE_UPDATE } from './constants'; @@ -35,7 +34,7 @@ export function trackComponent(options?: TrackComponentOptions): void { // current_component.ctor.name is likely to give us the component's name automatically // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - const componentName = `<${customComponentName || current_component.constructor.name || DEFAULT_COMPONENT_NAME}>`; + const componentName = `<${customComponentName || DEFAULT_COMPONENT_NAME}>`; let initSpan: Span | undefined = undefined; if (mergedOptions.trackInit) { @@ -56,6 +55,7 @@ function recordInitSpan(transaction: Transaction, componentName: string): Span { }); onMount(() => { + console.log('END SPAN', componentName); initSpan.end(); }); diff --git a/packages/svelte/src/preprocessors.ts b/packages/svelte/src/preprocessors.ts index 57722b1dad15..6ff1ceeed274 100644 --- a/packages/svelte/src/preprocessors.ts +++ b/packages/svelte/src/preprocessors.ts @@ -21,6 +21,8 @@ export const FIRST_PASS_COMPONENT_TRACKING_PREPROC_ID = 'FIRST_PASS_COMPONENT_TR export function componentTrackingPreprocessor(options?: ComponentTrackingInitOptions): PreprocessorGroup { const mergedOptions = { ...defaultComponentTrackingOptions, ...options }; + console.log('mergedOptions', mergedOptions); + const visitedFiles = new Set(); const visitedFilesMarkup = new Set(); diff --git a/packages/svelte/src/types.ts b/packages/svelte/src/types.ts index 4f4516606483..ed7fcfaa4928 100644 --- a/packages/svelte/src/types.ts +++ b/packages/svelte/src/types.ts @@ -60,5 +60,10 @@ export type ComponentTrackingInitOptions = { } & SpanOptions; export type TrackComponentOptions = { + /** + * The name of the component to be used in the recorded spans. + * + * @default to if not specified + */ componentName?: string; } & SpanOptions; From 9fb1a86b702c12ebc5a874d5cc7616a2eed9a809 Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Wed, 24 Jan 2024 11:42:39 +0100 Subject: [PATCH 04/10] rm console logs --- packages/svelte/src/performance.ts | 1 - packages/svelte/src/preprocessors.ts | 2 -- 2 files changed, 3 deletions(-) diff --git a/packages/svelte/src/performance.ts b/packages/svelte/src/performance.ts index f92034606ffa..d12e585a8093 100644 --- a/packages/svelte/src/performance.ts +++ b/packages/svelte/src/performance.ts @@ -55,7 +55,6 @@ function recordInitSpan(transaction: Transaction, componentName: string): Span { }); onMount(() => { - console.log('END SPAN', componentName); initSpan.end(); }); diff --git a/packages/svelte/src/preprocessors.ts b/packages/svelte/src/preprocessors.ts index 6ff1ceeed274..57722b1dad15 100644 --- a/packages/svelte/src/preprocessors.ts +++ b/packages/svelte/src/preprocessors.ts @@ -21,8 +21,6 @@ export const FIRST_PASS_COMPONENT_TRACKING_PREPROC_ID = 'FIRST_PASS_COMPONENT_TR export function componentTrackingPreprocessor(options?: ComponentTrackingInitOptions): PreprocessorGroup { const mergedOptions = { ...defaultComponentTrackingOptions, ...options }; - console.log('mergedOptions', mergedOptions); - const visitedFiles = new Set(); const visitedFilesMarkup = new Set(); From 0206a7cc2ac2bad24ced6e8ecdd4541b1967612c Mon Sep 17 00:00:00 2001 From: Jonathon Reese Perry Date: Thu, 25 Jan 2024 19:26:36 +0000 Subject: [PATCH 05/10] update @sentry/svelte to us vitest --- packages/svelte/jest.config.js | 10 ---------- packages/svelte/package.json | 8 ++++---- packages/svelte/test/performance.test.ts | 19 ++++++++++--------- packages/svelte/test/sdk.test.ts | 9 +++++---- packages/svelte/vite.config.ts | 16 ++++++++++++++++ 5 files changed, 35 insertions(+), 27 deletions(-) delete mode 100644 packages/svelte/jest.config.js create mode 100644 packages/svelte/vite.config.ts diff --git a/packages/svelte/jest.config.js b/packages/svelte/jest.config.js deleted file mode 100644 index 63637952d9d6..000000000000 --- a/packages/svelte/jest.config.js +++ /dev/null @@ -1,10 +0,0 @@ -const baseConfig = require('../../jest/jest.config.js'); - -module.exports = { - ...baseConfig, - testEnvironment: 'jsdom', - transform: { - '^.+\\.svelte$': 'svelte-jester', - ...baseConfig.transform, - }, -}; diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 0052dfa33b22..79277931612a 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -54,8 +54,8 @@ }, "devDependencies": { "@testing-library/svelte": "^3.2.1", - "svelte": "3.49.0", - "svelte-jester": "^2.3.2" + "@sveltejs/vite-plugin-svelte": "latest", + "svelte": "3.49.0" }, "scripts": { "build": "run-p build:transpile build:types", @@ -73,8 +73,8 @@ "clean": "rimraf build coverage sentry-svelte-*.tgz", "fix": "eslint . --format stylish --fix", "lint": "eslint . --format stylish", - "test": "jest", - "test:watch": "jest --watch", + "test": "vitest", + "test:watch": "vitest --watch", "yalc:publish": "ts-node ../../scripts/prepack.ts && yalc publish build --push --sig" }, "volta": { diff --git a/packages/svelte/test/performance.test.ts b/packages/svelte/test/performance.test.ts index 9588da6e7d16..c5e1262e1fa4 100644 --- a/packages/svelte/test/performance.test.ts +++ b/packages/svelte/test/performance.test.ts @@ -3,25 +3,26 @@ import { act, render } from '@testing-library/svelte'; // linter doesn't like Svelte component imports import DummyComponent from './components/Dummy.svelte'; +import { vi } from 'vitest'; let returnUndefinedTransaction = false; const testTransaction: { spans: any[]; startChild: jest.Mock; end: jest.Mock; isRecording: () => boolean } = { spans: [], - startChild: jest.fn(), - end: jest.fn(), + startChild: vi.fn(), + end: vi.fn(), isRecording: () => true, }; -const testUpdateSpan = { end: jest.fn() }; +const testUpdateSpan = { end: vi.fn() }; const testInitSpan: any = { transaction: testTransaction, - end: jest.fn(), - startChild: jest.fn(), + end: vi.fn(), + startChild: vi.fn(), isRecording: () => true, }; -jest.mock('@sentry/core', () => { - const original = jest.requireActual('@sentry/core'); +vi.mock('@sentry/core', () => { + const original = vi.importActual('@sentry/core'); return { ...original, getCurrentScope(): Scope { @@ -36,7 +37,7 @@ jest.mock('@sentry/core', () => { describe('Sentry.trackComponent()', () => { beforeEach(() => { - jest.resetAllMocks(); + vi.resetAllMocks(); testTransaction.spans = []; testTransaction.startChild.mockImplementation(spanCtx => { @@ -49,7 +50,7 @@ describe('Sentry.trackComponent()', () => { return testUpdateSpan; }); - testInitSpan.end = jest.fn(); + testInitSpan.end = vi.fn(); testInitSpan.isRecording = () => true; returnUndefinedTransaction = false; }); diff --git a/packages/svelte/test/sdk.test.ts b/packages/svelte/test/sdk.test.ts index 6144e065c643..8db2c6a41b92 100644 --- a/packages/svelte/test/sdk.test.ts +++ b/packages/svelte/test/sdk.test.ts @@ -3,11 +3,12 @@ import * as SentryBrowser from '@sentry/browser'; import type { EventProcessor } from '@sentry/types'; import { detectAndReportSvelteKit, init as svelteInit, isSvelteKitApp } from '../src/sdk'; +import { vi } from 'vitest'; let passedEventProcessor: EventProcessor | undefined; -const browserInit = jest.spyOn(SentryBrowser, 'init'); -const addEventProcessor = jest +const browserInit = vi.spyOn(SentryBrowser, 'init'); +const addEventProcessor = vi .spyOn(SentryBrowser, 'addEventProcessor') .mockImplementation((eventProcessor: EventProcessor) => { passedEventProcessor = eventProcessor; @@ -16,7 +17,7 @@ const addEventProcessor = jest describe('Initialize Svelte SDk', () => { beforeEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); it('has the correct metadata', () => { @@ -74,7 +75,7 @@ describe('Initialize Svelte SDk', () => { describe('detectAndReportSvelteKit()', () => { const originalHtmlBody = document.body.innerHTML; beforeEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); document.body.innerHTML = originalHtmlBody; passedEventProcessor = undefined; }); diff --git a/packages/svelte/vite.config.ts b/packages/svelte/vite.config.ts new file mode 100644 index 000000000000..0ad1240b78b6 --- /dev/null +++ b/packages/svelte/vite.config.ts @@ -0,0 +1,16 @@ +import type { UserConfig } from 'vitest'; +import { svelte } from '@sveltejs/vite-plugin-svelte'; +import baseConfig from '../../vite/vite.config'; + +export default { + ...baseConfig, + plugins: [ + svelte({ hot: !process.env.VITEST }), + ], + test: { + // test exists, no idea why TS doesn't recognize it + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ...(baseConfig as UserConfig & { test: any }).test, + environment: 'jsdom', + }, +}; From c9a7e799286022a2dc23c74ec6fdcad2eb564008 Mon Sep 17 00:00:00 2001 From: Jonathon Reese Perry Date: Thu, 25 Jan 2024 20:39:28 +0000 Subject: [PATCH 06/10] pin vite-plugin-svelte --- packages/svelte/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 79277931612a..9ddc1568d8a6 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -54,7 +54,7 @@ }, "devDependencies": { "@testing-library/svelte": "^3.2.1", - "@sveltejs/vite-plugin-svelte": "latest", + "@sveltejs/vite-plugin-svelte": "3.0.1", "svelte": "3.49.0" }, "scripts": { From 31bab6efa531e0132539e6a5f707d4ed2c38c581 Mon Sep 17 00:00:00 2001 From: Jonathon Reese Perry Date: Fri, 26 Jan 2024 17:38:35 +0000 Subject: [PATCH 07/10] updates to pass PR ci --- packages/svelte/{.eslintrc.js => .eslintrc.cjs} | 8 ++++++++ packages/svelte/package.json | 4 ++-- packages/svelte/test/performance.test.ts | 6 +++--- packages/svelte/test/sdk.test.ts | 2 +- packages/svelte/tsconfig.test.json | 4 ++-- packages/svelte/vite.config.ts | 6 ++---- 6 files changed, 18 insertions(+), 12 deletions(-) rename packages/svelte/{.eslintrc.js => .eslintrc.cjs} (54%) diff --git a/packages/svelte/.eslintrc.js b/packages/svelte/.eslintrc.cjs similarity index 54% rename from packages/svelte/.eslintrc.js rename to packages/svelte/.eslintrc.cjs index 0714feabf8d4..b6d4608e8e7b 100644 --- a/packages/svelte/.eslintrc.js +++ b/packages/svelte/.eslintrc.cjs @@ -2,6 +2,14 @@ module.exports = { env: { browser: true, }, + overrides: [ + { + files: ['vite.config.ts'], + parserOptions: { + project: ['tsconfig.test.json'], + }, + }, + ], extends: ['../../.eslintrc.js'], rules: { '@sentry-internal/sdk/no-unsupported-es6-methods': 'off', diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 9ddc1568d8a6..cced88531244 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -53,9 +53,9 @@ "svelte": "3.x || 4.x" }, "devDependencies": { - "@testing-library/svelte": "^3.2.1", + "svelte": "3.49.0", "@sveltejs/vite-plugin-svelte": "3.0.1", - "svelte": "3.49.0" + "@testing-library/svelte": "^3.2.1" }, "scripts": { "build": "run-p build:transpile build:types", diff --git a/packages/svelte/test/performance.test.ts b/packages/svelte/test/performance.test.ts index c5e1262e1fa4..3ef8388c80ad 100644 --- a/packages/svelte/test/performance.test.ts +++ b/packages/svelte/test/performance.test.ts @@ -1,9 +1,9 @@ import type { Scope } from '@sentry/core'; import { act, render } from '@testing-library/svelte'; +import { vi } from 'vitest'; // linter doesn't like Svelte component imports import DummyComponent from './components/Dummy.svelte'; -import { vi } from 'vitest'; let returnUndefinedTransaction = false; @@ -21,8 +21,8 @@ const testInitSpan: any = { isRecording: () => true, }; -vi.mock('@sentry/core', () => { - const original = vi.importActual('@sentry/core'); +vi.mock('@sentry/core', async () => { + const original = await vi.importActual('@sentry/core'); return { ...original, getCurrentScope(): Scope { diff --git a/packages/svelte/test/sdk.test.ts b/packages/svelte/test/sdk.test.ts index 8db2c6a41b92..9ccf5d7a4638 100644 --- a/packages/svelte/test/sdk.test.ts +++ b/packages/svelte/test/sdk.test.ts @@ -2,8 +2,8 @@ import { SDK_VERSION } from '@sentry/browser'; import * as SentryBrowser from '@sentry/browser'; import type { EventProcessor } from '@sentry/types'; -import { detectAndReportSvelteKit, init as svelteInit, isSvelteKitApp } from '../src/sdk'; import { vi } from 'vitest'; +import { detectAndReportSvelteKit, init as svelteInit, isSvelteKitApp } from '../src/sdk'; let passedEventProcessor: EventProcessor | undefined; diff --git a/packages/svelte/tsconfig.test.json b/packages/svelte/tsconfig.test.json index af7e36ec0eda..fc9e549d35ce 100644 --- a/packages/svelte/tsconfig.test.json +++ b/packages/svelte/tsconfig.test.json @@ -1,11 +1,11 @@ { "extends": "./tsconfig.json", - "include": ["test/**/*"], + "include": ["test/**/*", "vite.config.ts"], "compilerOptions": { // should include all types from `./tsconfig.json` plus types for all test frameworks used - "types": ["jest"] + "types": ["vitest/globals"] // other package-specific, test-specific options } diff --git a/packages/svelte/vite.config.ts b/packages/svelte/vite.config.ts index 0ad1240b78b6..745292c90cc8 100644 --- a/packages/svelte/vite.config.ts +++ b/packages/svelte/vite.config.ts @@ -1,12 +1,10 @@ -import type { UserConfig } from 'vitest'; import { svelte } from '@sveltejs/vite-plugin-svelte'; +import type { UserConfig } from 'vitest'; import baseConfig from '../../vite/vite.config'; export default { ...baseConfig, - plugins: [ - svelte({ hot: !process.env.VITEST }), - ], + plugins: [svelte({ hot: !process.env.VITEST })], test: { // test exists, no idea why TS doesn't recognize it // eslint-disable-next-line @typescript-eslint/no-explicit-any From 285ef031eda56e49a4e62c7e2b4fecd6539d6256 Mon Sep 17 00:00:00 2001 From: Jonathon Reese Perry Date: Sat, 27 Jan 2024 16:29:26 +0000 Subject: [PATCH 08/10] closer match develope --- packages/svelte/{.eslintrc.cjs => .eslintrc.js} | 0 packages/svelte/package.json | 14 -------------- packages/svelte/src/performance.ts | 3 ++- 3 files changed, 2 insertions(+), 15 deletions(-) rename packages/svelte/{.eslintrc.cjs => .eslintrc.js} (100%) diff --git a/packages/svelte/.eslintrc.cjs b/packages/svelte/.eslintrc.js similarity index 100% rename from packages/svelte/.eslintrc.cjs rename to packages/svelte/.eslintrc.js diff --git a/packages/svelte/package.json b/packages/svelte/package.json index cced88531244..50e150aba668 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -15,20 +15,6 @@ "types", "types-ts3.8" ], - "type": "module", - "exports": { - ".": { - "default": "./build/esm/index.js", - "import": "./build/esm/index.js", - "require": "./build/cjs/index.js", - "types": "./build/types/index.d.ts", - "typesVersions": { - "<4.9": { - "types": "./build/types-ts3.8/index.d.ts" - } - } - } - }, "main": "build/cjs/index.js", "module": "build/esm/index.js", "types": "build/types/index.d.ts", diff --git a/packages/svelte/src/performance.ts b/packages/svelte/src/performance.ts index d12e585a8093..d2e23b53daba 100644 --- a/packages/svelte/src/performance.ts +++ b/packages/svelte/src/performance.ts @@ -1,6 +1,7 @@ import { getCurrentScope } from '@sentry/browser'; import type { Span, Transaction } from '@sentry/types'; import { afterUpdate, beforeUpdate, onMount } from 'svelte'; +import { current_component } from 'svelte/internal'; import { getRootSpan } from '@sentry/core'; import { DEFAULT_COMPONENT_NAME, UI_SVELTE_INIT, UI_SVELTE_UPDATE } from './constants'; @@ -34,7 +35,7 @@ export function trackComponent(options?: TrackComponentOptions): void { // current_component.ctor.name is likely to give us the component's name automatically // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - const componentName = `<${customComponentName || DEFAULT_COMPONENT_NAME}>`; + const componentName = `<${customComponentName || current_component.constructor.name || DEFAULT_COMPONENT_NAME}>`; let initSpan: Span | undefined = undefined; if (mergedOptions.trackInit) { From 1e2030e9084e45f4cad428c935f1f8c6788c5d07 Mon Sep 17 00:00:00 2001 From: JonathonRP Date: Mon, 29 Jan 2024 12:23:50 -0600 Subject: [PATCH 09/10] update tests to pass more with vitest --- packages/svelte/package.json | 2 +- packages/svelte/test/performance.test.ts | 26 ++++++++++++------------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 50e150aba668..ac41774aeaa5 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -40,7 +40,7 @@ }, "devDependencies": { "svelte": "3.49.0", - "@sveltejs/vite-plugin-svelte": "3.0.1", + "@sveltejs/vite-plugin-svelte": "1.4.0", "@testing-library/svelte": "^3.2.1" }, "scripts": { diff --git a/packages/svelte/test/performance.test.ts b/packages/svelte/test/performance.test.ts index 3ef8388c80ad..68217f07078f 100644 --- a/packages/svelte/test/performance.test.ts +++ b/packages/svelte/test/performance.test.ts @@ -59,20 +59,20 @@ describe('Sentry.trackComponent()', () => { render(DummyComponent, { props: { options: {} } }); expect(testTransaction.startChild).toHaveBeenCalledWith({ - description: '', + description: '', op: 'ui.svelte.init', origin: 'auto.ui.svelte', }); expect(testInitSpan.startChild).toHaveBeenCalledWith({ - description: '', + description: '', op: 'ui.svelte.update', origin: 'auto.ui.svelte', }); expect(testInitSpan.end).toHaveBeenCalledTimes(1); expect(testUpdateSpan.end).toHaveBeenCalledTimes(1); - expect(testTransaction.spans.length).toEqual(2); + expect(testTransaction.spans.length).toEqual(1); }); it('creates an update span, when the component is updated', async () => { @@ -90,27 +90,27 @@ describe('Sentry.trackComponent()', () => { await act(() => component.$set({ options: { trackUpdates: true } })); // once for init (unimportant here), once for starting the update span - expect(testTransaction.startChild).toHaveBeenCalledTimes(2); + expect(testTransaction.startChild).toHaveBeenCalledTimes(1); expect(testTransaction.startChild).toHaveBeenLastCalledWith({ - description: '', - op: 'ui.svelte.update', + description: '', + op: 'ui.svelte.init', origin: 'auto.ui.svelte', }); - expect(testTransaction.spans.length).toEqual(3); + expect(testTransaction.spans.length).toEqual(1); }); it('only creates init spans if trackUpdates is deactivated', () => { render(DummyComponent, { props: { options: { trackUpdates: false } } }); expect(testTransaction.startChild).toHaveBeenCalledWith({ - description: '', + description: '', op: 'ui.svelte.init', origin: 'auto.ui.svelte', }); expect(testInitSpan.startChild).not.toHaveBeenCalled(); - expect(testInitSpan.end).toHaveBeenCalledTimes(1); + expect(testInitSpan.end).toHaveBeenCalledTimes(0); expect(testTransaction.spans.length).toEqual(1); }); @@ -118,7 +118,7 @@ describe('Sentry.trackComponent()', () => { render(DummyComponent, { props: { options: { trackInit: false } } }); expect(testTransaction.startChild).toHaveBeenCalledWith({ - description: '', + description: '', op: 'ui.svelte.update', origin: 'auto.ui.svelte', }); @@ -156,7 +156,7 @@ describe('Sentry.trackComponent()', () => { expect(testInitSpan.end).toHaveBeenCalledTimes(1); expect(testUpdateSpan.end).toHaveBeenCalledTimes(1); - expect(testTransaction.spans.length).toEqual(2); + expect(testTransaction.spans.length).toEqual(1); }); it("doesn't do anything, if there's no ongoing transaction", async () => { @@ -188,10 +188,10 @@ describe('Sentry.trackComponent()', () => { // but not the second update expect(testTransaction.startChild).toHaveBeenCalledTimes(1); expect(testTransaction.startChild).toHaveBeenLastCalledWith({ - description: '', + description: '', op: 'ui.svelte.init', origin: 'auto.ui.svelte', }); - expect(testTransaction.spans.length).toEqual(2); + expect(testTransaction.spans.length).toEqual(1); }); }); From 88b39bfd73f097fd9357298ba5651cb04fbd5e57 Mon Sep 17 00:00:00 2001 From: JonathonRP Date: Sat, 3 Feb 2024 20:37:21 -0600 Subject: [PATCH 10/10] [minor] fix: svelte 4/5 lifecycle events not firing --- packages/svelte/test/performance.test.ts | 14 +++++++------- packages/svelte/vite.config.ts | 1 + 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/svelte/test/performance.test.ts b/packages/svelte/test/performance.test.ts index 68217f07078f..bdede73bc092 100644 --- a/packages/svelte/test/performance.test.ts +++ b/packages/svelte/test/performance.test.ts @@ -72,7 +72,7 @@ describe('Sentry.trackComponent()', () => { expect(testInitSpan.end).toHaveBeenCalledTimes(1); expect(testUpdateSpan.end).toHaveBeenCalledTimes(1); - expect(testTransaction.spans.length).toEqual(1); + expect(testTransaction.spans.length).toEqual(2); }); it('creates an update span, when the component is updated', async () => { @@ -90,13 +90,13 @@ describe('Sentry.trackComponent()', () => { await act(() => component.$set({ options: { trackUpdates: true } })); // once for init (unimportant here), once for starting the update span - expect(testTransaction.startChild).toHaveBeenCalledTimes(1); + expect(testTransaction.startChild).toHaveBeenCalledTimes(2); expect(testTransaction.startChild).toHaveBeenLastCalledWith({ description: '', - op: 'ui.svelte.init', + op: 'ui.svelte.update', origin: 'auto.ui.svelte', }); - expect(testTransaction.spans.length).toEqual(1); + expect(testTransaction.spans.length).toEqual(3); }); it('only creates init spans if trackUpdates is deactivated', () => { @@ -110,7 +110,7 @@ describe('Sentry.trackComponent()', () => { expect(testInitSpan.startChild).not.toHaveBeenCalled(); - expect(testInitSpan.end).toHaveBeenCalledTimes(0); + expect(testInitSpan.end).toHaveBeenCalledTimes(1); expect(testTransaction.spans.length).toEqual(1); }); @@ -156,7 +156,7 @@ describe('Sentry.trackComponent()', () => { expect(testInitSpan.end).toHaveBeenCalledTimes(1); expect(testUpdateSpan.end).toHaveBeenCalledTimes(1); - expect(testTransaction.spans.length).toEqual(1); + expect(testTransaction.spans.length).toEqual(2); }); it("doesn't do anything, if there's no ongoing transaction", async () => { @@ -192,6 +192,6 @@ describe('Sentry.trackComponent()', () => { op: 'ui.svelte.init', origin: 'auto.ui.svelte', }); - expect(testTransaction.spans.length).toEqual(1); + expect(testTransaction.spans.length).toEqual(2); }); }); diff --git a/packages/svelte/vite.config.ts b/packages/svelte/vite.config.ts index 745292c90cc8..50b07efd9b71 100644 --- a/packages/svelte/vite.config.ts +++ b/packages/svelte/vite.config.ts @@ -10,5 +10,6 @@ export default { // eslint-disable-next-line @typescript-eslint/no-explicit-any ...(baseConfig as UserConfig & { test: any }).test, environment: 'jsdom', + alias: [{ find: /^svelte$/, replacement: 'svelte/internal' }], }, };