@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.
Files changed (179) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +11 -0
  3. package/dist/cjs/create-experimental-interaction-metrics-payload/index.js +52 -25
  4. package/dist/cjs/create-payload/index.js +290 -231
  5. package/dist/cjs/interaction-metrics/index.js +61 -23
  6. package/dist/cjs/interaction-metrics/post-interaction-log.js +63 -34
  7. package/dist/cjs/interaction-metrics-init/index.js +26 -7
  8. package/dist/cjs/segment/schedule-on-paint.js +35 -0
  9. package/dist/cjs/segment/segment.js +10 -1
  10. package/dist/cjs/vc/index.js +105 -1
  11. package/dist/cjs/vc/types.js +5 -0
  12. package/dist/cjs/vc/vc-observer/index.js +198 -208
  13. package/dist/cjs/vc/vc-observer-new/entries-timeline/index.js +56 -0
  14. package/dist/cjs/vc/vc-observer-new/get-element-name.js +68 -0
  15. package/dist/cjs/vc/vc-observer-new/index.js +132 -0
  16. package/dist/cjs/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +75 -0
  17. package/dist/cjs/vc/vc-observer-new/metric-calculator/fy25_03/index.js +60 -0
  18. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +274 -0
  19. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +151 -0
  20. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/heatmap.js +367 -0
  21. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +397 -0
  22. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/types.js +5 -0
  23. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/index.js +61 -0
  24. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/calc-union-area.js +151 -0
  25. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +107 -0
  26. package/dist/cjs/vc/vc-observer-new/metric-calculator/percentile-calc/types.js +5 -0
  27. package/dist/cjs/vc/vc-observer-new/metric-calculator/types.js +5 -0
  28. package/dist/cjs/vc/vc-observer-new/metric-calculator/utils/get-viewport-height.js +16 -0
  29. package/dist/cjs/vc/vc-observer-new/metric-calculator/utils/get-viewport-width.js +16 -0
  30. package/dist/cjs/vc/vc-observer-new/metric-calculator/utils/is-viewport-entry-data.js +16 -0
  31. package/dist/cjs/vc/vc-observer-new/metric-calculator/utils/task-yield.js +45 -0
  32. package/dist/cjs/vc/vc-observer-new/types.js +5 -0
  33. package/dist/cjs/vc/vc-observer-new/viewport-observer/index.js +195 -0
  34. package/dist/cjs/vc/vc-observer-new/viewport-observer/intersection-observer/index.js +71 -0
  35. package/dist/cjs/vc/vc-observer-new/viewport-observer/mutation-observer/index.js +65 -0
  36. package/dist/cjs/vc/vc-observer-new/viewport-observer/performance-observer/index.js +58 -0
  37. package/dist/cjs/vc/vc-observer-new/viewport-observer/types.js +1 -0
  38. package/dist/cjs/vc/vc-observer-new/window-event-observer/index.js +54 -0
  39. package/dist/es2019/create-experimental-interaction-metrics-payload/index.js +2 -2
  40. package/dist/es2019/create-payload/index.js +8 -7
  41. package/dist/es2019/interaction-metrics/index.js +3 -3
  42. package/dist/es2019/interaction-metrics/post-interaction-log.js +5 -5
  43. package/dist/es2019/interaction-metrics-init/index.js +26 -7
  44. package/dist/es2019/segment/schedule-on-paint.js +29 -0
  45. package/dist/es2019/segment/segment.js +9 -1
  46. package/dist/es2019/vc/index.js +56 -1
  47. package/dist/es2019/vc/types.js +1 -0
  48. package/dist/es2019/vc/vc-observer/index.js +1 -4
  49. package/dist/es2019/vc/vc-observer-new/entries-timeline/index.js +34 -0
  50. package/dist/es2019/vc/vc-observer-new/get-element-name.js +62 -0
  51. package/dist/es2019/vc/vc-observer-new/index.js +98 -0
  52. package/dist/es2019/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +38 -0
  53. package/dist/es2019/vc/vc-observer-new/metric-calculator/fy25_03/index.js +39 -0
  54. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +194 -0
  55. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +69 -0
  56. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/heatmap.js +248 -0
  57. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +261 -0
  58. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/types.js +1 -0
  59. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/index.js +19 -0
  60. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/calc-union-area.js +98 -0
  61. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +58 -0
  62. package/dist/es2019/vc/vc-observer-new/metric-calculator/percentile-calc/types.js +1 -0
  63. package/dist/es2019/vc/vc-observer-new/metric-calculator/types.js +1 -0
  64. package/dist/es2019/vc/vc-observer-new/metric-calculator/utils/get-viewport-height.js +9 -0
  65. package/dist/es2019/vc/vc-observer-new/metric-calculator/utils/get-viewport-width.js +9 -0
  66. package/dist/es2019/vc/vc-observer-new/metric-calculator/utils/is-viewport-entry-data.js +10 -0
  67. package/dist/es2019/vc/vc-observer-new/metric-calculator/utils/task-yield.js +17 -0
  68. package/dist/es2019/vc/vc-observer-new/types.js +1 -0
  69. package/dist/es2019/vc/vc-observer-new/viewport-observer/index.js +168 -0
  70. package/dist/es2019/vc/vc-observer-new/viewport-observer/intersection-observer/index.js +65 -0
  71. package/dist/es2019/vc/vc-observer-new/viewport-observer/mutation-observer/index.js +48 -0
  72. package/dist/es2019/vc/vc-observer-new/viewport-observer/performance-observer/index.js +41 -0
  73. package/dist/es2019/vc/vc-observer-new/viewport-observer/types.js +0 -0
  74. package/dist/es2019/vc/vc-observer-new/window-event-observer/index.js +36 -0
  75. package/dist/esm/create-experimental-interaction-metrics-payload/index.js +52 -25
  76. package/dist/esm/create-payload/index.js +290 -231
  77. package/dist/esm/interaction-metrics/index.js +61 -23
  78. package/dist/esm/interaction-metrics/post-interaction-log.js +63 -34
  79. package/dist/esm/interaction-metrics-init/index.js +26 -7
  80. package/dist/esm/segment/schedule-on-paint.js +29 -0
  81. package/dist/esm/segment/segment.js +10 -1
  82. package/dist/esm/vc/index.js +104 -1
  83. package/dist/esm/vc/types.js +1 -0
  84. package/dist/esm/vc/vc-observer/index.js +198 -208
  85. package/dist/esm/vc/vc-observer-new/entries-timeline/index.js +50 -0
  86. package/dist/esm/vc/vc-observer-new/get-element-name.js +62 -0
  87. package/dist/esm/vc/vc-observer-new/index.js +126 -0
  88. package/dist/esm/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.js +69 -0
  89. package/dist/esm/vc/vc-observer-new/metric-calculator/fy25_03/index.js +54 -0
  90. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.js +268 -0
  91. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.js +143 -0
  92. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/heatmap.js +361 -0
  93. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.js +390 -0
  94. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/types.js +1 -0
  95. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/index.js +54 -0
  96. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/calc-union-area.js +144 -0
  97. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.js +100 -0
  98. package/dist/esm/vc/vc-observer-new/metric-calculator/percentile-calc/types.js +1 -0
  99. package/dist/esm/vc/vc-observer-new/metric-calculator/types.js +1 -0
  100. package/dist/esm/vc/vc-observer-new/metric-calculator/utils/get-viewport-height.js +10 -0
  101. package/dist/esm/vc/vc-observer-new/metric-calculator/utils/get-viewport-width.js +10 -0
  102. package/dist/esm/vc/vc-observer-new/metric-calculator/utils/is-viewport-entry-data.js +10 -0
  103. package/dist/esm/vc/vc-observer-new/metric-calculator/utils/task-yield.js +38 -0
  104. package/dist/esm/vc/vc-observer-new/types.js +1 -0
  105. package/dist/esm/vc/vc-observer-new/viewport-observer/index.js +189 -0
  106. package/dist/esm/vc/vc-observer-new/viewport-observer/intersection-observer/index.js +65 -0
  107. package/dist/esm/vc/vc-observer-new/viewport-observer/mutation-observer/index.js +59 -0
  108. package/dist/esm/vc/vc-observer-new/viewport-observer/performance-observer/index.js +51 -0
  109. package/dist/esm/vc/vc-observer-new/viewport-observer/types.js +0 -0
  110. package/dist/esm/vc/vc-observer-new/window-event-observer/index.js +48 -0
  111. package/dist/types/common/index.d.ts +1 -0
  112. package/dist/types/create-experimental-interaction-metrics-payload/index.d.ts +3 -2
  113. package/dist/types/create-payload/index.d.ts +4 -4
  114. package/dist/types/interaction-metrics/post-interaction-log.d.ts +3 -2
  115. package/dist/types/segment/schedule-on-paint.d.ts +2 -0
  116. package/dist/types/vc/index.d.ts +3 -3
  117. package/dist/types/vc/types.d.ts +34 -0
  118. package/dist/types/vc/vc-observer/index.d.ts +5 -21
  119. package/dist/types/vc/vc-observer-new/entries-timeline/index.d.ts +13 -0
  120. package/dist/types/vc/vc-observer-new/get-element-name.d.ts +8 -0
  121. package/dist/types/vc/vc-observer-new/index.d.ts +18 -0
  122. package/dist/types/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.d.ts +9 -0
  123. package/dist/types/vc/vc-observer-new/metric-calculator/fy25_03/index.d.ts +7 -0
  124. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.d.ts +91 -0
  125. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.d.ts +4 -0
  126. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/heatmap.d.ts +39 -0
  127. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.d.ts +8 -0
  128. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/types.d.ts +43 -0
  129. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/index.d.ts +3 -0
  130. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/calc-union-area.d.ts +11 -0
  131. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.d.ts +23 -0
  132. package/dist/types/vc/vc-observer-new/metric-calculator/percentile-calc/types.d.ts +9 -0
  133. package/dist/types/vc/vc-observer-new/metric-calculator/types.d.ts +20 -0
  134. package/dist/types/vc/vc-observer-new/metric-calculator/utils/get-viewport-height.d.ts +1 -0
  135. package/dist/types/vc/vc-observer-new/metric-calculator/utils/get-viewport-width.d.ts +1 -0
  136. package/dist/types/vc/vc-observer-new/metric-calculator/utils/is-viewport-entry-data.d.ts +2 -0
  137. package/dist/types/vc/vc-observer-new/metric-calculator/utils/task-yield.d.ts +1 -0
  138. package/dist/types/vc/vc-observer-new/types.d.ts +21 -0
  139. package/dist/types/vc/vc-observer-new/viewport-observer/index.d.ts +22 -0
  140. package/dist/types/vc/vc-observer-new/viewport-observer/intersection-observer/index.d.ts +30 -0
  141. package/dist/types/vc/vc-observer-new/viewport-observer/mutation-observer/index.d.ts +14 -0
  142. package/dist/types/vc/vc-observer-new/viewport-observer/performance-observer/index.d.ts +14 -0
  143. package/dist/types/vc/vc-observer-new/viewport-observer/types.d.ts +10 -0
  144. package/dist/types/vc/vc-observer-new/window-event-observer/index.d.ts +17 -0
  145. package/dist/types-ts4.5/common/index.d.ts +1 -0
  146. package/dist/types-ts4.5/create-experimental-interaction-metrics-payload/index.d.ts +3 -2
  147. package/dist/types-ts4.5/create-payload/index.d.ts +4 -4
  148. package/dist/types-ts4.5/interaction-metrics/post-interaction-log.d.ts +3 -2
  149. package/dist/types-ts4.5/segment/schedule-on-paint.d.ts +2 -0
  150. package/dist/types-ts4.5/vc/index.d.ts +3 -3
  151. package/dist/types-ts4.5/vc/types.d.ts +34 -0
  152. package/dist/types-ts4.5/vc/vc-observer/index.d.ts +5 -21
  153. package/dist/types-ts4.5/vc/vc-observer-new/entries-timeline/index.d.ts +13 -0
  154. package/dist/types-ts4.5/vc/vc-observer-new/get-element-name.d.ts +8 -0
  155. package/dist/types-ts4.5/vc/vc-observer-new/index.d.ts +18 -0
  156. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/abstract-base-vc-calculator.d.ts +9 -0
  157. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/fy25_03/index.d.ts +7 -0
  158. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/canvas-pixel.d.ts +91 -0
  159. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/canvas-heatmap/index.d.ts +4 -0
  160. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/heatmap.d.ts +39 -0
  161. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/index.d.ts +8 -0
  162. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/heatmap/types.d.ts +43 -0
  163. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/index.d.ts +3 -0
  164. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/calc-union-area.d.ts +11 -0
  165. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/rect-sweeping-line/index.d.ts +23 -0
  166. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/percentile-calc/types.d.ts +9 -0
  167. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/types.d.ts +20 -0
  168. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/utils/get-viewport-height.d.ts +1 -0
  169. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/utils/get-viewport-width.d.ts +1 -0
  170. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/utils/is-viewport-entry-data.d.ts +2 -0
  171. package/dist/types-ts4.5/vc/vc-observer-new/metric-calculator/utils/task-yield.d.ts +1 -0
  172. package/dist/types-ts4.5/vc/vc-observer-new/types.d.ts +21 -0
  173. package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/index.d.ts +22 -0
  174. package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/intersection-observer/index.d.ts +30 -0
  175. package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/mutation-observer/index.d.ts +14 -0
  176. package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/performance-observer/index.d.ts +14 -0
  177. package/dist/types-ts4.5/vc/vc-observer-new/viewport-observer/types.d.ts +10 -0
  178. package/dist/types-ts4.5/vc/vc-observer-new/window-event-observer/index.d.ts +17 -0
  179. package/package.json +13 -1
