8000 Working SyncPromise migration · fireflypulse/sentry-javascript@bca8884 · GitHub
[go: up one dir, main page]

Skip to content

Commit bca8884

Browse files
committed
Working SyncPromise migration
1 parent 7af20d9 commit bca8884

File tree

13 files changed

+288
-232
lines changed

13 files changed

+288
-232
lines changed

packages/browser/src/backend.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export class BrowserBackend extends BaseBackend<BrowserOptions> {
5656
/**
5757
* @inheritDoc
5858
*/
59-
public eventFromException(exception: any, hint?: EventHint): SyncPromise<Event> {
59+
public eventFromException(exception: any, hint?: EventHint): Promise<Event> {
6060
const syntheticException = (hint && hint.syntheticException) || undefined;
6161
const event = eventFromUnknownInput(exception, syntheticException);
6262
addExceptionMechanism(event, {
@@ -72,7 +72,7 @@ export class BrowserBackend extends BaseBackend<BrowserOptions> {
7272
/**
7373
* @inheritDoc
7474
*/
75-
public eventFromMessage(message: string, level: Severity = Severity.Info, hint?: EventHint): SyncPromise<Event> {
75+
public eventFromMessage(message: string, level: Severity = Severity.Info, hint?: EventHint): Promise<Event> {
7676
const syntheticException = (hint && hint.syntheticException) || undefined;
7777
const event = eventFromString(message, syntheticException);
7878
event.level = level;

packages/browser/src/client.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { API, BaseClient, Scope } from '@sentry/core';
22
import { DsnLike, Event, EventHint } from '@sentry/types';
3-
import { getGlobalObject, logger, SyncPromise } from '@sentry/utils';
3+
import { getGlobalObject, logger } from '@sentry/utils';
44

55
import { BrowserBackend, BrowserOptions } from './backend';
66
import { SDK_NAME, SDK_VERSION } from './version';
@@ -51,7 +51,7 @@ export class BrowserClient extends BaseClient<BrowserBackend, BrowserOptions> {
5151
/**
5252
* @inheritDoc
5353
*/
54-
protected _prepareEvent(event: Event, scope?: Scope, hint?: EventHint): SyncPromise<Event | null> {
54+
protected _prepareEvent(event: Event, scope?: Scope, hint?: EventHint): Promise<Event | null> {
5555
event.platform = event.platform || 'javascript';
5656
event.sdk = {
5757
...event.sdk,

packages/core/src/basebackend.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Event, EventHint, Options, Severity, Transport } from '@sentry/types';
2-
import { logger, SentryError, SyncPromise } from '@sentry/utils';
2+
import { logger, SentryError } from '@sentry/utils';
33

44
import { NoopTransport } from './transports/noop';
55

@@ -25,10 +25,10 @@ import { NoopTransport } from './transports/noop';
2525
*/
2626
export interface Backend {
2727
/** Creates a {@link Event} from an exception. */
28-
eventFromException(exception: any, hint?: EventHint): SyncPromise<Event>;
28+
eventFromException(exception: any, hint?: EventHint): Promise<Event>;
2929

3030
/** Creates a {@link Event} from a plain message. */
31-
eventFromMessage(message: string, level?: Severity, hint?: EventHint): SyncPromise<Event>;
31+
eventFromMessage(message: string, level?: Severity, hint?: EventHint): Promise<Event>;
3232

3333
/** Submits the event to Sentry */
3434
sendEvent(event: Event): void;
@@ -78,14 +78,14 @@ export abstract class BaseBackend<O extends Options> implements Backend {
7878
/**
7979
* @inheritDoc
8080
*/
81-
public eventFromException(_exception: any, _hint?: EventHint): SyncPromise<Event> {
81+
public eventFromException(_exception: any, _hint?: EventHint): Promise<Event> {
8282
throw new SentryError('Backend has to implement `eventFromException` method');
8383
}
8484

8585
/**
8686
* @inheritDoc
8787
*/
88-
public eventFromMessage(_message: string, _level?: Severity, _hint?: EventHint): SyncPromise<Event> {
88+
public eventFromMessage(_message: string, _level?: Severity, _hint?: EventHint): Promise<Event> {
8989
throw new SentryError('Backend has to implement `eventFromMessage` method');
9090
}
9191

packages/core/src/baseclient.ts

Lines changed: 43 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ export abstract class BaseClient<B extends Backend, O extends Options> implement
255255
* @param scope A scope containing event metadata.
256256
* @returns A new event with more information.
257257
*/
258-
protected _prepareEvent(event: Event, scope?: Scope, hint?: EventHint): SyncPromise<Event | null> {
258+
protected _prepareEvent(event: Event, scope?: Scope, hint?: EventHint): Promise<Event | null> {
259259
const { environment, release, dist, maxValueLength = 250 } = this.getOptions();
260260

261261
const prepared: Event = { ...event };
@@ -327,7 +327,7 @@ export abstract class BaseClient<B extends Backend, O extends Options> implement
327327
* @param scope A scope containing event metadata.
328328
* @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.
329329
*/
330-
protected _processEvent(event: Event, hint?: EventHint, scope?: Scope): SyncPromise<Event> {
330+
protected _processEvent(event: Event, hint?: EventHint, scope?: Scope): Promise<Event> {
331331
const { beforeSend, sampleRate } = this.getOptions();
332332

333333
if (!this._isEnabled()) {
@@ -341,50 +341,54 @@ export abstract class BaseClient<B extends Backend, O extends Options> implement
341341
}
342342

343343
return new SyncPromise((resolve, reject) => {
344-
this._prepareEvent(event, scope, hint).then(prepared => {
345-
if (prepared === null) {
346-
reject('An event processor returned null, will not send event.');
347-
return;
348-
}
349-
350-
let finalEvent: Event | null = prepared;
351-
352-
try {
353-
const isInternalException = hint && hint.data && (hint.data as { [key: string]: any }).__sentry__ === true;
354-
if (isInternalException || !beforeSend) {
355-
this._getBackend().sendEvent(finalEvent);
356-
resolve(finalEvent);
344+
this._prepareEvent(event, scope, hint)
345+
.then(prepared => {
346+
if (prepared === null) {
347+
reject('An event processor returned null, will not send event.');
357348
return;
358349
}
359350

360-
const beforeSendResult = beforeSend(prepared, hint);
361-
if ((typeof beforeSendResult as any) === 'undefined') {
362-
logger.error('`beforeSend` method has to return `null` or a valid event.');
363-
} else if (isThenable(beforeSendResult)) {
364-
this._handleAsyncBeforeSend(beforeSendResult as Promise<Event | null>, resolve, reject);
365-
} else {
366-
finalEvent = beforeSendResult as Event | null;
367-
368-
if (finalEvent === null) {
369-
logger.log('`beforeSend` returned `null`, will not send event.');
370-
resolve(null);
351+
let finalEvent: Event | null = prepared;
352+
353+
try {
354+
const isInternalException = hint && hint.data && (hint.data as { [key: string]: any }).__sentry__ === true;
355+
if (isInternalException || !beforeSend) {
356+
this._getBackend().sendEvent(finalEvent);
357+
resolve(finalEvent);
371358
return;
372359
}
373360

374-
// From here on we are really async
375-
this._getBackend().sendEvent(finalEvent);
376-
resolve(finalEvent);
361+
const beforeSendResult = beforeSend(prepared, hint);
362+
if ((typeof beforeSendResult as any) === 'undefined') {
363+
logger.error('`beforeSend` method has to return `null` or a valid event.');
364+
} else if (isThenable(beforeSendResult)) {
365+
this._handleAsyncBeforeSend(beforeSendResult as Promise<Event | null>, resolve, reject);
366+
} else {
367+
finalEvent = beforeSendResult as Event | null;
368+
369+
if (finalEvent === null) {
370+
logger.log('`beforeSend` returned `null`, will not send event.');
371+
resolve(null);
372+
return;
373+
}
374+
375+
// From here on we are really async
376+
this._getBackend().sendEvent(finalEvent);
377+
resolve(finalEvent);
378+
}
379+
} catch (exception) {
380+
this.captureException(exception, {
381+
data: {
382+
__sentry__: true,
383+
},
384+
originalException: exception as Error,
385+
});
386+
reject('`beforeSend` threw an error, will not send event.');
377387
}
378-
} catch (exception) {
379-
this.captureException(exception, {
380-
data: {
381-
__sentry__: true,
382-
},
383-
originalException: exception as Error,
384-
});
385-
reject('`beforeSend` throw an error, will not send event.');
386-
}
387-
});
388+
})
389+
.catch(() => {
390+
reject('`beforeSend` threw an error, will not send event.');
391+
});
388392
});
389393
}
390394

packages/core/test/mocks/backend.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export class TestBackend extends BaseBackend<TestOptions> {
3737
return super._setupTransport();
3838
}
3939

40-
public eventFromException(exception: any): SyncPromise<Event> {
40+
public eventFromException(exception: any): Promise<Event> {
4141
return SyncPromise.resolve({
4242
exception: {
4343
values: [
@@ -50,7 +50,7 @@ export class TestBackend extends BaseBackend<TestOptions> {
5050
});
5151
}
5252

53-
public eventFromMessage(message: string): SyncPromise<Event> {
53+
public eventFromMessage(message: string): Promise<Event> {
5454
return SyncPromise.resolve({ message });
5555
}
5656

packages/hub/src/scope.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ export class Scope implements ScopeInterface {
8383
event: Event | null,
8484
hint?: EventHint,
8585
index: number = 0,
86-
): SyncPromise<Event | null> {
86+
): Promise<Event | null> {
8787
return new SyncPromise<Event | null>((resolve, reject) => {
8888
const processor = processors[index];
8989
// tslint:disable-next-line:strict-type-predicates
@@ -311,7 +311,7 @@ export class Scope implements ScopeInterface {
311311
* @param hint May contain additional informartion about the original exception.
312312
* @hidden
313313
*/
314-
public applyToEvent(event: Event, hint?: EventHint): SyncPromise<Event | null> {
314+
public applyToEvent(event: Event, hint?: EventHint): Promise<Event | null> {
315315
if (this._extra && Object.keys(this._extra).length) {
316316
event.extra = { ...this._extra, ...event.extra };
317317
}

packages/node/src/backend.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ export class NodeBackend extends BaseBackend<NodeOptions> {
7676
/**
7777
* @inheritDoc
7878
*/
79-
public eventFromException(exception: any, hint?: EventHint): SyncPromise<Event> {
79+
public eventFromException(exception: any, hint?: EventHint): Promise<Event> {
8080
let ex: any = exception;
8181
const mechanism: Mechanism = {
8282
handled: true,
@@ -121,7 +121,7 @@ export class NodeBackend extends BaseBackend<NodeOptions> {
121121
/**
122122
* @inheritDoc
123123
*/
124-
public eventFromMessage(message: string, level: Severity = Severity.Info, hint?: EventHint): SyncPromise<Event> {
124+
public eventFromMessage(message: string, level: Severity = Severity.Info, hint?: EventHint): Promise<Event> {
125125
const event: Event = {
126126
event_id: hint && hint.event_id,
127127
level,
@@ -131,12 +131,16 @@ export class NodeBackend extends BaseBackend<NodeOptions> {
131131
return new SyncPromise<Event>(resolve => {
132132
if (this._options.attachStacktrace && hint && hint.syntheticException) {
133133
const stack = hint.syntheticException ? extractStackFromError(hint.syntheticException) : [];
134-
parseStack(stack, this._options).then(frames => {
135-
event.stacktrace = {
136-
frames: prepareFramesForEvent(frames),
137-
};
138-
resolve(event);
139-
});
134+
parseStack(stack, this._options)
135+
.then(frames => {
136+
event.stacktrace = {
137+
frames: prepareFramesForEvent(frames),
138+
};
139+
resolve(event);
140+
})
141+
.catch(() => {
142+
resolve(event);
143+
});
140144
} else {
141145
resolve(event);
142146
}

packages/node/src/client.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { BaseClient, Scope } from '@sentry/core';
22
import { Event, EventHint } from '@sentry/types';
3-
import { SyncPromise } from '@sentry/utils';
43

54
import { NodeBackend, NodeOptions } from './backend';
65
import { SDK_NAME, SDK_VERSION } from './version';
@@ -23,7 +22,7 @@ export class NodeClient extends BaseClient<NodeBackend, NodeOptions> {
2322
/**
2423
* @inheritDoc
2524
*/
26-
protected _prepareEvent(event: Event, scope?: Scope, hint?: EventHint): SyncPromise<Event | null> {
25+
protected _prepareEvent(event: Event, scope?: Scope, hint?: EventHint): Promise<Event | null> {
2726
event.platform = event.platform || 'node';
2827
event.sdk = {
2928
...event.sdk,

packages/node/src/integrations/linkederrors.ts

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,32 +52,44 @@ export class LinkedErrors implements Integration {
5252
/**
5353
* @inheritDoc
5454
*/
55-
public handler(event: Event, hint?: EventHint): SyncPromise<Event> {
55+
public handler(event: Event, hint?: EventHint): Promise<Event> {
5656
if (!event.exception || !event.exception.values || !hint || !(hint.originalException instanceof Error)) {
5757
return SyncPromise.resolve(event);
5858
}
5959

6060
return new SyncPromise<Event>(resolve => {
61-
this.walkErrorTree(hint.originalException as ExtendedError, this._key).then((linkedErrors: Exception[]) => {
62-
if (event && event.exception && event.exception.values) {
63-
event.exception.values = [...linkedErrors, ...event.exception.values];
64-
}
65-
resolve(event);
66-
});
61+
this.walkErrorTree(hint.originalException as ExtendedError, this._key)
62+
.then((linkedErrors: Exception[]) => {
63+
if (event && event.exception && event.exception.values) {
64+
event.exception.values = [...linkedErrors, ...event.exception.values];
65+
}
66+
resolve(event);
67+
})
68+
.catch(() => {
69+
resolve(event);
70+
});
6771
});
6872
}
6973

7074
/**
7175
* @inheritDoc
7276
*/
73-
public walkErrorTree(error: ExtendedError, key: string, stack: Exception[] = []): SyncPromise<Exception[]> {
77+
public walkErrorTree(error: ExtendedError, key: string, stack: Exception[] = []): Promise<Exception[]> {
7478
if (!(error[key] instanceof Error) || stack.length + 1 >= this._limit) {
7579
return SyncPromise.resolve(stack);
7680
}
77-
return new SyncPromise<Exception[]>(resolve => {
78-
getExceptionFromError(error[key]).then((exception: Exception) => {
79-
this.walkErrorTree(error[key], key, [exception, ...stack]).then(resolve);
80-
});
81+
return new SyncPromise<Exception[]>((resolve, reject) => {
82+
getExceptionFromError(error[key])
83+
.then((exception: Exception) => {
84+
this.walkErrorTree(error[key], key, [exception, ...stack])
85+
.then(resolve)
86+
.catch(() => {
87+
reject();
88+
});
89+
})
90+
.catch(() => {
91+
reject();
92+
});
8193
});
8294
}
8395
}

packages/node/src/parsers.ts

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ function getModule(filename: string, base?: string): string {
6767
*
6868
* @param filenames Array of filepaths to read content from.
6969
*/
70-
function readSourceFiles(filenames: string[]): SyncPromise<{ [key: string]: string | null }> {
70+
function readSourceFiles(filenames: string[]): Promise<{ [key: string]: string | null }> {
7171
// we're relying on filenames being de-duped already
7272
if (filenames.length === 0) {
7373
return SyncPromise.resolve({});
@@ -132,7 +132,7 @@ export function extractStackFromError(error: Error): stacktrace.StackFrame[] {
132132
/**
133133
* @hidden
134134
*/
135-
export function parseStack(stack: stacktrace.StackFrame[], options?: NodeOptions): SyncPromise<StackFrame[]> {
135+
export function parseStack(stack: stacktrace.StackFrame[], options?: NodeOptions): Promise<StackFrame[]> {
136136
const filesToRead: string[] = [];
137137

138138
const linesOfContext =
@@ -191,11 +191,7 @@ export function parseStack(stack: stacktrace.StackFrame[], options?: NodeOptions
191191
* @param filesToRead string[] of filepaths
192192
* @param frames StackFrame[] containg all frames
193193
*/
194-
function addPrePostContext(
195-
filesToRead: string[],
196-
frames: StackFrame[],
197-
linesOfContext: number,
198-
): SyncPromise<StackFrame[]> {
194+
function addPrePostContext(filesToRead: string[], frames: StackFrame[], linesOfContext: number): Promise<StackFrame[]> {
199195
return new SyncPromise<StackFrame[]>(resolve =>
200196
readSourceFiles(filesToRead).then(sourceFiles => {
201197
const result = frames.map(frame => {
@@ -228,7 +224,7 @@ function addPrePostContext(
228224
/**
229225
* @hidden
230226
*/
231-
export function getExceptionFromError(error: Error, options?: NodeOptions): SyncPromise<Exception> {
227+
export function getExceptionFromError(error: Error, options?: NodeOptions): Promise<Exception> {
232228
const name = error.name || error.constructor.name;
233229
const stack = extractStackFromError(error);
234230
return new SyncPromise<Exception>(resolve =>
@@ -248,7 +244,7 @@ export function getExceptionFromError(error: Error, options?: NodeOptions): Sync
248244
/**
249245
* @hidden
250246
*/
251-
export function parseError(error: ExtendedError, options?: NodeOptions): SyncPromise<Event> {
247+
export function parseError(error: ExtendedError, options?: NodeOptions): Promise<Event> {
252248
return new SyncPromise<Event>(resolve =>
253249
getExceptionFromError(error, options).then((exception: Exception) => {
254250
resolve({

0 commit comments

Comments
 (0)
0