@module-federation/devtools 2.7.0 → 2.8.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 (75) hide show
  1. package/dist/types/App.css +13 -0
  2. package/dist/types/App.js +519 -0
  3. package/dist/types/App.module.js +24 -0
  4. package/dist/types/App_module.css +307 -0
  5. package/dist/types/component/DependencyGraph/index.js +225 -0
  6. package/dist/types/component/DependencyGraph/index.module.js +24 -0
  7. package/dist/types/component/DependencyGraph/index_module.css +100 -0
  8. package/dist/types/component/DependencyGraphItem/index.js +124 -0
  9. package/dist/types/component/DependencyGraphItem/index.module.js +24 -0
  10. package/dist/types/component/DependencyGraphItem/index_module.css +95 -0
  11. package/dist/types/component/Form/index.js +372 -0
  12. package/dist/types/component/Form/index.module.js +24 -0
  13. package/dist/types/component/Form/index_module.css +198 -0
  14. package/dist/types/component/LanguageSwitch.js +79 -0
  15. package/dist/types/component/Layout/index.js +471 -0
  16. package/dist/types/component/Layout/index.module.js +24 -0
  17. package/dist/types/component/Layout/index_module.css +68 -0
  18. package/dist/types/component/LoadingTrace/index.js +953 -0
  19. package/dist/types/component/LoadingTrace/index.module.js +24 -0
  20. package/dist/types/component/LoadingTrace/index_module.css +876 -0
  21. package/dist/types/component/ModuleInfo/index.js +342 -0
  22. package/dist/types/component/ModuleInfo/index.module.js +24 -0
  23. package/dist/types/component/ModuleInfo/index_module.css +184 -0
  24. package/dist/types/component/SharedDepsExplorer/FocusResultDisplay.js +64 -0
  25. package/dist/types/component/SharedDepsExplorer/FocusResultDisplay.module.js +24 -0
  26. package/dist/types/component/SharedDepsExplorer/FocusResultDisplay_module.css +45 -0
  27. package/dist/types/component/SharedDepsExplorer/index.js +638 -0
  28. package/dist/types/component/SharedDepsExplorer/index.module.js +24 -0
  29. package/dist/types/component/SharedDepsExplorer/index_module.css +467 -0
  30. package/dist/types/component/SharedDepsExplorer/share-utils.js +252 -0
  31. package/dist/types/component/ThemeToggle.js +48 -0
  32. package/dist/types/component/ThemeToggle.module.js +24 -0
  33. package/dist/types/component/ThemeToggle_module.css +12 -0
  34. package/dist/types/hooks/useDevtoolsTheme.js +100 -0
  35. package/dist/types/i18n/index.js +721 -0
  36. package/dist/types/init.js +8 -0
  37. package/dist/types/src/App.d.ts +1 -1
  38. package/dist/types/src/component/DependencyGraph/index.d.ts +1 -1
  39. package/dist/types/src/component/DependencyGraphItem/index.d.ts +1 -1
  40. package/dist/types/src/component/Form/index.d.ts +1 -1
  41. package/dist/types/src/component/LanguageSwitch.d.ts +1 -1
  42. package/dist/types/src/component/Layout/index.d.ts +1 -1
  43. package/dist/types/src/component/LoadingTrace/index.d.ts +1 -1
  44. package/dist/types/src/component/ModuleInfo/index.d.ts +1 -1
  45. package/dist/types/src/component/SharedDepsExplorer/index.d.ts +1 -1
  46. package/dist/types/src/i18n/index.d.ts +1 -1
  47. package/dist/types/src/template/constant.d.ts +1 -1
  48. package/dist/types/src/utils/chrome/observability.d.ts +1 -1
  49. package/dist/types/src/utils/data/index.d.ts +1 -1
  50. package/dist/types/stories/index.stories.d.ts +2 -1
  51. package/dist/types/template/constant.js +84 -0
  52. package/dist/types/template/index.js +21 -0
  53. package/dist/types/utils/chrome/fast-refresh.js +329 -0
  54. package/dist/types/utils/chrome/index.js +321 -0
  55. package/dist/types/utils/chrome/messages.js +39 -0
  56. package/dist/types/utils/chrome/observability-plugin.js +85 -0
  57. package/dist/types/utils/chrome/observability-shared.js +125 -0
  58. package/dist/types/utils/chrome/observability.js +233 -0
  59. package/dist/types/utils/chrome/override-remote.js +17 -0
  60. package/dist/types/utils/chrome/post-message-init.js +5 -0
  61. package/dist/types/utils/chrome/post-message-listener.js +36 -0
  62. package/dist/types/utils/chrome/post-message-start.js +10 -0
  63. package/dist/types/utils/chrome/post-message.js +91 -0
  64. package/dist/types/utils/chrome/safe-post-message.js +147 -0
  65. package/dist/types/utils/chrome/snapshot-plugin.js +17 -0
  66. package/dist/types/utils/chrome/storage.js +71 -0
  67. package/dist/types/utils/data/index.js +83 -0
  68. package/dist/types/utils/index.js +27 -0
  69. package/dist/types/utils/sdk/graph.js +213 -0
  70. package/dist/types/utils/sdk/index.js +104 -0
  71. package/dist/types/utils/types/common.js +15 -0
  72. package/dist/types/utils/types/index.js +21 -0
  73. package/dist/types/vendor/basic-proxy-core.js +147 -0
  74. package/dist/types/worker/index.js +175 -0
  75. package/package.json +6 -6
