Skip to content

Commit 09721ce

Browse files
committed
feat(browser): Do not include metrics in base CDN bundle
Metrics are only included when performance is included, reducing the base bundle size. We always expose a shim so there is no API breakage, it just does nothing.
1 parent b188e61 commit 09721ce

16 files changed

+74
-22
lines changed

packages/browser/src/exports.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,6 @@ export {
6868
SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE,
6969
} from '@sentry/core';
7070

71-
export * from './metrics';
72-
7371
export { WINDOW } from './helpers';
7472
export { BrowserClient } from './client';
7573
export { makeFetchTransport } from './transports/fetch';

packages/browser/src/index.bundle.feedback.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { browserTracingIntegrationShim, replayIntegrationShim } from '@sentry-internal/integration-shims';
1+
import { browserTracingIntegrationShim, metricsShim, replayIntegrationShim } from '@sentry-internal/integration-shims';
22
import { feedbackAsyncIntegration } from './feedbackAsync';
33

44
export * from './index.bundle.base';
@@ -10,6 +10,7 @@ export {
1010
feedbackAsyncIntegration as feedbackAsyncIntegration,
1111
feedbackAsyncIntegration as feedbackIntegration,
1212
replayIntegrationShim as replayIntegration,
13+
metricsShim as metrics,
1314
};
1415

1516
export { captureFeedback } from '@sentry/core';

packages/browser/src/index.bundle.replay.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import { browserTracingIntegrationShim, feedbackIntegrationShim } from '@sentry-internal/integration-shims';
1+
import {
2+
browserTracingIntegrationShim,
3+
feedbackIntegrationShim,
4+
metricsShim,
5+
} from '@sentry-internal/integration-shims';
26

37
export * from './index.bundle.base';
48

@@ -8,4 +12,5 @@ export {
812
browserTracingIntegrationShim as browserTracingIntegration,
913
feedbackIntegrationShim as feedbackAsyncIntegration,
1014
feedbackIntegrationShim as feedbackIntegration,
15+
metricsShim as metrics,
1116
};

packages/browser/src/index.bundle.tracing.replay.feedback.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ registerSpanErrorInstrumentation();
44

55
export * from './index.bundle.base';
66

