Skip to content

ref: Introduce buildMetadata function #4196

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 14 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 4 additions & 12 deletions packages/angular/src/sdk.ts
Original file line number Diff line number Diff line change
@@ -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);
browserInit(options);
}
15 changes: 3 additions & 12 deletions packages/browser/src/client.ts
Original file line number Diff line number Diff line change
@@ -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';

Expand All @@ -19,17 +20,7 @@ export class BrowserClient extends BaseClient<BrowserBackend, BrowserOptions> {
* @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);

super(BrowserBackend, options);
}
Expand Down
1 change: 1 addition & 0 deletions packages/browser/src/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const PACKAGE_NAME = 'browser';
1 change: 1 addition & 0 deletions packages/browser/src/exports.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export {
export {
addGlobalEventProcessor,
addBreadcrumb,
buildMetadata,
captureException,
captureEvent,
captureMessage,
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand Down
28 changes: 28 additions & 0 deletions packages/core/src/metadata.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { Options, SdkInfo } from '@sentry/types';

import { SDK_VERSION } from './version';

const SDK_NAME_PREFIX = 'sentry.javascript';
const PACKAGE_NAME_PREFIX = 'npm:@sentry/';

/** */
export function buildMetadata(
options: Options,
name: string,
extraPackageNames: string[] = [],
integrations?: SdkInfo['integrations'],
): void {
const packageNames = [name, ...extraPackageNames];
options._metadata = options._metadata || {};
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,
} as SdkInfo);
}
23 changes: 7 additions & 16 deletions packages/ember/addon/index.ts
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -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<GlobalConfig>();
_global.__sentryEmberConfig = _global.__sentryEmberConfig ?? {};
Expand All @@ -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);

// 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) {
Expand Down
16 changes: 4 additions & 12 deletions packages/gatsby/src/sdk.ts
Original file line number Diff line number Diff line change
@@ -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);

const integrations = getIntegrationsFromOptions(options);
reactInit({
Expand Down
5 changes: 5 additions & 0 deletions packages/nextjs/src/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export const NEXTJS_PACKAGE_NAME = 'nextjs';

export const REACT_PACKAGE_NAME = 'react';

export const NODE_PACKAGE_NAME = 'node';
7 changes: 3 additions & 4 deletions packages/nextjs/src/index.client.ts
Original file line number Diff line number Diff line change
@@ -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';

Expand All @@ -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();
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
Expand Down
7 changes: 3 additions & 4 deletions packages/nextjs/src/index.server.ts
Original file line number Diff line number Diff line change
@@ -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';

Expand All @@ -33,8 +33,7 @@ export function init(options: NextjsOptions): void {
return;
}

const metadataBuilder = new MetadataBuilder(options, ['nextjs', 'node']);
metadataBuilder.addSdkMetadata();
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
Expand Down
45 changes: 0 additions & 45 deletions packages/nextjs/src/utils/metadataBuilder.ts

This file was deleted.

52 changes: 0 additions & 52 deletions packages/nextjs/test/utils/metadataBuilder.test.ts

This file was deleted.

16 changes: 3 additions & 13 deletions packages/node/src/client.ts
Original file line number Diff line number Diff line change
@@ -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';

/**
Expand All @@ -20,18 +21,7 @@ export class NodeClient extends BaseClient<NodeBackend, NodeOptions> {
* @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);
super(NodeBackend, options);
}

Expand Down
1 change: 1 addition & 0 deletions packages/node/src/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const PACKAGE_NAME = 'node';
1 change: 1 addition & 0 deletions packages/node/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export {
export {
addGlobalEventProcessor,
addBreadcrumb,
buildMetadata,
captureException,
captureEvent,
captureMessage,
Expand Down
16 changes: 4 additions & 12 deletions packages/react/src/sdk.ts
Original file line number Diff line number Diff line change
@@ -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,
};
buildMetadata(options, PACKAGE_NAME);
browserInit(options);
}
Loading