@atlaskit/react-ufo 2.4.7 → 2.5.1
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/CHANGELOG.md +23 -0
- package/dist/cjs/additional-payload/utils/lighthouse-metrics/utils/buffer/index.js +2 -4
- package/dist/cjs/common/constants.js +2 -1
- package/dist/cjs/config/index.js +18 -40
- package/dist/cjs/create-payload/common/utils/index.js +1 -85
- package/dist/cjs/create-payload/index.js +77 -37
- package/dist/cjs/interaction-metrics/common/constants.js +1 -7
- package/dist/cjs/interaction-metrics/index.js +205 -140
- package/dist/cjs/interaction-metrics/post-interaction-log.js +1 -2
- package/dist/cjs/interaction-metrics-init/index.js +9 -27
- package/dist/cjs/load-hold/UFOLoadHold.js +4 -3
- package/dist/cjs/segment/segment.js +9 -7
- package/dist/cjs/trace-pageload/index.js +1 -2
- package/dist/cjs/vc/vc-observer/index.js +50 -38
- package/dist/cjs/vc/vc-observer/observers/editor-lnv/index.js +1 -2
- package/dist/cjs/vc/vc-observer/observers/editor-lnv/test-utils.js +1 -2
- package/dist/cjs/vc/vc-observer/observers/index.js +1 -2
- package/dist/cjs/vc/vc-observer/observers/ssr-placeholders/index.js +1 -2
- package/dist/es2019/common/constants.js +3 -1
- package/dist/es2019/config/index.js +0 -22
- package/dist/es2019/create-payload/common/utils/index.js +1 -86
- package/dist/es2019/create-payload/index.js +74 -28
- package/dist/es2019/interaction-metrics/common/constants.js +0 -6
- package/dist/es2019/interaction-metrics/index.js +130 -93
- package/dist/es2019/interaction-metrics-init/index.js +8 -21
- package/dist/es2019/load-hold/UFOLoadHold.js +4 -3
- package/dist/es2019/segment/segment.js +12 -6
- package/dist/es2019/trace-pageload/index.js +1 -1
- package/dist/es2019/vc/vc-observer/index.js +17 -5
- package/dist/esm/additional-payload/utils/lighthouse-metrics/utils/buffer/index.js +2 -4
- package/dist/esm/common/constants.js +3 -1
- package/dist/esm/config/index.js +18 -39
- package/dist/esm/create-payload/common/utils/index.js +1 -80
- package/dist/esm/create-payload/index.js +75 -33
- package/dist/esm/interaction-metrics/common/constants.js +0 -6
- package/dist/esm/interaction-metrics/index.js +157 -88
- package/dist/esm/interaction-metrics/post-interaction-log.js +1 -2
- package/dist/esm/interaction-metrics-init/index.js +10 -24
- package/dist/esm/load-hold/UFOLoadHold.js +4 -3
- package/dist/esm/segment/segment.js +9 -7
- package/dist/esm/trace-pageload/index.js +1 -1
- package/dist/esm/vc/vc-observer/index.js +50 -38
- package/dist/esm/vc/vc-observer/observers/editor-lnv/index.js +1 -2
- package/dist/esm/vc/vc-observer/observers/editor-lnv/test-utils.js +1 -2
- package/dist/esm/vc/vc-observer/observers/index.js +1 -2
- package/dist/esm/vc/vc-observer/observers/ssr-placeholders/index.js +1 -2
- package/dist/types/common/common/types.d.ts +4 -6
- package/dist/types/config/index.d.ts +0 -6
- package/dist/types/create-payload/common/utils/index.d.ts +0 -12
- package/dist/types/create-payload/index.d.ts +5660 -13
- package/dist/types/interaction-metrics/common/constants.d.ts +1 -31
- package/dist/types/interaction-metrics/index.d.ts +15 -4
- package/dist/types/load-hold/UFOLoadHold.d.ts +2 -1
- package/dist/types/trace-pageload/index.d.ts +0 -1
- package/dist/types/vc/vc-observer/index.d.ts +1 -1
- package/dist/types-ts4.5/common/common/types.d.ts +4 -6
- package/dist/types-ts4.5/config/index.d.ts +0 -6
- package/dist/types-ts4.5/create-payload/common/utils/index.d.ts +0 -12
- package/dist/types-ts4.5/create-payload/index.d.ts +5660 -13
- package/dist/types-ts4.5/interaction-metrics/common/constants.d.ts +1 -31
- package/dist/types-ts4.5/interaction-metrics/index.d.ts +15 -4
- package/dist/types-ts4.5/load-hold/UFOLoadHold.d.ts +2 -1
- package/dist/types-ts4.5/trace-pageload/index.d.ts +0 -1
- package/dist/types-ts4.5/vc/vc-observer/index.d.ts +1 -1
- package/package.json +6 -5
- package/create-experimental-interaction-metrics-payload/package.json +0 -15
- package/dist/cjs/create-experimental-interaction-metrics-payload/index.js +0 -89
- package/dist/cjs/interaction-metrics/common/index.js +0 -151
- package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +0 -67
- package/dist/es2019/interaction-metrics/common/index.js +0 -103
- package/dist/esm/create-experimental-interaction-metrics-payload/index.js +0 -81
- package/dist/esm/interaction-metrics/common/index.js +0 -132
- package/dist/types/create-experimental-interaction-metrics-payload/index.d.ts +0 -31
- package/dist/types/interaction-metrics/common/index.d.ts +0 -16
- package/dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts +0 -31
- package/dist/types-ts4.5/interaction-metrics/common/index.d.ts +0 -16
|
@@ -1,33 +1,3 @@
|
|
|
1
|
-
import type { InteractionMetrics
|
|
2
|
-
import type { FeatureFlagValue } from '../../feature-flags-accessed';
|
|
1
|
+
import type { InteractionMetrics } from '../../common';
|
|
3
2
|
declare const interactions: Map<string, InteractionMetrics>;
|
|
4
|
-
export declare const CLEANUP_TIMEOUT: number;
|
|
5
|
-
export declare const CLEANUP_TIMEOUT_AFTER_APDEX: number;
|
|
6
|
-
export type SegmentObserver = {
|
|
7
|
-
onAdd: (segment: SegmentInfo) => void;
|
|
8
|
-
onRemove: (segment: SegmentInfo) => void;
|
|
9
|
-
};
|
|
10
|
-
export declare const interactionQueue: {
|
|
11
|
-
id: string;
|
|
12
|
-
data: InteractionMetrics;
|
|
13
|
-
}[];
|
|
14
|
-
export declare const segmentCache: Map<string, SegmentInfo>;
|
|
15
|
-
export declare const segmentObservers: SegmentObserver[];
|
|
16
|
-
export declare const moduleLoadingRequests: Record<string, {
|
|
17
|
-
start: number;
|
|
18
|
-
timeoutId: ReturnType<typeof setTimeout> | number | undefined;
|
|
19
|
-
}>;
|
|
20
|
-
declare global {
|
|
21
|
-
interface Window {
|
|
22
|
-
__REACT_UFO_ENABLE_PERF_TRACING?: boolean;
|
|
23
|
-
__UFO_COMPACT_PAYLOAD__?: boolean;
|
|
24
|
-
__CRITERION__?: {
|
|
25
|
-
addFeatureFlagAccessed?: (flagName: string, flagValue: FeatureFlagValue) => void;
|
|
26
|
-
addUFOHold?: (id: string, name: string, labelStack: string, startTime: number) => void;
|
|
27
|
-
removeUFOHold?: (id: string) => void;
|
|
28
|
-
getFeatureFlagOverride?: (flagName: string) => boolean | undefined;
|
|
29
|
-
getExperimentValueOverride?: <T>(experimentName: string, parameterName: string) => T;
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
3
|
export default interactions;
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import type { AbortReasonType, ApdexType, BM3Event, CustomData, CustomTiming, InteractionError, InteractionMetrics, InteractionType, LifecycleMarkType, LoadProfilerEventInfo, Mark, MarkType, PostInteractionLogOutput, ReactProfilerTiming, RequestInfo, Span, SpanType } from '../common';
|
|
2
|
-
import { ExperimentalInteractionMetrics } from '../create-experimental-interaction-metrics-payload';
|
|
3
2
|
import { type TraceIdContext } from '../experience-trace-id-context';
|
|
3
|
+
import { type FeatureFlagValue } from '../feature-flags-accessed';
|
|
4
4
|
import type { LabelStack } from '../interaction-context';
|
|
5
5
|
import PostInteractionLog from './post-interaction-log';
|
|
6
6
|
export type { InteractionMetrics, LifecycleMarkType, Span, Mark, MarkType, InteractionType, AbortReasonType, ReactProfilerTiming, RequestInfo, ApdexType, CustomData, CustomTiming, InteractionError, };
|
|
7
7
|
export declare const postInteractionLog: PostInteractionLog;
|
|
8
|
-
export declare const experimentalInteractionLog: ExperimentalInteractionMetrics;
|
|
9
8
|
export declare function getActiveInteraction(): InteractionMetrics | undefined;
|
|
10
9
|
export declare function remove(interactionId: string): void;
|
|
11
10
|
export declare function updatePageLoadInteractionName(ufoName: string, routeName?: string | null | undefined): void;
|
|
@@ -19,7 +18,7 @@ export declare function addSpanToAll(type: SpanType, name: string, labelStack: L
|
|
|
19
18
|
export declare function addPreload(moduleId: string, timestamp: number): void;
|
|
20
19
|
export declare function addLoad(identifier: string, start: number, end: number): void;
|
|
21
20
|
export declare function extractModuleName(input: string): string;
|
|
22
|
-
export declare function addHold(interactionId: string, labelStack: LabelStack, name: string
|
|
21
|
+
export declare function addHold(interactionId: string, labelStack: LabelStack, name: string): () => void;
|
|
23
22
|
export declare function addHoldByID(interactionId: string, labelStack: LabelStack, name: string, id: string, ignoreOnSubmit?: boolean): () => void;
|
|
24
23
|
export declare function removeHoldByID(interactionId: string, id: string): void;
|
|
25
24
|
export declare function getCurrentInteractionType(interactionId: string): InteractionType | null;
|
|
@@ -34,7 +33,6 @@ export declare function addError(interactionId: string, name: string, labelStack
|
|
|
34
33
|
export declare function addErrorToAll(name: string, labelStack: LabelStack | null, errorType: string, errorMessage: string, errorStack?: string): void;
|
|
35
34
|
export declare const addProfilerTimings: (interactionId: string, labelStack: LabelStack, type: 'mount' | 'update' | 'nested-update', actualDuration: number, baseDuration: number, startTime: number, commitTime: number) => void;
|
|
36
35
|
export declare const sinkInteractionHandler: (sinkFn: (id: string, data: InteractionMetrics) => void) => void;
|
|
37
|
-
export declare const sinkExperimentalHandler: (sinkFn: (interactionId: string, interaction: InteractionMetrics) => void | Promise<void>) => void;
|
|
38
36
|
export declare const sinkPostInteractionLogHandler: (sinkFn: (output: PostInteractionLogOutput) => void | Promise<void>) => void;
|
|
39
37
|
export declare function tryComplete(interactionId: string, endTime?: number): void;
|
|
40
38
|
export declare function abort(interactionId: string, abortReason: AbortReasonType): void;
|
|
@@ -54,5 +52,18 @@ export declare function addRequestInfo(interactionId: string, labelStack: LabelS
|
|
|
54
52
|
export declare function addSegment(labelStack: LabelStack): void;
|
|
55
53
|
export declare function removeSegment(labelStack: LabelStack): void;
|
|
56
54
|
export declare function addRedirect(interactionId: string, fromUfoName: string, nextUfoName: string, nextRouteName: string, time: number): void;
|
|
55
|
+
declare global {
|
|
56
|
+
interface Window {
|
|
57
|
+
__REACT_UFO_ENABLE_PERF_TRACING?: boolean;
|
|
58
|
+
__UFO_COMPACT_PAYLOAD__?: boolean;
|
|
59
|
+
__CRITERION__?: {
|
|
60
|
+
addFeatureFlagAccessed?: (flagName: string, flagValue: FeatureFlagValue) => void;
|
|
61
|
+
addUFOHold?: (id: string, name: string, labelStack: string, startTime: number) => void;
|
|
62
|
+
removeUFOHold?: (id: string) => void;
|
|
63
|
+
getFeatureFlagOverride?: (flagName: string) => boolean | undefined;
|
|
64
|
+
getExperimentValueOverride?: <T>(experimentName: string, parameterName: string) => T;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
57
68
|
export declare const interactionSpans: Span[];
|
|
58
69
|
export declare function addCustomSpans(name: string, start: number, end?: number, size?: number, labelStack?: LabelStack): void;
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
export declare const AWAITING_PAGELOAD_NAME = "awaiting_pageload_name";
|
|
2
1
|
export default function traceUFOPageLoad(ufoName?: string | null | undefined, routeName?: string | null | undefined): void;
|
|
3
2
|
export declare function updatePageloadName(ufoName: string, routeName?: string | null | undefined): void;
|
|
@@ -48,7 +48,7 @@ export declare class VCObserver {
|
|
|
48
48
|
}): void;
|
|
49
49
|
stop(): void;
|
|
50
50
|
getAbortReasonInfo: () => string | null;
|
|
51
|
-
getVCRawData: () => VCRawDataType | null;
|
|
51
|
+
getVCRawData: (stopTime?: number) => VCRawDataType | null;
|
|
52
52
|
getIgnoredElements(componentsLog: ComponentsLogType): {
|
|
53
53
|
targetName: string;
|
|
54
54
|
ignoreReason: VCIgnoreReason | undefined;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/react-ufo",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.1",
|
|
4
4
|
"description": "Parts of React UFO that are publicly available",
|
|
5
5
|
"author": "Atlassian Pty Ltd",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -32,7 +32,6 @@
|
|
|
32
32
|
"./coinflip": "./src/coinflip/index.ts",
|
|
33
33
|
"./common": "./src/common/index.ts",
|
|
34
34
|
"./config": "./src/config/index.ts",
|
|
35
|
-
"./create-experimental-interaction-metrics-payload": "./src/create-experimental-interaction-metrics-payload/index.ts",
|
|
36
35
|
"./create-payload": "./src/create-payload/index.ts",
|
|
37
36
|
"./create-post-interaction-log-payload": "./src/create-post-interaction-log-payload/index.ts",
|
|
38
37
|
"./custom-data": "./src/custom-data/index.ts",
|
|
@@ -74,7 +73,7 @@
|
|
|
74
73
|
".": "./src/index.ts"
|
|
75
74
|
},
|
|
76
75
|
"dependencies": {
|
|
77
|
-
"@atlaskit/interaction-context": "^2.
|
|
76
|
+
"@atlaskit/interaction-context": "^2.2.0",
|
|
78
77
|
"@atlaskit/platform-feature-flags": "^0.3.0",
|
|
79
78
|
"@babel/runtime": "^7.0.0",
|
|
80
79
|
"bind-event-listener": "^3.0.0",
|
|
@@ -86,7 +85,6 @@
|
|
|
86
85
|
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
|
|
87
86
|
},
|
|
88
87
|
"devDependencies": {
|
|
89
|
-
"@atlassian/a11y-jest-testing": "*",
|
|
90
88
|
"@testing-library/react": "^12.1.5"
|
|
91
89
|
},
|
|
92
90
|
"techstack": {
|
|
@@ -137,11 +135,14 @@
|
|
|
137
135
|
"platform-ufo-vc-observe-attributes": {
|
|
138
136
|
"type": "boolean"
|
|
139
137
|
},
|
|
140
|
-
"react-ufo-payload-segment-compressed": {
|
|
138
|
+
"enable-react-ufo-payload-segment-compressed": {
|
|
141
139
|
"type": "boolean"
|
|
142
140
|
},
|
|
143
141
|
"ufo_capture_stylesheet_metrics": {
|
|
144
142
|
"type": "boolean"
|
|
143
|
+
},
|
|
144
|
+
"ufo-remove-vc-component-observations-after-ttai": {
|
|
145
|
+
"type": "boolean"
|
|
145
146
|
}
|
|
146
147
|
}
|
|
147
148
|
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@atlaskit/react-ufo/create-experimental-interaction-metrics-payload",
|
|
3
|
-
"main": "../dist/cjs/create-experimental-interaction-metrics-payload/index.js",
|
|
4
|
-
"module": "../dist/esm/create-experimental-interaction-metrics-payload/index.js",
|
|
5
|
-
"module:es2019": "../dist/es2019/create-experimental-interaction-metrics-payload/index.js",
|
|
6
|
-
"sideEffects": false,
|
|
7
|
-
"types": "../dist/types/create-experimental-interaction-metrics-payload/index.d.ts",
|
|
8
|
-
"typesVersions": {
|
|
9
|
-
">=4.5 <5.4": {
|
|
10
|
-
"*": [
|
|
11
|
-
"../dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts"
|
|
12
|
-
]
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.ExperimentalInteractionMetrics = void 0;
|
|
8
|
-
exports.createExperimentalInteractionMetricsPayload = createExperimentalInteractionMetricsPayload;
|
|
9
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
10
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
11
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
|
-
var _coinflip = _interopRequireDefault(require("../coinflip"));
|
|
13
|
-
var _config = require("../config");
|
|
14
|
-
var _createPayload = require("../create-payload");
|
|
15
|
-
var _hiddenTiming = require("../hidden-timing");
|
|
16
|
-
var _vcObserver = require("../vc/vc-observer");
|
|
17
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
18
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
19
|
-
var ExperimentalInteractionMetrics = exports.ExperimentalInteractionMetrics = /*#__PURE__*/function () {
|
|
20
|
-
function ExperimentalInteractionMetrics() {
|
|
21
|
-
(0, _classCallCheck2.default)(this, ExperimentalInteractionMetrics);
|
|
22
|
-
/**
|
|
23
|
-
* Handler function to process / send the observation data
|
|
24
|
-
*/
|
|
25
|
-
(0, _defineProperty2.default)(this, "sinkHandlerFn", function () {});
|
|
26
|
-
/**
|
|
27
|
-
* independent VC observer that observes until `custom.post-interaction-logs` event is sent
|
|
28
|
-
*/
|
|
29
|
-
(0, _defineProperty2.default)(this, "vcObserver", null);
|
|
30
|
-
}
|
|
31
|
-
(0, _createClass2.default)(ExperimentalInteractionMetrics, [{
|
|
32
|
-
key: "sinkHandler",
|
|
33
|
-
value:
|
|
34
|
-
/**
|
|
35
|
-
* Set the fn that would be invoked to process / send the observation data
|
|
36
|
-
*/
|
|
37
|
-
function sinkHandler(sinkHandlerFn) {
|
|
38
|
-
this.sinkHandlerFn = sinkHandlerFn;
|
|
39
|
-
}
|
|
40
|
-
}, {
|
|
41
|
-
key: "onInteractionComplete",
|
|
42
|
-
value: function onInteractionComplete(interactionId, data) {
|
|
43
|
-
var endTime = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : performance.now();
|
|
44
|
-
if (data.ufoName) {
|
|
45
|
-
data.end = endTime;
|
|
46
|
-
this.sinkHandlerFn(interactionId, data);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}, {
|
|
50
|
-
key: "initializeVCObserver",
|
|
51
|
-
value: function initializeVCObserver(options) {
|
|
52
|
-
if (this.vcObserver === null) {
|
|
53
|
-
this.vcObserver = new _vcObserver.VCObserver(_objectSpread(_objectSpread({}, options), {}, {
|
|
54
|
-
isPostInteraction: true
|
|
55
|
-
}));
|
|
56
|
-
}
|
|
57
|
-
return this;
|
|
58
|
-
}
|
|
59
|
-
}, {
|
|
60
|
-
key: "startVCObserver",
|
|
61
|
-
value: function startVCObserver(_ref) {
|
|
62
|
-
var _this$vcObserver;
|
|
63
|
-
var startTime = _ref.startTime;
|
|
64
|
-
(_this$vcObserver = this.vcObserver) === null || _this$vcObserver === void 0 || _this$vcObserver.start({
|
|
65
|
-
startTime: startTime
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
}]);
|
|
69
|
-
return ExperimentalInteractionMetrics;
|
|
70
|
-
}();
|
|
71
|
-
function createExperimentalInteractionMetricsPayload(interactionId, interaction) {
|
|
72
|
-
var config = (0, _config.getConfig)();
|
|
73
|
-
if (!config) {
|
|
74
|
-
throw Error('UFO Configuration not provided');
|
|
75
|
-
}
|
|
76
|
-
var ufoName = (0, _createPayload.getUfoNameOverride)(interaction);
|
|
77
|
-
var modifiedInteraction = _objectSpread(_objectSpread({}, interaction), {}, {
|
|
78
|
-
ufoName: ufoName
|
|
79
|
-
});
|
|
80
|
-
var rate = (0, _config.getExperimentalInteractionRate)(ufoName, interaction.type);
|
|
81
|
-
if (!(0, _coinflip.default)(rate)) {
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
var pageVisibilityState = (0, _hiddenTiming.getPageVisibilityState)(interaction.start, interaction.end);
|
|
85
|
-
if (pageVisibilityState !== 'visible') {
|
|
86
|
-
return null;
|
|
87
|
-
}
|
|
88
|
-
return (0, _createPayload.createInteractionMetricsPayload)(modifiedInteraction, interactionId, true);
|
|
89
|
-
}
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.addHoldCriterion = addHoldCriterion;
|
|
8
|
-
exports.addSegmentObserver = addSegmentObserver;
|
|
9
|
-
exports.callCancelCallbacks = callCancelCallbacks;
|
|
10
|
-
exports.callCleanUpCallbacks = callCleanUpCallbacks;
|
|
11
|
-
exports.getSegmentCacheKey = getSegmentCacheKey;
|
|
12
|
-
exports.isPerformanceTracingEnabled = isPerformanceTracingEnabled;
|
|
13
|
-
exports.isSegmentLabel = isSegmentLabel;
|
|
14
|
-
exports.labelStackToIdString = labelStackToIdString;
|
|
15
|
-
exports.labelStackToString = labelStackToString;
|
|
16
|
-
exports.pushToQueue = void 0;
|
|
17
|
-
exports.reactProfilerTimingMap = reactProfilerTimingMap;
|
|
18
|
-
exports.removeHoldCriterion = removeHoldCriterion;
|
|
19
|
-
exports.removeSegmentObserver = removeSegmentObserver;
|
|
20
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
21
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
22
|
-
var _config = require("../../config");
|
|
23
|
-
var _constants = require("./constants");
|
|
24
|
-
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
|
|
25
|
-
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
26
|
-
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
27
|
-
function isPerformanceTracingEnabled() {
|
|
28
|
-
var _getConfig;
|
|
29
|
-
return ((_getConfig = (0, _config.getConfig)()) === null || _getConfig === void 0 ? void 0 : _getConfig.enableAdditionalPerformanceMarks) || window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production';
|
|
30
|
-
}
|
|
31
|
-
function labelStackToString(labelStack, name) {
|
|
32
|
-
var _stack$map;
|
|
33
|
-
var stack = (0, _toConsumableArray2.default)(labelStack !== null && labelStack !== void 0 ? labelStack : []);
|
|
34
|
-
if (name) {
|
|
35
|
-
stack.push({
|
|
36
|
-
name: name
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
return (_stack$map = stack.map(function (l) {
|
|
40
|
-
return l.name;
|
|
41
|
-
})) === null || _stack$map === void 0 ? void 0 : _stack$map.join('/');
|
|
42
|
-
}
|
|
43
|
-
function labelStackToIdString(labelStack) {
|
|
44
|
-
var _labelStack$map;
|
|
45
|
-
return labelStack === null || labelStack === void 0 || (_labelStack$map = labelStack.map(function (l) {
|
|
46
|
-
return 'segmentId' in l ? "".concat(l.name, ":").concat(l.segmentId) : "".concat(l.name);
|
|
47
|
-
})) === null || _labelStack$map === void 0 ? void 0 : _labelStack$map.join('/');
|
|
48
|
-
}
|
|
49
|
-
function addSegmentObserver(observer) {
|
|
50
|
-
_constants.segmentObservers.push(observer);
|
|
51
|
-
var _iterator = _createForOfIteratorHelper(_constants.segmentCache.values()),
|
|
52
|
-
_step;
|
|
53
|
-
try {
|
|
54
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
55
|
-
var segmentInfo = _step.value;
|
|
56
|
-
observer.onAdd(segmentInfo);
|
|
57
|
-
}
|
|
58
|
-
} catch (err) {
|
|
59
|
-
_iterator.e(err);
|
|
60
|
-
} finally {
|
|
61
|
-
_iterator.f();
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
function removeSegmentObserver(observer) {
|
|
65
|
-
var index = _constants.segmentObservers.findIndex(function (obs) {
|
|
66
|
-
return obs === observer;
|
|
67
|
-
});
|
|
68
|
-
if (index !== -1) {
|
|
69
|
-
_constants.segmentObservers.splice(index, 1);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
function addHoldCriterion(id, labelStack, name, startTime) {
|
|
73
|
-
var _window$__CRITERION__;
|
|
74
|
-
if (!((_window$__CRITERION__ = window.__CRITERION__) !== null && _window$__CRITERION__ !== void 0 && _window$__CRITERION__.addUFOHold)) {
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
window.__CRITERION__.addUFOHold(id, labelStackToString(labelStack), name, startTime);
|
|
78
|
-
}
|
|
79
|
-
function removeHoldCriterion(id) {
|
|
80
|
-
var _window$__CRITERION__2;
|
|
81
|
-
if (!((_window$__CRITERION__2 = window.__CRITERION__) !== null && _window$__CRITERION__2 !== void 0 && _window$__CRITERION__2.removeUFOHold)) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
window.__CRITERION__.removeUFOHold(id);
|
|
85
|
-
}
|
|
86
|
-
var pushToQueue = exports.pushToQueue = function pushToQueue(id, data) {
|
|
87
|
-
_constants.interactionQueue.push({
|
|
88
|
-
id: id,
|
|
89
|
-
data: data
|
|
90
|
-
});
|
|
91
|
-
};
|
|
92
|
-
function callCleanUpCallbacks(interaction) {
|
|
93
|
-
interaction.cleanupCallbacks.reverse().forEach(function (cleanUpCallback) {
|
|
94
|
-
cleanUpCallback();
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
function reactProfilerTimingMap(data) {
|
|
98
|
-
var profilerTimingMap = new Map();
|
|
99
|
-
data.reactProfilerTimings.forEach(function (profilerTiming) {
|
|
100
|
-
var labelStackId = labelStackToIdString(profilerTiming.labelStack);
|
|
101
|
-
if (labelStackId) {
|
|
102
|
-
var _profilerTimingMap$ge, _timing$start, _timing$end;
|
|
103
|
-
var timing = (_profilerTimingMap$ge = profilerTimingMap.get(labelStackId)) !== null && _profilerTimingMap$ge !== void 0 ? _profilerTimingMap$ge : {
|
|
104
|
-
labelStack: profilerTiming.labelStack
|
|
105
|
-
};
|
|
106
|
-
timing.start = profilerTiming.startTime < ((_timing$start = timing.start) !== null && _timing$start !== void 0 ? _timing$start : Number.MAX_SAFE_INTEGER) ? profilerTiming.startTime : timing.start;
|
|
107
|
-
timing.end = profilerTiming.commitTime > ((_timing$end = timing.end) !== null && _timing$end !== void 0 ? _timing$end : Number.MIN_SAFE_INTEGER) ? profilerTiming.commitTime : timing.end;
|
|
108
|
-
profilerTimingMap.set(labelStackId, timing);
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
try {
|
|
112
|
-
// for Firefox 102 and older
|
|
113
|
-
var _iterator2 = _createForOfIteratorHelper(profilerTimingMap.entries()),
|
|
114
|
-
_step2;
|
|
115
|
-
try {
|
|
116
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
117
|
-
var _step2$value = (0, _slicedToArray2.default)(_step2.value, 2),
|
|
118
|
-
_step2$value$ = _step2$value[1],
|
|
119
|
-
labelStack = _step2$value$.labelStack,
|
|
120
|
-
start = _step2$value$.start,
|
|
121
|
-
end = _step2$value$.end;
|
|
122
|
-
performance.measure("\uD83D\uDEF8 ".concat(labelStackToString(labelStack), " [segment_ttai]"), {
|
|
123
|
-
start: start,
|
|
124
|
-
end: end
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
} catch (err) {
|
|
128
|
-
_iterator2.e(err);
|
|
129
|
-
} finally {
|
|
130
|
-
_iterator2.f();
|
|
131
|
-
}
|
|
132
|
-
} catch (e) {
|
|
133
|
-
// do nothing
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
function callCancelCallbacks(interaction) {
|
|
137
|
-
interaction.cancelCallbacks.reverse().forEach(function (cancelCallback) {
|
|
138
|
-
cancelCallback();
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
function isSegmentLabel(obj) {
|
|
142
|
-
return obj && typeof obj.name === 'string' && typeof obj.segmentId === 'string';
|
|
143
|
-
}
|
|
144
|
-
function getSegmentCacheKey(labelStack) {
|
|
145
|
-
return labelStack.map(function (l) {
|
|
146
|
-
if (isSegmentLabel(l)) {
|
|
147
|
-
return "".concat(l.name, "_").concat(l.segmentId);
|
|
148
|
-
}
|
|
149
|
-
return l.name;
|
|
150
|
-
}).join('|');
|
|
151
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
-
import coinflip from '../coinflip';
|
|
3
|
-
import { getConfig, getExperimentalInteractionRate } from '../config';
|
|
4
|
-
import { createInteractionMetricsPayload, getUfoNameOverride } from '../create-payload';
|
|
5
|
-
import { getPageVisibilityState } from '../hidden-timing';
|
|
6
|
-
import { VCObserver } from '../vc/vc-observer';
|
|
7
|
-
export class ExperimentalInteractionMetrics {
|
|
8
|
-
constructor() {
|
|
9
|
-
/**
|
|
10
|
-
* Handler function to process / send the observation data
|
|
11
|
-
*/
|
|
12
|
-
_defineProperty(this, "sinkHandlerFn", () => {});
|
|
13
|
-
/**
|
|
14
|
-
* independent VC observer that observes until `custom.post-interaction-logs` event is sent
|
|
15
|
-
*/
|
|
16
|
-
_defineProperty(this, "vcObserver", null);
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Set the fn that would be invoked to process / send the observation data
|
|
20
|
-
*/
|
|
21
|
-
sinkHandler(sinkHandlerFn) {
|
|
22
|
-
this.sinkHandlerFn = sinkHandlerFn;
|
|
23
|
-
}
|
|
24
|
-
onInteractionComplete(interactionId, data, endTime = performance.now()) {
|
|
25
|
-
if (data.ufoName) {
|
|
26
|
-
data.end = endTime;
|
|
27
|
-
this.sinkHandlerFn(interactionId, data);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
initializeVCObserver(options) {
|
|
31
|
-
if (this.vcObserver === null) {
|
|
32
|
-
this.vcObserver = new VCObserver({
|
|
33
|
-
...options,
|
|
34
|
-
isPostInteraction: true
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
return this;
|
|
38
|
-
}
|
|
39
|
-
startVCObserver({
|
|
40
|
-
startTime
|
|
41
|
-
}) {
|
|
42
|
-
var _this$vcObserver;
|
|
43
|
-
(_this$vcObserver = this.vcObserver) === null || _this$vcObserver === void 0 ? void 0 : _this$vcObserver.start({
|
|
44
|
-
startTime
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
export function createExperimentalInteractionMetricsPayload(interactionId, interaction) {
|
|
49
|
-
const config = getConfig();
|
|
50
|
-
if (!config) {
|
|
51
|
-
throw Error('UFO Configuration not provided');
|
|
52
|
-
}
|
|
53
|
-
const ufoName = getUfoNameOverride(interaction);
|
|
54
|
-
const modifiedInteraction = {
|
|
55
|
-
...interaction,
|
|
56
|
-
ufoName
|
|
57
|
-
};
|
|
58
|
-
const rate = getExperimentalInteractionRate(ufoName, interaction.type);
|
|
59
|
-
if (!coinflip(rate)) {
|
|
60
|
-
return null;
|
|
61
|
-
}
|
|
62
|
-
const pageVisibilityState = getPageVisibilityState(interaction.start, interaction.end);
|
|
63
|
-
if (pageVisibilityState !== 'visible') {
|
|
64
|
-
return null;
|
|
65
|
-
}
|
|
66
|
-
return createInteractionMetricsPayload(modifiedInteraction, interactionId, true);
|
|
67
|
-
}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { getConfig } from '../../config';
|
|
2
|
-
import { interactionQueue, segmentCache, segmentObservers } from './constants';
|
|
3
|
-
export function isPerformanceTracingEnabled() {
|
|
4
|
-
var _getConfig;
|
|
5
|
-
return ((_getConfig = getConfig()) === null || _getConfig === void 0 ? void 0 : _getConfig.enableAdditionalPerformanceMarks) || window.__REACT_UFO_ENABLE_PERF_TRACING || process.env.NODE_ENV !== 'production';
|
|
6
|
-
}
|
|
7
|
-
export function labelStackToString(labelStack, name) {
|
|
8
|
-
var _stack$map;
|
|
9
|
-
const stack = [...(labelStack !== null && labelStack !== void 0 ? labelStack : [])];
|
|
10
|
-
if (name) {
|
|
11
|
-
stack.push({
|
|
12
|
-
name
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
return (_stack$map = stack.map(l => l.name)) === null || _stack$map === void 0 ? void 0 : _stack$map.join('/');
|
|
16
|
-
}
|
|
17
|
-
export function labelStackToIdString(labelStack) {
|
|
18
|
-
var _labelStack$map;
|
|
19
|
-
return labelStack === null || labelStack === void 0 ? void 0 : (_labelStack$map = labelStack.map(l => 'segmentId' in l ? `${l.name}:${l.segmentId}` : `${l.name}`)) === null || _labelStack$map === void 0 ? void 0 : _labelStack$map.join('/');
|
|
20
|
-
}
|
|
21
|
-
export function addSegmentObserver(observer) {
|
|
22
|
-
segmentObservers.push(observer);
|
|
23
|
-
for (const segmentInfo of segmentCache.values()) {
|
|
24
|
-
observer.onAdd(segmentInfo);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
export function removeSegmentObserver(observer) {
|
|
28
|
-
const index = segmentObservers.findIndex(obs => obs === observer);
|
|
29
|
-
if (index !== -1) {
|
|
30
|
-
segmentObservers.splice(index, 1);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
export function addHoldCriterion(id, labelStack, name, startTime) {
|
|
34
|
-
var _window$__CRITERION__;
|
|
35
|
-
if (!((_window$__CRITERION__ = window.__CRITERION__) !== null && _window$__CRITERION__ !== void 0 && _window$__CRITERION__.addUFOHold)) {
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
window.__CRITERION__.addUFOHold(id, labelStackToString(labelStack), name, startTime);
|
|
39
|
-
}
|
|
40
|
-
export function removeHoldCriterion(id) {
|
|
41
|
-
var _window$__CRITERION__2;
|
|
42
|
-
if (!((_window$__CRITERION__2 = window.__CRITERION__) !== null && _window$__CRITERION__2 !== void 0 && _window$__CRITERION__2.removeUFOHold)) {
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
window.__CRITERION__.removeUFOHold(id);
|
|
46
|
-
}
|
|
47
|
-
export const pushToQueue = (id, data) => {
|
|
48
|
-
interactionQueue.push({
|
|
49
|
-
id,
|
|
50
|
-
data
|
|
51
|
-
});
|
|
52
|
-
};
|
|
53
|
-
export function callCleanUpCallbacks(interaction) {
|
|
54
|
-
interaction.cleanupCallbacks.reverse().forEach(cleanUpCallback => {
|
|
55
|
-
cleanUpCallback();
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
export function reactProfilerTimingMap(data) {
|
|
59
|
-
const profilerTimingMap = new Map();
|
|
60
|
-
data.reactProfilerTimings.forEach(profilerTiming => {
|
|
61
|
-
const labelStackId = labelStackToIdString(profilerTiming.labelStack);
|
|
62
|
-
if (labelStackId) {
|
|
63
|
-
var _profilerTimingMap$ge, _timing$start, _timing$end;
|
|
64
|
-
const timing = (_profilerTimingMap$ge = profilerTimingMap.get(labelStackId)) !== null && _profilerTimingMap$ge !== void 0 ? _profilerTimingMap$ge : {
|
|
65
|
-
labelStack: profilerTiming.labelStack
|
|
66
|
-
};
|
|
67
|
-
timing.start = profilerTiming.startTime < ((_timing$start = timing.start) !== null && _timing$start !== void 0 ? _timing$start : Number.MAX_SAFE_INTEGER) ? profilerTiming.startTime : timing.start;
|
|
68
|
-
timing.end = profilerTiming.commitTime > ((_timing$end = timing.end) !== null && _timing$end !== void 0 ? _timing$end : Number.MIN_SAFE_INTEGER) ? profilerTiming.commitTime : timing.end;
|
|
69
|
-
profilerTimingMap.set(labelStackId, timing);
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
try {
|
|
73
|
-
// for Firefox 102 and older
|
|
74
|
-
for (const [, {
|
|
75
|
-
labelStack,
|
|
76
|
-
start,
|
|
77
|
-
end
|
|
78
|
-
}] of profilerTimingMap.entries()) {
|
|
79
|
-
performance.measure(`🛸 ${labelStackToString(labelStack)} [segment_ttai]`, {
|
|
80
|
-
start,
|
|
81
|
-
end
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
} catch (e) {
|
|
85
|
-
// do nothing
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
export function callCancelCallbacks(interaction) {
|
|
89
|
-
interaction.cancelCallbacks.reverse().forEach(cancelCallback => {
|
|
90
|
-
cancelCallback();
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
export function isSegmentLabel(obj) {
|
|
94
|
-
return obj && typeof obj.name === 'string' && typeof obj.segmentId === 'string';
|
|
95
|
-
}
|
|
96
|
-
export function getSegmentCacheKey(labelStack) {
|
|
97
|
-
return labelStack.map(l => {
|
|
98
|
-
if (isSegmentLabel(l)) {
|
|
99
|
-
return `${l.name}_${l.segmentId}`;
|
|
100
|
-
}
|
|
101
|
-
return l.name;
|
|
102
|
-
}).join('|');
|
|
103
|
-
}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
2
|
-
import _createClass from "@babel/runtime/helpers/createClass";
|
|
3
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
4
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
5
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
6
|
-
import coinflip from '../coinflip';
|
|
7
|
-
import { getConfig, getExperimentalInteractionRate } from '../config';
|
|
8
|
-
import { createInteractionMetricsPayload, getUfoNameOverride } from '../create-payload';
|
|
9
|
-
import { getPageVisibilityState } from '../hidden-timing';
|
|
10
|
-
import { VCObserver } from '../vc/vc-observer';
|
|
11
|
-
export var ExperimentalInteractionMetrics = /*#__PURE__*/function () {
|
|
12
|
-
function ExperimentalInteractionMetrics() {
|
|
13
|
-
_classCallCheck(this, ExperimentalInteractionMetrics);
|
|
14
|
-
/**
|
|
15
|
-
* Handler function to process / send the observation data
|
|
16
|
-
*/
|
|
17
|
-
_defineProperty(this, "sinkHandlerFn", function () {});
|
|
18
|
-
/**
|
|
19
|
-
* independent VC observer that observes until `custom.post-interaction-logs` event is sent
|
|
20
|
-
*/
|
|
21
|
-
_defineProperty(this, "vcObserver", null);
|
|
22
|
-
}
|
|
23
|
-
_createClass(ExperimentalInteractionMetrics, [{
|
|
24
|
-
key: "sinkHandler",
|
|
25
|
-
value:
|
|
26
|
-
/**
|
|
27
|
-
* Set the fn that would be invoked to process / send the observation data
|
|
28
|
-
*/
|
|
29
|
-
function sinkHandler(sinkHandlerFn) {
|
|
30
|
-
this.sinkHandlerFn = sinkHandlerFn;
|
|
31
|
-
}
|
|
32
|
-
}, {
|
|
33
|
-
key: "onInteractionComplete",
|
|
34
|
-
value: function onInteractionComplete(interactionId, data) {
|
|
35
|
-
var endTime = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : performance.now();
|
|
36
|
-
if (data.ufoName) {
|
|
37
|
-
data.end = endTime;
|
|
38
|
-
this.sinkHandlerFn(interactionId, data);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}, {
|
|
42
|
-
key: "initializeVCObserver",
|
|
43
|
-
value: function initializeVCObserver(options) {
|
|
44
|
-
if (this.vcObserver === null) {
|
|
45
|
-
this.vcObserver = new VCObserver(_objectSpread(_objectSpread({}, options), {}, {
|
|
46
|
-
isPostInteraction: true
|
|
47
|
-
}));
|
|
48
|
-
}
|
|
49
|
-
return this;
|
|
50
|
-
}
|
|
51
|
-
}, {
|
|
52
|
-
key: "startVCObserver",
|
|
53
|
-
value: function startVCObserver(_ref) {
|
|
54
|
-
var _this$vcObserver;
|
|
55
|
-
var startTime = _ref.startTime;
|
|
56
|
-
(_this$vcObserver = this.vcObserver) === null || _this$vcObserver === void 0 || _this$vcObserver.start({
|
|
57
|
-
startTime: startTime
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
}]);
|
|
61
|
-
return ExperimentalInteractionMetrics;
|
|
62
|
-
}();
|
|
63
|
-
export function createExperimentalInteractionMetricsPayload(interactionId, interaction) {
|
|
64
|
-
var config = getConfig();
|
|
65
|
-
if (!config) {
|
|
66
|
-
throw Error('UFO Configuration not provided');
|
|
67
|
-
}
|
|
68
|
-
var ufoName = getUfoNameOverride(interaction);
|
|
69
|
-
var modifiedInteraction = _objectSpread(_objectSpread({}, interaction), {}, {
|
|
70
|
-
ufoName: ufoName
|
|
71
|
-
});
|
|
72
|
-
var rate = getExperimentalInteractionRate(ufoName, interaction.type);
|
|
73
|
-
if (!coinflip(rate)) {
|
|
74
|
-
return null;
|
|
75
|
-
}
|
|
76
|
-
var pageVisibilityState = getPageVisibilityState(interaction.start, interaction.end);
|
|
77
|
-
if (pageVisibilityState !== 'visible') {
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
return createInteractionMetricsPayload(modifiedInteraction, interactionId, true);
|
|
81
|
-
}
|