@memlab/lens 2.0.2 → 2.0.4

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.
@@ -37,6 +37,44 @@ return /******/ (() => { // webpackBootstrap
37
37
  /******/ "use strict";
38
38
  /******/ var __webpack_modules__ = ({
39
39
 
40
+ /***/ 346
41
+ (__unused_webpack_module, exports) {
42
+
43
+ var __webpack_unused_export__;
44
+
45
+ /**
46
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
47
+ *
48
+ * This source code is licensed under the MIT license found in the
49
+ * LICENSE file in the root directory of this source tree.
50
+ *
51
+ * @format
52
+ * @oncall memory_lab
53
+ */
54
+ __webpack_unused_export__ = ({ value: true });
55
+ exports.config = exports.of = exports.lF = void 0;
56
+ // Performance Configuration
57
+ exports.lF = {
58
+ scanIntervalMs: 1000,
59
+ maxComponentStackDepth: 100,
60
+ memoryMeasurementIntervalMs: 5000,
61
+ };
62
+ // Feature Flags
63
+ exports.of = {
64
+ enableMutationObserver: true,
65
+ enableMemoryTracking: true,
66
+ enableComponentStack: true,
67
+ enableConsoleLogs: window === null || window === void 0 ? void 0 : window.TEST_MEMORY_SCAN,
68
+ };
69
+ // overall Config
70
+ exports.config = {
71
+ performance: exports.lF,
72
+ features: exports.of,
73
+ };
74
+
75
+
76
+ /***/ },
77
+
40
78
  /***/ 54
41
79
  (__unused_webpack_module, exports, __webpack_require__) {
42
80
 
@@ -232,38 +270,142 @@ _DOMObserver_elementCount = new WeakMap(), _DOMObserver_detachedElementCount = n
232
270
 
233
271
  /***/ },
234
272
 
235
- /***/ 235
273
+ /***/ 953
236
274
  (__unused_webpack_module, exports, __webpack_require__) {
237
275
 
238
276
 
239
- var __importDefault = (this && this.__importDefault) || function (mod) {
240
- return (mod && mod.__esModule) ? mod : { "default": mod };
277
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
278
+ if (kind === "m") throw new TypeError("Private method is not writable");
279
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
280
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
281
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
241
282
  };
283
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
284
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
285
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
286
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
287
+ };
288
+ var _EventListenerTracker_instances, _EventListenerTracker_listenerMap, _EventListenerTracker_detachedListeners, _EventListenerTracker_originalAddEventListener, _EventListenerTracker_originalRemoveEventListener, _EventListenerTracker_patchEventListeners, _EventListenerTracker_unpatchEventListeners;
242
289
  Object.defineProperty(exports, "__esModule", ({ value: true }));
243
- exports.createReactMemoryScan = createReactMemoryScan;
244
- /**
245
- * Copyright (c) Meta Platforms, Inc. and affiliates.
246
- *
247
- * This source code is licensed under the MIT license found in the
248
- * LICENSE file in the root directory of this source tree.
249
- *
250
- * @format
251
- * @oncall memory_lab
252
- */
253
- const react_memory_scan_1 = __importDefault(__webpack_require__(282));
254
- // import { DOMVisualizationExtension } from './extensions/dom-visualization-extension';
255
- function createReactMemoryScan(options = {}) {
256
- return new react_memory_scan_1.default(options);
257
- // const memoryScan = new ReactMemoryScan(options);
258
- // const domVisualizer = new DOMVisualizationExtension(memoryScan);
259
- // memoryScan.registerExtension(domVisualizer);
260
- // return memoryScan;
290
+ exports.EventListenerTracker = void 0;
291
+ const react_fiber_utils_1 = __webpack_require__(737);
292
+ const weak_ref_utils_1 = __webpack_require__(313);
293
+ class EventListenerTracker {
294
+ constructor() {
295
+ _EventListenerTracker_instances.add(this);
296
+ _EventListenerTracker_listenerMap.set(this, void 0);
297
+ _EventListenerTracker_detachedListeners.set(this, void 0);
298
+ _EventListenerTracker_originalAddEventListener.set(this, void 0);
299
+ _EventListenerTracker_originalRemoveEventListener.set(this, void 0);
300
+ __classPrivateFieldSet(this, _EventListenerTracker_listenerMap, new weak_ref_utils_1.WeakMapPlus({ fallback: 'noop', cleanupMs: 100 }), "f");
301
+ __classPrivateFieldSet(this, _EventListenerTracker_detachedListeners, new Map(), "f");
302
+ __classPrivateFieldSet(this, _EventListenerTracker_originalAddEventListener, EventTarget.prototype.addEventListener, "f");
303
+ __classPrivateFieldSet(this, _EventListenerTracker_originalRemoveEventListener, EventTarget.prototype.removeEventListener, "f");
304
+ __classPrivateFieldGet(this, _EventListenerTracker_instances, "m", _EventListenerTracker_patchEventListeners).call(this);
305
+ }
306
+ static getInstance() {
307
+ if (!EventListenerTracker.instance) {
308
+ EventListenerTracker.instance = new EventListenerTracker();
309
+ }
310
+ return EventListenerTracker.instance;
311
+ }
312
+ addListener(el, type, cb, options) {
313
+ el.addEventListener(type, cb, options);
314
+ }
315
+ removeListener(el, type, cb, options) {
316
+ el.removeEventListener(type, cb, options);
317
+ }
318
+ scan(getComponentName) {
319
+ const detachedListeners = new Map();
320
+ for (const [el, listeners] of __classPrivateFieldGet(this, _EventListenerTracker_listenerMap, "f").entries()) {
321
+ if (el instanceof Element && !el.isConnected) {
322
+ for (const listener of listeners) {
323
+ // Skip if the callback has been garbage collected
324
+ if (!listener.cb.deref())
325
+ continue;
326
+ const componentName = getComponentName(new WeakRef(el));
327
+ if (!detachedListeners.has(componentName)) {
328
+ detachedListeners.set(componentName, []);
329
+ }
330
+ const groups = detachedListeners.get(componentName);
331
+ let group = groups === null || groups === void 0 ? void 0 : groups.find(g => g.type === listener.type);
332
+ if (!group) {
333
+ group = {
334
+ type: listener.type,
335
+ count: 0,
336
+ entries: [],
337
+ };
338
+ groups === null || groups === void 0 ? void 0 : groups.push(group);
339
+ }
340
+ group.count++;
341
+ group.entries.push(new WeakRef(listener));
342
+ }
343
+ }
344
+ }
345
+ __classPrivateFieldSet(this, _EventListenerTracker_detachedListeners, detachedListeners, "f");
346
+ return detachedListeners;
347
+ }
348
+ getDetachedListeners() {
349
+ return __classPrivateFieldGet(this, _EventListenerTracker_detachedListeners, "f");
350
+ }
351
+ destroy() {
352
+ __classPrivateFieldGet(this, _EventListenerTracker_instances, "m", _EventListenerTracker_unpatchEventListeners).call(this);
353
+ __classPrivateFieldGet(this, _EventListenerTracker_listenerMap, "f").destroy();
354
+ __classPrivateFieldGet(this, _EventListenerTracker_detachedListeners, "f").clear();
355
+ EventListenerTracker.instance = null;
356
+ }
261
357
  }
358
+ exports.EventListenerTracker = EventListenerTracker;
359
+ _EventListenerTracker_listenerMap = new WeakMap(), _EventListenerTracker_detachedListeners = new WeakMap(), _EventListenerTracker_originalAddEventListener = new WeakMap(), _EventListenerTracker_originalRemoveEventListener = new WeakMap(), _EventListenerTracker_instances = new WeakSet(), _EventListenerTracker_patchEventListeners = function _EventListenerTracker_patchEventListeners() {
360
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
361
+ const self = this;
362
+ EventTarget.prototype.addEventListener = function (type, listener, options) {
363
+ var _a;
364
+ __classPrivateFieldGet(self, _EventListenerTracker_originalAddEventListener, "f").call(this, type, listener, options);
365
+ if (this instanceof Element) {
366
+ const fiber = (0, react_fiber_utils_1.getFiberNodeFromElement)(this);
367
+ const entry = {
368
+ type,
369
+ cb: new WeakRef(listener),
370
+ options,
371
+ fiber: fiber ? new WeakRef(fiber) : undefined,
372
+ };
373
+ const listeners = (_a = __classPrivateFieldGet(self, _EventListenerTracker_listenerMap, "f").get(this)) !== null && _a !== void 0 ? _a : [];
374
+ listeners.push(entry);
375
+ __classPrivateFieldGet(self, _EventListenerTracker_listenerMap, "f").set(this, listeners);
376
+ }
377
+ };
378
+ EventTarget.prototype.removeEventListener = function (type, listener, options) {
379
+ __classPrivateFieldGet(self, _EventListenerTracker_originalRemoveEventListener, "f").call(this, type, listener, options);
380
+ if (this instanceof Element) {
381
+ const listeners = __classPrivateFieldGet(self, _EventListenerTracker_listenerMap, "f").get(this);
382
+ if (listeners) {
383
+ const index = listeners.findIndex(entry => entry.type === type &&
384
+ entry.cb.deref() === listener &&
385
+ entry.options === options);
386
+ if (index !== -1) {
387
+ listeners.splice(index, 1);
388
+ }
389
+ if (listeners.length === 0) {
390
+ __classPrivateFieldGet(self, _EventListenerTracker_listenerMap, "f").delete(this);
391
+ }
392
+ else {
393
+ __classPrivateFieldGet(self, _EventListenerTracker_listenerMap, "f").set(this, listeners);
394
+ }
395
+ }
396
+ }
397
+ };
398
+ }, _EventListenerTracker_unpatchEventListeners = function _EventListenerTracker_unpatchEventListeners() {
399
+ EventTarget.prototype.addEventListener = __classPrivateFieldGet(this, _EventListenerTracker_originalAddEventListener, "f");
400
+ EventTarget.prototype.removeEventListener =
401
+ __classPrivateFieldGet(this, _EventListenerTracker_originalRemoveEventListener, "f");
402
+ };
403
+ EventListenerTracker.instance = null;
262
404
 
263
405
 
264
406
  /***/ },
265
407
 
266
- /***/ 282
408
+ /***/ 302
267
409
  (__unused_webpack_module, exports, __webpack_require__) {
268
410
 
269
411
 
@@ -300,77 +442,217 @@ var __importStar = (this && this.__importStar) || (function () {
300
442
  return result;
301
443
  };
302
444
  })();
303
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
304
- if (kind === "m") throw new TypeError("Private method is not writable");
305
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
306
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
307
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
308
- };
309
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
310
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
311
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
312
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
313
- };
314
- var __rest = (this && this.__rest) || function (s, e) {
315
- var t = {};
316
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
317
- t[p] = s[p];
318
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
319
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
320
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
321
- t[p[i]] = s[p[i]];
322
- }
323
- return t;
324
- };
325
- var __importDefault = (this && this.__importDefault) || function (mod) {
326
- return (mod && mod.__esModule) ? mod : { "default": mod };
327
- };
328
- var _ReactMemoryScan_instances, _ReactMemoryScan_elementWeakRefs, _ReactMemoryScan_isActivated, _ReactMemoryScan_intervalId, _ReactMemoryScan_elementToBoundingRects, _ReactMemoryScan_elementToComponentStack, _ReactMemoryScan_knownFiberNodes, _ReactMemoryScan_fiberAnalyzer, _ReactMemoryScan_isDevMode, _ReactMemoryScan_subscribers, _ReactMemoryScan_extensions, _ReactMemoryScan_scanIntervalMs, _ReactMemoryScan_domObserver, _ReactMemoryScan_eventListenerTracker, _ReactMemoryScan_isDisposed, _ReactMemoryScan_log, _ReactMemoryScan_notifySubscribers, _ReactMemoryScan_notifyExtensionsBeforeScan, _ReactMemoryScan_notifyExtensionsAfterScan, _ReactMemoryScan_scanCycle, _ReactMemoryScan_updateElementToComponentInfo, _ReactMemoryScan_getTrackedDOMRefs, _ReactMemoryScan_runGC, _ReactMemoryScan_scanEventListenerLeaks;
329
445
  Object.defineProperty(exports, "__esModule", ({ value: true }));
446
+ /**
447
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
448
+ *
449
+ * This source code is licensed under the MIT license found in the
450
+ * LICENSE file in the root directory of this source tree.
451
+ *
452
+ * @format
453
+ * @oncall memory_lab
454
+ */
330
455
  const utils = __importStar(__webpack_require__(476));
331
- const react_fiber_analysis_1 = __importDefault(__webpack_require__(302));
332
456
  const react_fiber_utils_1 = __webpack_require__(737);
333
- const dom_observer_1 = __webpack_require__(54);
334
- const config_1 = __webpack_require__(346);
335
- const event_listener_tracker_1 = __webpack_require__(953);
336
- class ReactMemoryScan {
337
- constructor(options = {}) {
338
- var _a, _b, _c, _d;
339
- _ReactMemoryScan_instances.add(this);
340
- _ReactMemoryScan_elementWeakRefs.set(this, void 0);
341
- _ReactMemoryScan_isActivated.set(this, void 0);
342
- _ReactMemoryScan_intervalId.set(this, void 0);
343
- _ReactMemoryScan_elementToBoundingRects.set(this, void 0);
344
- _ReactMemoryScan_elementToComponentStack.set(this, void 0);
345
- _ReactMemoryScan_knownFiberNodes.set(this, void 0);
346
- _ReactMemoryScan_fiberAnalyzer.set(this, void 0);
347
- _ReactMemoryScan_isDevMode.set(this, void 0);
348
- _ReactMemoryScan_subscribers.set(this, void 0);
349
- _ReactMemoryScan_extensions.set(this, void 0);
350
- _ReactMemoryScan_scanIntervalMs.set(this, void 0);
351
- _ReactMemoryScan_domObserver.set(this, void 0);
352
- _ReactMemoryScan_eventListenerTracker.set(this, void 0);
353
- _ReactMemoryScan_isDisposed.set(this, void 0);
354
- __classPrivateFieldSet(this, _ReactMemoryScan_elementWeakRefs, [], "f");
355
- __classPrivateFieldSet(this, _ReactMemoryScan_isActivated, false, "f");
356
- __classPrivateFieldSet(this, _ReactMemoryScan_elementToBoundingRects, new WeakMap(), "f");
357
- __classPrivateFieldSet(this, _ReactMemoryScan_elementToComponentStack, new WeakMap(), "f");
358
- __classPrivateFieldSet(this, _ReactMemoryScan_knownFiberNodes, [], "f");
359
- __classPrivateFieldSet(this, _ReactMemoryScan_eventListenerTracker, options.trackEventListenerLeaks
360
- ? event_listener_tracker_1.EventListenerTracker.getInstance()
361
- : null, "f");
362
- __classPrivateFieldSet(this, _ReactMemoryScan_intervalId, null, "f");
363
- __classPrivateFieldSet(this, _ReactMemoryScan_isDisposed, false, "f");
364
- __classPrivateFieldSet(this, _ReactMemoryScan_fiberAnalyzer, new react_fiber_analysis_1.default(), "f");
365
- __classPrivateFieldSet(this, _ReactMemoryScan_isDevMode, (_a = options.isDevMode) !== null && _a !== void 0 ? _a : false, "f");
366
- __classPrivateFieldSet(this, _ReactMemoryScan_subscribers, (_b = options.subscribers) !== null && _b !== void 0 ? _b : [], "f");
367
- __classPrivateFieldSet(this, _ReactMemoryScan_extensions, (_c = options.extensions) !== null && _c !== void 0 ? _c : [], "f");
368
- __classPrivateFieldSet(this, _ReactMemoryScan_scanIntervalMs, (_d = options.scanIntervalMs) !== null && _d !== void 0 ? _d : config_1.config.performance.scanIntervalMs, "f");
369
- }
370
- subscribe(callback) {
371
- __classPrivateFieldGet(this, _ReactMemoryScan_subscribers, "f").push(callback);
372
- return () => this.unsubscribe(callback);
373
- }
457
+ const valid_component_name_1 = __webpack_require__(847);
458
+ class ReactFiberAnalyzer {
459
+ scan(elementWeakRefList, elementToComponentStack) {
460
+ var _a;
461
+ const visitedRootFibers = new Set();
462
+ const components = new Set();
463
+ const componentToFiberNodeCount = new Map();
464
+ const detachedComponentToFiberNodeCount = new Map();
465
+ const topDownVisited = new Set();
466
+ const analyzedFibers = new Set();
467
+ const fiberNodes = [];
468
+ let totalElements = 0;
469
+ let totalDetachedElements = 0;
470
+ function analyzeFiber(fiberNode) {
471
+ (0, react_fiber_utils_1.traverseFiber)(fiberNode, (fiberNode) => {
472
+ // skip if the fiber node has already been analyzed
473
+ if (analyzedFibers.has(fiberNode)) {
474
+ return true;
475
+ }
476
+ analyzedFibers.add(fiberNode);
477
+ // traverse the fiber tree up to find the component name
478
+ const displayName = (0, react_fiber_utils_1.getDisplayNameOfFiberNode)(fiberNode);
479
+ if (displayName != null && (0, valid_component_name_1.isValidComponentName)(displayName)) {
480
+ components.add(displayName);
481
+ utils.addCountbyKey(componentToFiberNodeCount, displayName, 1);
482
+ return true;
483
+ }
484
+ }, true);
485
+ }
486
+ for (const weakRef of elementWeakRefList) {
487
+ const elem = weakRef.deref();
488
+ if (elem == null) {
489
+ continue;
490
+ }
491
+ // elements stats
492
+ ++totalElements;
493
+ // TODO: simplify this logic
494
+ if (!elem.isConnected) {
495
+ if (elementToComponentStack.has(elem)) {
496
+ const componentStack = (_a = elementToComponentStack.get(elem)) !== null && _a !== void 0 ? _a : [];
497
+ // set component name
498
+ const component = componentStack[0];
499
+ elem.__component_name = component;
500
+ utils.addCountbyKey(detachedComponentToFiberNodeCount, component, 1);
501
+ }
502
+ ++totalDetachedElements;
503
+ }
504
+ // analyze fiber nodes
505
+ const fiberNode = (0, react_fiber_utils_1.getFiberNodeFromElement)(elem);
506
+ if (fiberNode == null) {
507
+ continue;
508
+ }
509
+ analyzeFiber(fiberNode);
510
+ // try to traverse each fiber node in the entire fiber tree
511
+ const rootFiber = (0, react_fiber_utils_1.getTopMostFiberWithChild)(fiberNode);
512
+ if (rootFiber == null) {
513
+ continue;
514
+ }
515
+ if (visitedRootFibers.has(rootFiber)) {
516
+ continue;
517
+ }
518
+ visitedRootFibers.add(rootFiber);
519
+ // start traversing fiber tree from the know root host
520
+ (0, react_fiber_utils_1.traverseFiber)(rootFiber, (node) => {
521
+ if (topDownVisited.has(node)) {
522
+ return true;
523
+ }
524
+ topDownVisited.add(node);
525
+ fiberNodes.push(new WeakRef(node));
526
+ analyzeFiber(node);
527
+ }, false);
528
+ }
529
+ topDownVisited.clear();
530
+ analyzedFibers.clear();
531
+ visitedRootFibers.clear();
532
+ return {
533
+ components,
534
+ componentToFiberNodeCount,
535
+ totalElements,
536
+ totalDetachedElements,
537
+ detachedComponentToFiberNodeCount,
538
+ fiberNodes,
539
+ leakedFibers: [],
540
+ };
541
+ }
542
+ }
543
+ exports["default"] = ReactFiberAnalyzer;
544
+
545
+
546
+ /***/ },
547
+
548
+ /***/ 282
549
+ (__unused_webpack_module, exports, __webpack_require__) {
550
+
551
+
552
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
553
+ if (k2 === undefined) k2 = k;
554
+ var desc = Object.getOwnPropertyDescriptor(m, k);
555
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
556
+ desc = { enumerable: true, get: function() { return m[k]; } };
557
+ }
558
+ Object.defineProperty(o, k2, desc);
559
+ }) : (function(o, m, k, k2) {
560
+ if (k2 === undefined) k2 = k;
561
+ o[k2] = m[k];
562
+ }));
563
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
564
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
565
+ }) : function(o, v) {
566
+ o["default"] = v;
567
+ });
568
+ var __importStar = (this && this.__importStar) || (function () {
569
+ var ownKeys = function(o) {
570
+ ownKeys = Object.getOwnPropertyNames || function (o) {
571
+ var ar = [];
572
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
573
+ return ar;
574
+ };
575
+ return ownKeys(o);
576
+ };
577
+ return function (mod) {
578
+ if (mod && mod.__esModule) return mod;
579
+ var result = {};
580
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
581
+ __setModuleDefault(result, mod);
582
+ return result;
583
+ };
584
+ })();
585
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
586
+ if (kind === "m") throw new TypeError("Private method is not writable");
587
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
588
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
589
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
590
+ };
591
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
592
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
593
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
594
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
595
+ };
596
+ var __rest = (this && this.__rest) || function (s, e) {
597
+ var t = {};
598
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
599
+ t[p] = s[p];
600
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
601
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
602
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
603
+ t[p[i]] = s[p[i]];
604
+ }
605
+ return t;
606
+ };
607
+ var __importDefault = (this && this.__importDefault) || function (mod) {
608
+ return (mod && mod.__esModule) ? mod : { "default": mod };
609
+ };
610
+ var _ReactMemoryScan_instances, _ReactMemoryScan_elementWeakRefs, _ReactMemoryScan_isActivated, _ReactMemoryScan_intervalId, _ReactMemoryScan_elementToBoundingRects, _ReactMemoryScan_elementToComponentStack, _ReactMemoryScan_knownFiberNodes, _ReactMemoryScan_fiberAnalyzer, _ReactMemoryScan_isDevMode, _ReactMemoryScan_subscribers, _ReactMemoryScan_extensions, _ReactMemoryScan_scanIntervalMs, _ReactMemoryScan_domObserver, _ReactMemoryScan_eventListenerTracker, _ReactMemoryScan_isDisposed, _ReactMemoryScan_log, _ReactMemoryScan_notifySubscribers, _ReactMemoryScan_notifyExtensionsBeforeScan, _ReactMemoryScan_notifyExtensionsAfterScan, _ReactMemoryScan_scanCycle, _ReactMemoryScan_updateElementToComponentInfo, _ReactMemoryScan_getTrackedDOMRefs, _ReactMemoryScan_runGC, _ReactMemoryScan_scanEventListenerLeaks;
611
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
612
+ const utils = __importStar(__webpack_require__(476));
613
+ const react_fiber_analysis_1 = __importDefault(__webpack_require__(302));
614
+ const react_fiber_utils_1 = __webpack_require__(737);
615
+ const dom_observer_1 = __webpack_require__(54);
616
+ const config_1 = __webpack_require__(346);
617
+ const event_listener_tracker_1 = __webpack_require__(953);
618
+ class ReactMemoryScan {
619
+ constructor(options = {}) {
620
+ var _a, _b, _c, _d;
621
+ _ReactMemoryScan_instances.add(this);
622
+ _ReactMemoryScan_elementWeakRefs.set(this, void 0);
623
+ _ReactMemoryScan_isActivated.set(this, void 0);
624
+ _ReactMemoryScan_intervalId.set(this, void 0);
625
+ _ReactMemoryScan_elementToBoundingRects.set(this, void 0);
626
+ _ReactMemoryScan_elementToComponentStack.set(this, void 0);
627
+ _ReactMemoryScan_knownFiberNodes.set(this, void 0);
628
+ _ReactMemoryScan_fiberAnalyzer.set(this, void 0);
629
+ _ReactMemoryScan_isDevMode.set(this, void 0);
630
+ _ReactMemoryScan_subscribers.set(this, void 0);
631
+ _ReactMemoryScan_extensions.set(this, void 0);
632
+ _ReactMemoryScan_scanIntervalMs.set(this, void 0);
633
+ _ReactMemoryScan_domObserver.set(this, void 0);
634
+ _ReactMemoryScan_eventListenerTracker.set(this, void 0);
635
+ _ReactMemoryScan_isDisposed.set(this, void 0);
636
+ __classPrivateFieldSet(this, _ReactMemoryScan_elementWeakRefs, [], "f");
637
+ __classPrivateFieldSet(this, _ReactMemoryScan_isActivated, false, "f");
638
+ __classPrivateFieldSet(this, _ReactMemoryScan_elementToBoundingRects, new WeakMap(), "f");
639
+ __classPrivateFieldSet(this, _ReactMemoryScan_elementToComponentStack, new WeakMap(), "f");
640
+ __classPrivateFieldSet(this, _ReactMemoryScan_knownFiberNodes, [], "f");
641
+ __classPrivateFieldSet(this, _ReactMemoryScan_eventListenerTracker, options.trackEventListenerLeaks
642
+ ? event_listener_tracker_1.EventListenerTracker.getInstance()
643
+ : null, "f");
644
+ __classPrivateFieldSet(this, _ReactMemoryScan_intervalId, null, "f");
645
+ __classPrivateFieldSet(this, _ReactMemoryScan_isDisposed, false, "f");
646
+ __classPrivateFieldSet(this, _ReactMemoryScan_fiberAnalyzer, new react_fiber_analysis_1.default(), "f");
647
+ __classPrivateFieldSet(this, _ReactMemoryScan_isDevMode, (_a = options.isDevMode) !== null && _a !== void 0 ? _a : false, "f");
648
+ __classPrivateFieldSet(this, _ReactMemoryScan_subscribers, (_b = options.subscribers) !== null && _b !== void 0 ? _b : [], "f");
649
+ __classPrivateFieldSet(this, _ReactMemoryScan_extensions, (_c = options.extensions) !== null && _c !== void 0 ? _c : [], "f");
650
+ __classPrivateFieldSet(this, _ReactMemoryScan_scanIntervalMs, (_d = options.scanIntervalMs) !== null && _d !== void 0 ? _d : config_1.config.performance.scanIntervalMs, "f");
651
+ }
652
+ subscribe(callback) {
653
+ __classPrivateFieldGet(this, _ReactMemoryScan_subscribers, "f").push(callback);
654
+ return () => this.unsubscribe(callback);
655
+ }
374
656
  unsubscribe(callback) {
375
657
  __classPrivateFieldSet(this, _ReactMemoryScan_subscribers, __classPrivateFieldGet(this, _ReactMemoryScan_subscribers, "f").filter(cb => cb !== callback), "f");
376
658
  }
@@ -662,44 +944,11 @@ class LeakedFiber {
662
944
 
663
945
  /***/ },
664
946
 
665
- /***/ 302
666
- (__unused_webpack_module, exports, __webpack_require__) {
947
+ /***/ 847
948
+ (__unused_webpack_module, exports) {
667
949
 
950
+ var __webpack_unused_export__;
668
951
 
669
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
670
- if (k2 === undefined) k2 = k;
671
- var desc = Object.getOwnPropertyDescriptor(m, k);
672
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
673
- desc = { enumerable: true, get: function() { return m[k]; } };
674
- }
675
- Object.defineProperty(o, k2, desc);
676
- }) : (function(o, m, k, k2) {
677
- if (k2 === undefined) k2 = k;
678
- o[k2] = m[k];
679
- }));
680
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
681
- Object.defineProperty(o, "default", { enumerable: true, value: v });
682
- }) : function(o, v) {
683
- o["default"] = v;
684
- });
685
- var __importStar = (this && this.__importStar) || (function () {
686
- var ownKeys = function(o) {
687
- ownKeys = Object.getOwnPropertyNames || function (o) {
688
- var ar = [];
689
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
690
- return ar;
691
- };
692
- return ownKeys(o);
693
- };
694
- return function (mod) {
695
- if (mod && mod.__esModule) return mod;
696
- var result = {};
697
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
698
- __setModuleDefault(result, mod);
699
- return result;
700
- };
701
- })();
702
- Object.defineProperty(exports, "__esModule", ({ value: true }));
703
952
  /**
704
953
  * Copyright (c) Meta Platforms, Inc. and affiliates.
705
954
  *
@@ -709,103 +958,25 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
709
958
  * @format
710
959
  * @oncall memory_lab
711
960
  */
