@envive-ai/react-hooks 0.3.63 → 0.3.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/application/models/featureGates.cjs +2 -1
- package/dist/application/models/featureGates.d.cts +2 -1
- package/dist/application/models/featureGates.d.ts +2 -1
- package/dist/application/models/featureGates.js +2 -1
- package/dist/application/utils/elementObserver.d.cts +2 -2
- package/dist/atoms/app/index.d.cts +7 -7
- package/dist/atoms/app/variant.d.cts +6 -6
- package/dist/atoms/chat/chatState.d.cts +19 -19
- package/dist/atoms/chat/chatState.d.ts +19 -19
- package/dist/atoms/chat/form.d.cts +2 -2
- package/dist/atoms/chat/form.d.ts +2 -2
- package/dist/atoms/chat/index.d.cts +2 -2
- package/dist/atoms/chat/index.d.ts +3 -3
- package/dist/atoms/chat/lastMessage.d.cts +2 -2
- package/dist/atoms/chat/lastMessage.d.ts +2 -2
- package/dist/atoms/chat/messageQueue.d.cts +7 -7
- package/dist/atoms/chat/messageQueue.d.ts +6 -6
- package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
- package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
- package/dist/atoms/chat/renderedWidgetRefs.d.cts +3 -3
- package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
- package/dist/atoms/chat/replies.d.cts +3 -3
- package/dist/atoms/chat/replies.d.ts +3 -3
- package/dist/atoms/chat/suggestions.d.cts +3 -3
- package/dist/atoms/chat/suggestions.d.ts +2 -2
- package/dist/atoms/envive/enviveConfig.d.cts +14 -14
- package/dist/atoms/envive/enviveConfig.d.ts +14 -14
- package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
- package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
- package/dist/atoms/org/customerService.d.cts +6 -6
- package/dist/atoms/org/customerService.d.ts +6 -6
- package/dist/atoms/org/graphqlConfig.d.cts +4 -4
- package/dist/atoms/org/graphqlConfig.d.ts +4 -4
- package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
- package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
- package/dist/atoms/org/orgAnalyticsConfig.d.cts +4 -4
- package/dist/atoms/org/orgAnalyticsConfig.d.ts +4 -4
- package/dist/atoms/search/chatSearch.d.cts +17 -17
- package/dist/atoms/search/chatSearch.d.ts +17 -17
- package/dist/atoms/search/searchAPI.d.cts +13 -13
- package/dist/atoms/search/searchAPI.d.ts +13 -13
- package/dist/atoms/search/types.d.cts +1 -1
- package/dist/atoms/search/utils.d.cts +1 -1
- package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
- package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
- package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
- package/dist/contexts/types.d.cts +1 -1
- package/dist/contexts/types.d.ts +1 -1
- package/dist/contexts/typesV3.d.cts +1 -1
- package/dist/contexts/typesV3.d.ts +1 -1
- package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.cts +2 -2
- package/dist/hooks/Intersection/useIntersection.cjs +9 -2
- package/dist/hooks/Intersection/useIntersection.d.cts +2 -2
- package/dist/hooks/Intersection/useIntersection.d.ts +2 -2
- package/dist/hooks/Intersection/useIntersection.js +9 -2
- package/dist/hooks/SystemSettingsContext/useSystemSettingsContext.d.cts +2 -2
- package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.cjs +12 -3
- package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.d.cts +2 -1
- package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.d.ts +2 -1
- package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.js +13 -4
- package/dist/hooks/WidgetLoadDiagnostics/index.cjs +4 -0
- package/dist/hooks/WidgetLoadDiagnostics/index.d.cts +2 -0
- package/dist/hooks/WidgetLoadDiagnostics/index.d.ts +2 -0
- package/dist/hooks/WidgetLoadDiagnostics/index.js +3 -0
- package/dist/hooks/WidgetLoadDiagnostics/useWidgetLoadDiagnostics.cjs +122 -0
- package/dist/hooks/WidgetLoadDiagnostics/useWidgetLoadDiagnostics.d.cts +48 -0
- package/dist/hooks/WidgetLoadDiagnostics/useWidgetLoadDiagnostics.d.ts +48 -0
- package/dist/hooks/WidgetLoadDiagnostics/useWidgetLoadDiagnostics.js +120 -0
- package/dist/hooks/utils.d.cts +1 -1
- package/dist/hooks/utils.d.ts +1 -1
- package/dist/services/amplitudeService/eventNames.cjs +2 -1
- package/dist/services/amplitudeService/eventNames.d.cts +2 -1
- package/dist/services/amplitudeService/eventNames.d.ts +2 -1
- package/dist/services/amplitudeService/eventNames.js +2 -1
- package/dist/services/ga4ProjectionService/ga4EventSchema.cjs +3 -2
- package/dist/services/ga4ProjectionService/ga4EventSchema.js +3 -2
- package/dist/services/hardcopyService/hardcopyService.cjs +12 -3
- package/dist/services/hardcopyService/hardcopyService.d.cts +3 -1
- package/dist/services/hardcopyService/hardcopyService.d.ts +3 -1
- package/dist/services/hardcopyService/hardcopyService.js +12 -3
- package/package.json +5 -1
- package/src/application/models/featureGates.ts +6 -0
- package/src/hooks/Intersection/useIntersection.ts +11 -0
- package/src/hooks/TrackComponentVisibleEvent/__tests__/useTrackComponentVisibleEvent.test.tsx +64 -0
- package/src/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.ts +23 -4
- package/src/hooks/WidgetLoadDiagnostics/__tests__/useWidgetLoadDiagnostics.test.ts +161 -0
- package/src/hooks/WidgetLoadDiagnostics/index.ts +5 -0
- package/src/hooks/WidgetLoadDiagnostics/useWidgetLoadDiagnostics.ts +178 -0
- package/src/services/amplitudeService/eventNames.ts +4 -0
- package/src/services/ga4ProjectionService/ga4EventSchema.ts +5 -0
- package/src/services/hardcopyService/__tests__/hardcopyService.test.ts +16 -5
- package/src/services/hardcopyService/hardcopyService.ts +10 -2
|
@@ -11,12 +11,15 @@ const isOnScreen = (node) => {
|
|
|
11
11
|
if (rect.width <= 0 || rect.height <= 0) return false;
|
|
12
12
|
return rect.top < window.innerHeight && rect.bottom > 0 && rect.left < window.innerWidth && rect.right > 0;
|
|
13
13
|
};
|
|
14
|
-
const useIntersection = (element, rootMargin, logContext) => {
|
|
14
|
+
const useIntersection = (element, rootMargin, logContext, onFallbackEngaged) => {
|
|
15
15
|
const [isVisible, setIsVisible] = useState(false);
|
|
16
16
|
const observerRef = useRef(null);
|
|
17
17
|
const observedNodeRef = useRef(null);
|
|
18
18
|
const logContextRef = useRef(logContext);
|
|
19
19
|
logContextRef.current = logContext;
|
|
20
|
+
const onFallbackEngagedRef = useRef(onFallbackEngaged);
|
|
21
|
+
onFallbackEngagedRef.current = onFallbackEngaged;
|
|
22
|
+
const fallbackEngagedRef = useRef(false);
|
|
20
23
|
useEffect(() => {
|
|
21
24
|
const current = element?.current;
|
|
22
25
|
if (!current) return;
|
|
@@ -39,6 +42,10 @@ const useIntersection = (element, rootMargin, logContext) => {
|
|
|
39
42
|
...logContextRef.current,
|
|
40
43
|
fallback_interval_ms: VISIBILITY_FALLBACK_INTERVAL_MS
|
|
41
44
|
});
|
|
45
|
+
if (!fallbackEngagedRef.current) {
|
|
46
|
+
fallbackEngagedRef.current = true;
|
|
47
|
+
onFallbackEngagedRef.current?.();
|
|
48
|
+
}
|
|
42
49
|
setIsVisible(true);
|
|
43
50
|
}
|
|
44
51
|
};
|
|
@@ -72,4 +79,4 @@ const useIntersection = (element, rootMargin, logContext) => {
|
|
|
72
79
|
|
|
73
80
|
//#endregion
|
|
74
81
|
export { VISIBILITY_FALLBACK_GRACE_MS, VISIBILITY_FALLBACK_INTERVAL_MS, VISIBILITY_FOREGROUND_GRACE_MS, useIntersection };
|
|
75
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlSW50ZXJzZWN0aW9uLmpzIiwibmFtZXMiOlsiTG9nZ2VyIiwiaW50ZXJ2YWw6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IHVuZGVmaW5lZCIsImZvcmVncm91bmRDaGVjazogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvSW50ZXJzZWN0aW9uL3VzZUludGVyc2VjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWZPYmplY3QsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigndXNlSW50ZXJzZWN0aW9uJyk7XG5cbi8vIEhvdyBsb25nIHRvIHdhaXQgYmVmb3JlIHRoZSBmYWxsYmFjaydzIEZJUlNUIHJlY29uY2lsZS4gTG9uZyBlbm91Z2ggdGhhdCBhIGhlYWx0aHlcbi8vIEludGVyc2VjdGlvbk9ic2VydmVyIGhhcyBkZWxpdmVyZWQgaXRzIGluaXRpYWwgY2FsbGJhY2sgKHNvIHdlIGRvbid0IGZhbHNlbHkgZmxhZyBhXG4vLyBub3JtYWxseS1sb2FkaW5nIHdpZGdldCksIHNob3J0IGVub3VnaCB0byBrZWVwIHRoZSB3b3JzdC1jYXNlIGJsYW5rIHdpbmRvdyBzbWFsbC5cbi8vIEV4cG9ydGVkIGZvciB0ZXN0cy5cbmV4cG9ydCBjb25zdCBWSVNJQklMSVRZX0ZBTExCQUNLX0dSQUNFX01TID0gMTAwMDtcblxuLy8gSG93IG9mdGVuIHRoZSBmYWxsYmFjayByZS1jaGVja3MgYWZ0ZXIgdGhlIGluaXRpYWwgZ3JhY2UuIEEgZ2VudWluZWx5IHN0dWNrIHdpZGdldFxuLy8gcmVjb3ZlcnMgd2l0aGluIGdyYWNlICsgb25lIGludGVydmFsICh+MS4zcykuIEV4cG9ydGVkIGZvciB0ZXN0cy5cbmV4cG9ydCBjb25zdCBWSVNJQklMSVRZX0ZBTExCQUNLX0lOVEVSVkFMX01TID0gMzAwO1xuXG4vLyBBZnRlciB0aGUgdGFiIHJldHVybnMgdG8gdGhlIGZvcmVncm91bmQsIGhvdyBsb25nIHRvIHdhaXQgYmVmb3JlIHRoZSBmYXN0LXBhdGggcmVjb25jaWxlIOKAlFxuLy8gbG9uZyBlbm91Z2ggZm9yIGEgaGVhbHRoeSBvYnNlcnZlciB0byByZS1maXJlIG9uIGl0cyBvd24gKHNvIHdlIGRvbid0IGZhbHNlbHkgZmxhZyBpdCksXG4vLyBzaG9ydCBlbm91Z2ggdGhhdCByZWNvdmVyeSBpcyBuZWFyLWluc3RhbnQuIEV4cG9ydGVkIGZvciB0ZXN0cy5cbmV4cG9ydCBjb25zdCBWSVNJQklMSVRZX0ZPUkVHUk9VTkRfR1JBQ0VfTVMgPSAyMDA7XG5cbmNvbnN0IGlzT25TY3JlZW4gPSAobm9kZTogSFRNTEVsZW1lbnQpOiBib29sZWFuID0+IHtcbiAgY29uc3QgcmVjdCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIC8vIFJlcXVpcmUgcmVhbCBhcmVhOiBhbiBlbGVtZW50IHRoYXQgaGFzIG5vdCBsYWlkIG91dCB5ZXQgKGEgMMOXMCBpbmxpbmUgd3JhcHBlciBtaWQtbW91bnQpXG4gIC8vIG9yIGlzIGNvbGxhcHNlZCB0byB6ZXJvIGJ5IGFuIG92ZXJmbG93LWNsaXBwaW5nIGFuY2VzdG9yIGlzIG5vdCBzb21ldGhpbmcgdGhlIG9ic2VydmVyXG4gIC8vIHdyb25nbHkgbWlzc2VkIOKAlCBpdCBpcyBnZW51aW5lbHkgbm90IHZpc2libGUuIGRpc3BsYXk6bm9uZSBzdWJ0cmVlcyByZXBvcnQgYW4gYWxsLXplcm9cbiAgLy8gcmVjdCBhbmQgYXJlIGV4Y2x1ZGVkIGhlcmUgdG9vLlxuICBpZiAocmVjdC53aWR0aCA8PSAwIHx8IHJlY3QuaGVpZ2h0IDw9IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICByZWN0LnRvcCA8IHdpbmRvdy5pbm5lckhlaWdodCAmJlxuICAgIHJlY3QuYm90dG9tID4gMCAmJlxuICAgIHJlY3QubGVmdCA8IHdpbmRvdy5pbm5lcldpZHRoICYmXG4gICAgcmVjdC5yaWdodCA+IDBcbiAgKTtcbn07XG5cbi8vIGh0dHBzOi8vcmFzaWxiYWlkYXIubWVkaXVtLmNvbS90cmlnZ2VyLWV2ZW50LXdoZW4tZWxlbWVudC1lbnRlcnMtdmlld3BvcnQtdGhlLXJlYWN0LXdheS0xNjg1MDlkYTJlMjNcbmV4cG9ydCBjb25zdCB1c2VJbnRlcnNlY3Rpb24gPSAoXG4gIGVsZW1lbnQ6IFJlZk9iamVjdDxIVE1MRWxlbWVudD4sXG4gIHJvb3RNYXJnaW46IHN0cmluZyxcbiAgbG9nQ29udGV4dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKSA9PiB7XG4gIGNvbnN0IFtpc1Zpc2libGUsIHNldElzVmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IG9ic2VydmVyUmVmID0gdXNlUmVmPEludGVyc2VjdGlvbk9ic2VydmVyIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IG9ic2VydmVkTm9kZVJlZiA9IHVzZVJlZjxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCBsb2dDb250ZXh0UmVmID0gdXNlUmVmKGxvZ0NvbnRleHQpO1xuICBsb2dDb250ZXh0UmVmLmN1cnJlbnQgPSBsb2dDb250ZXh0O1xuXG4gIC8vIFJ1bnMgYWZ0ZXIgZXZlcnkgcmVuZGVyIHNvIGl0IGNhdGNoZXMgd2hlbiBlbGVtZW50LmN1cnJlbnQgdHJhbnNpdGlvbnMgZnJvbSBudWxsIHRvIGFcbiAgLy8gbW91bnRlZCBET00gbm9kZSwgQU5EIHdoZW4gdGhlIG5vZGUgdW5kZXIgdGhlIHJlZiBpcyByZXBsYWNlZC4gVGhlIHJlcGxhY2VtZW50IGNhc2UgaXNcbiAgLy8gbG9hZC1iZWFyaW5nOiBtb3VudCBjaHVybiAoZS5nLiB0aGUgc2hhZG93LXJvb3QgcG9ydGFsIHJlLWNyZWF0aW5nIHRoZSB3aWRnZXQgc3VidHJlZSlcbiAgLy8gY2FuIHN3YXAgdGhlIERPTSBub2RlIHdoaWxlIHRoaXMgaG9vayBpbnN0YW5jZSBzdXJ2aXZlcywgYW5kIGFuIG9ic2VydmVyIGxlZnQgb24gdGhlXG4gIC8vIGRldGFjaGVkIG9sZCBub2RlIG5ldmVyIGZpcmVzIGFnYWluIOKAlCB0aGUgd2lkZ2V0IHRoZW4gcmVhZHMgYXMgcGVybWFuZW50bHkgbm90LXZpc2libGVcbiAgLy8gYW5kIG5ldmVyIHN0YXJ0cyBsb2FkaW5nLiBCYWlscyBvbmNlIHRoZSBjdXJyZW50IG5vZGUgaXMgdGhlIG9uZSBiZWluZyBvYnNlcnZlZCxcbiAgLy8ga2VlcGluZyBwZXItcmVuZGVyIGNvc3QgTygxKS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gZWxlbWVudD8uY3VycmVudDtcbiAgICBpZiAoIWN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9ic2VydmVkTm9kZVJlZi5jdXJyZW50ID09PSBjdXJyZW50KSByZXR1cm47IC8vIGFscmVhZHkgb2JzZXJ2aW5nIHRoaXMgZXhhY3Qgbm9kZVxuXG4gICAgaWYgKG9ic2VydmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIC8vIE5vZGUgdW5kZXIgdGhlIHJlZiB3YXMgcmVwbGFjZWQg4oCUIGRyb3AgdGhlIG9ic2VydmVyIG9uIHRoZSBkZXRhY2hlZCBub2RlLlxuICAgICAgb2JzZXJ2ZXJSZWYuY3VycmVudC5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAoW2VudHJ5XSkgPT4ge1xuICAgICAgICBzZXRJc1Zpc2libGUoZW50cnkuaXNJbnRlcnNlY3RpbmcpO1xuICAgICAgfSxcbiAgICAgIHsgcm9vdE1hcmdpbiB9LFxuICAgICk7XG5cbiAgICBvYnNlcnZlci5vYnNlcnZlKGN1cnJlbnQpO1xuICAgIG9ic2VydmVyUmVmLmN1cnJlbnQgPSBvYnNlcnZlcjtcbiAgICBvYnNlcnZlZE5vZGVSZWYuY3VycmVudCA9IGN1cnJlbnQ7XG4gIH0pO1xuXG4gIC8vIFNhZmV0eSBuZXQ6IHZpc2liaWxpdHkgZGV0ZWN0aW9uIG11c3Qgbm90IGJlIGEgc2luZ2xlIHBvaW50IG9mIGZhaWx1cmUuIFdoaWxlIHRoZVxuICAvLyBvYnNlcnZlciByZXBvcnRzIG5vdC12aXNpYmxlLCBwZXJpb2RpY2FsbHkgcmVjb25jaWxlIGFnYWluc3QgdGhlIGVsZW1lbnQncyBhY3R1YWxcbiAgLy8gcG9zaXRpb247IGFuIGVsZW1lbnQgdGhhdCBpcyBvbiBzY3JlZW4gd2hpbGUgdGhlIG9ic2VydmVyIHN0YXllZCBzaWxlbnQgbWVhbnNcbiAgLy8gb2JzZXJ2YXRpb24gaXMgYnJva2VuIGZvciBhIHJlYXNvbiB3ZSBoYXZlbid0IG1ldCB5ZXQgKHdyYXBwZWQvb3ZlcnJpZGRlblxuICAvLyBJbnRlcnNlY3Rpb25PYnNlcnZlciwgZW5naW5lIHF1aXJrLCBhIGZhaWx1cmUgbW9kZSBsaWtlIHRoZSBzdGFsZS1ub2RlIGJ1ZykuIFJlcG9ydCBpdFxuICAvLyBhcyBhIGNvbnNvbGUgZXJyb3IgKHNvIHNlc3Npb24gdG9vbHMgY2FuIGNvdW50IGFmZmVjdGVkIHNlc3Npb25zKSBhbmQgdHJlYXQgdGhlXG4gIC8vIGVsZW1lbnQgYXMgdmlzaWJsZSBzbyBpdCBzdGlsbCBsb2Fkcy5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY29uY2lsZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSBlbGVtZW50Py5jdXJyZW50O1xuICAgICAgaWYgKCFub2RlIHx8ICFub2RlLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpc09uU2NyZWVuKG5vZGUpKSB7XG4gICAgICAgIC8vIFJlY292ZXIgdGhlIHdpZGdldCByZWdhcmRsZXNzIG9mIGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZS4gVGhlIGVudmlyb25tZW50cyB0aGlzXG4gICAgICAgIC8vIGZhbGxiYWNrIGV4aXN0cyBmb3Ig4oCUIGlPUy9XZWJLaXQgaW4tYXBwIHdlYnZpZXdzIGFuZCBiZmNhY2hlIHJlc3RvcmVzIOKAlCBjYW4gcmVwb3J0XG4gICAgICAgIC8vIHRoZSBkb2N1bWVudCBhcyBoaWRkZW4gZXZlbiB3aGlsZSB0aGUgc2hvcHBlciBpcyBsb29raW5nIGF0IGl0LCBzbyBnYXRpbmcgcmVjb3ZlcnlcbiAgICAgICAgLy8gb24gdmlzaWJpbGl0eSB3b3VsZCBkZWZlYXQgdGhlIGZpeCBpbiBleGFjdGx5IHRob3NlIGNhc2VzLiBPbmx5IExPRyBhIGdlbnVpbmVcbiAgICAgICAgLy8gZmFpbHVyZSB3aGVuIHRoZSBwYWdlIGlzIGFjdHVhbGx5IHZpc2libGUsIHNvIGEgbGVnaXRpbWF0ZWx5IHN1cHByZXNzZWQgb2JzZXJ2ZXIgaW5cbiAgICAgICAgLy8gYSBoaWRkZW4vYmFja2dyb3VuZCB0YWIgZG9lcyBub3QgZmxvb2QgZXJyb3IgdGVsZW1ldHJ5IHdpdGggZmFsc2UgcG9zaXRpdmVzLlxuICAgICAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAndmlzaWJsZScpIHtcbiAgICAgICAgICBsb2dnZXIubG9nRXJyb3IoXG4gICAgICAgICAgICAnVmlzaWJpbGl0eSBmYWxsYmFjayBlbmdhZ2VkIOKAlCBlbGVtZW50IGlzIG9uIHNjcmVlbiBidXQgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgbmV2ZXIgcmVwb3J0ZWQgaXQnLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5sb2dDb250ZXh0UmVmLmN1cnJlbnQsXG4gICAgICAgICAgICAgIGZhbGxiYWNrX2ludGVydmFsX21zOiBWSVNJQklMSVRZX0ZBTExCQUNLX0lOVEVSVkFMX01TLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHNldElzVmlzaWJsZSh0cnVlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gR2l2ZSB0aGUgcmVhbCBvYnNlcnZlciBhIGdyYWNlIHdpbmRvdyB0byBkZWxpdmVyIGl0cyBpbml0aWFsIGNhbGxiYWNrLCB0aGVuIHBvbGwgb24gYVxuICAgIC8vIHNob3J0ZXIgY2FkZW5jZSBzbyBhIGdlbnVpbmVseSBzdHVjayB3aWRnZXQgcmVjb3ZlcnMgcXVpY2tseS5cbiAgICBsZXQgaW50ZXJ2YWw6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBncmFjZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgcmVjb25jaWxlKCk7XG4gICAgICBpbnRlcnZhbCA9IHNldEludGVydmFsKHJlY29uY2lsZSwgVklTSUJJTElUWV9GQUxMQkFDS19JTlRFUlZBTF9NUyk7XG4gICAgfSwgVklTSUJJTElUWV9GQUxMQkFDS19HUkFDRV9NUyk7XG5cbiAgICAvLyBGYXN0IHBhdGg6IGEgd2lkZ2V0IGNvbXBvc2l0ZWQgd2hpbGUgdGhlIHRhYiB3YXMgaGlkZGVuIGNhbiBoYXZlIGl0c1xuICAgIC8vIEludGVyc2VjdGlvbk9ic2VydmVyIHN1cHByZXNzZWQsIGFuZCBzb21lIGVuZ2luZXMgZmFpbCB0byByZS1maXJlIGl0IHdoZW4gdGhlIHRhYlxuICAgIC8vIHJldHVybnMgdG8gdGhlIGZvcmVncm91bmQgZm9yIGFuIGVsZW1lbnQgYWxyZWFkeSBpbiB0aGUgdmlld3BvcnQuIE9uIHZpc2liaWxpdHlcbiAgICAvLyBjaGFuZ2UsIHJlY29uY2lsZSBhZnRlciBhIHNob3J0IGdyYWNlIOKAlCBpZiBhIGhlYWx0aHkgb2JzZXJ2ZXIgcmUtZmlyZXMgZmlyc3QsXG4gICAgLy8gaXNWaXNpYmxlIGZsaXBzIGFuZCB0aGlzIGVmZmVjdCB0ZWFycyB0aGUgdGltZXIgZG93biBiZWZvcmUgaXQgcnVucy5cbiAgICBsZXQgZm9yZWdyb3VuZENoZWNrOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBvblZpc2liaWxpdHlDaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlICE9PSAndmlzaWJsZScpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZm9yZWdyb3VuZENoZWNrID0gc2V0VGltZW91dChyZWNvbmNpbGUsIFZJU0lCSUxJVFlfRk9SRUdST1VORF9HUkFDRV9NUyk7XG4gICAgfTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgb25WaXNpYmlsaXR5Q2hhbmdlKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQoZ3JhY2UpO1xuICAgICAgaWYgKGludGVydmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICB9XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgb25WaXNpYmlsaXR5Q2hhbmdlKTtcbiAgICAgIGlmIChmb3JlZ3JvdW5kQ2hlY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoZm9yZWdyb3VuZENoZWNrKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbaXNWaXNpYmxlLCBlbGVtZW50XSk7XG5cbiAgLy8gRGlzY29ubmVjdCBvbiB1bm1vdW50IG9ubHkg4oCUIGludGVudGlvbmFsbHkgc2VwYXJhdGUgZnJvbSB0aGUgc2V0dXAgZWZmZWN0IGFib3ZlLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBvYnNlcnZlclJlZi5jdXJyZW50Py5kaXNjb25uZWN0KCk7XG4gICAgICBvYnNlcnZlclJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgIG9ic2VydmVkTm9kZVJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIGlzVmlzaWJsZTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFHQSxNQUFNLFNBQVMsSUFBSUEsZUFBTyxrQkFBa0I7QUFNNUMsTUFBYSwrQkFBK0I7QUFJNUMsTUFBYSxrQ0FBa0M7QUFLL0MsTUFBYSxpQ0FBaUM7QUFFOUMsTUFBTSxjQUFjLFNBQStCO0NBQ2pELE1BQU0sT0FBTyxLQUFLLHVCQUF1QjtBQUt6QyxLQUFJLEtBQUssU0FBUyxLQUFLLEtBQUssVUFBVSxFQUNwQyxRQUFPO0FBRVQsUUFDRSxLQUFLLE1BQU0sT0FBTyxlQUNsQixLQUFLLFNBQVMsS0FDZCxLQUFLLE9BQU8sT0FBTyxjQUNuQixLQUFLLFFBQVE7O0FBS2pCLE1BQWEsbUJBQ1gsU0FDQSxZQUNBLGVBQ0c7Q0FDSCxNQUFNLENBQUMsV0FBVyxnQkFBZ0IsU0FBUyxNQUFNO0NBQ2pELE1BQU0sY0FBYyxPQUFvQyxLQUFLO0NBQzdELE1BQU0sa0JBQWtCLE9BQTJCLEtBQUs7Q0FDeEQsTUFBTSxnQkFBZ0IsT0FBTyxXQUFXO0FBQ3hDLGVBQWMsVUFBVTtBQVN4QixpQkFBZ0I7RUFDZCxNQUFNLFVBQVUsU0FBUztBQUN6QixNQUFJLENBQUMsUUFDSDtBQUVGLE1BQUksZ0JBQWdCLFlBQVksUUFBUztBQUV6QyxNQUFJLFlBQVksUUFFZCxhQUFZLFFBQVEsWUFBWTtFQUdsQyxNQUFNLFdBQVcsSUFBSSxzQkFDbEIsQ0FBQyxXQUFXO0FBQ1gsZ0JBQWEsTUFBTSxlQUFlO0tBRXBDLEVBQUUsWUFBWSxDQUNmO0FBRUQsV0FBUyxRQUFRLFFBQVE7QUFDekIsY0FBWSxVQUFVO0FBQ3RCLGtCQUFnQixVQUFVO0dBQzFCO0FBU0YsaUJBQWdCO0FBQ2QsTUFBSSxVQUNGO0VBR0YsTUFBTSxrQkFBa0I7R0FDdEIsTUFBTSxPQUFPLFNBQVM7QUFDdEIsT0FBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFlBQ2pCO0FBRUYsT0FBSSxXQUFXLEtBQUssRUFBRTtBQU9wQixRQUFJLFNBQVMsb0JBQW9CLFVBQy9CLFFBQU8sU0FDTCxpR0FDQSxRQUNBO0tBQ0UsR0FBRyxjQUFjO0tBQ2pCLHNCQUFzQjtLQUN2QixDQUNGO0FBRUgsaUJBQWEsS0FBSzs7O0VBTXRCLElBQUlDO0VBQ0osTUFBTSxRQUFRLGlCQUFpQjtBQUM3QixjQUFXO0FBQ1gsY0FBVyxZQUFZLFdBQVcsZ0NBQWdDO0tBQ2pFLDZCQUE2QjtFQU9oQyxJQUFJQztFQUNKLE1BQU0sMkJBQTJCO0FBQy9CLE9BQUksU0FBUyxvQkFBb0IsVUFDL0I7QUFFRixxQkFBa0IsV0FBVyxXQUFXLCtCQUErQjs7QUFFekUsV0FBUyxpQkFBaUIsb0JBQW9CLG1CQUFtQjtBQUVqRSxlQUFhO0FBQ1gsZ0JBQWEsTUFBTTtBQUNuQixPQUFJLGFBQWEsT0FDZixlQUFjLFNBQVM7QUFFekIsWUFBUyxvQkFBb0Isb0JBQW9CLG1CQUFtQjtBQUNwRSxPQUFJLG9CQUFvQixPQUN0QixjQUFhLGdCQUFnQjs7SUFHaEMsQ0FBQyxXQUFXLFFBQVEsQ0FBQztBQUd4QixpQkFBZ0I7QUFDZCxlQUFhO0FBQ1gsZUFBWSxTQUFTLFlBQVk7QUFDakMsZUFBWSxVQUFVO0FBQ3RCLG1CQUFnQixVQUFVOztJQUUzQixFQUFFLENBQUM7QUFFTixRQUFPIn0=
|
|
82
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlSW50ZXJzZWN0aW9uLmpzIiwibmFtZXMiOlsiTG9nZ2VyIiwiaW50ZXJ2YWw6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IHVuZGVmaW5lZCIsImZvcmVncm91bmRDaGVjazogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvSW50ZXJzZWN0aW9uL3VzZUludGVyc2VjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWZPYmplY3QsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigndXNlSW50ZXJzZWN0aW9uJyk7XG5cbi8vIEhvdyBsb25nIHRvIHdhaXQgYmVmb3JlIHRoZSBmYWxsYmFjaydzIEZJUlNUIHJlY29uY2lsZS4gTG9uZyBlbm91Z2ggdGhhdCBhIGhlYWx0aHlcbi8vIEludGVyc2VjdGlvbk9ic2VydmVyIGhhcyBkZWxpdmVyZWQgaXRzIGluaXRpYWwgY2FsbGJhY2sgKHNvIHdlIGRvbid0IGZhbHNlbHkgZmxhZyBhXG4vLyBub3JtYWxseS1sb2FkaW5nIHdpZGdldCksIHNob3J0IGVub3VnaCB0byBrZWVwIHRoZSB3b3JzdC1jYXNlIGJsYW5rIHdpbmRvdyBzbWFsbC5cbi8vIEV4cG9ydGVkIGZvciB0ZXN0cy5cbmV4cG9ydCBjb25zdCBWSVNJQklMSVRZX0ZBTExCQUNLX0dSQUNFX01TID0gMTAwMDtcblxuLy8gSG93IG9mdGVuIHRoZSBmYWxsYmFjayByZS1jaGVja3MgYWZ0ZXIgdGhlIGluaXRpYWwgZ3JhY2UuIEEgZ2VudWluZWx5IHN0dWNrIHdpZGdldFxuLy8gcmVjb3ZlcnMgd2l0aGluIGdyYWNlICsgb25lIGludGVydmFsICh+MS4zcykuIEV4cG9ydGVkIGZvciB0ZXN0cy5cbmV4cG9ydCBjb25zdCBWSVNJQklMSVRZX0ZBTExCQUNLX0lOVEVSVkFMX01TID0gMzAwO1xuXG4vLyBBZnRlciB0aGUgdGFiIHJldHVybnMgdG8gdGhlIGZvcmVncm91bmQsIGhvdyBsb25nIHRvIHdhaXQgYmVmb3JlIHRoZSBmYXN0LXBhdGggcmVjb25jaWxlIOKAlFxuLy8gbG9uZyBlbm91Z2ggZm9yIGEgaGVhbHRoeSBvYnNlcnZlciB0byByZS1maXJlIG9uIGl0cyBvd24gKHNvIHdlIGRvbid0IGZhbHNlbHkgZmxhZyBpdCksXG4vLyBzaG9ydCBlbm91Z2ggdGhhdCByZWNvdmVyeSBpcyBuZWFyLWluc3RhbnQuIEV4cG9ydGVkIGZvciB0ZXN0cy5cbmV4cG9ydCBjb25zdCBWSVNJQklMSVRZX0ZPUkVHUk9VTkRfR1JBQ0VfTVMgPSAyMDA7XG5cbmNvbnN0IGlzT25TY3JlZW4gPSAobm9kZTogSFRNTEVsZW1lbnQpOiBib29sZWFuID0+IHtcbiAgY29uc3QgcmVjdCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIC8vIFJlcXVpcmUgcmVhbCBhcmVhOiBhbiBlbGVtZW50IHRoYXQgaGFzIG5vdCBsYWlkIG91dCB5ZXQgKGEgMMOXMCBpbmxpbmUgd3JhcHBlciBtaWQtbW91bnQpXG4gIC8vIG9yIGlzIGNvbGxhcHNlZCB0byB6ZXJvIGJ5IGFuIG92ZXJmbG93LWNsaXBwaW5nIGFuY2VzdG9yIGlzIG5vdCBzb21ldGhpbmcgdGhlIG9ic2VydmVyXG4gIC8vIHdyb25nbHkgbWlzc2VkIOKAlCBpdCBpcyBnZW51aW5lbHkgbm90IHZpc2libGUuIGRpc3BsYXk6bm9uZSBzdWJ0cmVlcyByZXBvcnQgYW4gYWxsLXplcm9cbiAgLy8gcmVjdCBhbmQgYXJlIGV4Y2x1ZGVkIGhlcmUgdG9vLlxuICBpZiAocmVjdC53aWR0aCA8PSAwIHx8IHJlY3QuaGVpZ2h0IDw9IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICByZWN0LnRvcCA8IHdpbmRvdy5pbm5lckhlaWdodCAmJlxuICAgIHJlY3QuYm90dG9tID4gMCAmJlxuICAgIHJlY3QubGVmdCA8IHdpbmRvdy5pbm5lcldpZHRoICYmXG4gICAgcmVjdC5yaWdodCA+IDBcbiAgKTtcbn07XG5cbi8vIGh0dHBzOi8vcmFzaWxiYWlkYXIubWVkaXVtLmNvbS90cmlnZ2VyLWV2ZW50LXdoZW4tZWxlbWVudC1lbnRlcnMtdmlld3BvcnQtdGhlLXJlYWN0LXdheS0xNjg1MDlkYTJlMjNcbmV4cG9ydCBjb25zdCB1c2VJbnRlcnNlY3Rpb24gPSAoXG4gIGVsZW1lbnQ6IFJlZk9iamVjdDxIVE1MRWxlbWVudD4sXG4gIHJvb3RNYXJnaW46IHN0cmluZyxcbiAgbG9nQ29udGV4dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAvLyBDYWxsZWQgdGhlIGZpcnN0IHRpbWUgdmlzaWJpbGl0eSBpcyBmb3JjZWQgYnkgdGhlIHJlY29uY2lsZSBmYWxsYmFjayAob2JzZXJ2ZXIgc3RheWVkXG4gIC8vIHNpbGVudCBmb3IgYW4gb24tc2NyZWVuIGVsZW1lbnQpLiBMZXRzIGNhbGxlcnMgcmVjb3JkIHRoYXQgdGhpcyB3aWRnZXQncyB2aXNpYmlsaXR5IGNhbWVcbiAgLy8gZnJvbSB0aGUgZmFsbGJhY2sgcmF0aGVyIHRoYW4gdGhlIG9ic2VydmVyIOKAlCB0aGUgZGlhZ25vc3RpYyBmb3Igb2JzZXJ2ZXIgZmFpbHVyZXMuXG4gIG9uRmFsbGJhY2tFbmdhZ2VkPzogKCkgPT4gdm9pZCxcbikgPT4ge1xuICBjb25zdCBbaXNWaXNpYmxlLCBzZXRJc1Zpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBvYnNlcnZlclJlZiA9IHVzZVJlZjxJbnRlcnNlY3Rpb25PYnNlcnZlciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBvYnNlcnZlZE5vZGVSZWYgPSB1c2VSZWY8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgbG9nQ29udGV4dFJlZiA9IHVzZVJlZihsb2dDb250ZXh0KTtcbiAgbG9nQ29udGV4dFJlZi5jdXJyZW50ID0gbG9nQ29udGV4dDtcbiAgY29uc3Qgb25GYWxsYmFja0VuZ2FnZWRSZWYgPSB1c2VSZWYob25GYWxsYmFja0VuZ2FnZWQpO1xuICBvbkZhbGxiYWNrRW5nYWdlZFJlZi5jdXJyZW50ID0gb25GYWxsYmFja0VuZ2FnZWQ7XG4gIGNvbnN0IGZhbGxiYWNrRW5nYWdlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG5cbiAgLy8gUnVucyBhZnRlciBldmVyeSByZW5kZXIgc28gaXQgY2F0Y2hlcyB3aGVuIGVsZW1lbnQuY3VycmVudCB0cmFuc2l0aW9ucyBmcm9tIG51bGwgdG8gYVxuICAvLyBtb3VudGVkIERPTSBub2RlLCBBTkQgd2hlbiB0aGUgbm9kZSB1bmRlciB0aGUgcmVmIGlzIHJlcGxhY2VkLiBUaGUgcmVwbGFjZW1lbnQgY2FzZSBpc1xuICAvLyBsb2FkLWJlYXJpbmc6IG1vdW50IGNodXJuIChlLmcuIHRoZSBzaGFkb3ctcm9vdCBwb3J0YWwgcmUtY3JlYXRpbmcgdGhlIHdpZGdldCBzdWJ0cmVlKVxuICAvLyBjYW4gc3dhcCB0aGUgRE9NIG5vZGUgd2hpbGUgdGhpcyBob29rIGluc3RhbmNlIHN1cnZpdmVzLCBhbmQgYW4gb2JzZXJ2ZXIgbGVmdCBvbiB0aGVcbiAgLy8gZGV0YWNoZWQgb2xkIG5vZGUgbmV2ZXIgZmlyZXMgYWdhaW4g4oCUIHRoZSB3aWRnZXQgdGhlbiByZWFkcyBhcyBwZXJtYW5lbnRseSBub3QtdmlzaWJsZVxuICAvLyBhbmQgbmV2ZXIgc3RhcnRzIGxvYWRpbmcuIEJhaWxzIG9uY2UgdGhlIGN1cnJlbnQgbm9kZSBpcyB0aGUgb25lIGJlaW5nIG9ic2VydmVkLFxuICAvLyBrZWVwaW5nIHBlci1yZW5kZXIgY29zdCBPKDEpLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBlbGVtZW50Py5jdXJyZW50O1xuICAgIGlmICghY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob2JzZXJ2ZWROb2RlUmVmLmN1cnJlbnQgPT09IGN1cnJlbnQpIHJldHVybjsgLy8gYWxyZWFkeSBvYnNlcnZpbmcgdGhpcyBleGFjdCBub2RlXG5cbiAgICBpZiAob2JzZXJ2ZXJSZWYuY3VycmVudCkge1xuICAgICAgLy8gTm9kZSB1bmRlciB0aGUgcmVmIHdhcyByZXBsYWNlZCDigJQgZHJvcCB0aGUgb2JzZXJ2ZXIgb24gdGhlIGRldGFjaGVkIG5vZGUuXG4gICAgICBvYnNlcnZlclJlZi5jdXJyZW50LmRpc2Nvbm5lY3QoKTtcbiAgICB9XG5cbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgIChbZW50cnldKSA9PiB7XG4gICAgICAgIHNldElzVmlzaWJsZShlbnRyeS5pc0ludGVyc2VjdGluZyk7XG4gICAgICB9LFxuICAgICAgeyByb290TWFyZ2luIH0sXG4gICAgKTtcblxuICAgIG9ic2VydmVyLm9ic2VydmUoY3VycmVudCk7XG4gICAgb2JzZXJ2ZXJSZWYuY3VycmVudCA9IG9ic2VydmVyO1xuICAgIG9ic2VydmVkTm9kZVJlZi5jdXJyZW50ID0gY3VycmVudDtcbiAgfSk7XG5cbiAgLy8gU2FmZXR5IG5ldDogdmlzaWJpbGl0eSBkZXRlY3Rpb24gbXVzdCBub3QgYmUgYSBzaW5nbGUgcG9pbnQgb2YgZmFpbHVyZS4gV2hpbGUgdGhlXG4gIC8vIG9ic2VydmVyIHJlcG9ydHMgbm90LXZpc2libGUsIHBlcmlvZGljYWxseSByZWNvbmNpbGUgYWdhaW5zdCB0aGUgZWxlbWVudCdzIGFjdHVhbFxuICAvLyBwb3NpdGlvbjsgYW4gZWxlbWVudCB0aGF0IGlzIG9uIHNjcmVlbiB3aGlsZSB0aGUgb2JzZXJ2ZXIgc3RheWVkIHNpbGVudCBtZWFuc1xuICAvLyBvYnNlcnZhdGlvbiBpcyBicm9rZW4gZm9yIGEgcmVhc29uIHdlIGhhdmVuJ3QgbWV0IHlldCAod3JhcHBlZC9vdmVycmlkZGVuXG4gIC8vIEludGVyc2VjdGlvbk9ic2VydmVyLCBlbmdpbmUgcXVpcmssIGEgZmFpbHVyZSBtb2RlIGxpa2UgdGhlIHN0YWxlLW5vZGUgYnVnKS4gUmVwb3J0IGl0XG4gIC8vIGFzIGEgY29uc29sZSBlcnJvciAoc28gc2Vzc2lvbiB0b29scyBjYW4gY291bnQgYWZmZWN0ZWQgc2Vzc2lvbnMpIGFuZCB0cmVhdCB0aGVcbiAgLy8gZWxlbWVudCBhcyB2aXNpYmxlIHNvIGl0IHN0aWxsIGxvYWRzLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcmVjb25jaWxlID0gKCkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IGVsZW1lbnQ/LmN1cnJlbnQ7XG4gICAgICBpZiAoIW5vZGUgfHwgIW5vZGUuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlzT25TY3JlZW4obm9kZSkpIHtcbiAgICAgICAgLy8gUmVjb3ZlciB0aGUgd2lkZ2V0IHJlZ2FyZGxlc3Mgb2YgZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlLiBUaGUgZW52aXJvbm1lbnRzIHRoaXNcbiAgICAgICAgLy8gZmFsbGJhY2sgZXhpc3RzIGZvciDigJQgaU9TL1dlYktpdCBpbi1hcHAgd2Vidmlld3MgYW5kIGJmY2FjaGUgcmVzdG9yZXMg4oCUIGNhbiByZXBvcnRcbiAgICAgICAgLy8gdGhlIGRvY3VtZW50IGFzIGhpZGRlbiBldmVuIHdoaWxlIHRoZSBzaG9wcGVyIGlzIGxvb2tpbmcgYXQgaXQsIHNvIGdhdGluZyByZWNvdmVyeVxuICAgICAgICAvLyBvbiB2aXNpYmlsaXR5IHdvdWxkIGRlZmVhdCB0aGUgZml4IGluIGV4YWN0bHkgdGhvc2UgY2FzZXMuIE9ubHkgTE9HIGEgZ2VudWluZVxuICAgICAgICAvLyBmYWlsdXJlIHdoZW4gdGhlIHBhZ2UgaXMgYWN0dWFsbHkgdmlzaWJsZSwgc28gYSBsZWdpdGltYXRlbHkgc3VwcHJlc3NlZCBvYnNlcnZlciBpblxuICAgICAgICAvLyBhIGhpZGRlbi9iYWNrZ3JvdW5kIHRhYiBkb2VzIG5vdCBmbG9vZCBlcnJvciB0ZWxlbWV0cnkgd2l0aCBmYWxzZSBwb3NpdGl2ZXMuXG4gICAgICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykge1xuICAgICAgICAgIGxvZ2dlci5sb2dFcnJvcihcbiAgICAgICAgICAgICdWaXNpYmlsaXR5IGZhbGxiYWNrIGVuZ2FnZWQg4oCUIGVsZW1lbnQgaXMgb24gc2NyZWVuIGJ1dCBJbnRlcnNlY3Rpb25PYnNlcnZlciBuZXZlciByZXBvcnRlZCBpdCcsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLmxvZ0NvbnRleHRSZWYuY3VycmVudCxcbiAgICAgICAgICAgICAgZmFsbGJhY2tfaW50ZXJ2YWxfbXM6IFZJU0lCSUxJVFlfRkFMTEJBQ0tfSU5URVJWQUxfTVMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmYWxsYmFja0VuZ2FnZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgIGZhbGxiYWNrRW5nYWdlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBvbkZhbGxiYWNrRW5nYWdlZFJlZi5jdXJyZW50Py4oKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRJc1Zpc2libGUodHJ1ZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIEdpdmUgdGhlIHJlYWwgb2JzZXJ2ZXIgYSBncmFjZSB3aW5kb3cgdG8gZGVsaXZlciBpdHMgaW5pdGlhbCBjYWxsYmFjaywgdGhlbiBwb2xsIG9uIGFcbiAgICAvLyBzaG9ydGVyIGNhZGVuY2Ugc28gYSBnZW51aW5lbHkgc3R1Y2sgd2lkZ2V0IHJlY292ZXJzIHF1aWNrbHkuXG4gICAgbGV0IGludGVydmFsOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgZ3JhY2UgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlY29uY2lsZSgpO1xuICAgICAgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChyZWNvbmNpbGUsIFZJU0lCSUxJVFlfRkFMTEJBQ0tfSU5URVJWQUxfTVMpO1xuICAgIH0sIFZJU0lCSUxJVFlfRkFMTEJBQ0tfR1JBQ0VfTVMpO1xuXG4gICAgLy8gRmFzdCBwYXRoOiBhIHdpZGdldCBjb21wb3NpdGVkIHdoaWxlIHRoZSB0YWIgd2FzIGhpZGRlbiBjYW4gaGF2ZSBpdHNcbiAgICAvLyBJbnRlcnNlY3Rpb25PYnNlcnZlciBzdXBwcmVzc2VkLCBhbmQgc29tZSBlbmdpbmVzIGZhaWwgdG8gcmUtZmlyZSBpdCB3aGVuIHRoZSB0YWJcbiAgICAvLyByZXR1cm5zIHRvIHRoZSBmb3JlZ3JvdW5kIGZvciBhbiBlbGVtZW50IGFscmVhZHkgaW4gdGhlIHZpZXdwb3J0LiBPbiB2aXNpYmlsaXR5XG4gICAgLy8gY2hhbmdlLCByZWNvbmNpbGUgYWZ0ZXIgYSBzaG9ydCBncmFjZSDigJQgaWYgYSBoZWFsdGh5IG9ic2VydmVyIHJlLWZpcmVzIGZpcnN0LFxuICAgIC8vIGlzVmlzaWJsZSBmbGlwcyBhbmQgdGhpcyBlZmZlY3QgdGVhcnMgdGhlIHRpbWVyIGRvd24gYmVmb3JlIGl0IHJ1bnMuXG4gICAgbGV0IGZvcmVncm91bmRDaGVjazogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3Qgb25WaXNpYmlsaXR5Q2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSAhPT0gJ3Zpc2libGUnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZvcmVncm91bmRDaGVjayA9IHNldFRpbWVvdXQocmVjb25jaWxlLCBWSVNJQklMSVRZX0ZPUkVHUk9VTkRfR1JBQ0VfTVMpO1xuICAgIH07XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uVmlzaWJpbGl0eUNoYW5nZSk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KGdyYWNlKTtcbiAgICAgIGlmIChpbnRlcnZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgfVxuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uVmlzaWJpbGl0eUNoYW5nZSk7XG4gICAgICBpZiAoZm9yZWdyb3VuZENoZWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGZvcmVncm91bmRDaGVjayk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW2lzVmlzaWJsZSwgZWxlbWVudF0pO1xuXG4gIC8vIERpc2Nvbm5lY3Qgb24gdW5tb3VudCBvbmx5IOKAlCBpbnRlbnRpb25hbGx5IHNlcGFyYXRlIGZyb20gdGhlIHNldHVwIGVmZmVjdCBhYm92ZS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgb2JzZXJ2ZXJSZWYuY3VycmVudD8uZGlzY29ubmVjdCgpO1xuICAgICAgb2JzZXJ2ZXJSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICBvYnNlcnZlZE5vZGVSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiBpc1Zpc2libGU7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBR0EsTUFBTSxTQUFTLElBQUlBLGVBQU8sa0JBQWtCO0FBTTVDLE1BQWEsK0JBQStCO0FBSTVDLE1BQWEsa0NBQWtDO0FBSy9DLE1BQWEsaUNBQWlDO0FBRTlDLE1BQU0sY0FBYyxTQUErQjtDQUNqRCxNQUFNLE9BQU8sS0FBSyx1QkFBdUI7QUFLekMsS0FBSSxLQUFLLFNBQVMsS0FBSyxLQUFLLFVBQVUsRUFDcEMsUUFBTztBQUVULFFBQ0UsS0FBSyxNQUFNLE9BQU8sZUFDbEIsS0FBSyxTQUFTLEtBQ2QsS0FBSyxPQUFPLE9BQU8sY0FDbkIsS0FBSyxRQUFROztBQUtqQixNQUFhLG1CQUNYLFNBQ0EsWUFDQSxZQUlBLHNCQUNHO0NBQ0gsTUFBTSxDQUFDLFdBQVcsZ0JBQWdCLFNBQVMsTUFBTTtDQUNqRCxNQUFNLGNBQWMsT0FBb0MsS0FBSztDQUM3RCxNQUFNLGtCQUFrQixPQUEyQixLQUFLO0NBQ3hELE1BQU0sZ0JBQWdCLE9BQU8sV0FBVztBQUN4QyxlQUFjLFVBQVU7Q0FDeEIsTUFBTSx1QkFBdUIsT0FBTyxrQkFBa0I7QUFDdEQsc0JBQXFCLFVBQVU7Q0FDL0IsTUFBTSxxQkFBcUIsT0FBTyxNQUFNO0FBU3hDLGlCQUFnQjtFQUNkLE1BQU0sVUFBVSxTQUFTO0FBQ3pCLE1BQUksQ0FBQyxRQUNIO0FBRUYsTUFBSSxnQkFBZ0IsWUFBWSxRQUFTO0FBRXpDLE1BQUksWUFBWSxRQUVkLGFBQVksUUFBUSxZQUFZO0VBR2xDLE1BQU0sV0FBVyxJQUFJLHNCQUNsQixDQUFDLFdBQVc7QUFDWCxnQkFBYSxNQUFNLGVBQWU7S0FFcEMsRUFBRSxZQUFZLENBQ2Y7QUFFRCxXQUFTLFFBQVEsUUFBUTtBQUN6QixjQUFZLFVBQVU7QUFDdEIsa0JBQWdCLFVBQVU7R0FDMUI7QUFTRixpQkFBZ0I7QUFDZCxNQUFJLFVBQ0Y7RUFHRixNQUFNLGtCQUFrQjtHQUN0QixNQUFNLE9BQU8sU0FBUztBQUN0QixPQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssWUFDakI7QUFFRixPQUFJLFdBQVcsS0FBSyxFQUFFO0FBT3BCLFFBQUksU0FBUyxvQkFBb0IsVUFDL0IsUUFBTyxTQUNMLGlHQUNBLFFBQ0E7S0FDRSxHQUFHLGNBQWM7S0FDakIsc0JBQXNCO0tBQ3ZCLENBQ0Y7QUFFSCxRQUFJLENBQUMsbUJBQW1CLFNBQVM7QUFDL0Isd0JBQW1CLFVBQVU7QUFDN0IsMEJBQXFCLFdBQVc7O0FBRWxDLGlCQUFhLEtBQUs7OztFQU10QixJQUFJQztFQUNKLE1BQU0sUUFBUSxpQkFBaUI7QUFDN0IsY0FBVztBQUNYLGNBQVcsWUFBWSxXQUFXLGdDQUFnQztLQUNqRSw2QkFBNkI7RUFPaEMsSUFBSUM7RUFDSixNQUFNLDJCQUEyQjtBQUMvQixPQUFJLFNBQVMsb0JBQW9CLFVBQy9CO0FBRUYscUJBQWtCLFdBQVcsV0FBVywrQkFBK0I7O0FBRXpFLFdBQVMsaUJBQWlCLG9CQUFvQixtQkFBbUI7QUFFakUsZUFBYTtBQUNYLGdCQUFhLE1BQU07QUFDbkIsT0FBSSxhQUFhLE9BQ2YsZUFBYyxTQUFTO0FBRXpCLFlBQVMsb0JBQW9CLG9CQUFvQixtQkFBbUI7QUFDcEUsT0FBSSxvQkFBb0IsT0FDdEIsY0FBYSxnQkFBZ0I7O0lBR2hDLENBQUMsV0FBVyxRQUFRLENBQUM7QUFHeEIsaUJBQWdCO0FBQ2QsZUFBYTtBQUNYLGVBQVksU0FBUyxZQUFZO0FBQ2pDLGVBQVksVUFBVTtBQUN0QixtQkFBZ0IsVUFBVTs7SUFFM0IsRUFBRSxDQUFDO0FBRU4sUUFBTyJ9
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { GenerationParams } from "../../application/models/api/generationParams.cjs";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react0 from "react";
|
|
3
3
|
|
|
4
4
|
//#region src/hooks/SystemSettingsContext/useSystemSettingsContext.d.ts
|
|
5
5
|
declare const useSystemSettingsContext: () => {
|
|
6
6
|
generationParams?: GenerationParams;
|
|
7
7
|
showDebugBar?: boolean;
|
|
8
8
|
endpointURL?: string;
|
|
9
|
-
setGenerationParams:
|
|
9
|
+
setGenerationParams: react0.Dispatch<react0.SetStateAction<GenerationParams | undefined>>;
|
|
10
10
|
};
|
|
11
11
|
//#endregion
|
|
12
12
|
export { useSystemSettingsContext };
|
|
@@ -28,7 +28,13 @@ const safeNow = () => {
|
|
|
28
28
|
}
|
|
29
29
|
};
|
|
30
30
|
const useTrackComponentVisibleEvent = (element, eventProps, rootMargin = "0px", enabled = true) => {
|
|
31
|
-
const
|
|
31
|
+
const [visibilitySource, setVisibilitySource] = (0, react.useState)("pending");
|
|
32
|
+
const isVisible = require_useIntersection.useIntersection(element, rootMargin, eventProps, () => {
|
|
33
|
+
setVisibilitySource((prev) => prev === "pending" ? "fallback" : prev);
|
|
34
|
+
});
|
|
35
|
+
(0, react.useEffect)(() => {
|
|
36
|
+
if (isVisible) setVisibilitySource((prev) => prev === "pending" ? "observer" : prev);
|
|
37
|
+
}, [isVisible]);
|
|
32
38
|
const hasTrackedEvent = (0, react.useRef)(false);
|
|
33
39
|
const { trackEvent } = require_amplitudeContext.useAmplitude();
|
|
34
40
|
const variantInfo = (0, jotai.useAtomValue)(require_variant.pageVariantInfoAtom);
|
|
@@ -73,9 +79,12 @@ const useTrackComponentVisibleEvent = (element, eventProps, rootMargin = "0px",
|
|
|
73
79
|
eventProps,
|
|
74
80
|
trackEvent
|
|
75
81
|
]);
|
|
76
|
-
return {
|
|
82
|
+
return {
|
|
83
|
+
isVisible,
|
|
84
|
+
visibilitySource
|
|
85
|
+
};
|
|
77
86
|
};
|
|
78
87
|
|
|
79
88
|
//#endregion
|
|
80
89
|
exports.useTrackComponentVisibleEvent = useTrackComponentVisibleEvent;
|
|
81
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnQuY2pzIiwibmFtZXMiOlsiTG9nZ2VyIiwidXNlSW50ZXJzZWN0aW9uIiwidXNlQW1wbGl0dWRlIiwicGFnZVZhcmlhbnRJbmZvQXRvbSIsIlNwaWZmeU1ldHJpY3NFdmVudE5hbWUiLCJFbnZpdmVNZXRyaWNzRXZlbnROYW1lIiwiZXh0cmFjdFBhZ2VDb250ZXh0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL1RyYWNrQ29tcG9uZW50VmlzaWJsZUV2ZW50L3VzZVRyYWNrQ29tcG9uZW50VmlzaWJsZUV2ZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUF0b21WYWx1ZSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IFJlZk9iamVjdCwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHsgcGFnZVZhcmlhbnRJbmZvQXRvbSB9IGZyb20gJ3NyYy9hdG9tcy9hcHAnO1xuaW1wb3J0IHsgdXNlQW1wbGl0dWRlIH0gZnJvbSAnc3JjL2NvbnRleHRzL2FtcGxpdHVkZUNvbnRleHQvYW1wbGl0dWRlQ29udGV4dCc7XG5pbXBvcnQgeyBQYWdlVmFyaWFudEluZm8gfSBmcm9tICdzcmMvY29udGV4dHMvcGFnZUNvbnRleHQvdHlwZXMnO1xuaW1wb3J0IHsgdXNlSW50ZXJzZWN0aW9uIH0gZnJvbSAnc3JjL2hvb2tzL0ludGVyc2VjdGlvbi91c2VJbnRlcnNlY3Rpb24nO1xuaW1wb3J0IHsgZXh0cmFjdFBhZ2VDb250ZXh0IH0gZnJvbSAnc3JjL2hvb2tzL1dpZGdldEludGVyYWN0aW9uL3V0aWxzJztcbmltcG9ydCB7XG4gIEVudml2ZU1ldHJpY3NFdmVudE5hbWUsXG4gIFNwaWZmeU1ldHJpY3NFdmVudE5hbWUsXG59IGZyb20gJ3NyYy9zZXJ2aWNlcy9hbXBsaXR1ZGVTZXJ2aWNlL2FtcGxpdHVkZVNlcnZpY2UnO1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCd1c2VUcmFja0NvbXBvbmVudFZpc2libGVFdmVudCcpO1xuXG4vKipcbiAqIFRyYWNrcyBhIGNvbXBvbmVudCBhbmQgbG9ncyBgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0Q29tcG9uZW50VmlzaWJsZWAgd2hlbiB2aXNpYmxlLlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdG8gdHJhY2sgdmlzaWJpbGl0eSBvZi5cbiAqIEBwYXJhbSBldmVudFByb3BzIC0gUHJvcGVydGllcyB0byBpbmNsdWRlIHdpdGggdGhlIGV2ZW50LlxuICogQHBhcmFtIHJvb3RNYXJnaW4gLSBSb290IG1hcmdpbiBmb3IgdGhlIGludGVyc2VjdGlvbiBvYnNlcnZlciAoZGVmYXVsdHMgdG8gMHB4KS5cbiAqIEBwYXJhbSBlbmFibGVkIC0gV2hldGhlciB0cmFja2luZyBpcyBlbmFibGVkIChkZWZhdWx0cyB0byB0cnVlKS5cbiAqL1xuY29uc3Qgc2FmZU5vdyA9ICgpOiBudW1iZXIgfCB1bmRlZmluZWQgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5wZXJmb3JtYW5jZT8ubm93Py4oKSA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHVzZVRyYWNrQ29tcG9uZW50VmlzaWJsZUV2ZW50ID0gKFxuICBlbGVtZW50OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+LFxuICBldmVudFByb3BzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHJvb3RNYXJnaW46IHN0cmluZyA9ICcwcHgnLFxuICBlbmFibGVkOiBib29sZWFuID0gdHJ1ZSxcbik6IHsgaXNWaXNpYmxlOiBib29sZWFuOyB2aXNpYmlsaXR5U291cmNlOiAnb2JzZXJ2ZXInIHwgJ2ZhbGxiYWNrJyB8ICdwZW5kaW5nJyB9ID0+IHtcbiAgLy8gSG93IHZpc2liaWxpdHkgd2FzIGVzdGFibGlzaGVkLCBmb3Igd2lkZ2V0LWxvYWQgZGlhZ25vc3RpY3M6XG4gIC8vICAtICdwZW5kaW5nJyAg4oCUIG5vdCBjb25maXJtZWQgYnkgZWl0aGVyIHBhdGggeWV0LiBTdGF5cyB0aGlzIHdheSBmb3IgYSBgZGVmZXJMb2FkaW5nOiBmYWxzZWBcbiAgLy8gICAgICAgICAgICAgICAgIHdpZGdldCB3aG9zZSByZXF1ZXN0cyBzZXR0bGUgYmVmb3JlIHRoZSBvYnNlcnZlciBldmVyIHJlcG9ydHMsIHNvIHdlIGRvbid0XG4gIC8vICAgICAgICAgICAgICAgICBmYWxzZWx5IGNsYWltICdvYnNlcnZlcicgZm9yIGEgbG9hZCB0aGF0IG5ldmVyIHdhaXRlZCBvbiB2aXNpYmlsaXR5LlxuICAvLyAgLSAnb2JzZXJ2ZXInIOKAlCB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgcmVwb3J0ZWQgdGhlIGVsZW1lbnQgdmlzaWJsZS5cbiAgLy8gIC0gJ2ZhbGxiYWNrJyDigJQgdGhlIHJlY29uY2lsZSBmYWxsYmFjayBoYWQgdG8gZm9yY2UgaXQgKG9ic2VydmVyIHN0YXllZCBzaWxlbnQgb24tc2NyZWVuKS5cbiAgLy8gU3RhdGUgKG5vdCBhIHJlZikgc28gY29uc3VtZXJzIHJlbGlhYmx5IHJlLXJlbmRlciB3aGVuIHRoZSBzb3VyY2UgcmVzb2x2ZXMuXG4gIGNvbnN0IFt2aXNpYmlsaXR5U291cmNlLCBzZXRWaXNpYmlsaXR5U291cmNlXSA9IHVzZVN0YXRlPCdvYnNlcnZlcicgfCAnZmFsbGJhY2snIHwgJ3BlbmRpbmcnPihcbiAgICAncGVuZGluZycsXG4gICk7XG4gIC8vIGV2ZW50UHJvcHMgKHdpZGdldF9jb25maWdfaWQsIHdpZGdldF90eXBlLCDigKYpIGRvdWJsZSBhcyBsb2cgY29udGV4dCBzbyB0aGUgaG9vaydzXG4gIC8vIHZpc2liaWxpdHktZmFsbGJhY2sgZXJyb3IgaWRlbnRpZmllcyB3aGljaCB3aWRnZXQgaXQgcmVzY3VlZC5cbiAgY29uc3QgaXNWaXNpYmxlID0gdXNlSW50ZXJzZWN0aW9uKGVsZW1lbnQsIHJvb3RNYXJnaW4sIGV2ZW50UHJvcHMsICgpID0+IHtcbiAgICAvLyBUaGUgb2JzZXJ2ZXIgc3RheWVkIHNpbGVudCBvbi1zY3JlZW4gYW5kIHRoZSBmYWxsYmFjayBmb3JjZWQgdmlzaWJpbGl0eS4gVGhpcyBpcyByZWNvcmRlZFxuICAgIC8vIGJlZm9yZSB1c2VJbnRlcnNlY3Rpb24ncyBvd24gc2V0SXNWaXNpYmxlLCBzbyBpdCB3aW5zIG92ZXIgdGhlICdvYnNlcnZlcicgcmVzb2x1dGlvbiBiZWxvdy5cbiAgICBzZXRWaXNpYmlsaXR5U291cmNlKHByZXYgPT4gKHByZXYgPT09ICdwZW5kaW5nJyA/ICdmYWxsYmFjaycgOiBwcmV2KSk7XG4gIH0pO1xuICAvLyBSZXNvbHZlICdwZW5kaW5nJyDihpIgJ29ic2VydmVyJyBvbmNlIHRoZSBvYnNlcnZlciBlc3RhYmxpc2hlcyB2aXNpYmlsaXR5OyBhICdmYWxsYmFjaydcbiAgLy8gYWxyZWFkeSByZWNvcmRlZCBhYm92ZSBpcyBwcmVzZXJ2ZWQuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzVmlzaWJsZSkgc2V0VmlzaWJpbGl0eVNvdXJjZShwcmV2ID0+IChwcmV2ID09PSAncGVuZGluZycgPyAnb2JzZXJ2ZXInIDogcHJldikpO1xuICB9LCBbaXNWaXNpYmxlXSk7XG4gIGNvbnN0IGhhc1RyYWNrZWRFdmVudCA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHsgdHJhY2tFdmVudCB9ID0gdXNlQW1wbGl0dWRlKCk7XG4gIGNvbnN0IHZhcmlhbnRJbmZvID0gdXNlQXRvbVZhbHVlKHBhZ2VWYXJpYW50SW5mb0F0b20pO1xuICAvLyBDYXB0dXJlZCBvbiBmaXJzdCByZW5kZXIsIG5vdCB3aGVuIHRoZSBldmVudCBmaXJlczogV2lkZ2V0IFJlbmRlcmVkIGlzXG4gIC8vIGVtaXR0ZWQgYXQgdmlzaWJpbGl0eSwgd2hpY2ggZm9yIGJlbG93LXRoZS1mb2xkIHdpZGdldHMgY2FuIGJlIGxvbmdcbiAgLy8gYWZ0ZXIgdGhlIHdpZGdldCBhY3R1YWxseSByZW5kZXJlZC4gcGVyZm9ybWFuY2Uubm93KCkgaXMgcmVsYXRpdmUgdG9cbiAgLy8gbmF2aWdhdGlvbiBzdGFydCwgc28gdGhpcyByZWFkcyBhcyBcIm1zIGZyb20gaW5pdGlhbCBwYWdlIGxvYWQgdG9cbiAgLy8gd2lkZ2V0IHJlbmRlclwiLlxuICBjb25zdCByZW5kZXJPZmZzZXRNcyA9IHVzZVJlZihzYWZlTm93KCkpLmN1cnJlbnQ7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsb2dnZXIubG9nRGVidWcoJ2VmZmVjdCByYW4nLCB7XG4gICAgICBlbmFibGVkLFxuICAgICAgaXNWaXNpYmxlLFxuICAgICAgaGFzVHJhY2tlZEV2ZW50OiBoYXNUcmFja2VkRXZlbnQuY3VycmVudCxcbiAgICAgIGV2ZW50UHJvcHMsXG4gICAgfSk7XG5cbiAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgIGxvZ2dlci5sb2dEZWJ1Zygnc2tpcHBlZCDigJQgZW5hYmxlZCBpcyBmYWxzZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaGFzVHJhY2tlZEV2ZW50LmN1cnJlbnQpIHtcbiAgICAgIGxvZ2dlci5sb2dEZWJ1Zygnc2tpcHBlZCDigJQgZXZlbnQgYWxyZWFkeSB0cmFja2VkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaXNWaXNpYmxlKSB7XG4gICAgICBsb2dnZXIubG9nRGVidWcoJ3NraXBwZWQg4oCUIGVsZW1lbnQgbm90IHZpc2libGUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2dnZXIubG9nRGVidWcoJ2ZpcmluZyB0cmFja2luZyBldmVudHMnLCBldmVudFByb3BzKTtcbiAgICB0cmFja0V2ZW50KHtcbiAgICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0Q29tcG9uZW50VmlzaWJsZSxcbiAgICAgIGV2ZW50UHJvcHMsXG4gICAgfSk7XG4gICAgdHJhY2tFdmVudCh7XG4gICAgICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuV2lkZ2V0UmVuZGVyZWQsXG4gICAgICBldmVudFByb3BzOiB7XG4gICAgICAgIC4uLmV2ZW50UHJvcHMsXG4gICAgICAgIHRyaWdnZXI6IHtcbiAgICAgICAgICB3aWRnZXQ6IGV2ZW50UHJvcHM/LndpZGdldF90eXBlLFxuICAgICAgICB9LFxuICAgICAgICBjb250ZXh0OiB2YXJpYW50SW5mbyA/IGV4dHJhY3RQYWdlQ29udGV4dCh2YXJpYW50SW5mbyBhcyBQYWdlVmFyaWFudEluZm8pIDogbnVsbCxcbiAgICAgICAgJ3BlcmZvcm1hbmNlLnJlbmRlcl9vZmZzZXRfbXMnOiByZW5kZXJPZmZzZXRNcyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgaGFzVHJhY2tlZEV2ZW50LmN1cnJlbnQgPSB0cnVlO1xuICB9LCBbZW5hYmxlZCwgaXNWaXNpYmxlLCBldmVudFByb3BzLCB0cmFja0V2ZW50XSk7XG4gIHJldHVybiB7IGlzVmlzaWJsZSwgdmlzaWJpbGl0eVNvdXJjZSB9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQWFBLE1BQU0sU0FBUyxJQUFJQSx1QkFBTyxnQ0FBZ0M7Ozs7Ozs7OztBQVUxRCxNQUFNLGdCQUFvQztBQUN4QyxLQUFJO0FBQ0YsU0FBTyxPQUFPLFdBQVcsY0FBYyxPQUFPLGFBQWEsT0FBTyxHQUFHO1NBQy9EO0FBQ047OztBQUlKLE1BQWEsaUNBQ1gsU0FDQSxZQUNBLGFBQXFCLE9BQ3JCLFVBQW1CLFNBQytEO0NBUWxGLE1BQU0sQ0FBQyxrQkFBa0IsMkNBQ3ZCLFVBQ0Q7Q0FHRCxNQUFNLFlBQVlDLHdDQUFnQixTQUFTLFlBQVksa0JBQWtCO0FBR3ZFLHVCQUFvQixTQUFTLFNBQVMsWUFBWSxhQUFhLEtBQU07R0FDckU7QUFHRiw0QkFBZ0I7QUFDZCxNQUFJLFVBQVcsc0JBQW9CLFNBQVMsU0FBUyxZQUFZLGFBQWEsS0FBTTtJQUNuRixDQUFDLFVBQVUsQ0FBQztDQUNmLE1BQU0sb0NBQXlCLE1BQU07Q0FDckMsTUFBTSxFQUFFLGVBQWVDLHVDQUFjO0NBQ3JDLE1BQU0sc0NBQTJCQyxvQ0FBb0I7Q0FNckQsTUFBTSxtQ0FBd0IsU0FBUyxDQUFDLENBQUM7QUFFekMsNEJBQWdCO0FBQ2QsU0FBTyxTQUFTLGNBQWM7R0FDNUI7R0FDQTtHQUNBLGlCQUFpQixnQkFBZ0I7R0FDakM7R0FDRCxDQUFDO0FBRUYsTUFBSSxDQUFDLFNBQVM7QUFDWixVQUFPLFNBQVMsNkJBQTZCO0FBQzdDOztBQUVGLE1BQUksZ0JBQWdCLFNBQVM7QUFDM0IsVUFBTyxTQUFTLGtDQUFrQztBQUNsRDs7QUFFRixNQUFJLENBQUMsV0FBVztBQUNkLFVBQU8sU0FBUyxnQ0FBZ0M7QUFDaEQ7O0FBR0YsU0FBTyxTQUFTLDBCQUEwQixXQUFXO0FBQ3JELGFBQVc7R0FDVCxXQUFXQywwQ0FBdUI7R0FDbEM7R0FDRCxDQUFDO0FBQ0YsYUFBVztHQUNULFdBQVdDLDBDQUF1QjtHQUNsQyxZQUFZO0lBQ1YsR0FBRztJQUNILFNBQVMsRUFDUCxRQUFRLFlBQVksYUFDckI7SUFDRCxTQUFTLGNBQWNDLHlEQUFtQixZQUErQixHQUFHO0lBQzVFLGdDQUFnQztJQUNqQztHQUNGLENBQUM7QUFDRixrQkFBZ0IsVUFBVTtJQUN6QjtFQUFDO0VBQVM7RUFBVztFQUFZO0VBQVcsQ0FBQztBQUNoRCxRQUFPO0VBQUU7RUFBVztFQUFrQiJ9
|
|
@@ -3,7 +3,8 @@ import { RefObject } from "react";
|
|
|
3
3
|
//#region src/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.d.ts
|
|
4
4
|
declare const useTrackComponentVisibleEvent: (element: RefObject<HTMLElement>, eventProps?: Record<string, unknown>, rootMargin?: string, enabled?: boolean) => {
|
|
5
5
|
isVisible: boolean;
|
|
6
|
+
visibilitySource: "observer" | "fallback" | "pending";
|
|
6
7
|
};
|
|
7
8
|
//#endregion
|
|
8
9
|
export { useTrackComponentVisibleEvent };
|
|
9
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnQuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL1RyYWNrQ29tcG9uZW50VmlzaWJsZUV2ZW50L3VzZVRyYWNrQ29tcG9uZW50VmlzaWJsZUV2ZW50LmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVmT2JqZWN0IH0gZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdXNlVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnQ6IChlbGVtZW50OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+LCBldmVudFByb3BzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHJvb3RNYXJnaW4/OiBzdHJpbmcsIGVuYWJsZWQ/
|
|
10
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnQuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL1RyYWNrQ29tcG9uZW50VmlzaWJsZUV2ZW50L3VzZVRyYWNrQ29tcG9uZW50VmlzaWJsZUV2ZW50LmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVmT2JqZWN0IH0gZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdXNlVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnQ6IChlbGVtZW50OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+LCBldmVudFByb3BzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHJvb3RNYXJnaW4/OiBzdHJpbmcsIGVuYWJsZWQ/OiBib29sZWFuKSA9PiB7XG4gICAgaXNWaXNpYmxlOiBib29sZWFuO1xuICAgIHZpc2liaWxpdHlTb3VyY2U6IFwib2JzZXJ2ZXJcIiB8IFwiZmFsbGJhY2tcIiB8IFwicGVuZGluZ1wiO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsSUFBVyxnQ0FBZ0M7Q0FBQztPQUFXO09BQW1CO09BQWlCO0NBQU8ifQ==
|
|
@@ -3,7 +3,8 @@ import { RefObject } from "react";
|
|
|
3
3
|
//#region src/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.d.ts
|
|
4
4
|
declare const useTrackComponentVisibleEvent: (element: RefObject<HTMLElement>, eventProps?: Record<string, unknown>, rootMargin?: string, enabled?: boolean) => {
|
|
5
5
|
isVisible: boolean;
|
|
6
|
+
visibilitySource: "observer" | "fallback" | "pending";
|
|
6
7
|
};
|
|
7
8
|
//#endregion
|
|
8
9
|
export { useTrackComponentVisibleEvent };
|
|
9
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnQuZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnQvdXNlVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnQuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWZPYmplY3QgfSBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCB1c2VUcmFja0NvbXBvbmVudFZpc2libGVFdmVudDogKGVsZW1lbnQ6IFJlZk9iamVjdDxIVE1MRWxlbWVudD4sIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcm9vdE1hcmdpbj86IHN0cmluZywgZW5hYmxlZD86IGJvb2xlYW4pID0+
|
|
10
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnQuZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnQvdXNlVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnQuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWZPYmplY3QgfSBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCB1c2VUcmFja0NvbXBvbmVudFZpc2libGVFdmVudDogKGVsZW1lbnQ6IFJlZk9iamVjdDxIVE1MRWxlbWVudD4sIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcm9vdE1hcmdpbj86IHN0cmluZywgZW5hYmxlZD86IGJvb2xlYW4pID0+IHtcbiAgICBpc1Zpc2libGU6IGJvb2xlYW47XG4gICAgdmlzaWJpbGl0eVNvdXJjZTogXCJvYnNlcnZlclwiIHwgXCJmYWxsYmFja1wiIHwgXCJwZW5kaW5nXCI7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFDQSxJQUFXLGdDQUFnQztDQUFDO09BQVc7T0FBbUI7T0FBaUI7Q0FBTyJ9
|
|
@@ -6,7 +6,7 @@ import "../../atoms/app/index.js";
|
|
|
6
6
|
import { useAmplitude } from "../../contexts/amplitudeContext/amplitudeContext.js";
|
|
7
7
|
import { extractPageContext } from "../WidgetInteraction/utils.js";
|
|
8
8
|
import { useIntersection } from "../Intersection/useIntersection.js";
|
|
9
|
-
import { useEffect, useRef } from "react";
|
|
9
|
+
import { useEffect, useRef, useState } from "react";
|
|
10
10
|
import { useAtomValue } from "jotai";
|
|
11
11
|
|
|
12
12
|
//#region src/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.ts
|
|
@@ -27,7 +27,13 @@ const safeNow = () => {
|
|
|
27
27
|
}
|
|
28
28
|
};
|
|
29
29
|
const useTrackComponentVisibleEvent = (element, eventProps, rootMargin = "0px", enabled = true) => {
|
|
30
|
-
const
|
|
30
|
+
const [visibilitySource, setVisibilitySource] = useState("pending");
|
|
31
|
+
const isVisible = useIntersection(element, rootMargin, eventProps, () => {
|
|
32
|
+
setVisibilitySource((prev) => prev === "pending" ? "fallback" : prev);
|
|
33
|
+
});
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
if (isVisible) setVisibilitySource((prev) => prev === "pending" ? "observer" : prev);
|
|
36
|
+
}, [isVisible]);
|
|
31
37
|
const hasTrackedEvent = useRef(false);
|
|
32
38
|
const { trackEvent } = useAmplitude();
|
|
33
39
|
const variantInfo = useAtomValue(pageVariantInfoAtom);
|
|
@@ -72,9 +78,12 @@ const useTrackComponentVisibleEvent = (element, eventProps, rootMargin = "0px",
|
|
|
72
78
|
eventProps,
|
|
73
79
|
trackEvent
|
|
74
80
|
]);
|
|
75
|
-
return {
|
|
81
|
+
return {
|
|
82
|
+
isVisible,
|
|
83
|
+
visibilitySource
|
|
84
|
+
};
|
|
76
85
|
};
|
|
77
86
|
|
|
78
87
|
//#endregion
|
|
79
88
|
export { useTrackComponentVisibleEvent };
|
|
80
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
89
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnQuanMiLCJuYW1lcyI6WyJMb2dnZXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnQvdXNlVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQXRvbVZhbHVlIH0gZnJvbSAnam90YWknO1xuaW1wb3J0IHsgUmVmT2JqZWN0LCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBwYWdlVmFyaWFudEluZm9BdG9tIH0gZnJvbSAnc3JjL2F0b21zL2FwcCc7XG5pbXBvcnQgeyB1c2VBbXBsaXR1ZGUgfSBmcm9tICdzcmMvY29udGV4dHMvYW1wbGl0dWRlQ29udGV4dC9hbXBsaXR1ZGVDb250ZXh0JztcbmltcG9ydCB7IFBhZ2VWYXJpYW50SW5mbyB9IGZyb20gJ3NyYy9jb250ZXh0cy9wYWdlQ29udGV4dC90eXBlcyc7XG5pbXBvcnQgeyB1c2VJbnRlcnNlY3Rpb24gfSBmcm9tICdzcmMvaG9va3MvSW50ZXJzZWN0aW9uL3VzZUludGVyc2VjdGlvbic7XG5pbXBvcnQgeyBleHRyYWN0UGFnZUNvbnRleHQgfSBmcm9tICdzcmMvaG9va3MvV2lkZ2V0SW50ZXJhY3Rpb24vdXRpbHMnO1xuaW1wb3J0IHtcbiAgRW52aXZlTWV0cmljc0V2ZW50TmFtZSxcbiAgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSxcbn0gZnJvbSAnc3JjL3NlcnZpY2VzL2FtcGxpdHVkZVNlcnZpY2UvYW1wbGl0dWRlU2VydmljZSc7XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoJ3VzZVRyYWNrQ29tcG9uZW50VmlzaWJsZUV2ZW50Jyk7XG5cbi8qKlxuICogVHJhY2tzIGEgY29tcG9uZW50IGFuZCBsb2dzIGBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkNoYXRDb21wb25lbnRWaXNpYmxlYCB3aGVuIHZpc2libGUuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byB0cmFjayB2aXNpYmlsaXR5IG9mLlxuICogQHBhcmFtIGV2ZW50UHJvcHMgLSBQcm9wZXJ0aWVzIHRvIGluY2x1ZGUgd2l0aCB0aGUgZXZlbnQuXG4gKiBAcGFyYW0gcm9vdE1hcmdpbiAtIFJvb3QgbWFyZ2luIGZvciB0aGUgaW50ZXJzZWN0aW9uIG9ic2VydmVyIChkZWZhdWx0cyB0byAwcHgpLlxuICogQHBhcmFtIGVuYWJsZWQgLSBXaGV0aGVyIHRyYWNraW5nIGlzIGVuYWJsZWQgKGRlZmF1bHRzIHRvIHRydWUpLlxuICovXG5jb25zdCBzYWZlTm93ID0gKCk6IG51bWJlciB8IHVuZGVmaW5lZCA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LnBlcmZvcm1hbmNlPy5ub3c/LigpIDogdW5kZWZpbmVkO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXNlVHJhY2tDb21wb25lbnRWaXNpYmxlRXZlbnQgPSAoXG4gIGVsZW1lbnQ6IFJlZk9iamVjdDxIVE1MRWxlbWVudD4sXG4gIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgcm9vdE1hcmdpbjogc3RyaW5nID0gJzBweCcsXG4gIGVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlLFxuKTogeyBpc1Zpc2libGU6IGJvb2xlYW47IHZpc2liaWxpdHlTb3VyY2U6ICdvYnNlcnZlcicgfCAnZmFsbGJhY2snIHwgJ3BlbmRpbmcnIH0gPT4ge1xuICAvLyBIb3cgdmlzaWJpbGl0eSB3YXMgZXN0YWJsaXNoZWQsIGZvciB3aWRnZXQtbG9hZCBkaWFnbm9zdGljczpcbiAgLy8gIC0gJ3BlbmRpbmcnICDigJQgbm90IGNvbmZpcm1lZCBieSBlaXRoZXIgcGF0aCB5ZXQuIFN0YXlzIHRoaXMgd2F5IGZvciBhIGBkZWZlckxvYWRpbmc6IGZhbHNlYFxuICAvLyAgICAgICAgICAgICAgICAgd2lkZ2V0IHdob3NlIHJlcXVlc3RzIHNldHRsZSBiZWZvcmUgdGhlIG9ic2VydmVyIGV2ZXIgcmVwb3J0cywgc28gd2UgZG9uJ3RcbiAgLy8gICAgICAgICAgICAgICAgIGZhbHNlbHkgY2xhaW0gJ29ic2VydmVyJyBmb3IgYSBsb2FkIHRoYXQgbmV2ZXIgd2FpdGVkIG9uIHZpc2liaWxpdHkuXG4gIC8vICAtICdvYnNlcnZlcicg4oCUIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlciByZXBvcnRlZCB0aGUgZWxlbWVudCB2aXNpYmxlLlxuICAvLyAgLSAnZmFsbGJhY2snIOKAlCB0aGUgcmVjb25jaWxlIGZhbGxiYWNrIGhhZCB0byBmb3JjZSBpdCAob2JzZXJ2ZXIgc3RheWVkIHNpbGVudCBvbi1zY3JlZW4pLlxuICAvLyBTdGF0ZSAobm90IGEgcmVmKSBzbyBjb25zdW1lcnMgcmVsaWFibHkgcmUtcmVuZGVyIHdoZW4gdGhlIHNvdXJjZSByZXNvbHZlcy5cbiAgY29uc3QgW3Zpc2liaWxpdHlTb3VyY2UsIHNldFZpc2liaWxpdHlTb3VyY2VdID0gdXNlU3RhdGU8J29ic2VydmVyJyB8ICdmYWxsYmFjaycgfCAncGVuZGluZyc+KFxuICAgICdwZW5kaW5nJyxcbiAgKTtcbiAgLy8gZXZlbnRQcm9wcyAod2lkZ2V0X2NvbmZpZ19pZCwgd2lkZ2V0X3R5cGUsIOKApikgZG91YmxlIGFzIGxvZyBjb250ZXh0IHNvIHRoZSBob29rJ3NcbiAgLy8gdmlzaWJpbGl0eS1mYWxsYmFjayBlcnJvciBpZGVudGlmaWVzIHdoaWNoIHdpZGdldCBpdCByZXNjdWVkLlxuICBjb25zdCBpc1Zpc2libGUgPSB1c2VJbnRlcnNlY3Rpb24oZWxlbWVudCwgcm9vdE1hcmdpbiwgZXZlbnRQcm9wcywgKCkgPT4ge1xuICAgIC8vIFRoZSBvYnNlcnZlciBzdGF5ZWQgc2lsZW50IG9uLXNjcmVlbiBhbmQgdGhlIGZhbGxiYWNrIGZvcmNlZCB2aXNpYmlsaXR5LiBUaGlzIGlzIHJlY29yZGVkXG4gICAgLy8gYmVmb3JlIHVzZUludGVyc2VjdGlvbidzIG93biBzZXRJc1Zpc2libGUsIHNvIGl0IHdpbnMgb3ZlciB0aGUgJ29ic2VydmVyJyByZXNvbHV0aW9uIGJlbG93LlxuICAgIHNldFZpc2liaWxpdHlTb3VyY2UocHJldiA9PiAocHJldiA9PT0gJ3BlbmRpbmcnID8gJ2ZhbGxiYWNrJyA6IHByZXYpKTtcbiAgfSk7XG4gIC8vIFJlc29sdmUgJ3BlbmRpbmcnIOKGkiAnb2JzZXJ2ZXInIG9uY2UgdGhlIG9ic2VydmVyIGVzdGFibGlzaGVzIHZpc2liaWxpdHk7IGEgJ2ZhbGxiYWNrJ1xuICAvLyBhbHJlYWR5IHJlY29yZGVkIGFib3ZlIGlzIHByZXNlcnZlZC5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNWaXNpYmxlKSBzZXRWaXNpYmlsaXR5U291cmNlKHByZXYgPT4gKHByZXYgPT09ICdwZW5kaW5nJyA/ICdvYnNlcnZlcicgOiBwcmV2KSk7XG4gIH0sIFtpc1Zpc2libGVdKTtcbiAgY29uc3QgaGFzVHJhY2tlZEV2ZW50ID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgeyB0cmFja0V2ZW50IH0gPSB1c2VBbXBsaXR1ZGUoKTtcbiAgY29uc3QgdmFyaWFudEluZm8gPSB1c2VBdG9tVmFsdWUocGFnZVZhcmlhbnRJbmZvQXRvbSk7XG4gIC8vIENhcHR1cmVkIG9uIGZpcnN0IHJlbmRlciwgbm90IHdoZW4gdGhlIGV2ZW50IGZpcmVzOiBXaWRnZXQgUmVuZGVyZWQgaXNcbiAgLy8gZW1pdHRlZCBhdCB2aXNpYmlsaXR5LCB3aGljaCBmb3IgYmVsb3ctdGhlLWZvbGQgd2lkZ2V0cyBjYW4gYmUgbG9uZ1xuICAvLyBhZnRlciB0aGUgd2lkZ2V0IGFjdHVhbGx5IHJlbmRlcmVkLiBwZXJmb3JtYW5jZS5ub3coKSBpcyByZWxhdGl2ZSB0b1xuICAvLyBuYXZpZ2F0aW9uIHN0YXJ0LCBzbyB0aGlzIHJlYWRzIGFzIFwibXMgZnJvbSBpbml0aWFsIHBhZ2UgbG9hZCB0b1xuICAvLyB3aWRnZXQgcmVuZGVyXCIuXG4gIGNvbnN0IHJlbmRlck9mZnNldE1zID0gdXNlUmVmKHNhZmVOb3coKSkuY3VycmVudDtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxvZ2dlci5sb2dEZWJ1ZygnZWZmZWN0IHJhbicsIHtcbiAgICAgIGVuYWJsZWQsXG4gICAgICBpc1Zpc2libGUsXG4gICAgICBoYXNUcmFja2VkRXZlbnQ6IGhhc1RyYWNrZWRFdmVudC5jdXJyZW50LFxuICAgICAgZXZlbnRQcm9wcyxcbiAgICB9KTtcblxuICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdza2lwcGVkIOKAlCBlbmFibGVkIGlzIGZhbHNlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChoYXNUcmFja2VkRXZlbnQuY3VycmVudCkge1xuICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdza2lwcGVkIOKAlCBldmVudCBhbHJlYWR5IHRyYWNrZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpc1Zpc2libGUpIHtcbiAgICAgIGxvZ2dlci5sb2dEZWJ1Zygnc2tpcHBlZCDigJQgZWxlbWVudCBub3QgdmlzaWJsZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxvZ2dlci5sb2dEZWJ1ZygnZmlyaW5nIHRyYWNraW5nIGV2ZW50cycsIGV2ZW50UHJvcHMpO1xuICAgIHRyYWNrRXZlbnQoe1xuICAgICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkNoYXRDb21wb25lbnRWaXNpYmxlLFxuICAgICAgZXZlbnRQcm9wcyxcbiAgICB9KTtcbiAgICB0cmFja0V2ZW50KHtcbiAgICAgIGV2ZW50TmFtZTogRW52aXZlTWV0cmljc0V2ZW50TmFtZS5XaWRnZXRSZW5kZXJlZCxcbiAgICAgIGV2ZW50UHJvcHM6IHtcbiAgICAgICAgLi4uZXZlbnRQcm9wcyxcbiAgICAgICAgdHJpZ2dlcjoge1xuICAgICAgICAgIHdpZGdldDogZXZlbnRQcm9wcz8ud2lkZ2V0X3R5cGUsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRleHQ6IHZhcmlhbnRJbmZvID8gZXh0cmFjdFBhZ2VDb250ZXh0KHZhcmlhbnRJbmZvIGFzIFBhZ2VWYXJpYW50SW5mbykgOiBudWxsLFxuICAgICAgICAncGVyZm9ybWFuY2UucmVuZGVyX29mZnNldF9tcyc6IHJlbmRlck9mZnNldE1zLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBoYXNUcmFja2VkRXZlbnQuY3VycmVudCA9IHRydWU7XG4gIH0sIFtlbmFibGVkLCBpc1Zpc2libGUsIGV2ZW50UHJvcHMsIHRyYWNrRXZlbnRdKTtcbiAgcmV0dXJuIHsgaXNWaXNpYmxlLCB2aXNpYmlsaXR5U291cmNlIH07XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFhQSxNQUFNLFNBQVMsSUFBSUEsZUFBTyxnQ0FBZ0M7Ozs7Ozs7OztBQVUxRCxNQUFNLGdCQUFvQztBQUN4QyxLQUFJO0FBQ0YsU0FBTyxPQUFPLFdBQVcsY0FBYyxPQUFPLGFBQWEsT0FBTyxHQUFHO1NBQy9EO0FBQ047OztBQUlKLE1BQWEsaUNBQ1gsU0FDQSxZQUNBLGFBQXFCLE9BQ3JCLFVBQW1CLFNBQytEO0NBUWxGLE1BQU0sQ0FBQyxrQkFBa0IsdUJBQXVCLFNBQzlDLFVBQ0Q7Q0FHRCxNQUFNLFlBQVksZ0JBQWdCLFNBQVMsWUFBWSxrQkFBa0I7QUFHdkUsdUJBQW9CLFNBQVMsU0FBUyxZQUFZLGFBQWEsS0FBTTtHQUNyRTtBQUdGLGlCQUFnQjtBQUNkLE1BQUksVUFBVyxzQkFBb0IsU0FBUyxTQUFTLFlBQVksYUFBYSxLQUFNO0lBQ25GLENBQUMsVUFBVSxDQUFDO0NBQ2YsTUFBTSxrQkFBa0IsT0FBTyxNQUFNO0NBQ3JDLE1BQU0sRUFBRSxlQUFlLGNBQWM7Q0FDckMsTUFBTSxjQUFjLGFBQWEsb0JBQW9CO0NBTXJELE1BQU0saUJBQWlCLE9BQU8sU0FBUyxDQUFDLENBQUM7QUFFekMsaUJBQWdCO0FBQ2QsU0FBTyxTQUFTLGNBQWM7R0FDNUI7R0FDQTtHQUNBLGlCQUFpQixnQkFBZ0I7R0FDakM7R0FDRCxDQUFDO0FBRUYsTUFBSSxDQUFDLFNBQVM7QUFDWixVQUFPLFNBQVMsNkJBQTZCO0FBQzdDOztBQUVGLE1BQUksZ0JBQWdCLFNBQVM7QUFDM0IsVUFBTyxTQUFTLGtDQUFrQztBQUNsRDs7QUFFRixNQUFJLENBQUMsV0FBVztBQUNkLFVBQU8sU0FBUyxnQ0FBZ0M7QUFDaEQ7O0FBR0YsU0FBTyxTQUFTLDBCQUEwQixXQUFXO0FBQ3JELGFBQVc7R0FDVCxXQUFXLHVCQUF1QjtHQUNsQztHQUNELENBQUM7QUFDRixhQUFXO0dBQ1QsV0FBVyx1QkFBdUI7R0FDbEMsWUFBWTtJQUNWLEdBQUc7SUFDSCxTQUFTLEVBQ1AsUUFBUSxZQUFZLGFBQ3JCO0lBQ0QsU0FBUyxjQUFjLG1CQUFtQixZQUErQixHQUFHO0lBQzVFLGdDQUFnQztJQUNqQztHQUNGLENBQUM7QUFDRixrQkFBZ0IsVUFBVTtJQUN6QjtFQUFDO0VBQVM7RUFBVztFQUFZO0VBQVcsQ0FBQztBQUNoRCxRQUFPO0VBQUU7RUFBVztFQUFrQiJ9
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
const require_eventNames = require('../../services/amplitudeService/eventNames.cjs');
|
|
3
|
+
require('../../services/amplitudeService/amplitudeService.cjs');
|
|
4
|
+
const require_variant = require('../../atoms/app/variant.cjs');
|
|
5
|
+
require('../../atoms/app/index.cjs');
|
|
6
|
+
const require_amplitudeContext = require('../../contexts/amplitudeContext/amplitudeContext.cjs');
|
|
7
|
+
const require_hooks_WidgetInteraction_utils = require('../WidgetInteraction/utils.cjs');
|
|
8
|
+
let react = require("react");
|
|
9
|
+
let jotai = require("jotai");
|
|
10
|
+
|
|
11
|
+
//#region src/hooks/WidgetLoadDiagnostics/useWidgetLoadDiagnostics.ts
|
|
12
|
+
const WIDGET_LOAD_STALL_MS = 5e3;
|
|
13
|
+
const connectionType = () => {
|
|
14
|
+
try {
|
|
15
|
+
return navigator.connection?.effectiveType;
|
|
16
|
+
} catch {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const now = () => {
|
|
21
|
+
try {
|
|
22
|
+
return typeof window !== "undefined" && window.performance?.now ? window.performance.now() : Date.now();
|
|
23
|
+
} catch {
|
|
24
|
+
return Date.now();
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Emits the layered `[Envive] Diagnostics` widget-load net so eng can measure not just what
|
|
29
|
+
* loads, but the negative space between layers — the failures that fire nothing today:
|
|
30
|
+
*
|
|
31
|
+
* widget_mounted (ungated) → [Envive] Widget Rendered (visible) → widget_load_outcome
|
|
32
|
+
*
|
|
33
|
+
* - `widget_mounted` fires on mount regardless of visibility, so a widget that mounts but never
|
|
34
|
+
* becomes visible (the suspected infinite-load crux) shows up as a *mounted with no rendered*
|
|
35
|
+
* gap instead of being invisible to analytics entirely.
|
|
36
|
+
* - `widget_load_outcome` fires once the widget's own requests settle
|
|
37
|
+
* (content_loaded / static_fallback / error).
|
|
38
|
+
* - `widget_load_stalled` fires if it's still loading at WIDGET_LOAD_STALL_MS AND still mounted.
|
|
39
|
+
* The timer is cleared on unmount, so a shopper who navigates away first never trips it —
|
|
40
|
+
* "stalled with no later outcome" is therefore a clean stuck signal, undiluted by abandonment.
|
|
41
|
+
*
|
|
42
|
+
* `load_id` correlates all of the above (and is threaded onto `[Envive] Widget Rendered`) so
|
|
43
|
+
* the gaps are joinable per load.
|
|
44
|
+
*/
|
|
45
|
+
const useWidgetLoadDiagnostics = (input) => {
|
|
46
|
+
const { enabled, loadId, widgetType, widgetConfigId, startLoading, ownRequestsSettled, hardcopyContent } = input;
|
|
47
|
+
const { trackEvent } = require_amplitudeContext.useAmplitude();
|
|
48
|
+
const variantInfo = (0, jotai.useAtomValue)(require_variant.pageVariantInfoAtom);
|
|
49
|
+
const inputRef = (0, react.useRef)(input);
|
|
50
|
+
inputRef.current = input;
|
|
51
|
+
const emit = (props) => {
|
|
52
|
+
trackEvent({
|
|
53
|
+
eventName: require_eventNames.EnviveMetricsEventName.Diagnostics,
|
|
54
|
+
eventProps: {
|
|
55
|
+
load_id: loadId,
|
|
56
|
+
widget_type: widgetType,
|
|
57
|
+
widget_config_id: widgetConfigId,
|
|
58
|
+
connection_type: connectionType(),
|
|
59
|
+
context: variantInfo ? require_hooks_WidgetInteraction_utils.extractPageContext(variantInfo) : null,
|
|
60
|
+
...props
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
const mountFiredRef = (0, react.useRef)(false);
|
|
65
|
+
(0, react.useEffect)(() => {
|
|
66
|
+
if (!enabled || mountFiredRef.current) return;
|
|
67
|
+
mountFiredRef.current = true;
|
|
68
|
+
emit({ type: "widget_mounted" });
|
|
69
|
+
}, [enabled]);
|
|
70
|
+
const visibleAtRef = (0, react.useRef)(null);
|
|
71
|
+
(0, react.useEffect)(() => {
|
|
72
|
+
if (startLoading && visibleAtRef.current === null) visibleAtRef.current = now();
|
|
73
|
+
}, [startLoading]);
|
|
74
|
+
const outcomeFiredRef = (0, react.useRef)(false);
|
|
75
|
+
(0, react.useEffect)(() => {
|
|
76
|
+
if (!enabled || !startLoading || !ownRequestsSettled || outcomeFiredRef.current) return;
|
|
77
|
+
outcomeFiredRef.current = true;
|
|
78
|
+
const elapsed_ms = visibleAtRef.current !== null ? Math.round(now() - visibleAtRef.current) : void 0;
|
|
79
|
+
let outcome;
|
|
80
|
+
let reason;
|
|
81
|
+
if (!hardcopyContent) {
|
|
82
|
+
outcome = "error";
|
|
83
|
+
reason = inputRef.current.hardcopyErrorReason ?? "no_content";
|
|
84
|
+
} else if (hardcopyContent.servedFrom === "static") {
|
|
85
|
+
outcome = "static_fallback";
|
|
86
|
+
reason = hardcopyContent.fallbackReason;
|
|
87
|
+
} else outcome = "content_loaded";
|
|
88
|
+
emit({
|
|
89
|
+
type: "widget_load_outcome",
|
|
90
|
+
outcome,
|
|
91
|
+
reason,
|
|
92
|
+
elapsed_ms,
|
|
93
|
+
visibility_source: inputRef.current.visibilitySource
|
|
94
|
+
});
|
|
95
|
+
}, [
|
|
96
|
+
enabled,
|
|
97
|
+
startLoading,
|
|
98
|
+
ownRequestsSettled,
|
|
99
|
+
hardcopyContent
|
|
100
|
+
]);
|
|
101
|
+
(0, react.useEffect)(() => {
|
|
102
|
+
if (!enabled || !startLoading || ownRequestsSettled) return void 0;
|
|
103
|
+
const timer = setTimeout(() => {
|
|
104
|
+
emit({
|
|
105
|
+
type: "widget_load_stalled",
|
|
106
|
+
elapsed_ms: visibleAtRef.current !== null ? Math.round(now() - visibleAtRef.current) : WIDGET_LOAD_STALL_MS,
|
|
107
|
+
pending_requests: inputRef.current.pendingRequests,
|
|
108
|
+
visibility_source: inputRef.current.visibilitySource
|
|
109
|
+
});
|
|
110
|
+
}, WIDGET_LOAD_STALL_MS);
|
|
111
|
+
return () => clearTimeout(timer);
|
|
112
|
+
}, [
|
|
113
|
+
enabled,
|
|
114
|
+
startLoading,
|
|
115
|
+
ownRequestsSettled
|
|
116
|
+
]);
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
//#endregion
|
|
120
|
+
exports.WIDGET_LOAD_STALL_MS = WIDGET_LOAD_STALL_MS;
|
|
121
|
+
exports.useWidgetLoadDiagnostics = useWidgetLoadDiagnostics;
|
|
122
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlV2lkZ2V0TG9hZERpYWdub3N0aWNzLmNqcyIsIm5hbWVzIjpbInVzZUFtcGxpdHVkZSIsInBhZ2VWYXJpYW50SW5mb0F0b20iLCJFbnZpdmVNZXRyaWNzRXZlbnROYW1lIiwiZXh0cmFjdFBhZ2VDb250ZXh0Iiwib3V0Y29tZTogc3RyaW5nIiwicmVhc29uOiBzdHJpbmcgfCB1bmRlZmluZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvV2lkZ2V0TG9hZERpYWdub3N0aWNzL3VzZVdpZGdldExvYWREaWFnbm9zdGljcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VBdG9tVmFsdWUgfSBmcm9tICdqb3RhaSc7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHBhZ2VWYXJpYW50SW5mb0F0b20gfSBmcm9tICdzcmMvYXRvbXMvYXBwJztcbmltcG9ydCB7IHVzZUFtcGxpdHVkZSB9IGZyb20gJ3NyYy9jb250ZXh0cy9hbXBsaXR1ZGVDb250ZXh0L2FtcGxpdHVkZUNvbnRleHQnO1xuaW1wb3J0IHsgSGFyZGNvcHlSZXNwb25zZSB9IGZyb20gJ3NyYy9jb250ZXh0cy9oYXJkY29weUNvbnRleHQnO1xuaW1wb3J0IHsgUGFnZVZhcmlhbnRJbmZvIH0gZnJvbSAnc3JjL2NvbnRleHRzL3BhZ2VDb250ZXh0L3R5cGVzJztcbmltcG9ydCB7IFdpZGdldFR5cGVWMyB9IGZyb20gJ3NyYy9jb250ZXh0cy90eXBlc1YzJztcbmltcG9ydCB7IGV4dHJhY3RQYWdlQ29udGV4dCB9IGZyb20gJ3NyYy9ob29rcy9XaWRnZXRJbnRlcmFjdGlvbi91dGlscyc7XG5pbXBvcnQgeyBFbnZpdmVNZXRyaWNzRXZlbnROYW1lIH0gZnJvbSAnc3JjL3NlcnZpY2VzL2FtcGxpdHVkZVNlcnZpY2UvYW1wbGl0dWRlU2VydmljZSc7XG5cbi8vIEZpcmVkIGlmIGEgd2lkZ2V0IGlzIHN0aWxsIGxvYWRpbmcgdGhpcyBsb25nIGFmdGVyIGl0IGJlY2FtZSB2aXNpYmxlLiBLZXB0IGF0L2p1c3QgYWJvdmVcbi8vIHRoZSBoYXJkY29weSB0aW1lb3V0IChIQVJEQ09QWV9USU1FT1VUX01TLCA0cykgc28gYSBub3JtYWwgdGltZW91dCDihpIgc3RhdGljLWZhbGxiYWNrIHNldHRsZXNcbi8vIGZpcnN0IGFuZCBkb2VzIE5PVCB0cmlwIGEgc3RhbGw7IGEgc3RhbGwgaGVyZSBpcyBhIGdlbnVpbmUgYW5vbWFseSAoZS5nLiBhIGNvbmZpZyBoYW5nKS5cbi8vIE1pcnJvcnMgV0lER0VUX0xPQURJTkdfV0FUQ0hET0dfTVMgKHRoZSBjb25zb2xlLW9ubHkgd2F0Y2hkb2cgaW4gd2l0aEJhc2VXaWRnZXQpLlxuZXhwb3J0IGNvbnN0IFdJREdFVF9MT0FEX1NUQUxMX01TID0gNTAwMDtcblxuLy8gJ3BlbmRpbmcnID0gdmlzaWJpbGl0eSBub3QgY29uZmlybWVkIGJ5IGVpdGhlciBwYXRoIHdoZW4gdGhlIGV2ZW50IGZpcmVkIChlLmcuIGFcbi8vIGRlZmVyTG9hZGluZzpmYWxzZSB3aWRnZXQgdGhhdCBsb2FkZWQgZWFnZXJseSwgYmVmb3JlIHRoZSBvYnNlcnZlciByZXBvcnRlZCkuXG5leHBvcnQgdHlwZSBXaWRnZXRWaXNpYmlsaXR5U291cmNlID0gJ29ic2VydmVyJyB8ICdmYWxsYmFjaycgfCAncGVuZGluZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2lkZ2V0TG9hZERpYWdub3N0aWNzSW5wdXQge1xuICAvKiogR2F0ZS4gTm8gZXZlbnRzIGFyZSBlbWl0dGVkIHVubGVzcyB0cnVlLiBPbiBieSBkZWZhdWx0OyBhIFN0YXRzaWcga2lsbCBzd2l0Y2ggY2FuIGRpc2FibGUgaXQuICovXG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIC8qKiBDb3JyZWxhdGVzIHRoaXMgd2lkZ2V0J3MgbW91bnQgLyByZW5kZXJlZCAvIG91dGNvbWUgLyBzdGFsbCBldmVudHMgZm9yIGEgc2luZ2xlIGxvYWQuICovXG4gIGxvYWRJZDogc3RyaW5nO1xuICB3aWRnZXRUeXBlOiBXaWRnZXRUeXBlVjM7XG4gIHdpZGdldENvbmZpZ0lkPzogc3RyaW5nO1xuICAvKiogVGhlIHdpZGdldCBiZWNhbWUgdmlzaWJsZSBhbmQgc3RhcnRlZCBsb2FkaW5nIGl0cyBvd24gcmVxdWVzdHMuICovXG4gIHN0YXJ0TG9hZGluZzogYm9vbGVhbjtcbiAgLyoqIFRoaXMgd2lkZ2V0J3Mgb3duIGhhcmRjb3B5IC8gd2lkZ2V0Q29uZmlnIC8gdWlDb25maWcgcmVxdWVzdHMgaGF2ZSBhbGwgc2V0dGxlZC4gKi9cbiAgb3duUmVxdWVzdHNTZXR0bGVkOiBib29sZWFuO1xuICAvKiogUHJlc2VudCBvbmNlIGhhcmRjb3B5IHJlc29sdmVzOyBjYXJyaWVzIGBzZXJ2ZWRGcm9tYCAoY29udGVudF9sb2FkZWQgdnMgc3RhdGljX2ZhbGxiYWNrKS4gKi9cbiAgaGFyZGNvcHlDb250ZW50PzogSGFyZGNvcHlSZXNwb25zZTtcbiAgLyoqIFdoZXRoZXIgdmlzaWJpbGl0eSBjYW1lIGZyb20gdGhlIG9ic2VydmVyIG9yIHRoZSByZWNvbmNpbGUgZmFsbGJhY2suICovXG4gIHZpc2liaWxpdHlTb3VyY2U6IFdpZGdldFZpc2liaWxpdHlTb3VyY2U7XG4gIC8qKiBOYW1lcyBvZiB0aGlzIHdpZGdldCdzIHN0aWxsLXVuc2V0dGxlZCByZXF1ZXN0cywgcmVwb3J0ZWQgb24gYSBzdGFsbC4gKi9cbiAgcGVuZGluZ1JlcXVlc3RzOiBzdHJpbmdbXTtcbiAgLyoqIFNldCB3aGVuIHRoaXMgd2lkZ2V0J3Mgb3duIGhhcmRjb3B5IHJlcXVlc3QgcmVqZWN0ZWQgKG5vIGNvbnRlbnQg4oCUIG5vdCBhIHN0YXRpYyBmYWxsYmFjaykuICovXG4gIGhhcmRjb3B5RXJyb3JSZWFzb24/OiBzdHJpbmc7XG59XG5cbmNvbnN0IGNvbm5lY3Rpb25UeXBlID0gKCk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIHRyeSB7XG4gICAgLy8gTmV0d29yayBJbmZvcm1hdGlvbiBBUEkg4oCUIENocm9taXVtL0FuZHJvaWQgb25seSwgdW5kZWZpbmVkIG9uIGlPUyBTYWZhcmkgKG91ciBrZXkgcG9wdWxhdGlvbikuXG4gICAgcmV0dXJuIChuYXZpZ2F0b3IgYXMgTmF2aWdhdG9yICYgeyBjb25uZWN0aW9uPzogeyBlZmZlY3RpdmVUeXBlPzogc3RyaW5nIH0gfSkuY29ubmVjdGlvblxuICAgICAgPy5lZmZlY3RpdmVUeXBlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59O1xuXG5jb25zdCBub3cgPSAoKTogbnVtYmVyID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnBlcmZvcm1hbmNlPy5ub3dcbiAgICAgID8gd2luZG93LnBlcmZvcm1hbmNlLm5vdygpXG4gICAgICA6IERhdGUubm93KCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBEYXRlLm5vdygpO1xuICB9XG59O1xuXG4vKipcbiAqIEVtaXRzIHRoZSBsYXllcmVkIGBbRW52aXZlXSBEaWFnbm9zdGljc2Agd2lkZ2V0LWxvYWQgbmV0IHNvIGVuZyBjYW4gbWVhc3VyZSBub3QganVzdCB3aGF0XG4gKiBsb2FkcywgYnV0IHRoZSBuZWdhdGl2ZSBzcGFjZSBiZXR3ZWVuIGxheWVycyDigJQgdGhlIGZhaWx1cmVzIHRoYXQgZmlyZSBub3RoaW5nIHRvZGF5OlxuICpcbiAqICAgd2lkZ2V0X21vdW50ZWQgKHVuZ2F0ZWQpIOKGkiBbRW52aXZlXSBXaWRnZXQgUmVuZGVyZWQgKHZpc2libGUpIOKGkiB3aWRnZXRfbG9hZF9vdXRjb21lXG4gKlxuICogLSBgd2lkZ2V0X21vdW50ZWRgIGZpcmVzIG9uIG1vdW50IHJlZ2FyZGxlc3Mgb2YgdmlzaWJpbGl0eSwgc28gYSB3aWRnZXQgdGhhdCBtb3VudHMgYnV0IG5ldmVyXG4gKiAgIGJlY29tZXMgdmlzaWJsZSAodGhlIHN1c3BlY3RlZCBpbmZpbml0ZS1sb2FkIGNydXgpIHNob3dzIHVwIGFzIGEgKm1vdW50ZWQgd2l0aCBubyByZW5kZXJlZCpcbiAqICAgZ2FwIGluc3RlYWQgb2YgYmVpbmcgaW52aXNpYmxlIHRvIGFuYWx5dGljcyBlbnRpcmVseS5cbiAqIC0gYHdpZGdldF9sb2FkX291dGNvbWVgIGZpcmVzIG9uY2UgdGhlIHdpZGdldCdzIG93biByZXF1ZXN0cyBzZXR0bGVcbiAqICAgKGNvbnRlbnRfbG9hZGVkIC8gc3RhdGljX2ZhbGxiYWNrIC8gZXJyb3IpLlxuICogLSBgd2lkZ2V0X2xvYWRfc3RhbGxlZGAgZmlyZXMgaWYgaXQncyBzdGlsbCBsb2FkaW5nIGF0IFdJREdFVF9MT0FEX1NUQUxMX01TIEFORCBzdGlsbCBtb3VudGVkLlxuICogICBUaGUgdGltZXIgaXMgY2xlYXJlZCBvbiB1bm1vdW50LCBzbyBhIHNob3BwZXIgd2hvIG5hdmlnYXRlcyBhd2F5IGZpcnN0IG5ldmVyIHRyaXBzIGl0IOKAlFxuICogICBcInN0YWxsZWQgd2l0aCBubyBsYXRlciBvdXRjb21lXCIgaXMgdGhlcmVmb3JlIGEgY2xlYW4gc3R1Y2sgc2lnbmFsLCB1bmRpbHV0ZWQgYnkgYWJhbmRvbm1lbnQuXG4gKlxuICogYGxvYWRfaWRgIGNvcnJlbGF0ZXMgYWxsIG9mIHRoZSBhYm92ZSAoYW5kIGlzIHRocmVhZGVkIG9udG8gYFtFbnZpdmVdIFdpZGdldCBSZW5kZXJlZGApIHNvXG4gKiB0aGUgZ2FwcyBhcmUgam9pbmFibGUgcGVyIGxvYWQuXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VXaWRnZXRMb2FkRGlhZ25vc3RpY3MgPSAoaW5wdXQ6IFdpZGdldExvYWREaWFnbm9zdGljc0lucHV0KTogdm9pZCA9PiB7XG4gIGNvbnN0IHtcbiAgICBlbmFibGVkLFxuICAgIGxvYWRJZCxcbiAgICB3aWRnZXRUeXBlLFxuICAgIHdpZGdldENvbmZpZ0lkLFxuICAgIHN0YXJ0TG9hZGluZyxcbiAgICBvd25SZXF1ZXN0c1NldHRsZWQsXG4gICAgaGFyZGNvcHlDb250ZW50LFxuICB9ID0gaW5wdXQ7XG5cbiAgY29uc3QgeyB0cmFja0V2ZW50IH0gPSB1c2VBbXBsaXR1ZGUoKTtcbiAgY29uc3QgdmFyaWFudEluZm8gPSB1c2VBdG9tVmFsdWUocGFnZVZhcmlhbnRJbmZvQXRvbSk7XG5cbiAgLy8gTGF0ZXN0IGlucHV0LCByZWFkIGluc2lkZSB0aGUgZGVmZXJyZWQgc3RhbGwvb3V0Y29tZSBjYWxsYmFja3MgKHBlbmRpbmdSZXF1ZXN0cyBhbmRcbiAgLy8gdmlzaWJpbGl0eVNvdXJjZSBjaHVybiBhcyByZXF1ZXN0cyBzZXR0bGUgLyB0aGUgZmFsbGJhY2sgZW5nYWdlcykuXG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmKGlucHV0KTtcbiAgaW5wdXRSZWYuY3VycmVudCA9IGlucHV0O1xuXG4gIGNvbnN0IGVtaXQgPSAocHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgdHJhY2tFdmVudCh7XG4gICAgICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuRGlhZ25vc3RpY3MsXG4gICAgICBldmVudFByb3BzOiB7XG4gICAgICAgIGxvYWRfaWQ6IGxvYWRJZCxcbiAgICAgICAgd2lkZ2V0X3R5cGU6IHdpZGdldFR5cGUsXG4gICAgICAgIHdpZGdldF9jb25maWdfaWQ6IHdpZGdldENvbmZpZ0lkLFxuICAgICAgICBjb25uZWN0aW9uX3R5cGU6IGNvbm5lY3Rpb25UeXBlKCksXG4gICAgICAgIGNvbnRleHQ6IHZhcmlhbnRJbmZvID8gZXh0cmFjdFBhZ2VDb250ZXh0KHZhcmlhbnRJbmZvIGFzIFBhZ2VWYXJpYW50SW5mbykgOiBudWxsLFxuICAgICAgICAuLi5wcm9wcyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG5cbiAgLy8gTGF5ZXIgMCDigJQgbW91bnQuIFVuZ2F0ZWQgYnkgdmlzaWJpbGl0eTogdGhlIGJhc2VsaW5lIHRoYXQgZmlyZXMgZXZlbiB3aGVuIHRoZSB3aWRnZXQgbmV2ZXJcbiAgLy8gYmVjb21lcyB2aXNpYmxlLCBzbyBuZXZlci12aXNpYmxlIGZhaWx1cmVzIGFyZSBhIG1lYXN1cmFibGUgZ2FwIHJhdGhlciB0aGFuIHNpbGVuY2UuXG4gIGNvbnN0IG1vdW50RmlyZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZW5hYmxlZCB8fCBtb3VudEZpcmVkUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICBtb3VudEZpcmVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIGVtaXQoeyB0eXBlOiAnd2lkZ2V0X21vdW50ZWQnIH0pO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW2VuYWJsZWRdKTtcblxuICAvLyB0MCDigJQgd2hlbiB0aGUgd2lkZ2V0IGJlY2FtZSB2aXNpYmxlIC8gc3RhcnRlZCBsb2FkaW5nLlxuICBjb25zdCB2aXNpYmxlQXRSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHN0YXJ0TG9hZGluZyAmJiB2aXNpYmxlQXRSZWYuY3VycmVudCA9PT0gbnVsbCkgdmlzaWJsZUF0UmVmLmN1cnJlbnQgPSBub3coKTtcbiAgfSwgW3N0YXJ0TG9hZGluZ10pO1xuXG4gIC8vIExheWVyIDIg4oCUIHRlcm1pbmFsIG91dGNvbWUsIG9uY2UsIHdoZW4gdGhpcyB3aWRnZXQncyBvd24gcmVxdWVzdHMgc2V0dGxlLlxuICBjb25zdCBvdXRjb21lRmlyZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZW5hYmxlZCB8fCAhc3RhcnRMb2FkaW5nIHx8ICFvd25SZXF1ZXN0c1NldHRsZWQgfHwgb3V0Y29tZUZpcmVkUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICBvdXRjb21lRmlyZWRSZWYuY3VycmVudCA9IHRydWU7XG5cbiAgICBjb25zdCBlbGFwc2VkX21zID1cbiAgICAgIHZpc2libGVBdFJlZi5jdXJyZW50ICE9PSBudWxsID8gTWF0aC5yb3VuZChub3coKSAtIHZpc2libGVBdFJlZi5jdXJyZW50KSA6IHVuZGVmaW5lZDtcblxuICAgIGxldCBvdXRjb21lOiBzdHJpbmc7XG4gICAgbGV0IHJlYXNvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmICghaGFyZGNvcHlDb250ZW50KSB7XG4gICAgICBvdXRjb21lID0gJ2Vycm9yJztcbiAgICAgIHJlYXNvbiA9IGlucHV0UmVmLmN1cnJlbnQuaGFyZGNvcHlFcnJvclJlYXNvbiA/PyAnbm9fY29udGVudCc7XG4gICAgfSBlbHNlIGlmIChoYXJkY29weUNvbnRlbnQuc2VydmVkRnJvbSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgIG91dGNvbWUgPSAnc3RhdGljX2ZhbGxiYWNrJztcbiAgICAgIHJlYXNvbiA9IGhhcmRjb3B5Q29udGVudC5mYWxsYmFja1JlYXNvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0Y29tZSA9ICdjb250ZW50X2xvYWRlZCc7XG4gICAgfVxuXG4gICAgZW1pdCh7XG4gICAgICB0eXBlOiAnd2lkZ2V0X2xvYWRfb3V0Y29tZScsXG4gICAgICBvdXRjb21lLFxuICAgICAgcmVhc29uLFxuICAgICAgZWxhcHNlZF9tcyxcbiAgICAgIHZpc2liaWxpdHlfc291cmNlOiBpbnB1dFJlZi5jdXJyZW50LnZpc2liaWxpdHlTb3VyY2UsXG4gICAgfSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbZW5hYmxlZCwgc3RhcnRMb2FkaW5nLCBvd25SZXF1ZXN0c1NldHRsZWQsIGhhcmRjb3B5Q29udGVudF0pO1xuXG4gIC8vIExheWVyIDEuNSDigJQgc3RhbGwuIE9ubHkgYXJtcyB3aGlsZSBsb2FkaW5nOyBjbGVhcmVkIG9uIHVubW91bnQsIHNvIGFiYW5kb25tZW50IG5ldmVyIHRyaXBzIGl0LlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZW5hYmxlZCB8fCAhc3RhcnRMb2FkaW5nIHx8IG93blJlcXVlc3RzU2V0dGxlZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZWxhcHNlZF9tcyA9XG4gICAgICAgIHZpc2libGVBdFJlZi5jdXJyZW50ICE9PSBudWxsXG4gICAgICAgICAgPyBNYXRoLnJvdW5kKG5vdygpIC0gdmlzaWJsZUF0UmVmLmN1cnJlbnQpXG4gICAgICAgICAgOiBXSURHRVRfTE9BRF9TVEFMTF9NUztcbiAgICAgIGVtaXQoe1xuICAgICAgICB0eXBlOiAnd2lkZ2V0X2xvYWRfc3RhbGxlZCcsXG4gICAgICAgIGVsYXBzZWRfbXMsXG4gICAgICAgIHBlbmRpbmdfcmVxdWVzdHM6IGlucHV0UmVmLmN1cnJlbnQucGVuZGluZ1JlcXVlc3RzLFxuICAgICAgICB2aXNpYmlsaXR5X3NvdXJjZTogaW5wdXRSZWYuY3VycmVudC52aXNpYmlsaXR5U291cmNlLFxuICAgICAgfSk7XG4gICAgfSwgV0lER0VUX0xPQURfU1RBTExfTVMpO1xuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW2VuYWJsZWQsIHN0YXJ0TG9hZGluZywgb3duUmVxdWVzdHNTZXR0bGVkXSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQWNBLE1BQWEsdUJBQXVCO0FBMkJwQyxNQUFNLHVCQUEyQztBQUMvQyxLQUFJO0FBRUYsU0FBUSxVQUFzRSxZQUMxRTtTQUNFO0FBQ047OztBQUlKLE1BQU0sWUFBb0I7QUFDeEIsS0FBSTtBQUNGLFNBQU8sT0FBTyxXQUFXLGVBQWUsT0FBTyxhQUFhLE1BQ3hELE9BQU8sWUFBWSxLQUFLLEdBQ3hCLEtBQUssS0FBSztTQUNSO0FBQ04sU0FBTyxLQUFLLEtBQUs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCckIsTUFBYSw0QkFBNEIsVUFBNEM7Q0FDbkYsTUFBTSxFQUNKLFNBQ0EsUUFDQSxZQUNBLGdCQUNBLGNBQ0Esb0JBQ0Esb0JBQ0U7Q0FFSixNQUFNLEVBQUUsZUFBZUEsdUNBQWM7Q0FDckMsTUFBTSxzQ0FBMkJDLG9DQUFvQjtDQUlyRCxNQUFNLDZCQUFrQixNQUFNO0FBQzlCLFVBQVMsVUFBVTtDQUVuQixNQUFNLFFBQVEsVUFBbUM7QUFDL0MsYUFBVztHQUNULFdBQVdDLDBDQUF1QjtHQUNsQyxZQUFZO0lBQ1YsU0FBUztJQUNULGFBQWE7SUFDYixrQkFBa0I7SUFDbEIsaUJBQWlCLGdCQUFnQjtJQUNqQyxTQUFTLGNBQWNDLHlEQUFtQixZQUErQixHQUFHO0lBQzVFLEdBQUc7SUFDSjtHQUNGLENBQUM7O0NBS0osTUFBTSxrQ0FBdUIsTUFBTTtBQUNuQyw0QkFBZ0I7QUFDZCxNQUFJLENBQUMsV0FBVyxjQUFjLFFBQVM7QUFDdkMsZ0JBQWMsVUFBVTtBQUN4QixPQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztJQUUvQixDQUFDLFFBQVEsQ0FBQztDQUdiLE1BQU0saUNBQXFDLEtBQUs7QUFDaEQsNEJBQWdCO0FBQ2QsTUFBSSxnQkFBZ0IsYUFBYSxZQUFZLEtBQU0sY0FBYSxVQUFVLEtBQUs7SUFDOUUsQ0FBQyxhQUFhLENBQUM7Q0FHbEIsTUFBTSxvQ0FBeUIsTUFBTTtBQUNyQyw0QkFBZ0I7QUFDZCxNQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixnQkFBZ0IsUUFBUztBQUNqRixrQkFBZ0IsVUFBVTtFQUUxQixNQUFNLGFBQ0osYUFBYSxZQUFZLE9BQU8sS0FBSyxNQUFNLEtBQUssR0FBRyxhQUFhLFFBQVEsR0FBRztFQUU3RSxJQUFJQztFQUNKLElBQUlDO0FBQ0osTUFBSSxDQUFDLGlCQUFpQjtBQUNwQixhQUFVO0FBQ1YsWUFBUyxTQUFTLFFBQVEsdUJBQXVCO2FBQ3hDLGdCQUFnQixlQUFlLFVBQVU7QUFDbEQsYUFBVTtBQUNWLFlBQVMsZ0JBQWdCO1FBRXpCLFdBQVU7QUFHWixPQUFLO0dBQ0gsTUFBTTtHQUNOO0dBQ0E7R0FDQTtHQUNBLG1CQUFtQixTQUFTLFFBQVE7R0FDckMsQ0FBQztJQUVEO0VBQUM7RUFBUztFQUFjO0VBQW9CO0VBQWdCLENBQUM7QUFHaEUsNEJBQWdCO0FBQ2QsTUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsbUJBQW9CLFFBQU87RUFDNUQsTUFBTSxRQUFRLGlCQUFpQjtBQUs3QixRQUFLO0lBQ0gsTUFBTTtJQUNOLFlBTEEsYUFBYSxZQUFZLE9BQ3JCLEtBQUssTUFBTSxLQUFLLEdBQUcsYUFBYSxRQUFRLEdBQ3hDO0lBSUosa0JBQWtCLFNBQVMsUUFBUTtJQUNuQyxtQkFBbUIsU0FBUyxRQUFRO0lBQ3JDLENBQUM7S0FDRCxxQkFBcUI7QUFDeEIsZUFBYSxhQUFhLE1BQU07SUFFL0I7RUFBQztFQUFTO0VBQWM7RUFBbUIsQ0FBQyJ9
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { WidgetTypeV3 } from "../../contexts/typesV3.cjs";
|
|
2
|
+
import { HardcopyResponse } from "../../services/hardcopyService/hardcopyService.cjs";
|
|
3
|
+
|
|
4
|
+
//#region src/hooks/WidgetLoadDiagnostics/useWidgetLoadDiagnostics.d.ts
|
|
5
|
+
declare const WIDGET_LOAD_STALL_MS = 5000;
|
|
6
|
+
type WidgetVisibilitySource = 'observer' | 'fallback' | 'pending';
|
|
7
|
+
interface WidgetLoadDiagnosticsInput {
|
|
8
|
+
/** Gate. No events are emitted unless true. On by default; a Statsig kill switch can disable it. */
|
|
9
|
+
enabled: boolean;
|
|
10
|
+
/** Correlates this widget's mount / rendered / outcome / stall events for a single load. */
|
|
11
|
+
loadId: string;
|
|
12
|
+
widgetType: WidgetTypeV3;
|
|
13
|
+
widgetConfigId?: string;
|
|
14
|
+
/** The widget became visible and started loading its own requests. */
|
|
15
|
+
startLoading: boolean;
|
|
16
|
+
/** This widget's own hardcopy / widgetConfig / uiConfig requests have all settled. */
|
|
17
|
+
ownRequestsSettled: boolean;
|
|
18
|
+
/** Present once hardcopy resolves; carries `servedFrom` (content_loaded vs static_fallback). */
|
|
19
|
+
hardcopyContent?: HardcopyResponse;
|
|
20
|
+
/** Whether visibility came from the observer or the reconcile fallback. */
|
|
21
|
+
visibilitySource: WidgetVisibilitySource;
|
|
22
|
+
/** Names of this widget's still-unsettled requests, reported on a stall. */
|
|
23
|
+
pendingRequests: string[];
|
|
24
|
+
/** Set when this widget's own hardcopy request rejected (no content — not a static fallback). */
|
|
25
|
+
hardcopyErrorReason?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Emits the layered `[Envive] Diagnostics` widget-load net so eng can measure not just what
|
|
29
|
+
* loads, but the negative space between layers — the failures that fire nothing today:
|
|
30
|
+
*
|
|
31
|
+
* widget_mounted (ungated) → [Envive] Widget Rendered (visible) → widget_load_outcome
|
|
32
|
+
*
|
|
33
|
+
* - `widget_mounted` fires on mount regardless of visibility, so a widget that mounts but never
|
|
34
|
+
* becomes visible (the suspected infinite-load crux) shows up as a *mounted with no rendered*
|
|
35
|
+
* gap instead of being invisible to analytics entirely.
|
|
36
|
+
* - `widget_load_outcome` fires once the widget's own requests settle
|
|
37
|
+
* (content_loaded / static_fallback / error).
|
|
38
|
+
* - `widget_load_stalled` fires if it's still loading at WIDGET_LOAD_STALL_MS AND still mounted.
|
|
39
|
+
* The timer is cleared on unmount, so a shopper who navigates away first never trips it —
|
|
40
|
+
* "stalled with no later outcome" is therefore a clean stuck signal, undiluted by abandonment.
|
|
41
|
+
*
|
|
42
|
+
* `load_id` correlates all of the above (and is threaded onto `[Envive] Widget Rendered`) so
|
|
43
|
+
* the gaps are joinable per load.
|
|
44
|
+
*/
|
|
45
|
+
declare const useWidgetLoadDiagnostics: (input: WidgetLoadDiagnosticsInput) => void;
|
|
46
|
+
//#endregion
|
|
47
|
+
export { WIDGET_LOAD_STALL_MS, WidgetLoadDiagnosticsInput, WidgetVisibilitySource, useWidgetLoadDiagnostics };
|
|
48
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlV2lkZ2V0TG9hZERpYWdub3N0aWNzLmQuY3RzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy9XaWRnZXRMb2FkRGlhZ25vc3RpY3MvdXNlV2lkZ2V0TG9hZERpYWdub3N0aWNzLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSGFyZGNvcHlSZXNwb25zZSB9IGZyb20gJ3NyYy9jb250ZXh0cy9oYXJkY29weUNvbnRleHQnO1xuaW1wb3J0IHsgV2lkZ2V0VHlwZVYzIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzVjMnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgV0lER0VUX0xPQURfU1RBTExfTVMgPSA1MDAwO1xuZXhwb3J0IHR5cGUgV2lkZ2V0VmlzaWJpbGl0eVNvdXJjZSA9ICdvYnNlcnZlcicgfCAnZmFsbGJhY2snIHwgJ3BlbmRpbmcnO1xuZXhwb3J0IGludGVyZmFjZSBXaWRnZXRMb2FkRGlhZ25vc3RpY3NJbnB1dCB7XG4gICAgLyoqIEdhdGUuIE5vIGV2ZW50cyBhcmUgZW1pdHRlZCB1bmxlc3MgdHJ1ZS4gT24gYnkgZGVmYXVsdDsgYSBTdGF0c2lnIGtpbGwgc3dpdGNoIGNhbiBkaXNhYmxlIGl0LiAqL1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgLyoqIENvcnJlbGF0ZXMgdGhpcyB3aWRnZXQncyBtb3VudCAvIHJlbmRlcmVkIC8gb3V0Y29tZSAvIHN0YWxsIGV2ZW50cyBmb3IgYSBzaW5nbGUgbG9hZC4gKi9cbiAgICBsb2FkSWQ6IHN0cmluZztcbiAgICB3aWRnZXRUeXBlOiBXaWRnZXRUeXBlVjM7XG4gICAgd2lkZ2V0Q29uZmlnSWQ/OiBzdHJpbmc7XG4gICAgLyoqIFRoZSB3aWRnZXQgYmVjYW1lIHZpc2libGUgYW5kIHN0YXJ0ZWQgbG9hZGluZyBpdHMgb3duIHJlcXVlc3RzLiAqL1xuICAgIHN0YXJ0TG9hZGluZzogYm9vbGVhbjtcbiAgICAvKiogVGhpcyB3aWRnZXQncyBvd24gaGFyZGNvcHkgLyB3aWRnZXRDb25maWcgLyB1aUNvbmZpZyByZXF1ZXN0cyBoYXZlIGFsbCBzZXR0bGVkLiAqL1xuICAgIG93blJlcXVlc3RzU2V0dGxlZDogYm9vbGVhbjtcbiAgICAvKiogUHJlc2VudCBvbmNlIGhhcmRjb3B5IHJlc29sdmVzOyBjYXJyaWVzIGBzZXJ2ZWRGcm9tYCAoY29udGVudF9sb2FkZWQgdnMgc3RhdGljX2ZhbGxiYWNrKS4gKi9cbiAgICBoYXJkY29weUNvbnRlbnQ/OiBIYXJkY29weVJlc3BvbnNlO1xuICAgIC8qKiBXaGV0aGVyIHZpc2liaWxpdHkgY2FtZSBmcm9tIHRoZSBvYnNlcnZlciBvciB0aGUgcmVjb25jaWxlIGZhbGxiYWNrLiAqL1xuICAgIHZpc2liaWxpdHlTb3VyY2U6IFdpZGdldFZpc2liaWxpdHlTb3VyY2U7XG4gICAgLyoqIE5hbWVzIG9mIHRoaXMgd2lkZ2V0J3Mgc3RpbGwtdW5zZXR0bGVkIHJlcXVlc3RzLCByZXBvcnRlZCBvbiBhIHN0YWxsLiAqL1xuICAgIHBlbmRpbmdSZXF1ZXN0czogc3RyaW5nW107XG4gICAgLyoqIFNldCB3aGVuIHRoaXMgd2lkZ2V0J3Mgb3duIGhhcmRjb3B5IHJlcXVlc3QgcmVqZWN0ZWQgKG5vIGNvbnRlbnQg4oCUIG5vdCBhIHN0YXRpYyBmYWxsYmFjaykuICovXG4gICAgaGFyZGNvcHlFcnJvclJlYXNvbj86IHN0cmluZztcbn1cbi8qKlxuICogRW1pdHMgdGhlIGxheWVyZWQgYFtFbnZpdmVdIERpYWdub3N0aWNzYCB3aWRnZXQtbG9hZCBuZXQgc28gZW5nIGNhbiBtZWFzdXJlIG5vdCBqdXN0IHdoYXRcbiAqIGxvYWRzLCBidXQgdGhlIG5lZ2F0aXZlIHNwYWNlIGJldHdlZW4gbGF5ZXJzIOKAlCB0aGUgZmFpbHVyZXMgdGhhdCBmaXJlIG5vdGhpbmcgdG9kYXk6XG4gKlxuICogICB3aWRnZXRfbW91bnRlZCAodW5nYXRlZCkg4oaSIFtFbnZpdmVdIFdpZGdldCBSZW5kZXJlZCAodmlzaWJsZSkg4oaSIHdpZGdldF9sb2FkX291dGNvbWVcbiAqXG4gKiAtIGB3aWRnZXRfbW91bnRlZGAgZmlyZXMgb24gbW91bnQgcmVnYXJkbGVzcyBvZiB2aXNpYmlsaXR5LCBzbyBhIHdpZGdldCB0aGF0IG1vdW50cyBidXQgbmV2ZXJcbiAqICAgYmVjb21lcyB2aXNpYmxlICh0aGUgc3VzcGVjdGVkIGluZmluaXRlLWxvYWQgY3J1eCkgc2hvd3MgdXAgYXMgYSAqbW91bnRlZCB3aXRoIG5vIHJlbmRlcmVkKlxuICogICBnYXAgaW5zdGVhZCBvZiBiZWluZyBpbnZpc2libGUgdG8gYW5hbHl0aWNzIGVudGlyZWx5LlxuICogLSBgd2lkZ2V0X2xvYWRfb3V0Y29tZWAgZmlyZXMgb25jZSB0aGUgd2lkZ2V0J3Mgb3duIHJlcXVlc3RzIHNldHRsZVxuICogICAoY29udGVudF9sb2FkZWQgLyBzdGF0aWNfZmFsbGJhY2sgLyBlcnJvcikuXG4gKiAtIGB3aWRnZXRfbG9hZF9zdGFsbGVkYCBmaXJlcyBpZiBpdCdzIHN0aWxsIGxvYWRpbmcgYXQgV0lER0VUX0xPQURfU1RBTExfTVMgQU5EIHN0aWxsIG1vdW50ZWQuXG4gKiAgIFRoZSB0aW1lciBpcyBjbGVhcmVkIG9uIHVubW91bnQsIHNvIGEgc2hvcHBlciB3aG8gbmF2aWdhdGVzIGF3YXkgZmlyc3QgbmV2ZXIgdHJpcHMgaXQg4oCUXG4gKiAgIFwic3RhbGxlZCB3aXRoIG5vIGxhdGVyIG91dGNvbWVcIiBpcyB0aGVyZWZvcmUgYSBjbGVhbiBzdHVjayBzaWduYWwsIHVuZGlsdXRlZCBieSBhYmFuZG9ubWVudC5cbiAqXG4gKiBgbG9hZF9pZGAgY29ycmVsYXRlcyBhbGwgb2YgdGhlIGFib3ZlIChhbmQgaXMgdGhyZWFkZWQgb250byBgW0Vudml2ZV0gV2lkZ2V0IFJlbmRlcmVkYCkgc29cbiAqIHRoZSBnYXBzIGFyZSBqb2luYWJsZSBwZXIgbG9hZC5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdXNlV2lkZ2V0TG9hZERpYWdub3N0aWNzOiAoaW5wdXQ6IFdpZGdldExvYWREaWFnbm9zdGljc0lucHV0KSA9PiB2b2lkO1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBRUEsSUFBVyx1QkFBdUIsQ0FBQyxJQUFJO0FBQ3ZDLElBQVcseUJBQXlCLENBQUMsSUFBSTtBQUN6QyxJQUFXLDZCQUE2QjtDQUFDO09BQUc7T0FBQTtPQUFBO0NBQUE7QUFDNUMsSUFBVywyQkFBMkIsQ0FBQyxXQUFXLDJCQUEyQiJ9
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { WidgetTypeV3 } from "../../contexts/typesV3.js";
|
|
2
|
+
import { HardcopyResponse } from "../../services/hardcopyService/hardcopyService.js";
|
|
3
|
+
|
|
4
|
+
//#region src/hooks/WidgetLoadDiagnostics/useWidgetLoadDiagnostics.d.ts
|
|
5
|
+
declare const WIDGET_LOAD_STALL_MS = 5000;
|
|
6
|
+
type WidgetVisibilitySource = 'observer' | 'fallback' | 'pending';
|
|
7
|
+
interface WidgetLoadDiagnosticsInput {
|
|
8
|
+
/** Gate. No events are emitted unless true. On by default; a Statsig kill switch can disable it. */
|
|
9
|
+
enabled: boolean;
|
|
10
|
+
/** Correlates this widget's mount / rendered / outcome / stall events for a single load. */
|
|
11
|
+
loadId: string;
|
|
12
|
+
widgetType: WidgetTypeV3;
|
|
13
|
+
widgetConfigId?: string;
|
|
14
|
+
/** The widget became visible and started loading its own requests. */
|
|
15
|
+
startLoading: boolean;
|
|
16
|
+
/** This widget's own hardcopy / widgetConfig / uiConfig requests have all settled. */
|
|
17
|
+
ownRequestsSettled: boolean;
|
|
18
|
+
/** Present once hardcopy resolves; carries `servedFrom` (content_loaded vs static_fallback). */
|
|
19
|
+
hardcopyContent?: HardcopyResponse;
|
|
20
|
+
/** Whether visibility came from the observer or the reconcile fallback. */
|
|
21
|
+
visibilitySource: WidgetVisibilitySource;
|
|
22
|
+
/** Names of this widget's still-unsettled requests, reported on a stall. */
|
|
23
|
+
pendingRequests: string[];
|
|
24
|
+
/** Set when this widget's own hardcopy request rejected (no content — not a static fallback). */
|
|
25
|
+
hardcopyErrorReason?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Emits the layered `[Envive] Diagnostics` widget-load net so eng can measure not just what
|
|
29
|
+
* loads, but the negative space between layers — the failures that fire nothing today:
|
|
30
|
+
*
|
|
31
|
+
* widget_mounted (ungated) → [Envive] Widget Rendered (visible) → widget_load_outcome
|
|
32
|
+
*
|
|
33
|
+
* - `widget_mounted` fires on mount regardless of visibility, so a widget that mounts but never
|
|
34
|
+
* becomes visible (the suspected infinite-load crux) shows up as a *mounted with no rendered*
|
|
35
|
+
* gap instead of being invisible to analytics entirely.
|
|
36
|
+
* - `widget_load_outcome` fires once the widget's own requests settle
|
|
37
|
+
* (content_loaded / static_fallback / error).
|
|
38
|
+
* - `widget_load_stalled` fires if it's still loading at WIDGET_LOAD_STALL_MS AND still mounted.
|
|
39
|
+
* The timer is cleared on unmount, so a shopper who navigates away first never trips it —
|
|
40
|
+
* "stalled with no later outcome" is therefore a clean stuck signal, undiluted by abandonment.
|
|
41
|
+
*
|
|
42
|
+
* `load_id` correlates all of the above (and is threaded onto `[Envive] Widget Rendered`) so
|
|
43
|
+
* the gaps are joinable per load.
|
|
44
|
+
*/
|
|
45
|
+
declare const useWidgetLoadDiagnostics: (input: WidgetLoadDiagnosticsInput) => void;
|
|
46
|
+
//#endregion
|
|
47
|
+
export { WIDGET_LOAD_STALL_MS, WidgetLoadDiagnosticsInput, WidgetVisibilitySource, useWidgetLoadDiagnostics };
|
|
48
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlV2lkZ2V0TG9hZERpYWdub3N0aWNzLmQudHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL1dpZGdldExvYWREaWFnbm9zdGljcy91c2VXaWRnZXRMb2FkRGlhZ25vc3RpY3MuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIYXJkY29weVJlc3BvbnNlIH0gZnJvbSAnc3JjL2NvbnRleHRzL2hhcmRjb3B5Q29udGV4dCc7XG5pbXBvcnQgeyBXaWRnZXRUeXBlVjMgfSBmcm9tICdzcmMvY29udGV4dHMvdHlwZXNWMyc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBXSURHRVRfTE9BRF9TVEFMTF9NUyA9IDUwMDA7XG5leHBvcnQgdHlwZSBXaWRnZXRWaXNpYmlsaXR5U291cmNlID0gJ29ic2VydmVyJyB8ICdmYWxsYmFjaycgfCAncGVuZGluZyc7XG5leHBvcnQgaW50ZXJmYWNlIFdpZGdldExvYWREaWFnbm9zdGljc0lucHV0IHtcbiAgICAvKiogR2F0ZS4gTm8gZXZlbnRzIGFyZSBlbWl0dGVkIHVubGVzcyB0cnVlLiBPbiBieSBkZWZhdWx0OyBhIFN0YXRzaWcga2lsbCBzd2l0Y2ggY2FuIGRpc2FibGUgaXQuICovXG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICAvKiogQ29ycmVsYXRlcyB0aGlzIHdpZGdldCdzIG1vdW50IC8gcmVuZGVyZWQgLyBvdXRjb21lIC8gc3RhbGwgZXZlbnRzIGZvciBhIHNpbmdsZSBsb2FkLiAqL1xuICAgIGxvYWRJZDogc3RyaW5nO1xuICAgIHdpZGdldFR5cGU6IFdpZGdldFR5cGVWMztcbiAgICB3aWRnZXRDb25maWdJZD86IHN0cmluZztcbiAgICAvKiogVGhlIHdpZGdldCBiZWNhbWUgdmlzaWJsZSBhbmQgc3RhcnRlZCBsb2FkaW5nIGl0cyBvd24gcmVxdWVzdHMuICovXG4gICAgc3RhcnRMb2FkaW5nOiBib29sZWFuO1xuICAgIC8qKiBUaGlzIHdpZGdldCdzIG93biBoYXJkY29weSAvIHdpZGdldENvbmZpZyAvIHVpQ29uZmlnIHJlcXVlc3RzIGhhdmUgYWxsIHNldHRsZWQuICovXG4gICAgb3duUmVxdWVzdHNTZXR0bGVkOiBib29sZWFuO1xuICAgIC8qKiBQcmVzZW50IG9uY2UgaGFyZGNvcHkgcmVzb2x2ZXM7IGNhcnJpZXMgYHNlcnZlZEZyb21gIChjb250ZW50X2xvYWRlZCB2cyBzdGF0aWNfZmFsbGJhY2spLiAqL1xuICAgIGhhcmRjb3B5Q29udGVudD86IEhhcmRjb3B5UmVzcG9uc2U7XG4gICAgLyoqIFdoZXRoZXIgdmlzaWJpbGl0eSBjYW1lIGZyb20gdGhlIG9ic2VydmVyIG9yIHRoZSByZWNvbmNpbGUgZmFsbGJhY2suICovXG4gICAgdmlzaWJpbGl0eVNvdXJjZTogV2lkZ2V0VmlzaWJpbGl0eVNvdXJjZTtcbiAgICAvKiogTmFtZXMgb2YgdGhpcyB3aWRnZXQncyBzdGlsbC11bnNldHRsZWQgcmVxdWVzdHMsIHJlcG9ydGVkIG9uIGEgc3RhbGwuICovXG4gICAgcGVuZGluZ1JlcXVlc3RzOiBzdHJpbmdbXTtcbiAgICAvKiogU2V0IHdoZW4gdGhpcyB3aWRnZXQncyBvd24gaGFyZGNvcHkgcmVxdWVzdCByZWplY3RlZCAobm8gY29udGVudCDigJQgbm90IGEgc3RhdGljIGZhbGxiYWNrKS4gKi9cbiAgICBoYXJkY29weUVycm9yUmVhc29uPzogc3RyaW5nO1xufVxuLyoqXG4gKiBFbWl0cyB0aGUgbGF5ZXJlZCBgW0Vudml2ZV0gRGlhZ25vc3RpY3NgIHdpZGdldC1sb2FkIG5ldCBzbyBlbmcgY2FuIG1lYXN1cmUgbm90IGp1c3Qgd2hhdFxuICogbG9hZHMsIGJ1dCB0aGUgbmVnYXRpdmUgc3BhY2UgYmV0d2VlbiBsYXllcnMg4oCUIHRoZSBmYWlsdXJlcyB0aGF0IGZpcmUgbm90aGluZyB0b2RheTpcbiAqXG4gKiAgIHdpZGdldF9tb3VudGVkICh1bmdhdGVkKSDihpIgW0Vudml2ZV0gV2lkZ2V0IFJlbmRlcmVkICh2aXNpYmxlKSDihpIgd2lkZ2V0X2xvYWRfb3V0Y29tZVxuICpcbiAqIC0gYHdpZGdldF9tb3VudGVkYCBmaXJlcyBvbiBtb3VudCByZWdhcmRsZXNzIG9mIHZpc2liaWxpdHksIHNvIGEgd2lkZ2V0IHRoYXQgbW91bnRzIGJ1dCBuZXZlclxuICogICBiZWNvbWVzIHZpc2libGUgKHRoZSBzdXNwZWN0ZWQgaW5maW5pdGUtbG9hZCBjcnV4KSBzaG93cyB1cCBhcyBhICptb3VudGVkIHdpdGggbm8gcmVuZGVyZWQqXG4gKiAgIGdhcCBpbnN0ZWFkIG9mIGJlaW5nIGludmlzaWJsZSB0byBhbmFseXRpY3MgZW50aXJlbHkuXG4gKiAtIGB3aWRnZXRfbG9hZF9vdXRjb21lYCBmaXJlcyBvbmNlIHRoZSB3aWRnZXQncyBvd24gcmVxdWVzdHMgc2V0dGxlXG4gKiAgIChjb250ZW50X2xvYWRlZCAvIHN0YXRpY19mYWxsYmFjayAvIGVycm9yKS5cbiAqIC0gYHdpZGdldF9sb2FkX3N0YWxsZWRgIGZpcmVzIGlmIGl0J3Mgc3RpbGwgbG9hZGluZyBhdCBXSURHRVRfTE9BRF9TVEFMTF9NUyBBTkQgc3RpbGwgbW91bnRlZC5cbiAqICAgVGhlIHRpbWVyIGlzIGNsZWFyZWQgb24gdW5tb3VudCwgc28gYSBzaG9wcGVyIHdobyBuYXZpZ2F0ZXMgYXdheSBmaXJzdCBuZXZlciB0cmlwcyBpdCDigJRcbiAqICAgXCJzdGFsbGVkIHdpdGggbm8gbGF0ZXIgb3V0Y29tZVwiIGlzIHRoZXJlZm9yZSBhIGNsZWFuIHN0dWNrIHNpZ25hbCwgdW5kaWx1dGVkIGJ5IGFiYW5kb25tZW50LlxuICpcbiAqIGBsb2FkX2lkYCBjb3JyZWxhdGVzIGFsbCBvZiB0aGUgYWJvdmUgKGFuZCBpcyB0aHJlYWRlZCBvbnRvIGBbRW52aXZlXSBXaWRnZXQgUmVuZGVyZWRgKSBzb1xuICogdGhlIGdhcHMgYXJlIGpvaW5hYmxlIHBlciBsb2FkLlxuICovXG5leHBvcnQgZGVjbGFyZSBjb25zdCB1c2VXaWRnZXRMb2FkRGlhZ25vc3RpY3M6IChpbnB1dDogV2lkZ2V0TG9hZERpYWdub3N0aWNzSW5wdXQpID0+IHZvaWQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFFQSxJQUFXLHVCQUF1QixDQUFDLElBQUk7QUFDdkMsSUFBVyx5QkFBeUIsQ0FBQyxJQUFJO0FBQ3pDLElBQVcsNkJBQTZCO0NBQUM7T0FBRztPQUFBO09BQUE7Q0FBQTtBQUM1QyxJQUFXLDJCQUEyQixDQUFDLFdBQVcsMkJBQTJCIn0=
|