chrome-devtools-frontend 1.0.1556696 → 1.0.1558690

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 (157) hide show
  1. package/front_end/core/common/Object.ts +5 -1
  2. package/front_end/core/host/ResourceLoader.ts +1 -1
  3. package/front_end/core/host/UserMetrics.ts +3 -1
  4. package/front_end/core/sdk/DOMModel.ts +7 -0
  5. package/front_end/core/sdk/NetworkManager.ts +0 -7
  6. package/front_end/core/sdk/SourceMap.ts +16 -2
  7. package/front_end/core/sdk/SourceMapManager.ts +1 -1
  8. package/front_end/core/sdk/SourceMapScopesInfo.ts +11 -4
  9. package/front_end/entrypoints/formatter_worker/FormatterActions.ts +1 -0
  10. package/front_end/entrypoints/formatter_worker/ScopeParser.ts +51 -8
  11. package/front_end/entrypoints/main/GlobalAiButton.ts +5 -1
  12. package/front_end/generated/Deprecation.ts +0 -7
  13. package/front_end/generated/InspectorBackendCommands.ts +3 -3
  14. package/front_end/generated/protocol.ts +9 -0
  15. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +3 -3
  16. package/front_end/models/bindings/CompilerScriptMapping.ts +7 -6
  17. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +4 -4
  18. package/front_end/models/javascript_metadata/NativeFunctions.js +2 -2
  19. package/front_end/models/stack_trace/StackTraceImpl.ts +5 -3
  20. package/front_end/models/stack_trace/StackTraceModel.ts +53 -40
  21. package/front_end/models/trace/EventsSerializer.ts +8 -2
  22. package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +2 -2
  23. package/front_end/panels/application/AppManifestView.ts +134 -223
  24. package/front_end/panels/application/CookieItemsView.ts +1 -0
  25. package/front_end/panels/application/SharedStorageTreeElement.ts +3 -0
  26. package/front_end/panels/application/appManifestView.css +1 -1
  27. package/front_end/panels/console/ConsoleViewMessage.ts +4 -3
  28. package/front_end/panels/elements/ElementsTreeElement.ts +30 -1
  29. package/front_end/panels/elements/ElementsTreeOutlineRenderer.ts +7 -1
  30. package/front_end/panels/elements/components/AdornerManager.ts +8 -0
  31. package/front_end/panels/emulation/DeviceModeToolbar.ts +3 -1
  32. package/front_end/panels/issues/AffectedResourcesView.ts +0 -1
  33. package/front_end/panels/lighthouse/LighthousePanel.ts +10 -0
  34. package/front_end/panels/lighthouse/lighthousePanel.css +46 -3
  35. package/front_end/panels/network/NetworkLogViewColumns.ts +9 -9
  36. package/front_end/panels/network/RequestCookiesView.ts +125 -141
  37. package/front_end/panels/network/components/RequestHeadersView.ts +2 -2
  38. package/front_end/panels/network/requestCookiesView.css +22 -20
  39. package/front_end/panels/recorder/components/RecordingView.ts +3 -3
  40. package/front_end/panels/recorder/components/StepView.ts +2 -1
  41. package/front_end/panels/settings/keybindsSettingsTab.css +4 -0
  42. package/front_end/panels/sources/CallStackSidebarPane.ts +7 -3
  43. package/front_end/panels/sources/DebuggerPausedMessage.ts +125 -90
  44. package/front_end/panels/sources/SourcesPanel.ts +10 -7
  45. package/front_end/panels/sources/debuggerPausedMessage.css +8 -0
  46. package/front_end/panels/timeline/components/sidebarInsightsTab.css +2 -0
  47. package/front_end/third_party/acorn/estree-legacy.d.ts +2 -0
  48. package/front_end/third_party/chromium/README.chromium +1 -1
  49. package/front_end/third_party/puppeteer/README.chromium +2 -2
  50. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +12 -0
  51. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
  52. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
  53. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +14 -2
  54. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
  55. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
  56. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts +3 -1
  57. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts.map +1 -1
  58. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js +6 -0
  59. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js.map +1 -1
  60. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.d.ts +0 -1
  61. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.d.ts.map +1 -1
  62. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.js +0 -20
  63. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.js.map +1 -1
  64. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts +3 -1
  65. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts.map +1 -1
  66. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js +10 -14
  67. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js.map +1 -1
  68. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts +1 -0
  69. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  70. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js +14 -0
  71. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  72. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts +3 -1
  73. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts.map +1 -1
  74. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js +12 -0
  75. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js.map +1 -1
  76. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/EmulationManager.d.ts +1 -0
  77. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/EmulationManager.d.ts.map +1 -1
  78. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/EmulationManager.js +22 -0
  79. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/EmulationManager.js.map +1 -1
  80. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts +3 -1
  81. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts.map +1 -1
  82. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +9 -2
  83. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
  84. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  85. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  86. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  87. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js.map +1 -1
  88. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  89. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
  90. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
  91. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +26 -0
  92. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +72 -15
  93. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +12 -0
  94. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
  95. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
  96. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +14 -2
  97. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
  98. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
  99. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts +3 -1
  100. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts.map +1 -1
  101. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js +6 -0
  102. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js.map +1 -1
  103. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.d.ts +0 -1
  104. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.d.ts.map +1 -1
  105. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.js +0 -20
  106. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.js.map +1 -1
  107. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts +3 -1
  108. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts.map +1 -1
  109. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js +11 -15
  110. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js.map +1 -1
  111. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts +1 -0
  112. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  113. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js +14 -0
  114. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  115. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts +3 -1
  116. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts.map +1 -1
  117. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js +12 -0
  118. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js.map +1 -1
  119. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/EmulationManager.d.ts +1 -0
  120. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/EmulationManager.d.ts.map +1 -1
  121. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/EmulationManager.js +22 -0
  122. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/EmulationManager.js.map +1 -1
  123. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts +3 -1
  124. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts.map +1 -1
  125. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +9 -2
  126. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
  127. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  128. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  129. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js.map +1 -1
  130. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
  131. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
  132. package/front_end/third_party/puppeteer/package/lib/types.d.ts +26 -0
  133. package/front_end/third_party/puppeteer/package/package.json +1 -1
  134. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +18 -0
  135. package/front_end/third_party/puppeteer/package/src/api/Page.ts +16 -2
  136. package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +13 -0
  137. package/front_end/third_party/puppeteer/package/src/bidi/HTTPRequest.ts +0 -33
  138. package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +14 -28
  139. package/front_end/third_party/puppeteer/package/src/bidi/core/BrowsingContext.ts +19 -0
  140. package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +19 -0
  141. package/front_end/third_party/puppeteer/package/src/cdp/EmulationManager.ts +30 -0
  142. package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +15 -6
  143. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  144. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  145. package/front_end/ui/components/icon_button/iconButton.css +3 -1
  146. package/front_end/ui/components/report_view/ReportView.ts +11 -2
  147. package/front_end/ui/components/report_view/report.css +16 -0
  148. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +135 -7
  149. package/front_end/ui/components/text_editor/config.ts +6 -6
  150. package/front_end/ui/legacy/ContextMenu.ts +11 -2
  151. package/front_end/ui/legacy/TextPrompt.ts +1 -1
  152. package/front_end/ui/legacy/Toolbar.ts +4 -0
  153. package/front_end/ui/legacy/UIUtils.ts +0 -2
  154. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +18 -3
  155. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +3 -3
  156. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +6 -0
  157. package/package.json +1 -1
