From d640f09347e060f46274e7f9e5561fcda57570f4 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 30 Nov 2021 13:54:51 -0500 Subject: [PATCH 01/14] feat(core): Add metadata builder Abstract away the metadata building logic into it's own function that every sdk should use. Lives in @sentry/core as it needs access to the SDK_VERSION. --- packages/browser/src/exports.ts | 1 + packages/core/src/index.ts | 1 + packages/core/src/metadata.ts | 20 ++++++++++++++++++++ packages/node/src/index.ts | 1 + 4 files changed, 23 insertions(+) create mode 100644 packages/core/src/metadata.ts diff --git a/packages/browser/src/exports.ts b/packages/browser/src/exports.ts index cbe5c0c4f262..313553e9a588 100644 --- a/packages/browser/src/exports.ts +++ b/packages/browser/src/exports.ts @@ -18,6 +18,7 @@ export { export { addGlobalEventProcessor, addBreadcrumb, + buildMetadata, captureException, captureEvent, captureMessage, diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 5fe8450de3ed..6ed2f4ef6811 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -21,6 +21,7 @@ export { eventToSentryRequest, sessionToSentryRequest } from './request'; export { initAndBind, ClientClass } from './sdk'; export { NoopTransport } from './transports/noop'; export { SDK_VERSION } from './version'; +export { buildMetadata } from './metadata'; import * as Integrations from './integrations'; diff --git a/packages/core/src/metadata.ts b/packages/core/src/metadata.ts new file mode 100644 index 000000000000..a20983538036 --- /dev/null +++ b/packages/core/src/metadata.ts @@ -0,0 +1,20 @@ +import { SdkMetadata } from '@sentry/types'; + +import { SDK_VERSION } from './version'; + +const SDK_NAME_PREFIX = 'sentry.javascript'; +const PACKAGE_NAME_PREFIX = 'npm:@sentry/'; + +/** */ +export function buildMetadata(name: string, packageNames: string[], metadata: SdkMetadata = {}): SdkMetadata { + metadata.sdk = metadata.sdk || { + name: `${SDK_NAME_PREFIX}.${name}`, + packages: packageNames.map(name => ({ + name: `${PACKAGE_NAME_PREFIX}/${name}`, + version: SDK_VERSION, + })), + version: SDK_VERSION, + }; + + return metadata; +} diff --git a/packages/node/src/index.ts b/packages/node/src/index.ts index b3bae88dfa8a..39915137261e 100644 --- a/packages/node/src/index.ts +++ b/packages/node/src/index.ts @@ -18,6 +18,7 @@ export { export { addGlobalEventProcessor, addBreadcrumb, + buildMetadata, captureException, captureEvent, captureMessage, From 3f3a244836bebd46155b4e410cb0abd2abc7d27f Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 30 Nov 2021 13:56:11 -0500 Subject: [PATCH 02/14] feat(nextjs): Convert nextjs to use buildMetadata --- packages/nextjs/src/constants.ts | 5 +++ packages/nextjs/src/index.client.ts | 7 ++- packages/nextjs/src/index.server.ts | 7 ++- packages/nextjs/src/utils/metadataBuilder.ts | 45 -------------------- 4 files changed, 11 insertions(+), 53 deletions(-) create mode 100644 packages/nextjs/src/constants.ts delete mode 100644 packages/nextjs/src/utils/metadataBuilder.ts diff --git a/packages/nextjs/src/constants.ts b/packages/nextjs/src/constants.ts new file mode 100644 index 000000000000..5283b73e994b --- /dev/null +++ b/packages/nextjs/src/constants.ts @@ -0,0 +1,5 @@ +export const NEXTJS_PACKAGE_NAME = 'nextjs'; + +export const REACT_PACKAGE_NAME = 'react'; + +export const NODE_PACKAGE_NAME = 'node'; diff --git a/packages/nextjs/src/index.client.ts b/packages/nextjs/src/index.client.ts index 970cadb00a06..f71991c6718f 100644 --- a/packages/nextjs/src/index.client.ts +++ b/packages/nextjs/src/index.client.ts @@ -1,8 +1,8 @@ -import { configureScope, init as reactInit, Integrations as BrowserIntegrations } from '@sentry/react'; +import { buildMetadata, configureScope, init as reactInit, Integrations as BrowserIntegrations } from '@sentry/react'; import { defaultRequestInstrumentationOptions, Integrations as TracingIntegrations } from '@sentry/tracing'; +import { NEXTJS_PACKAGE_NAME, REACT_PACKAGE_NAME } from './constants'; import { nextRouterInstrumentation } from './performance/client'; -import { MetadataBuilder } from './utils/metadataBuilder'; import { NextjsOptions } from './utils/nextjsOptions'; import { addIntegration, UserIntegrations } from './utils/userIntegrations'; @@ -14,8 +14,7 @@ export const Integrations = { ...BrowserIntegrations, BrowserTracing }; /** Inits the Sentry NextJS SDK on the browser with the React SDK. */ export function init(options: NextjsOptions): void { - const metadataBuilder = new MetadataBuilder(options, ['nextjs', 'react']); - metadataBuilder.addSdkMetadata(); + options._metadata = buildMetadata(NEXTJS_PACKAGE_NAME, [NEXTJS_PACKAGE_NAME, REACT_PACKAGE_NAME], options._metadata); options.environment = options.environment || process.env.NODE_ENV; // Only add BrowserTracing if a tracesSampleRate or tracesSampler is set diff --git a/packages/nextjs/src/index.server.ts b/packages/nextjs/src/index.server.ts index 6fd4e1fce468..11c26203930a 100644 --- a/packages/nextjs/src/index.server.ts +++ b/packages/nextjs/src/index.server.ts @@ -1,13 +1,13 @@ import { Carrier, getHubFromCarrier, getMainCarrier } from '@sentry/hub'; import { RewriteFrames } from '@sentry/integrations'; -import { configureScope, getCurrentHub, init as nodeInit, Integrations } from '@sentry/node'; +import { buildMetadata, configureScope, getCurrentHub, init as nodeInit, Integrations } from '@sentry/node'; import { Event } from '@sentry/types'; import { escapeStringForRegex, logger } from '@sentry/utils'; import * as domainModule from 'domain'; import * as path from 'path'; +import { NEXTJS_PACKAGE_NAME, NODE_PACKAGE_NAME } from './constants'; import { instrumentServer } from './utils/instrumentServer'; -import { MetadataBuilder } from './utils/metadataBuilder'; import { NextjsOptions } from './utils/nextjsOptions'; import { addIntegration } from './utils/userIntegrations'; @@ -33,8 +33,7 @@ export function init(options: NextjsOptions): void { return; } - const metadataBuilder = new MetadataBuilder(options, ['nextjs', 'node']); - metadataBuilder.addSdkMetadata(); + options._metadata = buildMetadata(NEXTJS_PACKAGE_NAME, [NEXTJS_PACKAGE_NAME, NODE_PACKAGE_NAME], options._metadata); options.environment = options.environment || process.env.NODE_ENV; addServerIntegrations(options); // Right now we only capture frontend sessions for Next.js diff --git a/packages/nextjs/src/utils/metadataBuilder.ts b/packages/nextjs/src/utils/metadataBuilder.ts deleted file mode 100644 index 8dba9f821ebc..000000000000 --- a/packages/nextjs/src/utils/metadataBuilder.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { SDK_VERSION } from '@sentry/core'; -import { Package, SdkInfo } from '@sentry/types'; - -import { NextjsOptions } from './nextjsOptions'; - -export const SDK_NAME = 'sentry.javascript.nextjs'; -export const PACKAGE_NAME_PREFIX = 'npm:@sentry/'; - -/** - * A builder for the SDK metadata in the options for the SDK initialization. - */ -export class MetadataBuilder { - private _options: NextjsOptions; - private _packageNames: string[]; - - public constructor(options: NextjsOptions, packages: string[]) { - this._options = options; - this._packageNames = packages; - } - - /** JSDoc */ - public addSdkMetadata(): void { - this._options._metadata = this._options._metadata || {}; - this._options._metadata.sdk = this._getSdkInfo(); - } - - /** JSDoc */ - private _getSdkInfo(): SdkInfo { - return { - name: SDK_NAME, - version: SDK_VERSION, - packages: this._getPackages(), - }; - } - - /** JSDoc */ - private _getPackages(): Package[] { - return this._packageNames.map((pkgName: string) => { - return { - name: PACKAGE_NAME_PREFIX + pkgName, - version: SDK_VERSION, - }; - }); - } -} From cf85463fc04f033439ae97790fb50c49f9786db0 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 30 Nov 2021 13:56:23 -0500 Subject: [PATCH 03/14] feat(react): Convert react to use buildMetadata --- packages/react/src/sdk.ts | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/packages/react/src/sdk.ts b/packages/react/src/sdk.ts index 038a509c03d7..e2289c36cc88 100644 --- a/packages/react/src/sdk.ts +++ b/packages/react/src/sdk.ts @@ -1,19 +1,11 @@ -import { BrowserOptions, init as browserInit, SDK_VERSION } from '@sentry/browser'; +import { BrowserOptions, buildMetadata, init as browserInit } from '@sentry/browser'; + +const PACKAGE_NAME = 'react'; /** * Inits the React SDK */ export function init(options: BrowserOptions): void { - options._metadata = options._metadata || {}; - options._metadata.sdk = options._metadata.sdk || { - name: 'sentry.javascript.react', - packages: [ - { - name: 'npm:@sentry/react', - version: SDK_VERSION, - }, - ], - version: SDK_VERSION, - }; + options._metadata = buildMetadata(PACKAGE_NAME, [PACKAGE_NAME], options._metadata); browserInit(options); } From 9c59d20e1777a40fe01bb359c9b241958908cf9c Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 30 Nov 2021 13:59:51 -0500 Subject: [PATCH 04/14] make buildMetadata mutate options --- packages/core/src/metadata.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/core/src/metadata.ts b/packages/core/src/metadata.ts index a20983538036..7a8bf18321a7 100644 --- a/packages/core/src/metadata.ts +++ b/packages/core/src/metadata.ts @@ -1,4 +1,4 @@ -import { SdkMetadata } from '@sentry/types'; +import { Options } from '@sentry/types'; import { SDK_VERSION } from './version'; @@ -6,8 +6,9 @@ const SDK_NAME_PREFIX = 'sentry.javascript'; const PACKAGE_NAME_PREFIX = 'npm:@sentry/'; /** */ -export function buildMetadata(name: string, packageNames: string[], metadata: SdkMetadata = {}): SdkMetadata { - metadata.sdk = metadata.sdk || { +export function buildMetadata(options: Options, name: string, packageNames: string[]): void { + options._metadata = options._metadata || {}; + options._metadata.sdk = options._metadata.sdk || { name: `${SDK_NAME_PREFIX}.${name}`, packages: packageNames.map(name => ({ name: `${PACKAGE_NAME_PREFIX}/${name}`, @@ -15,6 +16,4 @@ export function buildMetadata(name: string, packageNames: string[], metadata: Sd })), version: SDK_VERSION, }; - - return metadata; } From 2665582403a28da3bf2bfaf03e557529087fc22c Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 30 Nov 2021 14:01:45 -0500 Subject: [PATCH 05/14] fix angular and react --- packages/nextjs/src/index.client.ts | 2 +- packages/nextjs/src/index.server.ts | 2 +- packages/react/src/sdk.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/nextjs/src/index.client.ts b/packages/nextjs/src/index.client.ts index f71991c6718f..e165e43bbd90 100644 --- a/packages/nextjs/src/index.client.ts +++ b/packages/nextjs/src/index.client.ts @@ -14,7 +14,7 @@ export const Integrations = { ...BrowserIntegrations, BrowserTracing }; /** Inits the Sentry NextJS SDK on the browser with the React SDK. */ export function init(options: NextjsOptions): void { - options._metadata = buildMetadata(NEXTJS_PACKAGE_NAME, [NEXTJS_PACKAGE_NAME, REACT_PACKAGE_NAME], options._metadata); + buildMetadata(options, NEXTJS_PACKAGE_NAME, [NEXTJS_PACKAGE_NAME, REACT_PACKAGE_NAME]); options.environment = options.environment || process.env.NODE_ENV; // Only add BrowserTracing if a tracesSampleRate or tracesSampler is set diff --git a/packages/nextjs/src/index.server.ts b/packages/nextjs/src/index.server.ts index 11c26203930a..6de407c02598 100644 --- a/packages/nextjs/src/index.server.ts +++ b/packages/nextjs/src/index.server.ts @@ -33,7 +33,7 @@ export function init(options: NextjsOptions): void { return; } - options._metadata = buildMetadata(NEXTJS_PACKAGE_NAME, [NEXTJS_PACKAGE_NAME, NODE_PACKAGE_NAME], options._metadata); + buildMetadata(options, NEXTJS_PACKAGE_NAME, [NEXTJS_PACKAGE_NAME, NODE_PACKAGE_NAME]); options.environment = options.environment || process.env.NODE_ENV; addServerIntegrations(options); // Right now we only capture frontend sessions for Next.js diff --git a/packages/react/src/sdk.ts b/packages/react/src/sdk.ts index e2289c36cc88..2e6de7f71ef1 100644 --- a/packages/react/src/sdk.ts +++ b/packages/react/src/sdk.ts @@ -6,6 +6,6 @@ const PACKAGE_NAME = 'react'; * Inits the React SDK */ export function init(options: BrowserOptions): void { - options._metadata = buildMetadata(PACKAGE_NAME, [PACKAGE_NAME], options._metadata); + buildMetadata(options, PACKAGE_NAME, [PACKAGE_NAME]); browserInit(options); } From 92660189c22a956b2b8439c0c6a545b5e8cb84bd Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 30 Nov 2021 14:01:56 -0500 Subject: [PATCH 06/14] feat(angular): Convert angular to use buildMetadata --- packages/angular/src/sdk.ts | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/packages/angular/src/sdk.ts b/packages/angular/src/sdk.ts index 09267d1f2082..1df701bcc216 100644 --- a/packages/angular/src/sdk.ts +++ b/packages/angular/src/sdk.ts @@ -1,19 +1,11 @@ -import { BrowserOptions, init as browserInit, SDK_VERSION } from '@sentry/browser'; +import { BrowserOptions, buildMetadata, init as browserInit } from '@sentry/browser'; + +const PACKAGE_NAME = 'angular'; /** * Inits the Angular SDK */ export function init(options: BrowserOptions): void { - options._metadata = options._metadata || {}; - options._metadata.sdk = { - name: 'sentry.javascript.angular', - packages: [ - { - name: 'npm:@sentry/angular', - version: SDK_VERSION, - }, - ], - version: SDK_VERSION, - }; + buildMetadata(options, PACKAGE_NAME, [PACKAGE_NAME]); browserInit(options); } From 850f7ee88601d3d3b668fb30d709e4f7c3c1e706 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 30 Nov 2021 14:10:05 -0500 Subject: [PATCH 07/14] feat(ember): Convert ember to use buildMetadata --- packages/ember/addon/index.ts | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/packages/ember/addon/index.ts b/packages/ember/addon/index.ts index 341af580e960..c94a66ec3c5e 100644 --- a/packages/ember/addon/index.ts +++ b/packages/ember/addon/index.ts @@ -1,5 +1,5 @@ import * as Sentry from '@sentry/browser'; -import { SDK_VERSION, BrowserOptions } from '@sentry/browser'; +import { BrowserOptions, buildMetadata } from '@sentry/browser'; import { macroCondition, isDevelopingApp, getOwnConfig } from '@embroider/macros'; import { next } from '@ember/runloop'; import { assert, warn } from '@ember/debug'; @@ -8,6 +8,8 @@ import { timestampWithMs } from '@sentry/utils'; import { GlobalConfig, OwnConfig } from './types'; import { getGlobalObject } from '@sentry/utils'; +const PACKAGE_NAME = 'ember'; + function _getSentryInitConfig() { const _global = getGlobalObject(); _global.__sentryEmberConfig = _global.__sentryEmberConfig ?? {}; @@ -27,25 +29,14 @@ export function InitSentryForEmber(_runtimeConfig?: BrowserOptions) { // Merge runtime config into environment config, preferring runtime. Object.assign(environmentConfig.sentry, _runtimeConfig || {}); - const initConfig = Object.assign({}, environmentConfig.sentry); - - initConfig._metadata = initConfig._metadata || {}; - initConfig._metadata.sdk = { - name: 'sentry.javascript.ember', - packages: [ - { - name: 'npm:@sentry/ember', - version: SDK_VERSION, - }, - ], - version: SDK_VERSION, - }; + const options = Object.assign({}, environmentConfig.sentry); + buildMetadata(options, PACKAGE_NAME, [PACKAGE_NAME]); // Persist Sentry init options so they are identical when performance initializers call init again. const sentryInitConfig = _getSentryInitConfig(); - Object.assign(sentryInitConfig, initConfig); + Object.assign(sentryInitConfig, options); - Sentry.init(initConfig); + Sentry.init(options); if (macroCondition(isDevelopingApp())) { if (environmentConfig.ignoreEmberOnErrorWarning) { From af5530125493fe6fc4879fa23d5ddee0793cc5fc Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 30 Nov 2021 14:10:23 -0500 Subject: [PATCH 08/14] feat(gatsby): Convert gatsby to use buildMetadata --- packages/gatsby/src/sdk.ts | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/packages/gatsby/src/sdk.ts b/packages/gatsby/src/sdk.ts index d3a7cac50a1f..e5ac648fb2d7 100644 --- a/packages/gatsby/src/sdk.ts +++ b/packages/gatsby/src/sdk.ts @@ -1,23 +1,15 @@ -import { init as reactInit, SDK_VERSION } from '@sentry/react'; +import { buildMetadata, init as reactInit } from '@sentry/react'; import { getIntegrationsFromOptions } from './utils/integrations'; import { GatsbyOptions } from './utils/types'; +const PACKAGE_NAME = 'gatsby'; + /** * Inits the Sentry Gatsby SDK. */ export function init(options: GatsbyOptions): void { - options._metadata = options._metadata || {}; - options._metadata.sdk = options._metadata.sdk || { - name: 'sentry.javascript.gatsby', - packages: [ - { - name: 'npm:@sentry/gatsby', - version: SDK_VERSION, - }, - ], - version: SDK_VERSION, - }; + buildMetadata(options, PACKAGE_NAME, [PACKAGE_NAME]); const integrations = getIntegrationsFromOptions(options); reactInit({ From 43c89a6dc55efca34ddeceb9a4aa5d2725f7cf00 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 30 Nov 2021 14:10:41 -0500 Subject: [PATCH 09/14] feat(serverless): Convert serverless to use buildMetadata --- packages/core/src/metadata.ts | 26 +++++++++++++------- packages/serverless/src/awslambda.ts | 14 ++--------- packages/serverless/src/constants.ts | 1 + packages/serverless/src/gcpfunction/index.ts | 14 ++--------- 4 files changed, 22 insertions(+), 33 deletions(-) create mode 100644 packages/serverless/src/constants.ts diff --git a/packages/core/src/metadata.ts b/packages/core/src/metadata.ts index 7a8bf18321a7..2d7fd0768ed7 100644 --- a/packages/core/src/metadata.ts +++ b/packages/core/src/metadata.ts @@ -1,4 +1,4 @@ -import { Options } from '@sentry/types'; +import { Options, SdkInfo } from '@sentry/types'; import { SDK_VERSION } from './version'; @@ -6,14 +6,22 @@ const SDK_NAME_PREFIX = 'sentry.javascript'; const PACKAGE_NAME_PREFIX = 'npm:@sentry/'; /** */ -export function buildMetadata(options: Options, name: string, packageNames: string[]): void { +export function buildMetadata( + options: Options, + name: string, + packageNames: string[], + integrations?: SdkInfo['integrations'], +): void { options._metadata = options._metadata || {}; - options._metadata.sdk = options._metadata.sdk || { - name: `${SDK_NAME_PREFIX}.${name}`, - packages: packageNames.map(name => ({ - name: `${PACKAGE_NAME_PREFIX}/${name}`, + options._metadata.sdk = + options._metadata.sdk || + ({ + name: `${SDK_NAME_PREFIX}.${name}`, + packages: packageNames.map(name => ({ + name: `${PACKAGE_NAME_PREFIX}/${name}`, + version: SDK_VERSION, + })), + integrations, version: SDK_VERSION, - })), - version: SDK_VERSION, - }; + } as SdkInfo); } diff --git a/packages/serverless/src/awslambda.ts b/packages/serverless/src/awslambda.ts index 70b09d3cc97c..75d9399150f7 100644 --- a/packages/serverless/src/awslambda.ts +++ b/packages/serverless/src/awslambda.ts @@ -23,6 +23,7 @@ import { performance } from 'perf_hooks'; import { types } from 'util'; import { AWSServices } from './awsservices'; +import { PACKAGE_NAME } from './constants'; import { serverlessEventProcessor } from './utils'; export * from '@sentry/node'; @@ -65,18 +66,7 @@ export function init(options: Sentry.NodeOptions = {}): void { options.defaultIntegrations = defaultIntegrations; } - options._metadata = options._metadata || {}; - options._metadata.sdk = { - name: 'sentry.javascript.serverless', - integrations: ['AWSLambda'], - packages: [ - { - name: 'npm:@sentry/serverless', - version: Sentry.SDK_VERSION, - }, - ], - version: Sentry.SDK_VERSION, - }; + Sentry.buildMetadata(options, PACKAGE_NAME, [PACKAGE_NAME], ['AWSLambda']); Sentry.init(options); Sentry.addGlobalEventProcessor(serverlessEventProcessor); diff --git a/packages/serverless/src/constants.ts b/packages/serverless/src/constants.ts new file mode 100644 index 000000000000..04b3a3a20d1e --- /dev/null +++ b/packages/serverless/src/constants.ts @@ -0,0 +1 @@ +export const PACKAGE_NAME = 'serverless'; diff --git a/packages/serverless/src/gcpfunction/index.ts b/packages/serverless/src/gcpfunction/index.ts index 2cd8a0bec73f..21953127d36e 100644 --- a/packages/serverless/src/gcpfunction/index.ts +++ b/packages/serverless/src/gcpfunction/index.ts @@ -1,6 +1,7 @@ import * as Sentry from '@sentry/node'; import { Integration } from '@sentry/types'; +import { PACKAGE_NAME } from '../constants'; import { GoogleCloudGrpc } from '../google-cloud-grpc'; import { GoogleCloudHttp } from '../google-cloud-http'; import { serverlessEventProcessor } from '../utils'; @@ -23,18 +24,7 @@ export function init(options: Sentry.NodeOptions = {}): void { options.defaultIntegrations = defaultIntegrations; } - options._metadata = options._metadata || {}; - options._metadata.sdk = { - name: 'sentry.javascript.serverless', - integrations: ['GCPFunction'], - packages: [ - { - name: 'npm:@sentry/serverless', - version: Sentry.SDK_VERSION, - }, - ], - version: Sentry.SDK_VERSION, - }; + Sentry.buildMetadata(options, PACKAGE_NAME, [PACKAGE_NAME], ['GCPFunction']); Sentry.init(options); Sentry.addGlobalEventProcessor(serverlessEventProcessor); From 276a135603538eec56805cdca7e8ce54509b7d6f Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 30 Nov 2021 14:17:42 -0500 Subject: [PATCH 10/14] delete test --- .../nextjs/test/utils/metadataBuilder.test.ts | 52 ------------------- 1 file changed, 52 deletions(-) delete mode 100644 packages/nextjs/test/utils/metadataBuilder.test.ts diff --git a/packages/nextjs/test/utils/metadataBuilder.test.ts b/packages/nextjs/test/utils/metadataBuilder.test.ts deleted file mode 100644 index 888a35f765d4..000000000000 --- a/packages/nextjs/test/utils/metadataBuilder.test.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { SDK_VERSION } from '@sentry/core'; -import { Package, SdkInfo } from '@sentry/types'; - -import { MetadataBuilder, PACKAGE_NAME_PREFIX, SDK_NAME } from '../../src/utils/metadataBuilder'; -import { NextjsOptions } from '../../src/utils/nextjsOptions'; - -describe('build metadata', () => { - test('without packages', () => { - const nextjsOptions: NextjsOptions = {}; - const metadataPackages: string[] = []; - testMetadataBuilder(nextjsOptions, metadataPackages); - }); - - test('with packages', () => { - const nextjsOptions: NextjsOptions = {}; - const metadataPackages: string[] = ['packageA', 'packageB']; - testMetadataBuilder(nextjsOptions, metadataPackages); - }); -}); - -function testMetadataBuilder(nextjsOptions: NextjsOptions, packages: string[]): void { - new MetadataBuilder(nextjsOptions, packages).addSdkMetadata(); - const optionsMetadata = nextjsOptions._metadata; - expect(optionsMetadata).toBeDefined(); - const sdkInfo = optionsMetadata?.sdk; - testSdkInfo(sdkInfo); - testSdkInfoPackages(sdkInfo?.packages, packages); -} - -function testSdkInfo(sdkInfo: SdkInfo | undefined): void { - expect(sdkInfo).toBeDefined(); - expect(sdkInfo?.name).toBeDefined(); - expect(sdkInfo?.name).toEqual(SDK_NAME); - expect(sdkInfo?.version).toEqual(expect.any(String)); - expect(sdkInfo?.packages).toEqual(expect.any(Array)); -} - -function testSdkInfoPackages(actualPkgs: Package[] | undefined, expectedPkgNames: string[]): void { - expect(actualPkgs).toBeDefined(); - expect(actualPkgs).toHaveLength(expectedPkgNames.length); - - const pkgNames = actualPkgs?.map((currentPkg: Package) => { - expect(currentPkg.version).toBeDefined(); - expect(currentPkg.version).toEqual(SDK_VERSION); - - expect(currentPkg.name).toBeDefined(); - const pkgPrefix = currentPkg.name.substring(0, PACKAGE_NAME_PREFIX.length); - expect(pkgPrefix).toEqual(PACKAGE_NAME_PREFIX); - return currentPkg.name.substring(PACKAGE_NAME_PREFIX.length); - }); - expect(pkgNames).toEqual(expectedPkgNames); -} From 13004610384580b53bcaea536f999cc08b725841 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 30 Nov 2021 14:18:07 -0500 Subject: [PATCH 11/14] feat(browser): Convert browser to use buildMetadata --- packages/browser/src/client.ts | 15 +++------------ packages/browser/src/constants.ts | 1 + 2 files changed, 4 insertions(+), 12 deletions(-) create mode 100644 packages/browser/src/constants.ts diff --git a/packages/browser/src/client.ts b/packages/browser/src/client.ts index aeb1539e2a7d..f4d278dcd323 100644 --- a/packages/browser/src/client.ts +++ b/packages/browser/src/client.ts @@ -1,8 +1,9 @@ -import { BaseClient, Scope, SDK_VERSION } from '@sentry/core'; +import { BaseClient, buildMetadata, Scope } from '@sentry/core'; import { Event, EventHint } from '@sentry/types'; import { getGlobalObject, logger } from '@sentry/utils'; import { BrowserBackend, BrowserOptions } from './backend'; +import { PACKAGE_NAME } from './constants'; import { injectReportDialog, ReportDialogOptions } from './helpers'; import { Breadcrumbs } from './integrations'; @@ -19,17 +20,7 @@ export class BrowserClient extends BaseClient { * @param options Configuration options for this SDK. */ public constructor(options: BrowserOptions = {}) { - options._metadata = options._metadata || {}; - options._metadata.sdk = options._metadata.sdk || { - name: 'sentry.javascript.browser', - packages: [ - { - name: 'npm:@sentry/browser', - version: SDK_VERSION, - }, - ], - version: SDK_VERSION, - }; + buildMetadata(options, PACKAGE_NAME, [PACKAGE_NAME]); super(BrowserBackend, options); } diff --git a/packages/browser/src/constants.ts b/packages/browser/src/constants.ts new file mode 100644 index 000000000000..4a78a81d9de4 --- /dev/null +++ b/packages/browser/src/constants.ts @@ -0,0 +1 @@ +export const PACKAGE_NAME = 'browser'; From 55bb2d5d624694388ff2bc3d4f87cfe987623eec Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 30 Nov 2021 14:18:23 -0500 Subject: [PATCH 12/14] feat(node): Convert node to use buildMetadata --- packages/node/src/client.ts | 16 +++------------- packages/node/src/constants.ts | 1 + 2 files changed, 4 insertions(+), 13 deletions(-) create mode 100644 packages/node/src/constants.ts diff --git a/packages/node/src/client.ts b/packages/node/src/client.ts index 7f4842b48ad4..c059f69d3644 100644 --- a/packages/node/src/client.ts +++ b/packages/node/src/client.ts @@ -1,9 +1,10 @@ -import { BaseClient, Scope, SDK_VERSION } from '@sentry/core'; +import { BaseClient, buildMetadata, Scope } from '@sentry/core'; import { SessionFlusher } from '@sentry/hub'; import { Event, EventHint, RequestSessionStatus } from '@sentry/types'; import { logger } from '@sentry/utils'; import { NodeBackend } from './backend'; +import { PACKAGE_NAME } from './constants'; import { NodeOptions } from './types'; /** @@ -20,18 +21,7 @@ export class NodeClient extends BaseClient { * @param options Configuration options for this SDK. */ public constructor(options: NodeOptions) { - options._metadata = options._metadata || {}; - options._metadata.sdk = options._metadata.sdk || { - name: 'sentry.javascript.node', - packages: [ - { - name: 'npm:@sentry/node', - version: SDK_VERSION, - }, - ], - version: SDK_VERSION, - }; - + buildMetadata(options, PACKAGE_NAME, [PACKAGE_NAME]); super(NodeBackend, options); } diff --git a/packages/node/src/constants.ts b/packages/node/src/constants.ts new file mode 100644 index 000000000000..7e2753b6330b --- /dev/null +++ b/packages/node/src/constants.ts @@ -0,0 +1 @@ +export const PACKAGE_NAME = 'node'; From c3131bcb89af22ba75e9634ef4d0ce457750eaea Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 30 Nov 2021 14:20:27 -0500 Subject: [PATCH 13/14] feat(vue): Convert vue to use buildMetadata --- packages/vue/src/sdk.ts | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/packages/vue/src/sdk.ts b/packages/vue/src/sdk.ts index ee2e05b13e7e..fb7de0145d23 100644 --- a/packages/vue/src/sdk.ts +++ b/packages/vue/src/sdk.ts @@ -1,4 +1,4 @@ -import { init as browserInit, SDK_VERSION } from '@sentry/browser'; +import { buildMetadata, init as browserInit } from '@sentry/browser'; import { getGlobalObject, logger } from '@sentry/utils'; import { DEFAULT_HOOKS } from './constants'; @@ -6,6 +6,8 @@ import { attachErrorHandler } from './errorhandler'; import { createTracingMixins } from './tracing'; import { Options, TracingOptions, Vue } from './types'; +const PACKAGE_NAME = 'vue'; + const DEFAULT_CONFIG: Options = { Vue: getGlobalObject<{ Vue: Vue }>().Vue, attachProps: true, @@ -13,18 +15,6 @@ const DEFAULT_CONFIG: Options = { hooks: DEFAULT_HOOKS, timeout: 2000, trackComponents: false, - _metadata: { - sdk: { - name: 'sentry.javascript.vue', - packages: [ - { - name: 'npm:@sentry/vue', - version: SDK_VERSION, - }, - ], - version: SDK_VERSION, - }, - }, }; /** @@ -38,6 +28,8 @@ export function init( ...config, }; + buildMetadata(options, PACKAGE_NAME, [PACKAGE_NAME]); + browserInit(options); if (!options.Vue && !options.app) { From 5d62b14129737572e57e7938c50c22fef311b34e Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Tue, 30 Nov 2021 14:31:38 -0500 Subject: [PATCH 14/14] refactor buildMetadata function type --- packages/angular/src/sdk.ts | 2 +- packages/browser/src/client.ts | 2 +- packages/core/src/metadata.ts | 3 ++- packages/ember/addon/index.ts | 2 +- packages/gatsby/src/sdk.ts | 2 +- packages/node/src/client.ts | 2 +- packages/react/src/sdk.ts | 2 +- packages/serverless/src/awslambda.ts | 2 +- packages/serverless/src/gcpfunction/index.ts | 2 +- packages/vue/src/sdk.ts | 3 +-- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/angular/src/sdk.ts b/packages/angular/src/sdk.ts index 1df701bcc216..072ae51f6bbe 100644 --- a/packages/angular/src/sdk.ts +++ b/packages/angular/src/sdk.ts @@ -6,6 +6,6 @@ const PACKAGE_NAME = 'angular'; * Inits the Angular SDK */ export function init(options: BrowserOptions): void { - buildMetadata(options, PACKAGE_NAME, [PACKAGE_NAME]); + buildMetadata(options, PACKAGE_NAME); browserInit(options); } diff --git a/packages/browser/src/client.ts b/packages/browser/src/client.ts index f4d278dcd323..9d454ac00cc8 100644 --- a/packages/browser/src/client.ts +++ b/packages/browser/src/client.ts @@ -20,7 +20,7 @@ export class BrowserClient extends BaseClient { * @param options Configuration options for this SDK. */ public constructor(options: BrowserOptions = {}) { - buildMetadata(options, PACKAGE_NAME, [PACKAGE_NAME]); + buildMetadata(options, PACKAGE_NAME); super(BrowserBackend, options); } diff --git a/packages/core/src/metadata.ts b/packages/core/src/metadata.ts index 2d7fd0768ed7..199f72735966 100644 --- a/packages/core/src/metadata.ts +++ b/packages/core/src/metadata.ts @@ -9,9 +9,10 @@ const PACKAGE_NAME_PREFIX = 'npm:@sentry/'; export function buildMetadata( options: Options, name: string, - packageNames: string[], + extraPackageNames: string[] = [], integrations?: SdkInfo['integrations'], ): void { + const packageNames = [name, ...extraPackageNames]; options._metadata = options._metadata || {}; options._metadata.sdk = options._metadata.sdk || diff --git a/packages/ember/addon/index.ts b/packages/ember/addon/index.ts index c94a66ec3c5e..a7ca8bcad05b 100644 --- a/packages/ember/addon/index.ts +++ b/packages/ember/addon/index.ts @@ -30,7 +30,7 @@ export function InitSentryForEmber(_runtimeConfig?: BrowserOptions) { // Merge runtime config into environment config, preferring runtime. Object.assign(environmentConfig.sentry, _runtimeConfig || {}); const options = Object.assign({}, environmentConfig.sentry); - buildMetadata(options, PACKAGE_NAME, [PACKAGE_NAME]); + buildMetadata(options, PACKAGE_NAME); // Persist Sentry init options so they are identical when performance initializers call init again. const sentryInitConfig = _getSentryInitConfig(); diff --git a/packages/gatsby/src/sdk.ts b/packages/gatsby/src/sdk.ts index e5ac648fb2d7..400be15fc700 100644 --- a/packages/gatsby/src/sdk.ts +++ b/packages/gatsby/src/sdk.ts @@ -9,7 +9,7 @@ const PACKAGE_NAME = 'gatsby'; * Inits the Sentry Gatsby SDK. */ export function init(options: GatsbyOptions): void { - buildMetadata(options, PACKAGE_NAME, [PACKAGE_NAME]); + buildMetadata(options, PACKAGE_NAME); const integrations = getIntegrationsFromOptions(options); reactInit({ diff --git a/packages/node/src/client.ts b/packages/node/src/client.ts index c059f69d3644..149c802bf29a 100644 --- a/packages/node/src/client.ts +++ b/packages/node/src/client.ts @@ -21,7 +21,7 @@ export class NodeClient extends BaseClient { * @param options Configuration options for this SDK. */ public constructor(options: NodeOptions) { - buildMetadata(options, PACKAGE_NAME, [PACKAGE_NAME]); + buildMetadata(options, PACKAGE_NAME); super(NodeBackend, options); } diff --git a/packages/react/src/sdk.ts b/packages/react/src/sdk.ts index 2e6de7f71ef1..00574b6248cb 100644 --- a/packages/react/src/sdk.ts +++ b/packages/react/src/sdk.ts @@ -6,6 +6,6 @@ const PACKAGE_NAME = 'react'; * Inits the React SDK */ export function init(options: BrowserOptions): void { - buildMetadata(options, PACKAGE_NAME, [PACKAGE_NAME]); + buildMetadata(options, PACKAGE_NAME); browserInit(options); } diff --git a/packages/serverless/src/awslambda.ts b/packages/serverless/src/awslambda.ts index 75d9399150f7..ad7ba9ecccad 100644 --- a/packages/serverless/src/awslambda.ts +++ b/packages/serverless/src/awslambda.ts @@ -66,7 +66,7 @@ export function init(options: Sentry.NodeOptions = {}): void { options.defaultIntegrations = defaultIntegrations; } - Sentry.buildMetadata(options, PACKAGE_NAME, [PACKAGE_NAME], ['AWSLambda']); + Sentry.buildMetadata(options, PACKAGE_NAME, [], ['AWSLambda']); Sentry.init(options); Sentry.addGlobalEventProcessor(serverlessEventProcessor); diff --git a/packages/serverless/src/gcpfunction/index.ts b/packages/serverless/src/gcpfunction/index.ts index 21953127d36e..2f92d6e64fc7 100644 --- a/packages/serverless/src/gcpfunction/index.ts +++ b/packages/serverless/src/gcpfunction/index.ts @@ -24,7 +24,7 @@ export function init(options: Sentry.NodeOptions = {}): void { options.defaultIntegrations = defaultIntegrations; } - Sentry.buildMetadata(options, PACKAGE_NAME, [PACKAGE_NAME], ['GCPFunction']); + Sentry.buildMetadata(options, PACKAGE_NAME, [], ['GCPFunction']); Sentry.init(options); Sentry.addGlobalEventProcessor(serverlessEventProcessor); diff --git a/packages/vue/src/sdk.ts b/packages/vue/src/sdk.ts index fb7de0145d23..c2ed1a3875e2 100644 --- a/packages/vue/src/sdk.ts +++ b/packages/vue/src/sdk.ts @@ -28,8 +28,7 @@ export function init( ...config, }; - buildMetadata(options, PACKAGE_NAME, [PACKAGE_NAME]); - + buildMetadata(options, PACKAGE_NAME); browserInit(options); if (!options.Vue && !options.app) {