@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.
Files changed (76) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/cjs/additional-payload/utils/lighthouse-metrics/utils/buffer/index.js +2 -4
  3. package/dist/cjs/common/constants.js +2 -1
  4. package/dist/cjs/config/index.js +18 -40
  5. package/dist/cjs/create-payload/common/utils/index.js +1 -85
  6. package/dist/cjs/create-payload/index.js +77 -37
  7. package/dist/cjs/interaction-metrics/common/constants.js +1 -7
  8. package/dist/cjs/interaction-metrics/index.js +205 -140
  9. package/dist/cjs/interaction-metrics/post-interaction-log.js +1 -2
  10. package/dist/cjs/interaction-metrics-init/index.js +9 -27
  11. package/dist/cjs/load-hold/UFOLoadHold.js +4 -3
  12. package/dist/cjs/segment/segment.js +9 -7
  13. package/dist/cjs/trace-pageload/index.js +1 -2
  14. package/dist/cjs/vc/vc-observer/index.js +50 -38
  15. package/dist/cjs/vc/vc-observer/observers/editor-lnv/index.js +1 -2
  16. package/dist/cjs/vc/vc-observer/observers/editor-lnv/test-utils.js +1 -2
  17. package/dist/cjs/vc/vc-observer/observers/index.js +1 -2
  18. package/dist/cjs/vc/vc-observer/observers/ssr-placeholders/index.js +1 -2
  19. package/dist/es2019/common/constants.js +3 -1
  20. package/dist/es2019/config/index.js +0 -22
  21. package/dist/es2019/create-payload/common/utils/index.js +1 -86
  22. package/dist/es2019/create-payload/index.js +74 -28
  23. package/dist/es2019/interaction-metrics/common/constants.js +0 -6
  24. package/dist/es2019/interaction-metrics/index.js +130 -93
  25. package/dist/es2019/interaction-metrics-init/index.js +8 -21
  26. package/dist/es2019/load-hold/UFOLoadHold.js +4 -3
  27. package/dist/es2019/segment/segment.js +12 -6
  28. package/dist/es2019/trace-pageload/index.js +1 -1
  29. package/dist/es2019/vc/vc-observer/index.js +17 -5
  30. package/dist/esm/additional-payload/utils/lighthouse-metrics/utils/buffer/index.js +2 -4
  31. package/dist/esm/common/constants.js +3 -1
  32. package/dist/esm/config/index.js +18 -39
  33. package/dist/esm/create-payload/common/utils/index.js +1 -80
  34. package/dist/esm/create-payload/index.js +75 -33
  35. package/dist/esm/interaction-metrics/common/constants.js +0 -6
  36. package/dist/esm/interaction-metrics/index.js +157 -88
  37. package/dist/esm/interaction-metrics/post-interaction-log.js +1 -2
  38. package/dist/esm/interaction-metrics-init/index.js +10 -24
  39. package/dist/esm/load-hold/UFOLoadHold.js +4 -3
  40. package/dist/esm/segment/segment.js +9 -7
  41. package/dist/esm/trace-pageload/index.js +1 -1
  42. package/dist/esm/vc/vc-observer/index.js +50 -38
  43. package/dist/esm/vc/vc-observer/observers/editor-lnv/index.js +1 -2
  44. package/dist/esm/vc/vc-observer/observers/editor-lnv/test-utils.js +1 -2
  45. package/dist/esm/vc/vc-observer/observers/index.js +1 -2
  46. package/dist/esm/vc/vc-observer/observers/ssr-placeholders/index.js +1 -2
  47. package/dist/types/common/common/types.d.ts +4 -6
  48. package/dist/types/config/index.d.ts +0 -6
  49. package/dist/types/create-payload/common/utils/index.d.ts +0 -12
  50. package/dist/types/create-payload/index.d.ts +5660 -13
  51. package/dist/types/interaction-metrics/common/constants.d.ts +1 -31
  52. package/dist/types/interaction-metrics/index.d.ts +15 -4
  53. package/dist/types/load-hold/UFOLoadHold.d.ts +2 -1
  54. package/dist/types/trace-pageload/index.d.ts +0 -1
  55. package/dist/types/vc/vc-observer/index.d.ts +1 -1
  56. package/dist/types-ts4.5/common/common/types.d.ts +4 -6
  57. package/dist/types-ts4.5/config/index.d.ts +0 -6
  58. package/dist/types-ts4.5/create-payload/common/utils/index.d.ts +0 -12
  59. package/dist/types-ts4.5/create-payload/index.d.ts +5660 -13
  60. package/dist/types-ts4.5/interaction-metrics/common/constants.d.ts +1 -31
  61. package/dist/types-ts4.5/interaction-metrics/index.d.ts +15 -4
  62. package/dist/types-ts4.5/load-hold/UFOLoadHold.d.ts +2 -1
  63. package/dist/types-ts4.5/trace-pageload/index.d.ts +0 -1
  64. package/dist/types-ts4.5/vc/vc-observer/index.d.ts +1 -1
  65. package/package.json +6 -5
  66. package/create-experimental-interaction-metrics-payload/package.json +0 -15
  67. package/dist/cjs/create-experimental-interaction-metrics-payload/index.js +0 -89
  68. package/dist/cjs/interaction-metrics/common/index.js +0 -151
  69. package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +0 -67
  70. package/dist/es2019/interaction-metrics/common/index.js +0 -103
  71. package/dist/esm/create-experimental-interaction-metrics-payload/index.js +0 -81
  72. package/dist/esm/interaction-metrics/common/index.js +0 -132
  73. package/dist/types/create-experimental-interaction-metrics-payload/index.d.ts +0 -31
  74. package/dist/types/interaction-metrics/common/index.d.ts +0 -16
  75. package/dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts +0 -31
  76. package/dist/types-ts4.5/interaction-metrics/common/index.d.ts +0 -16
@@ -1,33 +1,3 @@
1
- import type { InteractionMetrics, SegmentInfo } from '../../common';
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, experimental: boolean): () => void;
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;
@@ -19,7 +19,8 @@ import { type ReactNode } from 'react';
19
19
  * return (
20
20
  * <>
21
21
  * <Skeleton />
22
- * <UFOLoadHold name="card" />
22
+ * <UFOLoadHold name="card">
23
+ * </UFOLoadHold>
23
24
  * )
24
25
  * }
25
26
  * ```
@@ -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.4.7",
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.1.4",
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
- }