@amplitude/plugin-autocapture-browser 1.25.3 → 1.26.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/lib/cjs/autocapture/track-long-task.d.ts +9 -0
- package/lib/cjs/autocapture/track-long-task.d.ts.map +1 -0
- package/lib/cjs/autocapture/track-long-task.js +124 -0
- package/lib/cjs/autocapture/track-long-task.js.map +1 -0
- package/lib/cjs/constants.d.ts +2 -0
- package/lib/cjs/constants.d.ts.map +1 -1
- package/lib/cjs/constants.js +3 -1
- package/lib/cjs/constants.js.map +1 -1
- package/lib/cjs/index.d.ts +1 -0
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +3 -1
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/performance-plugin.d.ts +5 -0
- package/lib/cjs/performance-plugin.d.ts.map +1 -0
- package/lib/cjs/performance-plugin.js +74 -0
- package/lib/cjs/performance-plugin.js.map +1 -0
- package/lib/cjs/version.d.ts +1 -1
- package/lib/cjs/version.js +1 -1
- package/lib/cjs/version.js.map +1 -1
- package/lib/esm/autocapture/track-long-task.d.ts +9 -0
- package/lib/esm/autocapture/track-long-task.d.ts.map +1 -0
- package/lib/esm/autocapture/track-long-task.js +120 -0
- package/lib/esm/autocapture/track-long-task.js.map +1 -0
- package/lib/esm/constants.d.ts +2 -0
- package/lib/esm/constants.d.ts.map +1 -1
- package/lib/esm/constants.js +2 -0
- package/lib/esm/constants.js.map +1 -1
- package/lib/esm/index.d.ts +1 -0
- package/lib/esm/index.d.ts.map +1 -1
- package/lib/esm/index.js +1 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/performance-plugin.d.ts +5 -0
- package/lib/esm/performance-plugin.d.ts.map +1 -0
- package/lib/esm/performance-plugin.js +70 -0
- package/lib/esm/performance-plugin.js.map +1 -0
- package/lib/esm/version.d.ts +1 -1
- package/lib/esm/version.js +1 -1
- package/lib/esm/version.js.map +1 -1
- package/lib/scripts/amplitude-min.js +1 -1
- package/lib/scripts/amplitude-min.js.gz +0 -0
- package/lib/scripts/amplitude-min.js.map +1 -1
- package/lib/scripts/amplitude-min.umd.js +1 -1
- package/lib/scripts/amplitude-min.umd.js.gz +0 -0
- package/lib/scripts/autocapture/track-long-task.d.ts +9 -0
- package/lib/scripts/autocapture/track-long-task.d.ts.map +1 -0
- package/lib/scripts/constants.d.ts +2 -0
- package/lib/scripts/constants.d.ts.map +1 -1
- package/lib/scripts/index.d.ts +1 -0
- package/lib/scripts/index.d.ts.map +1 -1
- package/lib/scripts/performance-plugin.d.ts +5 -0
- package/lib/scripts/performance-plugin.d.ts.map +1 -0
- package/lib/scripts/version.d.ts +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BrowserClient, PerformanceTrackingOptions } from '@amplitude/analytics-core';
|
|
2
|
+
export declare function trackMainThreadBlock({ amplitude, options, durationThreshold, }: {
|
|
3
|
+
amplitude: BrowserClient;
|
|
4
|
+
options: PerformanceTrackingOptions;
|
|
5
|
+
durationThreshold?: number;
|
|
6
|
+
}): {
|
|
7
|
+
unsubscribe: () => void;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=track-long-task.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-long-task.d.ts","sourceRoot":"","sources":["../../../src/autocapture/track-long-task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA8B,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AA2FlH,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,OAAO,EACP,iBAA8C,GAC/C,EAAE;IACD,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,0BAA0B,CAAC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;;EAyDA"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.trackMainThreadBlock = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var constants_1 = require("../constants");
|
|
6
|
+
var helpers_1 = require("../helpers");
|
|
7
|
+
var DEFAULT_DURATION_THRESHOLD = 100; // ms
|
|
8
|
+
var MEASURE_BUFFER_WINDOW_MS = 10000;
|
|
9
|
+
function getOverlappingMeasures(entry, measures) {
|
|
10
|
+
var taskEnd = entry.startTime + entry.duration;
|
|
11
|
+
return measures
|
|
12
|
+
.filter(function (measure) { return measure.startTime < taskEnd && measure.startTime + measure.duration > entry.startTime; })
|
|
13
|
+
.map(function (measure) { return measure.name; });
|
|
14
|
+
}
|
|
15
|
+
function buildLoAFProperties(entry, measures) {
|
|
16
|
+
var _a;
|
|
17
|
+
var overlappingMeasures = getOverlappingMeasures(entry, measures);
|
|
18
|
+
var scripts = (_a = entry.scripts) !== null && _a !== void 0 ? _a : [];
|
|
19
|
+
var scriptURLs = scripts.map(function (s) { return s.sourceURL; }).filter(Boolean);
|
|
20
|
+
var scriptFunctions = scripts.map(function (s) { return s.sourceFunctionName; }).filter(Boolean);
|
|
21
|
+
var invokerTypes = scripts.map(function (s) { return s.invokerType; }).filter(Boolean);
|
|
22
|
+
var invokers = scripts.map(function (s) { return s.invoker; }).filter(Boolean);
|
|
23
|
+
return tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({ '[Amplitude] Main Thread Block Source': 'long-animation-frame', '[Amplitude] Main Thread Block Duration': entry.duration, '[Amplitude] Main Thread Block Blocking Duration': entry.blockingDuration, '[Amplitude] Main Thread Block Start Time': entry.startTime }, (overlappingMeasures.length > 0 && { '[Amplitude] Main Thread Block Measures': overlappingMeasures })), { '[Amplitude] Main Thread Block Render Start': entry.renderStart, '[Amplitude] Main Thread Block Style And Layout Start': entry.styleAndLayoutStart, '[Amplitude] Main Thread Block Script Count': scripts.length }), (scriptURLs.length > 0 && { '[Amplitude] Main Thread Block Script URLs': scriptURLs })), (scriptFunctions.length > 0 && { '[Amplitude] Main Thread Block Script Functions': scriptFunctions })), (invokerTypes.length > 0 && { '[Amplitude] Main Thread Block Invoker Types': invokerTypes })), (invokers.length > 0 && { '[Amplitude] Main Thread Block Invokers': invokers }));
|
|
24
|
+
}
|
|
25
|
+
function buildLongTaskProperties(entry, measures) {
|
|
26
|
+
var _a;
|
|
27
|
+
var overlappingMeasures = getOverlappingMeasures(entry, measures);
|
|
28
|
+
var attribution = (_a = entry.attribution) !== null && _a !== void 0 ? _a : [];
|
|
29
|
+
return tslib_1.__assign(tslib_1.__assign({ '[Amplitude] Main Thread Block Source': 'long-task', '[Amplitude] Main Thread Block Duration': entry.duration, '[Amplitude] Main Thread Block Blocking Duration': entry.duration, '[Amplitude] Main Thread Block Start Time': entry.startTime }, (overlappingMeasures.length > 0 && { '[Amplitude] Main Thread Block Measures': overlappingMeasures })), (attribution.length > 0 && {
|
|
30
|
+
'[Amplitude] Main Thread Block Attribution': attribution.map(function (a) { return a.name; }),
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
function getSupportedEntryType() {
|
|
34
|
+
/* istanbul ignore next */
|
|
35
|
+
if (typeof PerformanceObserver === 'undefined')
|
|
36
|
+
return null;
|
|
37
|
+
try {
|
|
38
|
+
var supported = PerformanceObserver.supportedEntryTypes;
|
|
39
|
+
if (supported.includes('long-animation-frame'))
|
|
40
|
+
return 'long-animation-frame';
|
|
41
|
+
if (supported.includes('longtask'))
|
|
42
|
+
return 'longtask';
|
|
43
|
+
}
|
|
44
|
+
catch (_a) {
|
|
45
|
+
// ignore
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
function trackMainThreadBlock(_a) {
|
|
50
|
+
var amplitude = _a.amplitude, options = _a.options, _b = _a.durationThreshold, durationThreshold = _b === void 0 ? DEFAULT_DURATION_THRESHOLD : _b;
|
|
51
|
+
var entryType = getSupportedEntryType();
|
|
52
|
+
/* istanbul ignore next */
|
|
53
|
+
if (!entryType) {
|
|
54
|
+
return { unsubscribe: function () { return void 0; } };
|
|
55
|
+
}
|
|
56
|
+
var measures = [];
|
|
57
|
+
var measureObserver = new PerformanceObserver(function (list) {
|
|
58
|
+
var e_1, _a;
|
|
59
|
+
var now = performance.now();
|
|
60
|
+
try {
|
|
61
|
+
for (var _b = tslib_1.__values(list.getEntries()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
62
|
+
var entry = _c.value;
|
|
63
|
+
measures.push(entry);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
67
|
+
finally {
|
|
68
|
+
try {
|
|
69
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
70
|
+
}
|
|
71
|
+
finally { if (e_1) throw e_1.error; }
|
|
72
|
+
}
|
|
73
|
+
var cutoff = now - MEASURE_BUFFER_WINDOW_MS;
|
|
74
|
+
while (measures.length > 0 && measures[0].startTime < cutoff) {
|
|
75
|
+
measures.shift();
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
try {
|
|
79
|
+
measureObserver.observe({ entryTypes: ['measure'] });
|
|
80
|
+
}
|
|
81
|
+
catch (_c) {
|
|
82
|
+
// measure not supported — continue without it
|
|
83
|
+
}
|
|
84
|
+
var blockObserver = new PerformanceObserver(function (list) {
|
|
85
|
+
var e_2, _a;
|
|
86
|
+
try {
|
|
87
|
+
for (var _b = tslib_1.__values(list.getEntries()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
88
|
+
var entry = _c.value;
|
|
89
|
+
if (!(0, helpers_1.isUrlAllowed)(options)) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (entry.duration < durationThreshold) {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
var properties = entryType === 'long-animation-frame'
|
|
96
|
+
? buildLoAFProperties(entry, measures)
|
|
97
|
+
: buildLongTaskProperties(entry, measures);
|
|
98
|
+
amplitude.track(constants_1.AMPLITUDE_MAIN_THREAD_BLOCK_EVENT, properties);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
102
|
+
finally {
|
|
103
|
+
try {
|
|
104
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
105
|
+
}
|
|
106
|
+
finally { if (e_2) throw e_2.error; }
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
try {
|
|
110
|
+
blockObserver.observe({ entryTypes: [entryType] });
|
|
111
|
+
}
|
|
112
|
+
catch (_d) {
|
|
113
|
+
measureObserver.disconnect();
|
|
114
|
+
return { unsubscribe: function () { return void 0; } };
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
unsubscribe: function () {
|
|
118
|
+
blockObserver.disconnect();
|
|
119
|
+
measureObserver.disconnect();
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
exports.trackMainThreadBlock = trackMainThreadBlock;
|
|
124
|
+
//# sourceMappingURL=track-long-task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-long-task.js","sourceRoot":"","sources":["../../../src/autocapture/track-long-task.ts"],"names":[],"mappings":"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","sourcesContent":["import { BrowserClient, ElementInteractionsOptions, PerformanceTrackingOptions } from '@amplitude/analytics-core';\nimport { AMPLITUDE_MAIN_THREAD_BLOCK_EVENT } from '../constants';\nimport { isUrlAllowed } from '../helpers';\n\nconst DEFAULT_DURATION_THRESHOLD = 100; // ms\nconst MEASURE_BUFFER_WINDOW_MS = 10_000;\n\n// LoAF and Long Task types are not yet in TypeScript's built-in DOM types\ninterface PerformanceScriptTiming extends PerformanceEntry {\n sourceURL: string;\n sourceFunctionName: string;\n invokerType: string;\n invoker: string;\n}\n\ninterface PerformanceLongAnimationFrameTiming extends PerformanceEntry {\n renderStart: number;\n styleAndLayoutStart: number;\n blockingDuration: number;\n scripts: PerformanceScriptTiming[];\n}\n\ninterface TaskAttributionTiming extends PerformanceEntry {\n name: string;\n}\n\ninterface PerformanceLongTaskTiming extends PerformanceEntry {\n attribution: TaskAttributionTiming[];\n}\n\nfunction getOverlappingMeasures(entry: PerformanceEntry, measures: PerformanceEntry[]): string[] {\n const taskEnd = entry.startTime + entry.duration;\n return measures\n .filter((measure) => measure.startTime < taskEnd && measure.startTime + measure.duration > entry.startTime)\n .map((measure) => measure.name);\n}\n\nfunction buildLoAFProperties(entry: PerformanceLongAnimationFrameTiming, measures: PerformanceEntry[]) {\n const overlappingMeasures = getOverlappingMeasures(entry, measures);\n const scripts = entry.scripts ?? [];\n\n const scriptURLs = scripts.map((s) => s.sourceURL).filter(Boolean);\n const scriptFunctions = scripts.map((s) => s.sourceFunctionName).filter(Boolean);\n const invokerTypes = scripts.map((s) => s.invokerType).filter(Boolean);\n const invokers = scripts.map((s) => s.invoker).filter(Boolean);\n\n return {\n '[Amplitude] Main Thread Block Source': 'long-animation-frame',\n '[Amplitude] Main Thread Block Duration': entry.duration,\n '[Amplitude] Main Thread Block Blocking Duration': entry.blockingDuration,\n '[Amplitude] Main Thread Block Start Time': entry.startTime,\n ...(overlappingMeasures.length > 0 && { '[Amplitude] Main Thread Block Measures': overlappingMeasures }),\n '[Amplitude] Main Thread Block Render Start': entry.renderStart,\n '[Amplitude] Main Thread Block Style And Layout Start': entry.styleAndLayoutStart,\n '[Amplitude] Main Thread Block Script Count': scripts.length,\n ...(scriptURLs.length > 0 && { '[Amplitude] Main Thread Block Script URLs': scriptURLs }),\n ...(scriptFunctions.length > 0 && { '[Amplitude] Main Thread Block Script Functions': scriptFunctions }),\n ...(invokerTypes.length > 0 && { '[Amplitude] Main Thread Block Invoker Types': invokerTypes }),\n ...(invokers.length > 0 && { '[Amplitude] Main Thread Block Invokers': invokers }),\n };\n}\n\nfunction buildLongTaskProperties(entry: PerformanceLongTaskTiming, measures: PerformanceEntry[]) {\n const overlappingMeasures = getOverlappingMeasures(entry, measures);\n const attribution = entry.attribution ?? [];\n\n return {\n '[Amplitude] Main Thread Block Source': 'long-task',\n '[Amplitude] Main Thread Block Duration': entry.duration,\n '[Amplitude] Main Thread Block Blocking Duration': entry.duration,\n '[Amplitude] Main Thread Block Start Time': entry.startTime,\n ...(overlappingMeasures.length > 0 && { '[Amplitude] Main Thread Block Measures': overlappingMeasures }),\n ...(attribution.length > 0 && {\n '[Amplitude] Main Thread Block Attribution': attribution.map((a: TaskAttributionTiming) => a.name),\n }),\n };\n}\n\nfunction getSupportedEntryType(): 'long-animation-frame' | 'longtask' | null {\n /* istanbul ignore next */\n if (typeof PerformanceObserver === 'undefined') return null;\n try {\n const supported = PerformanceObserver.supportedEntryTypes;\n if (supported.includes('long-animation-frame')) return 'long-animation-frame';\n if (supported.includes('longtask')) return 'longtask';\n } catch {\n // ignore\n }\n return null;\n}\n\nexport function trackMainThreadBlock({\n amplitude,\n options,\n durationThreshold = DEFAULT_DURATION_THRESHOLD,\n}: {\n amplitude: BrowserClient;\n options: PerformanceTrackingOptions;\n durationThreshold?: number;\n}) {\n const entryType = getSupportedEntryType();\n\n /* istanbul ignore next */\n if (!entryType) {\n return { unsubscribe: () => void 0 };\n }\n\n const measures: PerformanceEntry[] = [];\n\n const measureObserver = new PerformanceObserver((list) => {\n const now = performance.now();\n for (const entry of list.getEntries()) {\n measures.push(entry);\n }\n const cutoff = now - MEASURE_BUFFER_WINDOW_MS;\n while (measures.length > 0 && measures[0].startTime < cutoff) {\n measures.shift();\n }\n });\n\n try {\n measureObserver.observe({ entryTypes: ['measure'] });\n } catch {\n // measure not supported — continue without it\n }\n\n const blockObserver = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (!isUrlAllowed(options as ElementInteractionsOptions)) {\n return;\n }\n if (entry.duration < durationThreshold) {\n continue;\n }\n const properties =\n entryType === 'long-animation-frame'\n ? buildLoAFProperties(entry as PerformanceLongAnimationFrameTiming, measures)\n : buildLongTaskProperties(entry as PerformanceLongTaskTiming, measures);\n\n amplitude.track(AMPLITUDE_MAIN_THREAD_BLOCK_EVENT, properties);\n }\n });\n\n try {\n blockObserver.observe({ entryTypes: [entryType] });\n } catch {\n measureObserver.disconnect();\n return { unsubscribe: () => void 0 };\n }\n\n return {\n unsubscribe: () => {\n blockObserver.disconnect();\n measureObserver.disconnect();\n },\n };\n}\n"]}
|
package/lib/cjs/constants.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export declare const PLUGIN_NAME = "@amplitude/plugin-autocapture-browser";
|
|
2
2
|
export declare const FRUSTRATION_PLUGIN_NAME = "@amplitude/plugin-frustration-browser";
|
|
3
|
+
export declare const PERFORMANCE_PLUGIN_NAME = "@amplitude/plugin-performance-browser";
|
|
3
4
|
export declare const AMPLITUDE_ELEMENT_CLICKED_EVENT = "[Amplitude] Element Clicked";
|
|
4
5
|
export declare const AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT = "[Amplitude] Dead Click";
|
|
5
6
|
export declare const AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT = "[Amplitude] Rage Click";
|
|
@@ -7,6 +8,7 @@ export declare const AMPLITUDE_ELEMENT_ERROR_CLICKED_EVENT = "[Amplitude] Error
|
|
|
7
8
|
export declare const AMPLITUDE_ELEMENT_CHANGED_EVENT = "[Amplitude] Element Changed";
|
|
8
9
|
export declare const AMPLITUDE_PAGE_SCROLLED_EVENT = "[Amplitude] Page Scrolled";
|
|
9
10
|
export declare const AMPLITUDE_THRASHED_CURSOR_EVENT = "[Amplitude] Thrashed Cursor";
|
|
11
|
+
export declare const AMPLITUDE_MAIN_THREAD_BLOCK_EVENT = "[Amplitude] Main Thread Block";
|
|
10
12
|
export declare const AMPLITUDE_EVENT_PROP_ELEMENT_ID = "[Amplitude] Element ID";
|
|
11
13
|
export declare const AMPLITUDE_EVENT_PROP_ELEMENT_CLASS = "[Amplitude] Element Class";
|
|
12
14
|
export declare const AMPLITUDE_EVENT_PROP_ELEMENT_TAG = "[Amplitude] Element Tag";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,0CAA0C,CAAC;AACnE,eAAO,MAAM,uBAAuB,0CAA0C,CAAC;AAE/E,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAC7E,eAAO,MAAM,oCAAoC,2BAA2B,CAAC;AAC7E,eAAO,MAAM,oCAAoC,2BAA2B,CAAC;AAC7E,eAAO,MAAM,qCAAqC,4BAA4B,CAAC;AAC/E,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAC7E,eAAO,MAAM,6BAA6B,8BAA8B,CAAC;AACzE,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,0CAA0C,CAAC;AACnE,eAAO,MAAM,uBAAuB,0CAA0C,CAAC;AAC/E,eAAO,MAAM,uBAAuB,0CAA0C,CAAC;AAE/E,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAC7E,eAAO,MAAM,oCAAoC,2BAA2B,CAAC;AAC7E,eAAO,MAAM,oCAAoC,2BAA2B,CAAC;AAC7E,eAAO,MAAM,qCAAqC,4BAA4B,CAAC;AAC/E,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAC7E,eAAO,MAAM,6BAA6B,8BAA8B,CAAC;AACzE,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAC7E,eAAO,MAAM,iCAAiC,kCAAkC,CAAC;AAEjF,eAAO,MAAM,+BAA+B,2BAA2B,CAAC;AACxE,eAAO,MAAM,kCAAkC,8BAA8B,CAAC;AAC9E,eAAO,MAAM,gCAAgC,4BAA4B,CAAC;AAC1E,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAC5E,eAAO,MAAM,sCAAsC,kCAAkC,CAAC;AACtF,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAC5E,eAAO,MAAM,0CAA0C,sCAAsC,CAAC;AAC9F,eAAO,MAAM,yCAAyC,qCAAqC,CAAC;AAC5F,eAAO,MAAM,uCAAuC,mCAAmC,CAAC;AACxF,eAAO,MAAM,uCAAuC,mCAAmC,CAAC;AACxF,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAE5E,eAAO,MAAM,yCAAyC,qCAAqC,CAAC;AAC5F,eAAO,MAAM,6BAA6B,yBAAyB,CAAC;AACpE,eAAO,MAAM,+BAA+B,2BAA2B,CAAC;AACxE,eAAO,MAAM,oCAAoC,gCAAgC,CAAC;AAClF,eAAO,MAAM,mCAAmC,+BAA+B,CAAC;AAChF,eAAO,MAAM,+BAA+B,2BAA2B,CAAC;AACxE,eAAO,MAAM,+BAA+B,2BAA2B,CAAC;AAExE,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAG5E,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,qBAAqB,EACrB,uCAAuC,GACxC,MAAM,2BAA2B,CAAC;AAEnC,eAAO,MAAM,4CAA4C,6EACmB,CAAC;AAG7E,eAAO,MAAM,wCAAwC,0CAA0C,CAAC;AAGhG,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAEnE,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAGxC,eAAO,MAAM,6BAA6B,kBAAkB,CAAC;AAE7D,eAAO,MAAM,8BAA8B,QAAS,CAAC"}
|
package/lib/cjs/constants.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MAX_ELEMENT_EXPOSED_STR_LENGTH = exports.PAGE_VIEW_SESSION_STORAGE_KEY = exports.MAX_ATTRIBUTE_LENGTH = exports.MAX_MASK_TEXT_PATTERNS = exports.DATA_AMP_MASK_ATTRIBUTES = exports.AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS = exports.AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL = exports.AMPLITUDE_BACKGROUND_CAPTURE_SCRIPT_URL = exports.AMPLITUDE_ORIGINS_MAP = exports.AMPLITUDE_ORIGIN_STAGING = exports.AMPLITUDE_ORIGIN_EU = exports.AMPLITUDE_ORIGIN = exports.AMPLITUDE_EVENT_PROP_PAGE_VIEW_ID = exports.AMPLITUDE_EVENT_PROP_MAX_PAGE_Y = exports.AMPLITUDE_EVENT_PROP_MAX_PAGE_X = exports.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH = exports.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT = exports.AMPLITUDE_EVENT_PROP_PAGE_TITLE = exports.AMPLITUDE_EVENT_PROP_PAGE_URL = exports.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL = exports.AMPLITUDE_EVENT_PROP_ELEMENT_PATH = exports.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES = exports.AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL = exports.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP = exports.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT = exports.AMPLITUDE_EVENT_PROP_ELEMENT_HREF = exports.AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY = exports.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT = exports.AMPLITUDE_EVENT_PROP_ELEMENT_TAG = exports.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS = exports.AMPLITUDE_EVENT_PROP_ELEMENT_ID = exports.AMPLITUDE_THRASHED_CURSOR_EVENT = exports.AMPLITUDE_PAGE_SCROLLED_EVENT = exports.AMPLITUDE_ELEMENT_CHANGED_EVENT = exports.AMPLITUDE_ELEMENT_ERROR_CLICKED_EVENT = exports.AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT = exports.AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT = exports.AMPLITUDE_ELEMENT_CLICKED_EVENT = exports.FRUSTRATION_PLUGIN_NAME = exports.PLUGIN_NAME = void 0;
|
|
3
|
+
exports.MAX_ELEMENT_EXPOSED_STR_LENGTH = exports.PAGE_VIEW_SESSION_STORAGE_KEY = exports.MAX_ATTRIBUTE_LENGTH = exports.MAX_MASK_TEXT_PATTERNS = exports.DATA_AMP_MASK_ATTRIBUTES = exports.AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS = exports.AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL = exports.AMPLITUDE_BACKGROUND_CAPTURE_SCRIPT_URL = exports.AMPLITUDE_ORIGINS_MAP = exports.AMPLITUDE_ORIGIN_STAGING = exports.AMPLITUDE_ORIGIN_EU = exports.AMPLITUDE_ORIGIN = exports.AMPLITUDE_EVENT_PROP_PAGE_VIEW_ID = exports.AMPLITUDE_EVENT_PROP_MAX_PAGE_Y = exports.AMPLITUDE_EVENT_PROP_MAX_PAGE_X = exports.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH = exports.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT = exports.AMPLITUDE_EVENT_PROP_PAGE_TITLE = exports.AMPLITUDE_EVENT_PROP_PAGE_URL = exports.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL = exports.AMPLITUDE_EVENT_PROP_ELEMENT_PATH = exports.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES = exports.AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL = exports.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP = exports.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT = exports.AMPLITUDE_EVENT_PROP_ELEMENT_HREF = exports.AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY = exports.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT = exports.AMPLITUDE_EVENT_PROP_ELEMENT_TAG = exports.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS = exports.AMPLITUDE_EVENT_PROP_ELEMENT_ID = exports.AMPLITUDE_MAIN_THREAD_BLOCK_EVENT = exports.AMPLITUDE_THRASHED_CURSOR_EVENT = exports.AMPLITUDE_PAGE_SCROLLED_EVENT = exports.AMPLITUDE_ELEMENT_CHANGED_EVENT = exports.AMPLITUDE_ELEMENT_ERROR_CLICKED_EVENT = exports.AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT = exports.AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT = exports.AMPLITUDE_ELEMENT_CLICKED_EVENT = exports.PERFORMANCE_PLUGIN_NAME = exports.FRUSTRATION_PLUGIN_NAME = exports.PLUGIN_NAME = void 0;
|
|
4
4
|
exports.PLUGIN_NAME = '@amplitude/plugin-autocapture-browser';
|
|
5
5
|
exports.FRUSTRATION_PLUGIN_NAME = '@amplitude/plugin-frustration-browser';
|
|
6
|
+
exports.PERFORMANCE_PLUGIN_NAME = '@amplitude/plugin-performance-browser';
|
|
6
7
|
exports.AMPLITUDE_ELEMENT_CLICKED_EVENT = '[Amplitude] Element Clicked';
|
|
7
8
|
exports.AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT = '[Amplitude] Dead Click';
|
|
8
9
|
exports.AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT = '[Amplitude] Rage Click';
|
|
@@ -10,6 +11,7 @@ exports.AMPLITUDE_ELEMENT_ERROR_CLICKED_EVENT = '[Amplitude] Error Click';
|
|
|
10
11
|
exports.AMPLITUDE_ELEMENT_CHANGED_EVENT = '[Amplitude] Element Changed';
|
|
11
12
|
exports.AMPLITUDE_PAGE_SCROLLED_EVENT = '[Amplitude] Page Scrolled';
|
|
12
13
|
exports.AMPLITUDE_THRASHED_CURSOR_EVENT = '[Amplitude] Thrashed Cursor';
|
|
14
|
+
exports.AMPLITUDE_MAIN_THREAD_BLOCK_EVENT = '[Amplitude] Main Thread Block';
|
|
13
15
|
exports.AMPLITUDE_EVENT_PROP_ELEMENT_ID = '[Amplitude] Element ID';
|
|
14
16
|
exports.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS = '[Amplitude] Element Class';
|
|
15
17
|
exports.AMPLITUDE_EVENT_PROP_ELEMENT_TAG = '[Amplitude] Element Tag';
|
package/lib/cjs/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG,uCAAuC,CAAC;AACtD,QAAA,uBAAuB,GAAG,uCAAuC,CAAC;AAElE,QAAA,+BAA+B,GAAG,6BAA6B,CAAC;AAChE,QAAA,oCAAoC,GAAG,wBAAwB,CAAC;AAChE,QAAA,oCAAoC,GAAG,wBAAwB,CAAC;AAChE,QAAA,qCAAqC,GAAG,yBAAyB,CAAC;AAClE,QAAA,+BAA+B,GAAG,6BAA6B,CAAC;AAChE,QAAA,6BAA6B,GAAG,2BAA2B,CAAC;AAC5D,QAAA,+BAA+B,GAAG,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG,uCAAuC,CAAC;AACtD,QAAA,uBAAuB,GAAG,uCAAuC,CAAC;AAClE,QAAA,uBAAuB,GAAG,uCAAuC,CAAC;AAElE,QAAA,+BAA+B,GAAG,6BAA6B,CAAC;AAChE,QAAA,oCAAoC,GAAG,wBAAwB,CAAC;AAChE,QAAA,oCAAoC,GAAG,wBAAwB,CAAC;AAChE,QAAA,qCAAqC,GAAG,yBAAyB,CAAC;AAClE,QAAA,+BAA+B,GAAG,6BAA6B,CAAC;AAChE,QAAA,6BAA6B,GAAG,2BAA2B,CAAC;AAC5D,QAAA,+BAA+B,GAAG,6BAA6B,CAAC;AAChE,QAAA,iCAAiC,GAAG,+BAA+B,CAAC;AAEpE,QAAA,+BAA+B,GAAG,wBAAwB,CAAC;AAC3D,QAAA,kCAAkC,GAAG,2BAA2B,CAAC;AACjE,QAAA,gCAAgC,GAAG,yBAAyB,CAAC;AAC7D,QAAA,iCAAiC,GAAG,0BAA0B,CAAC;AAC/D,QAAA,sCAAsC,GAAG,+BAA+B,CAAC;AACzE,QAAA,iCAAiC,GAAG,0BAA0B,CAAC;AAC/D,QAAA,0CAA0C,GAAG,mCAAmC,CAAC;AACjF,QAAA,yCAAyC,GAAG,kCAAkC,CAAC;AAC/E,QAAA,uCAAuC,GAAG,gCAAgC,CAAC;AAC3E,QAAA,uCAAuC,GAAG,gCAAgC,CAAC;AAC3E,QAAA,iCAAiC,GAAG,0BAA0B,CAAC;AAE/D,QAAA,yCAAyC,GAAG,kCAAkC,CAAC;AAC/E,QAAA,6BAA6B,GAAG,sBAAsB,CAAC;AACvD,QAAA,+BAA+B,GAAG,wBAAwB,CAAC;AAC3D,QAAA,oCAAoC,GAAG,6BAA6B,CAAC;AACrE,QAAA,mCAAmC,GAAG,4BAA4B,CAAC;AACnE,QAAA,+BAA+B,GAAG,wBAAwB,CAAC;AAC3D,QAAA,+BAA+B,GAAG,wBAAwB,CAAC;AAE3D,QAAA,iCAAiC,GAAG,0BAA0B,CAAC;AAE5E,4FAA4F;AAC5F,4DAMmC;AALjC,kHAAA,gBAAgB,OAAA;AAChB,qHAAA,mBAAmB,OAAA;AACnB,0HAAA,wBAAwB,OAAA;AACxB,uHAAA,qBAAqB,OAAA;AACrB,yIAAA,uCAAuC,OAAA;AAG5B,QAAA,4CAA4C,GACvD,0EAA0E,CAAC;AAC7E,gGAAgG;AAChG,6CAA6C;AAChC,QAAA,wCAAwC,GAAG,uCAAuC,CAAC;AAEhG,qFAAqF;AACxE,QAAA,wBAAwB,GAAG,0BAA0B,CAAC;AAEtD,QAAA,sBAAsB,GAAG,EAAE,CAAC;AAE5B,QAAA,oBAAoB,GAAG,GAAG,CAAC;AAExC,qDAAqD;AACxC,QAAA,6BAA6B,GAAG,eAAe,CAAC;AAEhD,QAAA,8BAA8B,GAAG,KAAM,CAAC","sourcesContent":["export const PLUGIN_NAME = '@amplitude/plugin-autocapture-browser';\nexport const FRUSTRATION_PLUGIN_NAME = '@amplitude/plugin-frustration-browser';\nexport const PERFORMANCE_PLUGIN_NAME = '@amplitude/plugin-performance-browser';\n\nexport const AMPLITUDE_ELEMENT_CLICKED_EVENT = '[Amplitude] Element Clicked';\nexport const AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT = '[Amplitude] Dead Click';\nexport const AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT = '[Amplitude] Rage Click';\nexport const AMPLITUDE_ELEMENT_ERROR_CLICKED_EVENT = '[Amplitude] Error Click';\nexport const AMPLITUDE_ELEMENT_CHANGED_EVENT = '[Amplitude] Element Changed';\nexport const AMPLITUDE_PAGE_SCROLLED_EVENT = '[Amplitude] Page Scrolled';\nexport const AMPLITUDE_THRASHED_CURSOR_EVENT = '[Amplitude] Thrashed Cursor';\nexport const AMPLITUDE_MAIN_THREAD_BLOCK_EVENT = '[Amplitude] Main Thread Block';\n\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_ID = '[Amplitude] Element ID';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_CLASS = '[Amplitude] Element Class';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_TAG = '[Amplitude] Element Tag';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_TEXT = '[Amplitude] Element Text';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY = '[Amplitude] Element Hierarchy';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_HREF = '[Amplitude] Element Href';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT = '[Amplitude] Element Position Left';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP = '[Amplitude] Element Position Top';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL = '[Amplitude] Element Aria Label';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES = '[Amplitude] Element Attributes';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_PATH = '[Amplitude] Element Path';\n\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL = '[Amplitude] Element Parent Label';\nexport const AMPLITUDE_EVENT_PROP_PAGE_URL = '[Amplitude] Page URL';\nexport const AMPLITUDE_EVENT_PROP_PAGE_TITLE = '[Amplitude] Page Title';\nexport const AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT = '[Amplitude] Viewport Height';\nexport const AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH = '[Amplitude] Viewport Width';\nexport const AMPLITUDE_EVENT_PROP_MAX_PAGE_X = '[Amplitude] Max Page X';\nexport const AMPLITUDE_EVENT_PROP_MAX_PAGE_Y = '[Amplitude] Max Page Y';\n\nexport const AMPLITUDE_EVENT_PROP_PAGE_VIEW_ID = '[Amplitude] Page View ID';\n\n// Origin constants are now shared via analytics-core; re-export for backwards compatibility\nexport {\n AMPLITUDE_ORIGIN,\n AMPLITUDE_ORIGIN_EU,\n AMPLITUDE_ORIGIN_STAGING,\n AMPLITUDE_ORIGINS_MAP,\n AMPLITUDE_BACKGROUND_CAPTURE_SCRIPT_URL,\n} from '@amplitude/analytics-core';\n\nexport const AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL =\n 'https://cdn.amplitude.com/libs/visual-tagging-selector-1.0.0-alpha.js.gz';\n// This is the class name used by the visual tagging selector to highlight the selected element.\n// Should not use this class in the selector.\nexport const AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS = 'amp-visual-tagging-selector-highlight';\n\n// Data attribute for specifying which attributes should be redacted from autocapture\nexport const DATA_AMP_MASK_ATTRIBUTES = 'data-amp-mask-attributes';\n\nexport const MAX_MASK_TEXT_PATTERNS = 25;\n\nexport const MAX_ATTRIBUTE_LENGTH = 128;\n\n// The key for the page view object in sessionStorage\nexport const PAGE_VIEW_SESSION_STORAGE_KEY = 'AMP_PAGE_VIEW';\n\nexport const MAX_ELEMENT_EXPOSED_STR_LENGTH = 18_000;\n"]}
|
package/lib/cjs/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { autocapturePlugin as plugin, autocapturePlugin } from './autocapture-plugin';
|
|
2
2
|
export { frustrationPlugin } from './frustration-plugin';
|
|
3
|
+
export { performancePlugin } from './performance-plugin';
|
|
3
4
|
export { Action, ActionData, Message, enableVisualTagging } from './libs/messenger';
|
|
4
5
|
export { DataExtractor } from './data-extractor';
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,IAAI,MAAM,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,IAAI,MAAM,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
package/lib/cjs/index.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DataExtractor = exports.enableVisualTagging = exports.frustrationPlugin = exports.autocapturePlugin = exports.plugin = void 0;
|
|
3
|
+
exports.DataExtractor = exports.enableVisualTagging = exports.performancePlugin = exports.frustrationPlugin = exports.autocapturePlugin = exports.plugin = void 0;
|
|
4
4
|
var autocapture_plugin_1 = require("./autocapture-plugin");
|
|
5
5
|
Object.defineProperty(exports, "plugin", { enumerable: true, get: function () { return autocapture_plugin_1.autocapturePlugin; } });
|
|
6
6
|
Object.defineProperty(exports, "autocapturePlugin", { enumerable: true, get: function () { return autocapture_plugin_1.autocapturePlugin; } });
|
|
7
7
|
var frustration_plugin_1 = require("./frustration-plugin");
|
|
8
8
|
Object.defineProperty(exports, "frustrationPlugin", { enumerable: true, get: function () { return frustration_plugin_1.frustrationPlugin; } });
|
|
9
|
+
var performance_plugin_1 = require("./performance-plugin");
|
|
10
|
+
Object.defineProperty(exports, "performancePlugin", { enumerable: true, get: function () { return performance_plugin_1.performancePlugin; } });
|
|
9
11
|
var messenger_1 = require("./libs/messenger");
|
|
10
12
|
Object.defineProperty(exports, "enableVisualTagging", { enumerable: true, get: function () { return messenger_1.enableVisualTagging; } });
|
|
11
13
|
var data_extractor_1 = require("./data-extractor");
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,2DAAsF;AAA7E,4GAAA,iBAAiB,OAAU;AAAE,uHAAA,iBAAiB,OAAA;AACvD,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAC1B,8CAAoF;AAA9C,gHAAA,mBAAmB,OAAA;AACzD,mDAAiD;AAAxC,+GAAA,aAAa,OAAA","sourcesContent":["export { autocapturePlugin as plugin, autocapturePlugin } from './autocapture-plugin';\nexport { frustrationPlugin } from './frustration-plugin';\nexport { Action, ActionData, Message, enableVisualTagging } from './libs/messenger';\nexport { DataExtractor } from './data-extractor';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,2DAAsF;AAA7E,4GAAA,iBAAiB,OAAU;AAAE,uHAAA,iBAAiB,OAAA;AACvD,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAC1B,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAC1B,8CAAoF;AAA9C,gHAAA,mBAAmB,OAAA;AACzD,mDAAiD;AAAxC,+GAAA,aAAa,OAAA","sourcesContent":["export { autocapturePlugin as plugin, autocapturePlugin } from './autocapture-plugin';\nexport { frustrationPlugin } from './frustration-plugin';\nexport { performancePlugin } from './performance-plugin';\nexport { Action, ActionData, Message, enableVisualTagging } from './libs/messenger';\nexport { DataExtractor } from './data-extractor';\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { BrowserClient, BrowserConfig, EnrichmentPlugin, PerformanceTrackingOptions } from '@amplitude/analytics-core';
|
|
2
|
+
type BrowserEnrichmentPlugin = EnrichmentPlugin<BrowserClient, BrowserConfig>;
|
|
3
|
+
export declare const performancePlugin: (options?: PerformanceTrackingOptions) => BrowserEnrichmentPlugin;
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=performance-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance-plugin.d.ts","sourceRoot":"","sources":["../../src/performance-plugin.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,0BAA0B,EAE3B,MAAM,2BAA2B,CAAC;AAInC,KAAK,uBAAuB,GAAG,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAI9E,eAAO,MAAM,iBAAiB,aAAa,0BAA0B,KAAQ,uBAmD5E,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.performancePlugin = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var constants = tslib_1.__importStar(require("./constants"));
|
|
6
|
+
var track_long_task_1 = require("./autocapture/track-long-task");
|
|
7
|
+
var DEFAULT_DURATION_THRESHOLD = 100; // ms
|
|
8
|
+
var performancePlugin = function (options) {
|
|
9
|
+
if (options === void 0) { options = {}; }
|
|
10
|
+
var name = constants.PERFORMANCE_PLUGIN_NAME;
|
|
11
|
+
var type = 'enrichment';
|
|
12
|
+
var subscriptions = [];
|
|
13
|
+
var mainThreadBlockEnabled = options.mainThreadBlock === true ||
|
|
14
|
+
(typeof options.mainThreadBlock === 'object' && options.mainThreadBlock !== null);
|
|
15
|
+
var setup = function (config, amplitude) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
16
|
+
var durationThreshold, subscription;
|
|
17
|
+
var _a;
|
|
18
|
+
return tslib_1.__generator(this, function (_b) {
|
|
19
|
+
/* istanbul ignore if */
|
|
20
|
+
if (typeof document === 'undefined') {
|
|
21
|
+
return [2 /*return*/];
|
|
22
|
+
}
|
|
23
|
+
if (mainThreadBlockEnabled) {
|
|
24
|
+
durationThreshold = DEFAULT_DURATION_THRESHOLD;
|
|
25
|
+
if (typeof options.mainThreadBlock === 'object' && options.mainThreadBlock.durationThreshold !== undefined) {
|
|
26
|
+
durationThreshold = options.mainThreadBlock.durationThreshold;
|
|
27
|
+
}
|
|
28
|
+
subscription = (0, track_long_task_1.trackMainThreadBlock)({
|
|
29
|
+
amplitude: amplitude,
|
|
30
|
+
options: options,
|
|
31
|
+
durationThreshold: durationThreshold,
|
|
32
|
+
});
|
|
33
|
+
subscriptions.push(subscription);
|
|
34
|
+
}
|
|
35
|
+
/* istanbul ignore next */
|
|
36
|
+
(_a = config === null || config === void 0 ? void 0 : config.loggerProvider) === null || _a === void 0 ? void 0 : _a.log("".concat(name, " performance tracking has been successfully added."));
|
|
37
|
+
return [2 /*return*/];
|
|
38
|
+
});
|
|
39
|
+
}); };
|
|
40
|
+
var execute = function (event) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
41
|
+
return tslib_1.__generator(this, function (_a) {
|
|
42
|
+
return [2 /*return*/, event];
|
|
43
|
+
});
|
|
44
|
+
}); };
|
|
45
|
+
var teardown = function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
46
|
+
var subscriptions_1, subscriptions_1_1, subscription;
|
|
47
|
+
var e_1, _a;
|
|
48
|
+
return tslib_1.__generator(this, function (_b) {
|
|
49
|
+
try {
|
|
50
|
+
for (subscriptions_1 = tslib_1.__values(subscriptions), subscriptions_1_1 = subscriptions_1.next(); !subscriptions_1_1.done; subscriptions_1_1 = subscriptions_1.next()) {
|
|
51
|
+
subscription = subscriptions_1_1.value;
|
|
52
|
+
subscription.unsubscribe();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
56
|
+
finally {
|
|
57
|
+
try {
|
|
58
|
+
if (subscriptions_1_1 && !subscriptions_1_1.done && (_a = subscriptions_1.return)) _a.call(subscriptions_1);
|
|
59
|
+
}
|
|
60
|
+
finally { if (e_1) throw e_1.error; }
|
|
61
|
+
}
|
|
62
|
+
return [2 /*return*/];
|
|
63
|
+
});
|
|
64
|
+
}); };
|
|
65
|
+
return {
|
|
66
|
+
name: name,
|
|
67
|
+
type: type,
|
|
68
|
+
setup: setup,
|
|
69
|
+
execute: execute,
|
|
70
|
+
teardown: teardown,
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
exports.performancePlugin = performancePlugin;
|
|
74
|
+
//# sourceMappingURL=performance-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance-plugin.js","sourceRoot":"","sources":["../../src/performance-plugin.ts"],"names":[],"mappings":";;;;AAQA,6DAAyC;AACzC,iEAAqE;AAIrE,IAAM,0BAA0B,GAAG,GAAG,CAAC,CAAC,KAAK;AAEtC,IAAM,iBAAiB,GAAG,UAAC,OAAwC;IAAxC,wBAAA,EAAA,YAAwC;IACxE,IAAM,IAAI,GAAG,SAAS,CAAC,uBAAuB,CAAC;IAC/C,IAAM,IAAI,GAAG,YAAY,CAAC;IAE1B,IAAM,aAAa,GAAqB,EAAE,CAAC;IAE3C,IAAM,sBAAsB,GAC1B,OAAO,CAAC,eAAe,KAAK,IAAI;QAChC,CAAC,OAAO,OAAO,CAAC,eAAe,KAAK,QAAQ,IAAI,OAAO,CAAC,eAAe,KAAK,IAAI,CAAC,CAAC;IAEpF,IAAM,KAAK,GAAqC,UAAO,MAAM,EAAE,SAAS;;;;YACtE,wBAAwB;YACxB,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;gBACnC,sBAAO;aACR;YAED,IAAI,sBAAsB,EAAE;gBACtB,iBAAiB,GAAG,0BAA0B,CAAC;gBACnD,IAAI,OAAO,OAAO,CAAC,eAAe,KAAK,QAAQ,IAAI,OAAO,CAAC,eAAe,CAAC,iBAAiB,KAAK,SAAS,EAAE;oBAC1G,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC;iBAC/D;gBAEK,YAAY,GAAG,IAAA,sCAAoB,EAAC;oBACxC,SAAS,WAAA;oBACT,OAAO,SAAA;oBACP,iBAAiB,mBAAA;iBAClB,CAAC,CAAC;gBACH,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aAClC;YAED,0BAA0B;YAC1B,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,0CAAE,GAAG,CAAC,UAAG,IAAI,uDAAoD,CAAC,CAAC;;;SAC1F,CAAC;IAEF,IAAM,OAAO,GAAuC,UAAO,KAAK;;YAC9D,sBAAO,KAAK,EAAC;;SACd,CAAC;IAEF,IAAM,QAAQ,GAAG;;;;;gBACf,KAA2B,kBAAA,iBAAA,aAAa,CAAA,mHAAE;oBAA/B,YAAY;oBACrB,YAAY,CAAC,WAAW,EAAE,CAAC;iBAC5B;;;;;;;;;;;SACF,CAAC;IAEF,OAAO;QACL,IAAI,MAAA;QACJ,IAAI,MAAA;QACJ,KAAK,OAAA;QACL,OAAO,SAAA;QACP,QAAQ,UAAA;KACT,CAAC;AACJ,CAAC,CAAC;AAnDW,QAAA,iBAAiB,qBAmD5B","sourcesContent":["/* eslint-disable no-restricted-globals */\nimport {\n BrowserClient,\n BrowserConfig,\n EnrichmentPlugin,\n PerformanceTrackingOptions,\n Unsubscribable,\n} from '@amplitude/analytics-core';\nimport * as constants from './constants';\nimport { trackMainThreadBlock } from './autocapture/track-long-task';\n\ntype BrowserEnrichmentPlugin = EnrichmentPlugin<BrowserClient, BrowserConfig>;\n\nconst DEFAULT_DURATION_THRESHOLD = 100; // ms\n\nexport const performancePlugin = (options: PerformanceTrackingOptions = {}): BrowserEnrichmentPlugin => {\n const name = constants.PERFORMANCE_PLUGIN_NAME;\n const type = 'enrichment';\n\n const subscriptions: Unsubscribable[] = [];\n\n const mainThreadBlockEnabled =\n options.mainThreadBlock === true ||\n (typeof options.mainThreadBlock === 'object' && options.mainThreadBlock !== null);\n\n const setup: BrowserEnrichmentPlugin['setup'] = async (config, amplitude) => {\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n if (mainThreadBlockEnabled) {\n let durationThreshold = DEFAULT_DURATION_THRESHOLD;\n if (typeof options.mainThreadBlock === 'object' && options.mainThreadBlock.durationThreshold !== undefined) {\n durationThreshold = options.mainThreadBlock.durationThreshold;\n }\n\n const subscription = trackMainThreadBlock({\n amplitude,\n options,\n durationThreshold,\n });\n subscriptions.push(subscription);\n }\n\n /* istanbul ignore next */\n config?.loggerProvider?.log(`${name} performance tracking has been successfully added.`);\n };\n\n const execute: BrowserEnrichmentPlugin['execute'] = async (event) => {\n return event;\n };\n\n const teardown = async () => {\n for (const subscription of subscriptions) {\n subscription.unsubscribe();\n }\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n"]}
|
package/lib/cjs/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "1.
|
|
1
|
+
export declare const VERSION = "1.26.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/lib/cjs/version.js
CHANGED
package/lib/cjs/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["export const VERSION = '1.
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["export const VERSION = '1.26.0';\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BrowserClient, PerformanceTrackingOptions } from '@amplitude/analytics-core';
|
|
2
|
+
export declare function trackMainThreadBlock({ amplitude, options, durationThreshold, }: {
|
|
3
|
+
amplitude: BrowserClient;
|
|
4
|
+
options: PerformanceTrackingOptions;
|
|
5
|
+
durationThreshold?: number;
|
|
6
|
+
}): {
|
|
7
|
+
unsubscribe: () => void;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=track-long-task.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-long-task.d.ts","sourceRoot":"","sources":["../../../src/autocapture/track-long-task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA8B,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AA2FlH,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,OAAO,EACP,iBAA8C,GAC/C,EAAE;IACD,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,0BAA0B,CAAC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;;EAyDA"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { __assign, __values } from "tslib";
|
|
2
|
+
import { AMPLITUDE_MAIN_THREAD_BLOCK_EVENT } from '../constants';
|
|
3
|
+
import { isUrlAllowed } from '../helpers';
|
|
4
|
+
var DEFAULT_DURATION_THRESHOLD = 100; // ms
|
|
5
|
+
var MEASURE_BUFFER_WINDOW_MS = 10000;
|
|
6
|
+
function getOverlappingMeasures(entry, measures) {
|
|
7
|
+
var taskEnd = entry.startTime + entry.duration;
|
|
8
|
+
return measures
|
|
9
|
+
.filter(function (measure) { return measure.startTime < taskEnd && measure.startTime + measure.duration > entry.startTime; })
|
|
10
|
+
.map(function (measure) { return measure.name; });
|
|
11
|
+
}
|
|
12
|
+
function buildLoAFProperties(entry, measures) {
|
|
13
|
+
var _a;
|
|
14
|
+
var overlappingMeasures = getOverlappingMeasures(entry, measures);
|
|
15
|
+
var scripts = (_a = entry.scripts) !== null && _a !== void 0 ? _a : [];
|
|
16
|
+
var scriptURLs = scripts.map(function (s) { return s.sourceURL; }).filter(Boolean);
|
|
17
|
+
var scriptFunctions = scripts.map(function (s) { return s.sourceFunctionName; }).filter(Boolean);
|
|
18
|
+
var invokerTypes = scripts.map(function (s) { return s.invokerType; }).filter(Boolean);
|
|
19
|
+
var invokers = scripts.map(function (s) { return s.invoker; }).filter(Boolean);
|
|
20
|
+
return __assign(__assign(__assign(__assign(__assign(__assign({ '[Amplitude] Main Thread Block Source': 'long-animation-frame', '[Amplitude] Main Thread Block Duration': entry.duration, '[Amplitude] Main Thread Block Blocking Duration': entry.blockingDuration, '[Amplitude] Main Thread Block Start Time': entry.startTime }, (overlappingMeasures.length > 0 && { '[Amplitude] Main Thread Block Measures': overlappingMeasures })), { '[Amplitude] Main Thread Block Render Start': entry.renderStart, '[Amplitude] Main Thread Block Style And Layout Start': entry.styleAndLayoutStart, '[Amplitude] Main Thread Block Script Count': scripts.length }), (scriptURLs.length > 0 && { '[Amplitude] Main Thread Block Script URLs': scriptURLs })), (scriptFunctions.length > 0 && { '[Amplitude] Main Thread Block Script Functions': scriptFunctions })), (invokerTypes.length > 0 && { '[Amplitude] Main Thread Block Invoker Types': invokerTypes })), (invokers.length > 0 && { '[Amplitude] Main Thread Block Invokers': invokers }));
|
|
21
|
+
}
|
|
22
|
+
function buildLongTaskProperties(entry, measures) {
|
|
23
|
+
var _a;
|
|
24
|
+
var overlappingMeasures = getOverlappingMeasures(entry, measures);
|
|
25
|
+
var attribution = (_a = entry.attribution) !== null && _a !== void 0 ? _a : [];
|
|
26
|
+
return __assign(__assign({ '[Amplitude] Main Thread Block Source': 'long-task', '[Amplitude] Main Thread Block Duration': entry.duration, '[Amplitude] Main Thread Block Blocking Duration': entry.duration, '[Amplitude] Main Thread Block Start Time': entry.startTime }, (overlappingMeasures.length > 0 && { '[Amplitude] Main Thread Block Measures': overlappingMeasures })), (attribution.length > 0 && {
|
|
27
|
+
'[Amplitude] Main Thread Block Attribution': attribution.map(function (a) { return a.name; }),
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
function getSupportedEntryType() {
|
|
31
|
+
/* istanbul ignore next */
|
|
32
|
+
if (typeof PerformanceObserver === 'undefined')
|
|
33
|
+
return null;
|
|
34
|
+
try {
|
|
35
|
+
var supported = PerformanceObserver.supportedEntryTypes;
|
|
36
|
+
if (supported.includes('long-animation-frame'))
|
|
37
|
+
return 'long-animation-frame';
|
|
38
|
+
if (supported.includes('longtask'))
|
|
39
|
+
return 'longtask';
|
|
40
|
+
}
|
|
41
|
+
catch (_a) {
|
|
42
|
+
// ignore
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
export function trackMainThreadBlock(_a) {
|
|
47
|
+
var amplitude = _a.amplitude, options = _a.options, _b = _a.durationThreshold, durationThreshold = _b === void 0 ? DEFAULT_DURATION_THRESHOLD : _b;
|
|
48
|
+
var entryType = getSupportedEntryType();
|
|
49
|
+
/* istanbul ignore next */
|
|
50
|
+
if (!entryType) {
|
|
51
|
+
return { unsubscribe: function () { return void 0; } };
|
|
52
|
+
}
|
|
53
|
+
var measures = [];
|
|
54
|
+
var measureObserver = new PerformanceObserver(function (list) {
|
|
55
|
+
var e_1, _a;
|
|
56
|
+
var now = performance.now();
|
|
57
|
+
try {
|
|
58
|
+
for (var _b = __values(list.getEntries()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
59
|
+
var entry = _c.value;
|
|
60
|
+
measures.push(entry);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
64
|
+
finally {
|
|
65
|
+
try {
|
|
66
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
67
|
+
}
|
|
68
|
+
finally { if (e_1) throw e_1.error; }
|
|
69
|
+
}
|
|
70
|
+
var cutoff = now - MEASURE_BUFFER_WINDOW_MS;
|
|
71
|
+
while (measures.length > 0 && measures[0].startTime < cutoff) {
|
|
72
|
+
measures.shift();
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
try {
|
|
76
|
+
measureObserver.observe({ entryTypes: ['measure'] });
|
|
77
|
+
}
|
|
78
|
+
catch (_c) {
|
|
79
|
+
// measure not supported — continue without it
|
|
80
|
+
}
|
|
81
|
+
var blockObserver = new PerformanceObserver(function (list) {
|
|
82
|
+
var e_2, _a;
|
|
83
|
+
try {
|
|
84
|
+
for (var _b = __values(list.getEntries()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
85
|
+
var entry = _c.value;
|
|
86
|
+
if (!isUrlAllowed(options)) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (entry.duration < durationThreshold) {
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
var properties = entryType === 'long-animation-frame'
|
|
93
|
+
? buildLoAFProperties(entry, measures)
|
|
94
|
+
: buildLongTaskProperties(entry, measures);
|
|
95
|
+
amplitude.track(AMPLITUDE_MAIN_THREAD_BLOCK_EVENT, properties);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
99
|
+
finally {
|
|
100
|
+
try {
|
|
101
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
102
|
+
}
|
|
103
|
+
finally { if (e_2) throw e_2.error; }
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
try {
|
|
107
|
+
blockObserver.observe({ entryTypes: [entryType] });
|
|
108
|
+
}
|
|
109
|
+
catch (_d) {
|
|
110
|
+
measureObserver.disconnect();
|
|
111
|
+
return { unsubscribe: function () { return void 0; } };
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
unsubscribe: function () {
|
|
115
|
+
blockObserver.disconnect();
|
|
116
|
+
measureObserver.disconnect();
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=track-long-task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-long-task.js","sourceRoot":"","sources":["../../../src/autocapture/track-long-task.ts"],"names":[],"mappings":"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","sourcesContent":["import { BrowserClient, ElementInteractionsOptions, PerformanceTrackingOptions } from '@amplitude/analytics-core';\nimport { AMPLITUDE_MAIN_THREAD_BLOCK_EVENT } from '../constants';\nimport { isUrlAllowed } from '../helpers';\n\nconst DEFAULT_DURATION_THRESHOLD = 100; // ms\nconst MEASURE_BUFFER_WINDOW_MS = 10_000;\n\n// LoAF and Long Task types are not yet in TypeScript's built-in DOM types\ninterface PerformanceScriptTiming extends PerformanceEntry {\n sourceURL: string;\n sourceFunctionName: string;\n invokerType: string;\n invoker: string;\n}\n\ninterface PerformanceLongAnimationFrameTiming extends PerformanceEntry {\n renderStart: number;\n styleAndLayoutStart: number;\n blockingDuration: number;\n scripts: PerformanceScriptTiming[];\n}\n\ninterface TaskAttributionTiming extends PerformanceEntry {\n name: string;\n}\n\ninterface PerformanceLongTaskTiming extends PerformanceEntry {\n attribution: TaskAttributionTiming[];\n}\n\nfunction getOverlappingMeasures(entry: PerformanceEntry, measures: PerformanceEntry[]): string[] {\n const taskEnd = entry.startTime + entry.duration;\n return measures\n .filter((measure) => measure.startTime < taskEnd && measure.startTime + measure.duration > entry.startTime)\n .map((measure) => measure.name);\n}\n\nfunction buildLoAFProperties(entry: PerformanceLongAnimationFrameTiming, measures: PerformanceEntry[]) {\n const overlappingMeasures = getOverlappingMeasures(entry, measures);\n const scripts = entry.scripts ?? [];\n\n const scriptURLs = scripts.map((s) => s.sourceURL).filter(Boolean);\n const scriptFunctions = scripts.map((s) => s.sourceFunctionName).filter(Boolean);\n const invokerTypes = scripts.map((s) => s.invokerType).filter(Boolean);\n const invokers = scripts.map((s) => s.invoker).filter(Boolean);\n\n return {\n '[Amplitude] Main Thread Block Source': 'long-animation-frame',\n '[Amplitude] Main Thread Block Duration': entry.duration,\n '[Amplitude] Main Thread Block Blocking Duration': entry.blockingDuration,\n '[Amplitude] Main Thread Block Start Time': entry.startTime,\n ...(overlappingMeasures.length > 0 && { '[Amplitude] Main Thread Block Measures': overlappingMeasures }),\n '[Amplitude] Main Thread Block Render Start': entry.renderStart,\n '[Amplitude] Main Thread Block Style And Layout Start': entry.styleAndLayoutStart,\n '[Amplitude] Main Thread Block Script Count': scripts.length,\n ...(scriptURLs.length > 0 && { '[Amplitude] Main Thread Block Script URLs': scriptURLs }),\n ...(scriptFunctions.length > 0 && { '[Amplitude] Main Thread Block Script Functions': scriptFunctions }),\n ...(invokerTypes.length > 0 && { '[Amplitude] Main Thread Block Invoker Types': invokerTypes }),\n ...(invokers.length > 0 && { '[Amplitude] Main Thread Block Invokers': invokers }),\n };\n}\n\nfunction buildLongTaskProperties(entry: PerformanceLongTaskTiming, measures: PerformanceEntry[]) {\n const overlappingMeasures = getOverlappingMeasures(entry, measures);\n const attribution = entry.attribution ?? [];\n\n return {\n '[Amplitude] Main Thread Block Source': 'long-task',\n '[Amplitude] Main Thread Block Duration': entry.duration,\n '[Amplitude] Main Thread Block Blocking Duration': entry.duration,\n '[Amplitude] Main Thread Block Start Time': entry.startTime,\n ...(overlappingMeasures.length > 0 && { '[Amplitude] Main Thread Block Measures': overlappingMeasures }),\n ...(attribution.length > 0 && {\n '[Amplitude] Main Thread Block Attribution': attribution.map((a: TaskAttributionTiming) => a.name),\n }),\n };\n}\n\nfunction getSupportedEntryType(): 'long-animation-frame' | 'longtask' | null {\n /* istanbul ignore next */\n if (typeof PerformanceObserver === 'undefined') return null;\n try {\n const supported = PerformanceObserver.supportedEntryTypes;\n if (supported.includes('long-animation-frame')) return 'long-animation-frame';\n if (supported.includes('longtask')) return 'longtask';\n } catch {\n // ignore\n }\n return null;\n}\n\nexport function trackMainThreadBlock({\n amplitude,\n options,\n durationThreshold = DEFAULT_DURATION_THRESHOLD,\n}: {\n amplitude: BrowserClient;\n options: PerformanceTrackingOptions;\n durationThreshold?: number;\n}) {\n const entryType = getSupportedEntryType();\n\n /* istanbul ignore next */\n if (!entryType) {\n return { unsubscribe: () => void 0 };\n }\n\n const measures: PerformanceEntry[] = [];\n\n const measureObserver = new PerformanceObserver((list) => {\n const now = performance.now();\n for (const entry of list.getEntries()) {\n measures.push(entry);\n }\n const cutoff = now - MEASURE_BUFFER_WINDOW_MS;\n while (measures.length > 0 && measures[0].startTime < cutoff) {\n measures.shift();\n }\n });\n\n try {\n measureObserver.observe({ entryTypes: ['measure'] });\n } catch {\n // measure not supported — continue without it\n }\n\n const blockObserver = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (!isUrlAllowed(options as ElementInteractionsOptions)) {\n return;\n }\n if (entry.duration < durationThreshold) {\n continue;\n }\n const properties =\n entryType === 'long-animation-frame'\n ? buildLoAFProperties(entry as PerformanceLongAnimationFrameTiming, measures)\n : buildLongTaskProperties(entry as PerformanceLongTaskTiming, measures);\n\n amplitude.track(AMPLITUDE_MAIN_THREAD_BLOCK_EVENT, properties);\n }\n });\n\n try {\n blockObserver.observe({ entryTypes: [entryType] });\n } catch {\n measureObserver.disconnect();\n return { unsubscribe: () => void 0 };\n }\n\n return {\n unsubscribe: () => {\n blockObserver.disconnect();\n measureObserver.disconnect();\n },\n };\n}\n"]}
|
package/lib/esm/constants.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export declare const PLUGIN_NAME = "@amplitude/plugin-autocapture-browser";
|
|
2
2
|
export declare const FRUSTRATION_PLUGIN_NAME = "@amplitude/plugin-frustration-browser";
|
|
3
|
+
export declare const PERFORMANCE_PLUGIN_NAME = "@amplitude/plugin-performance-browser";
|
|
3
4
|
export declare const AMPLITUDE_ELEMENT_CLICKED_EVENT = "[Amplitude] Element Clicked";
|
|
4
5
|
export declare const AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT = "[Amplitude] Dead Click";
|
|
5
6
|
export declare const AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT = "[Amplitude] Rage Click";
|
|
@@ -7,6 +8,7 @@ export declare const AMPLITUDE_ELEMENT_ERROR_CLICKED_EVENT = "[Amplitude] Error
|
|
|
7
8
|
export declare const AMPLITUDE_ELEMENT_CHANGED_EVENT = "[Amplitude] Element Changed";
|
|
8
9
|
export declare const AMPLITUDE_PAGE_SCROLLED_EVENT = "[Amplitude] Page Scrolled";
|
|
9
10
|
export declare const AMPLITUDE_THRASHED_CURSOR_EVENT = "[Amplitude] Thrashed Cursor";
|
|
11
|
+
export declare const AMPLITUDE_MAIN_THREAD_BLOCK_EVENT = "[Amplitude] Main Thread Block";
|
|
10
12
|
export declare const AMPLITUDE_EVENT_PROP_ELEMENT_ID = "[Amplitude] Element ID";
|
|
11
13
|
export declare const AMPLITUDE_EVENT_PROP_ELEMENT_CLASS = "[Amplitude] Element Class";
|
|
12
14
|
export declare const AMPLITUDE_EVENT_PROP_ELEMENT_TAG = "[Amplitude] Element Tag";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,0CAA0C,CAAC;AACnE,eAAO,MAAM,uBAAuB,0CAA0C,CAAC;AAE/E,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAC7E,eAAO,MAAM,oCAAoC,2BAA2B,CAAC;AAC7E,eAAO,MAAM,oCAAoC,2BAA2B,CAAC;AAC7E,eAAO,MAAM,qCAAqC,4BAA4B,CAAC;AAC/E,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAC7E,eAAO,MAAM,6BAA6B,8BAA8B,CAAC;AACzE,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,0CAA0C,CAAC;AACnE,eAAO,MAAM,uBAAuB,0CAA0C,CAAC;AAC/E,eAAO,MAAM,uBAAuB,0CAA0C,CAAC;AAE/E,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAC7E,eAAO,MAAM,oCAAoC,2BAA2B,CAAC;AAC7E,eAAO,MAAM,oCAAoC,2BAA2B,CAAC;AAC7E,eAAO,MAAM,qCAAqC,4BAA4B,CAAC;AAC/E,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAC7E,eAAO,MAAM,6BAA6B,8BAA8B,CAAC;AACzE,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAC7E,eAAO,MAAM,iCAAiC,kCAAkC,CAAC;AAEjF,eAAO,MAAM,+BAA+B,2BAA2B,CAAC;AACxE,eAAO,MAAM,kCAAkC,8BAA8B,CAAC;AAC9E,eAAO,MAAM,gCAAgC,4BAA4B,CAAC;AAC1E,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAC5E,eAAO,MAAM,sCAAsC,kCAAkC,CAAC;AACtF,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAC5E,eAAO,MAAM,0CAA0C,sCAAsC,CAAC;AAC9F,eAAO,MAAM,yCAAyC,qCAAqC,CAAC;AAC5F,eAAO,MAAM,uCAAuC,mCAAmC,CAAC;AACxF,eAAO,MAAM,uCAAuC,mCAAmC,CAAC;AACxF,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAE5E,eAAO,MAAM,yCAAyC,qCAAqC,CAAC;AAC5F,eAAO,MAAM,6BAA6B,yBAAyB,CAAC;AACpE,eAAO,MAAM,+BAA+B,2BAA2B,CAAC;AACxE,eAAO,MAAM,oCAAoC,gCAAgC,CAAC;AAClF,eAAO,MAAM,mCAAmC,+BAA+B,CAAC;AAChF,eAAO,MAAM,+BAA+B,2BAA2B,CAAC;AACxE,eAAO,MAAM,+BAA+B,2BAA2B,CAAC;AAExE,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAG5E,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,qBAAqB,EACrB,uCAAuC,GACxC,MAAM,2BAA2B,CAAC;AAEnC,eAAO,MAAM,4CAA4C,6EACmB,CAAC;AAG7E,eAAO,MAAM,wCAAwC,0CAA0C,CAAC;AAGhG,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAEnE,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAGxC,eAAO,MAAM,6BAA6B,kBAAkB,CAAC;AAE7D,eAAO,MAAM,8BAA8B,QAAS,CAAC"}
|
package/lib/esm/constants.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export var PLUGIN_NAME = '@amplitude/plugin-autocapture-browser';
|
|
2
2
|
export var FRUSTRATION_PLUGIN_NAME = '@amplitude/plugin-frustration-browser';
|
|
3
|
+
export var PERFORMANCE_PLUGIN_NAME = '@amplitude/plugin-performance-browser';
|
|
3
4
|
export var AMPLITUDE_ELEMENT_CLICKED_EVENT = '[Amplitude] Element Clicked';
|
|
4
5
|
export var AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT = '[Amplitude] Dead Click';
|
|
5
6
|
export var AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT = '[Amplitude] Rage Click';
|
|
@@ -7,6 +8,7 @@ export var AMPLITUDE_ELEMENT_ERROR_CLICKED_EVENT = '[Amplitude] Error Click';
|
|
|
7
8
|
export var AMPLITUDE_ELEMENT_CHANGED_EVENT = '[Amplitude] Element Changed';
|
|
8
9
|
export var AMPLITUDE_PAGE_SCROLLED_EVENT = '[Amplitude] Page Scrolled';
|
|
9
10
|
export var AMPLITUDE_THRASHED_CURSOR_EVENT = '[Amplitude] Thrashed Cursor';
|
|
11
|
+
export var AMPLITUDE_MAIN_THREAD_BLOCK_EVENT = '[Amplitude] Main Thread Block';
|
|
10
12
|
export var AMPLITUDE_EVENT_PROP_ELEMENT_ID = '[Amplitude] Element ID';
|
|
11
13
|
export var AMPLITUDE_EVENT_PROP_ELEMENT_CLASS = '[Amplitude] Element Class';
|
|
12
14
|
export var AMPLITUDE_EVENT_PROP_ELEMENT_TAG = '[Amplitude] Element Tag';
|