diff --git a/.size-limit.js b/.size-limit.js index 2e8e07f15971..dfd1210bc735 100644 --- a/.size-limit.js +++ b/.size-limit.js @@ -211,6 +211,33 @@ module.exports = [ gzip: true, limit: '180 KB', }, + // AWS SDK (ESM) + { + name: '@sentry/aws-serverless', + path: 'packages/aws-serverless/build/npm/esm/index.js', + import: createImport('init'), + ignore: [ + 'node:http', + 'node:https', + 'node:diagnostics_channel', + 'async_hooks', + 'child_process', + 'perf_hooks', + 'fs', + 'os', + 'path', + 'inspector', + 'worker_threads', + 'http', + 'stream', + 'zlib', + 'net', + 'tls', + 'module', + ], + gzip: true, + limit: '140 KB', + }, ]; function createImport(...args) { diff --git a/dev-packages/e2e-tests/test-applications/node-exports-test-app/scripts/consistentExports.ts b/dev-packages/e2e-tests/test-applications/node-exports-test-app/scripts/consistentExports.ts index 08a2ffaad9e8..a3e9ac0852aa 100644 --- a/dev-packages/e2e-tests/test-applications/node-exports-test-app/scripts/consistentExports.ts +++ b/dev-packages/e2e-tests/test-applications/node-exports-test-app/scripts/consistentExports.ts @@ -17,6 +17,7 @@ const NODE_EXPORTS_IGNORE = [ // Only required from the Node package 'setNodeAsyncContextStrategy', 'getDefaultIntegrationsWithoutPerformance', + 'initWithoutDefaultIntegrations', ]; const nodeExports = Object.keys(SentryNode).filter(e => !NODE_EXPORTS_IGNORE.includes(e)); diff --git a/packages/aws-serverless/src/sdk.ts b/packages/aws-serverless/src/sdk.ts index 20bb890a38b2..7c491fefc008 100644 --- a/packages/aws-serverless/src/sdk.ts +++ b/packages/aws-serverless/src/sdk.ts @@ -11,7 +11,7 @@ import { flush, getCurrentScope, getDefaultIntegrationsWithoutPerformance, - init as initNode, + initWithoutDefaultIntegrations, startSpanManual, withScope, } from '@sentry/node'; @@ -93,7 +93,7 @@ export function init(options: NodeOptions = {}): void { version: SDK_VERSION, }; - initNode(opts); + initWithoutDefaultIntegrations(opts); } /** */ diff --git a/packages/aws-serverless/test/sdk.test.ts b/packages/aws-serverless/test/sdk.test.ts index 4af197edc577..9a085ad1ec78 100644 --- a/packages/aws-serverless/test/sdk.test.ts +++ b/packages/aws-serverless/test/sdk.test.ts @@ -24,7 +24,7 @@ jest.mock('@sentry/node', () => { const original = jest.requireActual('@sentry/node'); return { ...original, - init: (options: unknown) => { + initWithoutDefaultIntegrations: (options: unknown) => { mockInit(options); }, startInactiveSpan: (...args: unknown[]) => { diff --git a/packages/node/rollup.npm.config.mjs b/packages/node/rollup.npm.config.mjs index c4a621cf7ee3..f9adb7d91ca5 100644 --- a/packages/node/rollup.npm.config.mjs +++ b/packages/node/rollup.npm.config.mjs @@ -23,11 +23,7 @@ export default [ output: { // set exports to 'named' or 'auto' so that rollup doesn't warn exports: 'named', - // set preserveModules to false because we want to bundle everything into one file. - preserveModules: - process.env.SENTRY_BUILD_PRESERVE_MODULES === undefined - ? false - : Boolean(process.env.SENTRY_BUILD_PRESERVE_MODULES), + preserveModules: true, }, plugins: [ replace({ diff --git a/packages/node/src/index.ts b/packages/node/src/index.ts index cd566c7712d0..9854d30b4787 100644 --- a/packages/node/src/index.ts +++ b/packages/node/src/index.ts @@ -30,6 +30,7 @@ export { init, getDefaultIntegrations, getDefaultIntegrationsWithoutPerformance, + initWithoutDefaultIntegrations, } from './sdk/init'; export { initOpenTelemetry } from './sdk/initOtel'; export { getAutoPerformanceIntegrations } from './integrations/tracing'; diff --git a/packages/node/src/sdk/init.ts b/packages/node/src/sdk/init.ts index 63e470fe4e12..5ca3a743531a 100644 --- a/packages/node/src/sdk/init.ts +++ b/packages/node/src/sdk/init.ts @@ -88,7 +88,24 @@ declare const __IMPORT_META_URL_REPLACEMENT__: string; * Initialize Sentry for Node. */ export function init(options: NodeOptions | undefined = {}): void { - const clientOptions = getClientOptions(options); + return _init(options, getDefaultIntegrations); +} + +/** + * Initialize Sentry for Node, without any integrations added by default. + */ +export function initWithoutDefaultIntegrations(options: NodeOptions | undefined = {}): void { + return _init(options, () => []); +} + +/** + * Initialize Sentry for Node, without performance instrumentation. + */ +function _init( + options: NodeOptions | undefined = {}, + getDefaultIntegrationsImpl: (options: Options) => Integration[], +): void { + const clientOptions = getClientOptions(options, getDefaultIntegrationsImpl); if (clientOptions.debug === true) { if (DEBUG_BUILD) { @@ -191,7 +208,10 @@ function validateOpenTelemetrySetup(): void { } } -function getClientOptions(options: NodeOptions): NodeClientOptions { +function getClientOptions( + options: NodeOptions, + getDefaultIntegrationsImpl: (options: Options) => Integration[], +): NodeClientOptions { const release = getRelease(options.release); const autoSessionTracking = @@ -215,17 +235,18 @@ function getClientOptions(options: NodeOptions): NodeClientOptions { tracesSampleRate, }); + const mergedOptions = { + ...baseOptions, + ...options, + ...overwriteOptions, + }; + if (options.defaultIntegrations === undefined) { - options.defaultIntegrations = getDefaultIntegrations({ - ...options, - ...overwriteOptions, - }); + options.defaultIntegrations = getDefaultIntegrationsImpl(mergedOptions); } const clientOptions: NodeClientOptions = { - ...baseOptions, - ...options, - ...overwriteOptions, + ...mergedOptions, stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser), integrations: getIntegrationsToSetup({ defaultIntegrations: options.defaultIntegrations,