@grafana/faro-web-sdk 2.3.0 → 2.4.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/dist/bundle/faro-web-sdk.iife.js +1 -1
- package/dist/bundle/types/instrumentations/console/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/csp/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/errors/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/navigation/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/performance/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/session/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/userActions/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/view/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/webVitals/instrumentation.d.ts +1 -1
- package/dist/bundle/types/transports/console/transport.d.ts +1 -1
- package/dist/bundle/types/transports/fetch/transport.d.ts +1 -1
- package/dist/cjs/config/getWebInstrumentations.js +3 -4
- package/dist/cjs/config/getWebInstrumentations.js.map +1 -1
- package/dist/cjs/config/makeCoreConfig.js +48 -60
- package/dist/cjs/config/makeCoreConfig.js.map +1 -1
- package/dist/cjs/initialize.js +3 -3
- package/dist/cjs/initialize.js.map +1 -1
- package/dist/cjs/instrumentations/_internal/activityWindowTracker.js +44 -65
- package/dist/cjs/instrumentations/_internal/activityWindowTracker.js.map +1 -1
- package/dist/cjs/instrumentations/_internal/monitors/consoleMonitor.js +11 -17
- package/dist/cjs/instrumentations/_internal/monitors/consoleMonitor.js.map +1 -1
- package/dist/cjs/instrumentations/_internal/monitors/domMutationMonitor.js +5 -5
- package/dist/cjs/instrumentations/_internal/monitors/domMutationMonitor.js.map +1 -1
- package/dist/cjs/instrumentations/_internal/monitors/httpRequestMonitor.js +28 -30
- package/dist/cjs/instrumentations/_internal/monitors/httpRequestMonitor.js.map +1 -1
- package/dist/cjs/instrumentations/_internal/monitors/interactionMonitor.js +7 -7
- package/dist/cjs/instrumentations/_internal/monitors/interactionMonitor.js.map +1 -1
- package/dist/cjs/instrumentations/_internal/monitors/performanceEntriesMonitor.js +8 -8
- package/dist/cjs/instrumentations/_internal/monitors/performanceEntriesMonitor.js.map +1 -1
- package/dist/cjs/instrumentations/_internal/monitors/urlChangeMonitor.js +24 -32
- package/dist/cjs/instrumentations/_internal/monitors/urlChangeMonitor.js.map +1 -1
- package/dist/cjs/instrumentations/console/instrumentation.js +29 -49
- package/dist/cjs/instrumentations/console/instrumentation.js.map +1 -1
- package/dist/cjs/instrumentations/csp/instrumentation.js +14 -32
- package/dist/cjs/instrumentations/csp/instrumentation.js.map +1 -1
- package/dist/cjs/instrumentations/errors/getErrorDetails.js +23 -23
- package/dist/cjs/instrumentations/errors/getErrorDetails.js.map +1 -1
- package/dist/cjs/instrumentations/errors/getValueAndTypeFromMessage.js +5 -5
- package/dist/cjs/instrumentations/errors/getValueAndTypeFromMessage.js.map +1 -1
- package/dist/cjs/instrumentations/errors/instrumentation.js +11 -29
- package/dist/cjs/instrumentations/errors/instrumentation.js.map +1 -1
- package/dist/cjs/instrumentations/errors/registerOnerror.js +6 -10
- package/dist/cjs/instrumentations/errors/registerOnerror.js.map +1 -1
- package/dist/cjs/instrumentations/errors/registerOnunhandledrejection.js +16 -17
- package/dist/cjs/instrumentations/errors/registerOnunhandledrejection.js.map +1 -1
- package/dist/cjs/instrumentations/errors/stackFrames/buildStackFrame.js +2 -2
- package/dist/cjs/instrumentations/errors/stackFrames/buildStackFrame.js.map +1 -1
- package/dist/cjs/instrumentations/errors/stackFrames/getDataFromSafariExtensions.js +4 -4
- package/dist/cjs/instrumentations/errors/stackFrames/getDataFromSafariExtensions.js.map +1 -1
- package/dist/cjs/instrumentations/errors/stackFrames/getStackFramesFromError.js +16 -17
- package/dist/cjs/instrumentations/errors/stackFrames/getStackFramesFromError.js.map +1 -1
- package/dist/cjs/instrumentations/errors/stackFrames/parseStacktrace.js +1 -1
- package/dist/cjs/instrumentations/errors/stackFrames/parseStacktrace.js.map +1 -1
- package/dist/cjs/instrumentations/navigation/instrumentation.js +27 -45
- package/dist/cjs/instrumentations/navigation/instrumentation.js.map +1 -1
- package/dist/cjs/instrumentations/performance/instrumentation.js +19 -74
- package/dist/cjs/instrumentations/performance/instrumentation.js.map +1 -1
- package/dist/cjs/instrumentations/performance/navigation.js +15 -26
- package/dist/cjs/instrumentations/performance/navigation.js.map +1 -1
- package/dist/cjs/instrumentations/performance/performanceUtils.js +18 -33
- package/dist/cjs/instrumentations/performance/performanceUtils.js.map +1 -1
- package/dist/cjs/instrumentations/performance/resource.js +13 -25
- package/dist/cjs/instrumentations/performance/resource.js.map +1 -1
- package/dist/cjs/instrumentations/session/instrumentation.js +45 -74
- package/dist/cjs/instrumentations/session/instrumentation.js.map +1 -1
- package/dist/cjs/instrumentations/session/sessionManager/PersistentSessionsManager.js +21 -24
- package/dist/cjs/instrumentations/session/sessionManager/PersistentSessionsManager.js.map +1 -1
- package/dist/cjs/instrumentations/session/sessionManager/VolatileSessionManager.js +21 -24
- package/dist/cjs/instrumentations/session/sessionManager/VolatileSessionManager.js.map +1 -1
- package/dist/cjs/instrumentations/session/sessionManager/getSessionManagerByConfig.js +2 -2
- package/dist/cjs/instrumentations/session/sessionManager/getSessionManagerByConfig.js.map +1 -1
- package/dist/cjs/instrumentations/session/sessionManager/sampling.js +5 -5
- package/dist/cjs/instrumentations/session/sessionManager/sampling.js.map +1 -1
- package/dist/cjs/instrumentations/session/sessionManager/sessionManagerUtils.js +64 -61
- package/dist/cjs/instrumentations/session/sessionManager/sessionManagerUtils.js.map +1 -1
- package/dist/cjs/instrumentations/userActions/instrumentation.js +15 -34
- package/dist/cjs/instrumentations/userActions/instrumentation.js.map +1 -1
- package/dist/cjs/instrumentations/userActions/processUserActionEventHandler.js +11 -11
- package/dist/cjs/instrumentations/userActions/processUserActionEventHandler.js.map +1 -1
- package/dist/cjs/instrumentations/userActions/userActionController.js +49 -53
- package/dist/cjs/instrumentations/userActions/userActionController.js.map +1 -1
- package/dist/cjs/instrumentations/userActions/util.js +4 -4
- package/dist/cjs/instrumentations/userActions/util.js.map +1 -1
- package/dist/cjs/instrumentations/view/instrumentation.js +12 -30
- package/dist/cjs/instrumentations/view/instrumentation.js.map +1 -1
- package/dist/cjs/instrumentations/webVitals/instrumentation.js +11 -29
- package/dist/cjs/instrumentations/webVitals/instrumentation.js.map +1 -1
- package/dist/cjs/instrumentations/webVitals/webVitalsWithAttribution.js +87 -94
- package/dist/cjs/instrumentations/webVitals/webVitalsWithAttribution.js.map +1 -1
- package/dist/cjs/metas/browser/meta.js +14 -14
- package/dist/cjs/metas/browser/meta.js.map +1 -1
- package/dist/cjs/metas/k6/meta.js +3 -14
- package/dist/cjs/metas/k6/meta.js.map +1 -1
- package/dist/cjs/metas/page/meta.js +7 -19
- package/dist/cjs/metas/page/meta.js.map +1 -1
- package/dist/cjs/metas/sdk/meta.js +3 -3
- package/dist/cjs/metas/sdk/meta.js.map +1 -1
- package/dist/cjs/metas/session/createSession.js +2 -2
- package/dist/cjs/metas/session/createSession.js.map +1 -1
- package/dist/cjs/transports/console/transport.js +10 -29
- package/dist/cjs/transports/console/transport.js.map +1 -1
- package/dist/cjs/transports/fetch/transport.js +82 -176
- package/dist/cjs/transports/fetch/transport.js.map +1 -1
- package/dist/cjs/utils/throttle.js +6 -10
- package/dist/cjs/utils/throttle.js.map +1 -1
- package/dist/cjs/utils/url.js +4 -5
- package/dist/cjs/utils/url.js.map +1 -1
- package/dist/cjs/utils/webStorage.js +4 -4
- package/dist/cjs/utils/webStorage.js.map +1 -1
- package/dist/esm/instrumentations/_internal/monitors/consoleMonitor.js +0 -1
- package/dist/esm/instrumentations/_internal/monitors/consoleMonitor.js.map +1 -1
- package/dist/esm/instrumentations/errors/getErrorDetails.js +1 -0
- package/dist/esm/instrumentations/errors/getErrorDetails.js.map +1 -1
- package/dist/esm/instrumentations/session/sessionManager/sessionManagerUtils.js +22 -2
- package/dist/esm/instrumentations/session/sessionManager/sessionManagerUtils.js.map +1 -1
- package/dist/esm/transports/fetch/transport.js +1 -1
- package/dist/esm/transports/fetch/transport.js.map +1 -1
- package/dist/types/instrumentations/console/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/csp/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/errors/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/navigation/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/performance/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/session/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/userActions/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/view/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/webVitals/instrumentation.d.ts +1 -1
- package/dist/types/transports/console/transport.d.ts +1 -1
- package/dist/types/transports/fetch/transport.d.ts +1 -1
- package/package.json +9 -6
|
@@ -1,41 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __extends = (this && this.__extends) || (function () {
|
|
3
|
-
var extendStatics = function (d, b) {
|
|
4
|
-
extendStatics = Object.setPrototypeOf ||
|
|
5
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
-
return extendStatics(d, b);
|
|
8
|
-
};
|
|
9
|
-
return function (d, b) {
|
|
10
|
-
if (typeof b !== "function" && b !== null)
|
|
11
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
-
extendStatics(d, b);
|
|
13
|
-
function __() { this.constructor = d; }
|
|
14
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
-
};
|
|
16
|
-
})();
|
|
17
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
3
|
exports.CSPInstrumentation = void 0;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
_this.version = faro_core_1.VERSION;
|
|
26
|
-
return _this;
|
|
4
|
+
const faro_core_1 = require("@grafana/faro-core");
|
|
5
|
+
class CSPInstrumentation extends faro_core_1.BaseInstrumentation {
|
|
6
|
+
constructor() {
|
|
7
|
+
super();
|
|
8
|
+
this.name = '@grafana/faro-web-sdk:instrumentation-csp';
|
|
9
|
+
this.version = faro_core_1.VERSION;
|
|
27
10
|
}
|
|
28
|
-
|
|
11
|
+
initialize() {
|
|
29
12
|
document.addEventListener('securitypolicyviolation', this.securitypolicyviolationHandler.bind(this));
|
|
30
|
-
}
|
|
31
|
-
|
|
13
|
+
}
|
|
14
|
+
destroy() {
|
|
32
15
|
document.removeEventListener('securitypolicyviolation', this.securitypolicyviolationHandler);
|
|
33
|
-
}
|
|
34
|
-
|
|
16
|
+
}
|
|
17
|
+
securitypolicyviolationHandler(ev) {
|
|
35
18
|
// We must explicitly extract properties because SecurityPolicyViolationEvent
|
|
36
19
|
// properties are getters on the prototype chain, not own enumerable properties.
|
|
37
20
|
// Object.entries() would not capture them.
|
|
38
|
-
|
|
21
|
+
const attributes = {
|
|
39
22
|
blockedURI: ev.blockedURI,
|
|
40
23
|
columnNumber: ev.columnNumber,
|
|
41
24
|
disposition: ev.disposition,
|
|
@@ -50,8 +33,7 @@ var CSPInstrumentation = /** @class */ (function (_super) {
|
|
|
50
33
|
violatedDirective: ev.violatedDirective,
|
|
51
34
|
};
|
|
52
35
|
this.api.pushEvent('securitypolicyviolation', (0, faro_core_1.stringifyObjectValues)(attributes));
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
}(faro_core_1.BaseInstrumentation));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
56
38
|
exports.CSPInstrumentation = CSPInstrumentation;
|
|
57
39
|
//# sourceMappingURL=instrumentation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/csp/instrumentation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/csp/instrumentation.ts"],"names":[],"mappings":";;;AAAA,kDAAyF;AAGzF,MAAa,kBAAmB,SAAQ,+BAAmB;IAIzD;QACE,KAAK,EAAE,CAAC;QAJD,SAAI,GAAG,2CAA2C,CAAC;QACnD,YAAO,GAAG,mBAAO,CAAC;IAI3B,CAAC;IAED,UAAU;QACR,QAAQ,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvG,CAAC;IAED,OAAO;QACL,QAAQ,CAAC,mBAAmB,CAAC,yBAAyB,EAAE,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC/F,CAAC;IAEM,8BAA8B,CAAC,EAAgC;QACpE,6EAA6E;QAC7E,gFAAgF;QAChF,2CAA2C;QAC3C,MAAM,UAAU,GAAG;YACjB,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,YAAY,EAAE,EAAE,CAAC,YAAY;YAC7B,WAAW,EAAE,EAAE,CAAC,WAAW;YAC3B,WAAW,EAAE,EAAE,CAAC,WAAW;YAC3B,kBAAkB,EAAE,EAAE,CAAC,kBAAkB;YACzC,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,cAAc,EAAE,EAAE,CAAC,cAAc;YACjC,QAAQ,EAAE,EAAE,CAAC,QAAQ;YACrB,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,iBAAiB,EAAE,EAAE,CAAC,iBAAiB;SACxC,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,yBAAyB,EAAE,IAAA,iCAAqB,EAAC,UAAU,CAAC,CAAC,CAAC;IACnF,CAAC;CACF;AArCD,gDAqCC","sourcesContent":["import { BaseInstrumentation, stringifyObjectValues, VERSION } from '@grafana/faro-core';\nimport type { Instrumentation } from '@grafana/faro-core';\n\nexport class CSPInstrumentation extends BaseInstrumentation implements Instrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-csp';\n readonly version = VERSION;\n\n constructor() {\n super();\n }\n\n initialize() {\n document.addEventListener('securitypolicyviolation', this.securitypolicyviolationHandler.bind(this));\n }\n\n destroy() {\n document.removeEventListener('securitypolicyviolation', this.securitypolicyviolationHandler);\n }\n\n public securitypolicyviolationHandler(ev: SecurityPolicyViolationEvent) {\n // We must explicitly extract properties because SecurityPolicyViolationEvent\n // properties are getters on the prototype chain, not own enumerable properties.\n // Object.entries() would not capture them.\n const attributes = {\n blockedURI: ev.blockedURI,\n columnNumber: ev.columnNumber,\n disposition: ev.disposition,\n documentURI: ev.documentURI,\n effectiveDirective: ev.effectiveDirective,\n lineNumber: ev.lineNumber,\n originalPolicy: ev.originalPolicy,\n referrer: ev.referrer,\n sample: ev.sample,\n sourceFile: ev.sourceFile,\n statusCode: ev.statusCode,\n violatedDirective: ev.violatedDirective,\n };\n\n this.api.pushEvent('securitypolicyviolation', stringifyObjectValues(attributes));\n }\n}\n"]}
|
|
@@ -3,55 +3,55 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getErrorDetails = getErrorDetails;
|
|
4
4
|
exports.getDetailsFromErrorArgs = getDetailsFromErrorArgs;
|
|
5
5
|
exports.getDetailsFromConsoleErrorArgs = getDetailsFromConsoleErrorArgs;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
const faro_core_1 = require("@grafana/faro-core");
|
|
7
|
+
const const_1 = require("./const");
|
|
8
|
+
const getValueAndTypeFromMessage_1 = require("./getValueAndTypeFromMessage");
|
|
9
|
+
const stackFrames_1 = require("./stackFrames");
|
|
10
10
|
function getErrorDetails(evt) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
let value;
|
|
12
|
+
let type;
|
|
13
|
+
let stackFrames = [];
|
|
14
|
+
let isDomErrorRes;
|
|
15
|
+
let isEventRes;
|
|
16
16
|
if ((0, faro_core_1.isErrorEvent)(evt) && evt.error) {
|
|
17
17
|
value = evt.error.message;
|
|
18
18
|
type = evt.error.name;
|
|
19
19
|
stackFrames = (0, stackFrames_1.getStackFramesFromError)(evt.error);
|
|
20
20
|
}
|
|
21
21
|
else if ((isDomErrorRes = (0, faro_core_1.isDomError)(evt)) || (0, faro_core_1.isDomException)(evt)) {
|
|
22
|
-
|
|
23
|
-
type =
|
|
24
|
-
value = message ?
|
|
22
|
+
const { name, message } = evt;
|
|
23
|
+
type = name !== null && name !== void 0 ? name : (isDomErrorRes ? const_1.domErrorType : const_1.domExceptionType);
|
|
24
|
+
value = message ? `${type}: ${message}` : type;
|
|
25
25
|
}
|
|
26
26
|
else if ((0, faro_core_1.isError)(evt)) {
|
|
27
|
+
type = evt.name;
|
|
27
28
|
value = evt.message;
|
|
28
29
|
stackFrames = (0, stackFrames_1.getStackFramesFromError)(evt);
|
|
29
30
|
}
|
|
30
31
|
else if ((0, faro_core_1.isObject)(evt) || (isEventRes = (0, faro_core_1.isEvent)(evt))) {
|
|
31
32
|
type = isEventRes ? evt.constructor.name : undefined;
|
|
32
|
-
value =
|
|
33
|
+
value = `${const_1.objectEventValue} ${Object.keys(evt)}`;
|
|
33
34
|
}
|
|
34
35
|
return [value, type, stackFrames];
|
|
35
36
|
}
|
|
36
37
|
function getDetailsFromErrorArgs(args) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
var initialStackFrame = (0, stackFrames_1.buildStackFrame)(source, const_1.unknownSymbolString, lineno, colno);
|
|
38
|
+
const [evt, source, lineno, colno, error] = args;
|
|
39
|
+
let value;
|
|
40
|
+
let type;
|
|
41
|
+
let stackFrames = [];
|
|
42
|
+
const eventIsString = (0, faro_core_1.isString)(evt);
|
|
43
|
+
const initialStackFrame = (0, stackFrames_1.buildStackFrame)(source, const_1.unknownSymbolString, lineno, colno);
|
|
44
44
|
if (error || !eventIsString) {
|
|
45
|
-
|
|
45
|
+
[value, type, stackFrames] = getErrorDetails((error !== null && error !== void 0 ? error : evt));
|
|
46
46
|
if (stackFrames.length === 0) {
|
|
47
47
|
stackFrames = [initialStackFrame];
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
else if (eventIsString) {
|
|
51
|
-
|
|
51
|
+
[value, type] = (0, getValueAndTypeFromMessage_1.getValueAndTypeFromMessage)(evt);
|
|
52
52
|
stackFrames = [initialStackFrame];
|
|
53
53
|
}
|
|
54
|
-
return { value
|
|
54
|
+
return { value, type, stackFrames };
|
|
55
55
|
}
|
|
56
56
|
function getDetailsFromConsoleErrorArgs(args, serializer) {
|
|
57
57
|
if ((0, faro_core_1.isError)(args[0])) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getErrorDetails.js","sourceRoot":"","sources":["../../../../src/instrumentations/errors/getErrorDetails.ts"],"names":[],"mappings":";;AAQA,
|
|
1
|
+
{"version":3,"file":"getErrorDetails.js","sourceRoot":"","sources":["../../../../src/instrumentations/errors/getErrorDetails.ts"],"names":[],"mappings":"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","sourcesContent":["import { isDomError, isDomException, isError, isErrorEvent, isEvent, isObject, isString } from '@grafana/faro-core';\nimport type { ExceptionStackFrame, LogArgsSerializer } from '@grafana/faro-core';\n\nimport { domErrorType, domExceptionType, objectEventValue, unknownSymbolString } from './const';\nimport { getValueAndTypeFromMessage } from './getValueAndTypeFromMessage';\nimport { buildStackFrame, getStackFramesFromError } from './stackFrames';\nimport type { ErrorEvent } from './types';\n\nexport function getErrorDetails(evt: ErrorEvent): [string | undefined, string | undefined, ExceptionStackFrame[]] {\n let value: string | undefined;\n let type: string | undefined;\n let stackFrames: ExceptionStackFrame[] = [];\n let isDomErrorRes: boolean | undefined;\n let isEventRes: boolean | undefined;\n\n if (isErrorEvent(evt) && evt.error) {\n value = evt.error.message;\n type = evt.error.name;\n stackFrames = getStackFramesFromError(evt.error);\n } else if ((isDomErrorRes = isDomError(evt)) || isDomException(evt)) {\n const { name, message } = evt;\n\n type = name ?? (isDomErrorRes ? domErrorType : domExceptionType);\n value = message ? `${type}: ${message}` : type;\n } else if (isError(evt)) {\n type = evt.name;\n value = evt.message;\n stackFrames = getStackFramesFromError(evt);\n } else if (isObject(evt) || (isEventRes = isEvent(evt))) {\n type = isEventRes ? evt.constructor.name : undefined;\n value = `${objectEventValue} ${Object.keys(evt)}`;\n }\n\n return [value, type, stackFrames];\n}\n\nexport interface ErrorDetails {\n value?: string;\n type?: string;\n stackFrames?: ExceptionStackFrame[];\n}\n\nexport function getDetailsFromErrorArgs(args: [any?, ...any[]]): ErrorDetails {\n const [evt, source, lineno, colno, error] = args;\n\n let value: string | undefined;\n let type: string | undefined;\n let stackFrames: ExceptionStackFrame[] = [];\n const eventIsString = isString(evt);\n const initialStackFrame = buildStackFrame(source, unknownSymbolString, lineno, colno);\n\n if (error || !eventIsString) {\n [value, type, stackFrames] = getErrorDetails((error ?? evt) as Error | Event);\n\n if (stackFrames.length === 0) {\n stackFrames = [initialStackFrame];\n }\n } else if (eventIsString) {\n [value, type] = getValueAndTypeFromMessage(evt);\n stackFrames = [initialStackFrame];\n }\n\n return { value, type, stackFrames };\n}\n\nexport function getDetailsFromConsoleErrorArgs(args: [any?, ...any[]], serializer: LogArgsSerializer): ErrorDetails {\n if (isError(args[0])) {\n return getDetailsFromErrorArgs(args);\n } else {\n return { value: serializer(args) };\n }\n}\n"]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getValueAndTypeFromMessage = getValueAndTypeFromMessage;
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
const faro_core_1 = require("@grafana/faro-core");
|
|
5
|
+
const const_1 = require("./const");
|
|
6
6
|
function getValueAndTypeFromMessage(message) {
|
|
7
7
|
var _a, _b;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
const groups = message.match(const_1.valueTypeRegex);
|
|
9
|
+
const type = (_a = groups === null || groups === void 0 ? void 0 : groups[1]) !== null && _a !== void 0 ? _a : faro_core_1.defaultExceptionType;
|
|
10
|
+
const value = (_b = groups === null || groups === void 0 ? void 0 : groups[2]) !== null && _b !== void 0 ? _b : message;
|
|
11
11
|
return [value, type];
|
|
12
12
|
}
|
|
13
13
|
//# sourceMappingURL=getValueAndTypeFromMessage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getValueAndTypeFromMessage.js","sourceRoot":"","sources":["../../../../src/instrumentations/errors/getValueAndTypeFromMessage.ts"],"names":[],"mappings":";;AAIA,gEAOC;AAXD,
|
|
1
|
+
{"version":3,"file":"getValueAndTypeFromMessage.js","sourceRoot":"","sources":["../../../../src/instrumentations/errors/getValueAndTypeFromMessage.ts"],"names":[],"mappings":";;AAIA,gEAOC;AAXD,kDAA0D;AAE1D,mCAAyC;AAEzC,SAAgB,0BAA0B,CAAC,OAAe;;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,sBAAc,CAAC,CAAC;IAE7C,MAAM,IAAI,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,CAAC,CAAC,mCAAI,gCAAoB,CAAC;IACjD,MAAM,KAAK,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,CAAC,CAAC,mCAAI,OAAO,CAAC;IAErC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACvB,CAAC","sourcesContent":["import { defaultExceptionType } from '@grafana/faro-core';\n\nimport { valueTypeRegex } from './const';\n\nexport function getValueAndTypeFromMessage(message: string): [string, string] {\n const groups = message.match(valueTypeRegex);\n\n const type = groups?.[1] ?? defaultExceptionType;\n const value = groups?.[2] ?? message;\n\n return [value, type];\n}\n"]}
|
|
@@ -1,38 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __extends = (this && this.__extends) || (function () {
|
|
3
|
-
var extendStatics = function (d, b) {
|
|
4
|
-
extendStatics = Object.setPrototypeOf ||
|
|
5
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
-
return extendStatics(d, b);
|
|
8
|
-
};
|
|
9
|
-
return function (d, b) {
|
|
10
|
-
if (typeof b !== "function" && b !== null)
|
|
11
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
-
extendStatics(d, b);
|
|
13
|
-
function __() { this.constructor = d; }
|
|
14
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
-
};
|
|
16
|
-
})();
|
|
17
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
3
|
exports.ErrorsInstrumentation = void 0;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
_this.version = faro_core_1.VERSION;
|
|
28
|
-
return _this;
|
|
4
|
+
const faro_core_1 = require("@grafana/faro-core");
|
|
5
|
+
const registerOnerror_1 = require("./registerOnerror");
|
|
6
|
+
const registerOnunhandledrejection_1 = require("./registerOnunhandledrejection");
|
|
7
|
+
class ErrorsInstrumentation extends faro_core_1.BaseInstrumentation {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
this.name = '@grafana/faro-web-sdk:instrumentation-errors';
|
|
11
|
+
this.version = faro_core_1.VERSION;
|
|
29
12
|
}
|
|
30
|
-
|
|
13
|
+
initialize() {
|
|
31
14
|
this.logDebug('Initializing');
|
|
32
15
|
(0, registerOnerror_1.registerOnerror)(this.api);
|
|
33
16
|
(0, registerOnunhandledrejection_1.registerOnunhandledrejection)(this.api);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
}(faro_core_1.BaseInstrumentation));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
37
19
|
exports.ErrorsInstrumentation = ErrorsInstrumentation;
|
|
38
20
|
//# sourceMappingURL=instrumentation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/errors/instrumentation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/errors/instrumentation.ts"],"names":[],"mappings":";;;AAAA,kDAAkE;AAElE,uDAAoD;AACpD,iFAA8E;AAE9E,MAAa,qBAAsB,SAAQ,+BAAmB;IAA9D;;QACW,SAAI,GAAG,8CAA8C,CAAC;QACtD,YAAO,GAAG,mBAAO,CAAC;IAS7B,CAAC;IAPC,UAAU;QACR,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAE9B,IAAA,iCAAe,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE1B,IAAA,2DAA4B,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;CACF;AAXD,sDAWC","sourcesContent":["import { BaseInstrumentation, VERSION } from '@grafana/faro-core';\n\nimport { registerOnerror } from './registerOnerror';\nimport { registerOnunhandledrejection } from './registerOnunhandledrejection';\n\nexport class ErrorsInstrumentation extends BaseInstrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-errors';\n readonly version = VERSION;\n\n initialize(): void {\n this.logDebug('Initializing');\n\n registerOnerror(this.api);\n\n registerOnunhandledrejection(this.api);\n }\n}\n"]}
|
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerOnerror = registerOnerror;
|
|
4
|
-
|
|
4
|
+
const getErrorDetails_1 = require("./getErrorDetails");
|
|
5
5
|
function registerOnerror(api) {
|
|
6
|
-
|
|
7
|
-
window.onerror =
|
|
8
|
-
var args = [];
|
|
9
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
10
|
-
args[_i] = arguments[_i];
|
|
11
|
-
}
|
|
6
|
+
const oldOnerror = window.onerror;
|
|
7
|
+
window.onerror = (...args) => {
|
|
12
8
|
try {
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
const { value, type, stackFrames } = (0, getErrorDetails_1.getDetailsFromErrorArgs)(args);
|
|
10
|
+
const originalError = args[4];
|
|
15
11
|
if (value) {
|
|
16
|
-
|
|
12
|
+
const options = { type, stackFrames };
|
|
17
13
|
if (originalError != null) {
|
|
18
14
|
options.originalError = originalError;
|
|
19
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerOnerror.js","sourceRoot":"","sources":["../../../../src/instrumentations/errors/registerOnerror.ts"],"names":[],"mappings":";;AAIA,0CAqBC;AAvBD,
|
|
1
|
+
{"version":3,"file":"registerOnerror.js","sourceRoot":"","sources":["../../../../src/instrumentations/errors/registerOnerror.ts"],"names":[],"mappings":";;AAIA,0CAqBC;AAvBD,uDAA4D;AAE5D,SAAgB,eAAe,CAAC,GAAQ;IACtC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC;IAElC,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,IAAA,yCAAuB,EAAC,IAAI,CAAC,CAAC;YACnE,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAE9B,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,OAAO,GAAqB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;gBAExD,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;oBAC1B,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;gBACxC,CAAC;gBAED,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { API, PushErrorOptions } from '@grafana/faro-core';\n\nimport { getDetailsFromErrorArgs } from './getErrorDetails';\n\nexport function registerOnerror(api: API): void {\n const oldOnerror = window.onerror;\n\n window.onerror = (...args) => {\n try {\n const { value, type, stackFrames } = getDetailsFromErrorArgs(args);\n const originalError = args[4];\n\n if (value) {\n const options: PushErrorOptions = { type, stackFrames };\n\n if (originalError != null) {\n options.originalError = originalError;\n }\n\n api.pushError(new Error(value), options);\n }\n } finally {\n oldOnerror?.apply(window, args);\n }\n };\n}\n"]}
|
|
@@ -2,34 +2,33 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerOnunhandledrejection = registerOnunhandledrejection;
|
|
4
4
|
exports.__resetOnunhandledrejectionForTests = __resetOnunhandledrejectionForTests;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
const faro_core_1 = require("@grafana/faro-core");
|
|
6
|
+
const const_1 = require("./const");
|
|
7
|
+
const getErrorDetails_1 = require("./getErrorDetails");
|
|
8
8
|
// Store handlers for cleanup in tests
|
|
9
|
-
|
|
9
|
+
const registeredHandlers = [];
|
|
10
10
|
function registerOnunhandledrejection(api) {
|
|
11
|
-
|
|
12
|
-
var _a;
|
|
13
|
-
|
|
14
|
-
var error = evt;
|
|
11
|
+
const handler = (evt) => {
|
|
12
|
+
var _a, _b;
|
|
13
|
+
let error = evt;
|
|
15
14
|
if (error.reason) {
|
|
16
15
|
error = evt.reason;
|
|
17
16
|
}
|
|
18
|
-
else if ((
|
|
19
|
-
error = (
|
|
17
|
+
else if ((_a = evt.detail) === null || _a === void 0 ? void 0 : _a.reason) {
|
|
18
|
+
error = (_b = evt.detail) === null || _b === void 0 ? void 0 : _b.reason;
|
|
20
19
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
let value;
|
|
21
|
+
let type;
|
|
22
|
+
let stackFrames = [];
|
|
24
23
|
if ((0, faro_core_1.isPrimitive)(error)) {
|
|
25
|
-
value =
|
|
24
|
+
value = `${const_1.primitiveUnhandledValue} ${String(error)}`;
|
|
26
25
|
type = const_1.primitiveUnhandledType;
|
|
27
26
|
}
|
|
28
27
|
else {
|
|
29
|
-
|
|
28
|
+
[value, type, stackFrames] = (0, getErrorDetails_1.getErrorDetails)(error);
|
|
30
29
|
}
|
|
31
30
|
if (value) {
|
|
32
|
-
api.pushError(new Error(value), { type
|
|
31
|
+
api.pushError(new Error(value), { type, stackFrames });
|
|
33
32
|
}
|
|
34
33
|
};
|
|
35
34
|
window.addEventListener('unhandledrejection', handler);
|
|
@@ -37,7 +36,7 @@ function registerOnunhandledrejection(api) {
|
|
|
37
36
|
}
|
|
38
37
|
// Test-only utility to reset state between tests
|
|
39
38
|
function __resetOnunhandledrejectionForTests() {
|
|
40
|
-
registeredHandlers.forEach(
|
|
39
|
+
registeredHandlers.forEach((handler) => {
|
|
41
40
|
window.removeEventListener('unhandledrejection', handler);
|
|
42
41
|
});
|
|
43
42
|
registeredHandlers.length = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerOnunhandledrejection.js","sourceRoot":"","sources":["../../../../src/instrumentations/errors/registerOnunhandledrejection.ts"],"names":[],"mappings":";;AAUA,oEA2BC;AAGD,kFAKC;AA7CD,
|
|
1
|
+
{"version":3,"file":"registerOnunhandledrejection.js","sourceRoot":"","sources":["../../../../src/instrumentations/errors/registerOnunhandledrejection.ts"],"names":[],"mappings":";;AAUA,oEA2BC;AAGD,kFAKC;AA7CD,kDAAiD;AAGjD,mCAA0E;AAC1E,uDAAoD;AAGpD,sCAAsC;AACtC,MAAM,kBAAkB,GAAwD,EAAE,CAAC;AAEnF,SAAgB,4BAA4B,CAAC,GAAQ;IACnD,MAAM,OAAO,GAAG,CAAC,GAAkC,EAAE,EAAE;;QACrD,IAAI,KAAK,GAAG,GAAG,CAAC;QAEhB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC;QACrB,CAAC;aAAM,IAAI,MAAA,GAAG,CAAC,MAAM,0CAAE,MAAM,EAAE,CAAC;YAC9B,KAAK,GAAG,MAAA,GAAG,CAAC,MAAM,0CAAE,MAAM,CAAC;QAC7B,CAAC;QAED,IAAI,KAAyB,CAAC;QAC9B,IAAI,IAAwB,CAAC;QAC7B,IAAI,WAAW,GAA0B,EAAE,CAAC;QAC5C,IAAI,IAAA,uBAAW,EAAC,KAAK,CAAC,EAAE,CAAC;YACvB,KAAK,GAAG,GAAG,+BAAuB,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,IAAI,GAAG,8BAAsB,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,IAAA,iCAAe,EAAC,KAAK,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IACvD,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,iDAAiD;AACjD,SAAgB,mCAAmC;IACjD,kBAAkB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACrC,MAAM,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IACH,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;AAChC,CAAC","sourcesContent":["import { isPrimitive } from '@grafana/faro-core';\nimport type { API, ExceptionStackFrame } from '@grafana/faro-core';\n\nimport { primitiveUnhandledType, primitiveUnhandledValue } from './const';\nimport { getErrorDetails } from './getErrorDetails';\nimport type { ExtendedPromiseRejectionEvent } from './types';\n\n// Store handlers for cleanup in tests\nconst registeredHandlers: Array<(evt: ExtendedPromiseRejectionEvent) => void> = [];\n\nexport function registerOnunhandledrejection(api: API): void {\n const handler = (evt: ExtendedPromiseRejectionEvent) => {\n let error = evt;\n\n if (error.reason) {\n error = evt.reason;\n } else if (evt.detail?.reason) {\n error = evt.detail?.reason;\n }\n\n let value: string | undefined;\n let type: string | undefined;\n let stackFrames: ExceptionStackFrame[] = [];\n if (isPrimitive(error)) {\n value = `${primitiveUnhandledValue} ${String(error)}`;\n type = primitiveUnhandledType;\n } else {\n [value, type, stackFrames] = getErrorDetails(error);\n }\n\n if (value) {\n api.pushError(new Error(value), { type, stackFrames });\n }\n };\n\n window.addEventListener('unhandledrejection', handler);\n registeredHandlers.push(handler);\n}\n\n// Test-only utility to reset state between tests\nexport function __resetOnunhandledrejectionForTests(): void {\n registeredHandlers.forEach((handler) => {\n window.removeEventListener('unhandledrejection', handler);\n });\n registeredHandlers.length = 0;\n}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.buildStackFrame = buildStackFrame;
|
|
4
|
-
|
|
4
|
+
const const_1 = require("./const");
|
|
5
5
|
function buildStackFrame(filename, func, lineno, colno) {
|
|
6
|
-
|
|
6
|
+
const stackFrame = {
|
|
7
7
|
filename: filename || document.location.href,
|
|
8
8
|
function: func || const_1.unknownSymbolString,
|
|
9
9
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildStackFrame.js","sourceRoot":"","sources":["../../../../../src/instrumentations/errors/stackFrames/buildStackFrame.ts"],"names":[],"mappings":";;AAIA,0CAoBC;AAtBD,
|
|
1
|
+
{"version":3,"file":"buildStackFrame.js","sourceRoot":"","sources":["../../../../../src/instrumentations/errors/stackFrames/buildStackFrame.ts"],"names":[],"mappings":";;AAIA,0CAoBC;AAtBD,mCAA8C;AAE9C,SAAgB,eAAe,CAC7B,QAA4B,EAC5B,IAAwB,EACxB,MAA0B,EAC1B,KAAyB;IAEzB,MAAM,UAAU,GAAwB;QACtC,QAAQ,EAAE,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI;QAC5C,QAAQ,EAAE,IAAI,IAAI,2BAAmB;KACtC,CAAC;IAEF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;IAC7B,CAAC;IAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC","sourcesContent":["import type { ExceptionStackFrame } from '@grafana/faro-core';\n\nimport { unknownSymbolString } from './const';\n\nexport function buildStackFrame(\n filename: string | undefined,\n func: string | undefined,\n lineno: number | undefined,\n colno: number | undefined\n): ExceptionStackFrame {\n const stackFrame: ExceptionStackFrame = {\n filename: filename || document.location.href,\n function: func || unknownSymbolString,\n };\n\n if (lineno !== undefined) {\n stackFrame.lineno = lineno;\n }\n\n if (colno !== undefined) {\n stackFrame.colno = colno;\n }\n\n return stackFrame;\n}\n"]}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getDataFromSafariExtensions = getDataFromSafariExtensions;
|
|
4
|
-
|
|
4
|
+
const const_1 = require("./const");
|
|
5
5
|
function getDataFromSafariExtensions(func, filename) {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
const isSafariExtension = func === null || func === void 0 ? void 0 : func.includes(const_1.safariExtensionString);
|
|
7
|
+
const isSafariWebExtension = !isSafariExtension && (func === null || func === void 0 ? void 0 : func.includes(const_1.safariWebExtensionString));
|
|
8
8
|
if (!isSafariExtension && !isSafariWebExtension) {
|
|
9
9
|
return [func, filename];
|
|
10
10
|
}
|
|
11
11
|
return [
|
|
12
12
|
(func === null || func === void 0 ? void 0 : func.includes(const_1.atString)) ? func.split(const_1.atString)[0] : func,
|
|
13
|
-
isSafariExtension ?
|
|
13
|
+
isSafariExtension ? `${const_1.safariExtensionString}:${filename}` : `${const_1.safariWebExtensionString}:${filename}`,
|
|
14
14
|
];
|
|
15
15
|
}
|
|
16
16
|
//# sourceMappingURL=getDataFromSafariExtensions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDataFromSafariExtensions.js","sourceRoot":"","sources":["../../../../../src/instrumentations/errors/stackFrames/getDataFromSafariExtensions.ts"],"names":[],"mappings":";;AAEA,kEAeC;AAjBD,
|
|
1
|
+
{"version":3,"file":"getDataFromSafariExtensions.js","sourceRoot":"","sources":["../../../../../src/instrumentations/errors/stackFrames/getDataFromSafariExtensions.ts"],"names":[],"mappings":";;AAEA,kEAeC;AAjBD,mCAAoF;AAEpF,SAAgB,2BAA2B,CACzC,IAAwB,EACxB,QAA4B;IAE5B,MAAM,iBAAiB,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC,6BAAqB,CAAC,CAAC;IAChE,MAAM,oBAAoB,GAAG,CAAC,iBAAiB,KAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC,gCAAwB,CAAC,CAAA,CAAC;IAE5F,IAAI,CAAC,iBAAiB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAChD,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO;QACL,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC,gBAAQ,CAAC,EAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QACzD,iBAAiB,CAAC,CAAC,CAAC,GAAG,6BAAqB,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,gCAAwB,IAAI,QAAQ,EAAE;KACvG,CAAC;AACJ,CAAC","sourcesContent":["import { atString, safariExtensionString, safariWebExtensionString } from './const';\n\nexport function getDataFromSafariExtensions(\n func: string | undefined,\n filename: string | undefined\n): [string | undefined, string | undefined] {\n const isSafariExtension = func?.includes(safariExtensionString);\n const isSafariWebExtension = !isSafariExtension && func?.includes(safariWebExtensionString);\n\n if (!isSafariExtension && !isSafariWebExtension) {\n return [func, filename];\n }\n\n return [\n func?.includes(atString) ? func.split(atString)[0] : func,\n isSafariExtension ? `${safariExtensionString}:${filename}` : `${safariWebExtensionString}:${filename}`,\n ];\n}\n"]}
|
|
@@ -1,32 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getStackFramesFromError = getStackFramesFromError;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
const faro_core_1 = require("@grafana/faro-core");
|
|
5
|
+
const buildStackFrame_1 = require("./buildStackFrame");
|
|
6
|
+
const const_1 = require("./const");
|
|
7
|
+
const getDataFromSafariExtensions_1 = require("./getDataFromSafariExtensions");
|
|
8
8
|
function getStackFramesFromError(error) {
|
|
9
|
-
|
|
9
|
+
let lines = [];
|
|
10
10
|
if (error.stacktrace) {
|
|
11
|
-
lines = error.stacktrace.split(const_1.newLineString).filter(
|
|
11
|
+
lines = error.stacktrace.split(const_1.newLineString).filter((_line, idx) => idx % 2 === 0);
|
|
12
12
|
}
|
|
13
13
|
else if (error.stack) {
|
|
14
14
|
lines = error.stack.split(const_1.newLineString);
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
var colno;
|
|
16
|
+
const stackFrames = lines.reduce((acc, line, idx) => {
|
|
17
|
+
let parts;
|
|
18
|
+
let func;
|
|
19
|
+
let filename;
|
|
20
|
+
let lineno;
|
|
21
|
+
let colno;
|
|
23
22
|
if ((parts = const_1.webkitLineRegex.exec(line))) {
|
|
24
23
|
func = parts[1];
|
|
25
24
|
filename = parts[2];
|
|
26
25
|
lineno = parts[3];
|
|
27
26
|
colno = parts[4];
|
|
28
27
|
if (filename === null || filename === void 0 ? void 0 : filename.startsWith(const_1.webkitEvalString)) {
|
|
29
|
-
|
|
28
|
+
const submatch = const_1.webkitEvalRegex.exec(filename);
|
|
30
29
|
if (submatch) {
|
|
31
30
|
filename = submatch[1];
|
|
32
31
|
lineno = submatch[2];
|
|
@@ -36,7 +35,7 @@ function getStackFramesFromError(error) {
|
|
|
36
35
|
filename = (filename === null || filename === void 0 ? void 0 : filename.startsWith(const_1.webkitAddressAtString))
|
|
37
36
|
? filename.substring(const_1.webkitAddressAtStringLength)
|
|
38
37
|
: filename;
|
|
39
|
-
|
|
38
|
+
[func, filename] = (0, getDataFromSafariExtensions_1.getDataFromSafariExtensions)(func, filename);
|
|
40
39
|
}
|
|
41
40
|
else if ((parts = const_1.firefoxLineRegex.exec(line))) {
|
|
42
41
|
func = parts[1];
|
|
@@ -44,7 +43,7 @@ function getStackFramesFromError(error) {
|
|
|
44
43
|
lineno = parts[4];
|
|
45
44
|
colno = parts[5];
|
|
46
45
|
if (!!filename && filename.includes(const_1.firefoxEvalString)) {
|
|
47
|
-
|
|
46
|
+
const submatch = const_1.firefoxEvalRegex.exec(filename);
|
|
48
47
|
if (submatch) {
|
|
49
48
|
func = func || const_1.evalString;
|
|
50
49
|
filename = submatch[1];
|
|
@@ -54,7 +53,7 @@ function getStackFramesFromError(error) {
|
|
|
54
53
|
else if (idx === 0 && !colno && (0, faro_core_1.isNumber)(error.columnNumber)) {
|
|
55
54
|
colno = String(error.columnNumber + 1);
|
|
56
55
|
}
|
|
57
|
-
|
|
56
|
+
[func, filename] = (0, getDataFromSafariExtensions_1.getDataFromSafariExtensions)(func, filename);
|
|
58
57
|
}
|
|
59
58
|
if (filename || func) {
|
|
60
59
|
acc.push((0, buildStackFrame_1.buildStackFrame)(filename, func, lineno ? Number(lineno) : undefined, colno ? Number(colno) : undefined));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getStackFramesFromError.js","sourceRoot":"","sources":["../../../../../src/instrumentations/errors/stackFrames/getStackFramesFromError.ts"],"names":[],"mappings":";;AAmBA,0DAqEC;AAxFD,
|
|
1
|
+
{"version":3,"file":"getStackFramesFromError.js","sourceRoot":"","sources":["../../../../../src/instrumentations/errors/stackFrames/getStackFramesFromError.ts"],"names":[],"mappings":"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","sourcesContent":["import { isNumber } from '@grafana/faro-core';\nimport type { ExceptionStackFrame, ExtendedError } from '@grafana/faro-core';\n\nimport { buildStackFrame } from './buildStackFrame';\nimport {\n evalString,\n firefoxEvalRegex,\n firefoxEvalString,\n firefoxLineRegex,\n newLineString,\n reactMinifiedRegex,\n webkitAddressAtString,\n webkitAddressAtStringLength,\n webkitEvalRegex,\n webkitEvalString,\n webkitLineRegex,\n} from './const';\nimport { getDataFromSafariExtensions } from './getDataFromSafariExtensions';\n\nexport function getStackFramesFromError(error: ExtendedError): ExceptionStackFrame[] {\n let lines: string[] = [];\n\n if (error.stacktrace) {\n lines = error.stacktrace.split(newLineString).filter((_line, idx) => idx % 2 === 0);\n } else if (error.stack) {\n lines = error.stack.split(newLineString);\n }\n\n const stackFrames = lines.reduce((acc, line, idx) => {\n let parts: RegExpExecArray | null;\n let func: string | undefined;\n let filename: string | undefined;\n let lineno: string | undefined;\n let colno: string | undefined;\n\n if ((parts = webkitLineRegex.exec(line))) {\n func = parts[1];\n filename = parts[2];\n lineno = parts[3];\n colno = parts[4];\n\n if (filename?.startsWith(webkitEvalString)) {\n const submatch = webkitEvalRegex.exec(filename);\n\n if (submatch) {\n filename = submatch[1];\n lineno = submatch[2];\n colno = submatch[3];\n }\n }\n\n filename = filename?.startsWith(webkitAddressAtString)\n ? filename.substring(webkitAddressAtStringLength)\n : filename;\n [func, filename] = getDataFromSafariExtensions(func, filename);\n } else if ((parts = firefoxLineRegex.exec(line))) {\n func = parts[1];\n filename = parts[3];\n lineno = parts[4];\n colno = parts[5];\n\n if (!!filename && filename.includes(firefoxEvalString)) {\n const submatch = firefoxEvalRegex.exec(filename);\n\n if (submatch) {\n func = func || evalString;\n filename = submatch[1];\n lineno = submatch[2];\n }\n } else if (idx === 0 && !colno && isNumber(error.columnNumber)) {\n colno = String(error.columnNumber! + 1);\n }\n\n [func, filename] = getDataFromSafariExtensions(func, filename);\n }\n\n if (filename || func) {\n acc.push(buildStackFrame(filename, func, lineno ? Number(lineno) : undefined, colno ? Number(colno) : undefined));\n }\n\n return acc;\n }, [] as ExceptionStackFrame[]);\n\n if (reactMinifiedRegex.test(error.message)) {\n return stackFrames.slice(1);\n }\n\n return stackFrames;\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseStacktrace = parseStacktrace;
|
|
4
|
-
|
|
4
|
+
const getStackFramesFromError_1 = require("./getStackFramesFromError");
|
|
5
5
|
function parseStacktrace(error) {
|
|
6
6
|
return {
|
|
7
7
|
frames: (0, getStackFramesFromError_1.getStackFramesFromError)(error),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseStacktrace.js","sourceRoot":"","sources":["../../../../../src/instrumentations/errors/stackFrames/parseStacktrace.ts"],"names":[],"mappings":";;AAIA,0CAIC;AAND,
|
|
1
|
+
{"version":3,"file":"parseStacktrace.js","sourceRoot":"","sources":["../../../../../src/instrumentations/errors/stackFrames/parseStacktrace.ts"],"names":[],"mappings":";;AAIA,0CAIC;AAND,uEAAoE;AAEpE,SAAgB,eAAe,CAAC,KAAoB;IAClD,OAAO;QACL,MAAM,EAAE,IAAA,iDAAuB,EAAC,KAAK,CAAC;KACvC,CAAC;AACJ,CAAC","sourcesContent":["import type { ExtendedError, Stacktrace } from '@grafana/faro-core';\n\nimport { getStackFramesFromError } from './getStackFramesFromError';\n\nexport function parseStacktrace(error: ExtendedError): Stacktrace {\n return {\n frames: getStackFramesFromError(error),\n };\n}\n"]}
|