7+
export * from './metrics';
8+
79
export {
810
getActiveSpan,
911
getRootSpan,

packages/browser/src/index.bundle.tracing.replay.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ registerSpanErrorInstrumentation();
44

55
export * from './index.bundle.base';
66

7+
export * from './metrics';
8+
79
export {
810
getActiveSpan,
911
getRootSpan,

packages/browser/src/index.bundle.tracing.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ registerSpanErrorInstrumentation();
55

66
export * from './index.bundle.base';
77

8+
export * from './metrics';
9+
810
export {
911
getActiveSpan,
1012
getRootSpan,

packages/browser/src/index.bundle.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {
22
browserTracingIntegrationShim,
33
feedbackIntegrationShim,
4+
metricsShim,
45
replayIntegrationShim,
56
} from '@sentry-internal/integration-shims';
67

@@ -11,4 +12,5 @@ export {
1112
feedbackIntegrationShim as feedbackAsyncIntegration,
1213
feedbackIntegrationShim as feedbackIntegration,
1314
replayIntegrationShim as replayIntegration,
15+
metricsShim as metrics,
1416
};

packages/browser/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ export {
3939
sendFeedback,
4040
} from '@sentry-internal/feedback';
4141

42+
export * from './metrics';
43+
4244
export {
4345
defaultRequestInstrumentationOptions,
4446
instrumentOutgoingRequests,

packages/browser/src/metrics.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import type { MetricData } from '@sentry/core';
21
import { BrowserMetricsAggregator, metrics as metricsCore } from '@sentry/core';
2+
import type { MetricData, Metrics } from '@sentry/types';
33

44
/**
55
* Adds a value to a counter metric
@@ -37,7 +37,7 @@ function gauge(name: string, value: number, data?: MetricData): void {
3737
metricsCore.gauge(BrowserMetricsAggregator, name, value, data);
3838
}
3939

40-
export const metrics = {
40+
export const metrics: Metrics = {
4141
increment,
4242
distribution,
4343
set,

packages/core/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ export { rewriteFramesIntegration } from './integrations/rewriteframes';
9797
export { sessionTimingIntegration } from './integrations/sessiontiming';
9898
export { zodErrorsIntegration } from './integrations/zoderrors';
9999
export { metrics } from './metrics/exports';
100-
export type { MetricData } from './metrics/exports';
100+
export type { MetricData } from '@sentry/types';
101101
export { metricsDefault } from './metrics/exports-default';
102102
export { BrowserMetricsAggregator } from './metrics/browser-aggregator';
103103
export { getMetricSummaryJsonForSpan } from './metrics/metric-summary';

packages/core/src/metrics/exports-default.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import type { Client, MetricsAggregator as MetricsAggregatorInterface } from '@sentry/types';
1+
import type { Client, MetricData, MetricsAggregator as MetricsAggregatorInterface } from '@sentry/types';
22
import { MetricsAggregator } from './aggregator';
3-
import type { MetricData } from './exports';
43
import { metrics as metricsCore } from './exports';
54

65
/**

packages/core/src/metrics/exports.ts

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,11 @@
1-
import type {
2-
Client,
3-
MeasurementUnit,
4-
MetricsAggregator as MetricsAggregatorInterface,
5-
Primitive,
6-
} from '@sentry/types';
1+
import type { Client, MetricData, MetricsAggregator as MetricsAggregatorInterface } from '@sentry/types';
72
import { getGlobalSingleton, logger } from '@sentry/utils';
83
import { getClient } from '../currentScopes';
94
import { DEBUG_BUILD } from '../debug-build';
105
import { getActiveSpan, getRootSpan, spanToJSON } from '../utils/spanUtils';
116
import { COUNTER_METRIC_TYPE, DISTRIBUTION_METRIC_TYPE, GAUGE_METRIC_TYPE, SET_METRIC_TYPE } from './constants';
127
import type { MetricType } from './types';
138

14-
export interface MetricData {
15-
unit?: MeasurementUnit;
16-
tags?: Record<string, Primitive>;
17-
timestamp?: number;
18-
client?: Client;
19-
}
20-
219
type MetricsAggregatorConstructor = {
2210
new (client: Client): MetricsAggregatorInterface;
2311
};
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export { feedbackIntegrationShim } from './Feedback';
22
export { replayIntegrationShim } from './Replay';
33
export { browserTracingIntegrationShim } from './BrowserTracing';
4+
export { metricsShim } from './metrics';
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import type { Metrics } from '@sentry/types';
2+
3+
export const metricsShim: Metrics = {
4+
/* eslint-disable @typescript-eslint/no-empty-function */
5+
increment: () => {},
6+
distribution: () => {},
7+
set: () => {},
8+
gauge: () => {},
9+
/* eslint-enable @typescript-eslint/no-empty-function */
10+
};

packages/types/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ export type {
164164
MetricsAggregator,
165165
MetricBucketItem,
166166
MetricInstance,
167+
MetricData,
168+
Metrics,
167169
} from './metrics';
168170
export type { ParameterizedString } from './parameterize';
169171
export type { ViewHierarchyData, ViewHierarchyWindow } from './view-hierarchy';

packages/types/src/metrics.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
1+
import type { Client } from './client';
12
import type { MeasurementUnit } from './measurement';
23
import type { Primitive } from './misc';
34

5+
export interface MetricData {
6+
unit?: MeasurementUnit;
7+
tags?: Record<string, Primitive>;
8+
timestamp?: number;
9+
client?: Client;
10+
}
11+
412
/**
513
* An abstract definition of the minimum required API
614
* for a metric instance.
@@ -62,3 +70,33 @@ export interface MetricsAggregator {
6270
*/
6371
toString(): string;
6472
}
73+
74+
export interface Metrics {
75+
/**
76+
* Adds a value to a counter metric
77+
*
78+
* @experimental This API is experimental and might have breaking changes in the future.
79+
*/
80+
increment(name: string, value?: number, data?: MetricData): void;
81+
82+
/**
83+
* Adds a value to a distribution metric
84+
*
85+
* @experimental This API is experimental and might have breaking changes in the future.
86+
*/
87+
distribution(name: string, value: number, data?: MetricData): void;
88+
89+
/**
90+
* Adds a value to a set metric. Value must be a string or integer.
91+
*
92+
* @experimental This API is experimental and might have breaking changes in the future.
93+
*/
94+
set(name: string, value: number | string, data?: MetricData): void;
95+
96+
/**
97+
* Adds a value to a gauge metric
98+
*
99+
* @experimental This API is experimental and might have breaking changes in the future.
100+
*/
101+
gauge(name: string, value: number, data?: MetricData): void;
102+
}

0 commit comments

Comments
 (0)