@@ -0,0 +1,126 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
3
+ import _createClass from "@babel/runtime/helpers/createClass";
4
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
5
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
6
+ import EntriesTimeline from './entries-timeline';
7
+ import _getElementName from './get-element-name';
8
+ import VCCalculator_FY25_03 from './metric-calculator/fy25_03';
9
+ import ViewportObserver from './viewport-observer';
10
+ import WindowEventObserver from './window-event-observer';
11
+ var DEFAULT_SELECTOR_CONFIG = {
12
+ id: false,
13
+ testId: true,
14
+ role: false,
15
+ className: false,
16
+ dataVC: true
17
+ };
18
+ var VCObserverNew = /*#__PURE__*/function () {
19
+ function VCObserverNew(config) {
20
+ var _config$selectorConfi,
21
+ _this = this;
22
+ _classCallCheck(this, VCObserverNew);
23
+ _defineProperty(this, "startTime", 0);
24
+ _defineProperty(this, "viewportObserver", null);
25
+ _defineProperty(this, "windowEventObserver", null);
26
+ this.entriesTimeline = new EntriesTimeline();
27
+ this.selectorConfig = (_config$selectorConfi = config.selectorConfig) !== null && _config$selectorConfi !== void 0 ? _config$selectorConfi : DEFAULT_SELECTOR_CONFIG;
28
+ this.viewportObserver = new ViewportObserver({
29
+ onChange: function onChange(onChangeArg) {
30
+ var time = onChangeArg.time,
31
+ type = onChangeArg.type,
32
+ elementRef = onChangeArg.elementRef,
33
+ visible = onChangeArg.visible,
34
+ rect = onChangeArg.rect,
35
+ previousRect = onChangeArg.previousRect,
36
+ mutationData = onChangeArg.mutationData;
37
+ var elementName = 'unknown';
38
+ var element = elementRef.deref();
39
+ if (element) {
40
+ elementName = _this.getElementName(element);
41
+ }
42
+ _this.entriesTimeline.push({
43
+ time: time,
44
+ type: type,
45
+ data: {
46
+ elementName: elementName,
47
+ rect: rect,
48
+ previousRect: previousRect,
49
+ visible: visible,
50
+ attributeName: mutationData === null || mutationData === void 0 ? void 0 : mutationData.attributeName
51
+ }
52
+ });
53
+ }
54
+ });
55
+ this.windowEventObserver = new WindowEventObserver({
56
+ onEvent: function onEvent(_ref) {
57
+ var time = _ref.time,
58
+ type = _ref.type;
59
+ _this.entriesTimeline.push({
60
+ time: time,
61
+ type: 'window:event',
62
+ data: {
63
+ eventType: type
64
+ }
65
+ });
66
+ }
67
+ });
68
+ }
69
+ return _createClass(VCObserverNew, [{
70
+ key: "start",
71
+ value: function start() {
72
+ var _this$viewportObserve, _this$windowEventObse;
73
+ (_this$viewportObserve = this.viewportObserver) === null || _this$viewportObserve === void 0 || _this$viewportObserve.start();
74
+ (_this$windowEventObse = this.windowEventObserver) === null || _this$windowEventObse === void 0 || _this$windowEventObse.start();
75
+ }
76
+ }, {
77
+ key: "stop",
78
+ value: function stop() {
79
+ var _this$viewportObserve2, _this$windowEventObse2;
80
+ (_this$viewportObserve2 = this.viewportObserver) === null || _this$viewportObserve2 === void 0 || _this$viewportObserve2.stop();
81
+ (_this$windowEventObse2 = this.windowEventObserver) === null || _this$windowEventObse2 === void 0 || _this$windowEventObse2.stop();
82
+ }
83
+ }, {
84
+ key: "getVCResult",
85
+ value: function () {
86
+ var _getVCResult = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(param) {
87
+ var start, stop, results, calculator_fy25_03, orderedEntries, fy25_03;
88
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
89
+ while (1) switch (_context.prev = _context.next) {
90
+ case 0:
91
+ start = param.start, stop = param.stop;
92
+ results = [];
93
+ calculator_fy25_03 = new VCCalculator_FY25_03();
94
+ orderedEntries = this.entriesTimeline.getOrderedEntries({
95
+ start: start,
96
+ stop: stop
97
+ });
98
+ _context.next = 6;
99
+ return calculator_fy25_03.calculate({
100
+ orderedEntries: orderedEntries
101
+ });
102
+ case 6:
103
+ fy25_03 = _context.sent;
104
+ if (fy25_03) {
105
+ results.push(fy25_03);
106
+ }
107
+ return _context.abrupt("return", results);
108
+ case 9:
109
+ case "end":
110
+ return _context.stop();
111
+ }
112
+ }, _callee, this);
113
+ }));
114
+ function getVCResult(_x) {
115
+ return _getVCResult.apply(this, arguments);
116
+ }
117
+ return getVCResult;
118
+ }()
119
+ }, {
120
+ key: "getElementName",
121
+ value: function getElementName(element) {
122
+ return _getElementName(this.selectorConfig, element);
123
+ }
124
+ }]);
125
+ }();
126
+ export { VCObserverNew as default };
@@ -0,0 +1,69 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
3
+ import _createClass from "@babel/runtime/helpers/createClass";
4
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
5
+ import calculateTTVCPercentiles from './percentile-calc';
6
+ import getViewportHeight from './utils/get-viewport-height';
7
+ import getViewportWidth from './utils/get-viewport-width';
8
+ var AbstractVCCalculatorBase = /*#__PURE__*/function () {
9
+ function AbstractVCCalculatorBase(revisionNo) {
10
+ _classCallCheck(this, AbstractVCCalculatorBase);
11
+ this.revisionNo = revisionNo;
12
+ }
13
+ return _createClass(AbstractVCCalculatorBase, [{
14
+ key: "calculate",
15
+ value: function () {
16
+ var _calculate = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {
17
+ var _this = this,
18
+ _vcDetails$90$t,
19
+ _vcDetails$;
20
+ var orderedEntries, filteredEntries, isVCClean, vcDetails;
21
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
22
+ while (1) switch (_context.prev = _context.next) {
23
+ case 0:
24
+ orderedEntries = _ref.orderedEntries;
25
+ filteredEntries = orderedEntries.filter(function (entry) {
26
+ return _this.isEntryIncluded(entry);
27
+ });
28
+ isVCClean = this.isVCClean(filteredEntries);
29
+ if (isVCClean) {
30
+ _context.next = 5;
31
+ break;
32
+ }
33
+ return _context.abrupt("return", {
34
+ revision: this.revisionNo,
35
+ 'metric:vc90': null,
36
+ clean: false
37
+ });
38
+ case 5:
39
+ _context.next = 7;
40
+ return calculateTTVCPercentiles({
41
+ viewport: {
42
+ width: getViewportWidth(),
43
+ height: getViewportHeight()
44
+ },
45
+ orderedEntries: filteredEntries,
46
+ percentiles: [25, 50, 75, 80, 85, 90, 95, 98, 99]
47
+ });
48
+ case 7:
49
+ vcDetails = _context.sent;
50
+ return _context.abrupt("return", {
51
+ revision: this.revisionNo,
52
+ vcDetails: vcDetails !== null && vcDetails !== void 0 ? vcDetails : undefined,
53
+ clean: isVCClean,
54
+ 'metric:vc90': (_vcDetails$90$t = vcDetails === null || vcDetails === void 0 || (_vcDetails$ = vcDetails['90']) === null || _vcDetails$ === void 0 ? void 0 : _vcDetails$.t) !== null && _vcDetails$90$t !== void 0 ? _vcDetails$90$t : null
55
+ });
56
+ case 9:
57
+ case "end":
58
+ return _context.stop();
59
+ }
60
+ }, _callee, this);
61
+ }));
62
+ function calculate(_x) {
63
+ return _calculate.apply(this, arguments);
64
+ }
65
+ return calculate;
66
+ }()
67
+ }]);
68
+ }();
69
+ export { AbstractVCCalculatorBase as default };
@@ -0,0 +1,54 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/createClass";
3
+ import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
4
+ import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
5
+ import _inherits from "@babel/runtime/helpers/inherits";
6
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
7
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
8
+ import AbstractVCCalculatorBase from '../abstract-base-vc-calculator';
9
+ import isViewportEntryData from '../utils/is-viewport-entry-data';
10
+ var ABORTING_WINDOW_EVENT = ['wheel', 'scroll', 'keydown', 'resize'];
11
+ var REVISION_NO = 'fy25.03';
12
+ var CONSIDERED_ENTRY_TYPE = ['mutation:child-element', 'mutation:element', 'mutation:attribute', 'layout-shift', 'window:event'];
13
+ var VCCalculator_FY25_03 = /*#__PURE__*/function (_AbstractVCCalculator) {
14
+ function VCCalculator_FY25_03() {
15
+ _classCallCheck(this, VCCalculator_FY25_03);
16
+ return _callSuper(this, VCCalculator_FY25_03, [REVISION_NO]);
17
+ }
18
+ _inherits(VCCalculator_FY25_03, _AbstractVCCalculator);
19
+ return _createClass(VCCalculator_FY25_03, [{
20
+ key: "isEntryIncluded",
21
+ value: function isEntryIncluded(entry) {
22
+ if (!CONSIDERED_ENTRY_TYPE.includes(entry.type)) {
23
+ return false;
24
+ }
25
+ if (entry.type === 'mutation:attribute') {
26
+ var entryData = entry.data;
27
+ var attributeName = entryData.attributeName;
28
+ if (!attributeName) {
29
+ return false;
30
+ }
31
+ return true;
32
+ }
33
+ if (isViewportEntryData(entry.data) && !entry.data.visible) {
34
+ return false;
35
+ }
36
+ return true;
37
+ }
38
+ }, {
39
+ key: "isVCClean",
40
+ value: function isVCClean(filteredEntries) {
41
+ var hasAbortEvent = filteredEntries.some(function (entry) {
42
+ if (entry.type === 'window:event') {
43
+ var data = entry.data;
44
+ if (ABORTING_WINDOW_EVENT.includes(data.eventType)) {
45
+ return true;
46
+ }
47
+ }
48
+ return false;
49
+ });
50
+ return !hasAbortEvent;
51
+ }
52
+ }]);
53
+ }(AbstractVCCalculatorBase);
54
+ export { VCCalculator_FY25_03 as default };
@@ -0,0 +1,268 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
3
+ import _createClass from "@babel/runtime/helpers/createClass";
4
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
5
+ import taskYield from '../../utils/task-yield';
6
+
7
+ // 24-bit color value
8
+
9
+ /**
10
+ * Class responsible for managing a scaled canvas and tracking pixel drawing operations.
11
+ * It uses an OffscreenCanvas for better performance and maintains a mapping between
12
+ * colors and timestamps for pixel counting purposes.
13
+ */
14
+ export var ViewportCanvas = /*#__PURE__*/function () {
15
+ /** The underlying OffscreenCanvas instance */
16
+
17
+ /** The 2D rendering context of the canvas */
18
+
19
+ /** Scale factor applied to the canvas (affects final pixel counts) */
20
+
21
+ /** Maps unique colors to their corresponding timestamps */
22
+
23
+ /** Counter used to generate unique colors */
24
+
25
+ /**
26
+ * Creates a new ViewportCanvas instance.
27
+ * @param viewport - The dimensions of the viewport
28
+ * @param scaleFactor - Scale factor to apply to the canvas (default: 0.5)
29
+ * @throws {Error} If canvas context cannot be obtained
30
+ */
31
+ function ViewportCanvas(viewport) {
32
+ var scaleFactor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
33
+ _classCallCheck(this, ViewportCanvas);
34
+ this.scaleFactor = scaleFactor;
35
+ this.colorCounter = 1;
36
+ this.colorTimeMap = new Map();
37
+
38
+ // Calculate scaled dimensions
39
+ this.scaledWidth = Math.ceil(viewport.width * scaleFactor);
40
+ this.scaledHeight = Math.ceil(viewport.height * scaleFactor);
41
+ this.scaleX = this.scaledWidth / viewport.width;
42
+ this.scaleY = this.scaledHeight / viewport.height;
43
+
44
+ // Initialize OffscreenCanvas with scaled dimensions
45
+ this.canvas = document.createElement('canvas');
46
+ this.canvas.width = this.scaledWidth;
47
+ this.canvas.height = this.scaledHeight;
48
+ var ctx = this.canvas.getContext('2d', {
49
+ alpha: false,
50
+ // Disable alpha channel for better performance
51
+ willReadFrequently: true,
52
+ // Optimize for frequent pixel reading
53
+ colorSpace: 'srgb' // Use standard RGB color space
54
+ });
55
+ if (!ctx) {
56
+ throw new Error('Could not get canvas context');
57
+ }
58
+ this.ctx = ctx;
59
+ this.ctx.globalCompositeOperation = 'source-over';
60
+ this.clear();
61
+ }
62
+ return _createClass(ViewportCanvas, [{
63
+ key: "getScaledDimensions",
64
+ value: function getScaledDimensions() {
65
+ return {
66
+ width: this.scaledWidth,
67
+ height: this.scaledHeight
68
+ };
69
+ }
70
+
71
+ /**
72
+ * Clears the entire canvas by removing all drawn content.
73
+ * @private
74
+ */
75
+ }, {
76
+ key: "clear",
77
+ value: function clear() {
78
+ this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
79
+ }
80
+
81
+ /**
82
+ * Generates a unique RGB color from an incrementing counter.
83
+ * Uses a 24-bit color space (16,777,216 possible colors).
84
+ *
85
+ * @private
86
+ * @returns A unique RGB color string
87
+ *
88
+ * @example
89
+ * // Example bit operations for color 0x00FF8040:
90
+ * // Red: (0x00FF8040 >> 16) & 0xFF = 0xFF = 255
91
+ * // Green: (0x00FF8040 >> 8) & 0xFF = 0x80 = 128
92
+ * // Blue: 0x00FF8040 & 0xFF = 0x40 = 64
93
+ */
94
+ }, {
95
+ key: "generateColor",
96
+ value: function generateColor() {
97
+ // Wrap around at 16,777,215 (0x00FFFFFF) to stay within 24-bit color space
98
+ var rgbColor = this.colorCounter++ % 0x00ffffff;
99
+ return getRGBComponents(rgbColor);
100
+ }
101
+
102
+ /**
103
+ * Draws a rectangle on the canvas with a unique color and associates it with a timestamp.
104
+ * Each drawn rectangle gets a unique color which is mapped to the provided timestamp.
105
+ *
106
+ * @param rect - The rectangle dimensions to draw
107
+ * @param timestamp - The timestamp to associate with this drawing operation
108
+ */
109
+ }, {
110
+ key: "drawRect",
111
+ value: function drawRect(rect, timestamp) {
112
+ var color = this.generateColor();
113
+ this.colorTimeMap.set(color, timestamp);
114
+ this.ctx.fillStyle = color;
115
+ if (this.scaleFactor === 1) {
116
+ return this.ctx.fillRect(rect.x, rect.y, rect.width, rect.height);
117
+ }
118
+ var scaledX = rect.x * this.scaleX;
119
+ var scaledY = rect.y * this.scaleY;
120
+ var scaledWidth = rect.width * this.scaleX;
121
+ var scaledHeight = rect.height * this.scaleY;
122
+ this.ctx.fillRect(Math.floor(scaledX), Math.ceil(scaledY), Math.max(scaledWidth, 1), Math.max(scaledHeight, 1));
123
+ }
124
+
125
+ /**
126
+ * Calculates the number of pixels drawn for each timestamp.
127
+ * This method:
128
+ * 1. Reads the pixel data from the canvas
129
+ * 2. Counts pixels of each unique color
130
+ * 3. Maps colors back to their timestamps
131
+ * 4. Adjusts counts based on the scale factor
132
+ *
133
+ * @returns A Map containing timestamp to pixel count mappings
134
+ */
135
+ }, {
136
+ key: "getPixelCounts",
137
+ value: (function () {
138
+ var _getPixelCounts = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
139
+ var imageData, timestampsAmount, pixelCounts, timePixelCounts, i, count, color, rgbColor, timestamp;
140
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
141
+ while (1) switch (_context.prev = _context.next) {
142
+ case 0:
143
+ imageData = this.ctx.getImageData(0, 0, this.canvas.width, this.canvas.height);
144
+ timestampsAmount = this.colorTimeMap.size;
145
+ _context.next = 4;
146
+ return calculateDrawnPixelsRaw(imageData, this.scaleFactor, timestampsAmount);
147
+ case 4:
148
+ pixelCounts = _context.sent;
149
+ // Convert color counts to timestamp counts
150
+ timePixelCounts = new Map();
151
+ i = 0;
152
+ case 7:
153
+ if (!(i < pixelCounts.length)) {
154
+ _context.next = 18;
155
+ break;
156
+ }
157
+ count = pixelCounts[i];
158
+ if (!(typeof count !== 'number')) {
159
+ _context.next = 11;
160
+ break;
161
+ }
162
+ return _context.abrupt("continue", 15);
163
+ case 11:
164
+ color = i + 1;
165
+ rgbColor = getRGBComponents(color);
166
+ timestamp = this.colorTimeMap.get(rgbColor);
167
+ if (timestamp !== undefined) {
168
+ timePixelCounts.set(timestamp, (timePixelCounts.get(timestamp) || 0) + count);
169
+ }
170
+ case 15:
171
+ i++;
172
+ _context.next = 7;
173
+ break;
174
+ case 18:
175
+ return _context.abrupt("return", timePixelCounts);
176
+ case 19:
177
+ case "end":
178
+ return _context.stop();
179
+ }
180
+ }, _callee, this);
181
+ }));
182
+ function getPixelCounts() {
183
+ return _getPixelCounts.apply(this, arguments);
184
+ }
185
+ return getPixelCounts;
186
+ }())
187
+ }]);
188
+ }();
189
+
190
+ /**
191
+ * Converts a number into RGB components in such a way that they can be recombined
192
+ * to form the original number using bitwise operations.
193
+ * @param number - The input number to be split into RGB components.
194
+ * @returns The RGB color string in the format "rgb(r, g, b)".
195
+ */
196
+ export function getRGBComponents(n) {
197
+ // Ensure the input is within the valid range for a 24-bit color
198
+ if (n < 0 || n > 0xffffff) {
199
+ throw new Error('Input number must be between 0 and 16777215 (inclusive).');
200
+ }
201
+
202
+ // Extract blue component (bits 0-7)
203
+ var blue = n & 0xff;
204
+
205
+ // Extract green component (bits 8-15)
206
+ var green = n >> 8 & 0xff;
207
+
208
+ // Extract red component (bits 16-23)
209
+ var red = n >> 16 & 0xff;
210
+ return "rgb(".concat(red, ", ").concat(green, ", ").concat(blue, ")");
211
+ }
212
+
213
+ /**
214
+ * Calculates the number of pixels drawn for each color in the image data.
215
+ * @param imageData - The image data to analyze.
216
+ * @param scaleFactor - The scale factor applied to the canvas.
217
+ * @param arraySize - The amount of timestamps that were drawn in the viewport
218
+ * @returns A Map containing color to pixel count mappings.
219
+ */
220
+ export function calculateDrawnPixelsRaw(_x, _x2, _x3) {
221
+ return _calculateDrawnPixelsRaw.apply(this, arguments);
222
+ }
223
+ function _calculateDrawnPixelsRaw() {
224
+ _calculateDrawnPixelsRaw = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(imageData, scaleFactor, arraySize) {
225
+ var data, scaleCompensation, arr, i, color, colorIndex;
226
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
227
+ while (1) switch (_context2.prev = _context2.next) {
228
+ case 0:
229
+ data = imageData.data;
230
+ scaleCompensation = Math.round(1 / (scaleFactor * scaleFactor));
231
+ arr = new Uint32Array(arraySize);
232
+ i = 0;
233
+ case 4:
234
+ if (!(i < data.length)) {
235
+ _context2.next = 12;
236
+ break;
237
+ }
238
+ // Check alpha
239
+ if (data[i + 3] !== 0) {
240
+ // Combine RGB components into a single 24-bit color value:
241
+ // (data[i] << 16) - Shift red component left 16 bits (bits 16-23)
242
+ // (data[i + 1] << 8) - Shift green component left 8 bits (bits 8-15)
243
+ // data[i + 2] - Blue component stays as is (bits 0-7)
244
+ // The | operator combines all bits together
245
+ color = data[i] << 16 | data[i + 1] << 8 | data[i + 2];
246
+ colorIndex = color - 1;
247
+ arr[colorIndex] = (arr[colorIndex] || 0) + scaleCompensation;
248
+ }
249
+ if (!(i % 10000 === 0)) {
250
+ _context2.next = 9;
251
+ break;
252
+ }
253
+ _context2.next = 9;
254
+ return taskYield();
255
+ case 9:
256
+ i += 4;
257
+ _context2.next = 4;
258
+ break;
259
+ case 12:
260
+ return _context2.abrupt("return", arr);
261
+ case 13:
262
+ case "end":
263
+ return _context2.stop();
264
+ }
265
+ }, _callee2);
266
+ }));
267
+ return _calculateDrawnPixelsRaw.apply(this, arguments);
268
+ }
@@ -0,0 +1,143 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
4
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
5
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
6
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
7
+ import { fg } from '@atlaskit/platform-feature-flags';
8
+ import { ViewportCanvas } from './canvas-pixel';
9
+ export default function calculateTTVCPercentiles(_x) {
10
+ return _calculateTTVCPercentiles.apply(this, arguments);
11
+ }
12
+ function _calculateTTVCPercentiles() {
13
+ _calculateTTVCPercentiles = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {
14
+ var viewport, orderedEntries, percentiles, canvas, elementMap, _iterator3, _step3, entry, rect, elementName, timePixelCounts, viewportTotalPixels;
15
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
16
+ while (1) switch (_context.prev = _context.next) {
17
+ case 0:
18
+ viewport = _ref.viewport, orderedEntries = _ref.orderedEntries, percentiles = _ref.percentiles;
19
+ canvas = new ViewportCanvas(viewport, fg('platform_ufo_canvas_heatmap_full_precision') ? 1 : 0.25);
20
+ elementMap = new Map();
21
+ _iterator3 = _createForOfIteratorHelper(orderedEntries);
22
+ _context.prev = 4;
23
+ _iterator3.s();
24
+ case 6:
25
+ if ((_step3 = _iterator3.n()).done) {
26
+ _context.next = 17;
27
+ break;
28
+ }
29
+ entry = _step3.value;
30
+ if ('rect' in entry.data) {
31
+ _context.next = 10;
32
+ break;
33
+ }
34
+ return _context.abrupt("continue", 15);
35
+ case 10:
36
+ rect = entry.data.rect;
37
+ elementName = entry.data.elementName;
38
+ canvas.drawRect(rect, entry.time);
39
+ if (!elementMap.has(entry.time)) {
40
+ elementMap.set(entry.time, new Set());
41
+ }
42
+ elementMap.get(entry.time).add(elementName);
43
+ case 15:
44
+ _context.next = 6;
45
+ break;
46
+ case 17:
47
+ _context.next = 22;
48
+ break;
49
+ case 19:
50
+ _context.prev = 19;
51
+ _context.t0 = _context["catch"](4);
52
+ _iterator3.e(_context.t0);
53
+ case 22:
54
+ _context.prev = 22;
55
+ _iterator3.f();
56
+ return _context.finish(22);
57
+ case 25:
58
+ _context.next = 27;
59
+ return canvas.getPixelCounts();
60
+ case 27:
61
+ timePixelCounts = _context.sent;
62
+ viewportTotalPixels = viewport.width * viewport.height;
63
+ return _context.abrupt("return", calculatePercentiles(timePixelCounts, elementMap, percentiles, viewportTotalPixels));
64
+ case 30:
65
+ case "end":
66
+ return _context.stop();
67
+ }
68
+ }, _callee, null, [[4, 19, 22, 25]]);
69
+ }));
70
+ return _calculateTTVCPercentiles.apply(this, arguments);
71
+ }
72
+ export function calculatePercentiles(timePixelCounts, elementMap, unorderedPercentiles, totalPixels) {
73
+ var results = {};
74
+ var cumulativePixels = 0;
75
+ var percentiles = unorderedPercentiles.sort(function (a, b) {
76
+ return a - b;
77
+ });
78
+
79
+ // Sort entries by timestamp for consistent processing
80
+ var sortedEntries = Array.from(timePixelCounts.entries()).sort(function (_ref2, _ref3) {
81
+ var _ref4 = _slicedToArray(_ref2, 1),
82
+ timeA = _ref4[0];
83
+ var _ref5 = _slicedToArray(_ref3, 1),
84
+ timeB = _ref5[0];
85
+ return Number(timeA) - Number(timeB);
86
+ });
87
+ var percentileIndex = 0;
88
+ var domElementsBuffer = new Set();
89
+ var _iterator = _createForOfIteratorHelper(sortedEntries),
90
+ _step;
91
+ try {
92
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
93
+ var _step$value = _slicedToArray(_step.value, 2),
94
+ time = _step$value[0],
95
+ pixelCount = _step$value[1];
96
+ cumulativePixels += pixelCount;
97
+ var percentCovered = cumulativePixels / totalPixels * 100;
98
+ var elementNames = elementMap.get(time) || new Set();
99
+ elementNames.forEach(function (elName) {
100
+ return domElementsBuffer.add(elName);
101
+ });
102
+ var matchesAnyCheckpoints = false;
103
+ while (percentileIndex < percentiles.length && percentCovered >= percentiles[percentileIndex]) {
104
+ results["".concat(percentiles[percentileIndex])] = {
105
+ t: Number(time),
106
+ e: Array.from(domElementsBuffer)
107
+ };
108
+ percentileIndex++;
109
+ matchesAnyCheckpoints = true;
110
+ }
111
+ if (matchesAnyCheckpoints) {
112
+ domElementsBuffer.clear();
113
+ }
114
+ if (percentileIndex >= percentiles.length) {
115
+ break;
116
+ }
117
+ }
118
+
119
+ // Fill in any missing percentiles
120
+ } catch (err) {
121
+ _iterator.e(err);
122
+ } finally {
123
+ _iterator.f();
124
+ }
125
+ var _iterator2 = _createForOfIteratorHelper(percentiles),
126
+ _step2;
127
+ try {
128
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
129
+ var percentile = _step2.value;
130
+ if (!(percentile in results)) {
131
+ results["".concat(percentile)] = {
132
+ t: 0,
133
+ e: []
134
+ };
135
+ }
136
+ }
137
+ } catch (err) {
138
+ _iterator2.e(err);
139
+ } finally {
140
+ _iterator2.f();
141
+ }
142
+ return results;
143
+ }