712
- const utils = __importStar(__webpack_require__(476));
713
- const react_fiber_utils_1 = __webpack_require__(737);
714
- const valid_component_name_1 = __webpack_require__(847);
715
- class ReactFiberAnalyzer {
716
- scan(elementWeakRefList, elementToComponentStack) {
717
- var _a;
718
- const visitedRootFibers = new Set();
719
- const components = new Set();
720
- const componentToFiberNodeCount = new Map();
721
- const detachedComponentToFiberNodeCount = new Map();
722
- const topDownVisited = new Set();
723
- const analyzedFibers = new Set();
724
- const fiberNodes = [];
725
- let totalElements = 0;
726
- let totalDetachedElements = 0;
727
- function analyzeFiber(fiberNode) {
728
- (0, react_fiber_utils_1.traverseFiber)(fiberNode, (fiberNode) => {
729
- // skip if the fiber node has already been analyzed
730
- if (analyzedFibers.has(fiberNode)) {
731
- return true;
732
- }
733
- analyzedFibers.add(fiberNode);
734
- // traverse the fiber tree up to find the component name
735
- const displayName = (0, react_fiber_utils_1.getDisplayNameOfFiberNode)(fiberNode);
736
- if (displayName != null && (0, valid_component_name_1.isValidComponentName)(displayName)) {
737
- components.add(displayName);
738
- utils.addCountbyKey(componentToFiberNodeCount, displayName, 1);
739
- return true;
740
- }
741
- }, true);
742
- }
743
- for (const weakRef of elementWeakRefList) {
744
- const elem = weakRef.deref();
745
- if (elem == null) {
746
- continue;
747
- }
748
- // elements stats
749
- ++totalElements;
750
- // TODO: simplify this logic
751
- if (!elem.isConnected) {
752
- if (elementToComponentStack.has(elem)) {
753
- const componentStack = (_a = elementToComponentStack.get(elem)) !== null && _a !== void 0 ? _a : [];
754
- // set component name
755
- const component = componentStack[0];
756
- elem.__component_name = component;
757
- utils.addCountbyKey(detachedComponentToFiberNodeCount, component, 1);
758
- }
759
- ++totalDetachedElements;
760
- }
761
- // analyze fiber nodes
762
- const fiberNode = (0, react_fiber_utils_1.getFiberNodeFromElement)(elem);
763
- if (fiberNode == null) {
764
- continue;
765
- }
766
- analyzeFiber(fiberNode);
767
- // try to traverse each fiber node in the entire fiber tree
768
- const rootFiber = (0, react_fiber_utils_1.getTopMostFiberWithChild)(fiberNode);
769
- if (rootFiber == null) {
770
- continue;
771
- }
772
- if (visitedRootFibers.has(rootFiber)) {
773
- continue;
774
- }
775
- visitedRootFibers.add(rootFiber);
776
- // start traversing fiber tree from the know root host
777
- (0, react_fiber_utils_1.traverseFiber)(rootFiber, (node) => {
778
- if (topDownVisited.has(node)) {
779
- return true;
780
- }
781
- topDownVisited.add(node);
782
- fiberNodes.push(new WeakRef(node));
783
- analyzeFiber(node);
784
- }, false);
785
- }
786
- topDownVisited.clear();
787
- analyzedFibers.clear();
788
- visitedRootFibers.clear();
789
- return {
790
- components,
791
- componentToFiberNodeCount,
792
- totalElements,
793
- totalDetachedElements,
794
- detachedComponentToFiberNodeCount,
795
- fiberNodes,
796
- leakedFibers: [],
797
- };
798
- }
961
+ __webpack_unused_export__ = ({ value: true });
962
+ exports.isValidComponentName = isValidComponentName;
963
+ const displayNameBlockList = new Set();
964
+ function isValidComponentName(name) {
965
+ return name != null && !displayNameBlockList.has(name);
799
966
  }
800
- exports["default"] = ReactFiberAnalyzer;
801
967
 
802
968
 
803
969
  /***/ },
