Skip to content

Commit

Permalink
feat(v7/types): Deprecate Hub interface (#11530)
Browse files Browse the repository at this point in the history
This PR deprecates the `Hub` interface as a continuation of #11528 where
we deprecated the Hub class.

The difference here is that the interface will stay deprecated
throughout v8 so that we can shim the infamous `getCurrentHub` API. Most
other usages of the interface should already be removed in v8/`develop`
🤞
  • Loading branch information
Lms24 committed Apr 10, 2024
1 parent 220580f commit 5c35031
Show file tree
Hide file tree
Showing 27 changed files with 67 additions and 6 deletions.
1 change: 1 addition & 0 deletions packages/core/src/hub.ts
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ export interface Carrier {
* themselves and will also be removed in version 8. More information:
* - [Migration Guide](https://github.com/getsentry/sentry-javascript/blob/develop/MIGRATION.md#deprecate-hub)
*/
// eslint-disable-next-line deprecation/deprecation
export class Hub implements HubInterface {
/** Is a {@link Layer}[] containing the client and scope */
private readonly _stack: Layer[];
Expand Down
2 changes: 2 additions & 0 deletions packages/core/src/utils/isSentryRequestUrl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import type { Client, DsnComponents, Hub } from '@sentry/types';
*
* TODO(v8): Remove Hub fallback type
*/
// eslint-disable-next-line deprecation/deprecation
export function isSentryRequestUrl(url: string, hubOrClient: Hub | Client | undefined): boolean {
const client =
hubOrClient && isHub(hubOrClient)
Expand Down Expand Up @@ -34,6 +35,7 @@ function removeTrailingSlash(str: string): string {
return str[str.length - 1] === '/' ? str.slice(0, -1) : str;
}

// eslint-disable-next-line deprecation/deprecation
function isHub(hubOrClient: Hub | Client | undefined): hubOrClient is Hub {
// eslint-disable-next-line deprecation/deprecation
return (hubOrClient as Hub).getClient !== undefined;
Expand Down
1 change: 1 addition & 0 deletions packages/core/test/lib/utils/isSentryRequestUrl.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ describe('isSentryRequestUrl', () => {
getClient: () => {
return client;
},
// eslint-disable-next-line deprecation/deprecation
} as unknown as Hub;

// Works with hub passed
Expand Down
1 change: 1 addition & 0 deletions packages/integrations/test/reportingobserver.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ const withScope = jest.fn(callback => {

const captureMessage = jest.fn();

// eslint-disable-next-line deprecation/deprecation
const mockHub = {} as unknown as Hub;

const mockReportingObserverConstructor = jest.fn();
Expand Down
1 change: 1 addition & 0 deletions packages/node-experimental/src/integrations/http.ts
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ export class Http implements Integration {
/**
* @inheritDoc
*/
// eslint-disable-next-line deprecation/deprecation
public setupOnce(_addGlobalEventProcessor: (callback: EventProcessor) => void, _getCurrentHub: () => Hub): void {
// No need to instrument if we don't want to track anything
if (!this._breadcrumbs && this._spans === false) {
Expand Down
2 changes: 1 addition & 1 deletion packages/node-experimental/src/sdk/globals.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export function getGlobalCarrier(): SentryCarrier {
* Calls global extension method and binding current instance to the function call
*/
// @ts-expect-error Function lacks ending return statement and return type does not include 'undefined'. ts(2366)
// eslint-disable-next-line @typescript-eslint/no-explicit-any
// eslint-disable-next-line @typescript-eslint/no-explicit-any,deprecation/deprecation
export function callExtensionMethod<T>(hub: Hub, method: string, ...args: any[]): T {
const carrier = getGlobalCarrier();

Expand Down
3 changes: 3 additions & 0 deletions packages/node-experimental/src/sdk/hub.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ export function setupGlobalHub(): void {
/**
* This is for legacy reasons, and returns a proxy object instead of a hub to be used.
*/
// eslint-disable-next-line deprecation/deprecation
export function getCurrentHub(): Hub {
return {
isOlderThan(_version: number): boolean {
Expand Down Expand Up @@ -88,6 +89,7 @@ export function getCurrentHub(): Hub {
// eslint-disable-next-line deprecation/deprecation
configureScope: configureScope,

// eslint-disable-next-line deprecation/deprecation
run(callback: (hub: Hub) => void): void {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
return withScope(() => callback(this as any));
Expand Down Expand Up @@ -142,6 +144,7 @@ export function getCurrentHub(): Hub {
*
* @returns The old replaced hub
*/
// eslint-disable-next-line deprecation/deprecation
export function makeMain(hub: Hub): Hub {
// eslint-disable-next-line no-console
console.warn('makeMain is a noop in @sentry/node-experimental. Use `setCurrentClient` instead.');
Expand Down
2 changes: 2 additions & 0 deletions packages/node-experimental/src/sdk/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ export interface AsyncContextStrategy {
getScopes: () => CurrentScopes | undefined;

/** This is here for legacy reasons. */
// eslint-disable-next-line deprecation/deprecation
getCurrentHub: () => Hub;

/**
Expand All @@ -67,6 +68,7 @@ export interface SentryCarrier {
acs?: AsyncContextStrategy;

// hub is here for legacy reasons
// eslint-disable-next-line deprecation/deprecation
hub?: Hub;

extensions?: {
Expand Down
1 change: 1 addition & 0 deletions packages/node/test/eventbuilders.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ describe('eventFromUnknownInput', () => {
return { normalizeDepth: 6 };
},
}),
// eslint-disable-next-line deprecation/deprecation
} as unknown as Hub;
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { isString } from '@sentry/utils';
* Maybe capture a Sentry exception for an OTEL timed event.
* This will check if the event is exception-like and in that case capture it as an exception.
*/
// eslint-disable-next-line deprecation/deprecation
export function maybeCaptureExceptionForTimedEvent(hub: Hub, event: TimedEvent, otelSpan?: OtelSpan): void {
if (event.name !== 'exception') {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ describe('maybeCaptureExceptionForTimedEvent', () => {
const captureException = jest.fn();
const hub = {
captureException,
// eslint-disable-next-line deprecation/deprecation
} as unknown as Hub;

maybeCaptureExceptionForTimedEvent(hub, event);
Expand All @@ -30,6 +31,7 @@ describe('maybeCaptureExceptionForTimedEvent', () => {
const captureException = jest.fn();
const hub = {
captureException,
// eslint-disable-next-line deprecation/deprecation
} as unknown as Hub;

maybeCaptureExceptionForTimedEvent(hub, event);
Expand All @@ -49,6 +51,7 @@ describe('maybeCaptureExceptionForTimedEvent', () => {
const captureException = jest.fn();
const hub = {
captureException,
// eslint-disable-next-line deprecation/deprecation
} as unknown as Hub;

maybeCaptureExceptionForTimedEvent(hub, event);
Expand Down Expand Up @@ -76,6 +79,7 @@ describe('maybeCaptureExceptionForTimedEvent', () => {
const captureException = jest.fn();
const hub = {
captureException,
// eslint-disable-next-line deprecation/deprecation
} as unknown as Hub;

maybeCaptureExceptionForTimedEvent(hub, event);
Expand Down Expand Up @@ -119,6 +123,7 @@ describe('maybeCaptureExceptionForTimedEvent', () => {
const captureException = jest.fn();
const hub = {
captureException,
// eslint-disable-next-line deprecation/deprecation
} as unknown as Hub;

maybeCaptureExceptionForTimedEvent(hub, event, span);
Expand Down
1 change: 1 addition & 0 deletions packages/opentelemetry/src/custom/transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { uuid4 } from '@sentry/utils';
* This is a fork of core's tracing/hubextensions.ts _startTransaction,
* with some OTEL specifics.
*/
// eslint-disable-next-line deprecation/deprecation
export function startTransaction(hub: HubInterface, transactionContext: TransactionContext): Transaction {
// eslint-disable-next-line deprecation/deprecation
const client = hub.getClient();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { isString } from '@sentry/utils';
* Maybe capture a Sentry exception for an OTEL timed event.
* This will check if the event is exception-like and in that case capture it as an exception.
*/
// eslint-disable-next-line deprecation/deprecation
export function maybeCaptureExceptionForTimedEvent(hub: Hub, event: TimedEvent, otelSpan?: OtelSpan): void {
if (event.name !== 'exception') {
return;
Expand Down
3 changes: 3 additions & 0 deletions packages/opentelemetry/src/utils/contextData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,17 @@ export function setPropagationContextOnContext(context: Context, propagationCont
* Try to get the Hub from the given OTEL context.
* This requires a Context Manager that was wrapped with getWrappedContextManager.
*/
// eslint-disable-next-line deprecation/deprecation
export function getHubFromContext(context: Context): Hub | undefined {
// eslint-disable-next-line deprecation/deprecation
return context.getValue(SENTRY_HUB_CONTEXT_KEY) as Hub | undefined;
}

/**
* Set a Hub on an OTEL context..
* This will return a forked context with the Propagation Context set.
*/
// eslint-disable-next-line deprecation/deprecation
export function setHubOnContext(context: Context, hub: Hub): Context {
return context.setValue(SENTRY_HUB_CONTEXT_KEY, hub);
}
3 changes: 3 additions & 0 deletions packages/opentelemetry/src/utils/spanData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import type { AbstractSpan } from '../types';
// and since we are using weakmaps, we do not need to clean up after ourselves
const SpanScope = new WeakMap<AbstractSpan, Scope>();
const SpanFinishScope = new WeakMap<AbstractSpan, Scope>();
// eslint-disable-next-line deprecation/deprecation
const SpanHub = new WeakMap<AbstractSpan, Hub>();
const SpanParent = new WeakMap<AbstractSpan, Span>();
const SpanMetadata = new WeakMap<AbstractSpan, Partial<TransactionMetadata>>();
Expand All @@ -23,11 +24,13 @@ export function getSpanScope(span: AbstractSpan): Scope | undefined {
}

/** Set the Sentry hub on an OTEL span. */
// eslint-disable-next-line deprecation/deprecation
export function setSpanHub(span: AbstractSpan, hub: Hub): void {
SpanHub.set(span, hub);
}

/** Get the Sentry hub of an OTEL span. */
// eslint-disable-next-line deprecation/deprecation
export function getSpanHub(span: AbstractSpan): Hub | undefined {
return SpanHub.get(span);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ describe('maybeCaptureExceptionForTimedEvent', () => {
const captureException = jest.fn();
const hub = {
captureException,
// eslint-disable-next-line deprecation/deprecation
} as unknown as Hub;

maybeCaptureExceptionForTimedEvent(hub, event);
Expand All @@ -30,6 +31,7 @@ describe('maybeCaptureExceptionForTimedEvent', () => {
const captureException = jest.fn();
const hub = {
captureException,
// eslint-disable-next-line deprecation/deprecation
} as unknown as Hub;

maybeCaptureExceptionForTimedEvent(hub, event);
Expand All @@ -49,6 +51,7 @@ describe('maybeCaptureExceptionForTimedEvent', () => {
const captureException = jest.fn();
const hub = {
captureException,
// eslint-disable-next-line deprecation/deprecation
} as unknown as Hub;

maybeCaptureExceptionForTimedEvent(hub, event);
Expand Down Expand Up @@ -76,6 +79,7 @@ describe('maybeCaptureExceptionForTimedEvent', () => {
const captureException = jest.fn();
const hub = {
captureException,
// eslint-disable-next-line deprecation/deprecation
} as unknown as Hub;

maybeCaptureExceptionForTimedEvent(hub, event);
Expand Down Expand Up @@ -119,6 +123,7 @@ describe('maybeCaptureExceptionForTimedEvent', () => {
const captureException = jest.fn();
const hub = {
captureException,
// eslint-disable-next-line deprecation/deprecation
} as unknown as Hub;

maybeCaptureExceptionForTimedEvent(hub, event, span);
Expand Down
2 changes: 2 additions & 0 deletions packages/profiling-node/src/hubextensions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { isValidSampleRate } from './utils';
export const MAX_PROFILE_DURATION_MS = 30 * 1000;

type StartTransaction = (
// eslint-disable-next-line deprecation/deprecation
this: Hub,
transactionContext: TransactionContext,
customSamplingContext?: CustomSamplingContext,
Expand Down Expand Up @@ -142,6 +143,7 @@ export function stopTransactionProfile(
*/
export function __PRIVATE__wrapStartTransactionWithProfiling(startTransaction: StartTransaction): StartTransaction {
return function wrappedStartTransaction(
// eslint-disable-next-line deprecation/deprecation
this: Hub,
transactionContext: TransactionContext,
customSamplingContext?: CustomSamplingContext,
Expand Down
2 changes: 2 additions & 0 deletions packages/profiling-node/src/integration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ export class ProfilingIntegration implements Integration {
* @inheritDoc
*/
public readonly name: string;
// eslint-disable-next-line deprecation/deprecation
public getCurrentHub?: () => Hub;

public constructor() {
Expand All @@ -64,6 +65,7 @@ export class ProfilingIntegration implements Integration {
/**
* @inheritDoc
*/
// eslint-disable-next-line deprecation/deprecation
public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void {
this.getCurrentHub = getCurrentHub;
// eslint-disable-next-line deprecation/deprecation
Expand Down
2 changes: 2 additions & 0 deletions packages/profiling-node/test/hubextensions.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ function makeHubMock({
}: {
profilesSampleRate: number | undefined;
client?: Partial<NodeClient>;
// eslint-disable-next-line deprecation/deprecation
}): Hub {
return {
getClient: jest.fn().mockImplementation(() => {
Expand All @@ -59,6 +60,7 @@ function makeHubMock({
...(client ?? {}),
};
}),
// eslint-disable-next-line deprecation/deprecation
} as unknown as Hub;
}

Expand Down

0 comments on commit 5c35031

Please sign in to comment.