Skip to content

Commit

Permalink
fix exports etc.
Browse files Browse the repository at this point in the history
  • Loading branch information
mydea committed Dec 13, 2024
1 parent 12fd86b commit 30d32a5
Show file tree
Hide file tree
Showing 8 changed files with 29 additions and 39 deletions.
22 changes: 21 additions & 1 deletion packages/core/src/carrier.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export interface Carrier {
__SENTRY__?: VersionedCarrier;
}

export type VersionedCarrier = {
type VersionedCarrier = {
version?: string;
} & Record<Exclude<string, 'version'>, SentryCarrier>;

Expand Down Expand Up @@ -57,3 +57,23 @@ export function getSentryCarrier(carrier: Carrier): SentryCarrier {
// rather than what's set in .version so that "this" SDK always gets its carrier
return (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});
}

/**
* Returns a global singleton contained in the global `__SENTRY__[]` object.
*
* If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory
* function and added to the `__SENTRY__` object.
*
* @param name name of the global singleton on __SENTRY__
* @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`
* @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value
* @returns the singleton
*/
export function getGlobalSingleton<Prop extends keyof SentryCarrier>(
name: Prop,
creator: () => NonNullable<SentryCarrier[Prop]>,
obj = GLOBAL_OBJ,
): NonNullable<SentryCarrier[Prop]> {
const carrier = getSentryCarrier(obj);
return carrier[name] || (carrier[name] = creator());
}
2 changes: 1 addition & 1 deletion packages/core/src/currentScopes.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { getAsyncContextStrategy } from './asyncContext';
import { getMainCarrier } from './carrier';
import { getGlobalSingleton } from './carrier';
import { Scope as ScopeClass } from './scope';
import type { Client, Scope, TraceContext } from './types-hoist';
import { dropUndefinedKeys } from './utils-hoist/object';
import { getGlobalSingleton } from './utils-hoist/worldwide';

/**
* Get the currently active scope.
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/defaultScopes.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { getGlobalSingleton } from './carrier';
import { Scope as ScopeClass } from './scope';
import type { Scope } from './types-hoist';
import { getGlobalSingleton } from './utils-hoist/worldwide';

/** Get the default current scope. */
export function getDefaultCurrentScope(): Scope {
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export {
getDefaultIsolationScope,
} from './defaultScopes';
export { setAsyncContextStrategy } from './asyncContext';
export { getMainCarrier } from './carrier';
export { getGlobalSingleton, getMainCarrier } from './carrier';
export { makeSession, closeSession, updateSession } from './session';
// eslint-disable-next-line deprecation/deprecation
export { SessionFlusher } from './sessionflusher';
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/metrics/exports.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { getGlobalSingleton } from '../carrier';
import { getClient } from '../currentScopes';
import { DEBUG_BUILD } from '../debug-build';
import { startSpanManual } from '../tracing';
import type { Client, DurationUnit, MetricData, MetricsAggregator as MetricsAggregatorInterface } from '../types-hoist';
import { logger } from '../utils-hoist/logger';
import { timestampInSeconds } from '../utils-hoist/time';
import { getGlobalSingleton } from '../utils-hoist/worldwide';
import { handleCallbackErrors } from '../utils/handleCallbackErrors';
import { getActiveSpan, getRootSpan, spanToJSON } from '../utils/spanUtils';
import { COUNTER_METRIC_TYPE, DISTRIBUTION_METRIC_TYPE, GAUGE_METRIC_TYPE, SET_METRIC_TYPE } from './constants';
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/utils-hoist/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export { getBreadcrumbLogLevelFromHttpStatusCode } from './breadcrumb-log-level'
export { getComponentName, getDomElement, getLocationHref, htmlTreeAsString } from './browser';
export { dsnFromString, dsnToString, makeDsn } from './dsn';
export { SentryError } from './error';
export { GLOBAL_OBJ, getGlobalSingleton } from './worldwide';
export { GLOBAL_OBJ } from './worldwide';
export type { InternalGlobal } from './worldwide';
export { addConsoleInstrumentationHandler } from './instrument/console';
export { addFetchEndInstrumentationHandler, addFetchInstrumentationHandler } from './instrument/fetch';
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/utils-hoist/logger.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { getGlobalSingleton } from '../carrier';
import type { ConsoleLevel } from '../types-hoist';

import { DEBUG_BUILD } from './debug-build';
import { GLOBAL_OBJ, getGlobalSingleton } from './worldwide';
import { GLOBAL_OBJ } from './worldwide';

/** Prefix for logging strings */
const PREFIX = 'Sentry Logger ';
Expand Down
32 changes: 1 addition & 31 deletions packages/core/src/utils-hoist/worldwide.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,8 @@

/* eslint-disable @typescript-eslint/no-explicit-any */

import type { Carrier, SentryCarrier, VersionedCarrier } from '../carrier';
import type { Carrier } from '../carrier';
import type { SdkSource } from './env';
import { SDK_VERSION } from './version';

/** Internal global with common properties and Sentry extensions */
export type InternalGlobal = {
Expand Down Expand Up @@ -53,32 +52,3 @@ export type InternalGlobal = {

/** Get's the global object for the current JavaScript runtime */
export const GLOBAL_OBJ = globalThis as unknown as InternalGlobal;

/**
* Returns a global singleton contained in the global `__SENTRY__[]` object.
*
* If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory
* function and added to the `__SENTRY__` object.
*
* @param name name of the global singleton on __SENTRY__
* @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`
* @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value
* @returns the singleton
*/
export function getGlobalSingleton<Prop extends keyof SentryCarrier>(
name: Prop,
creator: () => NonNullable<SentryCarrier[Prop]>,
obj = GLOBAL_OBJ,
): NonNullable<SentryCarrier[Prop]> {
const __SENTRY__ = getSentryCarrierObj(obj);
const versionedCarrier = (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});

return versionedCarrier[name] || (versionedCarrier[name] = creator());
}

function getSentryCarrierObj(
obj: Omit<InternalGlobal, '__SENTRY__'> & Partial<Pick<InternalGlobal, '__SENTRY__'>>,
): VersionedCarrier {
// Set the Sentry carrier, if it does not exist yet
return obj.__SENTRY__ || (obj.__SENTRY__ = {});
}

0 comments on commit 30d32a5

Please sign in to comment.