Skip to content

Commit 5fab95a

Browse files
committed
ref: Make it easier to use stackParser
1 parent b450538 commit 5fab95a

19 files changed

+42
-74
lines changed

packages/browser/src/eventbuilder.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
} from '@sentry/utils';
1515

1616
/**
17-
* This function creates an exception from an TraceKitStackTrace
17+
* This function creates an exception from a JavaScript Error
1818
*/
1919
export function exceptionFromError(stackParser: StackParser, ex: Error): Exception {
2020
// Get the frames first since Opera can lose the stack if we touch anything else first

packages/browser/src/exports.ts

+7-6
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,13 @@ export {
4545

4646
export { BrowserClient } from './client';
4747
export {
48-
defaultStackParsers,
49-
chromeStackParser,
50-
geckoStackParser,
51-
opera10StackParser,
52-
opera11StackParser,
53-
winjsStackParser,
48+
defaultStackParser,
49+
defaultStackLineParsers,
50+
chromeStackLineParser,
51+
geckoStackLineParser,
52+
opera10StackLineParser,
53+
opera11StackLineParser,
54+
winjsStackLineParser,
5455
} from './stack-parsers';
5556
export { defaultIntegrations, forceLoad, init, lastEventId, onLoad, showReportDialog, flush, close, wrap } from './sdk';
5657
export { SDK_NAME } from './version';

packages/browser/src/sdk.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ import {
1111
getGlobalObject,
1212
logger,
1313
resolvedSyncPromise,
14-
stackParserFromOptions,
14+
stackParserFromStackParserOptions,
1515
supportsFetch,
1616
} from '@sentry/utils';
1717

1818
import { BrowserClient, BrowserClientOptions, BrowserOptions } from './client';
1919
import { IS_DEBUG_BUILD } from './flags';
2020
import { ReportDialogOptions, wrap as internalWrap } from './helpers';
2121
import { Breadcrumbs, Dedupe, GlobalHandlers, LinkedErrors, TryCatch, UserAgent } from './integrations';
22-
import { defaultStackParsers } from './stack-parsers';
22+
import { defaultStackParser } from './stack-parsers';
2323
import { makeFetchTransport, makeXHRTransport } from './transports';
2424

2525
export const defaultIntegrations = [
@@ -110,7 +110,7 @@ export function init(options: BrowserOptions = {}): void {
110110

111111
const clientOptions: BrowserClientOptions = {
112112
...options,
113-
stackParser: stackParserFromOptions(options.stackParser || defaultStackParsers),
113+
stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),
114114
integrations: getIntegrationsToSetup(options),
115115
transport: options.transport || (supportsFetch() ? makeFetchTransport : makeXHRTransport),
116116
};

packages/browser/src/stack-parsers.ts

+9-6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { StackFrame, StackLineParser, StackLineParserFn } from '@sentry/types';
2+
import { createStackParser } from '@sentry/utils';
23

34
// global reference to slice
45
const UNKNOWN_FUNCTION = '?';
@@ -60,7 +61,7 @@ const chrome: StackLineParserFn = line => {
6061
return;
6162
};
6263

63-
export const chromeStackParser: StackLineParser = [CHROME_PRIORITY, chrome];
64+
export const chromeStackLineParser: StackLineParser = [CHROME_PRIORITY, chrome];
6465

6566
// gecko regex: `(?:bundle|\d+\.js)`: `bundle` is for react native, `\d+\.js` also but specifically for ram bundles because it
6667
// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js
@@ -96,7 +97,7 @@ const gecko: StackLineParserFn = line => {
9697
return;
9798
};
9899

99-
export const geckoStackParser: StackLineParser = [GECKO_PRIORITY, gecko];
100+
export const geckoStackLineParser: StackLineParser = [GECKO_PRIORITY, gecko];
100101

101102
const winjsRegex =
102103
/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
@@ -109,7 +110,7 @@ const winjs: StackLineParserFn = line => {
109110
: undefined;
110111
};
111112

112-
export const winjsStackParser: StackLineParser = [WINJS_PRIORITY, winjs];
113+
export const winjsStackLineParser: StackLineParser = [WINJS_PRIORITY, winjs];
113114

114115
const opera10Regex = / line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i;
115116

@@ -118,7 +119,7 @@ const opera10: StackLineParserFn = line => {
118119
return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;
119120
};
120121

121-
export const opera10StackParser: StackLineParser = [OPERA10_PRIORITY, opera10];
122+
export const opera10StackLineParser: StackLineParser = [OPERA10_PRIORITY, opera10];
122123

123124
const opera11Regex =
124125
/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i;
@@ -128,9 +129,11 @@ const opera11: StackLineParserFn = line => {
128129
return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;
129130
};
130131

131-
export const opera11StackParser: StackLineParser = [OPERA11_PRIORITY, opera11];
132+
export const opera11StackLineParser: StackLineParser = [OPERA11_PRIORITY, opera11];
132133

133-
export const defaultStackParsers = [chromeStackParser, geckoStackParser, winjsStackParser];
134+
export const defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser, winjsStackLineParser];
135+
136+
export const defaultStackParser = createStackParser(...defaultStackLineParsers);
134137

135138
/**
136139
* Safari web extensions, starting version unknown, can produce "frames-only" stacktraces.

packages/browser/test/unit/integrations/linkederrors.test.ts

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
import { Event as SentryEvent, Exception, ExtendedError } from '@sentry/types';
2-
import { createStackParser } from '@sentry/utils';
32

43
import { BrowserClient } from '../../../src/client';
54
import * as LinkedErrorsModule from '../../../src/integrations/linkederrors';
6-
import { defaultStackParsers } from '../../../src/stack-parsers';
5+
import { defaultStackParser as parser } from '../../../src/stack-parsers';
76
import { getDefaultBrowserClientOptions } from '../helper/browser-client-options';
87

9-
const parser = createStackParser(...defaultStackParsers);
10-
118
type EventWithException = SentryEvent & {
129
exception: {
1310
values: Exception[];

packages/browser/test/unit/tracekit/chromium.test.ts

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
import { createStackParser } from '@sentry/utils';
2-
31
import { exceptionFromError } from '../../../src/eventbuilder';
4-
import { defaultStackParsers } from '../../../src/stack-parsers';
5-
6-
const parser = createStackParser(...defaultStackParsers);
2+
import { defaultStackParser as parser } from '../../../src/stack-parsers';
73

84
describe('Tracekit - Chrome Tests', () => {
95
it('should parse Chrome error with no location', () => {

packages/browser/test/unit/tracekit/firefox.test.ts

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
import { createStackParser } from '@sentry/utils';
2-
31
import { exceptionFromError } from '../../../src/eventbuilder';
4-
import { defaultStackParsers } from '../../../src/stack-parsers';
5-
6-
const parser = createStackParser(...defaultStackParsers);
2+
import { defaultStackParser as parser } from '../../../src/stack-parsers';
73

84
describe('Tracekit - Firefox Tests', () => {
95
it('should parse Firefox 3 error', () => {

packages/browser/test/unit/tracekit/ie.test.ts

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
import { createStackParser } from '@sentry/utils';
2-
31
import { exceptionFromError } from '../../../src/eventbuilder';
4-
import { defaultStackParsers } from '../../../src/stack-parsers';
5-
6-
const parser = createStackParser(...defaultStackParsers);
2+
import { defaultStackParser as parser } from '../../../src/stack-parsers';
73

84
describe('Tracekit - IE Tests', () => {
95
it('should parse IE 10 error', () => {

packages/browser/test/unit/tracekit/misc.test.ts

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
import { createStackParser } from '@sentry/utils';
2-
31
import { exceptionFromError } from '../../../src/eventbuilder';
4-
import { defaultStackParsers } from '../../../src/stack-parsers';
5-
6-
const parser = createStackParser(...defaultStackParsers);
2+
import { defaultStackParser as parser } from '../../../src/stack-parsers';
73

84
describe('Tracekit - Misc Tests', () => {
95
it('should parse PhantomJS 1.19 error', () => {

packages/browser/test/unit/tracekit/opera.test.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { createStackParser } from '@sentry/utils';
22

33
import { exceptionFromError } from '../../../src/eventbuilder';
4-
import { defaultStackParsers, opera10StackParser, opera11StackParser } from '../../../src/stack-parsers';
4+
import { defaultStackParser, opera10StackLineParser, opera11StackLineParser } from '../../../src/stack-parsers';
55

6-
const operaParser = createStackParser(opera10StackParser, opera11StackParser);
7-
const chromiumParser = createStackParser(...defaultStackParsers);
6+
const operaParser = createStackParser(opera10StackLineParser, opera11StackLineParser);
7+
const chromiumParser = defaultStackParser;
88

99
describe('Tracekit - Opera Tests', () => {
1010
it('should parse Opera 10 error', () => {

packages/browser/test/unit/tracekit/react-native.test.ts

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
import { createStackParser } from '@sentry/utils';
2-
31
import { exceptionFromError } from '../../../src/eventbuilder';
4-
import { defaultStackParsers } from '../../../src/stack-parsers';
5-
6-
const parser = createStackParser(...defaultStackParsers);
2+
import { defaultStackParser as parser } from '../../../src/stack-parsers';
73

84
describe('Tracekit - React Native Tests', () => {
95
it('should parse exceptions for react-native-v8', () => {

packages/browser/test/unit/tracekit/react.test.ts

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
import { createStackParser } from '@sentry/utils';
2-
31
import { exceptionFromError } from '../../../src/eventbuilder';
4-
import { defaultStackParsers } from '../../../src/stack-parsers';
5-
6-
const parser = createStackParser(...defaultStackParsers);
2+
import { defaultStackParser as parser } from '../../../src/stack-parsers';
73

84
describe('Tracekit - React Tests', () => {
95
it('should correctly parse Invariant Violation errors and use framesToPop to drop info message', () => {

packages/browser/test/unit/tracekit/safari.test.ts

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
import { createStackParser } from '@sentry/utils';
2-
31
import { exceptionFromError } from '../../../src/eventbuilder';
4-
import { defaultStackParsers } from '../../../src/stack-parsers';
5-
6-
const parser = createStackParser(...defaultStackParsers);
2+
import { defaultStackParser as parser } from '../../../src/stack-parsers';
73

84
describe('Tracekit - Safari Tests', () => {
95
it('should parse Safari 6 error', () => {

packages/node/src/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export { NodeClient } from './client';
4646
export { defaultIntegrations, init, lastEventId, flush, close, getSentryRelease } from './sdk';
4747
export { deepReadDirSync } from './utils';
4848
export { SDK_NAME } from './version';
49-
export { nodeStackParser } from './stack-parser';
49+
export { defaultStackParser } from './stack-parser';
5050

5151
import { Integrations as CoreIntegrations } from '@sentry/core';
5252
import { getMainCarrier } from '@sentry/hub';

packages/node/src/sdk.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { getCurrentHub, getIntegrationsToSetup, initAndBind, Integrations as CoreIntegrations } from '@sentry/core';
22
import { getMainCarrier, setHubOnCarrier } from '@sentry/hub';
33
import { SessionStatus } from '@sentry/types';
4-
import { getGlobalObject, logger, stackParserFromOptions } from '@sentry/utils';
4+
import { getGlobalObject, logger, stackParserFromStackParserOptions } from '@sentry/utils';
55
import * as domain from 'domain';
66

77
import { NodeClient } from './client';
88
import { IS_DEBUG_BUILD } from './flags';
99
import { Console, ContextLines, Http, LinkedErrors, OnUncaughtException, OnUnhandledRejection } from './integrations';
10-
import { nodeStackParser } from './stack-parser';
10+
import { defaultStackParser } from './stack-parser';
1111
import { makeNodeTransport } from './transports';
1212
import { NodeClientOptions, NodeOptions } from './types';
1313

@@ -130,7 +130,7 @@ export function init(options: NodeOptions = {}): void {
130130
// TODO(v7): Refactor this to reduce the logic above
131131
const clientOptions: NodeClientOptions = {
132132
...options,
133-
stackParser: stackParserFromOptions(options.stackParser || [nodeStackParser]),
133+
stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),
134134
integrations: getIntegrationsToSetup(options),
135135
transport: options.transport || makeNodeTransport,
136136
};

packages/node/src/stack-parser.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { StackLineParser, StackLineParserFn } from '@sentry/types';
2-
import { basename, dirname } from '@sentry/utils';
2+
import { basename, createStackParser, dirname } from '@sentry/utils';
33

44
/** Gets the module */
55
function getModule(filename: string | undefined): string | undefined {
@@ -114,4 +114,6 @@ const node: StackLineParserFn = (line: string) => {
114114
};
115115
};
116116

117-
export const nodeStackParser: StackLineParser = [90, node];
117+
export const nodeStackLineParser: StackLineParser = [90, node];
118+
119+
export const defaultStackParser = createStackParser(nodeStackLineParser);

packages/node/test/integrations/linkederrors.test.ts

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
import { ExtendedError } from '@sentry/types';
2-
import { createStackParser } from '@sentry/utils';
32

43
import { Event, NodeClient } from '../../src';
54
import { LinkedErrors } from '../../src/integrations/linkederrors';
6-
import { nodeStackParser } from '../../src/stack-parser';
5+
import { defaultStackParser as stackParser } from '../../src/stack-parser';
76
import { getDefaultNodeClientOptions } from '../helper/node-client-options';
87

9-
const stackParser = createStackParser(nodeStackParser);
10-
118
let linkedErrors: any;
129

1310
describe('LinkedErrors', () => {

packages/node/test/stacktrace.test.ts

+1-5
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,8 @@
1010
* @license MIT
1111
*/
1212

13-
import { createStackParser } from '@sentry/utils';
14-
1513
import { parseStackFrames } from '../src/eventbuilder';
16-
import { nodeStackParser } from '../src/stack-parser';
17-
18-
const stackParser = createStackParser(nodeStackParser);
14+
import { defaultStackParser as stackParser } from '../src/stack-parser';
1915

2016
function testBasic() {
2117
return new Error('something went wrong');

packages/utils/src/stacktrace.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export function createStackParser(...parsers: StackLineParser[]): StackParser {
3636
*
3737
* If options contains an array of line parsers, it is converted into a parser
3838
*/
39-
export function stackParserFromOptions(stackParser: StackParser | StackLineParser[]): StackParser {
39+
export function stackParserFromStackParserOptions(stackParser: StackParser | StackLineParser[]): StackParser {
4040
if (Array.isArray(stackParser)) {
4141
return createStackParser(...stackParser);
4242
}

0 commit comments

Comments
 (0)