Skip to content
Merged
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
26 changes: 15 additions & 11 deletions packages/core/src/base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,25 +113,27 @@ export abstract class BaseClient<B extends Backend, O extends Options>
/**
* @inheritDoc
*/
public async captureException(exception: any, scope: Scope): Promise<void> {
public async captureException(exception: any, scope?: Scope): Promise<void> {
const event = await this.getBackend().eventFromException(exception);
await this.captureEvent(event, scope);
}

/**
* @inheritDoc
*/
public async captureMessage(message: string, scope: Scope): Promise<void> {
public async captureMessage(message: string, scope?: Scope): Promise<void> {
const event = await this.getBackend().eventFromMessage(message);
await this.captureEvent(event, scope);
}

/**
* @inheritDoc
*/
public async captureEvent(event: SentryEvent, scope: Scope): Promise<void> {
await this.processEvent(event, scope, async finalEvent =>
this.getBackend().sendEvent(finalEvent),
public async captureEvent(event: SentryEvent, scope?: Scope): Promise<void> {
await this.processEvent(
event,
async finalEvent => this.getBackend().sendEvent(finalEvent),
scope,
);
}

Expand All @@ -140,7 +142,7 @@ export abstract class BaseClient<B extends Backend, O extends Options>
*/
public async addBreadcrumb(
breadcrumb: Breadcrumb,
scope: Scope,
scope?: Scope,
): Promise<void> {
const {
shouldAddBreadcrumb,
Expand All @@ -163,7 +165,7 @@ export abstract class BaseClient<B extends Backend, O extends Options>
? beforeBreadcrumb(mergedBreadcrumb)
: mergedBreadcrumb;

if (await this.getBackend().storeBreadcrumb(finalBreadcrumb)) {
if ((await this.getBackend().storeBreadcrumb(finalBreadcrumb)) && scope) {
scope.addBreadcrumb(
finalBreadcrumb,
Math.min(maxBreadcrumbs, MAX_BREADCRUMBS),
Expand Down Expand Up @@ -230,7 +232,7 @@ export abstract class BaseClient<B extends Backend, O extends Options>
*/
protected async prepareEvent(
event: SentryEvent,
scope: Scope,
scope?: Scope,
): Promise<SentryEvent> {
const {
environment,
Expand All @@ -246,7 +248,9 @@ export abstract class BaseClient<B extends Backend, O extends Options>
prepared.release = release;
}

scope.applyToEvent(prepared, Math.min(maxBreadcrumbs, MAX_BREADCRUMBS));
if (scope) {
scope.applyToEvent(prepared, Math.min(maxBreadcrumbs, MAX_BREADCRUMBS));
}

return prepared;
}
Expand All @@ -264,14 +268,14 @@ export abstract class BaseClient<B extends Backend, O extends Options>
* was exceeded, the status will be {@link SendStatus.RateLimit}.
*
* @param event The event to send to Sentry.
* @param scope A scope containing event metadata.
* @param send A function to actually send the event.
* @param scope A scope containing event metadata.
* @returns A Promise that resolves with the event status.
*/
protected async processEvent(
event: SentryEvent,
scope: Scope,
send: (finalEvent: SentryEvent) => Promise<number>,
scope?: Scope,
): Promise<SendStatus> {
if (!this.isEnabled()) {
return SendStatus.Skipped;
Expand Down
5 changes: 4 additions & 1 deletion packages/core/src/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,10 @@ export interface Client<O extends Options = Options> {
/** Returns the current options. */
getOptions(): O;

/** Returns a new internal scope used by the shim to handle state. */
/**
* Returns a new internal scope used by the shim to handle state.
* This also notifies the backend on scope changes {@link Backend.storeScope}
*/
createScope(): Scope;
}

Expand Down
32 changes: 16 additions & 16 deletions packages/core/src/scope.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,10 +71,7 @@ export class Scope implements BaseScope {
* @param tags Tags context object to merge into current context.
*/
public setTag(key: string, value: string): void {
this.tags = {
...this.tags,
[key]: value,
};
this.tags = { ...this.tags, [key]: value };
this.notifyListeners();
}

Expand All @@ -83,10 +80,7 @@ export class Scope implements BaseScope {
* @param extra Extra context object to merge into current context.
*/
public setExtra(key: string, extra: any): void {
this.extra = {
...this.extra,
[key]: extra,
};
this.extra = { ...this.extra, [key]: extra };
this.notifyListeners();
}

Expand Down Expand Up @@ -135,11 +129,13 @@ export class Scope implements BaseScope {
/**
* Sets the breadcrumbs in the scope
* @param breadcrumbs
* @param maxBreadcrumbs
*/
public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs: number): void {
this.breadcrumbs = [...this.breadcrumbs, breadcrumb].slice(
-Math.max(0, maxBreadcrumbs),
);
public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): void {
this.breadcrumbs =
maxBreadcrumbs !== undefined && maxBreadcrumbs >= 0
? [...this.breadcrumbs, breadcrumb].slice(-maxBreadcrumbs)
: [...this.breadcrumbs, breadcrumb];
this.notifyListeners();
}

Expand All @@ -156,9 +152,10 @@ export class Scope implements BaseScope {
/**
* Applies the current context and fingerprint to the event.
* Note that breadcrumbs will be added by the client.
* @param event SentryEvent
* @param event
* @param maxBreadcrumbs
*/
public applyToEvent(event: SentryEvent, maxBreadcrumbs: number): void {
public applyToEvent(event: SentryEvent, maxBreadcrumbs?: number): void {
if (this.extra && Object.keys(this.extra).length) {
event.extra = { ...this.extra, ...event.extra };
}
Expand All @@ -176,8 +173,11 @@ export class Scope implements BaseScope {
!event.breadcrumbs ||
event.breadcrumbs.length === 0 ||
(event.breadcrumbs.values && event.breadcrumbs.values.length === 0);
if (hasNoBreadcrumbs && this.breadcrumbs.length > 0 && maxBreadcrumbs > 0) {
event.breadcrumbs = this.breadcrumbs.slice(-Math.max(0, maxBreadcrumbs));
if (hasNoBreadcrumbs && this.breadcrumbs.length > 0) {
event.breadcrumbs =
maxBreadcrumbs !== undefined && maxBreadcrumbs >= 0
? this.breadcrumbs.slice(-maxBreadcrumbs)
: this.breadcrumbs;
}
}
}