diff --git a/.size-limit.js b/.size-limit.js index 739c3f62aae1..b01242b3ffb2 100644 --- a/.size-limit.js +++ b/.size-limit.js @@ -2,28 +2,28 @@ module.exports = [ // Main browser webpack builds { name: '@sentry/browser (incl. Tracing, Replay, Feedback) - Webpack (gzipped)', - path: 'packages/browser/build/npm/esm/index.js', + path: 'packages/browser/build/npm/esm/index.mjs', import: '{ init, Replay, browserTracingIntegration, Feedback }', gzip: true, limit: '90 KB', }, { name: '@sentry/browser (incl. Tracing, Replay) - Webpack (gzipped)', - path: 'packages/browser/build/npm/esm/index.js', + path: 'packages/browser/build/npm/esm/index.mjs', import: '{ init, Replay, browserTracingIntegration }', gzip: true, limit: '75 KB', }, { name: '@sentry/browser (incl. Tracing, Replay with Canvas) - Webpack (gzipped)', - path: 'packages/browser/build/npm/esm/index.js', + path: 'packages/browser/build/npm/esm/index.mjs', import: '{ init, Replay, browserTracingIntegration, ReplayCanvas }', gzip: true, limit: '90 KB', }, { name: '@sentry/browser (incl. Tracing, Replay) - Webpack with treeshaking flags (gzipped)', - path: 'packages/browser/build/npm/esm/index.js', + path: 'packages/browser/build/npm/esm/index.mjs', import: '{ init, Replay, browserTracingIntegration }', gzip: true, limit: '75 KB', @@ -42,35 +42,35 @@ module.exports = [ }, { name: '@sentry/browser (incl. Tracing) - Webpack (gzipped)', - path: 'packages/browser/build/npm/esm/index.js', + path: 'packages/browser/build/npm/esm/index.mjs', import: '{ init, browserTracingIntegration }', gzip: true, limit: '35 KB', }, { name: '@sentry/browser (incl. browserTracingIntegration) - Webpack (gzipped)', - path: 'packages/browser/build/npm/esm/index.js', + path: 'packages/browser/build/npm/esm/index.mjs', import: '{ init, browserTracingIntegration }', gzip: true, limit: '35 KB', }, { name: '@sentry/browser (incl. Feedback) - Webpack (gzipped)', - path: 'packages/browser/build/npm/esm/index.js', + path: 'packages/browser/build/npm/esm/index.mjs', import: '{ init, Feedback }', gzip: true, limit: '50 KB', }, { name: '@sentry/browser (incl. sendFeedback) - Webpack (gzipped)', - path: 'packages/browser/build/npm/esm/index.js', + path: 'packages/browser/build/npm/esm/index.mjs', import: '{ init, sendFeedback }', gzip: true, limit: '50 KB', }, { name: '@sentry/browser - Webpack (gzipped)', - path: 'packages/browser/build/npm/esm/index.js', + path: 'packages/browser/build/npm/esm/index.mjs', import: '{ init }', gzip: true, limit: '28 KB', @@ -137,37 +137,43 @@ module.exports = [ // React { name: '@sentry/react (incl. Tracing, Replay) - Webpack (gzipped)', - path: 'packages/react/build/esm/index.js', + path: 'packages/react/build/esm/index.mjs', import: '{ init, browserTracingIntegration, Replay }', gzip: true, limit: '75 KB', }, { name: '@sentry/react - Webpack (gzipped)', - path: 'packages/react/build/esm/index.js', + path: 'packages/react/build/esm/index.mjs', import: '{ init }', gzip: true, limit: '30 KB', }, // Next.js + // We ignore next/router and next/constants because they break size-limit calculation + // with new *.mjs bundles in v8 { name: '@sentry/nextjs Client (incl. Tracing, Replay) - Webpack (gzipped)', - path: 'packages/nextjs/build/esm/client/index.js', + path: 'packages/nextjs/build/esm/client/index.mjs', import: '{ init, browserTracingIntegration, Replay }', + ignore: ['next/router', 'next/constants'], gzip: true, limit: '110 KB', }, { name: '@sentry/nextjs Client - Webpack (gzipped)', - path: 'packages/nextjs/build/esm/client/index.js', + path: 'packages/nextjs/build/esm/client/index.mjs', import: '{ init }', + ignore: ['next/router', 'next/constants'], gzip: true, limit: '57 KB', }, + + // Feedback { name: '@sentry-internal/feedback - Webpack (gzipped)', - path: 'packages/feedback/build/npm/esm/index.js', + path: 'packages/feedback/build/npm/esm/index.mjs', import: '{ Feedback }', gzip: true, limit: '25 KB', diff --git a/dev-packages/rollup-utils/npmHelpers.mjs b/dev-packages/rollup-utils/npmHelpers.mjs index 6085a502200f..3e2c98401a6f 100644 --- a/dev-packages/rollup-utils/npmHelpers.mjs +++ b/dev-packages/rollup-utils/npmHelpers.mjs @@ -117,11 +117,20 @@ export function makeBaseNPMConfig(options = {}) { }); } -export function makeNPMConfigVariants(baseConfig) { +export function makeNPMConfigVariants(baseConfig, options = {}) { + const { emitMjs = true, entryFileNameWithoutExtension = '[name]' } = options; const variantSpecificConfigs = [ { output: { format: 'cjs', dir: path.join(baseConfig.output.dir, 'cjs') } }, { output: { format: 'esm', dir: path.join(baseConfig.output.dir, 'esm') } }, ]; + if (emitMjs) { + variantSpecificConfigs[1].output.entryFileNames = `${entryFileNameWithoutExtension}.mjs`; + } + + if (entryFileNameWithoutExtension !== '[name]') { + variantSpecificConfigs[0].output.entryFileNames = `${entryFileNameWithoutExtension}.js`; + } + return variantSpecificConfigs.map(variant => deepMerge(baseConfig, variant)); } diff --git a/packages/astro/package.json b/packages/astro/package.json index d7593bab3ffe..e664d346059d 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -24,20 +24,20 @@ "types-ts3.8" ], "main": "build/cjs/index.client.js", - "module": "build/esm/index.server.js", - "browser": "build/esm/index.client.js", + "module": "build/esm/index.server.mjs", + "browser": "build/esm/index.client.mjs", "types": "build/types/index.types.d.ts", "exports": { ".": { - "node": "./build/esm/index.server.js", - "browser": "./build/esm/index.client.js", - "import": "./build/esm/index.client.js", + "node": "./build/esm/index.server.mjs", + "browser": "./build/esm/index.client.mjs", + "import": "./build/esm/index.client.mjs", "require": "./build/cjs/index.server.js", "types": "./build/types/index.types.d.ts" }, "./middleware": { - "node": "./build/esm/integration/middleware/index.js", - "import": "./build/esm/integration/middleware/index.js", + "node": "./build/esm/integration/middleware/index.mjs", + "import": "./build/esm/integration/middleware/index.mjs", "require": "./build/cjs/integration/middleware/index.js", "types": "./build/types/integration/middleware/index.types.d.ts" } diff --git a/packages/browser/package.json b/packages/browser/package.json index 3d2cb0a25e37..9337bd4d5dd1 100644 --- a/packages/browser/package.json +++ b/packages/browser/package.json @@ -16,8 +16,21 @@ "types-ts3.8" ], "main": "build/npm/cjs/index.js", - "module": "build/npm/esm/index.js", + "module": "build/npm/esm/index.mjs", "types": "build/npm/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/npm/types/index.d.ts", + "default": "./build/npm/esm/index.mjs" + }, + "require": { + "types": "./build/npm.types/index.d.ts", + "default": "./build/npm/cjs/index.js" + } + } + }, "typesVersions": { "<4.9": { "build/npm/types/index.d.ts": [ diff --git a/packages/bun/package.json b/packages/bun/package.json index f73ad938beed..6533e2737964 100644 --- a/packages/bun/package.json +++ b/packages/bun/package.json @@ -16,8 +16,21 @@ "types-ts3.8" ], "main": "build/esm/index.js", - "module": "build/esm/index.js", + "module": "build/esm/index.mjs", "types": "build/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/types/index.d.ts", + "default": "./build/esm/index.mjs" + }, + "require": { + "types": "./build/types/index.d.ts", + "default": "./build/cjs/index.js" + } + } + }, "typesVersions": { "<4.9": { "build/npm/types/index.d.ts": [ diff --git a/packages/core/package.json b/packages/core/package.json index b971b1e00beb..14ff3df2dd33 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -16,8 +16,21 @@ "types-ts3.8" ], "main": "build/cjs/index.js", - "module": "build/esm/index.js", + "module": "build/esm/index.mjs", "types": "build/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/types/index.d.ts", + "default": "./build/esm/index.mjs" + }, + "require": { + "types": "./build/types/index.d.ts", + "default": "./build/cjs/index.js" + } + } + }, "typesVersions": { "<4.9": { "build/types/index.d.ts": [ diff --git a/packages/deno/package.json b/packages/deno/package.json index 21d76bbed255..cfbd5df68611 100644 --- a/packages/deno/package.json +++ b/packages/deno/package.json @@ -8,6 +8,15 @@ "license": "MIT", "module": "build/index.mjs", "types": "build/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/index.d.ts", + "default": "./build/index.mjs" + } + } + }, "publishConfig": { "access": "public" }, diff --git a/packages/feedback/package.json b/packages/feedback/package.json index 3ae1af389b07..12cc2a4a5cf2 100644 --- a/packages/feedback/package.json +++ b/packages/feedback/package.json @@ -16,8 +16,21 @@ "types-ts3.8" ], "main": "build/npm/cjs/index.js", - "module": "build/npm/esm/index.js", + "module": "build/npm/esm/index.mjs", "types": "build/npm/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/npm/types/index.d.ts", + "default": "./build/npm/esm/index.mjs" + }, + "require": { + "types": "./build/npm/types/index.d.ts", + "default": "./build/npm/cjs/index.js" + } + } + }, "typesVersions": { "<4.9": { "build/npm/types/index.d.ts": [ diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 0fbebcc90f4e..d2d6b4841be9 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -24,8 +24,21 @@ "gatsby-node.d.ts" ], "main": "build/cjs/index.js", - "module": "build/esm/index.js", + "module": "build/esm/index.mjs", "types": "build/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/types/index.d.ts", + "default": "./build/esm/index.mjs" + }, + "require": { + "types": "./build/types/index.d.ts", + "default": "./build/cjs/index.js" + } + } + }, "typesVersions": { "<4.9": { "build/types/index.d.ts": [ diff --git a/packages/integration-shims/package.json b/packages/integration-shims/package.json index c19d6f8f3fe7..b454ea1d6ba3 100644 --- a/packages/integration-shims/package.json +++ b/packages/integration-shims/package.json @@ -3,8 +3,21 @@ "version": "8.0.0-alpha.0", "description": "Shims for integrations in Sentry SDK.", "main": "build/cjs/index.js", - "module": "build/esm/index.js", + "module": "build/esm/index.mjs", "types": "build/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/types/index.d.ts", + "default": "./build/esm/index.mjs" + }, + "require": { + "types": "./build/types/index.d.ts", + "default": "./build/cjs/index.js" + } + } + }, "typesVersions": { "<4.9": { "build/types/index.d.ts": [ diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index 1fae1de57adf..741e47974572 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -10,9 +10,20 @@ "node": ">=14.8" }, "main": "build/cjs/index.server.js", - "module": "build/esm/index.server.js", - "browser": "build/esm/index.client.js", + "module": "build/esm/index.server.mjs", + "browser": "build/esm/index.client.mjs", "types": "build/types/index.types.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "browser": { + "import": "./build/esm/index.client.mjs", + "require": "./build/cjs/index.client.js" + }, + "node": "./build/cjs/index.server.js", + "types": "./build/types/index.types.d.ts" + } + }, "typesVersions": { "<4.9": { "build/npm/types/index.d.ts": [ diff --git a/packages/nextjs/rollup.npm.config.mjs b/packages/nextjs/rollup.npm.config.mjs index 39b79c9593b2..82d76504ccf1 100644 --- a/packages/nextjs/rollup.npm.config.mjs +++ b/packages/nextjs/rollup.npm.config.mjs @@ -35,9 +35,6 @@ export default [ packageSpecificConfig: { output: { - // Preserve the original file structure (i.e., so that everything is still relative to `src`) - entryFileNames: 'config/templates/[name].js', - // this is going to be add-on code, so it doesn't need the trappings of a full module (and in fact actively // shouldn't have them, lest they muck with the module to which we're adding it) sourcemap: false, @@ -55,6 +52,8 @@ export default [ ], }, }), + // Preserve the original file structure (i.e., so that everything is still relative to `src`) + { entryFileNameWithoutExtension: 'config/templates/[name]' }, ), ...makeNPMConfigVariants( makeBaseNPMConfig({ @@ -62,14 +61,13 @@ export default [ packageSpecificConfig: { output: { - // Preserve the original file structure (i.e., so that everything is still relative to `src`) - entryFileNames: 'config/loaders/[name].js', - // make it so Rollup calms down about the fact that we're combining default and named exports exports: 'named', }, external: ['@rollup/plugin-commonjs', 'rollup'], }, }), + // Preserve the original file structure (i.e., so that everything is still relative to `src`) + { entryFileNameWithoutExtension: 'config/loaders/[name]' }, ), ]; diff --git a/packages/nextjs/src/client/index.ts b/packages/nextjs/src/client/index.ts index fd155705a885..157e2cf70560 100644 --- a/packages/nextjs/src/client/index.ts +++ b/packages/nextjs/src/client/index.ts @@ -2,6 +2,7 @@ import { addEventProcessor, applySdkMetadata, hasTracingEnabled, setTag } from ' import type { BrowserOptions } from '@sentry/react'; import { getDefaultIntegrations as getReactDefaultIntegrations, init as reactInit } from '@sentry/react'; import type { EventProcessor, Integration } from '@sentry/types'; +import { GLOBAL_OBJ } from '@sentry/utils'; import { devErrorSymbolicationEventProcessor } from '../common/devErrorSymbolicationEventProcessor'; import { getVercelEnv } from '../common/getVercelEnv'; @@ -13,7 +14,7 @@ export * from '@sentry/react'; export { captureUnderscoreErrorException } from '../common/_error'; -const globalWithInjectedValues = global as typeof global & { +const globalWithInjectedValues = GLOBAL_OBJ as typeof GLOBAL_OBJ & { __rewriteFramesAssetPrefixPath__: string; }; diff --git a/packages/nextjs/src/client/tunnelRoute.ts b/packages/nextjs/src/client/tunnelRoute.ts index 6ac5fb50a640..236b49e0e868 100644 --- a/packages/nextjs/src/client/tunnelRoute.ts +++ b/packages/nextjs/src/client/tunnelRoute.ts @@ -1,9 +1,9 @@ import type { BrowserOptions } from '@sentry/react'; -import { dsnFromString, logger } from '@sentry/utils'; +import { GLOBAL_OBJ, dsnFromString, logger } from '@sentry/utils'; import { DEBUG_BUILD } from '../common/debug-build'; -const globalWithInjectedValues = global as typeof global & { +const globalWithInjectedValues = GLOBAL_OBJ as typeof GLOBAL_OBJ & { __sentryRewritesTunnelPath__?: string; }; diff --git a/packages/nextjs/src/config/loaders/wrappingLoader.ts b/packages/nextjs/src/config/loaders/wrappingLoader.ts index dab8c767c54f..e0af166c17ed 100644 --- a/packages/nextjs/src/config/loaders/wrappingLoader.ts +++ b/packages/nextjs/src/config/loaders/wrappingLoader.ts @@ -15,29 +15,29 @@ const SENTRY_WRAPPER_MODULE_NAME = 'sentry-wrapper-module'; // Needs to end in .cjs in order for the `commonjs` plugin to pick it up const WRAPPING_TARGET_MODULE_NAME = '__SENTRY_WRAPPING_TARGET_FILE__.cjs'; -const apiWrapperTemplatePath = path.resolve(__dirname, '..', 'templates', 'apiWrapperTemplate.js'); +const apiWrapperTemplatePath = path.resolve(__dirname, '..', 'templates', 'apiWrapperTemplate.mjs'); const apiWrapperTemplateCode = fs.readFileSync(apiWrapperTemplatePath, { encoding: 'utf8' }); -const pageWrapperTemplatePath = path.resolve(__dirname, '..', 'templates', 'pageWrapperTemplate.js'); +const pageWrapperTemplatePath = path.resolve(__dirname, '..', 'templates', 'pageWrapperTemplate.mjs'); const pageWrapperTemplateCode = fs.readFileSync(pageWrapperTemplatePath, { encoding: 'utf8' }); -const middlewareWrapperTemplatePath = path.resolve(__dirname, '..', 'templates', 'middlewareWrapperTemplate.js'); +const middlewareWrapperTemplatePath = path.resolve(__dirname, '..', 'templates', 'middlewareWrapperTemplate.mjs'); const middlewareWrapperTemplateCode = fs.readFileSync(middlewareWrapperTemplatePath, { encoding: 'utf8' }); let showedMissingAsyncStorageModuleWarning = false; -const sentryInitWrapperTemplatePath = path.resolve(__dirname, '..', 'templates', 'sentryInitWrapperTemplate.js'); +const sentryInitWrapperTemplatePath = path.resolve(__dirname, '..', 'templates', 'sentryInitWrapperTemplate.mjs'); const sentryInitWrapperTemplateCode = fs.readFileSync(sentryInitWrapperTemplatePath, { encoding: 'utf8' }); const serverComponentWrapperTemplatePath = path.resolve( __dirname, '..', 'templates', - 'serverComponentWrapperTemplate.js', + 'serverComponentWrapperTemplate.mjs', ); const serverComponentWrapperTemplateCode = fs.readFileSync(serverComponentWrapperTemplatePath, { encoding: 'utf8' }); -const routeHandlerWrapperTemplatePath = path.resolve(__dirname, '..', 'templates', 'routeHandlerWrapperTemplate.js'); +const routeHandlerWrapperTemplatePath = path.resolve(__dirname, '..', 'templates', 'routeHandlerWrapperTemplate.mjs'); const routeHandlerWrapperTemplateCode = fs.readFileSync(routeHandlerWrapperTemplatePath, { encoding: 'utf8' }); export type WrappingLoaderOptions = { diff --git a/packages/nextjs/src/config/webpack.ts b/packages/nextjs/src/config/webpack.ts index a6555c3b3343..1c15c84e4ee4 100644 --- a/packages/nextjs/src/config/webpack.ts +++ b/packages/nextjs/src/config/webpack.ts @@ -42,6 +42,12 @@ let showedHiddenSourceMapsWarningMsg = false; let showedMissingCliBinaryWarningMsg = false; let showedMissingGlobalErrorWarningMsg = false; +const ext = typeof require === 'undefined' ? 'mjs' : 'js'; + +const sdkMultiplexerLoader = path.resolve(__dirname, 'loaders', `sdkMultiplexerLoader.${ext}`); +const wrappingLoader = path.resolve(__dirname, 'loaders', `wrappingLoader.${ext}`); +const valueInjectionLoader = path.resolve(__dirname, 'loaders', `valueInjectionLoader.${ext}`); + // TODO: merge default SentryWebpackPlugin ignore with their SentryWebpackPlugin ignore or ignoreFile // TODO: merge default SentryWebpackPlugin include with their SentryWebpackPlugin include // TODO: drop merged keys from override check? `includeDefaults` option? @@ -92,7 +98,7 @@ export function constructWebpackConfigFunction( test: /node_modules[/\\]@sentry[/\\]nextjs/, use: [ { - loader: path.resolve(__dirname, 'loaders', 'sdkMultiplexerLoader.js'), + loader: sdkMultiplexerLoader, options: { importTarget: RUNTIME_TO_SDK_ENTRYPOINT_MAP[runtime], }, @@ -210,7 +216,7 @@ export function constructWebpackConfigFunction( test: isPageResource, use: [ { - loader: path.resolve(__dirname, 'loaders', 'wrappingLoader.js'), + loader: wrappingLoader, options: { ...staticWrappingLoaderOptions, wrappingTargetKind: 'page', @@ -248,7 +254,7 @@ export function constructWebpackConfigFunction( test: isApiRouteResource, use: [ { - loader: path.resolve(__dirname, 'loaders', 'wrappingLoader.js'), + loader: wrappingLoader, options: { ...staticWrappingLoaderOptions, vercelCronsConfig, @@ -264,7 +270,7 @@ export function constructWebpackConfigFunction( test: isMiddlewareResource, use: [ { - loader: path.resolve(__dirname, 'loaders', 'wrappingLoader.js'), + loader: wrappingLoader, options: { ...staticWrappingLoaderOptions, wrappingTargetKind: 'middleware', @@ -281,7 +287,7 @@ export function constructWebpackConfigFunction( test: isServerComponentResource, use: [ { - loader: path.resolve(__dirname, 'loaders', 'wrappingLoader.js'), + loader: wrappingLoader, options: { ...staticWrappingLoaderOptions, wrappingTargetKind: 'server-component', @@ -295,7 +301,7 @@ export function constructWebpackConfigFunction( test: isRouteHandlerResource, use: [ { - loader: path.resolve(__dirname, 'loaders', 'wrappingLoader.js'), + loader: wrappingLoader, options: { ...staticWrappingLoaderOptions, wrappingTargetKind: 'route-handler', @@ -319,7 +325,7 @@ export function constructWebpackConfigFunction( }, use: [ { - loader: path.resolve(__dirname, 'loaders', 'wrappingLoader.js'), + loader: wrappingLoader, options: { ...staticWrappingLoaderOptions, wrappingTargetKind: 'sentry-init', @@ -1011,7 +1017,7 @@ function addValueInjectionLoader( test: /sentry\.(server|edge)\.config\.(jsx?|tsx?)/, use: [ { - loader: path.resolve(__dirname, 'loaders/valueInjectionLoader.js'), + loader: valueInjectionLoader, options: { values: serverValues, }, @@ -1022,7 +1028,7 @@ function addValueInjectionLoader( test: /sentry\.client\.config\.(jsx?|tsx?)/, use: [ { - loader: path.resolve(__dirname, 'loaders/valueInjectionLoader.js'), + loader: valueInjectionLoader, options: { values: clientValues, }, diff --git a/packages/nextjs/test/config/loaders.test.ts b/packages/nextjs/test/config/loaders.test.ts index ed3589363539..ab4b3ae4c5e0 100644 --- a/packages/nextjs/test/config/loaders.test.ts +++ b/packages/nextjs/test/config/loaders.test.ts @@ -219,7 +219,7 @@ describe('webpack loaders', () => { if (expectedWrappingTargetKind) { expect(loaderApplications).toContainEqual( expect.objectContaining({ - loader: expect.stringMatching(/wrappingLoader\.js$/), + loader: expect.stringMatching(/wrappingLoader\.m?js$/), options: expect.objectContaining({ wrappingTargetKind: expectedWrappingTargetKind, }), @@ -228,7 +228,7 @@ describe('webpack loaders', () => { } else { expect(loaderApplications).not.toContainEqual( expect.objectContaining({ - loader: expect.stringMatching(/wrappingLoader\.js$/), + loader: expect.stringMatching(/wrappingLoader\.m?js$/), }), ); } diff --git a/packages/nextjs/test/config/wrappingLoader.test.ts b/packages/nextjs/test/config/wrappingLoader.test.ts index eec179725e74..f271477e1432 100644 --- a/packages/nextjs/test/config/wrappingLoader.test.ts +++ b/packages/nextjs/test/config/wrappingLoader.test.ts @@ -4,44 +4,44 @@ import * as path from 'path'; const originalReadfileSync = fs.readFileSync; jest.spyOn(fs, 'readFileSync').mockImplementation((filePath, options) => { - if (filePath.toString().endsWith('/config/templates/apiWrapperTemplate.js')) { + if (filePath.toString().endsWith('/config/templates/apiWrapperTemplate.mjs')) { return originalReadfileSync( - path.join(__dirname, '../../build/cjs/config/templates/apiWrapperTemplate.js'), + path.join(__dirname, '../../build/esm/config/templates/apiWrapperTemplate.mjs'), options, ); } - if (filePath.toString().endsWith('/config/templates/pageWrapperTemplate.js')) { + if (filePath.toString().endsWith('/config/templates/pageWrapperTemplate.mjs')) { return originalReadfileSync( - path.join(__dirname, '../../build/cjs/config/templates/pageWrapperTemplate.js'), + path.join(__dirname, '../../build/esm/config/templates/pageWrapperTemplate.mjs'), options, ); } - if (filePath.toString().endsWith('/config/templates/middlewareWrapperTemplate.js')) { + if (filePath.toString().endsWith('/config/templates/middlewareWrapperTemplate.mjs')) { return originalReadfileSync( - path.join(__dirname, '../../build/cjs/config/templates/middlewareWrapperTemplate.js'), + path.join(__dirname, '../../build/esm/config/templates/middlewareWrapperTemplate.mjs'), options, ); } - if (filePath.toString().endsWith('/config/templates/sentryInitWrapperTemplate.js')) { + if (filePath.toString().endsWith('/config/templates/sentryInitWrapperTemplate.mjs')) { return originalReadfileSync( - path.join(__dirname, '../../build/cjs/config/templates/sentryInitWrapperTemplate.js'), + path.join(__dirname, '../../build/esm/config/templates/sentryInitWrapperTemplate.mjs'), options, ); } - if (filePath.toString().endsWith('/config/templates/serverComponentWrapperTemplate.js')) { + if (filePath.toString().endsWith('/config/templates/serverComponentWrapperTemplate.mjs')) { return originalReadfileSync( - path.join(__dirname, '../../build/cjs/config/templates/serverComponentWrapperTemplate.js'), + path.join(__dirname, '../../build/esm/config/templates/serverComponentWrapperTemplate.mjs'), options, ); } - if (filePath.toString().endsWith('/config/templates/routeHandlerWrapperTemplate.js')) { + if (filePath.toString().endsWith('/config/templates/routeHandlerWrapperTemplate.mjs')) { return originalReadfileSync( - path.join(__dirname, '../../build/cjs/config/templates/routeHandlerWrapperTemplate.js'), + path.join(__dirname, '../../build/esm/config/templates/routeHandlerWrapperTemplate.mjs'), options, ); } diff --git a/packages/node-experimental/package.json b/packages/node-experimental/package.json index 1d1f50a6bf42..ed710f1be715 100644 --- a/packages/node-experimental/package.json +++ b/packages/node-experimental/package.json @@ -16,8 +16,21 @@ "types-ts3.8" ], "main": "build/cjs/index.js", - "module": "build/esm/index.js", + "module": "build/esm/index.mjs", "types": "build/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/types/index.d.ts", + "default": "./build/esm/index.mjs" + }, + "require": { + "types": "./build/types/index.d.ts", + "default": "./build/cjs/index.js" + } + } + }, "typesVersions": { "<4.9": { "build/types/index.d.ts": [ diff --git a/packages/node-experimental/rollup.anr-worker.config.mjs b/packages/node-experimental/rollup.anr-worker.config.mjs index 9887342c63fd..d7499b194efa 100644 --- a/packages/node-experimental/rollup.anr-worker.config.mjs +++ b/packages/node-experimental/rollup.anr-worker.config.mjs @@ -6,7 +6,7 @@ function createAnrWorkerConfig(destDir, esm) { entrypoints: ['src/integrations/anr/worker.ts'], jsVersion: 'es6', licenseTitle: '@sentry/node', - outputFileBase: () => 'worker-script.js', + outputFileBase: () => (esm ? 'worker-script.mjs' : 'worker-script.js'), packageSpecificConfig: { output: { dir: destDir, diff --git a/packages/node-experimental/src/integrations/modules.ts b/packages/node-experimental/src/integrations/modules.ts index ad30bb4d7a3b..244fb9c1d500 100644 --- a/packages/node-experimental/src/integrations/modules.ts +++ b/packages/node-experimental/src/integrations/modules.ts @@ -11,10 +11,13 @@ const _modulesIntegration = (() => { return { name: INTEGRATION_NAME, processEvent(event) { - event.modules = { - ...event.modules, - ..._getModules(), - }; + // If we're running in ESM mode, we don't have access to require + if (typeof require !== 'undefined') { + event.modules = { + ...event.modules, + ..._getModules(), + }; + } return event; }, diff --git a/packages/node-experimental/src/integrations/tracing/prisma.ts b/packages/node-experimental/src/integrations/tracing/prisma.ts index 1f78262b9a3c..b104329aabc6 100644 --- a/packages/node-experimental/src/integrations/tracing/prisma.ts +++ b/packages/node-experimental/src/integrations/tracing/prisma.ts @@ -1,5 +1,6 @@ import { registerInstrumentations } from '@opentelemetry/instrumentation'; -import { PrismaInstrumentation } from '@prisma/instrumentation'; +// This is a cjs module, so have to import like this +import * as prismaInstrumentation from '@prisma/instrumentation'; import { defineIntegration } from '@sentry/core'; import type { IntegrationFn } from '@sentry/types'; @@ -10,7 +11,7 @@ const _prismaIntegration = (() => { registerInstrumentations({ instrumentations: [ // does not have a hook to adjust spans & add origin - new PrismaInstrumentation({}), + new prismaInstrumentation.PrismaInstrumentation({}), ], }); }, diff --git a/packages/node-experimental/src/sdk/init.ts b/packages/node-experimental/src/sdk/init.ts index 5e62a01de6cd..a383a41b6f78 100644 --- a/packages/node-experimental/src/sdk/init.ts +++ b/packages/node-experimental/src/sdk/init.ts @@ -28,7 +28,6 @@ import { contextLinesIntegration } from '../integrations/contextlines'; import { httpIntegration } from '../integrations/http'; import { localVariablesIntegration } from '../integrations/local-variables'; import { modulesIntegration } from '../integrations/modules'; -import { nativeNodeFetchIntegration } from '../integrations/node-fetch'; import { onUncaughtExceptionIntegration } from '../integrations/onuncaughtexception'; import { onUnhandledRejectionIntegration } from '../integrations/onunhandledrejection'; import { spotlightIntegration } from '../integrations/spotlight'; @@ -51,7 +50,6 @@ export function getDefaultIntegrations(options: Options): Integration[] { // Native Wrappers consoleIntegration(), httpIntegration(), - nativeNodeFetchIntegration(), // Global Handlers onUncaughtExceptionIntegration(), onUnhandledRejectionIntegration(), @@ -61,7 +59,6 @@ export function getDefaultIntegrations(options: Options): Integration[] { nodeContextIntegration(), modulesIntegration(), httpIntegration(), - nativeNodeFetchIntegration(), ...(hasTracingEnabled(options) ? getAutoPerformanceIntegrations() : []), ]; } diff --git a/packages/node-experimental/tsconfig.json b/packages/node-experimental/tsconfig.json index 5fc0658105eb..737a316bff40 100644 --- a/packages/node-experimental/tsconfig.json +++ b/packages/node-experimental/tsconfig.json @@ -4,6 +4,7 @@ "include": ["src/**/*"], "compilerOptions": { - "lib": ["es6"] + "lib": ["es6"], + "module": "Node16" } } diff --git a/packages/node/package.json b/packages/node/package.json index 6fea8bd58a33..002a0eccb9a8 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -16,8 +16,21 @@ "types-ts3.8" ], "main": "build/cjs/index.js", - "module": "build/esm/index.js", + "module": "build/esm/index.mjs", "types": "build/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/types/index.d.ts", + "default": "./build/esm/index.mjs" + }, + "require": { + "types": "./build/types/index.d.ts", + "default": "./build/cjs/index.js" + } + } + }, "typesVersions": { "<4.9": { "build/types/index.d.ts": [ diff --git a/packages/opentelemetry/package.json b/packages/opentelemetry/package.json index 3fc72e5945ee..f0e13f0a40b2 100644 --- a/packages/opentelemetry/package.json +++ b/packages/opentelemetry/package.json @@ -16,8 +16,21 @@ "types-ts3.8" ], "main": "build/cjs/index.js", - "module": "build/esm/index.js", + "module": "build/esm/index.mjs", "types": "build/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/types/index.d.ts", + "default": "./build/esm/index.mjs" + }, + "require": { + "types": "./build/types/index.d.ts", + "default": "./build/cjs/index.js" + } + } + }, "typesVersions": { "<4.9": { "build/types/index.d.ts": [ diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 7dd1b473f215..c65ff3d4bfd0 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -8,6 +8,15 @@ "license": "MIT", "main": "lib/index.js", "types": "lib/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "require": { + "types": "./lib/types/index.d.ts", + "default": "./lib/index.js" + } + } + }, "typesVersions": { "<4.9": { "lib/types/index.d.ts": [ diff --git a/packages/react/package.json b/packages/react/package.json index 038a3066acaf..f1246d55a82e 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -16,8 +16,21 @@ "types-ts3.8" ], "main": "build/cjs/index.js", - "module": "build/esm/index.js", + "module": "build/esm/index.mjs", "types": "build/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/types/index.d.ts", + "default": "./build/esm/index.mjs" + }, + "require": { + "types": "./build/types/index.d.ts", + "default": "./build/cjs/index.js" + } + } + }, "typesVersions": { "<4.9": { "build/types/index.d.ts": [ diff --git a/packages/remix/package.json b/packages/remix/package.json index b5bd70796199..c170cf07de6a 100644 --- a/packages/remix/package.json +++ b/packages/remix/package.json @@ -20,9 +20,20 @@ "scripts" ], "main": "build/cjs/index.server.js", - "module": "build/esm/index.server.js", - "browser": "build/esm/index.client.js", + "module": "build/esm/index.server.mjs", + "browser": "build/esm/index.client.mjs", "types": "build/types/index.types.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "browser": { + "import": "./build/esm/index.client.mjs", + "require": "./build/cjs/index.client.js" + }, + "node": "./build/cjs/index.server.js", + "types": "./build/types/index.types.d.ts" + } + }, "typesVersions": { "<4.9": { "build/types/index.d.ts": [ diff --git a/packages/replay-canvas/package.json b/packages/replay-canvas/package.json index 59f3b173a944..1335c072634a 100644 --- a/packages/replay-canvas/package.json +++ b/packages/replay-canvas/package.json @@ -3,8 +3,21 @@ "version": "8.0.0-alpha.0", "description": "Replay canvas integration", "main": "build/npm/cjs/index.js", - "module": "build/npm/esm/index.js", + "module": "build/npm/esm/index.mjs", "types": "build/npm/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/npm/types/index.d.ts", + "default": "./build/npm/esm/index.mjs" + }, + "require": { + "types": "./build/npm/types/index.d.ts", + "default": "./build/npm/cjs/index.js" + } + } + }, "typesVersions": { "<4.9": { "build/npm/types/index.d.ts": [ diff --git a/packages/replay/package.json b/packages/replay/package.json index a2f3778c755d..909088bd275f 100644 --- a/packages/replay/package.json +++ b/packages/replay/package.json @@ -3,8 +3,21 @@ "version": "8.0.0-alpha.0", "description": "User replays for Sentry", "main": "build/npm/cjs/index.js", - "module": "build/npm/esm/index.js", + "module": "build/npm/esm/index.mjs", "types": "build/npm/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/npm/types/index.d.ts", + "default": "./build/npm/esm/index.mjs" + }, + "require": { + "types": "./build/npm/types/index.d.ts", + "default": "./build/npm/cjs/index.js" + } + } + }, "typesVersions": { "<4.9": { "build/npm/types/index.d.ts": [ diff --git a/packages/serverless/package.json b/packages/serverless/package.json index 9ff74a146de6..2aa2cecc2957 100644 --- a/packages/serverless/package.json +++ b/packages/serverless/package.json @@ -16,8 +16,21 @@ "types-ts3.8" ], "main": "build/npm/cjs/index.js", - "module": "build/npm/esm/index.js", + "module": "build/npm/esm/index.mjs", "types": "build/npm/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/npm/types/index.d.ts", + "default": "./build/npm/esm/index.mjs" + }, + "require": { + "types": "./build/npm/types/index.d.ts", + "default": "./build/npm/cjs/index.js" + } + } + }, "typesVersions": { "<4.9": { "build/npm/types/index.d.ts": [ diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 763b34455389..66988e8f899a 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -16,8 +16,21 @@ "types-ts3.8" ], "main": "build/cjs/index.js", - "module": "build/esm/index.js", + "module": "build/esm/index.mjs", "types": "build/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/types/index.d.ts", + "default": "./build/esm/index.mjs" + }, + "require": { + "types": "./build/types/index.d.ts", + "default": "./build/cjs/index.js" + } + } + }, "typesVersions": { "<4.9": { "build/types/index.d.ts": [ diff --git a/packages/sveltekit/package.json b/packages/sveltekit/package.json index f66be7f60182..d068f5d9559b 100644 --- a/packages/sveltekit/package.json +++ b/packages/sveltekit/package.json @@ -23,7 +23,7 @@ "./package.json": "./package.json", ".": { "browser": { - "import": "./build/esm/index.client.js", + "import": "./build/esm/index.client.mjs", "require": "./build/cjs/index.client.js" }, "node": "./build/cjs/index.server.js", diff --git a/packages/tracing-internal/package.json b/packages/tracing-internal/package.json index c84fb372a916..6c5411d1bd0e 100644 --- a/packages/tracing-internal/package.json +++ b/packages/tracing-internal/package.json @@ -16,8 +16,21 @@ "types-ts3.8" ], "main": "build/cjs/index.js", - "module": "build/esm/index.js", + "module": "build/esm/index.mjs", "types": "build/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/types/index.d.ts", + "default": "./build/esm/index.mjs" + }, + "require": { + "types": "./build/types/index.d.ts", + "default": "./build/cjs/index.js" + } + } + }, "typesVersions": { "<4.9": { "build/types/index.d.ts": [ diff --git a/packages/types/package.json b/packages/types/package.json index 3f45a55d3eed..6735e000b4c3 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -16,8 +16,21 @@ "types-ts3.8" ], "main": "build/cjs/index.js", - "module": "build/esm/index.js", + "module": "build/esm/index.mjs", "types": "build/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/types/index.d.ts", + "default": "./build/esm/index.mjs" + }, + "require": { + "types": "./build/types/index.d.ts", + "default": "./build/cjs/index.js" + } + } + }, "typesVersions": { "<4.9": { "build/types/index.d.ts": [ diff --git a/packages/utils/package.json b/packages/utils/package.json index d3420d8527d3..16a5f02dc1a5 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -16,8 +16,21 @@ "types-ts3.8" ], "main": "build/cjs/index.js", - "module": "build/esm/index.js", + "module": "build/esm/index.mjs", "types": "build/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/types/index.d.ts", + "default": "./build/esm/index.mjs" + }, + "require": { + "types": "./build/types/index.d.ts", + "default": "./build/cjs/index.js" + } + } + }, "typesVersions": { "<4.9": { "build/types/index.d.ts": [ diff --git a/packages/vercel-edge/package.json b/packages/vercel-edge/package.json index 248122931e8a..729b7497549f 100644 --- a/packages/vercel-edge/package.json +++ b/packages/vercel-edge/package.json @@ -16,8 +16,21 @@ "types-ts3.8" ], "main": "build/cjs/index.js", - "module": "build/esm/index.js", + "module": "build/esm/index.mjs", "types": "build/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/types/index.d.ts", + "default": "./build/esm/index.mjs" + }, + "require": { + "types": "./build/types/index.d.ts", + "default": "./build/cjs/index.js" + } + } + }, "typesVersions": { "<4.9": { "build/types/index.d.ts": [ diff --git a/packages/vue/package.json b/packages/vue/package.json index d04720683906..9af442e88cb1 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -16,8 +16,21 @@ "types-ts3.8" ], "main": "build/cjs/index.js", - "module": "build/esm/index.js", + "module": "build/esm/index.mjs", "types": "build/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/types/index.d.ts", + "default": "./build/esm/index.mjs" + }, + "require": { + "types": "./build/types/index.d.ts", + "default": "./build/cjs/index.js" + } + } + }, "typesVersions": { "<4.9": { "build/types/index.d.ts": [ diff --git a/packages/wasm/package.json b/packages/wasm/package.json index cdea694c40d6..0cb3754f1ba0 100644 --- a/packages/wasm/package.json +++ b/packages/wasm/package.json @@ -16,8 +16,21 @@ "types-ts3.8" ], "main": "build/npm/cjs/index.js", - "module": "build/npm/esm/index.js", + "module": "build/npm/esm/index.mjs", "types": "build/npm/types/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "types": "./build/npm/types/index.d.ts", + "default": "./build/npm/esm/index.mjs" + }, + "require": { + "types": "./build/npm/types/index.d.ts", + "default": "./build/npm/cjs/index.js" + } + } + }, "typesVersions": { "<4.9": { "build/npm/types/index.d.ts": [