@memlab/lens 2.0.2 → 2.0.3

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