804
970
 
805
- /***/ 313
806
- (__unused_webpack_module, exports) {
971
+ /***/ 235
972
+ (__unused_webpack_module, exports, __webpack_require__) {
807
973
 
808
974
 
975
+ var __importDefault = (this && this.__importDefault) || function (mod) {
976
+ return (mod && mod.__esModule) ? mod : { "default": mod };
977
+ };
978
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
979
+ exports.createReactMemoryScan = createReactMemoryScan;
809
980
  /**
810
981
  * Copyright (c) Meta Platforms, Inc. and affiliates.
811
982
  *
@@ -815,304 +986,211 @@ exports["default"] = ReactFiberAnalyzer;
815
986
  * @format
816
987
  * @oncall memory_lab
817
988
  */
818
- var _a, _b, _c;
819
- Object.defineProperty(exports, "__esModule", ({ value: true }));
820
- exports.WeakMapPlus = exports.WeakMapNoOp = exports.WeakSetNoOp = exports.WeakRefNoOp = void 0;
821
- exports.getNativeWeakMap = getNativeWeakMap;
822
- exports.getNativeWeakMapOrFallback = getNativeWeakMapOrFallback;
823
- exports.getNativeWeakSet = getNativeWeakSet;
824
- exports.getNativeWeakSetOrFallback = getNativeWeakSetOrFallback;
825
- exports.getNativeWeakRef = getNativeWeakRef;
826
- exports.getNativeWeakRefOrFallback = getNativeWeakRefOrFallback;
827
- exports.isWeakMapNative = isWeakMapNative;
828
- exports.isWeakSetNative = isWeakSetNative;
829
- exports.isWeakRefNative = isWeakRefNative;
830
- exports.isWeakAPINative = isWeakAPINative;
831
- const globalScope = typeof window !== 'undefined' ? window : self;
832
- const _weakMap = (_a = globalScope.WeakMap) !== null && _a !== void 0 ? _a : null;
833
- const _weakMapIsNative = isWeakMapNative();
834
- const _weakSet = (_b = globalScope.WeakSet) !== null && _b !== void 0 ? _b : null;
835
- const _weakSetIsNative = isWeakSetNative();
836
- const _weakRef = (_c = globalScope.WeakRef) !== null && _c !== void 0 ? _c : null;
837
- const _weakRefIsNative = isWeakRefNative();
838
- const _weakAPIsAreNative = _weakMapIsNative && _weakSetIsNative && _weakRefIsNative;
839
- class WeakRefNoOp {
840
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
841
- constructor(_targetObject) {
842
- // to be overridden
843
- }
844
- deref() {
845
- return undefined;
846
- }
989
+ const react_memory_scan_1 = __importDefault(__webpack_require__(282));
990
+ // import { DOMVisualizationExtension } from './extensions/dom-visualization-extension';
991
+ function createReactMemoryScan(options = {}) {
992
+ return new react_memory_scan_1.default(options);
993
+ // const memoryScan = new ReactMemoryScan(options);
994
+ // const domVisualizer = new DOMVisualizationExtension(memoryScan);
995
+ // memoryScan.registerExtension(domVisualizer);
996
+ // return memoryScan;
847
997
  }
848
- exports.WeakRefNoOp = WeakRefNoOp;
849
- class WeakSetNoOp {
850
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
851
- constructor(_iterable) {
852
- // to be overridden
998
+
999
+
1000
+ /***/ },
1001
+
1002
+ /***/ 737
1003
+ (__unused_webpack_module, exports, __webpack_require__) {
1004
+
1005
+ var __webpack_unused_export__;
1006
+
1007
+ __webpack_unused_export__ = ({ value: true });
1008
+ exports.traverseFiber = exports.getTopMostFiberWithChild = __webpack_unused_export__ = __webpack_unused_export__ = exports.dD = __webpack_unused_export__ = exports.bv = exports.Fm = __webpack_unused_export__ = exports.JA = exports.NT = __webpack_unused_export__ = exports.UT = exports.DQ = __webpack_unused_export__ = exports.W = __webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = exports.IZ = exports.i$ = exports.Wb = __webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = void 0;
1009
+ exports.getFiberNodeFromElement = getFiberNodeFromElement;
1010
+ exports.getReactComponentStack = getReactComponentStack;
1011
+ exports.getDisplayNameOfFiberNode = getDisplayNameOfFiberNode;
1012
+ __webpack_unused_export__ = isFunctionalComponent;
1013
+ __webpack_unused_export__ = extractReactComponentName;
1014
+ const utils_1 = __webpack_require__(476);
1015
+ const valid_component_name_1 = __webpack_require__(847);
1016
+ __webpack_unused_export__ = 1;
1017
+ __webpack_unused_export__ = 0;
1018
+ __webpack_unused_export__ = 9;
1019
+ __webpack_unused_export__ = 13;
1020
+ __webpack_unused_export__ = 22;
1021
+ __webpack_unused_export__ = 11;
1022
+ __webpack_unused_export__ = 14;
1023
+ __webpack_unused_export__ = 15;
1024
+ exports.Wb = 5;
1025
+ exports.i$ = 26;
1026
+ exports.IZ = 27;
1027
+ __webpack_unused_export__ = 18;
1028
+ __webpack_unused_export__ = 6;
1029
+ __webpack_unused_export__ = 7;
1030
+ __webpack_unused_export__ = 23;
1031
+ __webpack_unused_export__ = 22;
1032
+ __webpack_unused_export__ = 3;
1033
+ __webpack_unused_export__ = 0xeacf;
1034
+ __webpack_unused_export__ = 'Symbol(react.concurrent_mode)';
1035
+ __webpack_unused_export__ = 'Symbol(react.async_mode)';
1036
+ // https://github.com/facebook/react/blob/main/packages/react-reconciler/src/ReactFiberFlags.js
1037
+ __webpack_unused_export__ = 0b1;
1038
+ exports.W = 0b10;
1039
+ __webpack_unused_export__ = 0b10000000;
1040
+ exports.DQ = 0b1000000000000;
1041
+ exports.UT = 0b100;
1042
+ __webpack_unused_export__ = 0b1000;
1043
+ exports.NT = 0b10000;
1044
+ exports.JA = 0b100000;
1045
+ __webpack_unused_export__ = 0b1000000000;
1046
+ exports.Fm = 0b10000000000;
1047
+ exports.bv = 0b10000000000000;
1048
+ __webpack_unused_export__ = exports.W |
1049
+ exports.UT |
1050
+ exports.NT |
1051
+ exports.JA |
1052
+ exports.DQ |
1053
+ exports.bv |
1054
+ exports.Fm;
1055
+ /**
1056
+ * @see https://reactnative.dev/architecture/glossary#host-view-tree-and-host-view
1057
+ */
1058
+ const isHostFiber = (fiber) => fiber.tag === exports.Wb ||
1059
+ // @ts-expect-error: it exists
1060
+ fiber.tag === exports.i$ ||
1061
+ // @ts-expect-error: it exists
1062
+ fiber.tag === exports.IZ ||
1063
+ typeof fiber.type === 'string';
1064
+ exports.dD = isHostFiber;
1065
+ const getNearestHostFiber = (fiber) => {
1066
+ let hostFiber = (0, exports.traverseFiber)(fiber, exports.dD);
1067
+ if (!hostFiber) {
1068
+ hostFiber = (0, exports.traverseFiber)(fiber, exports.dD, true);
853
1069
  }
854
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
855
- add(_value) {
856
- return this;
1070
+ return hostFiber;
1071
+ };
1072
+ __webpack_unused_export__ = getNearestHostFiber;
1073
+ const getTopMostHostFiber = (fiber) => {
1074
+ let topMostHostFiber = null;
1075
+ function checkFiber(fiber) {
1076
+ if ((0, exports.dD)(fiber)) {
1077
+ topMostHostFiber = fiber;
1078
+ }
857
1079
  }
858
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
859
- delete(_value) {
860
- return false;
1080
+ (0, exports.traverseFiber)(fiber, checkFiber, true);
1081
+ return topMostHostFiber;
1082
+ };
1083
+ __webpack_unused_export__ = getTopMostHostFiber;
1084
+ const getTopMostFiberWithChild = (fiber) => {
1085
+ let topMostFiber = null;
1086
+ function checkFiber(fiber) {
1087
+ if (fiber.child != null) {
1088
+ topMostFiber = fiber;
1089
+ }
861
1090
  }
862
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
863
- has(_value) {
864
- return false;
1091
+ (0, exports.traverseFiber)(fiber, checkFiber, true);
1092
+ return topMostFiber;
1093
+ };
1094
+ exports.getTopMostFiberWithChild = getTopMostFiberWithChild;
1095
+ const traverseFiber = (fiber, selector, ascending = false) => {
1096
+ if (!fiber) {
1097
+ return null;
865
1098
  }
866
- }
867
- exports.WeakSetNoOp = WeakSetNoOp;
868
- class WeakMapNoOp {
869
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
870
- constructor(_iterable) {
871
- // to be overridden
1099
+ if (selector(fiber) === true) {
1100
+ return fiber;
872
1101
  }
873
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
874
- delete(_key) {
875
- return false;
1102
+ let next = ascending ? fiber.return : fiber.child;
1103
+ while (next) {
1104
+ const match = (0, exports.traverseFiber)(next, selector, ascending);
1105
+ if (match) {
1106
+ return match;
1107
+ }
1108
+ next = ascending ? null : next.sibling;
876
1109
  }
877
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
878
- get(_key) {
879
- return undefined;
1110
+ return null;
1111
+ };
1112
+ exports.traverseFiber = traverseFiber;
1113
+ // React internal property keys
1114
+ const internalKeys = [
1115
+ '__reactFiber$', // React 17+
1116
+ '__reactInternalInstance$', // React 16
1117
+ '_reactRootContainer', // React Root
1118
+ ];
1119
+ const getOwnPropertyNames = Object.getOwnPropertyNames.bind(Object);
1120
+ function getFiberNodeFromElement(element) {
1121
+ for (const prefix of internalKeys) {
1122
+ // Use Object.keys only as fallback since it's slower
1123
+ const key = getOwnPropertyNames(element).find(k => k.startsWith(prefix));
1124
+ if (key) {
1125
+ return element[key];
1126
+ }
880
1127
  }
881
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
882
- has(_key) {
883
- return false;
1128
+ return null;
1129
+ }
1130
+ function getReactComponentStack(node) {
1131
+ const stack = [];
1132
+ const visited = new Set();
1133
+ let fiber = node;
1134
+ while (fiber) {
1135
+ if (visited.has(fiber)) {
1136
+ break;
1137
+ }
1138
+ visited.add(fiber);
1139
+ const name = getDisplayNameOfFiberNode(fiber);
1140
+ if (name) {
1141
+ stack.push(name);
1142
+ }
1143
+ fiber = fiber.return;
884
1144
  }
885
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
886
- set(_key, _value) {
887
- return this;
1145
+ return stack;
1146
+ }
1147
+ function getDisplayNameOfFiberNode(node) {
1148
+ var _a, _b, _c, _d;
1149
+ const elementType = (_a = node.type) !== null && _a !== void 0 ? _a : node.elementType;
1150
+ // Try to get name from displayName or name properties
1151
+ let displayName = (_b = elementType === null || elementType === void 0 ? void 0 : elementType.displayName) !== null && _b !== void 0 ? _b : elementType === null || elementType === void 0 ? void 0 : elementType.name;
1152
+ // Handle class components and forwardRef
1153
+ if (displayName == null) {
1154
+ if (elementType === null || elementType === void 0 ? void 0 : elementType.render) {
1155
+ // Class components
1156
+ const render = elementType === null || elementType === void 0 ? void 0 : elementType.render;
1157
+ displayName = (_c = render === null || render === void 0 ? void 0 : render.displayName) !== null && _c !== void 0 ? _c : render === null || render === void 0 ? void 0 : render.name;
1158
+ }
1159
+ else if (elementType === null || elementType === void 0 ? void 0 : elementType.type) {
1160
+ // ForwardRef components
1161
+ displayName = (_d = elementType.type.displayName) !== null && _d !== void 0 ? _d : elementType.type.name;
1162
+ }
1163
+ }
1164
+ // Handle anonymous functions
1165
+ if (!displayName && typeof elementType === 'function') {
1166
+ displayName = elementType.name;
888
1167
  }
1168
+ const ret = (0, utils_1.getMeaningfulName)(extractReactComponentName(displayName));
1169
+ return (0, valid_component_name_1.isValidComponentName)(ret) ? ret : null;
889
1170
  }
890
- exports.WeakMapNoOp = WeakMapNoOp;
891
- function getNativeWeakMap() {
892
- return _weakMapIsNative ? _weakMap : null;
1171
+ function isFunctionalComponent(node) {
1172
+ const elementType = node === null || node === void 0 ? void 0 : node.elementType;
1173
+ return typeof elementType === 'function';
893
1174
  }
894
- function getNativeWeakMapOrFallback() {
895
- return _weakMapIsNative && _weakMap ? _weakMap : WeakMapNoOp;
896
- }
897
- function getNativeWeakSet() {
898
- return _weakSetIsNative ? _weakSet : null;
899
- }
900
- function getNativeWeakSetOrFallback() {
901
- return _weakSetIsNative && _weakSet ? _weakSet : WeakSetNoOp;
902
- }
903
- function getNativeWeakRef() {
904
- return _weakRefIsNative ? _weakRef : null;
905
- }
906
- function getNativeWeakRefOrFallback() {
907
- return _weakRefIsNative && _weakRef ? _weakRef : WeakRefNoOp;
908
- }
909
- function normalize(input) {
910
- return typeof input.replace === 'function'
911
- ? input.replace(/\n/g, ' ').replace(/\s+/g, ' ')
912
- : null;
913
- }
914
- function isWeakMapNative() {
915
- return (_weakMap !== null &&
916
- typeof _weakMap.toString === 'function' &&
917
- normalize(_weakMap.toString()) === 'function WeakMap() { [native code] }');
918
- }
919
- function isWeakSetNative() {
920
- return (_weakSet !== null &&
921
- typeof _weakSet.toString === 'function' &&
922
- normalize(_weakSet.toString()) === 'function WeakSet() { [native code] }');
923
- }
924
- function isWeakRefNative() {
925
- return (_weakRef !== null &&
926
- typeof _weakRef.toString === 'function' &&
927
- normalize(_weakRef.toString()) === 'function WeakRef() { [native code] }');
928
- }
929
- function isWeakAPINative() {
930
- return _weakAPIsAreNative;
931
- }
932
- class WeakMapPlus {
933
- constructor(options = {}) {
934
- this.strongMap = null;
935
- this.noopMap = false;
936
- this.entriesMap = new Map();
937
- this.keyToId = new WeakMap();
938
- const { fallback = 'strong', cleanupMs = 1000 } = options;
939
- this.isWeak = _weakAPIsAreNative;
940
- this.fallbackMode = fallback;
941
- if (!this.isWeak) {
942
- if (fallback === 'strong') {
943
- this.strongMap = new Map();
944
- }
945
- else if (fallback === 'noop') {
946
- this.noopMap = true;
947
- }
948
- this.cleanupInterval = -1;
949
- }
950
- else {
951
- this.cleanupInterval = setInterval(() => this.cleanup(), cleanupMs);
952
- }
953
- }
954
- getOrCreateId(key) {
955
- let id = this.keyToId.get(key);
956
- if (!id) {
957
- id = Symbol();
958
- this.keyToId.set(key, id);
959
- }
960
- return id;
961
- }
962
- set(key, value) {
963
- var _a;
964
- if (!this.isWeak) {
965
- if (this.noopMap)
966
- return this;
967
- (_a = this.strongMap) === null || _a === void 0 ? void 0 : _a.set(key, value);
968
- return this;
969
- }
970
- const id = this.getOrCreateId(key);
971
- this.entriesMap.set(id, { ref: new WeakRef(key), value });
972
- return this;
973
- }
974
- get(key) {
975
- var _a, _b;
976
- if (!this.isWeak) {
977
- if (this.noopMap)
978
- return undefined;
979
- return (_a = this.strongMap) === null || _a === void 0 ? void 0 : _a.get(key);
980
- }
981
- const id = this.keyToId.get(key);
982
- if (!id)
983
- return undefined;
984
- const entry = this.entriesMap.get(id);
985
- const derefKey = (_b = entry === null || entry === void 0 ? void 0 : entry.ref) === null || _b === void 0 ? void 0 : _b.deref();
986
- return derefKey ? entry === null || entry === void 0 ? void 0 : entry.value : undefined;
987
- }
988
- has(key) {
989
- var _a, _b;
990
- if (!this.isWeak) {
991
- if (this.noopMap)
992
- return false;
993
- return (_b = (_a = this.strongMap) === null || _a === void 0 ? void 0 : _a.has(key)) !== null && _b !== void 0 ? _b : false;
994
- }
995
- const id = this.keyToId.get(key);
996
- if (!id)
997
- return false;
998
- const entry = this.entriesMap.get(id);
999
- return !!(entry && entry.ref.deref());
1000
- }
1001
- delete(key) {
1002
- var _a, _b;
1003
- if (!this.isWeak) {
1004
- if (this.noopMap)
1005
- return false;
1006
- return (_b = (_a = this.strongMap) === null || _a === void 0 ? void 0 : _a.delete(key)) !== null && _b !== void 0 ? _b : false;
1007
- }
1008
- const id = this.keyToId.get(key);
1009
- if (!id)
1010
- return false;
1011
- this.keyToId.delete(key);
1012
- return this.entriesMap.delete(id);
1013
- }
1014
- *liveEntries() {
1015
- for (const [, entry] of this.entriesMap) {
1016
- const key = entry.ref.deref();
1017
- if (key) {
1018
- yield [key, entry.value];
1019
- }
1020
- }
1021
- }
1022
- entries() {
1023
- var _a, _b;
1024
- if (!this.isWeak) {
1025
- if (this.noopMap)
1026
- return [][Symbol.iterator]();
1027
- return (_b = (_a = this.strongMap) === null || _a === void 0 ? void 0 : _a.entries()) !== null && _b !== void 0 ? _b : [][Symbol.iterator]();
1028
- }
1029
- return this.liveEntries();
1030
- }
1031
- keys() {
1032
- return (function* (self) {
1033
- for (const [key] of self.entries())
1034
- yield key;
1035
- })(this);
1036
- }
1037
- values() {
1038
- return (function* (self) {
1039
- for (const [, value] of self.entries())
1040
- yield value;
1041
- })(this);
1042
- }
1043
- [Symbol.iterator]() {
1044
- return this.entries();
1045
- }
1046
- get size() {
1047
- var _a, _b;
1048
- if (!this.isWeak) {
1049
- if (this.noopMap)
1050
- return 0;
1051
- return (_b = (_a = this.strongMap) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : 0;
1052
- }
1053
- let count = 0;
1054
- // eslint-disable-next-line
1055
- for (const _ of this.liveEntries()) {
1056
- count++;
1057
- }
1058
- return count;
1175
+ // dom-element [from component.react] --> component.react
1176
+ function extractReactComponentName(displayName) {
1177
+ if (typeof displayName !== 'string') {
1178
+ return null;
1059
1179
  }
1060
- getFallbackMode() {
1061
- return this.fallbackMode;
1180
+ if (!displayName.includes('[') || !displayName.includes(']')) {
1181
+ return displayName;
1062
1182
  }
1063
- cleanup() {
1064
- if (!this.isWeak)
1065
- return;
1066
- for (const [id, entry] of this.entriesMap) {
1067
- if (!entry.ref.deref()) {
1068
- this.entriesMap.delete(id);
1069
- }
1070
- }
1183
+ const startIndex = displayName.indexOf('[');
1184
+ const endIndex = displayName.indexOf(']');
1185
+ if (startIndex > endIndex) {
1186
+ return displayName;
1071
1187
  }
1072
- destroy() {
1073
- if (this.isWeak) {
1074
- clearInterval(this.cleanupInterval);
1075
- }
1188
+ const name = displayName.substring(startIndex + 1, endIndex);
1189
+ if (name.startsWith('from ')) {
1190
+ return name.substring('from '.length);
1076
1191
  }
1192
+ return name;
1077
1193
  }
1078
- exports.WeakMapPlus = WeakMapPlus;
1079
-
1080
-
1081
- /***/ },
1082
-
1083
- /***/ 346
1084
- (__unused_webpack_module, exports) {
1085
-
1086
-
1087
- /**
1088
- * Copyright (c) Meta Platforms, Inc. and affiliates.
1089
- *
1090
- * This source code is licensed under the MIT license found in the
1091
- * LICENSE file in the root directory of this source tree.
1092
- *
1093
- * @format
1094
- * @oncall memory_lab
1095
- */
1096
- Object.defineProperty(exports, "__esModule", ({ value: true }));
1097
- exports.config = exports.featureFlags = exports.performanceConfig = void 0;
1098
- // Performance Configuration
1099
- exports.performanceConfig = {
1100
- scanIntervalMs: 1000,
1101
- maxComponentStackDepth: 100,
1102
- memoryMeasurementIntervalMs: 5000,
1103
- };
1104
- // Feature Flags
1105
- exports.featureFlags = {
1106
- enableMutationObserver: true,
1107
- enableMemoryTracking: true,
1108
- enableComponentStack: true,
1109
- enableConsoleLogs: window === null || window === void 0 ? void 0 : window.TEST_MEMORY_SCAN,
1110
- };
1111
- // overall Config
1112
- exports.config = {
1113
- performance: exports.performanceConfig,
1114
- features: exports.featureFlags,
1115
- };
1116
1194
 
1117
1195
 
1118
1196
  /***/ },
@@ -1300,423 +1378,350 @@ function setRunInSession() {
1300
1378
 
1301
1379
  /***/ },
1302
1380
 
1303
- /***/ 498
1381
+ /***/ 313
1304
1382
  (__unused_webpack_module, exports) {
1305
1383
 
1384
+ var __webpack_unused_export__;
1306
1385
 
1307
- Object.defineProperty(exports, "__esModule", ({ value: true }));
1308
- exports.isVisualizerElement = isVisualizerElement;
1309
- exports.createVisualizerElement = createVisualizerElement;
1310
- exports.tryToAttachOverlay = tryToAttachOverlay;
1311
- exports.addTrackedListener = addTrackedListener;
1312
- exports.removeAllListeners = removeAllListeners;
1313
- exports.debounce = debounce;
1314
- const VISUALIZER_DATA_ATTR = 'data-visualizer';
1315
- function setVisualizerElement(element) {
1316
- element.setAttribute(VISUALIZER_DATA_ATTR, 'true');
1317
- element.setAttribute('data-visualcompletion', 'ignore');
1318
- }
1319
- function isVisualizerElement(element) {
1320
- return element.getAttribute(VISUALIZER_DATA_ATTR) === 'true';
1321
- }
1322
- function createVisualizerElement(tag) {
1323
- const element = document.createElement(tag);
1324
- setVisualizerElement(element);
1325
- return element;
1326
- }
1327
- function tryToAttachOverlay(overlayDiv) {
1328
- if (document.body) {
1329
- document.body.appendChild(overlayDiv);
1330
- }
1331
- }
1332
- const listenerMap = new WeakMap();
1333
- function addTrackedListener(elRef, type, cb, options) {
1334
- var _a;
1335
- const el = elRef.deref();
1336
- if (!el)
1337
- return;
1338
- el.addEventListener(type, cb, options);
1339
- if (!listenerMap.has(el)) {
1340
- listenerMap.set(el, []);
1386
+ /**
1387
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
1388
+ *
1389
+ * This source code is licensed under the MIT license found in the
1390
+ * LICENSE file in the root directory of this source tree.
1391
+ *
1392
+ * @format
1393
+ * @oncall memory_lab
1394
+ */
1395
+ var _a, _b, _c;
1396
+ __webpack_unused_export__ = ({ value: true });
1397
+ exports.WeakMapPlus = __webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = void 0;
1398
+ __webpack_unused_export__ = getNativeWeakMap;
1399
+ __webpack_unused_export__ = getNativeWeakMapOrFallback;
1400
+ __webpack_unused_export__ = getNativeWeakSet;
1401
+ __webpack_unused_export__ = getNativeWeakSetOrFallback;
1402
+ __webpack_unused_export__ = getNativeWeakRef;
1403
+ __webpack_unused_export__ = getNativeWeakRefOrFallback;
1404
+ __webpack_unused_export__ = isWeakMapNative;
1405
+ __webpack_unused_export__ = isWeakSetNative;
1406
+ __webpack_unused_export__ = isWeakRefNative;
1407
+ exports.isWeakAPINative = isWeakAPINative;
1408
+ const globalScope = typeof window !== 'undefined' ? window : self;
1409
+ const _weakMap = (_a = globalScope.WeakMap) !== null && _a !== void 0 ? _a : null;
1410
+ const _weakMapIsNative = isWeakMapNative();
1411
+ const _weakSet = (_b = globalScope.WeakSet) !== null && _b !== void 0 ? _b : null;
1412
+ const _weakSetIsNative = isWeakSetNative();
1413
+ const _weakRef = (_c = globalScope.WeakRef) !== null && _c !== void 0 ? _c : null;
1414
+ const _weakRefIsNative = isWeakRefNative();
1415
+ const _weakAPIsAreNative = _weakMapIsNative && _weakSetIsNative && _weakRefIsNative;
1416
+ class WeakRefNoOp {
1417
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1418
+ constructor(_targetObject) {
1419
+ // to be overridden
1341
1420
  }
1342
- (_a = listenerMap.get(el)) === null || _a === void 0 ? void 0 : _a.push({ type, cb, options });
1343
- }
1344
- function removeAllListeners(elRef) {
1345
- const el = elRef.deref();
1346
- if (!el)
1347
- return;
1348
- const listeners = listenerMap.get(el);
1349
- if (!listeners)
1350
- return;
1351
- for (const { type, cb, options } of listeners) {
1352
- el.removeEventListener(type, cb, options);
1421
+ deref() {
1422
+ return undefined;
1353
1423
  }
1354
- listenerMap.delete(el);
1355
1424
  }
1356
- function debounce(callback, delay) {
1357
- let timer = null;
1358
- return (...args) => {
1359
- if (timer) {
1360
- clearTimeout(timer);
1361
- }
1362
- timer = setTimeout(() => {
1363
- callback(...args);
1364
- }, delay);
1365
- };
1425
+ __webpack_unused_export__ = WeakRefNoOp;
1426
+ class WeakSetNoOp {
1427
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1428
+ constructor(_iterable) {
1429
+ // to be overridden
1430
+ }
1431
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1432
+ add(_value) {
1433
+ return this;
1434
+ }
1435
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1436
+ delete(_value) {
1437
+ return false;
1438
+ }
1439
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1440
+ has(_value) {
1441
+ return false;
1442
+ }
1366
1443
  }
1367
-
1368
-
1369
- /***/ },
1370
-
1371
- /***/ 737
1372
- (__unused_webpack_module, exports, __webpack_require__) {
1373
-
1374
-
1375
- Object.defineProperty(exports, "__esModule", ({ value: true }));
1376
- exports.traverseFiber = exports.getTopMostFiberWithChild = exports.getTopMostHostFiber = exports.getNearestHostFiber = exports.isHostFiber = exports.MutationMask = exports.Visibility = exports.Snapshot = exports.Ref = exports.ContentReset = exports.ChildDeletion = exports.Cloned = exports.Update = exports.Hydrating = exports.DidCapture = exports.Placement = exports.PerformedWork = exports.DEPRECATED_ASYNC_MODE_SYMBOL_STRING = exports.CONCURRENT_MODE_SYMBOL_STRING = exports.CONCURRENT_MODE_NUMBER = exports.HostRoot = exports.OffscreenComponent = exports.LegacyHiddenComponent = exports.Fragment = exports.HostText = exports.DehydratedSuspenseComponent = exports.HostSingletonTag = exports.HostHoistableTag = exports.HostComponentTag = exports.SimpleMemoComponentTag = exports.MemoComponentTag = exports.ForwardRefTag = exports.OffscreenComponentTag = exports.SuspenseComponentTag = exports.ContextConsumerTag = exports.FunctionComponentTag = exports.ClassComponentTag = void 0;
1377
- exports.getFiberNodeFromElement = getFiberNodeFromElement;
1378
- exports.getReactComponentStack = getReactComponentStack;
1379
- exports.getDisplayNameOfFiberNode = getDisplayNameOfFiberNode;
1380
- exports.isFunctionalComponent = isFunctionalComponent;
1381
- exports.extractReactComponentName = extractReactComponentName;
1382
- const utils_1 = __webpack_require__(476);
1383
- const valid_component_name_1 = __webpack_require__(847);
1384
- exports.ClassComponentTag = 1;
1385
- exports.FunctionComponentTag = 0;
1386
- exports.ContextConsumerTag = 9;
1387
- exports.SuspenseComponentTag = 13;
1388
- exports.OffscreenComponentTag = 22;
1389
- exports.ForwardRefTag = 11;
1390
- exports.MemoComponentTag = 14;
1391
- exports.SimpleMemoComponentTag = 15;
1392
- exports.HostComponentTag = 5;
1393
- exports.HostHoistableTag = 26;
1394
- exports.HostSingletonTag = 27;
1395
- exports.DehydratedSuspenseComponent = 18;
1396
- exports.HostText = 6;
1397
- exports.Fragment = 7;
1398
- exports.LegacyHiddenComponent = 23;
1399
- exports.OffscreenComponent = 22;
1400
- exports.HostRoot = 3;
1401
- exports.CONCURRENT_MODE_NUMBER = 0xeacf;
1402
- exports.CONCURRENT_MODE_SYMBOL_STRING = 'Symbol(react.concurrent_mode)';
1403
- exports.DEPRECATED_ASYNC_MODE_SYMBOL_STRING = 'Symbol(react.async_mode)';
1404
- // https://github.com/facebook/react/blob/main/packages/react-reconciler/src/ReactFiberFlags.js
1405
- exports.PerformedWork = 0b1;
1406
- exports.Placement = 0b10;
1407
- exports.DidCapture = 0b10000000;
1408
- exports.Hydrating = 0b1000000000000;
1409
- exports.Update = 0b100;
1410
- exports.Cloned = 0b1000;
1411
- exports.ChildDeletion = 0b10000;
1412
- exports.ContentReset = 0b100000;
1413
- exports.Ref = 0b1000000000;
1414
- exports.Snapshot = 0b10000000000;
1415
- exports.Visibility = 0b10000000000000;
1416
- exports.MutationMask = exports.Placement |
1417
- exports.Update |
1418
- exports.ChildDeletion |
1419
- exports.ContentReset |
1420
- exports.Hydrating |
1421
- exports.Visibility |
1422
- exports.Snapshot;
1423
- /**
1424
- * @see https://reactnative.dev/architecture/glossary#host-view-tree-and-host-view
1425
- */
1426
- const isHostFiber = (fiber) => fiber.tag === exports.HostComponentTag ||
1427
- // @ts-expect-error: it exists
1428
- fiber.tag === exports.HostHoistableTag ||
1429
- // @ts-expect-error: it exists
1430
- fiber.tag === exports.HostSingletonTag ||
1431
- typeof fiber.type === 'string';
1432
- exports.isHostFiber = isHostFiber;
1433
- const getNearestHostFiber = (fiber) => {
1434
- let hostFiber = (0, exports.traverseFiber)(fiber, exports.isHostFiber);
1435
- if (!hostFiber) {
1436
- hostFiber = (0, exports.traverseFiber)(fiber, exports.isHostFiber, true);
1444
+ __webpack_unused_export__ = WeakSetNoOp;
1445
+ class WeakMapNoOp {
1446
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1447
+ constructor(_iterable) {
1448
+ // to be overridden
1437
1449
  }
1438
- return hostFiber;
1439
- };
1440
- exports.getNearestHostFiber = getNearestHostFiber;
1441
- const getTopMostHostFiber = (fiber) => {
1442
- let topMostHostFiber = null;
1443
- function checkFiber(fiber) {
1444
- if ((0, exports.isHostFiber)(fiber)) {
1445
- topMostHostFiber = fiber;
1446
- }
1450
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1451
+ delete(_key) {
1452
+ return false;
1447
1453
  }
1448
- (0, exports.traverseFiber)(fiber, checkFiber, true);
1449
- return topMostHostFiber;
1450
- };
1451
- exports.getTopMostHostFiber = getTopMostHostFiber;
1452
- const getTopMostFiberWithChild = (fiber) => {
1453
- let topMostFiber = null;
1454
- function checkFiber(fiber) {
1455
- if (fiber.child != null) {
1456
- topMostFiber = fiber;
1457
- }
1454
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1455
+ get(_key) {
1456
+ return undefined;
1458
1457
  }
1459
- (0, exports.traverseFiber)(fiber, checkFiber, true);
1460
- return topMostFiber;
1461
- };
1462
- exports.getTopMostFiberWithChild = getTopMostFiberWithChild;
1463
- const traverseFiber = (fiber, selector, ascending = false) => {
1464
- if (!fiber) {
1465
- return null;
1458
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1459
+ has(_key) {
1460
+ return false;
1466
1461
  }
1467
- if (selector(fiber) === true) {
1468
- return fiber;
1462
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1463
+ set(_key, _value) {
1464
+ return this;
1469
1465
  }
1470
- let next = ascending ? fiber.return : fiber.child;
1471
- while (next) {
1472
- const match = (0, exports.traverseFiber)(next, selector, ascending);
1473
- if (match) {
1474
- return match;
1466
+ }
1467
+ __webpack_unused_export__ = WeakMapNoOp;
1468
+ function getNativeWeakMap() {
1469
+ return _weakMapIsNative ? _weakMap : null;
1470
+ }
1471
+ function getNativeWeakMapOrFallback() {
1472
+ return _weakMapIsNative && _weakMap ? _weakMap : WeakMapNoOp;
1473
+ }
1474
+ function getNativeWeakSet() {
1475
+ return _weakSetIsNative ? _weakSet : null;
1476
+ }
1477
+ function getNativeWeakSetOrFallback() {
1478
+ return _weakSetIsNative && _weakSet ? _weakSet : WeakSetNoOp;
1479
+ }
1480
+ function getNativeWeakRef() {
1481
+ return _weakRefIsNative ? _weakRef : null;
1482
+ }
1483
+ function getNativeWeakRefOrFallback() {
1484
+ return _weakRefIsNative && _weakRef ? _weakRef : WeakRefNoOp;
1485
+ }
1486
+ function normalize(input) {
1487
+ return typeof input.replace === 'function'
1488
+ ? input.replace(/\n/g, ' ').replace(/\s+/g, ' ')
1489
+ : null;
1490
+ }
1491
+ function isWeakMapNative() {
1492
+ return (_weakMap !== null &&
1493
+ typeof _weakMap.toString === 'function' &&
1494
+ normalize(_weakMap.toString()) === 'function WeakMap() { [native code] }');
1495
+ }
1496
+ function isWeakSetNative() {
1497
+ return (_weakSet !== null &&
1498
+ typeof _weakSet.toString === 'function' &&
1499
+ normalize(_weakSet.toString()) === 'function WeakSet() { [native code] }');
1500
+ }
1501
+ function isWeakRefNative() {
1502
+ return (_weakRef !== null &&
1503
+ typeof _weakRef.toString === 'function' &&
1504
+ normalize(_weakRef.toString()) === 'function WeakRef() { [native code] }');
1505
+ }
1506
+ function isWeakAPINative() {
1507
+ return _weakAPIsAreNative;
1508
+ }
1509
+ class WeakMapPlus {
1510
+ constructor(options = {}) {
1511
+ this.strongMap = null;
1512
+ this.noopMap = false;
1513
+ this.entriesMap = new Map();
1514
+ this.keyToId = new WeakMap();
1515
+ const { fallback = 'strong', cleanupMs = 1000 } = options;
1516
+ this.isWeak = _weakAPIsAreNative;
1517
+ this.fallbackMode = fallback;
1518
+ if (!this.isWeak) {
1519
+ if (fallback === 'strong') {
1520
+ this.strongMap = new Map();
1521
+ }
1522
+ else if (fallback === 'noop') {
1523
+ this.noopMap = true;
1524
+ }
1525
+ this.cleanupInterval = -1;
1526
+ }
1527
+ else {
1528
+ this.cleanupInterval = setInterval(() => this.cleanup(), cleanupMs);
1475
1529
  }
1476
- next = ascending ? null : next.sibling;
1477
1530
  }
1478
- return null;
1479
- };
1480
- exports.traverseFiber = traverseFiber;
1481
- // React internal property keys
1482
- const internalKeys = [
1483
- '__reactFiber$', // React 17+
1484
- '__reactInternalInstance$', // React 16
1485
- '_reactRootContainer', // React Root
1486
- ];
1487
- const getOwnPropertyNames = Object.getOwnPropertyNames.bind(Object);
1488
- function getFiberNodeFromElement(element) {
1489
- for (const prefix of internalKeys) {
1490
- // Use Object.keys only as fallback since it's slower
1491
- const key = getOwnPropertyNames(element).find(k => k.startsWith(prefix));
1492
- if (key) {
1493
- return element[key];
1531
+ getOrCreateId(key) {
1532
+ let id = this.keyToId.get(key);
1533
+ if (!id) {
1534
+ id = Symbol();
1535
+ this.keyToId.set(key, id);
1494
1536
  }
1537
+ return id;
1495
1538
  }
1496
- return null;
1497
- }
1498
- function getReactComponentStack(node) {
1499
- const stack = [];
1500
- const visited = new Set();
1501
- let fiber = node;
1502
- while (fiber) {
1503
- if (visited.has(fiber)) {
1504
- break;
1539
+ set(key, value) {
1540
+ var _a;
1541
+ if (!this.isWeak) {
1542
+ if (this.noopMap)
1543
+ return this;
1544
+ (_a = this.strongMap) === null || _a === void 0 ? void 0 : _a.set(key, value);
1545
+ return this;
1505
1546
  }
1506
- visited.add(fiber);
1507
- const name = getDisplayNameOfFiberNode(fiber);
1508
- if (name) {
1509
- stack.push(name);
1547
+ const id = this.getOrCreateId(key);
1548
+ this.entriesMap.set(id, { ref: new WeakRef(key), value });
1549
+ return this;
1550
+ }
1551
+ get(key) {
1552
+ var _a, _b;
1553
+ if (!this.isWeak) {
1554
+ if (this.noopMap)
1555
+ return undefined;
1556
+ return (_a = this.strongMap) === null || _a === void 0 ? void 0 : _a.get(key);
1510
1557
  }
1511
- fiber = fiber.return;
1558
+ const id = this.keyToId.get(key);
1559
+ if (!id)
1560
+ return undefined;
1561
+ const entry = this.entriesMap.get(id);
1562
+ const derefKey = (_b = entry === null || entry === void 0 ? void 0 : entry.ref) === null || _b === void 0 ? void 0 : _b.deref();
1563
+ return derefKey ? entry === null || entry === void 0 ? void 0 : entry.value : undefined;
1512
1564
  }
1513
- return stack;
1514
- }
1515
- function getDisplayNameOfFiberNode(node) {
1516
- var _a, _b, _c, _d;
1517
- const elementType = (_a = node.type) !== null && _a !== void 0 ? _a : node.elementType;
1518
- // Try to get name from displayName or name properties
1519
- let displayName = (_b = elementType === null || elementType === void 0 ? void 0 : elementType.displayName) !== null && _b !== void 0 ? _b : elementType === null || elementType === void 0 ? void 0 : elementType.name;
1520
- // Handle class components and forwardRef
1521
- if (displayName == null) {
1522
- if (elementType === null || elementType === void 0 ? void 0 : elementType.render) {
1523
- // Class components
1524
- const render = elementType === null || elementType === void 0 ? void 0 : elementType.render;
1525
- displayName = (_c = render === null || render === void 0 ? void 0 : render.displayName) !== null && _c !== void 0 ? _c : render === null || render === void 0 ? void 0 : render.name;
1565
+ has(key) {
1566
+ var _a, _b;
1567
+ if (!this.isWeak) {
1568
+ if (this.noopMap)
1569
+ return false;
1570
+ return (_b = (_a = this.strongMap) === null || _a === void 0 ? void 0 : _a.has(key)) !== null && _b !== void 0 ? _b : false;
1526
1571
  }
1527
- else if (elementType === null || elementType === void 0 ? void 0 : elementType.type) {
1528
- // ForwardRef components
1529
- displayName = (_d = elementType.type.displayName) !== null && _d !== void 0 ? _d : elementType.type.name;
1572
+ const id = this.keyToId.get(key);
1573
+ if (!id)
1574
+ return false;
1575
+ const entry = this.entriesMap.get(id);
1576
+ return !!(entry && entry.ref.deref());
1577
+ }
1578
+ delete(key) {
1579
+ var _a, _b;
1580
+ if (!this.isWeak) {
1581
+ if (this.noopMap)
1582
+ return false;
1583
+ return (_b = (_a = this.strongMap) === null || _a === void 0 ? void 0 : _a.delete(key)) !== null && _b !== void 0 ? _b : false;
1584
+ }
1585
+ const id = this.keyToId.get(key);
1586
+ if (!id)
1587
+ return false;
1588
+ this.keyToId.delete(key);
1589
+ return this.entriesMap.delete(id);
1590
+ }
1591
+ *liveEntries() {
1592
+ for (const [, entry] of this.entriesMap) {
1593
+ const key = entry.ref.deref();
1594
+ if (key) {
1595
+ yield [key, entry.value];
1596
+ }
1530
1597
  }
1531
1598
  }
1532
- // Handle anonymous functions
1533
- if (!displayName && typeof elementType === 'function') {
1534
- displayName = elementType.name;
1599
+ entries() {
1600
+ var _a, _b;
1601
+ if (!this.isWeak) {
1602
+ if (this.noopMap)
1603
+ return [][Symbol.iterator]();
1604
+ return (_b = (_a = this.strongMap) === null || _a === void 0 ? void 0 : _a.entries()) !== null && _b !== void 0 ? _b : [][Symbol.iterator]();
1605
+ }
1606
+ return this.liveEntries();
1607
+ }
1608
+ keys() {
1609
+ return (function* (self) {
1610
+ for (const [key] of self.entries())
1611
+ yield key;
1612
+ })(this);
1535
1613
  }
1536
- const ret = (0, utils_1.getMeaningfulName)(extractReactComponentName(displayName));
1537
- return (0, valid_component_name_1.isValidComponentName)(ret) ? ret : null;
1538
- }
1539
- function isFunctionalComponent(node) {
1540
- const elementType = node === null || node === void 0 ? void 0 : node.elementType;
1541
- return typeof elementType === 'function';
1542
- }
1543
- // dom-element [from component.react] --> component.react
1544
- function extractReactComponentName(displayName) {
1545
- if (typeof displayName !== 'string') {
1546
- return null;
1614
+ values() {
1615
+ return (function* (self) {
1616
+ for (const [, value] of self.entries())
1617
+ yield value;
1618
+ })(this);
1547
1619
  }
1548
- if (!displayName.includes('[') || !displayName.includes(']')) {
1549
- return displayName;
1620
+ [Symbol.iterator]() {
1621
+ return this.entries();
1550
1622
  }
1551
- const startIndex = displayName.indexOf('[');
1552
- const endIndex = displayName.indexOf(']');
1553
- if (startIndex > endIndex) {
1554
- return displayName;
1623
+ get size() {
1624
+ var _a, _b;
1625
+ if (!this.isWeak) {
1626
+ if (this.noopMap)
1627
+ return 0;
1628
+ return (_b = (_a = this.strongMap) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : 0;
1629
+ }
1630
+ let count = 0;
1631
+ // eslint-disable-next-line
1632
+ for (const _ of this.liveEntries()) {
1633
+ count++;
1634
+ }
1635
+ return count;
1555
1636
  }
1556
- const name = displayName.substring(startIndex + 1, endIndex);
1557
- if (name.startsWith('from ')) {
1558
- return name.substring('from '.length);
1637
+ getFallbackMode() {
1638
+ return this.fallbackMode;
1639
+ }
1640
+ cleanup() {
1641
+ if (!this.isWeak)
1642
+ return;
1643
+ for (const [id, entry] of this.entriesMap) {
1644
+ if (!entry.ref.deref()) {
1645
+ this.entriesMap.delete(id);
1646
+ }
1647
+ }
1648
+ }
1649
+ destroy() {
1650
+ if (this.isWeak) {
1651
+ clearInterval(this.cleanupInterval);
1652
+ }
1559
1653
  }
1560
- return name;
1561
1654
  }
1655
+ exports.WeakMapPlus = WeakMapPlus;
1562
1656
 
1563
1657
 
1564
1658
  /***/ },
1565
1659
 
1566
- /***/ 847
1660
+ /***/ 498
1567
1661
  (__unused_webpack_module, exports) {
1568
1662
 
1663
+ var __webpack_unused_export__;
1569
1664
 
1570
- /**
1571
- * Copyright (c) Meta Platforms, Inc. and affiliates.
1572
- *
1573
- * This source code is licensed under the MIT license found in the
1574
- * LICENSE file in the root directory of this source tree.
1575
- *
1576
- * @format
1577
- * @oncall memory_lab
1578
- */
1579
- Object.defineProperty(exports, "__esModule", ({ value: true }));
1580
- exports.isValidComponentName = isValidComponentName;
1581
- const displayNameBlockList = new Set();
1582
- function isValidComponentName(name) {
1583
- return name != null && !displayNameBlockList.has(name);
1665
+ __webpack_unused_export__ = ({ value: true });
1666
+ exports.isVisualizerElement = isVisualizerElement;
1667
+ __webpack_unused_export__ = createVisualizerElement;
1668
+ __webpack_unused_export__ = tryToAttachOverlay;
1669
+ __webpack_unused_export__ = addTrackedListener;
1670
+ __webpack_unused_export__ = removeAllListeners;
1671
+ __webpack_unused_export__ = debounce;
1672
+ const VISUALIZER_DATA_ATTR = 'data-visualizer';
1673
+ function setVisualizerElement(element) {
1674
+ element.setAttribute(VISUALIZER_DATA_ATTR, 'true');
1675
+ element.setAttribute('data-visualcompletion', 'ignore');
1584
1676
  }
1585
-
1586
-
1587
- /***/ },
1588
-
1589
- /***/ 953
1590
- (__unused_webpack_module, exports, __webpack_require__) {
1591
-
1592
-
1593
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
1594
- if (kind === "m") throw new TypeError("Private method is not writable");
1595
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
1596
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
1597
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
1598
- };
1599
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
1600
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
1601
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
1602
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
1603
- };
1604
- var _EventListenerTracker_instances, _EventListenerTracker_listenerMap, _EventListenerTracker_detachedListeners, _EventListenerTracker_originalAddEventListener, _EventListenerTracker_originalRemoveEventListener, _EventListenerTracker_patchEventListeners, _EventListenerTracker_unpatchEventListeners;
1605
- Object.defineProperty(exports, "__esModule", ({ value: true }));
1606
- exports.EventListenerTracker = void 0;
1607
- const react_fiber_utils_1 = __webpack_require__(737);
1608
- const weak_ref_utils_1 = __webpack_require__(313);
1609
- class EventListenerTracker {
1610
- constructor() {
1611
- _EventListenerTracker_instances.add(this);
1612
- _EventListenerTracker_listenerMap.set(this, void 0);
1613
- _EventListenerTracker_detachedListeners.set(this, void 0);
1614
- _EventListenerTracker_originalAddEventListener.set(this, void 0);
1615
- _EventListenerTracker_originalRemoveEventListener.set(this, void 0);
1616
- __classPrivateFieldSet(this, _EventListenerTracker_listenerMap, new weak_ref_utils_1.WeakMapPlus({ fallback: 'noop', cleanupMs: 100 }), "f");
1617
- __classPrivateFieldSet(this, _EventListenerTracker_detachedListeners, new Map(), "f");
1618
- __classPrivateFieldSet(this, _EventListenerTracker_originalAddEventListener, EventTarget.prototype.addEventListener, "f");
1619
- __classPrivateFieldSet(this, _EventListenerTracker_originalRemoveEventListener, EventTarget.prototype.removeEventListener, "f");
1620
- __classPrivateFieldGet(this, _EventListenerTracker_instances, "m", _EventListenerTracker_patchEventListeners).call(this);
1621
- }
1622
- static getInstance() {
1623
- if (!EventListenerTracker.instance) {
1624
- EventListenerTracker.instance = new EventListenerTracker();
1625
- }
1626
- return EventListenerTracker.instance;
1677
+ function isVisualizerElement(element) {
1678
+ return element.getAttribute(VISUALIZER_DATA_ATTR) === 'true';
1679
+ }
1680
+ function createVisualizerElement(tag) {
1681
+ const element = document.createElement(tag);
1682
+ setVisualizerElement(element);
1683
+ return element;
1684
+ }
1685
+ function tryToAttachOverlay(overlayDiv) {
1686
+ if (document.body) {
1687
+ document.body.appendChild(overlayDiv);
1627
1688
  }
1628
- addListener(el, type, cb, options) {
1629
- el.addEventListener(type, cb, options);
1689
+ }
1690
+ const listenerMap = new WeakMap();
1691
+ function addTrackedListener(elRef, type, cb, options) {
1692
+ var _a;
1693
+ const el = elRef.deref();
1694
+ if (!el)
1695
+ return;
1696
+ el.addEventListener(type, cb, options);
1697
+ if (!listenerMap.has(el)) {
1698
+ listenerMap.set(el, []);
1630
1699
  }
1631
- removeListener(el, type, cb, options) {
1700
+ (_a = listenerMap.get(el)) === null || _a === void 0 ? void 0 : _a.push({ type, cb, options });
1701
+ }
1702
+ function removeAllListeners(elRef) {
1703
+ const el = elRef.deref();
1704
+ if (!el)
1705
+ return;
1706
+ const listeners = listenerMap.get(el);
1707
+ if (!listeners)
1708
+ return;
1709
+ for (const { type, cb, options } of listeners) {
1632
1710
  el.removeEventListener(type, cb, options);
1633
1711
  }
1634
- scan(getComponentName) {
1635
- const detachedListeners = new Map();
1636
- for (const [el, listeners] of __classPrivateFieldGet(this, _EventListenerTracker_listenerMap, "f").entries()) {
1637
- if (el instanceof Element && !el.isConnected) {
1638
- for (const listener of listeners) {
1639
- // Skip if the callback has been garbage collected
1640
- if (!listener.cb.deref())
1641
- continue;
1642
- const componentName = getComponentName(new WeakRef(el));
1643
- if (!detachedListeners.has(componentName)) {
1644
- detachedListeners.set(componentName, []);
1645
- }
1646
- const groups = detachedListeners.get(componentName);
1647
- let group = groups === null || groups === void 0 ? void 0 : groups.find(g => g.type === listener.type);
1648
- if (!group) {
1649
- group = {
1650
- type: listener.type,
1651
- count: 0,
1652
- entries: [],
1653
- };
1654
- groups === null || groups === void 0 ? void 0 : groups.push(group);
1655
- }
1656
- group.count++;
1657
- group.entries.push(new WeakRef(listener));
1658
- }
1659
- }
1660
- }
1661
- __classPrivateFieldSet(this, _EventListenerTracker_detachedListeners, detachedListeners, "f");
1662
- return detachedListeners;
1663
- }
1664
- getDetachedListeners() {
1665
- return __classPrivateFieldGet(this, _EventListenerTracker_detachedListeners, "f");
1666
- }
1667
- destroy() {
1668
- __classPrivateFieldGet(this, _EventListenerTracker_instances, "m", _EventListenerTracker_unpatchEventListeners).call(this);
1669
- __classPrivateFieldGet(this, _EventListenerTracker_listenerMap, "f").destroy();
1670
- __classPrivateFieldGet(this, _EventListenerTracker_detachedListeners, "f").clear();
1671
- EventListenerTracker.instance = null;
1672
- }
1712
+ listenerMap.delete(el);
1673
1713
  }
1674
- exports.EventListenerTracker = EventListenerTracker;
1675
- _EventListenerTracker_listenerMap = new WeakMap(), _EventListenerTracker_detachedListeners = new WeakMap(), _EventListenerTracker_originalAddEventListener = new WeakMap(), _EventListenerTracker_originalRemoveEventListener = new WeakMap(), _EventListenerTracker_instances = new WeakSet(), _EventListenerTracker_patchEventListeners = function _EventListenerTracker_patchEventListeners() {
1676
- // eslint-disable-next-line @typescript-eslint/no-this-alias
1677
- const self = this;
1678
- EventTarget.prototype.addEventListener = function (type, listener, options) {
1679
- var _a;
1680
- __classPrivateFieldGet(self, _EventListenerTracker_originalAddEventListener, "f").call(this, type, listener, options);
1681
- if (this instanceof Element) {
1682
- const fiber = (0, react_fiber_utils_1.getFiberNodeFromElement)(this);
1683
- const entry = {
1684
- type,
1685
- cb: new WeakRef(listener),
1686
- options,
1687
- fiber: fiber ? new WeakRef(fiber) : undefined,
1688
- };
1689
- const listeners = (_a = __classPrivateFieldGet(self, _EventListenerTracker_listenerMap, "f").get(this)) !== null && _a !== void 0 ? _a : [];
1690
- listeners.push(entry);
1691
- __classPrivateFieldGet(self, _EventListenerTracker_listenerMap, "f").set(this, listeners);
1692
- }
1693
- };
1694
- EventTarget.prototype.removeEventListener = function (type, listener, options) {
1695
- __classPrivateFieldGet(self, _EventListenerTracker_originalRemoveEventListener, "f").call(this, type, listener, options);
1696
- if (this instanceof Element) {
1697
- const listeners = __classPrivateFieldGet(self, _EventListenerTracker_listenerMap, "f").get(this);
1698
- if (listeners) {
1699
- const index = listeners.findIndex(entry => entry.type === type &&
1700
- entry.cb.deref() === listener &&
1701
- entry.options === options);
1702
- if (index !== -1) {
1703
- listeners.splice(index, 1);
1704
- }
1705
- if (listeners.length === 0) {
1706
- __classPrivateFieldGet(self, _EventListenerTracker_listenerMap, "f").delete(this);
1707
- }
1708
- else {
1709
- __classPrivateFieldGet(self, _EventListenerTracker_listenerMap, "f").set(this, listeners);
1710
- }
1711
- }
1714
+ function debounce(callback, delay) {
1715
+ let timer = null;
1716
+ return (...args) => {
1717
+ if (timer) {
1718
+ clearTimeout(timer);
1712
1719
  }
1720
+ timer = setTimeout(() => {
1721
+ callback(...args);
1722
+ }, delay);
1713
1723
  };
1714
- }, _EventListenerTracker_unpatchEventListeners = function _EventListenerTracker_unpatchEventListeners() {
1715
- EventTarget.prototype.addEventListener = __classPrivateFieldGet(this, _EventListenerTracker_originalAddEventListener, "f");
1716
- EventTarget.prototype.removeEventListener =
1717
- __classPrivateFieldGet(this, _EventListenerTracker_originalRemoveEventListener, "f");
1718
- };
1719
- EventListenerTracker.instance = null;
1724
+ }
1720
1725
 
1721
1726
 
1722
1727
  /***/ }