@atlaskit/react-ufo 3.1.4 → 3.3.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/CHANGELOG.md +16 -0
- package/README.md +11 -0
- package/dist/cjs/create-experimental-interaction-metrics-payload/index.js +52 -25
- package/dist/cjs/create-payload/index.js +290 -231
- package/dist/cjs/interaction-metrics/index.js +61 -23
- package/dist/cjs/interaction-metrics/post-interaction-log.js +63 -34
- package/dist/cjs/interaction-metrics-init/index.js +26 -7
- package/dist/cjs/segment/schedule-on-paint.js +35 -0
- package/dist/cjs/segment/segment.js +10 -1
- package/dist/cjs/vc/index.js +105 -1
- package/dist/cjs/vc/types.js +5 -0
- package/dist/cjs/vc/vc-observer/index.js +198 -208
- package/dist/cjs/vc/vc-observer-new/entries-timeline/index.js +56 -0
- package/dist/cjs/vc/vc-observer-new/get-element-name.js +68 -0
- package/dist/cjs/vc/vc-observer-new/index.js +132 -0
- package/dist/cjs/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +75 -0
- package/dist/cjs/vc/vc-observer-new/metric-calculator/fy25_03/index.js +60 -0
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +274 -0
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +151 -0
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/heatmap.js +367 -0
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +397 -0
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/types.js +5 -0
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/index.js +61 -0
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/calc-union-area.js +151 -0
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +107 -0
- package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/types.js +5 -0
- package/dist/cjs/vc/vc-observer-new/metric-calculator/types.js +5 -0
- package/dist/cjs/vc/vc-observer-new/metric-calculator/utils/get-viewport-height.js +16 -0
- package/dist/cjs/vc/vc-observer-new/metric-calculator/utils/get-viewport-width.js +16 -0
- package/dist/cjs/vc/vc-observer-new/metric-calculator/utils/is-viewport-entry-data.js +16 -0
- package/dist/cjs/vc/vc-observer-new/metric-calculator/utils/task-yield.js +45 -0
- package/dist/cjs/vc/vc-observer-new/types.js +5 -0
- package/dist/cjs/vc/vc-observer-new/viewport-observer/index.js +195 -0
- package/dist/cjs/vc/vc-observer-new/viewport-observer/intersection-observer/index.js +71 -0
- package/dist/cjs/vc/vc-observer-new/viewport-observer/mutation-observer/index.js +65 -0
- package/dist/cjs/vc/vc-observer-new/viewport-observer/performance-observer/index.js +58 -0
- package/dist/cjs/vc/vc-observer-new/viewport-observer/types.js +1 -0
- package/dist/cjs/vc/vc-observer-new/window-event-observer/index.js +54 -0
- package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +2 -2
- package/dist/es2019/create-payload/index.js +8 -7
- package/dist/es2019/interaction-metrics/index.js +3 -3
- package/dist/es2019/interaction-metrics/post-interaction-log.js +5 -5
- package/dist/es2019/interaction-metrics-init/index.js +26 -7
- package/dist/es2019/segment/schedule-on-paint.js +29 -0
- package/dist/es2019/segment/segment.js +9 -1
- package/dist/es2019/vc/index.js +56 -1
- package/dist/es2019/vc/types.js +1 -0
- package/dist/es2019/vc/vc-observer/index.js +1 -4
- package/dist/es2019/vc/vc-observer-new/entries-timeline/index.js +34 -0
- package/dist/es2019/vc/vc-observer-new/get-element-name.js +62 -0
- package/dist/es2019/vc/vc-observer-new/index.js +98 -0
- package/dist/es2019/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +38 -0
- package/dist/es2019/vc/vc-observer-new/metric-calculator/fy25_03/index.js +39 -0
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +194 -0
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +69 -0
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/heatmap.js +248 -0
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +261 -0
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/types.js +1 -0
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/index.js +19 -0
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/calc-union-area.js +98 -0
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +58 -0
- package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/types.js +1 -0
- package/dist/es2019/vc/vc-observer-new/metric-calculator/types.js +1 -0
- package/dist/es2019/vc/vc-observer-new/metric-calculator/utils/get-viewport-height.js +9 -0
- package/dist/es2019/vc/vc-observer-new/metric-calculator/utils/get-viewport-width.js +9 -0
- package/dist/es2019/vc/vc-observer-new/metric-calculator/utils/is-viewport-entry-data.js +10 -0
- package/dist/es2019/vc/vc-observer-new/metric-calculator/utils/task-yield.js +17 -0
- package/dist/es2019/vc/vc-observer-new/types.js +1 -0
- package/dist/es2019/vc/vc-observer-new/viewport-observer/index.js +168 -0
- package/dist/es2019/vc/vc-observer-new/viewport-observer/intersection-observer/index.js +65 -0
- package/dist/es2019/vc/vc-observer-new/viewport-observer/mutation-observer/index.js +48 -0
- package/dist/es2019/vc/vc-observer-new/viewport-observer/performance-observer/index.js +41 -0
- package/dist/es2019/vc/vc-observer-new/viewport-observer/types.js +0 -0
- package/dist/es2019/vc/vc-observer-new/window-event-observer/index.js +36 -0
- package/dist/esm/create-experimental-interaction-metrics-payload/index.js +52 -25
- package/dist/esm/create-payload/index.js +290 -231
- package/dist/esm/interaction-metrics/index.js +61 -23
- package/dist/esm/interaction-metrics/post-interaction-log.js +63 -34
- package/dist/esm/interaction-metrics-init/index.js +26 -7
- package/dist/esm/segment/schedule-on-paint.js +29 -0
- package/dist/esm/segment/segment.js +10 -1
- package/dist/esm/vc/index.js +104 -1
- package/dist/esm/vc/types.js +1 -0
- package/dist/esm/vc/vc-observer/index.js +198 -208
- package/dist/esm/vc/vc-observer-new/entries-timeline/index.js +50 -0
- package/dist/esm/vc/vc-observer-new/get-element-name.js +62 -0
- package/dist/esm/vc/vc-observer-new/index.js +126 -0
- package/dist/esm/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +69 -0
- package/dist/esm/vc/vc-observer-new/metric-calculator/fy25_03/index.js +54 -0
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +268 -0
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +143 -0
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/heatmap.js +361 -0
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +390 -0
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/types.js +1 -0
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/index.js +54 -0
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/calc-union-area.js +144 -0
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +100 -0
- package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/types.js +1 -0
- package/dist/esm/vc/vc-observer-new/metric-calculator/types.js +1 -0
- package/dist/esm/vc/vc-observer-new/metric-calculator/utils/get-viewport-height.js +10 -0
- package/dist/esm/vc/vc-observer-new/metric-calculator/utils/get-viewport-width.js +10 -0
- package/dist/esm/vc/vc-observer-new/metric-calculator/utils/is-viewport-entry-data.js +10 -0
- package/dist/esm/vc/vc-observer-new/metric-calculator/utils/task-yield.js +38 -0
- package/dist/esm/vc/vc-observer-new/types.js +1 -0
- package/dist/esm/vc/vc-observer-new/viewport-observer/index.js +189 -0
- package/dist/esm/vc/vc-observer-new/viewport-observer/intersection-observer/index.js +65 -0
- package/dist/esm/vc/vc-observer-new/viewport-observer/mutation-observer/index.js +59 -0
- package/dist/esm/vc/vc-observer-new/viewport-observer/performance-observer/index.js +51 -0
- package/dist/esm/vc/vc-observer-new/viewport-observer/types.js +0 -0
- package/dist/esm/vc/vc-observer-new/window-event-observer/index.js +48 -0
- package/dist/types/common/index.d.ts +1 -0
- package/dist/types/create-experimental-interaction-metrics-payload/index.d.ts +3 -2
- package/dist/types/create-payload/index.d.ts +4 -4
- package/dist/types/interaction-metrics/post-interaction-log.d.ts +3 -2
- package/dist/types/segment/schedule-on-paint.d.ts +2 -0
- package/dist/types/vc/index.d.ts +3 -3
- package/dist/types/vc/types.d.ts +34 -0
- package/dist/types/vc/vc-observer/index.d.ts +5 -21
- package/dist/types/vc/vc-observer-new/entries-timeline/index.d.ts +13 -0
- package/dist/types/vc/vc-observer-new/get-element-name.d.ts +8 -0
- package/dist/types/vc/vc-observer-new/index.d.ts +18 -0
- package/dist/types/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.d.ts +9 -0
- package/dist/types/vc/vc-observer-new/metric-calculator/fy25_03/index.d.ts +7 -0
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.d.ts +91 -0
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.d.ts +4 -0
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/heatmap.d.ts +39 -0
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.d.ts +8 -0
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/types.d.ts +43 -0
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/index.d.ts +3 -0
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/calc-union-area.d.ts +11 -0
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.d.ts +23 -0
- package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/types.d.ts +9 -0
- package/dist/types/vc/vc-observer-new/metric-calculator/types.d.ts +20 -0
- package/dist/types/vc/vc-observer-new/metric-calculator/utils/get-viewport-height.d.ts +1 -0
- package/dist/types/vc/vc-observer-new/metric-calculator/utils/get-viewport-width.d.ts +1 -0
- package/dist/types/vc/vc-observer-new/metric-calculator/utils/is-viewport-entry-data.d.ts +2 -0
- package/dist/types/vc/vc-observer-new/metric-calculator/utils/task-yield.d.ts +1 -0
- package/dist/types/vc/vc-observer-new/types.d.ts +21 -0
- package/dist/types/vc/vc-observer-new/viewport-observer/index.d.ts +22 -0
- package/dist/types/vc/vc-observer-new/viewport-observer/intersection-observer/index.d.ts +30 -0
- package/dist/types/vc/vc-observer-new/viewport-observer/mutation-observer/index.d.ts +14 -0
- package/dist/types/vc/vc-observer-new/viewport-observer/performance-observer/index.d.ts +14 -0
- package/dist/types/vc/vc-observer-new/viewport-observer/types.d.ts +10 -0
- package/dist/types/vc/vc-observer-new/window-event-observer/index.d.ts +17 -0
- package/dist/types-ts4.5/common/index.d.ts +1 -0
- package/dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts +3 -2
- package/dist/types-ts4.5/create-payload/index.d.ts +4 -4
- package/dist/types-ts4.5/interaction-metrics/post-interaction-log.d.ts +3 -2
- package/dist/types-ts4.5/segment/schedule-on-paint.d.ts +2 -0
- package/dist/types-ts4.5/vc/index.d.ts +3 -3
- package/dist/types-ts4.5/vc/types.d.ts +34 -0
- package/dist/types-ts4.5/vc/vc-observer/index.d.ts +5 -21
- package/dist/types-ts4.5/vc/vc-observer-new/entries-timeline/index.d.ts +13 -0
- package/dist/types-ts4.5/vc/vc-observer-new/get-element-name.d.ts +8 -0
- package/dist/types-ts4.5/vc/vc-observer-new/index.d.ts +18 -0
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.d.ts +9 -0
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/fy25_03/index.d.ts +7 -0
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.d.ts +91 -0
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.d.ts +4 -0
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/heatmap.d.ts +39 -0
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.d.ts +8 -0
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/types.d.ts +43 -0
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/index.d.ts +3 -0
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/calc-union-area.d.ts +11 -0
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.d.ts +23 -0
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/types.d.ts +9 -0
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/types.d.ts +20 -0
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/utils/get-viewport-height.d.ts +1 -0
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/utils/get-viewport-width.d.ts +1 -0
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/utils/is-viewport-entry-data.d.ts +2 -0
- package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/utils/task-yield.d.ts +1 -0
- package/dist/types-ts4.5/vc/vc-observer-new/types.d.ts +21 -0
- package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/index.d.ts +22 -0
- package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/intersection-observer/index.d.ts +30 -0
- package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/mutation-observer/index.d.ts +14 -0
- package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/performance-observer/index.d.ts +14 -0
- package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/types.d.ts +10 -0
- package/dist/types-ts4.5/vc/vc-observer-new/window-event-observer/index.d.ts +17 -0
- package/package.json +13 -1
|
@@ -57,11 +57,11 @@ export class ExperimentalVCMetrics {
|
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
export const experimentalVC = new ExperimentalVCMetrics();
|
|
60
|
-
export const getExperimentalVCMetrics = interaction => {
|
|
60
|
+
export const getExperimentalVCMetrics = async interaction => {
|
|
61
61
|
if (experimentalVC.vcObserver) {
|
|
62
62
|
var _interaction$apdex, _interaction$apdex$;
|
|
63
63
|
const prefix = 'ufo-experimental';
|
|
64
|
-
const result = experimentalVC.vcObserver.getVCResult({
|
|
64
|
+
const result = await experimentalVC.vcObserver.getVCResult({
|
|
65
65
|
start: interaction.start,
|
|
66
66
|
stop: interaction.end,
|
|
67
67
|
tti: (_interaction$apdex = interaction.apdex) === null || _interaction$apdex === void 0 ? void 0 : (_interaction$apdex$ = _interaction$apdex[0]) === null || _interaction$apdex$ === void 0 ? void 0 : _interaction$apdex$.stopTime,
|
|
@@ -165,7 +165,7 @@ const getTTAI = interaction => {
|
|
|
165
165
|
const pageVisibilityUpToTTAI = getPageVisibilityUpToTTAI(interaction);
|
|
166
166
|
return !interaction.abortReason && pageVisibilityUpToTTAI === 'visible' ? Math.round(end - start) : undefined;
|
|
167
167
|
};
|
|
168
|
-
const getVCMetrics = interaction => {
|
|
168
|
+
const getVCMetrics = async interaction => {
|
|
169
169
|
var _config$vc, _config$vc$ssrWhiteli, _interaction$apdex, _interaction$apdex$, _config$experimentalI;
|
|
170
170
|
const config = getConfig();
|
|
171
171
|
if (!(config !== null && config !== void 0 && (_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled)) {
|
|
@@ -181,7 +181,7 @@ const getVCMetrics = interaction => {
|
|
|
181
181
|
postInteractionLog.setVCObserverSSRConfig(ssr);
|
|
182
182
|
const tti = (_interaction$apdex = interaction.apdex) === null || _interaction$apdex === void 0 ? void 0 : (_interaction$apdex$ = _interaction$apdex[0]) === null || _interaction$apdex$ === void 0 ? void 0 : _interaction$apdex$.stopTime;
|
|
183
183
|
const prefix = 'ufo';
|
|
184
|
-
const result = getVCObserver().getVCResult({
|
|
184
|
+
const result = await getVCObserver().getVCResult({
|
|
185
185
|
start: interaction.start,
|
|
186
186
|
stop: interaction.end,
|
|
187
187
|
tti,
|
|
@@ -699,7 +699,7 @@ function getErrorCounts(interaction) {
|
|
|
699
699
|
'ufo:errors:count': interaction.errors.length
|
|
700
700
|
};
|
|
701
701
|
}
|
|
702
|
-
function createInteractionMetricsPayload(interaction, interactionId, experimental) {
|
|
702
|
+
async function createInteractionMetricsPayload(interaction, interactionId, experimental) {
|
|
703
703
|
var _window$location, _config$additionalPay;
|
|
704
704
|
const interactionPayloadStart = performance.now();
|
|
705
705
|
const config = getConfig();
|
|
@@ -793,6 +793,7 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
|
|
|
793
793
|
}
|
|
794
794
|
const newUFOName = sanitizeUfoName(ufoName);
|
|
795
795
|
const resourceTimings = getResourceTimings(start, end);
|
|
796
|
+
const [vcMetrics, experimentalMetrics] = await Promise.all([getVCMetrics(interaction), experimental ? getExperimentalVCMetrics(interaction) : Promise.resolve(undefined)]);
|
|
796
797
|
const payload = {
|
|
797
798
|
actionSubject: 'experience',
|
|
798
799
|
action: 'measured',
|
|
@@ -820,8 +821,8 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
|
|
|
820
821
|
...getPPSMetrics(interaction),
|
|
821
822
|
...getPaintMetrics(type),
|
|
822
823
|
...getNavigationMetrics(type),
|
|
823
|
-
...
|
|
824
|
-
...
|
|
824
|
+
...vcMetrics,
|
|
825
|
+
...experimentalMetrics,
|
|
825
826
|
...((_config$additionalPay = config.additionalPayloadData) === null || _config$additionalPay === void 0 ? void 0 : _config$additionalPay.call(config, interaction)),
|
|
826
827
|
...getTracingContextData(interaction),
|
|
827
828
|
...getStylesheetMetrics(),
|
|
@@ -876,13 +877,13 @@ function createInteractionMetricsPayload(interaction, interactionId, experimenta
|
|
|
876
877
|
payload.attributes.properties['event:sizeInKb'] = getPayloadSize(payload.attributes.properties);
|
|
877
878
|
return payload;
|
|
878
879
|
}
|
|
879
|
-
export function createPayloads(interactionId, interaction) {
|
|
880
|
+
export async function createPayloads(interactionId, interaction) {
|
|
880
881
|
const ufoNameOverride = getUfoNameOverride(interaction);
|
|
881
882
|
const modifiedInteraction = {
|
|
882
883
|
...interaction,
|
|
883
884
|
ufoName: ufoNameOverride
|
|
884
885
|
};
|
|
885
|
-
const interactionMetricsPayload = createInteractionMetricsPayload(modifiedInteraction, interactionId);
|
|
886
|
+
const interactionMetricsPayload = await createInteractionMetricsPayload(modifiedInteraction, interactionId);
|
|
886
887
|
return [interactionMetricsPayload];
|
|
887
888
|
}
|
|
888
889
|
export function createExperimentalMetricsPayload(interactionId, interaction) {
|
|
@@ -502,15 +502,15 @@ export function tryComplete(interactionId, endTime) {
|
|
|
502
502
|
if (interaction != null) {
|
|
503
503
|
const noMoreActiveHolds = interaction.holdActive.size === 0;
|
|
504
504
|
const noMoreExpHolds = interaction.holdExpActive.size === 0;
|
|
505
|
-
const postInteraction = () => {
|
|
505
|
+
const postInteraction = async () => {
|
|
506
506
|
var _getConfig6, _getConfig6$postInter, _getConfig8, _getConfig8$experimen;
|
|
507
507
|
if ((_getConfig6 = getConfig()) !== null && _getConfig6 !== void 0 && (_getConfig6$postInter = _getConfig6.postInteractionLog) !== null && _getConfig6$postInter !== void 0 && _getConfig6$postInter.enabled) {
|
|
508
508
|
var _getConfig7, _getConfig7$experimen;
|
|
509
509
|
let experimentalVC90;
|
|
510
510
|
let experimentalTTAI;
|
|
511
511
|
if ((_getConfig7 = getConfig()) !== null && _getConfig7 !== void 0 && (_getConfig7$experimen = _getConfig7.experimentalInteractionMetrics) !== null && _getConfig7$experimen !== void 0 && _getConfig7$experimen.enabled) {
|
|
512
|
-
var
|
|
513
|
-
experimentalVC90 = (
|
|
512
|
+
var _await$getExperimenta;
|
|
513
|
+
experimentalVC90 = (_await$getExperimenta = await getExperimentalVCMetrics(interaction)) === null || _await$getExperimenta === void 0 ? void 0 : _await$getExperimenta['metric:experimental:vc90'];
|
|
514
514
|
const {
|
|
515
515
|
start,
|
|
516
516
|
end
|
|
@@ -85,7 +85,7 @@ export default class PostInteractionLog {
|
|
|
85
85
|
/**
|
|
86
86
|
* Send the log if there is data
|
|
87
87
|
*/
|
|
88
|
-
sendPostInteractionLog() {
|
|
88
|
+
async sendPostInteractionLog() {
|
|
89
89
|
var _this$vcObserver3, _getConfig2, _getConfig2$experimen;
|
|
90
90
|
if (!this.hasData() || !this.lastInteractionFinish || !this.sinkHandlerFn) {
|
|
91
91
|
var _getConfig, _getConfig$experiment;
|
|
@@ -96,14 +96,14 @@ export default class PostInteractionLog {
|
|
|
96
96
|
}
|
|
97
97
|
return;
|
|
98
98
|
}
|
|
99
|
-
const postInteractionFinishVCResult = (_this$vcObserver3 = this.vcObserver) === null || _this$vcObserver3 === void 0 ? void 0 : _this$vcObserver3.getVCResult({
|
|
99
|
+
const postInteractionFinishVCResult = await ((_this$vcObserver3 = this.vcObserver) === null || _this$vcObserver3 === void 0 ? void 0 : _this$vcObserver3.getVCResult({
|
|
100
100
|
start: this.lastInteractionFinish.start,
|
|
101
101
|
stop: performance.now(),
|
|
102
102
|
tti: -1,
|
|
103
103
|
// no need for TTI value here
|
|
104
104
|
prefix: 'ufo',
|
|
105
105
|
...this.vcObserverSSRConfig
|
|
106
|
-
});
|
|
106
|
+
}));
|
|
107
107
|
if ((_getConfig2 = getConfig()) !== null && _getConfig2 !== void 0 && (_getConfig2$experimen = _getConfig2.experimentalInteractionMetrics) !== null && _getConfig2$experimen !== void 0 && _getConfig2$experimen.enabled) {
|
|
108
108
|
var _this$vcObserver4;
|
|
109
109
|
(_this$vcObserver4 = this.vcObserver) === null || _this$vcObserver4 === void 0 ? void 0 : _this$vcObserver4.stop();
|
|
@@ -149,8 +149,8 @@ export default class PostInteractionLog {
|
|
|
149
149
|
experimentalVC90
|
|
150
150
|
};
|
|
151
151
|
const timeout = ((_getConfig3 = getConfig()) === null || _getConfig3 === void 0 ? void 0 : _getConfig3.timeWindowForLateMutationsInMilliseconds) || POST_INTERACTION_LOG_SEND_DEFAULT_TIMEOUT;
|
|
152
|
-
this.sinkTimeoutId = window.setTimeout(() => {
|
|
153
|
-
this.sendPostInteractionLog();
|
|
152
|
+
this.sinkTimeoutId = window.setTimeout(async () => {
|
|
153
|
+
await this.sendPostInteractionLog();
|
|
154
154
|
}, timeout);
|
|
155
155
|
}
|
|
156
156
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { unstable_IdlePriority as idlePriority, unstable_scheduleCallback as scheduleCallback } from 'scheduler';
|
|
2
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
2
3
|
import { startLighthouseObserver } from '../additional-payload';
|
|
3
4
|
import { setUFOConfig } from '../config';
|
|
4
5
|
import { experimentalVC, sinkExperimentalHandler } from '../create-experimental-interaction-metrics-payload';
|
|
@@ -9,13 +10,17 @@ let initialized = false;
|
|
|
9
10
|
function sinkInteraction(instance, payloadPackage) {
|
|
10
11
|
sinkInteractionHandler((interactionId, interaction) => {
|
|
11
12
|
scheduleCallback(idlePriority, () => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
payloadPackage.createPayloads(interactionId, interaction).then(payloads => {
|
|
14
|
+
// NOTE: This API is used by the UFO DevTool Chrome Extension and Criterion
|
|
15
|
+
const devToolObserver = globalThis.__ufo_devtool_onUfoPayload;
|
|
16
|
+
payloads === null || payloads === void 0 ? void 0 : payloads.forEach(payload => {
|
|
17
|
+
if (typeof devToolObserver === 'function') {
|
|
18
|
+
devToolObserver === null || devToolObserver === void 0 ? void 0 : devToolObserver(payload);
|
|
19
|
+
}
|
|
20
|
+
instance.sendOperationalEvent(payload);
|
|
21
|
+
});
|
|
22
|
+
}).catch(error => {
|
|
23
|
+
throw error;
|
|
19
24
|
});
|
|
20
25
|
});
|
|
21
26
|
});
|
|
@@ -25,6 +30,13 @@ function sinkExperimentalInteractionMetrics(instance, payloadPackage) {
|
|
|
25
30
|
scheduleCallback(idlePriority, () => {
|
|
26
31
|
const payload = payloadPackage.createExperimentalMetricsPayload(interactionId, interaction);
|
|
27
32
|
if (payload) {
|
|
33
|
+
if (fg('enable_ufo_devtools_api_for_extra_events')) {
|
|
34
|
+
// NOTE: This API is used by the UFO DevTool Chrome Extension and Criterion
|
|
35
|
+
const devToolObserver = globalThis.__ufo_devtool_onUfoPayload;
|
|
36
|
+
if (typeof devToolObserver === 'function') {
|
|
37
|
+
devToolObserver === null || devToolObserver === void 0 ? void 0 : devToolObserver(payload);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
28
40
|
instance.sendOperationalEvent(payload);
|
|
29
41
|
}
|
|
30
42
|
});
|
|
@@ -35,6 +47,13 @@ function sinkPostInteractionLog(instance, createPostInteractionLogPayload) {
|
|
|
35
47
|
scheduleCallback(idlePriority, () => {
|
|
36
48
|
const payload = createPostInteractionLogPayload(logOutput);
|
|
37
49
|
if (payload) {
|
|
50
|
+
// NOTE: This API is used by the UFO DevTool Chrome Extension and also by Criterion
|
|
51
|
+
if (fg('enable_ufo_devtools_api_for_extra_events')) {
|
|
52
|
+
const devToolObserver = globalThis.__ufo_devtool_onUfoPayload;
|
|
53
|
+
if (typeof devToolObserver === 'function') {
|
|
54
|
+
devToolObserver === null || devToolObserver === void 0 ? void 0 : devToolObserver(payload);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
38
57
|
instance.sendOperationalEvent(payload);
|
|
39
58
|
}
|
|
40
59
|
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export default function scheduleOnPaint(callback) {
|
|
2
|
+
var _document;
|
|
3
|
+
if (((_document = document) === null || _document === void 0 ? void 0 : _document.visibilityState) !== 'visible') {
|
|
4
|
+
// last resort fallback
|
|
5
|
+
setTimeout(callback, 100);
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// Check if the Scheduler API is available
|
|
10
|
+
if (typeof window.scheduler !== 'undefined' && typeof window.scheduler.postTask === 'function') {
|
|
11
|
+
// Use scheduler.postTask if available
|
|
12
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API
|
|
13
|
+
// Make sure we are scheduling this task before the browser paint the next frame
|
|
14
|
+
requestAnimationFrame(() => {
|
|
15
|
+
window.scheduler.postTask(callback, {
|
|
16
|
+
priority: 'user-visible'
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
// if active tab, and can do requestAnimationFrame
|
|
21
|
+
else if (typeof requestAnimationFrame !== 'undefined') {
|
|
22
|
+
// Fallback to using double requestAnimationFrame
|
|
23
|
+
requestAnimationFrame(() => {
|
|
24
|
+
requestAnimationFrame(() => {
|
|
25
|
+
callback();
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -10,6 +10,7 @@ import UFOInteractionIDContext from '../interaction-id-context';
|
|
|
10
10
|
import { abortByNewInteraction, addApdex, addCustomData, addCustomTiming, addHold, addHoldByID, addMark, addNewInteraction, addProfilerTimings, addRequestInfo, addSegment, addSpan, removeHoldByID, removeSegment, tryComplete } from '../interaction-metrics';
|
|
11
11
|
import UFORouteName from '../route-name-context';
|
|
12
12
|
import generateId from '../short-id';
|
|
13
|
+
import scheduleOnPaint from './schedule-on-paint';
|
|
13
14
|
let tryCompleteHandle;
|
|
14
15
|
const AsyncSegmentHighlight = /*#__PURE__*/lazy(() => import( /* webpackChunkName: "@atlaskit-internal_ufo-segment-highlight" */'./segment-highlight').then(module => ({
|
|
15
16
|
default: module.SegmentHighlight
|
|
@@ -189,7 +190,14 @@ export default function UFOSegment({
|
|
|
189
190
|
onRender(phase, actualDuration, baseDuration, startTime, commitTime) {
|
|
190
191
|
if (interactionId.current !== null) {
|
|
191
192
|
addProfilerTimings(interactionId.current, this.labelStack, phase, actualDuration, baseDuration, startTime, commitTime);
|
|
192
|
-
|
|
193
|
+
if (fg('platform_ufo_vc_ttai_on_paint')) {
|
|
194
|
+
scheduleOnPaint(() => {
|
|
195
|
+
const paintedTime = performance.now();
|
|
196
|
+
this.complete(paintedTime);
|
|
197
|
+
});
|
|
198
|
+
} else {
|
|
199
|
+
this.complete(commitTime);
|
|
200
|
+
}
|
|
193
201
|
}
|
|
194
202
|
},
|
|
195
203
|
_internalHold,
|
package/dist/es2019/vc/index.js
CHANGED
|
@@ -1,7 +1,62 @@
|
|
|
1
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
1
2
|
import { VCObserver } from './vc-observer';
|
|
3
|
+
import VCObserverNew from './vc-observer-new';
|
|
4
|
+
class VCObserverWrapper {
|
|
5
|
+
constructor(opts = {}) {
|
|
6
|
+
this.oldVCObserver = new VCObserver(opts);
|
|
7
|
+
this.newVCObserver = null;
|
|
8
|
+
const isNewVCObserverEnabled = fg('platform_ufo_vc_observer_new');
|
|
9
|
+
if (isNewVCObserverEnabled) {
|
|
10
|
+
this.newVCObserver = new VCObserverNew({
|
|
11
|
+
selectorConfig: opts.selectorConfig
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
start(startArg) {
|
|
16
|
+
var _this$oldVCObserver, _this$newVCObserver;
|
|
17
|
+
(_this$oldVCObserver = this.oldVCObserver) === null || _this$oldVCObserver === void 0 ? void 0 : _this$oldVCObserver.start(startArg);
|
|
18
|
+
(_this$newVCObserver = this.newVCObserver) === null || _this$newVCObserver === void 0 ? void 0 : _this$newVCObserver.start();
|
|
19
|
+
}
|
|
20
|
+
stop() {
|
|
21
|
+
var _this$oldVCObserver2, _this$newVCObserver2;
|
|
22
|
+
(_this$oldVCObserver2 = this.oldVCObserver) === null || _this$oldVCObserver2 === void 0 ? void 0 : _this$oldVCObserver2.stop();
|
|
23
|
+
(_this$newVCObserver2 = this.newVCObserver) === null || _this$newVCObserver2 === void 0 ? void 0 : _this$newVCObserver2.stop();
|
|
24
|
+
}
|
|
25
|
+
getVCRawData() {
|
|
26
|
+
var _this$oldVCObserver$g, _this$oldVCObserver3;
|
|
27
|
+
return (_this$oldVCObserver$g = (_this$oldVCObserver3 = this.oldVCObserver) === null || _this$oldVCObserver3 === void 0 ? void 0 : _this$oldVCObserver3.getVCRawData()) !== null && _this$oldVCObserver$g !== void 0 ? _this$oldVCObserver$g : null;
|
|
28
|
+
}
|
|
29
|
+
async getVCResult(param) {
|
|
30
|
+
var _this$oldVCObserver4, _this$newVCObserver3, _ref;
|
|
31
|
+
const oldResult = await ((_this$oldVCObserver4 = this.oldVCObserver) === null || _this$oldVCObserver4 === void 0 ? void 0 : _this$oldVCObserver4.getVCResult(param));
|
|
32
|
+
const newResult = await ((_this$newVCObserver3 = this.newVCObserver) === null || _this$newVCObserver3 === void 0 ? void 0 : _this$newVCObserver3.getVCResult({
|
|
33
|
+
start: param.start,
|
|
34
|
+
stop: fg('platform_ufo_vc_ttai_on_paint') ? param.stop : performance.now()
|
|
35
|
+
}));
|
|
36
|
+
if (oldResult && !newResult) {
|
|
37
|
+
return oldResult;
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
...(oldResult !== null && oldResult !== void 0 ? oldResult : {}),
|
|
41
|
+
'ufo:vc:rev': [...((_ref = oldResult === null || oldResult === void 0 ? void 0 : oldResult['ufo:vc:rev']) !== null && _ref !== void 0 ? _ref : []), ...(newResult !== null && newResult !== void 0 ? newResult : [])]
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
setSSRElement(element) {
|
|
45
|
+
var _this$oldVCObserver5;
|
|
46
|
+
(_this$oldVCObserver5 = this.oldVCObserver) === null || _this$oldVCObserver5 === void 0 ? void 0 : _this$oldVCObserver5.setSSRElement(element);
|
|
47
|
+
}
|
|
48
|
+
setReactRootRenderStart(startTime) {
|
|
49
|
+
var _this$oldVCObserver6;
|
|
50
|
+
(_this$oldVCObserver6 = this.oldVCObserver) === null || _this$oldVCObserver6 === void 0 ? void 0 : _this$oldVCObserver6.setReactRootRenderStart(startTime || performance.now());
|
|
51
|
+
}
|
|
52
|
+
setReactRootRenderStop(stopTime) {
|
|
53
|
+
var _this$oldVCObserver7;
|
|
54
|
+
(_this$oldVCObserver7 = this.oldVCObserver) === null || _this$oldVCObserver7 === void 0 ? void 0 : _this$oldVCObserver7.setReactRootRenderStop(stopTime || performance.now());
|
|
55
|
+
}
|
|
56
|
+
}
|
|
2
57
|
export const getVCObserver = (opts = {}) => {
|
|
3
58
|
if (!globalThis.__vcObserver) {
|
|
4
|
-
globalThis.__vcObserver = new
|
|
59
|
+
globalThis.__vcObserver = new VCObserverWrapper(opts);
|
|
5
60
|
}
|
|
6
61
|
return globalThis.__vcObserver;
|
|
7
62
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -85,7 +85,7 @@ export class VCObserver {
|
|
|
85
85
|
ratios: this.vcRatios
|
|
86
86
|
};
|
|
87
87
|
});
|
|
88
|
-
_defineProperty(this, "getVCResult", ({
|
|
88
|
+
_defineProperty(this, "getVCResult", async ({
|
|
89
89
|
start,
|
|
90
90
|
stop,
|
|
91
91
|
tti,
|
|
@@ -585,9 +585,6 @@ export class VCObserver {
|
|
|
585
585
|
setReactRootRenderStop(stopTime = performance.now()) {
|
|
586
586
|
this.observers.setReactRootRenderStop(stopTime);
|
|
587
587
|
}
|
|
588
|
-
abortObservation(abortReason = 'custom') {
|
|
589
|
-
this.setAbortReason(abortReason, performance.now());
|
|
590
|
-
}
|
|
591
588
|
setAbortReason(abort, timestamp, info = '') {
|
|
592
589
|
if (this.abortReason.reason === null || this.abortReason.blocking === false) {
|
|
593
590
|
this.abortReason.reason = abort;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
export default class EntriesTimeline {
|
|
3
|
+
constructor() {
|
|
4
|
+
_defineProperty(this, "unorderedEntries", []);
|
|
5
|
+
_defineProperty(this, "sortedEntriesCache", new Map());
|
|
6
|
+
this.unorderedEntries = [];
|
|
7
|
+
}
|
|
8
|
+
push(entry) {
|
|
9
|
+
this.unorderedEntries.push(entry);
|
|
10
|
+
this.sortedEntriesCache.clear();
|
|
11
|
+
}
|
|
12
|
+
getCacheKey(start, stop) {
|
|
13
|
+
return `${start !== null && start !== void 0 ? start : 'null'}_${stop !== null && stop !== void 0 ? stop : 'null'}`;
|
|
14
|
+
}
|
|
15
|
+
getOrderedEntries({
|
|
16
|
+
start,
|
|
17
|
+
stop
|
|
18
|
+
}) {
|
|
19
|
+
var _this$sortedEntriesCa;
|
|
20
|
+
const cacheKey = this.getCacheKey(start, stop);
|
|
21
|
+
const cachedSortedEntries = (_this$sortedEntriesCa = this.sortedEntriesCache.get(cacheKey)) === null || _this$sortedEntriesCa === void 0 ? void 0 : _this$sortedEntriesCa.deref();
|
|
22
|
+
if (cachedSortedEntries) {
|
|
23
|
+
return cachedSortedEntries;
|
|
24
|
+
}
|
|
25
|
+
const filteredEntries = this.unorderedEntries.filter(e => e.time >= (start !== null && start !== void 0 ? start : 0) && e.time <= (stop !== null && stop !== void 0 ? stop : performance.now()));
|
|
26
|
+
const sortedEntries = filteredEntries.sort((a, b) => a.time - b.time);
|
|
27
|
+
this.sortedEntriesCache.set(cacheKey, new WeakRef(sortedEntries));
|
|
28
|
+
return sortedEntries;
|
|
29
|
+
}
|
|
30
|
+
clear() {
|
|
31
|
+
this.unorderedEntries = [];
|
|
32
|
+
this.sortedEntriesCache.clear();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
const nameCache = new WeakMap();
|
|
2
|
+
function getAttributeSelector(element, attributeName) {
|
|
3
|
+
const attrValue = element.getAttribute(attributeName);
|
|
4
|
+
if (!attrValue) {
|
|
5
|
+
return '';
|
|
6
|
+
}
|
|
7
|
+
return `[${attributeName}="${encodeURIComponent(attrValue)}"]`;
|
|
8
|
+
}
|
|
9
|
+
function isSelectorUnique(selector) {
|
|
10
|
+
return document.querySelectorAll(selector).length === 1;
|
|
11
|
+
}
|
|
12
|
+
function getUniqueSelector(selectorConfig, element) {
|
|
13
|
+
let currentElement = element;
|
|
14
|
+
const parts = [];
|
|
15
|
+
while (currentElement && currentElement.localName !== 'body') {
|
|
16
|
+
const tagName = currentElement.localName;
|
|
17
|
+
let selectorPart = tagName;
|
|
18
|
+
if (selectorConfig.id && currentElement.id) {
|
|
19
|
+
selectorPart += `#${encodeURIComponent(currentElement.id)}`;
|
|
20
|
+
} else if (selectorConfig.dataVC) {
|
|
21
|
+
selectorPart += getAttributeSelector(currentElement, 'data-vc');
|
|
22
|
+
} else if (selectorConfig.testId) {
|
|
23
|
+
selectorPart += getAttributeSelector(currentElement, 'data-testid') || getAttributeSelector(currentElement, 'data-test-id');
|
|
24
|
+
} else if (selectorConfig.role) {
|
|
25
|
+
selectorPart += getAttributeSelector(currentElement, 'role');
|
|
26
|
+
} else if (selectorConfig.className && currentElement.className) {
|
|
27
|
+
const classNames = Array.from(currentElement.classList).map(encodeURIComponent).join('.');
|
|
28
|
+
if (classNames) {
|
|
29
|
+
selectorPart += `.${classNames}`;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
parts.unshift(selectorPart);
|
|
33
|
+
const potentialSelector = parts.join(' > ').trim();
|
|
34
|
+
if (potentialSelector && isSelectorUnique(potentialSelector)) {
|
|
35
|
+
return potentialSelector;
|
|
36
|
+
}
|
|
37
|
+
currentElement = currentElement.parentElement;
|
|
38
|
+
}
|
|
39
|
+
const potentialSelector = parts.join(' > ').trim();
|
|
40
|
+
if (!potentialSelector) {
|
|
41
|
+
return 'unknown';
|
|
42
|
+
} else if (!isSelectorUnique(potentialSelector)) {
|
|
43
|
+
const parentElement = element.parentElement;
|
|
44
|
+
if (parentElement) {
|
|
45
|
+
const siblingIndex = Array.from(parentElement.children).indexOf(element) + 1;
|
|
46
|
+
return `${potentialSelector}:nth-child(${siblingIndex})`;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return potentialSelector;
|
|
50
|
+
}
|
|
51
|
+
export default function getElementName(selectorConfig, element) {
|
|
52
|
+
if (!(element instanceof HTMLElement)) {
|
|
53
|
+
return 'error';
|
|
54
|
+
}
|
|
55
|
+
const cachedName = nameCache.get(element);
|
|
56
|
+
if (cachedName) {
|
|
57
|
+
return cachedName;
|
|
58
|
+
}
|
|
59
|
+
const uniqueSelector = getUniqueSelector(selectorConfig, element);
|
|
60
|
+
nameCache.set(element, uniqueSelector);
|
|
61
|
+
return uniqueSelector;
|
|
62
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import EntriesTimeline from './entries-timeline';
|
|
3
|
+
import getElementName from './get-element-name';
|
|
4
|
+
import VCCalculator_FY25_03 from './metric-calculator/fy25_03';
|
|
5
|
+
import ViewportObserver from './viewport-observer';
|
|
6
|
+
import WindowEventObserver from './window-event-observer';
|
|
7
|
+
const DEFAULT_SELECTOR_CONFIG = {
|
|
8
|
+
id: false,
|
|
9
|
+
testId: true,
|
|
10
|
+
role: false,
|
|
11
|
+
className: false,
|
|
12
|
+
dataVC: true
|
|
13
|
+
};
|
|
14
|
+
export default class VCObserverNew {
|
|
15
|
+
constructor(config) {
|
|
16
|
+
var _config$selectorConfi;
|
|
17
|
+
_defineProperty(this, "startTime", 0);
|
|
18
|
+
_defineProperty(this, "viewportObserver", null);
|
|
19
|
+
_defineProperty(this, "windowEventObserver", null);
|
|
20
|
+
this.entriesTimeline = new EntriesTimeline();
|
|
21
|
+
this.selectorConfig = (_config$selectorConfi = config.selectorConfig) !== null && _config$selectorConfi !== void 0 ? _config$selectorConfi : DEFAULT_SELECTOR_CONFIG;
|
|
22
|
+
this.viewportObserver = new ViewportObserver({
|
|
23
|
+
onChange: onChangeArg => {
|
|
24
|
+
const {
|
|
25
|
+
time,
|
|
26
|
+
type,
|
|
27
|
+
elementRef,
|
|
28
|
+
visible,
|
|
29
|
+
rect,
|
|
30
|
+
previousRect,
|
|
31
|
+
mutationData
|
|
32
|
+
} = onChangeArg;
|
|
33
|
+
let elementName = 'unknown';
|
|
34
|
+
const element = elementRef.deref();
|
|
35
|
+
if (element) {
|
|
36
|
+
elementName = this.getElementName(element);
|
|
37
|
+
}
|
|
38
|
+
this.entriesTimeline.push({
|
|
39
|
+
time,
|
|
40
|
+
type,
|
|
41
|
+
data: {
|
|
42
|
+
elementName,
|
|
43
|
+
rect,
|
|
44
|
+
previousRect,
|
|
45
|
+
visible,
|
|
46
|
+
attributeName: mutationData === null || mutationData === void 0 ? void 0 : mutationData.attributeName
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
this.windowEventObserver = new WindowEventObserver({
|
|
52
|
+
onEvent: ({
|
|
53
|
+
time,
|
|
54
|
+
type
|
|
55
|
+
}) => {
|
|
56
|
+
this.entriesTimeline.push({
|
|
57
|
+
time,
|
|
58
|
+
type: 'window:event',
|
|
59
|
+
data: {
|
|
60
|
+
eventType: type
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
start() {
|
|
67
|
+
var _this$viewportObserve, _this$windowEventObse;
|
|
68
|
+
(_this$viewportObserve = this.viewportObserver) === null || _this$viewportObserve === void 0 ? void 0 : _this$viewportObserve.start();
|
|
69
|
+
(_this$windowEventObse = this.windowEventObserver) === null || _this$windowEventObse === void 0 ? void 0 : _this$windowEventObse.start();
|
|
70
|
+
}
|
|
71
|
+
stop() {
|
|
72
|
+
var _this$viewportObserve2, _this$windowEventObse2;
|
|
73
|
+
(_this$viewportObserve2 = this.viewportObserver) === null || _this$viewportObserve2 === void 0 ? void 0 : _this$viewportObserve2.stop();
|
|
74
|
+
(_this$windowEventObse2 = this.windowEventObserver) === null || _this$windowEventObse2 === void 0 ? void 0 : _this$windowEventObse2.stop();
|
|
75
|
+
}
|
|
76
|
+
async getVCResult(param) {
|
|
77
|
+
const {
|
|
78
|
+
start,
|
|
79
|
+
stop
|
|
80
|
+
} = param;
|
|
81
|
+
const results = [];
|
|
82
|
+
const calculator_fy25_03 = new VCCalculator_FY25_03();
|
|
83
|
+
const orderedEntries = this.entriesTimeline.getOrderedEntries({
|
|
84
|
+
start,
|
|
85
|
+
stop
|
|
86
|
+
});
|
|
87
|
+
const fy25_03 = await calculator_fy25_03.calculate({
|
|
88
|
+
orderedEntries
|
|
89
|
+
});
|
|
90
|
+
if (fy25_03) {
|
|
91
|
+
results.push(fy25_03);
|
|
92
|
+
}
|
|
93
|
+
return results;
|
|
94
|
+
}
|
|
95
|
+
getElementName(element) {
|
|
96
|
+
return getElementName(this.selectorConfig, element);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import calculateTTVCPercentiles from './percentile-calc';
|
|
2
|
+
import getViewportHeight from './utils/get-viewport-height';
|
|
3
|
+
import getViewportWidth from './utils/get-viewport-width';
|
|
4
|
+
export default class AbstractVCCalculatorBase {
|
|
5
|
+
constructor(revisionNo) {
|
|
6
|
+
this.revisionNo = revisionNo;
|
|
7
|
+
}
|
|
8
|
+
async calculate({
|
|
9
|
+
orderedEntries
|
|
10
|
+
}) {
|
|
11
|
+
var _vcDetails$90$t, _vcDetails$;
|
|
12
|
+
const filteredEntries = orderedEntries.filter(entry => {
|
|
13
|
+
return this.isEntryIncluded(entry);
|
|
14
|
+
});
|
|
15
|
+
const isVCClean = this.isVCClean(filteredEntries);
|
|
16
|
+
if (!isVCClean) {
|
|
17
|
+
return {
|
|
18
|
+
revision: this.revisionNo,
|
|
19
|
+
'metric:vc90': null,
|
|
20
|
+
clean: false
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
const vcDetails = await calculateTTVCPercentiles({
|
|
24
|
+
viewport: {
|
|
25
|
+
width: getViewportWidth(),
|
|
26
|
+
height: getViewportHeight()
|
|
27
|
+
},
|
|
28
|
+
orderedEntries: filteredEntries,
|
|
29
|
+
percentiles: [25, 50, 75, 80, 85, 90, 95, 98, 99]
|
|
30
|
+
});
|
|
31
|
+
return {
|
|
32
|
+
revision: this.revisionNo,
|
|
33
|
+
vcDetails: vcDetails !== null && vcDetails !== void 0 ? vcDetails : undefined,
|
|
34
|
+
clean: isVCClean,
|
|
35
|
+
'metric:vc90': (_vcDetails$90$t = vcDetails === null || vcDetails === void 0 ? void 0 : (_vcDetails$ = vcDetails['90']) === null || _vcDetails$ === void 0 ? void 0 : _vcDetails$.t) !== null && _vcDetails$90$t !== void 0 ? _vcDetails$90$t : null
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import AbstractVCCalculatorBase from '../abstract-base-vc-calculator';
|
|
2
|
+
import isViewportEntryData from '../utils/is-viewport-entry-data';
|
|
3
|
+
const ABORTING_WINDOW_EVENT = ['wheel', 'scroll', 'keydown', 'resize'];
|
|
4
|
+
const REVISION_NO = 'fy25.03';
|
|
5
|
+
const CONSIDERED_ENTRY_TYPE = ['mutation:child-element', 'mutation:element', 'mutation:attribute', 'layout-shift', 'window:event'];
|
|
6
|
+
export default class VCCalculator_FY25_03 extends AbstractVCCalculatorBase {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(REVISION_NO);
|
|
9
|
+
}
|
|
10
|
+
isEntryIncluded(entry) {
|
|
11
|
+
if (!CONSIDERED_ENTRY_TYPE.includes(entry.type)) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
if (entry.type === 'mutation:attribute') {
|
|
15
|
+
const entryData = entry.data;
|
|
16
|
+
const attributeName = entryData.attributeName;
|
|
17
|
+
if (!attributeName) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
if (isViewportEntryData(entry.data) && !entry.data.visible) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
isVCClean(filteredEntries) {
|
|
28
|
+
const hasAbortEvent = filteredEntries.some(entry => {
|
|
29
|
+
if (entry.type === 'window:event') {
|
|
30
|
+
const data = entry.data;
|
|
31
|
+
if (ABORTING_WINDOW_EVENT.includes(data.eventType)) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
});
|
|
37
|
+
return !hasAbortEvent;
|
|
38
|
+
}
|
|
39
|
+
}
|