Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/nuxt/src/module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ export default defineNuxtModule<ModuleOptions>({
if (serverConfigFile) {
addMiddlewareImports();
addStorageInstrumentation(nuxt);
addDatabaseInstrumentation(nuxt.options.nitro);
addDatabaseInstrumentation(nuxt.options.nitro, moduleOptions);
}

// Add the sentry config file to the include array
Expand Down
18 changes: 11 additions & 7 deletions packages/nuxt/src/vite/databaseConfig.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,23 @@
import { addServerPlugin, createResolver } from '@nuxt/kit';
import { consoleSandbox } from '@sentry/core';
import type { NitroConfig } from 'nitropack/types';
import type { SentryNuxtModuleOptions } from '../common/types';
import { addServerTemplate } from '../vendor/server-template';

/**
* Sets up the database instrumentation.
*/
export function addDatabaseInstrumentation(nitro: NitroConfig): void {
export function addDatabaseInstrumentation(nitro: NitroConfig, moduleOptions?: SentryNuxtModuleOptions): void {
if (!nitro.experimental?.database) {
consoleSandbox(() => {
// eslint-disable-next-line no-console
console.log(
'[Sentry] [Nitro Database Plugin]: No database configuration found. Skipping database instrumentation.',
);
});
// We cannot use DEBUG_BUILD here because it is a runtime flag, so it is not available for build time scripts
// So we have to pass in the module options to the build time script
moduleOptions?.debug &&
consoleSandbox(() => {
// eslint-disable-next-line no-console
console.log(
'[Sentry] [Nitro Database Plugin]: No database configuration found. Skipping database instrumentation.',
);
});

return;
}
Expand Down
81 changes: 81 additions & 0 deletions packages/nuxt/test/vite/databaseConfig.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
import type { NitroConfig } from 'nitropack/types';
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import type { SentryNuxtModuleOptions } from '../../src/common/types';
import { addDatabaseInstrumentation } from '../../src/vite/databaseConfig';

vi.mock('@sentry/core', () => ({
consoleSandbox: (callback: () => void) => callback(),
}));

vi.mock('@nuxt/kit', () => ({
addServerPlugin: vi.fn(),
createResolver: vi.fn(() => ({
resolve: vi.fn((path: string) => path),
})),
}));

vi.mock('../../src/vendor/server-template', () => ({
addServerTemplate: vi.fn(),
}));

describe('addDatabaseInstrumentation', () => {
const consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => {});

beforeEach(() => {
consoleLogSpy.mockClear();
});

afterEach(() => {
vi.clearAllMocks();
});

describe('debug logging when no database configuration', () => {
it('should log debug message when debug is enabled and no database config', () => {
const nitroConfig: NitroConfig = {};
const moduleOptions: SentryNuxtModuleOptions = { debug: true };

addDatabaseInstrumentation(nitroConfig, moduleOptions);

expect(consoleLogSpy).toHaveBeenCalledWith(
'[Sentry] [Nitro Database Plugin]: No database configuration found. Skipping database instrumentation.',
);
});

it('should not log debug message when debug is disabled and no database config', () => {
const nitroConfig: NitroConfig = {};
const moduleOptions: SentryNuxtModuleOptions = { debug: false };

addDatabaseInstrumentation(nitroConfig, moduleOptions);

expect(consoleLogSpy).not.toHaveBeenCalled();
});

it('should not log debug message when moduleOptions is undefined', () => {
const nitroConfig: NitroConfig = {};

addDatabaseInstrumentation(nitroConfig, undefined);

expect(consoleLogSpy).not.toHaveBeenCalled();
});

it('should not log debug message when debug is not set in moduleOptions', () => {
const nitroConfig: NitroConfig = {};
const moduleOptions: SentryNuxtModuleOptions = {};

addDatabaseInstrumentation(nitroConfig, moduleOptions);

expect(consoleLogSpy).not.toHaveBeenCalled();
});

it('should log debug message when experimental.database is explicitly false and debug is true', () => {
const nitroConfig: NitroConfig = { experimental: { database: false } };
const moduleOptions: SentryNuxtModuleOptions = { debug: true };

addDatabaseInstrumentation(nitroConfig, moduleOptions);

expect(consoleLogSpy).toHaveBeenCalledWith(
'[Sentry] [Nitro Database Plugin]: No database configuration found. Skipping database instrumentation.',
);
});
});
});
Loading