@@ -2,6 +2,7 @@
2
2
  // Use of this source code is governed by a BSD-style license that can be
3
3
  // found in the LICENSE file.
4
4
 
5
+ import * as Common from '../../core/common/common.js';
5
6
  import * as SDK from '../../core/sdk/sdk.js';
6
7
  import type * as Protocol from '../../generated/protocol.js';
7
8
 
@@ -32,6 +33,7 @@ export type TranslateRawFrames = (frames: readonly RawFrame[], target: SDK.Targe
32
33
  */
33
34
  export class StackTraceModel extends SDK.SDKModel.SDKModel<unknown> {
34
35
  readonly #trie = new Trie();
36
+ readonly #mutex = new Common.Mutex.Mutex();
35
37
 
36
38
  /** @returns the {@link StackTraceModel} for the target, or the model for the primaryPageTarget when passing null/undefined */
37
39
  static #modelForTarget(target: SDK.Target.Target|null|undefined): StackTraceModel {
@@ -45,7 +47,7 @@ export class StackTraceModel extends SDK.SDKModel.SDKModel<unknown> {
45
47
  async createFromProtocolRuntime(stackTrace: Protocol.Runtime.StackTrace, rawFramesToUIFrames: TranslateRawFrames):
46
48
  Promise<StackTrace.StackTrace.StackTrace> {
47
49
  const [syncFragment, asyncFragments] = await Promise.all([
48
- this.#createSyncFragment(stackTrace, rawFramesToUIFrames),
50
+ this.#createFragment(stackTrace.callFrames, rawFramesToUIFrames),
49
51
  this.#createAsyncFragments(stackTrace, rawFramesToUIFrames),
50
52
  ]);
51
53
 
@@ -65,53 +67,51 @@ export class StackTraceModel extends SDK.SDKModel.SDKModel<unknown> {
65
67
 
66
68
  /** Trigger re-translation of all fragments with the provide script in their call stack */
67
69
  async scriptInfoChanged(script: SDK.Script.Script, translateRawFrames: TranslateRawFrames): Promise<void> {
68
- const translatePromises: Array<Promise<unknown>> = [];
69
- let stackTracesToUpdate = new Set<AnyStackTraceImpl>();
70
-
71
- for (const fragment of this.#affectedFragments(script)) {
72
- // We trigger re-translation only for fragments of leaf-nodes. Any fragment along the ancestor-chain
73
- // is re-translated as a side-effect.
74
- // We just need to remember the stack traces of the skipped over fragments, so we can send the
75
- // UPDATED event also to them.
76
- if (fragment.node.children.length === 0) {
77
- translatePromises.push(this.#translateFragment(fragment, translateRawFrames));
70
+ const release = await this.#mutex.acquire();
71
+ try {
72
+ const translatePromises: Array<Promise<unknown>> = [];
73
+ let stackTracesToUpdate = new Set<AnyStackTraceImpl>();
74
+
75
+ for (const fragment of this.#affectedFragments(script)) {
76
+ // We trigger re-translation only for fragments of leaf-nodes. Any fragment along the ancestor-chain
77
+ // is re-translated as a side-effect.
78
+ // We just need to remember the stack traces of the skipped over fragments, so we can send the
79
+ // UPDATED event also to them.
80
+ if (fragment.node.children.length === 0) {
81
+ translatePromises.push(this.#translateFragment(fragment, translateRawFrames));
82
+ }
83
+ stackTracesToUpdate = stackTracesToUpdate.union(fragment.stackTraces);
78
84
  }
79
- stackTracesToUpdate = stackTracesToUpdate.union(fragment.stackTraces);
80
- }
81
85
 
82
- await Promise.all(translatePromises);
86
+ await Promise.all(translatePromises);
83
87
 
84
- for (const stackTrace of stackTracesToUpdate) {
85
- stackTrace.dispatchEventToListeners(StackTrace.StackTrace.Events.UPDATED);
88
+ for (const stackTrace of stackTracesToUpdate) {
89
+ stackTrace.dispatchEventToListeners(StackTrace.StackTrace.Events.UPDATED);
90
+ }
91
+ } finally {
92
+ release();
86
93
  }
87
94
  }
88
95
 
89
- async #createSyncFragment(stackTrace: Protocol.Runtime.StackTrace, rawFramesToUIFrames: TranslateRawFrames):
90
- Promise<FragmentImpl> {
91
- const fragment = this.#createFragment(stackTrace.callFrames);
92
- await this.#translateFragment(fragment, rawFramesToUIFrames);
93
- return fragment;
94
- }
95
-
96
96
  async #createDebuggableFragment(
97
97
  pausedDetails: SDK.DebuggerModel.DebuggerPausedDetails,
98
98
  rawFramesToUIFrames: TranslateRawFrames): Promise<DebuggableFragmentImpl> {
99
- const fragment = this.#createFragment(pausedDetails.callFrames.map(frame => ({
100
- scriptId: frame.script.scriptId,
101
- url: frame.script.sourceURL,
102
- functionName: frame.functionName,
103
- lineNumber: frame.location().lineNumber,
104
- columnNumber: frame.location().columnNumber,
105
- })));
106
- await this.#translateFragment(fragment, rawFramesToUIFrames);
99
+ const fragment = await this.#createFragment(
100
+ pausedDetails.callFrames.map(frame => ({
101
+ scriptId: frame.script.scriptId,
102
+ url: frame.script.sourceURL,
103
+ functionName: frame.functionName,
104
+ lineNumber: frame.location().lineNumber,
105
+ columnNumber: frame.location().columnNumber,
106
+ })),
107
+ rawFramesToUIFrames);
107
108
  return new DebuggableFragmentImpl(fragment, pausedDetails.callFrames);
108
109
  }
109
110
 
110
111
  async #createAsyncFragments(
111
112
  stackTraceOrPausedEvent: Protocol.Runtime.StackTrace|SDK.DebuggerModel.DebuggerPausedDetails,
112
113
  rawFramesToUIFrames: TranslateRawFrames): Promise<AsyncFragmentImpl[]> {
113
- const asyncFragments: AsyncFragmentImpl[] = [];
114
- const translatePromises: Array<Promise<unknown>> = [];
114
+ const asyncFragments: Array<Promise<AsyncFragmentImpl>> = [];
115
115
 
116
116
  const debuggerModel = this.target().model(SDK.DebuggerModel.DebuggerModel);
117
117
  if (debuggerModel) {
@@ -122,18 +122,31 @@ export class StackTraceModel extends SDK.SDKModel.SDKModel<unknown> {
122
122
  continue;
123
123
  }
124
124
  const model = StackTraceModel.#modelForTarget(target);
125
- const fragment = model.#createFragment(asyncStackTrace.callFrames);
126
- translatePromises.push(model.#translateFragment(fragment, rawFramesToUIFrames));
127
- asyncFragments.push(new AsyncFragmentImpl(asyncStackTrace.description ?? '', fragment));
125
+ const asyncFragmentPromise =
126
+ model.#createFragment(asyncStackTrace.callFrames, rawFramesToUIFrames)
127
+ .then(fragment => new AsyncFragmentImpl(asyncStackTrace.description ?? '', fragment));
128
+ asyncFragments.push(asyncFragmentPromise);
128
129
  }
129
130
  }
130
131
 
131
- await Promise.all(translatePromises);
132
- return asyncFragments;
132
+ return await Promise.all(asyncFragments);
133
133
  }
134
134
 
135
- #createFragment(frames: RawFrame[]): FragmentImpl {
136
- return FragmentImpl.getOrCreate(this.#trie.insert(frames));
135
+ async #createFragment(frames: RawFrame[], rawFramesToUIFrames: TranslateRawFrames): Promise<FragmentImpl> {
136
+ const release = await this.#mutex.acquire();
137
+ try {
138
+ const node = this.#trie.insert(frames);
139
+ const requiresTranslation = !Boolean(node.fragment);
140
+ const fragment = FragmentImpl.getOrCreate(node);
141
+
142
+ if (requiresTranslation) {
143
+ await this.#translateFragment(fragment, rawFramesToUIFrames);
144
+ }
145
+
146
+ return fragment;
147
+ } finally {
148
+ release();
149
+ }
137
150
  }
138
151
 
139
152
  async #translateFragment(fragment: FragmentImpl, rawFramesToUIFrames: TranslateRawFrames): Promise<void> {
@@ -20,9 +20,15 @@ export class EventsSerializer {
20
20
  }
21
21
 
22
22
  const rawEvents = Helpers.SyntheticEvents.SyntheticEventsManager.getActiveManager().getRawTraceEvents();
23
+ const isSynthetic = Types.Events.isSyntheticBased(event);
24
+ const index = rawEvents.indexOf(isSynthetic ? event.rawSourceEvent : event);
25
+ if (index === -1) {
26
+ throw new Error(`Unknown trace event: ${event.name}`);
27
+ }
28
+
23
29
  const key: Types.File.SyntheticEventKey|Types.File.RawEventKey = Types.Events.isSyntheticBased(event) ?
24
- `${Types.File.EventKeyType.SYNTHETIC_EVENT}-${rawEvents.indexOf(event.rawSourceEvent)}` :
25
- `${Types.File.EventKeyType.RAW_EVENT}-${rawEvents.indexOf(event)}`;
30
+ `${Types.File.EventKeyType.SYNTHETIC_EVENT}-${index}` :
31
+ `${Types.File.EventKeyType.RAW_EVENT}-${index}`;
26
32
  if (key.length < 3) {
27
33
  return null;
28
34
  }
@@ -443,7 +443,7 @@ async function buildLayoutShiftsClusters(): Promise<void> {
443
443
  }
444
444
 
445
445
  let largestScore = 0;
446
- let worstShiftEvent: Types.Events.Event|null = null;
446
+ let worstShiftEvent: Types.Events.SyntheticLayoutShift|null = null;
447
447
 
448
448
  for (const shift of cluster.events) {
449
449
  weightedScore += shift.args.data ? shift.args.data.weighted_score_delta : 0;
@@ -504,7 +504,7 @@ async function buildLayoutShiftsClusters(): Promise<void> {
504
504
  // Update the cluster's worst layout shift.
505
505
  if (worstShiftEvent) {
506
506
  cluster.worstShiftEvent = worstShiftEvent;
507
- cluster.rawSourceEvent = worstShiftEvent;
507
+ cluster.rawSourceEvent = worstShiftEvent.rawSourceEvent;
508
508
  }
509
509
 
510
510
  // layout shifts are already sorted by time ascending.