From 536e9f594c132d9914cb572a0000a96961a0aa03 Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Thu, 30 Mar 2023 10:33:16 +0200 Subject: [PATCH 1/2] ref(sveltekit): Inject init plugin only if sentry config files exist --- packages/sveltekit/src/config/vitePlugins.ts | 8 +++-- .../src/config/withSentryViteConfig.ts | 32 ++++++++++++----- .../test/config/withSentryViteConfig.test.ts | 34 +++++++++++++++++++ 3 files changed, 64 insertions(+), 10 deletions(-) diff --git a/packages/sveltekit/src/config/vitePlugins.ts b/packages/sveltekit/src/config/vitePlugins.ts index 49df160b718a..1bb2a477b3e5 100644 --- a/packages/sveltekit/src/config/vitePlugins.ts +++ b/packages/sveltekit/src/config/vitePlugins.ts @@ -60,7 +60,11 @@ function addSentryConfigFileImport( return { code: ms.toString(), map: ms.generateMap() }; } -function getUserConfigFile(projectDir: string, platform: 'server' | 'client'): string | undefined { +/** + * Looks up the sentry.{@param platform}.config.(ts|js) file + * @returns the file path to the file or undefined if it doesn't exist + */ +export function getUserConfigFile(projectDir: string, platform: 'server' | 'client'): string | undefined { const possibilities = [`sentry.${platform}.config.ts`, `sentry.${platform}.config.js`]; for (const filename of possibilities) { @@ -69,5 +73,5 @@ function getUserConfigFile(projectDir: string, platform: 'server' | 'client'): s } } - throw new Error(`Cannot find '${possibilities[0]}' or '${possibilities[1]}' in '${projectDir}'.`); + return undefined; } diff --git a/packages/sveltekit/src/config/withSentryViteConfig.ts b/packages/sveltekit/src/config/withSentryViteConfig.ts index a5fabf3241ee..94a493b14974 100644 --- a/packages/sveltekit/src/config/withSentryViteConfig.ts +++ b/packages/sveltekit/src/config/withSentryViteConfig.ts @@ -1,6 +1,6 @@ import type { UserConfig, UserConfigExport } from 'vite'; -import { injectSentryInitPlugin } from './vitePlugins'; +import { getUserConfigFile, injectSentryInitPlugin } from './vitePlugins'; /** * This function adds Sentry-specific configuration to your Vite config. @@ -31,17 +31,27 @@ export function withSentryViteConfig(originalConfig: UserConfigExport): UserConf } function addSentryConfig(originalConfig: UserConfig): UserConfig { + const sentryPlugins = []; + + const shouldAddInjectInitPlugin = hasSentryInitFiles(); + + if (shouldAddInjectInitPlugin) { + sentryPlugins.push(injectSentryInitPlugin); + } + const config = { ...originalConfig, - plugins: originalConfig.plugins ? [injectSentryInitPlugin, ...originalConfig.plugins] : [injectSentryInitPlugin], + plugins: originalConfig.plugins ? [...sentryPlugins, ...originalConfig.plugins] : [...sentryPlugins], }; - const mergedDevServerFileSystemConfig: UserConfig['server'] = { - fs: { - ...(config.server && config.server.fs), - allow: [...((config.server && config.server.fs && config.server.fs.allow) || []), '.'], - }, - }; + const mergedDevServerFileSystemConfig: UserConfig['server'] = shouldAddInjectInitPlugin + ? { + fs: { + ...(config.server && config.server.fs), + allow: [...((config.server && config.server.fs && config.server.fs.allow) || []), '.'], + }, + } + : {}; config.server = { ...config.server, @@ -50,3 +60,9 @@ function addSentryConfig(originalConfig: UserConfig): UserConfig { return config; } + +function hasSentryInitFiles(): boolean { + const hasSentryServerInit = !!getUserConfigFile(process.cwd(), 'server'); + const hasSentryClientInit = !!getUserConfigFile(process.cwd(), 'client'); + return hasSentryServerInit || hasSentryClientInit; +} diff --git a/packages/sveltekit/test/config/withSentryViteConfig.test.ts b/packages/sveltekit/test/config/withSentryViteConfig.test.ts index 1ed7cf5d3d51..b52d3283b3d4 100644 --- a/packages/sveltekit/test/config/withSentryViteConfig.test.ts +++ b/packages/sveltekit/test/config/withSentryViteConfig.test.ts @@ -1,7 +1,17 @@ +import type fs from 'fs'; import type { Plugin, UserConfig } from 'vite'; +import { vi } from 'vitest'; import { withSentryViteConfig } from '../../src/config/withSentryViteConfig'; +let existsFile = true; +vi.mock('fs', async () => { + const original = await vi.importActual('fs'); + return { + ...original, + existsSync: vi.fn().mockImplementation(() => existsFile), + }; +}); describe('withSentryViteConfig', () => { const originalConfig = { plugins: [{ name: 'foo' }], @@ -115,4 +125,28 @@ describe('withSentryViteConfig', () => { expect((sentrifiedConfig as UserConfig).server?.fs?.allow).toStrictEqual(['.']); }); + + it("doesn't add the inject init plugin or the server config if sentry config files don't exist", () => { + existsFile = false; + + const sentrifiedConfig = withSentryViteConfig({ + plugins: [{ name: 'some plugin' }], + test: { + include: ['src/**/*.{test,spec}.{js,ts}'], + }, + server: { + fs: { + allow: ['./bar'], + }, + }, + } as UserConfig); + + expect(typeof sentrifiedConfig).toBe('object'); + const plugins = (sentrifiedConfig as UserConfig).plugins as Plugin[]; + expect(plugins).toHaveLength(1); + expect(plugins[0].name).toBe('some plugin'); + expect((sentrifiedConfig as UserConfig).server?.fs?.allow).toStrictEqual(['./bar']); + + existsFile = false; + }); }); From d73ebdeeed03d12d293b85805c360bb8e421f082 Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Thu, 30 Mar 2023 10:38:43 +0200 Subject: [PATCH 2/2] fix test reset --- packages/sveltekit/test/config/withSentryViteConfig.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sveltekit/test/config/withSentryViteConfig.test.ts b/packages/sveltekit/test/config/withSentryViteConfig.test.ts index b52d3283b3d4..9dc08eae487a 100644 --- a/packages/sveltekit/test/config/withSentryViteConfig.test.ts +++ b/packages/sveltekit/test/config/withSentryViteConfig.test.ts @@ -147,6 +147,6 @@ describe('withSentryViteConfig', () => { expect(plugins[0].name).toBe('some plugin'); expect((sentrifiedConfig as UserConfig).server?.fs?.allow).toStrictEqual(['./bar']); - existsFile = false; + existsFile = true; }); });