@sentry/browser 7.0.0-alpha.1 → 7.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/client.d.ts +23 -18
- package/cjs/client.d.ts.map +1 -1
- package/cjs/client.js +75 -51
- package/cjs/client.js.map +1 -1
- package/cjs/eventbuilder.d.ts +1 -1
- package/cjs/eventbuilder.js +31 -33
- package/cjs/eventbuilder.js.map +1 -1
- package/cjs/exports.d.ts +5 -4
- package/cjs/exports.d.ts.map +1 -1
- package/cjs/exports.js +20 -8
- package/cjs/exports.js.map +1 -1
- package/cjs/helpers.d.ts +0 -5
- package/cjs/helpers.d.ts.map +1 -1
- package/cjs/helpers.js +15 -49
- package/cjs/helpers.js.map +1 -1
- package/cjs/index.d.ts +1 -2
- package/cjs/index.d.ts.map +1 -1
- package/cjs/index.js +7 -9
- package/cjs/index.js.map +1 -1
- package/cjs/integrations/breadcrumbs.d.ts +6 -7
- package/cjs/integrations/breadcrumbs.d.ts.map +1 -1
- package/cjs/integrations/breadcrumbs.js +37 -54
- package/cjs/integrations/breadcrumbs.js.map +1 -1
- package/cjs/integrations/dedupe.js +25 -26
- package/cjs/integrations/dedupe.js.map +1 -1
- package/cjs/integrations/globalhandlers.d.ts.map +1 -1
- package/cjs/integrations/globalhandlers.js +52 -53
- package/cjs/integrations/globalhandlers.js.map +1 -1
- package/cjs/integrations/linkederrors.d.ts.map +1 -1
- package/cjs/integrations/linkederrors.js +26 -29
- package/cjs/integrations/linkederrors.js.map +1 -1
- package/cjs/integrations/trycatch.js +30 -40
- package/cjs/integrations/trycatch.js.map +1 -1
- package/cjs/integrations/useragent.js +19 -21
- package/cjs/integrations/useragent.js.map +1 -1
- package/cjs/sdk.d.ts +2 -2
- package/cjs/sdk.d.ts.map +1 -1
- package/cjs/sdk.js +47 -34
- package/cjs/sdk.js.map +1 -1
- package/cjs/stack-parsers.d.ts +7 -6
- package/cjs/stack-parsers.d.ts.map +1 -1
- package/cjs/stack-parsers.js +45 -45
- package/cjs/stack-parsers.js.map +1 -1
- package/cjs/transports/fetch.d.ts +7 -14
- package/cjs/transports/fetch.d.ts.map +1 -1
- package/cjs/transports/fetch.js +17 -78
- package/cjs/transports/fetch.js.map +1 -1
- package/cjs/transports/index.d.ts +2 -6
- package/cjs/transports/index.d.ts.map +1 -1
- package/cjs/transports/index.js +2 -10
- package/cjs/transports/index.js.map +1 -1
- package/cjs/transports/utils.d.ts.map +1 -1
- package/cjs/transports/utils.js +17 -17
- package/cjs/transports/utils.js.map +1 -1
- package/cjs/transports/xhr.d.ts +9 -9
- package/cjs/transports/xhr.d.ts.map +1 -1
- package/cjs/transports/xhr.js +39 -59
- package/cjs/transports/xhr.js.map +1 -1
- package/esm/client.d.ts +23 -18
- package/esm/client.d.ts.map +1 -1
- package/esm/client.js +73 -50
- package/esm/client.js.map +1 -1
- package/esm/eventbuilder.d.ts +1 -1
- package/esm/eventbuilder.js +30 -32
- package/esm/eventbuilder.js.map +1 -1
- package/esm/exports.d.ts +5 -4
- package/esm/exports.d.ts.map +1 -1
- package/esm/exports.js +4 -3
- package/esm/exports.js.map +1 -1
- package/esm/flags.js +1 -1
- package/esm/flags.js.map +1 -1
- package/esm/helpers.d.ts +0 -5
- package/esm/helpers.d.ts.map +1 -1
- package/esm/helpers.js +15 -48
- package/esm/helpers.js.map +1 -1
- package/esm/index.d.ts +1 -2
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +4 -6
- package/esm/index.js.map +1 -1
- package/esm/integrations/breadcrumbs.d.ts +6 -7
- package/esm/integrations/breadcrumbs.d.ts.map +1 -1
- package/esm/integrations/breadcrumbs.js +36 -54
- package/esm/integrations/breadcrumbs.js.map +1 -1
- package/esm/integrations/dedupe.js +23 -25
- package/esm/integrations/dedupe.js.map +1 -1
- package/esm/integrations/globalhandlers.d.ts.map +1 -1
- package/esm/integrations/globalhandlers.js +48 -50
- package/esm/integrations/globalhandlers.js.map +1 -1
- package/esm/integrations/linkederrors.d.ts.map +1 -1
- package/esm/integrations/linkederrors.js +24 -28
- package/esm/integrations/linkederrors.js.map +1 -1
- package/esm/integrations/trycatch.js +28 -39
- package/esm/integrations/trycatch.js.map +1 -1
- package/esm/integrations/useragent.js +17 -20
- package/esm/integrations/useragent.js.map +1 -1
- package/esm/sdk.d.ts +2 -2
- package/esm/sdk.d.ts.map +1 -1
- package/esm/sdk.js +44 -31
- package/esm/sdk.js.map +1 -1
- package/esm/stack-parsers.d.ts +7 -6
- package/esm/stack-parsers.d.ts.map +1 -1
- package/esm/stack-parsers.js +45 -45
- package/esm/stack-parsers.js.map +1 -1
- package/esm/transports/fetch.d.ts +7 -14
- package/esm/transports/fetch.d.ts.map +1 -1
- package/esm/transports/fetch.js +15 -77
- package/esm/transports/fetch.js.map +1 -1
- package/esm/transports/index.d.ts +2 -6
- package/esm/transports/index.d.ts.map +1 -1
- package/esm/transports/index.js +2 -6
- package/esm/transports/index.js.map +1 -1
- package/esm/transports/utils.d.ts.map +1 -1
- package/esm/transports/utils.js +16 -16
- package/esm/transports/utils.js.map +1 -1
- package/esm/transports/xhr.d.ts +9 -9
- package/esm/transports/xhr.d.ts.map +1 -1
- package/esm/transports/xhr.js +38 -59
- package/esm/transports/xhr.js.map +1 -1
- package/esm/version.js +1 -1
- package/esm/version.js.map +1 -1
- package/package.json +4 -4
- package/types/client.d.ts +23 -18
- package/types/client.d.ts.map +1 -1
- package/types/eventbuilder.d.ts +1 -1
- package/types/exports.d.ts +5 -4
- package/types/exports.d.ts.map +1 -1
- package/types/helpers.d.ts +0 -5
- package/types/helpers.d.ts.map +1 -1
- package/types/index.d.ts +1 -2
- package/types/index.d.ts.map +1 -1
- package/types/integrations/breadcrumbs.d.ts +6 -7
- package/types/integrations/breadcrumbs.d.ts.map +1 -1
- package/types/integrations/globalhandlers.d.ts.map +1 -1
- package/types/integrations/linkederrors.d.ts.map +1 -1
- package/types/sdk.d.ts +2 -2
- package/types/sdk.d.ts.map +1 -1
- package/types/stack-parsers.d.ts +7 -6
- package/types/stack-parsers.d.ts.map +1 -1
- package/types/transports/fetch.d.ts +7 -14
- package/types/transports/fetch.d.ts.map +1 -1
- package/types/transports/index.d.ts +2 -6
- package/types/transports/index.d.ts.map +1 -1
- package/types/transports/utils.d.ts.map +1 -1
- package/types/transports/xhr.d.ts +9 -9
- package/types/transports/xhr.d.ts.map +1 -1
- package/cjs/transports/base.d.ts +0 -65
- package/cjs/transports/base.d.ts.map +0 -1
- package/cjs/transports/base.js +0 -141
- package/cjs/transports/base.js.map +0 -1
- package/cjs/transports/new-fetch.d.ts +0 -10
- package/cjs/transports/new-fetch.d.ts.map +0 -1
- package/cjs/transports/new-fetch.js +0 -27
- package/cjs/transports/new-fetch.js.map +0 -1
- package/cjs/transports/new-xhr.d.ts +0 -11
- package/cjs/transports/new-xhr.d.ts.map +0 -1
- package/cjs/transports/new-xhr.js +0 -46
- package/cjs/transports/new-xhr.js.map +0 -1
- package/cjs/transports/setup.d.ts +0 -22
- package/cjs/transports/setup.d.ts.map +0 -1
- package/cjs/transports/setup.js +0 -44
- package/cjs/transports/setup.js.map +0 -1
- package/esm/transports/base.d.ts +0 -65
- package/esm/transports/base.d.ts.map +0 -1
- package/esm/transports/base.js +0 -140
- package/esm/transports/base.js.map +0 -1
- package/esm/transports/new-fetch.d.ts +0 -10
- package/esm/transports/new-fetch.d.ts.map +0 -1
- package/esm/transports/new-fetch.js +0 -25
- package/esm/transports/new-fetch.js.map +0 -1
- package/esm/transports/new-xhr.d.ts +0 -11
- package/esm/transports/new-xhr.d.ts.map +0 -1
- package/esm/transports/new-xhr.js +0 -44
- package/esm/transports/new-xhr.js.map +0 -1
- package/esm/transports/setup.d.ts +0 -22
- package/esm/transports/setup.d.ts.map +0 -1
- package/esm/transports/setup.js +0 -42
- package/esm/transports/setup.js.map +0 -1
- package/types/transports/base.d.ts +0 -65
- package/types/transports/base.d.ts.map +0 -1
- package/types/transports/new-fetch.d.ts +0 -10
- package/types/transports/new-fetch.d.ts.map +0 -1
- package/types/transports/new-xhr.d.ts +0 -11
- package/types/transports/new-xhr.d.ts.map +0 -1
- package/types/transports/setup.d.ts +0 -22
- package/types/transports/setup.d.ts.map +0 -1
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var DEFAULT_EVENT_TARGET = [
|
|
2
|
+
const utils_1 = require("@sentry/utils");
|
|
3
|
+
const helpers_1 = require("../helpers");
|
|
4
|
+
const DEFAULT_EVENT_TARGET = [
|
|
6
5
|
'EventTarget',
|
|
7
6
|
'Window',
|
|
8
7
|
'Node',
|
|
@@ -34,23 +33,23 @@ var DEFAULT_EVENT_TARGET = [
|
|
|
34
33
|
'XMLHttpRequestUpload',
|
|
35
34
|
];
|
|
36
35
|
/** Wrap timer functions and event targets to catch errors and provide better meta data */
|
|
37
|
-
|
|
36
|
+
class TryCatch {
|
|
38
37
|
/**
|
|
39
38
|
* @inheritDoc
|
|
40
39
|
*/
|
|
41
|
-
|
|
40
|
+
constructor(options) {
|
|
42
41
|
/**
|
|
43
42
|
* @inheritDoc
|
|
44
43
|
*/
|
|
45
44
|
this.name = TryCatch.id;
|
|
46
|
-
this._options =
|
|
45
|
+
this._options = Object.assign({ XMLHttpRequest: true, eventTarget: true, requestAnimationFrame: true, setInterval: true, setTimeout: true }, options);
|
|
47
46
|
}
|
|
48
47
|
/**
|
|
49
48
|
* Wrap timer functions and event targets to catch errors
|
|
50
49
|
* and provide better metadata.
|
|
51
50
|
*/
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
setupOnce() {
|
|
52
|
+
const global = utils_1.getGlobalObject();
|
|
54
53
|
if (this._options.setTimeout) {
|
|
55
54
|
utils_1.fill(global, 'setTimeout', _wrapTimeFunction);
|
|
56
55
|
}
|
|
@@ -63,28 +62,23 @@ var TryCatch = /** @class */ (function () {
|
|
|
63
62
|
if (this._options.XMLHttpRequest && 'XMLHttpRequest' in global) {
|
|
64
63
|
utils_1.fill(XMLHttpRequest.prototype, 'send', _wrapXHR);
|
|
65
64
|
}
|
|
66
|
-
|
|
65
|
+
const eventTargetOption = this._options.eventTarget;
|
|
67
66
|
if (eventTargetOption) {
|
|
68
|
-
|
|
67
|
+
const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;
|
|
69
68
|
eventTarget.forEach(_wrapEventTarget);
|
|
70
69
|
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
* @inheritDoc
|
|
74
|
-
*/
|
|
75
|
-
TryCatch.id = 'TryCatch';
|
|
76
|
-
return TryCatch;
|
|
77
|
-
}());
|
|
70
|
+
}
|
|
71
|
+
}
|
|
78
72
|
exports.TryCatch = TryCatch;
|
|
73
|
+
/**
|
|
74
|
+
* @inheritDoc
|
|
75
|
+
*/
|
|
76
|
+
TryCatch.id = 'TryCatch';
|
|
79
77
|
/** JSDoc */
|
|
80
78
|
function _wrapTimeFunction(original) {
|
|
81
79
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
82
|
-
return function () {
|
|
83
|
-
|
|
84
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
85
|
-
args[_i] = arguments[_i];
|
|
86
|
-
}
|
|
87
|
-
var originalCallback = args[0];
|
|
80
|
+
return function (...args) {
|
|
81
|
+
const originalCallback = args[0];
|
|
88
82
|
args[0] = helpers_1.wrap(originalCallback, {
|
|
89
83
|
mechanism: {
|
|
90
84
|
data: { function: utils_1.getFunctionName(original) },
|
|
@@ -118,19 +112,15 @@ function _wrapRAF(original) {
|
|
|
118
112
|
/** JSDoc */
|
|
119
113
|
function _wrapXHR(originalSend) {
|
|
120
114
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
121
|
-
return function () {
|
|
122
|
-
var args = [];
|
|
123
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
124
|
-
args[_i] = arguments[_i];
|
|
125
|
-
}
|
|
115
|
+
return function (...args) {
|
|
126
116
|
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
xmlHttpRequestProps.forEach(
|
|
117
|
+
const xhr = this;
|
|
118
|
+
const xmlHttpRequestProps = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];
|
|
119
|
+
xmlHttpRequestProps.forEach(prop => {
|
|
130
120
|
if (prop in xhr && typeof xhr[prop] === 'function') {
|
|
131
121
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
132
122
|
utils_1.fill(xhr, prop, function (original) {
|
|
133
|
-
|
|
123
|
+
const wrapOptions = {
|
|
134
124
|
mechanism: {
|
|
135
125
|
data: {
|
|
136
126
|
function: prop,
|
|
@@ -141,7 +131,7 @@ function _wrapXHR(originalSend) {
|
|
|
141
131
|
},
|
|
142
132
|
};
|
|
143
133
|
// If Instrument integration has been called before TryCatch, get the name of original function
|
|
144
|
-
|
|
134
|
+
const originalFunction = utils_1.getOriginalFunction(original);
|
|
145
135
|
if (originalFunction) {
|
|
146
136
|
wrapOptions.mechanism.data.handler = utils_1.getFunctionName(originalFunction);
|
|
147
137
|
}
|
|
@@ -156,9 +146,9 @@ function _wrapXHR(originalSend) {
|
|
|
156
146
|
/** JSDoc */
|
|
157
147
|
function _wrapEventTarget(target) {
|
|
158
148
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
159
|
-
|
|
149
|
+
const global = utils_1.getGlobalObject();
|
|
160
150
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
161
|
-
|
|
151
|
+
const proto = global[target] && global[target].prototype;
|
|
162
152
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins
|
|
163
153
|
if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {
|
|
164
154
|
return;
|
|
@@ -172,7 +162,7 @@ function _wrapEventTarget(target) {
|
|
|
172
162
|
data: {
|
|
173
163
|
function: 'handleEvent',
|
|
174
164
|
handler: utils_1.getFunctionName(fn),
|
|
175
|
-
target
|
|
165
|
+
target,
|
|
176
166
|
},
|
|
177
167
|
handled: true,
|
|
178
168
|
type: 'instrument',
|
|
@@ -191,7 +181,7 @@ function _wrapEventTarget(target) {
|
|
|
191
181
|
data: {
|
|
192
182
|
function: 'addEventListener',
|
|
193
183
|
handler: utils_1.getFunctionName(fn),
|
|
194
|
-
target
|
|
184
|
+
target,
|
|
195
185
|
},
|
|
196
186
|
handled: true,
|
|
197
187
|
type: 'instrument',
|
|
@@ -220,9 +210,9 @@ function _wrapEventTarget(target) {
|
|
|
220
210
|
* then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible
|
|
221
211
|
* to get rid of the initial handler and it'd stick there forever.
|
|
222
212
|
*/
|
|
223
|
-
|
|
213
|
+
const wrappedEventHandler = fn;
|
|
224
214
|
try {
|
|
225
|
-
|
|
215
|
+
const originalEventHandler = wrappedEventHandler && wrappedEventHandler.__sentry_wrapped__;
|
|
226
216
|
if (originalEventHandler) {
|
|
227
217
|
originalRemoveEventListener.call(this, eventName, originalEventHandler, options);
|
|
228
218
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trycatch.js","sourceRoot":"","sources":["../../../../src/integrations/trycatch.ts"],"names":[],"mappings":"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","sourcesContent":["import { Integration, WrappedFunction } from '@sentry/types';\nimport { fill, getFunctionName, getGlobalObject, getOriginalFunction } from '@sentry/utils';\n\nimport { wrap } from '../helpers';\n\nconst DEFAULT_EVENT_TARGET = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload',\n];\n\ntype XMLHttpRequestProp = 'onload' | 'onerror' | 'onprogress' | 'onreadystatechange';\n\n/** JSDoc */\ninterface TryCatchOptions {\n setTimeout: boolean;\n setInterval: boolean;\n requestAnimationFrame: boolean;\n XMLHttpRequest: boolean;\n eventTarget: boolean | string[];\n}\n\n/** Wrap timer functions and event targets to catch errors and provide better meta data */\nexport class TryCatch implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'TryCatch';\n\n /**\n * @inheritDoc\n */\n public name: string = TryCatch.id;\n\n /** JSDoc */\n private readonly _options: TryCatchOptions;\n\n /**\n * @inheritDoc\n */\n public constructor(options?: Partial<TryCatchOptions>) {\n this._options = {\n XMLHttpRequest: true,\n eventTarget: true,\n requestAnimationFrame: true,\n setInterval: true,\n setTimeout: true,\n ...options,\n };\n }\n\n /**\n * Wrap timer functions and event targets to catch errors\n * and provide better metadata.\n */\n public setupOnce(): void {\n const global = getGlobalObject();\n\n if (this._options.setTimeout) {\n fill(global, 'setTimeout', _wrapTimeFunction);\n }\n\n if (this._options.setInterval) {\n fill(global, 'setInterval', _wrapTimeFunction);\n }\n\n if (this._options.requestAnimationFrame) {\n fill(global, 'requestAnimationFrame', _wrapRAF);\n }\n\n if (this._options.XMLHttpRequest && 'XMLHttpRequest' in global) {\n fill(XMLHttpRequest.prototype, 'send', _wrapXHR);\n }\n\n const eventTargetOption = this._options.eventTarget;\n if (eventTargetOption) {\n const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n eventTarget.forEach(_wrapEventTarget);\n }\n }\n}\n\n/** JSDoc */\nfunction _wrapTimeFunction(original: () => void): () => number {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (this: any, ...args: any[]): number {\n const originalCallback = args[0];\n args[0] = wrap(originalCallback, {\n mechanism: {\n data: { function: getFunctionName(original) },\n handled: true,\n type: 'instrument',\n },\n });\n return original.apply(this, args);\n };\n}\n\n/** JSDoc */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _wrapRAF(original: any): (callback: () => void) => any {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (this: any, callback: () => void): () => void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return original.apply(this, [\n wrap(callback, {\n mechanism: {\n data: {\n function: 'requestAnimationFrame',\n handler: getFunctionName(original),\n },\n handled: true,\n type: 'instrument',\n },\n }),\n ]);\n };\n}\n\n/** JSDoc */\nfunction _wrapXHR(originalSend: () => void): () => void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (this: XMLHttpRequest, ...args: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const xhr = this;\n const xmlHttpRequestProps: XMLHttpRequestProp[] = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n xmlHttpRequestProps.forEach(prop => {\n if (prop in xhr && typeof xhr[prop] === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fill(xhr, prop, function (original: WrappedFunction): () => any {\n const wrapOptions = {\n mechanism: {\n data: {\n function: prop,\n handler: getFunctionName(original),\n },\n handled: true,\n type: 'instrument',\n },\n };\n\n // If Instrument integration has been called before TryCatch, get the name of original function\n const originalFunction = getOriginalFunction(original);\n if (originalFunction) {\n wrapOptions.mechanism.data.handler = getFunctionName(originalFunction);\n }\n\n // Otherwise wrap directly\n return wrap(original, wrapOptions);\n });\n }\n });\n\n return originalSend.apply(this, args);\n };\n}\n\n/** JSDoc */\nfunction _wrapEventTarget(target: string): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const global = getGlobalObject() as { [key: string]: any };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const proto = global[target] && global[target].prototype;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (original: () => void): (\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ) => void {\n return function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this: any,\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ): (eventName: string, fn: EventListenerObject, capture?: boolean, secure?: boolean) => void {\n try {\n if (typeof fn.handleEvent === 'function') {\n fn.handleEvent = wrap(fn.handleEvent.bind(fn), {\n mechanism: {\n data: {\n function: 'handleEvent',\n handler: getFunctionName(fn),\n target,\n },\n handled: true,\n type: 'instrument',\n },\n });\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n return original.apply(this, [\n eventName,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrap(fn as any as WrappedFunction, {\n mechanism: {\n data: {\n function: 'addEventListener',\n handler: getFunctionName(fn),\n target,\n },\n handled: true,\n type: 'instrument',\n },\n }),\n options,\n ]);\n };\n });\n\n fill(\n proto,\n 'removeEventListener',\n function (\n originalRemoveEventListener: () => void,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): (this: any, eventName: string, fn: EventListenerObject, options?: boolean | EventListenerOptions) => () => void {\n return function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this: any,\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | EventListenerOptions,\n ): () => void {\n /**\n * There are 2 possible scenarios here:\n *\n * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified\n * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function\n * as a pass-through, and call original `removeEventListener` with it.\n *\n * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using\n * our wrapped version of `addEventListener`, which internally calls `wrap` helper.\n * This helper \"wraps\" whole callback inside a try/catch statement, and attached appropriate metadata to it,\n * in order for us to make a distinction between wrapped/non-wrapped functions possible.\n * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.\n *\n * When someone adds a handler prior to initialization, and then do it again, but after,\n * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible\n * to get rid of the initial handler and it'd stick there forever.\n */\n const wrappedEventHandler = fn as unknown as WrappedFunction;\n try {\n const originalEventHandler = wrappedEventHandler && wrappedEventHandler.__sentry_wrapped__;\n if (originalEventHandler) {\n originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n }\n } catch (e) {\n // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n }\n return originalRemoveEventListener.call(this, eventName, wrappedEventHandler, options);\n };\n },\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"trycatch.js","sourceRoot":"","sources":["../../../../src/integrations/trycatch.ts"],"names":[],"mappings":"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","sourcesContent":["import { Integration, WrappedFunction } from '@sentry/types';\nimport { fill, getFunctionName, getGlobalObject, getOriginalFunction } from '@sentry/utils';\n\nimport { wrap } from '../helpers';\n\nconst DEFAULT_EVENT_TARGET = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload',\n];\n\ntype XMLHttpRequestProp = 'onload' | 'onerror' | 'onprogress' | 'onreadystatechange';\n\n/** JSDoc */\ninterface TryCatchOptions {\n setTimeout: boolean;\n setInterval: boolean;\n requestAnimationFrame: boolean;\n XMLHttpRequest: boolean;\n eventTarget: boolean | string[];\n}\n\n/** Wrap timer functions and event targets to catch errors and provide better meta data */\nexport class TryCatch implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'TryCatch';\n\n /**\n * @inheritDoc\n */\n public name: string = TryCatch.id;\n\n /** JSDoc */\n private readonly _options: TryCatchOptions;\n\n /**\n * @inheritDoc\n */\n public constructor(options?: Partial<TryCatchOptions>) {\n this._options = {\n XMLHttpRequest: true,\n eventTarget: true,\n requestAnimationFrame: true,\n setInterval: true,\n setTimeout: true,\n ...options,\n };\n }\n\n /**\n * Wrap timer functions and event targets to catch errors\n * and provide better metadata.\n */\n public setupOnce(): void {\n const global = getGlobalObject();\n\n if (this._options.setTimeout) {\n fill(global, 'setTimeout', _wrapTimeFunction);\n }\n\n if (this._options.setInterval) {\n fill(global, 'setInterval', _wrapTimeFunction);\n }\n\n if (this._options.requestAnimationFrame) {\n fill(global, 'requestAnimationFrame', _wrapRAF);\n }\n\n if (this._options.XMLHttpRequest && 'XMLHttpRequest' in global) {\n fill(XMLHttpRequest.prototype, 'send', _wrapXHR);\n }\n\n const eventTargetOption = this._options.eventTarget;\n if (eventTargetOption) {\n const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n eventTarget.forEach(_wrapEventTarget);\n }\n }\n}\n\n/** JSDoc */\nfunction _wrapTimeFunction(original: () => void): () => number {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (this: any, ...args: any[]): number {\n const originalCallback = args[0];\n args[0] = wrap(originalCallback, {\n mechanism: {\n data: { function: getFunctionName(original) },\n handled: true,\n type: 'instrument',\n },\n });\n return original.apply(this, args);\n };\n}\n\n/** JSDoc */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _wrapRAF(original: any): (callback: () => void) => any {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (this: any, callback: () => void): () => void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return original.apply(this, [\n wrap(callback, {\n mechanism: {\n data: {\n function: 'requestAnimationFrame',\n handler: getFunctionName(original),\n },\n handled: true,\n type: 'instrument',\n },\n }),\n ]);\n };\n}\n\n/** JSDoc */\nfunction _wrapXHR(originalSend: () => void): () => void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (this: XMLHttpRequest, ...args: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const xhr = this;\n const xmlHttpRequestProps: XMLHttpRequestProp[] = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n xmlHttpRequestProps.forEach(prop => {\n if (prop in xhr && typeof xhr[prop] === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fill(xhr, prop, function (original: WrappedFunction): () => any {\n const wrapOptions = {\n mechanism: {\n data: {\n function: prop,\n handler: getFunctionName(original),\n },\n handled: true,\n type: 'instrument',\n },\n };\n\n // If Instrument integration has been called before TryCatch, get the name of original function\n const originalFunction = getOriginalFunction(original);\n if (originalFunction) {\n wrapOptions.mechanism.data.handler = getFunctionName(originalFunction);\n }\n\n // Otherwise wrap directly\n return wrap(original, wrapOptions);\n });\n }\n });\n\n return originalSend.apply(this, args);\n };\n}\n\n/** JSDoc */\nfunction _wrapEventTarget(target: string): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const global = getGlobalObject() as { [key: string]: any };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const proto = global[target] && global[target].prototype;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (original: () => void): (\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ) => void {\n return function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this: any,\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ): (eventName: string, fn: EventListenerObject, capture?: boolean, secure?: boolean) => void {\n try {\n if (typeof fn.handleEvent === 'function') {\n fn.handleEvent = wrap(fn.handleEvent.bind(fn), {\n mechanism: {\n data: {\n function: 'handleEvent',\n handler: getFunctionName(fn),\n target,\n },\n handled: true,\n type: 'instrument',\n },\n });\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n return original.apply(this, [\n eventName,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrap(fn as any as WrappedFunction, {\n mechanism: {\n data: {\n function: 'addEventListener',\n handler: getFunctionName(fn),\n target,\n },\n handled: true,\n type: 'instrument',\n },\n }),\n options,\n ]);\n };\n });\n\n fill(\n proto,\n 'removeEventListener',\n function (\n originalRemoveEventListener: () => void,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): (this: any, eventName: string, fn: EventListenerObject, options?: boolean | EventListenerOptions) => () => void {\n return function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this: any,\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | EventListenerOptions,\n ): () => void {\n /**\n * There are 2 possible scenarios here:\n *\n * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified\n * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function\n * as a pass-through, and call original `removeEventListener` with it.\n *\n * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using\n * our wrapped version of `addEventListener`, which internally calls `wrap` helper.\n * This helper \"wraps\" whole callback inside a try/catch statement, and attached appropriate metadata to it,\n * in order for us to make a distinction between wrapped/non-wrapped functions possible.\n * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.\n *\n * When someone adds a handler prior to initialization, and then do it again, but after,\n * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible\n * to get rid of the initial handler and it'd stick there forever.\n */\n const wrappedEventHandler = fn as unknown as WrappedFunction;\n try {\n const originalEventHandler = wrappedEventHandler && wrappedEventHandler.__sentry_wrapped__;\n if (originalEventHandler) {\n originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n }\n } catch (e) {\n // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n }\n return originalRemoveEventListener.call(this, eventName, wrappedEventHandler, options);\n };\n },\n );\n}\n"]}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var global = utils_1.getGlobalObject();
|
|
2
|
+
const core_1 = require("@sentry/core");
|
|
3
|
+
const utils_1 = require("@sentry/utils");
|
|
4
|
+
const global = utils_1.getGlobalObject();
|
|
6
5
|
/** UserAgent */
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
class UserAgent {
|
|
7
|
+
constructor() {
|
|
9
8
|
/**
|
|
10
9
|
* @inheritDoc
|
|
11
10
|
*/
|
|
@@ -14,29 +13,28 @@ var UserAgent = /** @class */ (function () {
|
|
|
14
13
|
/**
|
|
15
14
|
* @inheritDoc
|
|
16
15
|
*/
|
|
17
|
-
|
|
18
|
-
core_1.addGlobalEventProcessor(
|
|
16
|
+
setupOnce() {
|
|
17
|
+
core_1.addGlobalEventProcessor((event) => {
|
|
19
18
|
if (core_1.getCurrentHub().getIntegration(UserAgent)) {
|
|
20
19
|
// if none of the information we want exists, don't bother
|
|
21
20
|
if (!global.navigator && !global.location && !global.document) {
|
|
22
21
|
return event;
|
|
23
22
|
}
|
|
24
23
|
// grab as much info as exists and add it to the event
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
return
|
|
24
|
+
const url = (event.request && event.request.url) || (global.location && global.location.href);
|
|
25
|
+
const { referrer } = global.document || {};
|
|
26
|
+
const { userAgent } = global.navigator || {};
|
|
27
|
+
const headers = Object.assign(Object.assign(Object.assign({}, (event.request && event.request.headers)), (referrer && { Referer: referrer })), (userAgent && { 'User-Agent': userAgent }));
|
|
28
|
+
const request = Object.assign(Object.assign({}, (url && { url })), { headers });
|
|
29
|
+
return Object.assign(Object.assign({}, event), { request });
|
|
31
30
|
}
|
|
32
31
|
return event;
|
|
33
32
|
});
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
* @inheritDoc
|
|
37
|
-
*/
|
|
38
|
-
UserAgent.id = 'UserAgent';
|
|
39
|
-
return UserAgent;
|
|
40
|
-
}());
|
|
33
|
+
}
|
|
34
|
+
}
|
|
41
35
|
exports.UserAgent = UserAgent;
|
|
36
|
+
/**
|
|
37
|
+
* @inheritDoc
|
|
38
|
+
*/
|
|
39
|
+
UserAgent.id = 'UserAgent';
|
|
42
40
|
//# sourceMappingURL=useragent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useragent.js","sourceRoot":"","sources":["../../../../src/integrations/useragent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useragent.js","sourceRoot":"","sources":["../../../../src/integrations/useragent.ts"],"names":[],"mappings":";AAAA,uCAAsE;AAEtE,yCAAgD;AAEhD,MAAM,MAAM,GAAG,uBAAe,EAAU,CAAC;AAEzC,gBAAgB;AAChB,MAAa,SAAS;IAAtB;QAME;;WAEG;QACI,SAAI,GAAW,SAAS,CAAC,EAAE,CAAC;IA8BrC,CAAC;IA5BC;;OAEG;IACI,SAAS;QACd,8BAAuB,CAAC,CAAC,KAAY,EAAE,EAAE;YACvC,IAAI,oBAAa,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;gBAC7C,0DAA0D;gBAC1D,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;oBAC7D,OAAO,KAAK,CAAC;iBACd;gBAED,sDAAsD;gBACtD,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC9F,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;gBAC3C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;gBAE7C,MAAM,OAAO,iDACR,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GACxC,CAAC,QAAQ,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,GACnC,CAAC,SAAS,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAC9C,CAAC;gBACF,MAAM,OAAO,mCAAQ,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,KAAE,OAAO,GAAE,CAAC;gBAEjD,uCAAY,KAAK,KAAE,OAAO,IAAG;aAC9B;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;;AAtCH,8BAuCC;AAtCC;;GAEG;AACW,YAAE,GAAW,WAAW,CAAC","sourcesContent":["import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';\nimport { Event, Integration } from '@sentry/types';\nimport { getGlobalObject } from '@sentry/utils';\n\nconst global = getGlobalObject<Window>();\n\n/** UserAgent */\nexport class UserAgent implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'UserAgent';\n\n /**\n * @inheritDoc\n */\n public name: string = UserAgent.id;\n\n /**\n * @inheritDoc\n */\n public setupOnce(): void {\n addGlobalEventProcessor((event: Event) => {\n if (getCurrentHub().getIntegration(UserAgent)) {\n // if none of the information we want exists, don't bother\n if (!global.navigator && !global.location && !global.document) {\n return event;\n }\n\n // grab as much info as exists and add it to the event\n const url = (event.request && event.request.url) || (global.location && global.location.href);\n const { referrer } = global.document || {};\n const { userAgent } = global.navigator || {};\n\n const headers = {\n ...(event.request && event.request.headers),\n ...(referrer && { Referer: referrer }),\n ...(userAgent && { 'User-Agent': userAgent }),\n };\n const request = { ...(url && { url }), headers };\n\n return { ...event, request };\n }\n return event;\n });\n }\n}\n"]}
|
package/cjs/sdk.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Integrations as CoreIntegrations } from '@sentry/core';
|
|
1
|
+
import { Hub, Integrations as CoreIntegrations } from '@sentry/core';
|
|
2
2
|
import { BrowserOptions } from './client';
|
|
3
3
|
import { ReportDialogOptions } from './helpers';
|
|
4
4
|
import { Breadcrumbs, Dedupe, GlobalHandlers, LinkedErrors, TryCatch, UserAgent } from './integrations';
|
|
@@ -66,7 +66,7 @@ export declare function init(options?: BrowserOptions): void;
|
|
|
66
66
|
*
|
|
67
67
|
* @param options Everything is optional, we try to fetch all info need from the global scope.
|
|
68
68
|
*/
|
|
69
|
-
export declare function showReportDialog(options?: ReportDialogOptions): void;
|
|
69
|
+
export declare function showReportDialog(options?: ReportDialogOptions, hub?: Hub): void;
|
|
70
70
|
/**
|
|
71
71
|
* This is the getter for lastEventId.
|
|
72
72
|
*
|
package/cjs/sdk.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../../src/sdk.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../../src/sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,GAAG,EAEH,YAAY,IAAI,gBAAgB,EACjC,MAAM,cAAc,CAAC;AAUtB,OAAO,EAAuC,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/E,OAAO,EAAE,mBAAmB,EAAwB,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIxG,eAAO,MAAM,mBAAmB,uJAS/B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,wBAAgB,IAAI,CAAC,OAAO,GAAE,cAAmB,GAAG,IAAI,CA8BvD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,mBAAwB,EAAE,GAAG,GAAE,GAAqB,GAAG,IAAI,CAyCpG;AAED;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,MAAM,GAAG,SAAS,CAEhD;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,IAAI,CAEhC;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAEjD;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAO5D;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAO5D;AAED;;;;;;GAMG;AAEH,wBAAgB,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,CAEnD"}
|
package/cjs/sdk.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
var setup_1 = require("./transports/setup");
|
|
2
|
+
const core_1 = require("@sentry/core");
|
|
3
|
+
const utils_1 = require("@sentry/utils");
|
|
4
|
+
const client_1 = require("./client");
|
|
5
|
+
const flags_1 = require("./flags");
|
|
6
|
+
const helpers_1 = require("./helpers");
|
|
7
|
+
const integrations_1 = require("./integrations");
|
|
8
|
+
const stack_parsers_1 = require("./stack-parsers");
|
|
9
|
+
const transports_1 = require("./transports");
|
|
11
10
|
exports.defaultIntegrations = [
|
|
12
11
|
new core_1.Integrations.InboundFilters(),
|
|
13
12
|
new core_1.Integrations.FunctionToString(),
|
|
@@ -75,16 +74,15 @@ exports.defaultIntegrations = [
|
|
|
75
74
|
*
|
|
76
75
|
* @see {@link BrowserOptions} for documentation on configuration options.
|
|
77
76
|
*/
|
|
78
|
-
function init(options) {
|
|
79
|
-
if (options === void 0) { options = {}; }
|
|
77
|
+
function init(options = {}) {
|
|
80
78
|
if (options.defaultIntegrations === undefined) {
|
|
81
79
|
options.defaultIntegrations = exports.defaultIntegrations;
|
|
82
80
|
}
|
|
83
81
|
if (options.release === undefined) {
|
|
84
|
-
|
|
82
|
+
const window = utils_1.getGlobalObject();
|
|
85
83
|
// This supports the variable that sentry-webpack-plugin injects
|
|
86
|
-
if (
|
|
87
|
-
options.release =
|
|
84
|
+
if (window.SENTRY_RELEASE && window.SENTRY_RELEASE.id) {
|
|
85
|
+
options.release = window.SENTRY_RELEASE.id;
|
|
88
86
|
}
|
|
89
87
|
}
|
|
90
88
|
if (options.autoSessionTracking === undefined) {
|
|
@@ -93,11 +91,8 @@ function init(options) {
|
|
|
93
91
|
if (options.sendClientReports === undefined) {
|
|
94
92
|
options.sendClientReports = true;
|
|
95
93
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
var _a = setup_1.setupBrowserTransport(options), transport = _a.transport, newTransport = _a.newTransport;
|
|
100
|
-
core_1.initAndBind(client_1.BrowserClient, options, transport, newTransport);
|
|
94
|
+
const clientOptions = Object.assign(Object.assign({}, options), { stackParser: utils_1.stackParserFromStackParserOptions(options.stackParser || stack_parsers_1.defaultStackParser), integrations: core_1.getIntegrationsToSetup(options), transport: options.transport || (utils_1.supportsFetch() ? transports_1.makeFetchTransport : transports_1.makeXHRTransport) });
|
|
95
|
+
core_1.initAndBind(client_1.BrowserClient, clientOptions);
|
|
101
96
|
if (options.autoSessionTracking) {
|
|
102
97
|
startSessionTracking();
|
|
103
98
|
}
|
|
@@ -108,19 +103,38 @@ exports.init = init;
|
|
|
108
103
|
*
|
|
109
104
|
* @param options Everything is optional, we try to fetch all info need from the global scope.
|
|
110
105
|
*/
|
|
111
|
-
function showReportDialog(options) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
106
|
+
function showReportDialog(options = {}, hub = core_1.getCurrentHub()) {
|
|
107
|
+
// doesn't work without a document (React Native)
|
|
108
|
+
const global = utils_1.getGlobalObject();
|
|
109
|
+
if (!global.document) {
|
|
110
|
+
flags_1.IS_DEBUG_BUILD && utils_1.logger.error('Global document not defined in showReportDialog call');
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const { client, scope } = hub.getStackTop();
|
|
114
|
+
const dsn = options.dsn || (client && client.getDsn());
|
|
115
|
+
if (!dsn) {
|
|
116
|
+
flags_1.IS_DEBUG_BUILD && utils_1.logger.error('DSN not configured for showReportDialog call');
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
115
119
|
if (scope) {
|
|
116
|
-
options.user =
|
|
120
|
+
options.user = Object.assign(Object.assign({}, scope.getUser()), options.user);
|
|
117
121
|
}
|
|
118
122
|
if (!options.eventId) {
|
|
119
123
|
options.eventId = hub.lastEventId();
|
|
120
124
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
125
|
+
const script = global.document.createElement('script');
|
|
126
|
+
script.async = true;
|
|
127
|
+
script.src = core_1.getReportDialogEndpoint(dsn, options);
|
|
128
|
+
if (options.onLoad) {
|
|
129
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
130
|
+
script.onload = options.onLoad;
|
|
131
|
+
}
|
|
132
|
+
const injectionPoint = global.document.head || global.document.body;
|
|
133
|
+
if (injectionPoint) {
|
|
134
|
+
injectionPoint.appendChild(script);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
flags_1.IS_DEBUG_BUILD && utils_1.logger.error('Not injecting report dialog. No injection point found in HTML');
|
|
124
138
|
}
|
|
125
139
|
}
|
|
126
140
|
exports.showReportDialog = showReportDialog;
|
|
@@ -158,7 +172,7 @@ exports.onLoad = onLoad;
|
|
|
158
172
|
* doesn't (or if there's no client defined).
|
|
159
173
|
*/
|
|
160
174
|
function flush(timeout) {
|
|
161
|
-
|
|
175
|
+
const client = core_1.getCurrentHub().getClient();
|
|
162
176
|
if (client) {
|
|
163
177
|
return client.flush(timeout);
|
|
164
178
|
}
|
|
@@ -175,7 +189,7 @@ exports.flush = flush;
|
|
|
175
189
|
* doesn't (or if there's no client defined).
|
|
176
190
|
*/
|
|
177
191
|
function close(timeout) {
|
|
178
|
-
|
|
192
|
+
const client = core_1.getCurrentHub().getClient();
|
|
179
193
|
if (client) {
|
|
180
194
|
return client.close(timeout);
|
|
181
195
|
}
|
|
@@ -203,13 +217,13 @@ function startSessionOnHub(hub) {
|
|
|
203
217
|
* Enable automatic Session Tracking for the initial page load.
|
|
204
218
|
*/
|
|
205
219
|
function startSessionTracking() {
|
|
206
|
-
|
|
207
|
-
|
|
220
|
+
const window = utils_1.getGlobalObject();
|
|
221
|
+
const document = window.document;
|
|
208
222
|
if (typeof document === 'undefined') {
|
|
209
223
|
flags_1.IS_DEBUG_BUILD && utils_1.logger.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');
|
|
210
224
|
return;
|
|
211
225
|
}
|
|
212
|
-
|
|
226
|
+
const hub = core_1.getCurrentHub();
|
|
213
227
|
// The only way for this to be false is for there to be a version mismatch between @sentry/browser (>= 6.0.0) and
|
|
214
228
|
// @sentry/hub (< 5.27.0). In the simple case, there won't ever be such a mismatch, because the two packages are
|
|
215
229
|
// pinned at the same version in package.json, but there are edge cases where it's possible. See
|
|
@@ -225,8 +239,7 @@ function startSessionTracking() {
|
|
|
225
239
|
// discard their duration.
|
|
226
240
|
startSessionOnHub(hub);
|
|
227
241
|
// We want to create a session for every navigation as well
|
|
228
|
-
utils_1.addInstrumentationHandler('history',
|
|
229
|
-
var from = _a.from, to = _a.to;
|
|
242
|
+
utils_1.addInstrumentationHandler('history', ({ from, to }) => {
|
|
230
243
|
// Don't create an additional session for the initial route or if the location did not change
|
|
231
244
|
if (!(from === undefined || from === to)) {
|
|
232
245
|
startSessionOnHub(core_1.getCurrentHub());
|
package/cjs/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../../src/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import { getCurrentHub, initAndBind, Integrations as CoreIntegrations } from '@sentry/core';\nimport { Hub } from '@sentry/types';\nimport { addInstrumentationHandler, getGlobalObject, logger, resolvedSyncPromise } from '@sentry/utils';\n\nimport { BrowserClient, BrowserOptions } from './client';\nimport { IS_DEBUG_BUILD } from './flags';\nimport { ReportDialogOptions, wrap as internalWrap } from './helpers';\nimport { Breadcrumbs, Dedupe, GlobalHandlers, LinkedErrors, TryCatch, UserAgent } from './integrations';\nimport { defaultStackParsers } from './stack-parsers';\nimport { setupBrowserTransport } from './transports/setup';\n\nexport const defaultIntegrations = [\n new CoreIntegrations.InboundFilters(),\n new CoreIntegrations.FunctionToString(),\n new TryCatch(),\n new Breadcrumbs(),\n new GlobalHandlers(),\n new LinkedErrors(),\n new Dedupe(),\n new UserAgent(),\n];\n\n/**\n * The Sentry Browser SDK Client.\n *\n * To use this SDK, call the {@link init} function as early as possible when\n * loading the web page. To set context information or send manual events, use\n * the provided methods.\n *\n * @example\n *\n * ```\n *\n * import { init } from '@sentry/browser';\n *\n * init({\n * dsn: '__DSN__',\n * // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { configureScope } from '@sentry/browser';\n * configureScope((scope: Scope) => {\n * scope.setExtra({ battery: 0.7 });\n * scope.setTag({ user_mode: 'admin' });\n * scope.setUser({ id: '4711' });\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { addBreadcrumb } from '@sentry/browser';\n * addBreadcrumb({\n * message: 'My Breadcrumb',\n * // ...\n * });\n * ```\n *\n * @example\n *\n * ```\n *\n * import * as Sentry from '@sentry/browser';\n * Sentry.captureMessage('Hello, world!');\n * Sentry.captureException(new Error('Good bye'));\n * Sentry.captureEvent({\n * message: 'Manual',\n * stacktrace: [\n * // ...\n * ],\n * });\n * ```\n *\n * @see {@link BrowserOptions} for documentation on configuration options.\n */\nexport function init(options: BrowserOptions = {}): void {\n if (options.defaultIntegrations === undefined) {\n options.defaultIntegrations = defaultIntegrations;\n }\n if (options.release === undefined) {\n const window = getGlobalObject<Window>();\n // This supports the variable that sentry-webpack-plugin injects\n if (window.SENTRY_RELEASE && window.SENTRY_RELEASE.id) {\n options.release = window.SENTRY_RELEASE.id;\n }\n }\n if (options.autoSessionTracking === undefined) {\n options.autoSessionTracking = true;\n }\n if (options.sendClientReports === undefined) {\n options.sendClientReports = true;\n }\n if (options.stackParser === undefined) {\n options.stackParser = defaultStackParsers;\n }\n\n const { transport, newTransport } = setupBrowserTransport(options);\n initAndBind(BrowserClient, options, transport, newTransport);\n\n if (options.autoSessionTracking) {\n startSessionTracking();\n }\n}\n\n/**\n * Present the user with a report dialog.\n *\n * @param options Everything is optional, we try to fetch all info need from the global scope.\n */\nexport function showReportDialog(options: ReportDialogOptions = {}): void {\n const hub = getCurrentHub();\n const scope = hub.getScope();\n if (scope) {\n options.user = {\n ...scope.getUser(),\n ...options.user,\n };\n }\n\n if (!options.eventId) {\n options.eventId = hub.lastEventId();\n }\n const client = hub.getClient<BrowserClient>();\n if (client) {\n client.showReportDialog(options);\n }\n}\n\n/**\n * This is the getter for lastEventId.\n *\n * @returns The last event id of a captured event.\n */\nexport function lastEventId(): string | undefined {\n return getCurrentHub().lastEventId();\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function forceLoad(): void {\n // Noop\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function onLoad(callback: () => void): void {\n callback();\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport function flush(timeout?: number): PromiseLike<boolean> {\n const client = getCurrentHub().getClient<BrowserClient>();\n if (client) {\n return client.flush(timeout);\n }\n IS_DEBUG_BUILD && logger.warn('Cannot flush events. No client defined.');\n return resolvedSyncPromise(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport function close(timeout?: number): PromiseLike<boolean> {\n const client = getCurrentHub().getClient<BrowserClient>();\n if (client) {\n return client.close(timeout);\n }\n IS_DEBUG_BUILD && logger.warn('Cannot flush events and disable SDK. No client defined.');\n return resolvedSyncPromise(false);\n}\n\n/**\n * Wrap code within a try/catch block so the SDK is able to capture errors.\n *\n * @param fn A function to wrap.\n *\n * @returns The result of wrapped function call.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function wrap(fn: (...args: any) => any): any {\n return internalWrap(fn)();\n}\n\nfunction startSessionOnHub(hub: Hub): void {\n hub.startSession({ ignoreDuration: true });\n hub.captureSession();\n}\n\n/**\n * Enable automatic Session Tracking for the initial page load.\n */\nfunction startSessionTracking(): void {\n const window = getGlobalObject<Window>();\n const document = window.document;\n\n if (typeof document === 'undefined') {\n IS_DEBUG_BUILD && logger.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');\n return;\n }\n\n const hub = getCurrentHub();\n\n // The only way for this to be false is for there to be a version mismatch between @sentry/browser (>= 6.0.0) and\n // @sentry/hub (< 5.27.0). In the simple case, there won't ever be such a mismatch, because the two packages are\n // pinned at the same version in package.json, but there are edge cases where it's possible. See\n // https://github.com/getsentry/sentry-javascript/issues/3207 and\n // https://github.com/getsentry/sentry-javascript/issues/3234 and\n // https://github.com/getsentry/sentry-javascript/issues/3278.\n if (!hub.captureSession) {\n return;\n }\n\n // The session duration for browser sessions does not track a meaningful\n // concept that can be used as a metric.\n // Automatically captured sessions are akin to page views, and thus we\n // discard their duration.\n startSessionOnHub(hub);\n\n // We want to create a session for every navigation as well\n addInstrumentationHandler('history', ({ from, to }) => {\n // Don't create an additional session for the initial route or if the location did not change\n if (!(from === undefined || from === to)) {\n startSessionOnHub(getCurrentHub());\n }\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../../src/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getCurrentHub,\n getIntegrationsToSetup,\n getReportDialogEndpoint,\n Hub,\n initAndBind,\n Integrations as CoreIntegrations,\n} from '@sentry/core';\nimport {\n addInstrumentationHandler,\n getGlobalObject,\n logger,\n resolvedSyncPromise,\n stackParserFromStackParserOptions,\n supportsFetch,\n} from '@sentry/utils';\n\nimport { BrowserClient, BrowserClientOptions, BrowserOptions } from './client';\nimport { IS_DEBUG_BUILD } from './flags';\nimport { ReportDialogOptions, wrap as internalWrap } from './helpers';\nimport { Breadcrumbs, Dedupe, GlobalHandlers, LinkedErrors, TryCatch, UserAgent } from './integrations';\nimport { defaultStackParser } from './stack-parsers';\nimport { makeFetchTransport, makeXHRTransport } from './transports';\n\nexport const defaultIntegrations = [\n new CoreIntegrations.InboundFilters(),\n new CoreIntegrations.FunctionToString(),\n new TryCatch(),\n new Breadcrumbs(),\n new GlobalHandlers(),\n new LinkedErrors(),\n new Dedupe(),\n new UserAgent(),\n];\n\n/**\n * The Sentry Browser SDK Client.\n *\n * To use this SDK, call the {@link init} function as early as possible when\n * loading the web page. To set context information or send manual events, use\n * the provided methods.\n *\n * @example\n *\n * ```\n *\n * import { init } from '@sentry/browser';\n *\n * init({\n * dsn: '__DSN__',\n * // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { configureScope } from '@sentry/browser';\n * configureScope((scope: Scope) => {\n * scope.setExtra({ battery: 0.7 });\n * scope.setTag({ user_mode: 'admin' });\n * scope.setUser({ id: '4711' });\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { addBreadcrumb } from '@sentry/browser';\n * addBreadcrumb({\n * message: 'My Breadcrumb',\n * // ...\n * });\n * ```\n *\n * @example\n *\n * ```\n *\n * import * as Sentry from '@sentry/browser';\n * Sentry.captureMessage('Hello, world!');\n * Sentry.captureException(new Error('Good bye'));\n * Sentry.captureEvent({\n * message: 'Manual',\n * stacktrace: [\n * // ...\n * ],\n * });\n * ```\n *\n * @see {@link BrowserOptions} for documentation on configuration options.\n */\nexport function init(options: BrowserOptions = {}): void {\n if (options.defaultIntegrations === undefined) {\n options.defaultIntegrations = defaultIntegrations;\n }\n if (options.release === undefined) {\n const window = getGlobalObject<Window>();\n // This supports the variable that sentry-webpack-plugin injects\n if (window.SENTRY_RELEASE && window.SENTRY_RELEASE.id) {\n options.release = window.SENTRY_RELEASE.id;\n }\n }\n if (options.autoSessionTracking === undefined) {\n options.autoSessionTracking = true;\n }\n if (options.sendClientReports === undefined) {\n options.sendClientReports = true;\n }\n\n const clientOptions: BrowserClientOptions = {\n ...options,\n stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n integrations: getIntegrationsToSetup(options),\n transport: options.transport || (supportsFetch() ? makeFetchTransport : makeXHRTransport),\n };\n\n initAndBind(BrowserClient, clientOptions);\n\n if (options.autoSessionTracking) {\n startSessionTracking();\n }\n}\n\n/**\n * Present the user with a report dialog.\n *\n * @param options Everything is optional, we try to fetch all info need from the global scope.\n */\nexport function showReportDialog(options: ReportDialogOptions = {}, hub: Hub = getCurrentHub()): void {\n // doesn't work without a document (React Native)\n const global = getGlobalObject<Window>();\n if (!global.document) {\n IS_DEBUG_BUILD && logger.error('Global document not defined in showReportDialog call');\n return;\n }\n\n const { client, scope } = hub.getStackTop();\n const dsn = options.dsn || (client && client.getDsn());\n if (!dsn) {\n IS_DEBUG_BUILD && logger.error('DSN not configured for showReportDialog call');\n return;\n }\n\n if (scope) {\n options.user = {\n ...scope.getUser(),\n ...options.user,\n };\n }\n\n if (!options.eventId) {\n options.eventId = hub.lastEventId();\n }\n\n const script = global.document.createElement('script');\n script.async = true;\n script.src = getReportDialogEndpoint(dsn, options);\n\n if (options.onLoad) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n script.onload = options.onLoad;\n }\n\n const injectionPoint = global.document.head || global.document.body;\n if (injectionPoint) {\n injectionPoint.appendChild(script);\n } else {\n IS_DEBUG_BUILD && logger.error('Not injecting report dialog. No injection point found in HTML');\n }\n}\n\n/**\n * This is the getter for lastEventId.\n *\n * @returns The last event id of a captured event.\n */\nexport function lastEventId(): string | undefined {\n return getCurrentHub().lastEventId();\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function forceLoad(): void {\n // Noop\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function onLoad(callback: () => void): void {\n callback();\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport function flush(timeout?: number): PromiseLike<boolean> {\n const client = getCurrentHub().getClient<BrowserClient>();\n if (client) {\n return client.flush(timeout);\n }\n IS_DEBUG_BUILD && logger.warn('Cannot flush events. No client defined.');\n return resolvedSyncPromise(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport function close(timeout?: number): PromiseLike<boolean> {\n const client = getCurrentHub().getClient<BrowserClient>();\n if (client) {\n return client.close(timeout);\n }\n IS_DEBUG_BUILD && logger.warn('Cannot flush events and disable SDK. No client defined.');\n return resolvedSyncPromise(false);\n}\n\n/**\n * Wrap code within a try/catch block so the SDK is able to capture errors.\n *\n * @param fn A function to wrap.\n *\n * @returns The result of wrapped function call.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function wrap(fn: (...args: any) => any): any {\n return internalWrap(fn)();\n}\n\nfunction startSessionOnHub(hub: Hub): void {\n hub.startSession({ ignoreDuration: true });\n hub.captureSession();\n}\n\n/**\n * Enable automatic Session Tracking for the initial page load.\n */\nfunction startSessionTracking(): void {\n const window = getGlobalObject<Window>();\n const document = window.document;\n\n if (typeof document === 'undefined') {\n IS_DEBUG_BUILD && logger.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');\n return;\n }\n\n const hub = getCurrentHub();\n\n // The only way for this to be false is for there to be a version mismatch between @sentry/browser (>= 6.0.0) and\n // @sentry/hub (< 5.27.0). In the simple case, there won't ever be such a mismatch, because the two packages are\n // pinned at the same version in package.json, but there are edge cases where it's possible. See\n // https://github.com/getsentry/sentry-javascript/issues/3207 and\n // https://github.com/getsentry/sentry-javascript/issues/3234 and\n // https://github.com/getsentry/sentry-javascript/issues/3278.\n if (!hub.captureSession) {\n return;\n }\n\n // The session duration for browser sessions does not track a meaningful\n // concept that can be used as a metric.\n // Automatically captured sessions are akin to page views, and thus we\n // discard their duration.\n startSessionOnHub(hub);\n\n // We want to create a session for every navigation as well\n addInstrumentationHandler('history', ({ from, to }) => {\n // Don't create an additional session for the initial route or if the location did not change\n if (!(from === undefined || from === to)) {\n startSessionOnHub(getCurrentHub());\n }\n });\n}\n"]}
|
package/cjs/stack-parsers.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { StackLineParser } from '@sentry/types';
|
|
2
|
-
export declare const
|
|
3
|
-
export declare const
|
|
4
|
-
export declare const
|
|
5
|
-
export declare const
|
|
6
|
-
export declare const
|
|
7
|
-
export declare const
|
|
2
|
+
export declare const chromeStackLineParser: StackLineParser;
|
|
3
|
+
export declare const geckoStackLineParser: StackLineParser;
|
|
4
|
+
export declare const winjsStackLineParser: StackLineParser;
|
|
5
|
+
export declare const opera10StackLineParser: StackLineParser;
|
|
6
|
+
export declare const opera11StackLineParser: StackLineParser;
|
|
7
|
+
export declare const defaultStackLineParsers: StackLineParser[];
|
|
8
|
+
export declare const defaultStackParser: import("@sentry/types").StackParser;
|
|
8
9
|
//# sourceMappingURL=stack-parsers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stack-parsers.d.ts","sourceRoot":"","sources":["../../../src/stack-parsers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,eAAe,EAAqB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"stack-parsers.d.ts","sourceRoot":"","sources":["../../../src/stack-parsers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,eAAe,EAAqB,MAAM,eAAe,CAAC;AA+D/E,eAAO,MAAM,qBAAqB,EAAE,eAA2C,CAAC;AAoChF,eAAO,MAAM,oBAAoB,EAAE,eAAyC,CAAC;AAa7E,eAAO,MAAM,oBAAoB,EAAE,eAAyC,CAAC;AAS7E,eAAO,MAAM,sBAAsB,EAAE,eAA6C,CAAC;AAUnF,eAAO,MAAM,sBAAsB,EAAE,eAA6C,CAAC;AAEnF,eAAO,MAAM,uBAAuB,mBAAsE,CAAC;AAE3G,eAAO,MAAM,kBAAkB,qCAAgD,CAAC"}
|