bippy 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +133 -120
- package/dist/core.cjs +45 -42
- package/dist/core.d.cts +23 -12
- package/dist/core.d.ts +23 -12
- package/dist/core.js +44 -43
- package/dist/extract/index.cjs +1019 -0
- package/dist/extract/index.d.cts +42 -0
- package/dist/extract/index.d.ts +42 -0
- package/dist/extract/index.global.js +9 -0
- package/dist/extract/index.js +1013 -0
- package/dist/index.cjs +45 -42
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.global.js +1 -1
- package/dist/index.js +44 -43
- package/dist/scan/index.cjs +31 -39
- package/dist/scan/index.d.cts +1 -1
- package/dist/scan/index.d.ts +1 -1
- package/dist/scan/index.global.js +1 -1
- package/dist/scan/index.js +31 -39
- package/dist/{types-CxxtX49h.d.cts → types-BqcvCznx.d.cts} +1 -1
- package/dist/{types-CxxtX49h.d.ts → types-BqcvCznx.d.ts} +1 -1
- package/package.json +4 -5
package/README.md
CHANGED
|
@@ -18,15 +18,13 @@ by default, you cannot access react internals. bippy bypasses this by "pretendin
|
|
|
18
18
|
- no prior react source code knowledge required
|
|
19
19
|
|
|
20
20
|
```jsx
|
|
21
|
-
import {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
});
|
|
29
|
-
},
|
|
21
|
+
import { onCommitFiberRoot, traverseFiber } from 'bippy';
|
|
22
|
+
|
|
23
|
+
onCommitFiberRoot((root) => {
|
|
24
|
+
traverseFiber(root.current, (fiber) => {
|
|
25
|
+
// prints every fiber in the current React tree
|
|
26
|
+
console.log('fiber:', fiber);
|
|
27
|
+
});
|
|
30
28
|
});
|
|
31
29
|
```
|
|
32
30
|
|
|
@@ -87,7 +85,7 @@ additionally, `memoizedProps`, `memoizedState`, and `dependencies` are the fiber
|
|
|
87
85
|
|
|
88
86
|
while all of the information is there, it's not super easy to work with, and changes frequently across different versions of react. bippy simplifies this by providing utility functions like:
|
|
89
87
|
|
|
90
|
-
- `
|
|
88
|
+
- `traverseRenderedFibers` to detect renders and `traverseFiber` to traverse the overall fiber tree
|
|
91
89
|
- _(instead of `child`, `sibling`, and `return` pointers)_
|
|
92
90
|
- `traverseProps`, `traverseState`, and `traverseContexts` to traverse the fiber's props, state, and contexts
|
|
93
91
|
- _(instead of `memoizedProps`, `memoizedState`, and `dependencies`)_
|
|
@@ -125,7 +123,7 @@ bippy works by monkey-patching `window.__REACT_DEVTOOLS_GLOBAL_HOOK__` with our
|
|
|
125
123
|
- _(instead of directly mutating `onCommitFiberRoot`, ...)_
|
|
126
124
|
- `secure` to wrap your handlers in a try/catch and determine if handlers are safe to run
|
|
127
125
|
- _(instead of rawdogging `window.__REACT_DEVTOOLS_GLOBAL_HOOK__` handlers, which may crash your app)_
|
|
128
|
-
- `
|
|
126
|
+
- `traverseRenderedFibers` to traverse the fiber tree and determine which fibers have actually rendered
|
|
129
127
|
- _(instead of `child`, `sibling`, and `return` pointers)_
|
|
130
128
|
- `traverseFiber` to traverse the fiber tree, regardless of whether it has rendered
|
|
131
129
|
- _(instead of `child`, `sibling`, and `return` pointers)_
|
|
@@ -142,7 +140,7 @@ this package should be imported before a React app runs. this will add a special
|
|
|
142
140
|
npm install bippy
|
|
143
141
|
```
|
|
144
142
|
|
|
145
|
-
or, use via script tag
|
|
143
|
+
or, use via script tag:
|
|
146
144
|
|
|
147
145
|
```html
|
|
148
146
|
<script src="https://unpkg.com/bippy"></script>
|
|
@@ -152,8 +150,23 @@ or, use via script tag. must be added before any other scripts run:
|
|
|
152
150
|
|
|
153
151
|
next, you can use the api to get data about the fiber tree. below is a (useful) subset of the api. for the full api, read the [source code](https://github.com/aidenybai/bippy/blob/main/src/core.ts).
|
|
154
152
|
|
|
153
|
+
|
|
154
|
+
### onCommitFiberRoot
|
|
155
|
+
|
|
156
|
+
a utility function that wraps the `instrument` function and sets the `onCommitFiberRoot` hook.
|
|
157
|
+
|
|
158
|
+
```typescript
|
|
159
|
+
import { onCommitFiberRoot } from 'bippy';
|
|
160
|
+
|
|
161
|
+
onCommitFiberRoot((root) => {
|
|
162
|
+
console.log('root ready to commit', root);
|
|
163
|
+
});
|
|
164
|
+
```
|
|
165
|
+
|
|
155
166
|
### instrument
|
|
156
167
|
|
|
168
|
+
> the underlying implementation for the `onCommitFiberRoot()` function. this is optional, unless you want to plug into more less common, advanced functionality.
|
|
169
|
+
|
|
157
170
|
patches `window.__REACT_DEVTOOLS_GLOBAL_HOOK__` with your handlers. must be imported before react, and must be initialized to properly run any other methods.
|
|
158
171
|
|
|
159
172
|
> use with the `secure` function to prevent uncaught errors from crashing your app.
|
|
@@ -177,24 +190,31 @@ instrument(
|
|
|
177
190
|
);
|
|
178
191
|
```
|
|
179
192
|
|
|
180
|
-
###
|
|
193
|
+
### getRDTHook
|
|
181
194
|
|
|
182
|
-
|
|
195
|
+
returns the `window.__REACT_DEVTOOLS_GLOBAL_HOOK__` object. great for advanced use cases, such as accessing or modifying the `renderers` property.
|
|
183
196
|
|
|
184
197
|
```typescript
|
|
185
|
-
import {
|
|
186
|
-
import * as React from 'react';
|
|
198
|
+
import { getRDTHook } from 'bippy';
|
|
187
199
|
|
|
188
|
-
const
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
200
|
+
const hook = getRDTHook();
|
|
201
|
+
console.log(hook);
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### traverseRenderedFibers
|
|
205
|
+
|
|
206
|
+
not every fiber in the fiber tree renders. `traverseRenderedFibers` allows you to traverse the fiber tree and determine which fibers have actually rendered.
|
|
207
|
+
|
|
208
|
+
```typescript
|
|
209
|
+
import { instrument, secure, traverseRenderedFibers } from 'bippy'; // must be imported BEFORE react
|
|
210
|
+
import * as React from 'react';
|
|
193
211
|
|
|
194
212
|
instrument(
|
|
195
213
|
secure({
|
|
196
214
|
onCommitFiberRoot(rendererID, root) {
|
|
197
|
-
|
|
215
|
+
traverseRenderedFibers(root, (fiber) => {
|
|
216
|
+
console.log('fiber rendered', fiber);
|
|
217
|
+
});
|
|
198
218
|
},
|
|
199
219
|
})
|
|
200
220
|
);
|
|
@@ -275,6 +295,7 @@ traverseContexts(fiber, (next, prev) => {
|
|
|
275
295
|
});
|
|
276
296
|
```
|
|
277
297
|
|
|
298
|
+
|
|
278
299
|
### setFiberId / getFiberId
|
|
279
300
|
|
|
280
301
|
set and get a persistent identity for a fiber. by default, fibers are anonymous and have no identity.
|
|
@@ -415,7 +436,7 @@ import {
|
|
|
415
436
|
instrument,
|
|
416
437
|
isHostFiber,
|
|
417
438
|
getNearestHostFiber,
|
|
418
|
-
|
|
439
|
+
traverseRenderedFibers,
|
|
419
440
|
} from 'bippy'; // must be imported BEFORE react
|
|
420
441
|
|
|
421
442
|
const highlightFiber = (fiber) => {
|
|
@@ -436,29 +457,6 @@ const highlightFiber = (fiber) => {
|
|
|
436
457
|
}, 100);
|
|
437
458
|
};
|
|
438
459
|
|
|
439
|
-
/**
|
|
440
|
-
* `createFiberVisitor` traverses the fiber tree and determines which
|
|
441
|
-
* fibers have actually rendered.
|
|
442
|
-
*
|
|
443
|
-
* A fiber tree contains many fibers that may have not rendered. this
|
|
444
|
-
* can be because it bailed out (e.g. `useMemo`) or because it wasn't
|
|
445
|
-
* actually rendered (if <Child> re-rendered, then <Parent> didn't
|
|
446
|
-
* actually render, but exists in the fiber tree).
|
|
447
|
-
*/
|
|
448
|
-
const visit = createFiberVisitor({
|
|
449
|
-
onRender(fiber) {
|
|
450
|
-
/**
|
|
451
|
-
* `getNearestHostFiber` is a utility function that finds the
|
|
452
|
-
* nearest host fiber to a given fiber.
|
|
453
|
-
*
|
|
454
|
-
* a host fiber for `react-dom` is a fiber that has a DOM element
|
|
455
|
-
* as its `stateNode`.
|
|
456
|
-
*/
|
|
457
|
-
const hostFiber = getNearestHostFiber(fiber);
|
|
458
|
-
highlightFiber(hostFiber);
|
|
459
|
-
},
|
|
460
|
-
});
|
|
461
|
-
|
|
462
460
|
/**
|
|
463
461
|
* `instrument` is a function that installs the react DevTools global
|
|
464
462
|
* hook and allows you to set up custom handlers for react fiber events.
|
|
@@ -480,7 +478,26 @@ instrument(
|
|
|
480
478
|
* the host tree (e.g. via DOM mutations).
|
|
481
479
|
*/
|
|
482
480
|
onCommitFiberRoot(rendererID, root) {
|
|
483
|
-
|
|
481
|
+
/**
|
|
482
|
+
* `traverseRenderedFibers` traverses the fiber tree and determines which
|
|
483
|
+
* fibers have actually rendered.
|
|
484
|
+
*
|
|
485
|
+
* A fiber tree contains many fibers that may have not rendered. this
|
|
486
|
+
* can be because it bailed out (e.g. `useMemo`) or because it wasn't
|
|
487
|
+
* actually rendered (if <Child> re-rendered, then <Parent> didn't
|
|
488
|
+
* actually render, but exists in the fiber tree).
|
|
489
|
+
*/
|
|
490
|
+
traverseRenderedFibers(root, (fiber) => {
|
|
491
|
+
/**
|
|
492
|
+
* `getNearestHostFiber` is a utility function that finds the
|
|
493
|
+
* nearest host fiber to a given fiber.
|
|
494
|
+
*
|
|
495
|
+
* a host fiber for `react-dom` is a fiber that has a DOM element
|
|
496
|
+
* as its `stateNode`.
|
|
497
|
+
*/
|
|
498
|
+
const hostFiber = getNearestHostFiber(fiber);
|
|
499
|
+
highlightFiber(hostFiber);
|
|
500
|
+
});
|
|
484
501
|
},
|
|
485
502
|
})
|
|
486
503
|
);
|
|
@@ -494,7 +511,7 @@ here's a mini toy version of [`why-did-you-render`](https://github.com/welldone-
|
|
|
494
511
|
import {
|
|
495
512
|
instrument,
|
|
496
513
|
isHostFiber,
|
|
497
|
-
|
|
514
|
+
traverseRenderedFibers,
|
|
498
515
|
isCompositeFiber,
|
|
499
516
|
getDisplayName,
|
|
500
517
|
traverseProps,
|
|
@@ -502,84 +519,80 @@ import {
|
|
|
502
519
|
traverseState,
|
|
503
520
|
} from 'bippy'; // must be imported BEFORE react
|
|
504
521
|
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
522
|
+
instrument(
|
|
523
|
+
secure({
|
|
524
|
+
onCommitFiberRoot(rendererID, root) {
|
|
525
|
+
traverseRenderedFibers(root, (fiber) => {
|
|
526
|
+
/**
|
|
527
|
+
* `isCompositeFiber` is a utility function that checks if a fiber is a composite fiber.
|
|
528
|
+
* a composite fiber is a fiber that represents a function or class component.
|
|
529
|
+
*/
|
|
530
|
+
if (!isCompositeFiber(fiber)) return;
|
|
531
|
+
|
|
532
|
+
/**
|
|
533
|
+
* `getDisplayName` is a utility function that gets the display name of a fiber.
|
|
534
|
+
*/
|
|
535
|
+
const displayName = getDisplayName(fiber);
|
|
536
|
+
if (!displayName) return;
|
|
537
|
+
|
|
538
|
+
const changes = [];
|
|
539
|
+
|
|
540
|
+
/**
|
|
541
|
+
* `traverseProps` is a utility function that traverses the props of a fiber.
|
|
542
|
+
*/
|
|
543
|
+
traverseProps(fiber, (propName, next, prev) => {
|
|
544
|
+
if (next !== prev) {
|
|
545
|
+
changes.push({
|
|
546
|
+
name: `prop ${propName}`,
|
|
547
|
+
prev,
|
|
548
|
+
next,
|
|
549
|
+
});
|
|
550
|
+
}
|
|
530
551
|
});
|
|
531
|
-
}
|
|
532
|
-
});
|
|
533
552
|
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
553
|
+
let contextId = 0;
|
|
554
|
+
/**
|
|
555
|
+
* `traverseContexts` is a utility function that traverses the contexts of a fiber.
|
|
556
|
+
* Contexts don't have a "name" like props, so we use an id to identify them.
|
|
557
|
+
*/
|
|
558
|
+
traverseContexts(fiber, (next, prev) => {
|
|
559
|
+
if (next !== prev) {
|
|
560
|
+
changes.push({
|
|
561
|
+
name: `context ${contextId}`,
|
|
562
|
+
prev,
|
|
563
|
+
next,
|
|
564
|
+
contextId,
|
|
565
|
+
});
|
|
566
|
+
}
|
|
567
|
+
contextId++;
|
|
546
568
|
});
|
|
547
|
-
}
|
|
548
|
-
contextId++;
|
|
549
|
-
});
|
|
550
569
|
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
570
|
+
let stateId = 0;
|
|
571
|
+
/**
|
|
572
|
+
* `traverseState` is a utility function that traverses the state of a fiber.
|
|
573
|
+
*
|
|
574
|
+
* State don't have a "name" like props, so we use an id to identify them.
|
|
575
|
+
*/
|
|
576
|
+
traverseState(fiber, (value, prevValue) => {
|
|
577
|
+
if (next !== prev) {
|
|
578
|
+
changes.push({
|
|
579
|
+
name: `state ${stateId}`,
|
|
580
|
+
prev,
|
|
581
|
+
next,
|
|
582
|
+
});
|
|
583
|
+
}
|
|
584
|
+
stateId++;
|
|
563
585
|
});
|
|
564
|
-
}
|
|
565
|
-
stateId++;
|
|
566
|
-
});
|
|
567
|
-
|
|
568
|
-
console.group(
|
|
569
|
-
`%c${displayName}`,
|
|
570
|
-
'background: hsla(0,0%,70%,.3); border-radius:3px; padding: 0 2px;'
|
|
571
|
-
);
|
|
572
|
-
for (const { name, prev, next } of changes) {
|
|
573
|
-
console.log(`${name}:`, prev, '!==', next);
|
|
574
|
-
}
|
|
575
|
-
console.groupEnd();
|
|
576
|
-
},
|
|
577
|
-
});
|
|
578
586
|
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
587
|
+
console.group(
|
|
588
|
+
`%c${displayName}`,
|
|
589
|
+
'background: hsla(0,0%,70%,.3); border-radius:3px; padding: 0 2px;'
|
|
590
|
+
);
|
|
591
|
+
for (const { name, prev, next } of changes) {
|
|
592
|
+
console.log(`${name}:`, prev, '!==', next);
|
|
593
|
+
}
|
|
594
|
+
console.groupEnd();
|
|
595
|
+
});
|
|
583
596
|
},
|
|
584
597
|
})
|
|
585
598
|
);
|
package/dist/core.cjs
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
// src/rdt-hook.ts
|
|
13
|
-
var version = "0.
|
|
13
|
+
var version = "0.2.0";
|
|
14
14
|
var BIPPY_INSTRUMENTATION_STRING = `bippy-${version}`;
|
|
15
15
|
var NO_OP = () => {
|
|
16
16
|
};
|
|
@@ -510,46 +510,38 @@ var unmountFiberChildrenRecursively = (onRender, fiber) => {
|
|
|
510
510
|
};
|
|
511
511
|
var commitId = 0;
|
|
512
512
|
var rootInstanceMap = /* @__PURE__ */ new WeakMap();
|
|
513
|
+
var traverseRenderedFibers = (root, onRender) => {
|
|
514
|
+
const fiber = "current" in root ? root.current : root;
|
|
515
|
+
let rootInstance = rootInstanceMap.get(root);
|
|
516
|
+
if (!rootInstance) {
|
|
517
|
+
rootInstance = { prevFiber: null, id: commitId++ };
|
|
518
|
+
rootInstanceMap.set(root, rootInstance);
|
|
519
|
+
}
|
|
520
|
+
const { prevFiber } = rootInstance;
|
|
521
|
+
if (!fiber) {
|
|
522
|
+
unmountFiber(onRender, fiber);
|
|
523
|
+
} else if (prevFiber !== null) {
|
|
524
|
+
const wasMounted = prevFiber && prevFiber.memoizedState != null && prevFiber.memoizedState.element != null && // A dehydrated root is not considered mounted
|
|
525
|
+
prevFiber.memoizedState.isDehydrated !== true;
|
|
526
|
+
const isMounted = fiber.memoizedState != null && fiber.memoizedState.element != null && // A dehydrated root is not considered mounted
|
|
527
|
+
fiber.memoizedState.isDehydrated !== true;
|
|
528
|
+
if (!wasMounted && isMounted) {
|
|
529
|
+
mountFiberRecursively(onRender, fiber, false);
|
|
530
|
+
} else if (wasMounted && isMounted) {
|
|
531
|
+
updateFiberRecursively(onRender, fiber, fiber.alternate);
|
|
532
|
+
} else if (wasMounted && !isMounted) {
|
|
533
|
+
unmountFiber(onRender, fiber);
|
|
534
|
+
}
|
|
535
|
+
} else {
|
|
536
|
+
mountFiberRecursively(onRender, fiber, true);
|
|
537
|
+
}
|
|
538
|
+
rootInstance.prevFiber = fiber;
|
|
539
|
+
};
|
|
513
540
|
var createFiberVisitor = ({
|
|
514
|
-
onRender
|
|
515
|
-
onError
|
|
541
|
+
onRender
|
|
516
542
|
}) => {
|
|
517
|
-
return (_rendererID, root,
|
|
518
|
-
|
|
519
|
-
const onRender = (fiber, phase) => onRenderWithoutState(fiber, phase, state);
|
|
520
|
-
let rootInstance = rootInstanceMap.get(root);
|
|
521
|
-
if (!rootInstance) {
|
|
522
|
-
rootInstance = { prevFiber: null, id: commitId++ };
|
|
523
|
-
rootInstanceMap.set(root, rootInstance);
|
|
524
|
-
}
|
|
525
|
-
const { prevFiber } = rootInstance;
|
|
526
|
-
try {
|
|
527
|
-
if (!rootFiber) {
|
|
528
|
-
unmountFiber(onRender, root);
|
|
529
|
-
} else if (prevFiber !== null) {
|
|
530
|
-
const wasMounted = prevFiber && prevFiber.memoizedState != null && prevFiber.memoizedState.element != null && // A dehydrated root is not considered mounted
|
|
531
|
-
prevFiber.memoizedState.isDehydrated !== true;
|
|
532
|
-
const isMounted = rootFiber.memoizedState != null && rootFiber.memoizedState.element != null && // A dehydrated root is not considered mounted
|
|
533
|
-
rootFiber.memoizedState.isDehydrated !== true;
|
|
534
|
-
if (!wasMounted && isMounted) {
|
|
535
|
-
mountFiberRecursively(onRender, rootFiber, false);
|
|
536
|
-
} else if (wasMounted && isMounted) {
|
|
537
|
-
updateFiberRecursively(
|
|
538
|
-
onRender,
|
|
539
|
-
rootFiber,
|
|
540
|
-
rootFiber.alternate,
|
|
541
|
-
null
|
|
542
|
-
);
|
|
543
|
-
} else if (wasMounted && !isMounted) {
|
|
544
|
-
unmountFiber(onRender, rootFiber);
|
|
545
|
-
}
|
|
546
|
-
} else {
|
|
547
|
-
mountFiberRecursively(onRender, rootFiber, true);
|
|
548
|
-
}
|
|
549
|
-
} catch (error) {
|
|
550
|
-
onError(error);
|
|
551
|
-
}
|
|
552
|
-
rootInstance.prevFiber = rootFiber;
|
|
543
|
+
return (_rendererID, root, _state) => {
|
|
544
|
+
traverseRenderedFibers(root, onRender);
|
|
553
545
|
};
|
|
554
546
|
};
|
|
555
547
|
var instrument = (options) => {
|
|
@@ -640,11 +632,11 @@ var secure = (options, secureOptions = {}) => {
|
|
|
640
632
|
return;
|
|
641
633
|
}
|
|
642
634
|
try {
|
|
643
|
-
const
|
|
644
|
-
if (
|
|
635
|
+
const onCommitFiberRoot2 = options.onCommitFiberRoot;
|
|
636
|
+
if (onCommitFiberRoot2) {
|
|
645
637
|
options.onCommitFiberRoot = (rendererID, root, priority) => {
|
|
646
638
|
try {
|
|
647
|
-
|
|
639
|
+
onCommitFiberRoot2(rendererID, root, priority);
|
|
648
640
|
} catch (err) {
|
|
649
641
|
secureOptions.onError?.(err);
|
|
650
642
|
}
|
|
@@ -684,6 +676,15 @@ var secure = (options, secureOptions = {}) => {
|
|
|
684
676
|
}
|
|
685
677
|
return options;
|
|
686
678
|
};
|
|
679
|
+
var onCommitFiberRoot = (handler) => {
|
|
680
|
+
instrument(
|
|
681
|
+
secure({
|
|
682
|
+
onCommitFiberRoot: (_, root) => {
|
|
683
|
+
handler(root);
|
|
684
|
+
}
|
|
685
|
+
})
|
|
686
|
+
);
|
|
687
|
+
};
|
|
687
688
|
|
|
688
689
|
exports.CONCURRENT_MODE_NUMBER = CONCURRENT_MODE_NUMBER;
|
|
689
690
|
exports.CONCURRENT_MODE_SYMBOL_STRING = CONCURRENT_MODE_SYMBOL_STRING;
|
|
@@ -729,6 +730,7 @@ exports.isUsingRDT = isUsingRDT;
|
|
|
729
730
|
exports.isValidElement = isValidElement;
|
|
730
731
|
exports.isValidFiber = isValidFiber;
|
|
731
732
|
exports.mountFiberRecursively = mountFiberRecursively;
|
|
733
|
+
exports.onCommitFiberRoot = onCommitFiberRoot;
|
|
732
734
|
exports.secure = secure;
|
|
733
735
|
exports.setFiberId = setFiberId;
|
|
734
736
|
exports.shouldFilterFiber = shouldFilterFiber;
|
|
@@ -736,6 +738,7 @@ exports.traverseContexts = traverseContexts;
|
|
|
736
738
|
exports.traverseEffects = traverseEffects;
|
|
737
739
|
exports.traverseFiber = traverseFiber;
|
|
738
740
|
exports.traverseProps = traverseProps;
|
|
741
|
+
exports.traverseRenderedFibers = traverseRenderedFibers;
|
|
739
742
|
exports.traverseState = traverseState;
|
|
740
743
|
exports.unmountFiber = unmountFiber;
|
|
741
744
|
exports.unmountFiberChildrenRecursively = unmountFiberChildrenRecursively;
|
package/dist/core.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { F as Fiber, C as ContextDependency, M as MemoizedState, E as Effect, a as ReactRenderer, R as ReactDevToolsGlobalHook } from './types-
|
|
1
|
+
import { F as Fiber, C as ContextDependency, M as MemoizedState, E as Effect, a as ReactRenderer, R as ReactDevToolsGlobalHook } from './types-BqcvCznx.cjs';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { FiberRoot } from 'react-reconciler';
|
|
4
4
|
|
|
@@ -132,7 +132,7 @@ declare const detectReactBuildType: (renderer: ReactRenderer) => "development" |
|
|
|
132
132
|
* Returns `true` if bippy's instrumentation is active.
|
|
133
133
|
*/
|
|
134
134
|
declare const isInstrumentationActive: () => boolean;
|
|
135
|
-
type RenderPhase =
|
|
135
|
+
type RenderPhase = 'mount' | 'update' | 'unmount';
|
|
136
136
|
type RenderHandler = <S>(fiber: Fiber, phase: RenderPhase, state?: S) => unknown;
|
|
137
137
|
declare const fiberIdMap: WeakMap<Fiber, number>;
|
|
138
138
|
declare const setFiberId: (fiber: Fiber, id?: number) => void;
|
|
@@ -142,18 +142,20 @@ declare const updateFiberRecursively: (onRender: RenderHandler, nextFiber: Fiber
|
|
|
142
142
|
declare const unmountFiber: (onRender: RenderHandler, fiber: Fiber) => void;
|
|
143
143
|
declare const unmountFiberChildrenRecursively: (onRender: RenderHandler, fiber: Fiber) => void;
|
|
144
144
|
/**
|
|
145
|
-
* Creates a fiber visitor function.
|
|
145
|
+
* Creates a fiber visitor function. Must pass a fiber root and a render handler.
|
|
146
146
|
* @example
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
* },
|
|
151
|
-
* });
|
|
147
|
+
* traverseRenderedFibers(root, (fiber, phase) => {
|
|
148
|
+
* console.log(phase)
|
|
149
|
+
* })
|
|
152
150
|
*/
|
|
153
|
-
declare const
|
|
151
|
+
declare const traverseRenderedFibers: (root: FiberRoot, onRender: RenderHandler) => void;
|
|
152
|
+
/**
|
|
153
|
+
* @deprecated use `traverseRenderedFibers` instead
|
|
154
|
+
*/
|
|
155
|
+
declare const createFiberVisitor: ({ onRender, }: {
|
|
154
156
|
onRender: RenderHandler;
|
|
155
157
|
onError: (error: unknown) => unknown;
|
|
156
|
-
}) => <S>(_rendererID: number, root: FiberRoot | Fiber,
|
|
158
|
+
}) => <S>(_rendererID: number, root: FiberRoot | Fiber, _state?: S) => void;
|
|
157
159
|
interface InstrumentationOptions {
|
|
158
160
|
onCommitFiberRoot?: (rendererID: number, root: FiberRoot, priority: void | number) => unknown;
|
|
159
161
|
onCommitFiberUnmount?: (rendererID: number, fiber: Fiber) => unknown;
|
|
@@ -174,12 +176,21 @@ interface InstrumentationOptions {
|
|
|
174
176
|
* });
|
|
175
177
|
*/
|
|
176
178
|
declare const instrument: (options: InstrumentationOptions) => ReactDevToolsGlobalHook;
|
|
177
|
-
declare const getFiberFromHostInstance: <T>(hostInstance: T) =>
|
|
179
|
+
declare const getFiberFromHostInstance: <T>(hostInstance: T) => Fiber | null | undefined;
|
|
178
180
|
declare const secure: (options: InstrumentationOptions, secureOptions?: {
|
|
179
181
|
minReactMajorVersion?: number;
|
|
180
182
|
dangerouslyRunInProduction?: boolean;
|
|
181
183
|
onError?: (error?: unknown) => unknown;
|
|
182
184
|
installCheckTimeout?: number;
|
|
183
185
|
}) => InstrumentationOptions;
|
|
186
|
+
/**
|
|
187
|
+
* a wrapper around the {@link instrument} function that sets the `onCommitFiberRoot` hook.
|
|
188
|
+
*
|
|
189
|
+
* @example
|
|
190
|
+
* onCommitFiberRoot((root) => {
|
|
191
|
+
* console.log(root.current);
|
|
192
|
+
* });
|
|
193
|
+
*/
|
|
194
|
+
declare const onCommitFiberRoot: (handler: (root: FiberRoot) => void) => void;
|
|
184
195
|
|
|
185
|
-
export { CONCURRENT_MODE_NUMBER, CONCURRENT_MODE_SYMBOL_STRING, ClassComponentTag, ContextConsumerTag, DEPRECATED_ASYNC_MODE_SYMBOL_STRING, DehydratedSuspenseComponentTag, ELEMENT_TYPE_SYMBOL_STRING, ForwardRefTag, FragmentTag, FunctionComponentTag, HostComponentTag, HostHoistableTag, HostRootTag, HostSingletonTag, HostTextTag, type InstrumentationOptions, LegacyHiddenComponentTag, MemoComponentTag, OffscreenComponentTag, type RenderHandler, type RenderPhase, SimpleMemoComponentTag, SuspenseComponentTag, TRANSITIONAL_ELEMENT_TYPE_SYMBOL_STRING, createFiberVisitor, detectReactBuildType, didFiberCommit, didFiberRender, fiberIdMap, getDisplayName, getFiberFromHostInstance, getFiberId, getFiberStack, getMutatedHostFibers, getNearestHostFiber, getNearestHostFibers, getTimings, getType, hasMemoCache, instrument, isCompositeFiber, isHostFiber, isInstrumentationActive, isUsingRDT, isValidElement, isValidFiber, mountFiberRecursively, secure, setFiberId, shouldFilterFiber, traverseContexts, traverseEffects, traverseFiber, traverseProps, traverseState, unmountFiber, unmountFiberChildrenRecursively, updateFiberRecursively };
|
|
196
|
+
export { CONCURRENT_MODE_NUMBER, CONCURRENT_MODE_SYMBOL_STRING, ClassComponentTag, ContextConsumerTag, DEPRECATED_ASYNC_MODE_SYMBOL_STRING, DehydratedSuspenseComponentTag, ELEMENT_TYPE_SYMBOL_STRING, ForwardRefTag, FragmentTag, FunctionComponentTag, HostComponentTag, HostHoistableTag, HostRootTag, HostSingletonTag, HostTextTag, type InstrumentationOptions, LegacyHiddenComponentTag, MemoComponentTag, OffscreenComponentTag, type RenderHandler, type RenderPhase, SimpleMemoComponentTag, SuspenseComponentTag, TRANSITIONAL_ELEMENT_TYPE_SYMBOL_STRING, createFiberVisitor, detectReactBuildType, didFiberCommit, didFiberRender, fiberIdMap, getDisplayName, getFiberFromHostInstance, getFiberId, getFiberStack, getMutatedHostFibers, getNearestHostFiber, getNearestHostFibers, getTimings, getType, hasMemoCache, instrument, isCompositeFiber, isHostFiber, isInstrumentationActive, isUsingRDT, isValidElement, isValidFiber, mountFiberRecursively, onCommitFiberRoot, secure, setFiberId, shouldFilterFiber, traverseContexts, traverseEffects, traverseFiber, traverseProps, traverseRenderedFibers, traverseState, unmountFiber, unmountFiberChildrenRecursively, updateFiberRecursively };
|
package/dist/core.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { F as Fiber, C as ContextDependency, M as MemoizedState, E as Effect, a as ReactRenderer, R as ReactDevToolsGlobalHook } from './types-
|
|
1
|
+
import { F as Fiber, C as ContextDependency, M as MemoizedState, E as Effect, a as ReactRenderer, R as ReactDevToolsGlobalHook } from './types-BqcvCznx.js';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { FiberRoot } from 'react-reconciler';
|
|
4
4
|
|
|
@@ -132,7 +132,7 @@ declare const detectReactBuildType: (renderer: ReactRenderer) => "development" |
|
|
|
132
132
|
* Returns `true` if bippy's instrumentation is active.
|
|
133
133
|
*/
|
|
134
134
|
declare const isInstrumentationActive: () => boolean;
|
|
135
|
-
type RenderPhase =
|
|
135
|
+
type RenderPhase = 'mount' | 'update' | 'unmount';
|
|
136
136
|
type RenderHandler = <S>(fiber: Fiber, phase: RenderPhase, state?: S) => unknown;
|
|
137
137
|
declare const fiberIdMap: WeakMap<Fiber, number>;
|
|
138
138
|
declare const setFiberId: (fiber: Fiber, id?: number) => void;
|
|
@@ -142,18 +142,20 @@ declare const updateFiberRecursively: (onRender: RenderHandler, nextFiber: Fiber
|
|
|
142
142
|
declare const unmountFiber: (onRender: RenderHandler, fiber: Fiber) => void;
|
|
143
143
|
declare const unmountFiberChildrenRecursively: (onRender: RenderHandler, fiber: Fiber) => void;
|
|
144
144
|
/**
|
|
145
|
-
* Creates a fiber visitor function.
|
|
145
|
+
* Creates a fiber visitor function. Must pass a fiber root and a render handler.
|
|
146
146
|
* @example
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
* },
|
|
151
|
-
* });
|
|
147
|
+
* traverseRenderedFibers(root, (fiber, phase) => {
|
|
148
|
+
* console.log(phase)
|
|
149
|
+
* })
|
|
152
150
|
*/
|
|
153
|
-
declare const
|
|
151
|
+
declare const traverseRenderedFibers: (root: FiberRoot, onRender: RenderHandler) => void;
|
|
152
|
+
/**
|
|
153
|
+
* @deprecated use `traverseRenderedFibers` instead
|
|
154
|
+
*/
|
|
155
|
+
declare const createFiberVisitor: ({ onRender, }: {
|
|
154
156
|
onRender: RenderHandler;
|
|
155
157
|
onError: (error: unknown) => unknown;
|
|
156
|
-
}) => <S>(_rendererID: number, root: FiberRoot | Fiber,
|
|
158
|
+
}) => <S>(_rendererID: number, root: FiberRoot | Fiber, _state?: S) => void;
|
|
157
159
|
interface InstrumentationOptions {
|
|
158
160
|
onCommitFiberRoot?: (rendererID: number, root: FiberRoot, priority: void | number) => unknown;
|
|
159
161
|
onCommitFiberUnmount?: (rendererID: number, fiber: Fiber) => unknown;
|
|
@@ -174,12 +176,21 @@ interface InstrumentationOptions {
|
|
|
174
176
|
* });
|
|
175
177
|
*/
|
|
176
178
|
declare const instrument: (options: InstrumentationOptions) => ReactDevToolsGlobalHook;
|
|
177
|
-
declare const getFiberFromHostInstance: <T>(hostInstance: T) =>
|
|
179
|
+
declare const getFiberFromHostInstance: <T>(hostInstance: T) => Fiber | null | undefined;
|
|
178
180
|
declare const secure: (options: InstrumentationOptions, secureOptions?: {
|
|
179
181
|
minReactMajorVersion?: number;
|
|
180
182
|
dangerouslyRunInProduction?: boolean;
|
|
181
183
|
onError?: (error?: unknown) => unknown;
|
|
182
184
|
installCheckTimeout?: number;
|
|
183
185
|
}) => InstrumentationOptions;
|
|
186
|
+
/**
|
|
187
|
+
* a wrapper around the {@link instrument} function that sets the `onCommitFiberRoot` hook.
|
|
188
|
+
*
|
|
189
|
+
* @example
|
|
190
|
+
* onCommitFiberRoot((root) => {
|
|
191
|
+
* console.log(root.current);
|
|
192
|
+
* });
|
|
193
|
+
*/
|
|
194
|
+
declare const onCommitFiberRoot: (handler: (root: FiberRoot) => void) => void;
|
|
184
195
|
|
|
185
|
-
export { CONCURRENT_MODE_NUMBER, CONCURRENT_MODE_SYMBOL_STRING, ClassComponentTag, ContextConsumerTag, DEPRECATED_ASYNC_MODE_SYMBOL_STRING, DehydratedSuspenseComponentTag, ELEMENT_TYPE_SYMBOL_STRING, ForwardRefTag, FragmentTag, FunctionComponentTag, HostComponentTag, HostHoistableTag, HostRootTag, HostSingletonTag, HostTextTag, type InstrumentationOptions, LegacyHiddenComponentTag, MemoComponentTag, OffscreenComponentTag, type RenderHandler, type RenderPhase, SimpleMemoComponentTag, SuspenseComponentTag, TRANSITIONAL_ELEMENT_TYPE_SYMBOL_STRING, createFiberVisitor, detectReactBuildType, didFiberCommit, didFiberRender, fiberIdMap, getDisplayName, getFiberFromHostInstance, getFiberId, getFiberStack, getMutatedHostFibers, getNearestHostFiber, getNearestHostFibers, getTimings, getType, hasMemoCache, instrument, isCompositeFiber, isHostFiber, isInstrumentationActive, isUsingRDT, isValidElement, isValidFiber, mountFiberRecursively, secure, setFiberId, shouldFilterFiber, traverseContexts, traverseEffects, traverseFiber, traverseProps, traverseState, unmountFiber, unmountFiberChildrenRecursively, updateFiberRecursively };
|
|
196
|
+
export { CONCURRENT_MODE_NUMBER, CONCURRENT_MODE_SYMBOL_STRING, ClassComponentTag, ContextConsumerTag, DEPRECATED_ASYNC_MODE_SYMBOL_STRING, DehydratedSuspenseComponentTag, ELEMENT_TYPE_SYMBOL_STRING, ForwardRefTag, FragmentTag, FunctionComponentTag, HostComponentTag, HostHoistableTag, HostRootTag, HostSingletonTag, HostTextTag, type InstrumentationOptions, LegacyHiddenComponentTag, MemoComponentTag, OffscreenComponentTag, type RenderHandler, type RenderPhase, SimpleMemoComponentTag, SuspenseComponentTag, TRANSITIONAL_ELEMENT_TYPE_SYMBOL_STRING, createFiberVisitor, detectReactBuildType, didFiberCommit, didFiberRender, fiberIdMap, getDisplayName, getFiberFromHostInstance, getFiberId, getFiberStack, getMutatedHostFibers, getNearestHostFiber, getNearestHostFibers, getTimings, getType, hasMemoCache, instrument, isCompositeFiber, isHostFiber, isInstrumentationActive, isUsingRDT, isValidElement, isValidFiber, mountFiberRecursively, onCommitFiberRoot, secure, setFiberId, shouldFilterFiber, traverseContexts, traverseEffects, traverseFiber, traverseProps, traverseRenderedFibers, traverseState, unmountFiber, unmountFiberChildrenRecursively, updateFiberRecursively };
|