@@ -0,0 +1,953 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
+ var __getProtoOf = Object.getPrototypeOf;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
11
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
+ var __spreadValues = (a, b) => {
13
+ for (var prop in b || (b = {}))
14
+ if (__hasOwnProp.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ if (__getOwnPropSymbols)
17
+ for (var prop of __getOwnPropSymbols(b)) {
18
+ if (__propIsEnum.call(b, prop))
19
+ __defNormalProp(a, prop, b[prop]);
20
+ }
21
+ return a;
22
+ };
23
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
24
+ var __export = (target, all) => {
25
+ for (var name in all)
26
+ __defProp(target, name, { get: all[name], enumerable: true });
27
+ };
28
+ var __copyProps = (to, from, except, desc) => {
29
+ if (from && typeof from === "object" || typeof from === "function") {
30
+ for (let key of __getOwnPropNames(from))
31
+ if (!__hasOwnProp.call(to, key) && key !== except)
32
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
33
+ }
34
+ return to;
35
+ };
36
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
37
+ // If the importer is in node compatibility mode or this is not an ESM
38
+ // file that has been converted to a CommonJS file using a Babel-
39
+ // compatible transform (i.e. "__esModule" has not been set), then set
40
+ // "default" to the CommonJS "module.exports" for node compatibility.
41
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
42
+ mod
43
+ ));
44
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
45
+ var __async = (__this, __arguments, generator) => {
46
+ return new Promise((resolve, reject) => {
47
+ var fulfilled = (value) => {
48
+ try {
49
+ step(generator.next(value));
50
+ } catch (e) {
51
+ reject(e);
52
+ }
53
+ };
54
+ var rejected = (value) => {
55
+ try {
56
+ step(generator.throw(value));
57
+ } catch (e) {
58
+ reject(e);
59
+ }
60
+ };
61
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
62
+ step((generator = generator.apply(__this, __arguments)).next());
63
+ });
64
+ };
65
+ var LoadingTrace_exports = {};
66
+ __export(LoadingTrace_exports, {
67
+ default: () => LoadingTrace_default
68
+ });
69
+ module.exports = __toCommonJS(LoadingTrace_exports);
70
+ var import_jsx_runtime = require("react/jsx-runtime");
71
+ var import_react = require("react");
72
+ var import_web_react = require("@arco-design/web-react");
73
+ var import_icon = require("@arco-design/web-react/icon");
74
+ var import_react_i18next = require("react-i18next");
75
+ var import_observability = require("../../utils/chrome/observability");
76
+ var import_observability_shared = require("../../utils/chrome/observability-shared");
77
+ var import_messages = require("../../utils/chrome/messages");
78
+ var import_index = __toESM(require("./index.module"));
79
+ const FieldLabel = ({ label, tip }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: import_index.default.labelWithHelp, children: [
80
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.labelText, children: label }),
81
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
82
+ "span",
83
+ {
84
+ className: import_index.default.helpIcon,
85
+ "data-tip": tip,
86
+ tabIndex: 0,
87
+ "aria-label": tip,
88
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icon.IconQuestionCircle, {})
89
+ }
90
+ ),
91
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.labelColon, children: ":" })
92
+ ] });
93
+ const SegmentedControl = ({
94
+ value,
95
+ options,
96
+ onChange
97
+ }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: import_index.default.segmentedControl, role: "group", children: options.map((option) => {
98
+ const isActive = option.value === value;
99
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
100
+ "button",
101
+ {
102
+ type: "button",
103
+ className: `${import_index.default.segmentButton} ${isActive ? import_index.default.segmentButtonActive : ""}`,
104
+ "aria-pressed": isActive,
105
+ onClick: () => onChange(option.value),
106
+ children: option.label
107
+ },
108
+ option.value
109
+ );
110
+ }) });
111
+ const formatTime = (timestamp) => {
112
+ if (!timestamp) {
113
+ return "-";
114
+ }
115
+ try {
116
+ return new Date(timestamp).toLocaleTimeString();
117
+ } catch (e) {
118
+ return "-";
119
+ }
120
+ };
121
+ const getReportTitle = (report) => {
122
+ var _a, _b;
123
+ return report.requestId || ((_a = report.remote) == null ? void 0 : _a.name) || ((_b = report.shared) == null ? void 0 : _b.name) || report.traceId || "unknown";
124
+ };
125
+ const getReportOutcome = (report) => {
126
+ var _a;
127
+ return ((_a = report.summary) == null ? void 0 : _a.outcome) || report.status || "pending";
128
+ };
129
+ const parseStableVersion = (version) => {
130
+ const matched = version == null ? void 0 : version.match(/^(\d+)\.(\d+)\.(\d+)(?:\+[\w.-]+)?$/);
131
+ if (!matched) {
132
+ return null;
133
+ }
134
+ return {
135
+ major: Number(matched[1]),
136
+ minor: Number(matched[2]),
137
+ patch: Number(matched[3])
138
+ };
139
+ };
140
+ const isVersionLessThan = (version, target) => {
141
+ if (!version) {
142
+ return false;
143
+ }
144
+ if (version.major !== target.major) {
145
+ return version.major < target.major;
146
+ }
147
+ if (version.minor !== target.minor) {
148
+ return version.minor < target.minor;
149
+ }
150
+ return version.patch < target.patch;
151
+ };
152
+ const getLimitedObservabilityLabel = (report) => {
153
+ const runtimeVersion = parseStableVersion(report.runtimeVersion);
154
+ if (runtimeVersion && isVersionLessThan(runtimeVersion, { major: 2, minor: 5, patch: 0 })) {
155
+ return "lowVersion";
156
+ }
157
+ if (!report.runtimeVersion) {
158
+ return "unknownVersion";
159
+ }
160
+ return void 0;
161
+ };
162
+ const getReportState = (report) => {
163
+ var _a;
164
+ const outcome = getReportOutcome(report);
165
+ const limitedObservability = getLimitedObservabilityLabel(report);
166
+ if (outcome === "recovered" || ((_a = report.summary) == null ? void 0 : _a.recovered)) {
167
+ return "recovered";
168
+ }
169
+ if (report.status === "error" || outcome === "failed" || report.failedPhase || report.errorMessage) {
170
+ return "failed";
171
+ }
172
+ if (outcome === "pending" && report.status === "success" && limitedObservability) {
173
+ return "success";
174
+ }
175
+ if (outcome === "pending") {
176
+ return "pending";
177
+ }
178
+ if (report.status === "success") {
179
+ return "success";
180
+ }
181
+ return "pending";
182
+ };
183
+ const getEventStatusState = (status) => {
184
+ switch (status) {
185
+ case "success":
186
+ case "complete":
187
+ return "success";
188
+ case "error":
189
+ case "failed":
190
+ return "failed";
191
+ case "start":
192
+ case "pending":
193
+ return "pending";
194
+ default:
195
+ return "neutral";
196
+ }
197
+ };
198
+ const getReportSearchText = (report) => {
199
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
200
+ return [
201
+ getReportTitle(report),
202
+ report.traceId,
203
+ report.status,
204
+ getReportOutcome(report),
205
+ report.hostName,
206
+ report.runtimeVersion,
207
+ (_a = report.remote) == null ? void 0 : _a.name,
208
+ (_b = report.remote) == null ? void 0 : _b.alias,
209
+ (_c = report.remote) == null ? void 0 : _c.entry,
210
+ (_d = report.shared) == null ? void 0 : _d.name,
211
+ (_e = report.shared) == null ? void 0 : _e.provider,
212
+ (_f = report.shared) == null ? void 0 : _f.requiredVersion,
213
+ (_g = report.shared) == null ? void 0 : _g.selectedVersion,
214
+ (_i = (_h = report.shared) == null ? void 0 : _h.availableVersions) == null ? void 0 : _i.join(" "),
215
+ report.expose,
216
+ report.failedPhase,
217
+ report.errorCode,
218
+ report.errorName,
219
+ report.errorMessage,
220
+ report.ownerHint,
221
+ ((_j = report.summary) == null ? void 0 : _j.recovered) ? "recovered" : void 0,
222
+ (_k = report.summary) == null ? void 0 : _k.lastPhase,
223
+ (_l = report.diagnosis) == null ? void 0 : _l.title,
224
+ (_n = (_m = report.loadedBefore) == null ? void 0 : _m.consumers) == null ? void 0 : _n.map(
225
+ (consumer) => [consumer.name, ...consumer.exposes || []].join(" ")
226
+ ).join(" "),
227
+ report.__scope
228
+ ].filter(Boolean).join(" ").toLowerCase();
229
+ };
230
+ const fuzzyMatchReport = (report, keyword) => {
231
+ const tokens = keyword.trim().toLowerCase().split(/\s+/).filter(Boolean);
232
+ if (!tokens.length) {
233
+ return true;
234
+ }
235
+ const haystack = getReportSearchText(report);
236
+ return tokens.every((token) => haystack.includes(token));
237
+ };
238
+ const downloadJson = (name, data) => {
239
+ const blob = new Blob([`${JSON.stringify(data, null, 2)}
240
+ `], {
241
+ type: "application/json;charset=utf-8"
242
+ });
243
+ const url = URL.createObjectURL(blob);
244
+ const anchor = document.createElement("a");
245
+ anchor.href = url;
246
+ anchor.download = name;
247
+ anchor.click();
248
+ URL.revokeObjectURL(url);
249
+ };
250
+ const formatCurrentLoadValue = (value) => {
251
+ if (value === false) {
252
+ return "false";
253
+ }
254
+ if (value === true) {
255
+ return "true";
256
+ }
257
+ if (typeof value === "number") {
258
+ return String(value);
259
+ }
260
+ return value || void 0;
261
+ };
262
+ const getConfigSignature = (config) => JSON.stringify((0, import_observability_shared.normalizeObservabilityDevtoolsConfig)(config));
263
+ const getLoadingTraceTabKey = (tabId) => typeof tabId === "number" ? String(tabId) : "unknown";
264
+ const LoadingTrace = ({ tabId, resetKey = 0 }) => {
265
+ var _a, _b;
266
+ const { t } = (0, import_react_i18next.useTranslation)();
267
+ const [config, setConfig] = (0, import_react.useState)(
268
+ import_observability_shared.DEFAULT_OBSERVABILITY_DEVTOOLS_CONFIG
269
+ );
270
+ const [savedConfig, setSavedConfig] = (0, import_react.useState)(
271
+ import_observability_shared.DEFAULT_OBSERVABILITY_DEVTOOLS_CONFIG
272
+ );
273
+ const [stored, setStored] = (0, import_react.useState)(false);
274
+ const [reports, setReports] = (0, import_react.useState)([]);
275
+ const [scopes, setScopes] = (0, import_react.useState)([]);
276
+ const [hasUserObservabilityPlugin, setHasUserObservabilityPlugin] = (0, import_react.useState)(false);
277
+ const [selectedTraceId, setSelectedTraceId] = (0, import_react.useState)();
278
+ const [busy, setBusy] = (0, import_react.useState)(false);
279
+ const [statusText, setStatusText] = (0, import_react.useState)("");
280
+ const [showConfigPanel, setShowConfigPanel] = (0, import_react.useState)(false);
281
+ const [reportKeyword, setReportKeyword] = (0, import_react.useState)("");
282
+ const refreshTimersRef = (0, import_react.useRef)([]);
283
+ const userPluginPollTimerRef = (0, import_react.useRef)(
284
+ null
285
+ );
286
+ const tabCacheRef = (0, import_react.useRef)(/* @__PURE__ */ new Map());
287
+ const activeTabKey = (0, import_react.useMemo)(() => getLoadingTraceTabKey(tabId), [tabId]);
288
+ const activeTabKeyRef = (0, import_react.useRef)(activeTabKey);
289
+ const resetKeyRef = (0, import_react.useRef)(resetKey);
290
+ const filteredReports = (0, import_react.useMemo)(
291
+ () => reports.filter((report) => fuzzyMatchReport(report, reportKeyword)),
292
+ [reports, reportKeyword]
293
+ );
294
+ const selectedReport = (0, import_react.useMemo)(
295
+ () => filteredReports.find((report) => report.traceId === selectedTraceId) || filteredReports[0],
296
+ [filteredReports, selectedTraceId]
297
+ );
298
+ const latestReport = reports[0];
299
+ const isObservabilityEnabled = stored && config.enabled !== false;
300
+ const isConfigDirty = (0, import_react.useMemo)(
301
+ () => getConfigSignature(config) !== getConfigSignature(savedConfig),
302
+ [config, savedConfig]
303
+ );
304
+ const levelOptions = (0, import_react.useMemo)(
305
+ () => [
306
+ {
307
+ label: t("loadingTrace.config.verbose"),
308
+ value: "verbose"
309
+ },
310
+ {
311
+ label: t("loadingTrace.config.summary"),
312
+ value: "summary"
313
+ },
314
+ {
315
+ label: t("loadingTrace.config.error"),
316
+ value: "error"
317
+ }
318
+ ],
319
+ [t]
320
+ );
321
+ const shouldShowApplyButton = !isObservabilityEnabled || isConfigDirty;
322
+ const emptyDescription = (0, import_react.useMemo)(() => {
323
+ if (!hasUserObservabilityPlugin && !isObservabilityEnabled) {
324
+ return t("loadingTrace.emptyEnableChrome");
325
+ }
326
+ return t("loadingTrace.empty");
327
+ }, [hasUserObservabilityPlugin, isObservabilityEnabled, t]);
328
+ const sourceStateLabel = isObservabilityEnabled ? "ON" : hasUserObservabilityPlugin ? "CUSTOM" : "OFF";
329
+ const eventCount = (0, import_react.useMemo)(
330
+ () => reports.reduce(
331
+ (count, report) => {
332
+ var _a2;
333
+ return count + (((_a2 = report.events) == null ? void 0 : _a2.length) || 0);
334
+ },
335
+ 0
336
+ ),
337
+ [reports]
338
+ );
339
+ const applyTabCache = (0, import_react.useCallback)(
340
+ (tabKey, update) => {
341
+ const current = tabCacheRef.current.get(tabKey) || {
342
+ reports: [],
343
+ selectedTraceId: void 0
344
+ };
345
+ const next = typeof update === "function" ? update(current) : update;
346
+ tabCacheRef.current.set(tabKey, next);
347
+ if (activeTabKeyRef.current === tabKey) {
348
+ setReports(next.reports);
349
+ setSelectedTraceId(next.selectedTraceId);
350
+ }
351
+ return next;
352
+ },
353
+ []
354
+ );
355
+ const clearTabCache = (0, import_react.useCallback)(
356
+ (tabKey) => applyTabCache(tabKey, {
357
+ reports: [],
358
+ selectedTraceId: void 0
359
+ }),
360
+ [applyTabCache]
361
+ );
362
+ const refreshSnapshot = (0, import_react.useCallback)(
363
+ (..._0) => __async(void 0, [..._0], function* (targetTabKey = activeTabKeyRef.current) {
364
+ var _a2;
365
+ const snapshot = yield (0, import_observability.readObservabilitySnapshot)();
366
+ setConfig(snapshot.config);
367
+ setSavedConfig(snapshot.config);
368
+ setStored(snapshot.stored);
369
+ setScopes(snapshot.scopes);
370
+ setHasUserObservabilityPlugin(snapshot.hasUserObservabilityPlugin);
371
+ const cached = tabCacheRef.current.get(targetTabKey) || {
372
+ reports: [],
373
+ selectedTraceId: void 0
374
+ };
375
+ const mergedReports = (0, import_observability.mergeObservabilityReports)(
376
+ cached.reports,
377
+ snapshot.reports
378
+ );
379
+ const nextCache = applyTabCache(targetTabKey, {
380
+ reports: mergedReports,
381
+ selectedTraceId: cached.selectedTraceId || ((_a2 = snapshot.reports[0]) == null ? void 0 : _a2.traceId)
382
+ });
383
+ return __spreadProps(__spreadValues({}, snapshot), {
384
+ reports: nextCache.reports
385
+ });
386
+ }),
387
+ [applyTabCache]
388
+ );
389
+ const clearScheduledRefresh = (0, import_react.useCallback)(() => {
390
+ refreshTimersRef.current.forEach((timer) => clearTimeout(timer));
391
+ refreshTimersRef.current = [];
392
+ }, []);
393
+ const scheduleRefreshBurst = (0, import_react.useCallback)(() => {
394
+ clearScheduledRefresh();
395
+ const delays = [200, 600, 1200, 2400];
396
+ const targetTabKey = activeTabKeyRef.current;
397
+ refreshTimersRef.current = delays.map(
398
+ (delay, index) => setTimeout(() => __async(void 0, null, function* () {
399
+ const snapshot = yield refreshSnapshot(targetTabKey);
400
+ const isLast = index === delays.length - 1;
401
+ if (snapshot.reports.length) {
402
+ setStatusText(t("loadingTrace.status.synced"));
403
+ clearScheduledRefresh();
404
+ return;
405
+ }
406
+ if (isLast) {
407
+ setStatusText(t("loadingTrace.status.noReports"));
408
+ }
409
+ }), delay)
410
+ );
411
+ }, [clearScheduledRefresh, refreshSnapshot, t]);
412
+ (0, import_react.useEffect)(() => {
413
+ activeTabKeyRef.current = activeTabKey;
414
+ const cached = tabCacheRef.current.get(activeTabKey);
415
+ setReports((cached == null ? void 0 : cached.reports) || []);
416
+ setSelectedTraceId(cached == null ? void 0 : cached.selectedTraceId);
417
+ setReportKeyword("");
418
+ }, [activeTabKey]);
419
+ (0, import_react.useEffect)(() => {
420
+ if (resetKey === resetKeyRef.current) {
421
+ return;
422
+ }
423
+ resetKeyRef.current = resetKey;
424
+ clearScheduledRefresh();
425
+ clearTabCache(activeTabKeyRef.current);
426
+ setStatusText(t("loadingTrace.status.noReports"));
427
+ }, [clearScheduledRefresh, clearTabCache, resetKey, t]);
428
+ (0, import_react.useEffect)(() => {
429
+ let cancelled = false;
430
+ const load = () => __async(void 0, null, function* () {
431
+ try {
432
+ const pageConfig = yield (0, import_observability.readObservabilityConfig)();
433
+ if (!cancelled) {
434
+ setConfig(pageConfig);
435
+ setSavedConfig(pageConfig);
436
+ }
437
+ const snapshot = yield refreshSnapshot();
438
+ if (!cancelled) {
439
+ setStatusText(
440
+ snapshot.stored ? t("loadingTrace.status.enabled") : snapshot.hasUserObservabilityPlugin ? t("loadingTrace.status.userPlugin") : t("loadingTrace.status.disabled")
441
+ );
442
+ }
443
+ } catch (error) {
444
+ if (!cancelled) {
445
+ setStatusText(t("loadingTrace.status.unavailable"));
446
+ }
447
+ }
448
+ });
449
+ void load();
450
+ return () => {
451
+ cancelled = true;
452
+ clearScheduledRefresh();
453
+ };
454
+ }, [clearScheduledRefresh, refreshSnapshot, t, tabId]);
455
+ (0, import_react.useEffect)(() => {
456
+ if (userPluginPollTimerRef.current) {
457
+ clearInterval(userPluginPollTimerRef.current);
458
+ userPluginPollTimerRef.current = null;
459
+ }
460
+ if (!hasUserObservabilityPlugin) {
461
+ return;
462
+ }
463
+ let polling = false;
464
+ userPluginPollTimerRef.current = setInterval(() => __async(void 0, null, function* () {
465
+ if (polling) {
466
+ return;
467
+ }
468
+ polling = true;
469
+ try {
470
+ const snapshot = yield refreshSnapshot(activeTabKeyRef.current);
471
+ if (snapshot.reports.length) {
472
+ setStatusText(t("loadingTrace.status.synced"));
473
+ }
474
+ } finally {
475
+ polling = false;
476
+ }
477
+ }), 1500);
478
+ return () => {
479
+ if (userPluginPollTimerRef.current) {
480
+ clearInterval(userPluginPollTimerRef.current);
481
+ userPluginPollTimerRef.current = null;
482
+ }
483
+ };
484
+ }, [hasUserObservabilityPlugin, refreshSnapshot, t]);
485
+ (0, import_react.useEffect)(() => {
486
+ const onMessage = (message, sender) => {
487
+ var _a2, _b2;
488
+ if ((message == null ? void 0 : message.type) !== import_messages.MESSAGE_OBSERVABILITY_DEVTOOLS_EVENT) {
489
+ return;
490
+ }
491
+ const senderTabId = (_a2 = sender == null ? void 0 : sender.tab) == null ? void 0 : _a2.id;
492
+ const messageTabKey = getLoadingTraceTabKey(senderTabId || tabId);
493
+ const isCurrentTabMessage = !tabId || !senderTabId || senderTabId === tabId;
494
+ const payload = message.data;
495
+ if ((payload == null ? void 0 : payload.config) && isCurrentTabMessage) {
496
+ const nextConfig = (0, import_observability_shared.normalizeObservabilityDevtoolsConfig)(payload.config);
497
+ setConfig(nextConfig);
498
+ setSavedConfig(nextConfig);
499
+ setStored(payload.config.enabled !== false);
500
+ }
501
+ if ((payload == null ? void 0 : payload.kind) === "installed" && isCurrentTabMessage) {
502
+ setStatusText(t("loadingTrace.status.enabled"));
503
+ scheduleRefreshBurst();
504
+ }
505
+ if ((_b2 = payload == null ? void 0 : payload.report) == null ? void 0 : _b2.traceId) {
506
+ const report = __spreadProps(__spreadValues({}, payload.report), {
507
+ __scope: payload.scope || payload.report.__scope
508
+ });
509
+ applyTabCache(messageTabKey, (current) => ({
510
+ reports: (0, import_observability.mergeObservabilityReports)(current.reports, [report]),
511
+ selectedTraceId: current.selectedTraceId || report.traceId
512
+ }));
513
+ if (isCurrentTabMessage) {
514
+ clearScheduledRefresh();
515
+ setStatusText(t("loadingTrace.status.synced"));
516
+ }
517
+ }
518
+ };
519
+ chrome.runtime.onMessage.addListener(onMessage);
520
+ return () => chrome.runtime.onMessage.removeListener(onMessage);
521
+ }, [applyTabCache, clearScheduledRefresh, scheduleRefreshBurst, tabId, t]);
522
+ const updateConfig = (patch) => {
523
+ setConfig(
524
+ (current) => (0, import_observability_shared.normalizeObservabilityDevtoolsConfig)(__spreadValues(__spreadValues({}, current), patch))
525
+ );
526
+ };
527
+ const applyAndReload = () => __async(void 0, null, function* () {
528
+ setBusy(true);
529
+ try {
530
+ const nextConfig = (0, import_observability_shared.normalizeObservabilityDevtoolsConfig)(__spreadProps(__spreadValues({}, config), {
531
+ enabled: true
532
+ }));
533
+ yield (0, import_observability.applyObservabilityConfig)(nextConfig);
534
+ setConfig(nextConfig);
535
+ setSavedConfig(nextConfig);
536
+ setStored(true);
537
+ clearTabCache(activeTabKeyRef.current);
538
+ setStatusText(t("loadingTrace.status.reloading"));
539
+ yield (0, import_observability.reloadInspectedPage)();
540
+ scheduleRefreshBurst();
541
+ } finally {
542
+ setBusy(false);
543
+ }
544
+ });
545
+ const confirmApply = () => {
546
+ import_web_react.Modal.confirm({
547
+ title: isObservabilityEnabled ? t("loadingTrace.confirm.updateTitle") : t("loadingTrace.confirm.observeTitle"),
548
+ content: t("loadingTrace.confirm.content"),
549
+ okText: t("loadingTrace.actions.confirm"),
550
+ cancelText: t("loadingTrace.actions.cancel"),
551
+ onOk: () => applyAndReload()
552
+ });
553
+ };
554
+ const disableAndReload = () => __async(void 0, null, function* () {
555
+ setBusy(true);
556
+ try {
557
+ yield (0, import_observability.disableObservabilityConfig)();
558
+ clearScheduledRefresh();
559
+ setStored(false);
560
+ clearTabCache(activeTabKeyRef.current);
561
+ setStatusText(t("loadingTrace.status.disabled"));
562
+ yield (0, import_observability.reloadInspectedPage)();
563
+ } finally {
564
+ setBusy(false);
565
+ }
566
+ });
567
+ const handleRefresh = () => __async(void 0, null, function* () {
568
+ setBusy(true);
569
+ try {
570
+ const snapshot = yield refreshSnapshot();
571
+ setStatusText(
572
+ snapshot.reports.length ? t("loadingTrace.status.synced") : t("loadingTrace.status.noReports")
573
+ );
574
+ } finally {
575
+ setBusy(false);
576
+ }
577
+ });
578
+ const handleExport = () => {
579
+ downloadJson(`mf-observability-${Date.now()}.json`, {
580
+ exportedAt: (/* @__PURE__ */ new Date()).toISOString(),
581
+ config,
582
+ scopes,
583
+ reports
584
+ });
585
+ };
586
+ const currentLoadRows = (0, import_react.useMemo)(() => {
587
+ var _a2, _b2, _c, _d;
588
+ if (!selectedReport) {
589
+ return [];
590
+ }
591
+ const rows = [
592
+ {
593
+ labelKey: "consumer",
594
+ value: selectedReport.hostName
595
+ }
596
+ ];
597
+ if (selectedReport.shared) {
598
+ rows.push(
599
+ {
600
+ labelKey: "shared",
601
+ value: selectedReport.shared.name
602
+ },
603
+ {
604
+ labelKey: "provider",
605
+ value: selectedReport.shared.provider
606
+ },
607
+ {
608
+ labelKey: "requiredVersion",
609
+ value: selectedReport.shared.requiredVersion
610
+ },
611
+ {
612
+ labelKey: "selectedVersion",
613
+ value: selectedReport.shared.selectedVersion
614
+ },
615
+ {
616
+ labelKey: "availableVersions",
617
+ value: (_a2 = selectedReport.shared.availableVersions) == null ? void 0 : _a2.join(", ")
618
+ }
619
+ );
620
+ } else {
621
+ rows.push(
622
+ {
623
+ labelKey: "request",
624
+ value: selectedReport.requestId
625
+ },
626
+ {
627
+ labelKey: "producer",
628
+ value: ((_b2 = selectedReport.remote) == null ? void 0 : _b2.alias) || ((_c = selectedReport.remote) == null ? void 0 : _c.name)
629
+ },
630
+ {
631
+ labelKey: "remoteName",
632
+ value: (_d = selectedReport.remote) == null ? void 0 : _d.name
633
+ },
634
+ {
635
+ labelKey: "expose",
636
+ value: selectedReport.expose
637
+ }
638
+ );
639
+ }
640
+ return rows.filter((row) => formatCurrentLoadValue(row.value));
641
+ }, [selectedReport]);
642
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: import_index.default.wrapper, children: [
643
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: import_index.default.toolbar, children: [
644
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: import_index.default.titleGroup, children: [
645
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.title, children: t("loadingTrace.title") }),
646
+ statusText ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.subtitle, children: statusText }) : null
647
+ ] }),
648
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: import_index.default.actions, children: [
649
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
650
+ import_web_react.Button,
651
+ {
652
+ className: `${import_index.default.configButton} ${showConfigPanel ? import_index.default.configButtonActive : ""}`,
653
+ shape: "circle",
654
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icon.IconSettings, {}),
655
+ "aria-pressed": showConfigPanel,
656
+ title: t("loadingTrace.actions.config"),
657
+ onClick: () => setShowConfigPanel((visible) => !visible)
658
+ }
659
+ ),
660
+ shouldShowApplyButton ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
661
+ import_web_react.Button,
662
+ {
663
+ className: import_index.default.primaryAction,
664
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icon.IconPlayArrow, {}),
665
+ loading: busy,
666
+ onClick: confirmApply,
667
+ children: isObservabilityEnabled ? t("loadingTrace.actions.updateConfig") : t("loadingTrace.actions.observeNow")
668
+ }
669
+ ) : null,
670
+ isObservabilityEnabled ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_web_react.Button, { loading: busy, onClick: disableAndReload, children: t("loadingTrace.actions.disable") }) : null,
671
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_web_react.Button, { icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icon.IconRefresh, {}), loading: busy, onClick: handleRefresh, children: t("loadingTrace.actions.refresh") }),
672
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
673
+ import_web_react.Button,
674
+ {
675
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icon.IconDownload, {}),
676
+ disabled: !reports.length,
677
+ onClick: handleExport,
678
+ children: t("loadingTrace.actions.export")
679
+ }
680
+ )
681
+ ] })
682
+ ] }),
683
+ showConfigPanel ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: import_index.default.configGrid, children: [
684
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { className: import_index.default.field, children: [
685
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
686
+ FieldLabel,
687
+ {
688
+ label: t("loadingTrace.config.level"),
689
+ tip: t("loadingTrace.config.levelTip")
690
+ }
691
+ ),
692
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
693
+ SegmentedControl,
694
+ {
695
+ value: config.level,
696
+ options: levelOptions,
697
+ onChange: (level) => updateConfig({ level })
698
+ }
699
+ )
700
+ ] }),
701
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", { className: import_index.default.field, children: [
702
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
703
+ FieldLabel,
704
+ {
705
+ label: t("loadingTrace.config.console"),
706
+ tip: t("loadingTrace.config.consoleTip")
707
+ }
708
+ ),
709
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
710
+ import_web_react.Switch,
711
+ {
712
+ checked: config.console,
713
+ onChange: (checked) => updateConfig({ console: checked })
714
+ }
715
+ )
716
+ ] })
717
+ ] }) }) : null,
718
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
719
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: import_index.default.stats, children: [
720
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
721
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: import_index.default.statValueWithHelp, children: [
722
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.statValue, children: sourceStateLabel }),
723
+ sourceStateLabel === "CUSTOM" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
724
+ "span",
725
+ {
726
+ className: `${import_index.default.inlineHelpIcon} ${import_index.default.statHelpIcon}`,
727
+ "data-tip": t("loadingTrace.stats.customTip"),
728
+ tabIndex: 0,
729
+ "aria-label": t("loadingTrace.stats.customTip"),
730
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icon.IconQuestionCircle, {})
731
+ }
732
+ ) : null
733
+ ] }),
734
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.statLabel, children: t("loadingTrace.stats.state") })
735
+ ] }),
736
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
737
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.statValue, children: reports.length }),
738
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.statLabel, children: t("loadingTrace.stats.reports") })
739
+ ] }),
740
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
741
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.statValue, children: eventCount }),
742
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.statLabel, children: t("loadingTrace.stats.events") })
743
+ ] }),
744
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
745
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.statValue, children: ((_a = latestReport == null ? void 0 : latestReport.summary) == null ? void 0 : _a.outcome) || "-" }),
746
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.statLabel, children: t("loadingTrace.stats.latest") })
747
+ ] })
748
+ ] }),
749
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
750
+ "section",
751
+ {
752
+ className: `${import_index.default.viewer} ${reports.length ? "" : import_index.default.viewerEmpty}`,
753
+ children: reports.length ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
754
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: import_index.default.reportList, children: [
755
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: import_index.default.reportFilter, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
756
+ import_web_react.Input,
757
+ {
758
+ className: import_index.default.reportSearch,
759
+ prefix: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icon.IconSearch, {}),
760
+ allowClear: true,
761
+ placeholder: t("loadingTrace.reports.search"),
762
+ value: reportKeyword,
763
+ onChange: (value) => setReportKeyword(value)
764
+ }
765
+ ) }),
766
+ filteredReports.length ? filteredReports.map((report) => {
767
+ const state = getReportState(report);
768
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
769
+ "button",
770
+ {
771
+ type: "button",
772
+ className: `${import_index.default.reportItem} ${(selectedReport == null ? void 0 : selectedReport.traceId) === report.traceId ? import_index.default.activeReport : ""}`,
773
+ onClick: () => applyTabCache(activeTabKeyRef.current, (current) => __spreadProps(__spreadValues({}, current), {
774
+ selectedTraceId: report.traceId
775
+ })),
776
+ children: [
777
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.reportTitle, children: getReportTitle(report) }),
778
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.reportTagRow, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
779
+ "span",
780
+ {
781
+ className: `${import_index.default.statusTag} ${import_index.default[`statusTag${state}`]}`,
782
+ children: t(`loadingTrace.reports.${state}`)
783
+ }
784
+ ) }),
785
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.reportMeta, children: formatTime(report.updatedAt) })
786
+ ]
787
+ },
788
+ report.traceId
789
+ );
790
+ }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: import_index.default.emptyPanel, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_web_react.Empty, { description: t("loadingTrace.reports.noMatch") }) })
791
+ ] }),
792
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: import_index.default.timeline, children: selectedReport ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
793
+ (() => {
794
+ const limitedObservability = getLimitedObservabilityLabel(selectedReport);
795
+ const observabilityScopeLabel = (0, import_observability.getObservabilityReportScopeLabel)(selectedReport);
796
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: import_index.default.reportHeader, children: [
797
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
798
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.reportHeading, children: getReportTitle(selectedReport) }),
799
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.traceId, children: selectedReport.traceId })
800
+ ] }),
801
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: import_index.default.tags, children: [
802
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
803
+ "span",
804
+ {
805
+ className: `${import_index.default.statusTag} ${import_index.default[`statusTag${getReportState(selectedReport)}`]}`,
806
+ children: t(
807
+ `loadingTrace.reports.${getReportState(selectedReport)}`
808
+ )
809
+ }
810
+ ),
811
+ observabilityScopeLabel ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.limitedTag, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: observabilityScopeLabel }) }) : null,
812
+ limitedObservability ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: import_index.default.limitedTag, children: [
813
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: t("loadingTrace.reports.limited") }),
814
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
815
+ "span",
816
+ {
817
+ className: import_index.default.inlineHelpIcon,
818
+ "data-tip": t(
819
+ `loadingTrace.reports.${limitedObservability}Tip`
820
+ ),
821
+ tabIndex: 0,
822
+ "aria-label": t(
823
+ `loadingTrace.reports.${limitedObservability}Tip`
824
+ ),
825
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icon.IconQuestionCircle, {})
826
+ }
827
+ )
828
+ ] }) : null
829
+ ] })
830
+ ] });
831
+ })(),
832
+ currentLoadRows.length ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: import_index.default.currentLoad, children: [
833
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: import_index.default.currentLoadHeader, children: [
834
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.currentLoadTitle, children: t("loadingTrace.currentLoad.title") }),
835
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.currentLoadSummary, children: selectedReport.shared ? t("loadingTrace.currentLoad.sharedReport") : t("loadingTrace.currentLoad.remoteReport") })
836
+ ] }),
837
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: import_index.default.currentLoadRows, children: currentLoadRows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
838
+ "div",
839
+ {
840
+ className: import_index.default.currentLoadRow,
841
+ children: [
842
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.currentLoadLabel, children: t(`loadingTrace.currentLoad.${row.labelKey}`) }),
843
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.currentLoadValue, children: formatCurrentLoadValue(row.value) })
844
+ ]
845
+ },
846
+ row.labelKey
847
+ )) })
848
+ ] }) : null,
849
+ ((_b = selectedReport.diagnosis) == null ? void 0 : _b.title) ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: import_index.default.diagnosis, children: selectedReport.diagnosis.title }) : null,
850
+ selectedReport.loadedBefore ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: import_index.default.loadedBefore, children: [
851
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: import_index.default.loadedBeforeHeader, children: [
852
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.loadedBeforeTitle, children: t("loadingTrace.loadedBefore.title") }),
853
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.loadedBeforeSummary, children: t("loadingTrace.loadedBefore.consumerCount", {
854
+ count: selectedReport.loadedBefore.consumers.length
855
+ }) })
856
+ ] }),
857
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: import_index.default.loadedBeforeTags, children: [
858
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
859
+ "span",
860
+ {
861
+ className: `${import_index.default.loadedBeforeTag} ${import_index.default.loadedBeforeTagSuccess}`,
862
+ children: t("loadingTrace.loadedBefore.producerLoaded")
863
+ }
864
+ ),
865
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
866
+ "span",
867
+ {
868
+ className: `${import_index.default.loadedBeforeTag} ${selectedReport.loadedBefore.expose ? import_index.default.loadedBeforeTagSuccess : import_index.default.loadedBeforeTagNeutral}`,
869
+ children: selectedReport.loadedBefore.expose ? t("loadingTrace.loadedBefore.exposeLoaded") : t("loadingTrace.loadedBefore.exposeNotLoaded")
870
+ }
871
+ )
872
+ ] }),
873
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: import_index.default.loadedBeforeConsumers, children: selectedReport.loadedBefore.consumers.map(
874
+ (consumer, index) => {
875
+ var _a2;
876
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
877
+ "div",
878
+ {
879
+ className: import_index.default.loadedBeforeConsumer,
880
+ children: [
881
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: import_index.default.loadedBeforeRow, children: [
882
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.loadedBeforeLabel, children: t("loadingTrace.loadedBefore.consumer") }),
883
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.loadedBeforeName, children: consumer.name || t(
884
+ "loadingTrace.loadedBefore.unknownConsumer"
885
+ ) })
886
+ ] }),
887
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: import_index.default.loadedBeforeRow, children: [
888
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.loadedBeforeLabel, children: t("loadingTrace.loadedBefore.status") }),
889
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.loadedBeforeMeta, children: [
890
+ consumer.remoteEntryExports ? t(
891
+ "loadingTrace.loadedBefore.entryReady"
892
+ ) : t(
893
+ "loadingTrace.loadedBefore.entryMissing"
894
+ ),
895
+ consumer.containerInitialized ? t(
896
+ "loadingTrace.loadedBefore.initReady"
897
+ ) : t(
898
+ "loadingTrace.loadedBefore.initMissing"
899
+ )
900
+ ].join(" · ") })
901
+ ] }),
902
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: import_index.default.loadedBeforeRow, children: [
903
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.loadedBeforeLabel, children: t("loadingTrace.loadedBefore.exposes") }),
904
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.loadedBeforeExposes, children: ((_a2 = consumer.exposes) == null ? void 0 : _a2.length) ? consumer.exposes.join(", ") : t(
905
+ "loadingTrace.loadedBefore.noExposes"
906
+ ) })
907
+ ] })
908
+ ]
909
+ },
910
+ `${consumer.name || "consumer"}-${index}`
911
+ );
912
+ }
913
+ ) })
914
+ ] }) : null,
915
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: import_index.default.eventList, children: (selectedReport.events || []).map((event, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
916
+ "div",
917
+ {
918
+ className: import_index.default.eventItem,
919
+ children: [
920
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: import_index.default.eventTime, children: formatTime(event.timestamp) }),
921
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: import_index.default.eventBody, children: [
922
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: import_index.default.eventMain, children: [
923
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.phase, children: event.phase }),
924
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
925
+ "span",
926
+ {
927
+ className: `${import_index.default.eventStatusTag} ${import_index.default[`eventStatusTag${getEventStatusState(
928
+ event.status
929
+ )}`]}`,
930
+ children: event.status
931
+ }
932
+ ),
933
+ event.recovered ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: import_index.default.eventRecoveredTag, children: t("loadingTrace.reports.eventRecovered") }) : null,
934
+ event.duration !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: import_index.default.duration, children: [
935
+ event.duration,
936
+ "ms"
937
+ ] }) : null
938
+ ] }),
939
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: import_index.default.eventMeta, children: event.message || event.lifecycle || event.requestId || "-" }),
940
+ event.errorMessage ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: import_index.default.error, children: event.errorCode ? `${event.errorCode}: ${event.errorMessage}` : event.errorMessage }) : null
941
+ ] })
942
+ ]
943
+ },
944
+ `${event.traceId}-${event.phase}-${event.timestamp}-${index}`
945
+ )) })
946
+ ] }) : null })
947
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: import_index.default.emptyPanel, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_web_react.Empty, { description: emptyDescription }) })
948
+ }
949
+ )
950
+ ] })
951
+ ] });
952
+ };
953
+ var LoadingTrace_default = LoadingTrace;