diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ad33a150c7b..591c9f731a83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,17 @@ - "You miss 100 percent of the chances you don't take. — Wayne Gretzky" — Michael Scott -## 6.11.1 - -- fix(nextjs): Differentiate between webpack 4 and 5 in server builds (#3878) +## 6.12.0 + +- fix(nextjs): Differentiate between webpack 4 and 5 in server builds (#3878) +- fix(core): Skip native frames while searching frame URLs. (#3897) +- fix(vue): Attach props only if VM is available (#3902) +- feat(tracing): Add pg-native support to Postgres integration. (#3894) +- ref(ember): Update addon to support Ember 4.0.0 (beta) (#3915) +- feat(react): Make Profiler _mountSpan attribute protected (#3904) +- fix(ember): allow ember-beta to fail (#3910) +- fix(tracing): Prevent metrics erroring module load in web workers (#3941) +- misc(browser): Log when event is dropped by Dedupe integration (#3943) ## 6.11.0 diff --git a/lerna.json b/lerna.json index 75225f44613c..e8857e70c9ca 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "lerna": "3.4.0", - "version": "6.11.0", + "version": "6.12.0", "packages": "packages/*", "npmClient": "yarn", "useWorkspaces": true diff --git a/packages/angular/package.json b/packages/angular/package.json index 90f3978bb0bd..d0bb2cc03c6c 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/angular", - "version": "6.11.0", + "version": "6.12.0", "description": "Official Sentry SDK for Angular", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/angular", @@ -21,9 +21,9 @@ "@angular/router": "10.x || 11.x || 12.x" }, "dependencies": { - "@sentry/browser": "6.11.0", - "@sentry/types": "6.11.0", - "@sentry/utils": "6.11.0", + "@sentry/browser": "6.12.0", + "@sentry/types": "6.12.0", + "@sentry/utils": "6.12.0", "rxjs": "^6.6.0", "tslib": "^1.9.3" }, @@ -31,7 +31,7 @@ "@angular/common": "^10.0.3", "@angular/core": "^10.0.3", "@angular/router": "^10.0.3", - "@sentry-internal/eslint-config-sdk": "6.11.0", + "@sentry-internal/eslint-config-sdk": "6.12.0", "npm-run-all": "^4.1.2", "prettier": "1.19.0", "rimraf": "^2.6.3", diff --git a/packages/browser/package.json b/packages/browser/package.json index a7ae2d96e68a..a0818abc994c 100644 --- a/packages/browser/package.json +++ b/packages/browser/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/browser", - "version": "6.11.0", + "version": "6.12.0", "description": "Official Sentry SDK for browsers", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/browser", @@ -16,13 +16,13 @@ "access": "public" }, "dependencies": { - "@sentry/core": "6.11.0", - "@sentry/types": "6.11.0", - "@sentry/utils": "6.11.0", + "@sentry/core": "6.12.0", + "@sentry/types": "6.12.0", + "@sentry/utils": "6.12.0", "tslib": "^1.9.3" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "6.11.0", + "@sentry-internal/eslint-config-sdk": "6.12.0", "@types/eslint": "^7.2.0", "@types/md5": "2.1.33", "btoa": "^1.2.1", diff --git a/packages/browser/src/integrations/dedupe.ts b/packages/browser/src/integrations/dedupe.ts index 04a76708ec06..07fe3eccfb6a 100644 --- a/packages/browser/src/integrations/dedupe.ts +++ b/packages/browser/src/integrations/dedupe.ts @@ -1,4 +1,5 @@ import { Event, EventProcessor, Exception, Hub, Integration, StackFrame } from '@sentry/types'; +import { logger } from '@sentry/utils'; /** Deduplication filter */ export class Dedupe implements Integration { @@ -27,6 +28,7 @@ export class Dedupe implements Integration { // Juuust in case something goes wrong try { if (self._shouldDropEvent(currentEvent, self._previousEvent)) { + logger.warn(`Event dropped due to being a duplicate of previously captured event.`); return null; } } catch (_oO) { diff --git a/packages/core/package.json b/packages/core/package.json index b214b6afebd0..cf52721bd80b 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/core", - "version": "6.11.0", + "version": "6.12.0", "description": "Base implementation for all Sentry JavaScript SDKs", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/core", @@ -16,14 +16,14 @@ "access": "public" }, "dependencies": { - "@sentry/hub": "6.11.0", - "@sentry/minimal": "6.11.0", - "@sentry/types": "6.11.0", - "@sentry/utils": "6.11.0", + "@sentry/hub": "6.12.0", + "@sentry/minimal": "6.12.0", + "@sentry/types": "6.12.0", + "@sentry/utils": "6.12.0", "tslib": "^1.9.3" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "6.11.0", + "@sentry-internal/eslint-config-sdk": "6.12.0", "jest": "^24.7.1", "npm-run-all": "^4.1.2", "prettier": "1.19.0", diff --git a/packages/core/src/version.ts b/packages/core/src/version.ts index f691589c389e..6a691d74ec67 100644 --- a/packages/core/src/version.ts +++ b/packages/core/src/version.ts @@ -1 +1 @@ -export const SDK_VERSION = '6.11.0'; +export const SDK_VERSION = '6.12.0'; diff --git a/packages/ember/config/ember-try.js b/packages/ember/config/ember-try.js index 6927a49b123c..e54fd4886fbb 100644 --- a/packages/ember/config/ember-try.js +++ b/packages/ember/config/ember-try.js @@ -30,6 +30,7 @@ module.exports = async function() { 'ember-source': await getChannelURL('beta'), }, }, + allowedToFail: true, }, embroiderSafe(), { diff --git a/packages/ember/package.json b/packages/ember/package.json index 9aaf72be1b15..62db21d836d4 100644 --- a/packages/ember/package.json +++ b/packages/ember/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/ember", - "version": "6.11.0", + "version": "6.12.0", "description": "Official Sentry SDK for Ember.js", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/ember", @@ -32,10 +32,10 @@ }, "dependencies": { "@embroider/macros": "~0.37.0", - "@sentry/browser": "6.11.0", - "@sentry/tracing": "6.11.0", - "@sentry/types": "6.11.0", - "@sentry/utils": "6.11.0", + "@sentry/browser": "6.12.0", + "@sentry/tracing": "6.12.0", + "@sentry/types": "6.12.0", + "@sentry/utils": "6.12.0", "ember-auto-import": "^1.6.0", "ember-cli-babel": "^7.26.6", "ember-cli-htmlbars": "^5.1.2", @@ -47,7 +47,7 @@ "@embroider/test-setup": "~0.37.0", "@glimmer/component": "^1.0.0", "@glimmer/tracking": "^1.0.0", - "@sentry-internal/eslint-config-sdk": "6.11.0", + "@sentry-internal/eslint-config-sdk": "6.12.0", "@types/ember": "^3.16.5", "@types/ember-qunit": "^3.4.9", "@types/ember__test-helpers": "^1.7.0", diff --git a/packages/eslint-config-sdk/package.json b/packages/eslint-config-sdk/package.json index 87b07ee2b073..1899b00e2d7d 100644 --- a/packages/eslint-config-sdk/package.json +++ b/packages/eslint-config-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@sentry-internal/eslint-config-sdk", - "version": "6.11.0", + "version": "6.12.0", "description": "Official Sentry SDK eslint config", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/eslint-config-sdk", @@ -19,8 +19,8 @@ "access": "public" }, "dependencies": { - "@sentry-internal/eslint-plugin-sdk": "6.11.0", - "@sentry-internal/typescript": "6.11.0", + "@sentry-internal/eslint-plugin-sdk": "6.12.0", + "@sentry-internal/typescript": "6.12.0", "@typescript-eslint/eslint-plugin": "^3.9.0", "@typescript-eslint/parser": "^3.9.0", "eslint-config-prettier": "^6.11.0", diff --git a/packages/eslint-plugin-sdk/package.json b/packages/eslint-plugin-sdk/package.json index 889345dee3b7..8373606c585d 100644 --- a/packages/eslint-plugin-sdk/package.json +++ b/packages/eslint-plugin-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@sentry-internal/eslint-plugin-sdk", - "version": "6.11.0", + "version": "6.12.0", "description": "Official Sentry SDK eslint plugin", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/eslint-plugin-sdk", diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 3982b4dee6c2..377a65c25236 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/gatsby", - "version": "6.11.0", + "version": "6.12.0", "description": "Official Sentry SDK for Gatsby.js", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/gatsby", @@ -26,14 +26,14 @@ "access": "public" }, "dependencies": { - "@sentry/react": "6.11.0", - "@sentry/tracing": "6.11.0" + "@sentry/react": "6.12.0", + "@sentry/tracing": "6.12.0" }, "peerDependencies": { "gatsby": "^2.0.0 || ^3.0.0" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "6.11.0", + "@sentry-internal/eslint-config-sdk": "6.12.0", "@testing-library/react": "^10.4.9", "jest": "^24.7.1", "npm-run-all": "^4.1.2", diff --git a/packages/hub/package.json b/packages/hub/package.json index df53fd514637..acc51111cbb2 100644 --- a/packages/hub/package.json +++ b/packages/hub/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/hub", - "version": "6.11.0", + "version": "6.12.0", "description": "Sentry hub which handles global state managment.", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/hub", @@ -16,12 +16,12 @@ "access": "public" }, "dependencies": { - "@sentry/types": "6.11.0", - "@sentry/utils": "6.11.0", + "@sentry/types": "6.12.0", + "@sentry/utils": "6.12.0", "tslib": "^1.9.3" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "6.11.0", + "@sentry-internal/eslint-config-sdk": "6.12.0", "jest": "^24.7.1", "npm-run-all": "^4.1.2", "prettier": "1.19.0", diff --git a/packages/integrations/package.json b/packages/integrations/package.json index 69978f6cf42a..736afad80b7a 100644 --- a/packages/integrations/package.json +++ b/packages/integrations/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/integrations", - "version": "6.11.0", + "version": "6.12.0", "description": "Pluggable integrations that can be used to enhance JS SDKs", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/integrations", @@ -16,13 +16,13 @@ "module": "esm/index.js", "types": "dist/index.d.ts", "dependencies": { - "@sentry/types": "6.11.0", - "@sentry/utils": "6.11.0", + "@sentry/types": "6.12.0", + "@sentry/utils": "6.12.0", "localforage": "^1.8.1", "tslib": "^1.9.3" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "6.11.0", + "@sentry-internal/eslint-config-sdk": "6.12.0", "chai": "^4.1.2", "jest": "^24.7.1", "npm-run-all": "^4.1.2", diff --git a/packages/integrations/src/dedupe.ts b/packages/integrations/src/dedupe.ts index 04a76708ec06..07fe3eccfb6a 100644 --- a/packages/integrations/src/dedupe.ts +++ b/packages/integrations/src/dedupe.ts @@ -1,4 +1,5 @@ import { Event, EventProcessor, Exception, Hub, Integration, StackFrame } from '@sentry/types'; +import { logger } from '@sentry/utils'; /** Deduplication filter */ export class Dedupe implements Integration { @@ -27,6 +28,7 @@ export class Dedupe implements Integration { // Juuust in case something goes wrong try { if (self._shouldDropEvent(currentEvent, self._previousEvent)) { + logger.warn(`Event dropped due to being a duplicate of previously captured event.`); return null; } } catch (_oO) { diff --git a/packages/minimal/package.json b/packages/minimal/package.json index b31d05dbf7a0..4176735fa397 100644 --- a/packages/minimal/package.json +++ b/packages/minimal/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/minimal", - "version": "6.11.0", + "version": "6.12.0", "description": "Sentry minimal library that can be used in other packages", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/minimal", @@ -16,12 +16,12 @@ "access": "public" }, "dependencies": { - "@sentry/hub": "6.11.0", - "@sentry/types": "6.11.0", + "@sentry/hub": "6.12.0", + "@sentry/types": "6.12.0", "tslib": "^1.9.3" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "6.11.0", + "@sentry-internal/eslint-config-sdk": "6.12.0", "jest": "^24.7.1", "npm-run-all": "^4.1.2", "prettier": "1.19.0", diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index 2d3b889d804a..c5d7028cfbb2 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/nextjs", - "version": "6.11.0", + "version": "6.12.0", "description": "Official Sentry SDK for Next.js", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/nextjs", @@ -17,17 +17,17 @@ "access": "public" }, "dependencies": { - "@sentry/core": "6.11.0", - "@sentry/integrations": "6.11.0", - "@sentry/node": "6.11.0", - "@sentry/react": "6.11.0", - "@sentry/tracing": "6.11.0", - "@sentry/utils": "6.11.0", + "@sentry/core": "6.12.0", + "@sentry/integrations": "6.12.0", + "@sentry/node": "6.12.0", + "@sentry/react": "6.12.0", + "@sentry/tracing": "6.12.0", + "@sentry/utils": "6.12.0", "@sentry/webpack-plugin": "1.17.1", "tslib": "^1.9.3" }, "devDependencies": { - "@sentry/types": "6.11.0", + "@sentry/types": "6.12.0", "@types/webpack": "^5.28.0", "eslint": "7.20.0", "next": "10.1.3", diff --git a/packages/nextjs/src/config/index.ts b/packages/nextjs/src/config/index.ts index 499c96805d9d..5cc4d5964893 100644 --- a/packages/nextjs/src/config/index.ts +++ b/packages/nextjs/src/config/index.ts @@ -15,7 +15,7 @@ export function withSentryConfig( // If the user has passed us a function, we need to return a function, so that we have access to `phase` and // `defaults` in order to pass them along to the user's function if (typeof userNextConfig === 'function') { - return function(phase: string, defaults: { defaultConfig: { [key: string]: unknown } }): NextConfigObject { + return function(phase: string, defaults: { defaultConfig: NextConfigObject }): NextConfigObject { const materializedUserNextConfig = userNextConfig(phase, defaults); return { ...materializedUserNextConfig, diff --git a/packages/nextjs/test/config.test.ts b/packages/nextjs/test/config.test.ts index 29e575452ed6..eda16631d1a0 100644 --- a/packages/nextjs/test/config.test.ts +++ b/packages/nextjs/test/config.test.ts @@ -33,7 +33,7 @@ const mockExistsSync = (path: fs.PathLike) => { const exitsSync = jest.spyOn(fs, 'existsSync').mockImplementation(mockExistsSync); /** Mocks of the arguments passed to `withSentryConfig` */ -const userNextConfig = { +const userNextConfig: Partial = { publicRuntimeConfig: { location: 'dogpark', activities: ['fetch', 'chasing', 'digging'] }, webpack: (config: WebpackConfigObject, _options: BuildContext) => ({ ...config, @@ -51,7 +51,9 @@ process.env.SENTRY_RELEASE = 'doGsaREgReaT'; /** Mocks of the arguments passed to the result of `withSentryConfig` (when it's a function). */ const runtimePhase = 'ball-fetching'; -const defaultNextConfig = { nappingHoursPerDay: 20, oversizeFeet: true, shouldChaseTail: true }; +// `defaultConfig` is the defaults for all nextjs options (we don't use these at all in the tests, so for our purposes +// here the values don't matter) +const defaultsObject = { defaultConfig: {} }; /** mocks of the arguments passed to `nextConfig.webpack` */ const serverWebpackConfig = { @@ -84,15 +86,21 @@ const clientWebpackConfig = { context: '/Users/Maisey/projects/squirrelChasingSimulator', }; -const baseBuildContext = { - dev: false, - buildId: 'sItStAyLiEdOwN', - dir: '/Users/Maisey/projects/squirrelChasingSimulator', - config: { target: 'server' as const }, - webpack: { version: '5.4.15' }, -}; -const serverBuildContext = { isServer: true, ...baseBuildContext }; -const clientBuildContext = { isServer: false, ...baseBuildContext }; +// In real life, next will copy the `userNextConfig` into the `buildContext`. Since we're providing mocks for both of +// those, we need to mimic that behavior, and since `userNextConfig` can vary per test, we need to have the option do it +// dynamically. +function getBuildContext(buildTarget: 'server' | 'client', userNextConfig: Partial): BuildContext { + return { + dev: false, + buildId: 'sItStAyLiEdOwN', + dir: '/Users/Maisey/projects/squirrelChasingSimulator', + config: { target: 'server', ...userNextConfig }, + webpack: { version: '5.4.15' }, + isServer: buildTarget === 'server', + }; +} +const serverBuildContext = getBuildContext('server', userNextConfig); +const clientBuildContext = getBuildContext('client', userNextConfig); /** * Derive the final values of all next config options, by first applying `withSentryConfig` and then, if it returns a @@ -114,9 +122,7 @@ function materializeFinalNextConfig( if (typeof sentrifiedConfig === 'function') { // for some reason TS won't recognize that `finalConfigValues` is now a NextConfigObject, which is why the cast // below is necessary - finalConfigValues = sentrifiedConfig(runtimePhase, { - defaultConfig: defaultNextConfig, - }); + finalConfigValues = sentrifiedConfig(runtimePhase, defaultsObject); } return finalConfigValues as NextConfigObject; @@ -145,11 +151,7 @@ async function materializeFinalWebpackConfig(options: { // if the user's next config is a function, run it so we have access to the values const materializedUserNextConfig = - typeof userNextConfig === 'function' - ? userNextConfig('phase-production-build', { - defaultConfig: {}, - }) - : userNextConfig; + typeof userNextConfig === 'function' ? userNextConfig('phase-production-build', defaultsObject) : userNextConfig; // get the webpack config function we'd normally pass back to next const webpackConfigFunction = constructWebpackConfigFunction( @@ -211,9 +213,7 @@ describe('withSentryConfig', () => { materializeFinalNextConfig(userNextConfigFunction); - expect(userNextConfigFunction).toHaveBeenCalledWith(runtimePhase, { - defaultConfig: defaultNextConfig, - }); + expect(userNextConfigFunction).toHaveBeenCalledWith(runtimePhase, defaultsObject); }); }); @@ -243,7 +243,7 @@ describe('webpack config', () => { // Run the user's webpack config function, so we can check the results against ours. Delete `entry` because we'll // test it separately, and besides, it's one that we *should* be overwriting. - const materializedUserWebpackConfig = userNextConfig.webpack(serverWebpackConfig, serverBuildContext); + const materializedUserWebpackConfig = userNextConfig.webpack!(serverWebpackConfig, serverBuildContext); // @ts-ignore `entry` may be required in real life, but we don't need it for our tests delete materializedUserWebpackConfig.entry; @@ -377,10 +377,13 @@ describe('Sentry webpack plugin config', () => { }); it('has the correct value when building serverless server bundles', async () => { + const userNextConfigServerless = { ...userNextConfig }; + userNextConfigServerless.target = 'experimental-serverless-trace'; + const finalWebpackConfig = await materializeFinalWebpackConfig({ - userNextConfig, + userNextConfig: userNextConfigServerless, incomingWebpackConfig: serverWebpackConfig, - incomingWebpackBuildContext: { ...serverBuildContext, config: { target: 'experimental-serverless-trace' } }, + incomingWebpackBuildContext: getBuildContext('server', userNextConfigServerless), }); const sentryWebpackPlugin = finalWebpackConfig.plugins?.[0] as SentryWebpackPluginType; @@ -391,10 +394,13 @@ describe('Sentry webpack plugin config', () => { }); it('has the correct value when building serverful server bundles using webpack 4', async () => { + const serverBuildContextWebpack4 = getBuildContext('server', userNextConfig); + serverBuildContextWebpack4.webpack.version = '4.15.13'; + const finalWebpackConfig = await materializeFinalWebpackConfig({ userNextConfig, incomingWebpackConfig: serverWebpackConfig, - incomingWebpackBuildContext: { ...serverBuildContext, webpack: { version: '4.15.13' } }, + incomingWebpackBuildContext: serverBuildContextWebpack4, }); const sentryWebpackPlugin = finalWebpackConfig.plugins?.[0] as SentryWebpackPluginType; diff --git a/packages/nextjs/test/integration/next-env.d.ts b/packages/nextjs/test/integration/next-env.d.ts index c6643fda12ff..9bc3dd46b9d9 100644 --- a/packages/nextjs/test/integration/next-env.d.ts +++ b/packages/nextjs/test/integration/next-env.d.ts @@ -1,3 +1,6 @@ /// /// /// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/packages/nextjs/test/integration/pages/users/[id].tsx b/packages/nextjs/test/integration/pages/users/[id].tsx index 11caea6c6c8b..ad7be7d0b07e 100644 --- a/packages/nextjs/test/integration/pages/users/[id].tsx +++ b/packages/nextjs/test/integration/pages/users/[id].tsx @@ -52,6 +52,6 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { // will receive `item` as a prop at build time return { props: { item } }; } catch (err) { - return { props: { errors: err.message } }; + return { props: { errors: (err as Error).message } }; } }; diff --git a/packages/nextjs/test/integration/test/client/sessionNavigate.js b/packages/nextjs/test/integration/test/client/sessionNavigate.js index 6a07f87dfdb5..1ed68a779568 100644 --- a/packages/nextjs/test/integration/test/client/sessionNavigate.js +++ b/packages/nextjs/test/integration/test/client/sessionNavigate.js @@ -10,7 +10,7 @@ module.exports = async ({ page, url, requests }) => { errors: 0, }); - await sleep(100); + await sleep(250); await waitForAll([ page.click('a#alsoHealthy'), @@ -24,7 +24,7 @@ module.exports = async ({ page, url, requests }) => { errors: 0, }); - await sleep(100); + await sleep(250); expectSession(requests.sessions[2], { init: true, @@ -32,7 +32,7 @@ module.exports = async ({ page, url, requests }) => { errors: 0, }); - await sleep(100); + await sleep(250); await waitForAll([ page.click('a#healthy'), diff --git a/packages/nextjs/test/integration/test/client/tracingNavigate.js b/packages/nextjs/test/integration/test/client/tracingNavigate.js index d057203063fa..65894f857177 100644 --- a/packages/nextjs/test/integration/test/client/tracingNavigate.js +++ b/packages/nextjs/test/integration/test/client/tracingNavigate.js @@ -15,7 +15,7 @@ module.exports = async ({ page, url, requests }) => { }, }); - await sleep(100); + await sleep(250); await page.click('a#alsoHealthy'); await page.waitForRequest(isTransactionRequest); @@ -33,7 +33,7 @@ module.exports = async ({ page, url, requests }) => { }, }); - await sleep(100); + await sleep(250); await page.click('a#healthy'); await page.waitForRequest(isTransactionRequest); diff --git a/packages/nextjs/test/integration/test/server/errorApiEndpoint.js b/packages/nextjs/test/integration/test/server/errorApiEndpoint.js index f0d9985a1871..00e3ab128d81 100644 --- a/packages/nextjs/test/integration/test/server/errorApiEndpoint.js +++ b/packages/nextjs/test/integration/test/server/errorApiEndpoint.js @@ -49,7 +49,7 @@ module.exports = async ({ url: urlBase, argv }) => { ); await getAsync(url); - await sleep(100); + await sleep(250); assert.ok(capturedErrorRequest.isDone(), 'Did not intercept expected error request'); assert.ok(capturedTransactionRequest.isDone(), 'Did not intercept expected transaction request'); diff --git a/packages/nextjs/test/integration/test/server/errorServerSideProps.js b/packages/nextjs/test/integration/test/server/errorServerSideProps.js index b18b099f8af0..a6c622de5db5 100644 --- a/packages/nextjs/test/integration/test/server/errorServerSideProps.js +++ b/packages/nextjs/test/integration/test/server/errorServerSideProps.js @@ -29,7 +29,7 @@ module.exports = async ({ url: urlBase, argv }) => { ); await getAsync(url); - await sleep(100); + await sleep(250); assert.ok(capturedRequest.isDone(), 'Did not intercept expected request'); }; diff --git a/packages/nextjs/test/integration/test/server/tracing200.js b/packages/nextjs/test/integration/test/server/tracing200.js index fa8ae1d69abb..91d767e74967 100644 --- a/packages/nextjs/test/integration/test/server/tracing200.js +++ b/packages/nextjs/test/integration/test/server/tracing200.js @@ -26,7 +26,7 @@ module.exports = async ({ url: urlBase, argv }) => { ); await getAsync(url); - await sleep(100); + await sleep(250); assert.ok(capturedRequest.isDone(), 'Did not intercept expected request'); }; diff --git a/packages/nextjs/test/integration/test/server/tracing500.js b/packages/nextjs/test/integration/test/server/tracing500.js index 1958478a598f..54c565f43f23 100644 --- a/packages/nextjs/test/integration/test/server/tracing500.js +++ b/packages/nextjs/test/integration/test/server/tracing500.js @@ -25,7 +25,7 @@ module.exports = async ({ url: urlBase, argv }) => { ); await getAsync(url); - await sleep(100); + await sleep(250); assert.ok(capturedRequest.isDone(), 'Did not intercept expected request'); }; diff --git a/packages/nextjs/test/integration/test/server/tracingHttp.js b/packages/nextjs/test/integration/test/server/tracingHttp.js index 27d989c4395a..edb31393048c 100644 --- a/packages/nextjs/test/integration/test/server/tracingHttp.js +++ b/packages/nextjs/test/integration/test/server/tracingHttp.js @@ -40,7 +40,7 @@ module.exports = async ({ url: urlBase, argv }) => { ); await getAsync(url); - await sleep(100); + await sleep(250); assert.ok(capturedRequest.isDone(), 'Did not intercept expected request'); }; diff --git a/packages/node/package.json b/packages/node/package.json index ae78fa42433e..05870b804ff6 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/node", - "version": "6.11.0", + "version": "6.12.0", "description": "Official Sentry SDK for Node.js", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/node", @@ -16,18 +16,18 @@ "access": "public" }, "dependencies": { - "@sentry/core": "6.11.0", - "@sentry/hub": "6.11.0", - "@sentry/tracing": "6.11.0", - "@sentry/types": "6.11.0", - "@sentry/utils": "6.11.0", + "@sentry/core": "6.12.0", + "@sentry/hub": "6.12.0", + "@sentry/tracing": "6.12.0", + "@sentry/types": "6.12.0", + "@sentry/utils": "6.12.0", "cookie": "^0.4.1", "https-proxy-agent": "^5.0.0", "lru_map": "^0.3.3", "tslib": "^1.9.3" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "6.11.0", + "@sentry-internal/eslint-config-sdk": "6.12.0", "@types/cookie": "0.3.2", "@types/express": "^4.17.2", "@types/lru-cache": "^5.1.0", diff --git a/packages/node/test/manual/express-scope-separation/start.js b/packages/node/test/manual/express-scope-separation/start.js index cede1120df41..7523f059648b 100644 --- a/packages/node/test/manual/express-scope-separation/start.js +++ b/packages/node/test/manual/express-scope-separation/start.js @@ -32,22 +32,27 @@ Sentry.init({ dsn: 'http://test@example.com/1337', transport: DummyTransport, beforeSend(event) { - if (event.message === 'Error: foo') { + if (event.transaction === 'GET /foo') { assertTags(event.tags, { global: 'wat', foo: 'wat', }); - } else if (event.message === 'Error: bar') { + } else if (event.transaction === 'GET /bar') { assertTags(event.tags, { global: 'wat', bar: 'wat', }); - } else if (event.message === 'Error: baz') { + } else if (event.transaction === 'GET /baz') { assertTags(event.tags, { global: 'wat', baz: 'wat', }); + } else { + assertTags(event.tags, { + global: 'wat', + }); } + return event; }, }); diff --git a/packages/react/package.json b/packages/react/package.json index 3c1dca3de811..825af9905a84 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/react", - "version": "6.11.0", + "version": "6.12.0", "description": "Official Sentry SDK for React.js", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/react", @@ -16,10 +16,10 @@ "access": "public" }, "dependencies": { - "@sentry/browser": "6.11.0", - "@sentry/minimal": "6.11.0", - "@sentry/types": "6.11.0", - "@sentry/utils": "6.11.0", + "@sentry/browser": "6.12.0", + "@sentry/minimal": "6.12.0", + "@sentry/types": "6.12.0", + "@sentry/utils": "6.12.0", "hoist-non-react-statics": "^3.3.2", "tslib": "^1.9.3" }, @@ -27,7 +27,7 @@ "react": "15.x || 16.x || 17.x" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "6.11.0", + "@sentry-internal/eslint-config-sdk": "6.12.0", "@testing-library/react": "^11.2.6", "@testing-library/react-hooks": "^5.1.1", "@types/history-4": "npm:@types/history@4.7.8", diff --git a/packages/serverless/package.json b/packages/serverless/package.json index fd15f47ec8f6..e43928626282 100644 --- a/packages/serverless/package.json +++ b/packages/serverless/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/serverless", - "version": "6.11.0", + "version": "6.12.0", "description": "Official Sentry SDK for various serverless solutions", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/serverless", @@ -16,11 +16,11 @@ "access": "public" }, "dependencies": { - "@sentry/minimal": "6.11.0", - "@sentry/node": "6.11.0", - "@sentry/tracing": "6.11.0", - "@sentry/types": "6.11.0", - "@sentry/utils": "6.11.0", + "@sentry/minimal": "6.12.0", + "@sentry/node": "6.12.0", + "@sentry/tracing": "6.12.0", + "@sentry/types": "6.12.0", + "@sentry/utils": "6.12.0", "@types/aws-lambda": "^8.10.62", "@types/express": "^4.17.2", "tslib": "^1.9.3" @@ -30,7 +30,7 @@ "@google-cloud/common": "^3.4.1", "@google-cloud/functions-framework": "^1.7.1", "@google-cloud/pubsub": "^2.5.0", - "@sentry-internal/eslint-config-sdk": "6.11.0", + "@sentry-internal/eslint-config-sdk": "6.12.0", "@types/node": "^14.6.4", "aws-sdk": "^2.765.0", "find-up": "^5.0.0", diff --git a/packages/tracing/package.json b/packages/tracing/package.json index c3cd97a140b5..8bfabf2f78f4 100644 --- a/packages/tracing/package.json +++ b/packages/tracing/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/tracing", - "version": "6.11.0", + "version": "6.12.0", "description": "Extensions for Sentry AM", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/tracing", @@ -16,15 +16,15 @@ "access": "public" }, "dependencies": { - "@sentry/hub": "6.11.0", - "@sentry/minimal": "6.11.0", - "@sentry/types": "6.11.0", - "@sentry/utils": "6.11.0", + "@sentry/hub": "6.12.0", + "@sentry/minimal": "6.12.0", + "@sentry/types": "6.12.0", + "@sentry/utils": "6.12.0", "tslib": "^1.9.3" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "6.11.0", - "@sentry/browser": "6.11.0", + "@sentry-internal/eslint-config-sdk": "6.12.0", + "@sentry/browser": "6.12.0", "@types/express": "^4.17.1", "@types/jsdom": "^16.2.3", "jest": "^24.7.1", diff --git a/packages/tracing/src/browser/metrics.ts b/packages/tracing/src/browser/metrics.ts index d7bfd434ba5c..b8b3e51f3467 100644 --- a/packages/tracing/src/browser/metrics.ts +++ b/packages/tracing/src/browser/metrics.ts @@ -23,7 +23,7 @@ export class MetricsInstrumentation { private _clsEntry: LayoutShift | undefined; public constructor() { - if (!isNodeEnv() && global?.performance) { + if (!isNodeEnv() && global?.performance && global?.document) { if (global.performance.mark) { global.performance.mark('sentry-tracing-init'); } diff --git a/packages/tracing/test/browser/metrics.test.ts b/packages/tracing/test/browser/metrics.test.ts index 114a9a480798..5dc7ae50ff3e 100644 --- a/packages/tracing/test/browser/metrics.test.ts +++ b/packages/tracing/test/browser/metrics.test.ts @@ -173,6 +173,10 @@ describe('addResourceSpans', () => { }); describe('MetricsInstrumentation', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + it('does not initialize trackers when on node', () => { const trackers = ['_trackCLS', '_trackLCP', '_trackFID'].map(tracker => jest.spyOn(MetricsInstrumentation.prototype as any, tracker), @@ -183,17 +187,38 @@ describe('MetricsInstrumentation', () => { trackers.forEach(tracker => expect(tracker).not.toBeCalled()); }); - it('initializes trackers when not on node and `global.performance` is available.', () => { + it('initializes trackers when not on node and `global.performance` and `global.document` are available.', () => { addDOMPropertiesToGlobal(['performance', 'document', 'addEventListener', 'window']); + const backup = global.process; global.process = undefined; const trackers = ['_trackCLS', '_trackLCP', '_trackFID'].map(tracker => jest.spyOn(MetricsInstrumentation.prototype as any, tracker), ); + new MetricsInstrumentation(); global.process = backup; trackers.forEach(tracker => expect(tracker).toBeCalled()); }); + + it('does not initialize trackers when not on node but `global.document` is not available (in worker)', () => { + // window not necessary for this test, but it is here to exercise that it is absence of document that is checked + addDOMPropertiesToGlobal(['performance', 'addEventListener', 'window']); + + const processBackup = global.process; + global.process = undefined; + const documentBackup = global.document; + global.document = undefined; + + const trackers = ['_trackCLS', '_trackLCP', '_trackFID'].map(tracker => + jest.spyOn(MetricsInstrumentation.prototype as any, tracker), + ); + new MetricsInstrumentation(); + global.process = processBackup; + global.document = documentBackup; + + trackers.forEach(tracker => expect(tracker).not.toBeCalled()); + }); }); diff --git a/packages/types/package.json b/packages/types/package.json index 2629ccf7e41b..119c93754830 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/types", - "version": "6.11.0", + "version": "6.12.0", "description": "Types for all Sentry JavaScript SDKs", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/types", @@ -16,7 +16,7 @@ "access": "public" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "6.11.0", + "@sentry-internal/eslint-config-sdk": "6.12.0", "npm-run-all": "^4.1.2", "prettier": "1.19.0", "typescript": "3.7.5" diff --git a/packages/typescript/package.json b/packages/typescript/package.json index 169ddca2eabd..64d09596d026 100644 --- a/packages/typescript/package.json +++ b/packages/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@sentry-internal/typescript", - "version": "6.11.0", + "version": "6.12.0", "description": "Typescript configuration used at Sentry", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/typescript", diff --git a/packages/utils/package.json b/packages/utils/package.json index 9b5129ec6b46..cb773ac12a21 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/utils", - "version": "6.11.0", + "version": "6.12.0", "description": "Utilities for all Sentry JavaScript SDKs", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/utils", @@ -16,11 +16,11 @@ "access": "public" }, "dependencies": { - "@sentry/types": "6.11.0", + "@sentry/types": "6.12.0", "tslib": "^1.9.3" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "6.11.0", + "@sentry-internal/eslint-config-sdk": "6.12.0", "chai": "^4.1.2", "jest": "^24.7.1", "jsdom": "^16.2.2", diff --git a/packages/vue/package.json b/packages/vue/package.json index 8d8ee0395f77..65767c25d512 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/vue", - "version": "6.11.0", + "version": "6.12.0", "description": "Official Sentry SDK for Vue.js", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/vue", @@ -16,11 +16,11 @@ "access": "public" }, "dependencies": { - "@sentry/browser": "6.11.0", - "@sentry/core": "6.11.0", - "@sentry/minimal": "6.11.0", - "@sentry/types": "6.11.0", - "@sentry/utils": "6.11.0", + "@sentry/browser": "6.12.0", + "@sentry/core": "6.12.0", + "@sentry/minimal": "6.12.0", + "@sentry/types": "6.12.0", + "@sentry/utils": "6.12.0", "tslib": "^1.9.3" }, "peerDependencies": { @@ -28,7 +28,7 @@ "vue-router": "3.x || 4.x" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "6.11.0", + "@sentry-internal/eslint-config-sdk": "6.12.0", "jest": "^24.7.1", "jsdom": "^16.2.2", "npm-run-all": "^4.1.2", diff --git a/packages/wasm/package.json b/packages/wasm/package.json index 912e428091c6..4422646762a4 100644 --- a/packages/wasm/package.json +++ b/packages/wasm/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/wasm", - "version": "6.11.0", + "version": "6.12.0", "description": "Support for WASM.", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/wasm", @@ -16,12 +16,12 @@ "access": "public" }, "dependencies": { - "@sentry/browser": "6.11.0", - "@sentry/types": "6.11.0", + "@sentry/browser": "6.12.0", + "@sentry/types": "6.12.0", "tslib": "^1.9.3" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "6.11.0", + "@sentry-internal/eslint-config-sdk": "6.12.0", "@types/jest-environment-puppeteer": "^4.4.0", "@types/puppeteer": "^5.4.0", "cross-env": "^7.0.3", diff --git a/yarn.lock b/yarn.lock index db8e8254cd8f..e6717881081e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6533,7 +6533,7 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chownr@^1.1.1, chownr@^1.1.2: +chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== @@ -10416,7 +10416,7 @@ fs-merger@^3.1.0: rimraf "^2.6.3" walk-sync "^2.0.2" -fs-minipass@^1.2.5: +fs-minipass@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== @@ -14505,7 +14505,7 @@ minimist@~0.0.1: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= -minipass@^2.2.0, minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: +minipass@^2.2.0, minipass@^2.3.5, minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== @@ -14513,7 +14513,7 @@ minipass@^2.2.0, minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2. safe-buffer "^5.1.2" yallist "^3.0.0" -minizlib@^1.2.1: +minizlib@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== @@ -17896,7 +17896,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -19263,17 +19263,17 @@ tar-stream@^2.1.4: readable-stream "^3.1.1" tar@^4.4.10, tar@^4.4.8: - version "4.4.15" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.15.tgz#3caced4f39ebd46ddda4d6203d48493a919697f8" - integrity sha512-ItbufpujXkry7bHH9NpQyTXPbJ72iTlXgkBAYsAjDXk3Ds8t/3NfO5P4xZGy7u+sYuQUbimgzswX4uQIEeNVOA== + version "4.4.19" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" teeny-request@6.0.1: version "6.0.1" @@ -20932,7 +20932,7 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==