bippy 0.0.24 → 0.1.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/dist/index.js CHANGED
@@ -7,12 +7,13 @@
7
7
  * LICENSE file in the root directory of this source tree.
8
8
  */
9
9
 
10
- // src/index.ts
10
+ // src/core.ts
11
+ var version = "0.1.0";
12
+ var BIPPY_INSTRUMENTATION_STRING = `bippy-${version}`;
11
13
  var ClassComponentTag = 1;
12
14
  var FunctionComponentTag = 0;
13
15
  var ContextConsumerTag = 9;
14
16
  var SuspenseComponentTag = 13;
15
- var OffscreenComponentTag = 22;
16
17
  var ForwardRefTag = 11;
17
18
  var MemoComponentTag = 14;
18
19
  var SimpleMemoComponentTag = 15;
@@ -26,30 +27,32 @@ var LegacyHiddenComponent = 23;
26
27
  var OffscreenComponent = 22;
27
28
  var HostRoot = 3;
28
29
  var CONCURRENT_MODE_NUMBER = 60111;
30
+ var ELEMENT_TYPE_SYMBOL_STRING = "Symbol(react.element)";
31
+ var TRANSITIONAL_ELEMENT_TYPE_SYMBOL_STRING = "Symbol(react.transitional.element)";
29
32
  var CONCURRENT_MODE_SYMBOL_STRING = "Symbol(react.concurrent_mode)";
30
33
  var DEPRECATED_ASYNC_MODE_SYMBOL_STRING = "Symbol(react.async_mode)";
31
34
  var PerformedWork = 1;
32
35
  var Placement = 2;
33
- var DidCapture = 128;
34
36
  var Hydrating = 4096;
35
37
  var Update = 4;
36
38
  var Cloned = 8;
37
39
  var ChildDeletion = 16;
38
40
  var ContentReset = 32;
39
- var Ref = 512;
40
41
  var Snapshot = 1024;
41
42
  var Visibility = 8192;
42
43
  var MutationMask = Placement | Update | ChildDeletion | ContentReset | Hydrating | Visibility | Snapshot;
43
44
  var isValidElement = (element) => typeof element === "object" && element != null && "$$typeof" in element && // react 18 uses Symbol.for('react.element'), react 19 uses Symbol.for('react.transitional.element')
44
- ["Symbol(react.element)", "Symbol(react.transitional.element)"].includes(
45
- String(element.$$typeof)
46
- );
45
+ [
46
+ ELEMENT_TYPE_SYMBOL_STRING,
47
+ TRANSITIONAL_ELEMENT_TYPE_SYMBOL_STRING
48
+ ].includes(String(element.$$typeof));
49
+ var isValidFiber = (fiber) => typeof fiber === "object" && fiber != null && "tag" in fiber && "stateNode" in fiber && "return" in fiber && "child" in fiber && "sibling" in fiber && "flags" in fiber;
47
50
  var isHostFiber = (fiber) => fiber.tag === HostComponentTag || // @ts-expect-error: it exists
48
51
  fiber.tag === HostHoistableTag || // @ts-expect-error: it exists
49
- fiber.tag === HostSingletonTag;
52
+ fiber.tag === HostSingletonTag || typeof fiber.type === "string";
50
53
  var isCompositeFiber = (fiber) => fiber.tag === FunctionComponentTag || fiber.tag === ClassComponentTag || fiber.tag === SimpleMemoComponentTag || fiber.tag === MemoComponentTag || fiber.tag === ForwardRefTag;
51
54
  var traverseContexts = (fiber, selector) => {
52
- try {
55
+ return safeTry(() => {
53
56
  const nextDependencies = fiber.dependencies;
54
57
  const prevDependencies = fiber.alternate?.dependencies;
55
58
  if (!nextDependencies || !prevDependencies) return false;
@@ -58,31 +61,49 @@ var traverseContexts = (fiber, selector) => {
58
61
  }
59
62
  let nextContext = nextDependencies.firstContext;
60
63
  let prevContext = prevDependencies.firstContext;
61
- while (nextContext && typeof nextContext === "object" && "memoizedValue" in nextContext && prevContext && typeof prevContext === "object" && "memoizedValue" in prevContext) {
62
- if (selector(nextContext, prevContext) === true)
63
- return true;
64
- nextContext = nextContext.next;
65
- prevContext = prevContext.next;
64
+ while (nextContext && typeof nextContext === "object" && "memoizedValue" in nextContext || prevContext && typeof prevContext === "object" && "memoizedValue" in prevContext) {
65
+ if (selector(nextContext, prevContext) === true) return true;
66
+ nextContext = nextContext?.next;
67
+ prevContext = prevContext?.next;
66
68
  }
67
- } catch {
68
- }
69
- return false;
69
+ return false;
70
+ });
70
71
  };
71
72
  var traverseState = (fiber, selector) => {
72
- try {
73
- let prevState = fiber.memoizedState;
74
- let nextState = fiber.alternate?.memoizedState;
75
- while (prevState && nextState) {
76
- if (selector(prevState, nextState) === true) return true;
77
- prevState = prevState.next;
73
+ return safeTry(() => {
74
+ let nextState = fiber.memoizedState;
75
+ let prevState = fiber.alternate?.memoizedState;
76
+ while (nextState || prevState) {
77
+ if (selector(nextState, prevState) === true) return true;
78
78
  nextState = nextState.next;
79
+ prevState = prevState.next;
79
80
  }
80
- } catch {
81
- }
82
- return false;
81
+ return false;
82
+ });
83
+ };
84
+ var traverseEffects = (fiber, selector) => {
85
+ return safeTry(() => {
86
+ let nextState = (
87
+ // biome-ignore lint/suspicious/noExplicitAny: underlying type is unknown
88
+ fiber.updateQueue?.lastEffect
89
+ );
90
+ let prevState = (
91
+ // biome-ignore lint/suspicious/noExplicitAny: underlying type is unknown
92
+ fiber.alternate?.updateQueue?.lastEffect
93
+ );
94
+ while (nextState || prevState) {
95
+ if (selector(nextState, prevState) === true) return true;
96
+ if (nextState?.next === nextState || prevState?.next === prevState) {
97
+ break;
98
+ }
99
+ nextState = nextState?.next;
100
+ prevState = prevState?.next;
101
+ }
102
+ return false;
103
+ });
83
104
  };
84
105
  var traverseProps = (fiber, selector) => {
85
- try {
106
+ return safeTry(() => {
86
107
  const nextProps = fiber.memoizedProps;
87
108
  const prevProps = fiber.alternate?.memoizedProps || {};
88
109
  const allKeys = /* @__PURE__ */ new Set([
@@ -92,11 +113,10 @@ var traverseProps = (fiber, selector) => {
92
113
  for (const propName of allKeys) {
93
114
  const prevValue = prevProps?.[propName];
94
115
  const nextValue = nextProps?.[propName];
95
- if (selector(prevValue, nextValue) === true) return true;
116
+ if (selector(propName, nextValue, prevValue) === true) return true;
96
117
  }
97
- } catch {
98
- }
99
- return false;
118
+ return false;
119
+ });
100
120
  };
101
121
  var didFiberRender = (fiber) => {
102
122
  const nextProps = fiber.memoizedProps;
@@ -118,7 +138,7 @@ var didFiberRender = (fiber) => {
118
138
  };
119
139
  var didFiberCommit = (fiber) => {
120
140
  return Boolean(
121
- (fiber.flags & (Update | Placement | ChildDeletion)) !== 0 || (fiber.subtreeFlags & (Update | Placement | ChildDeletion)) !== 0
141
+ (fiber.flags & (MutationMask | Cloned)) !== 0 || (fiber.subtreeFlags & (MutationMask | Cloned)) !== 0
122
142
  );
123
143
  };
124
144
  var getMutatedHostFibers = (fiber) => {
@@ -137,9 +157,10 @@ var getMutatedHostFibers = (fiber) => {
137
157
  };
138
158
  var getFiberStack = (fiber) => {
139
159
  const stack = [];
140
- while (fiber.return) {
141
- stack.push(fiber);
142
- fiber = fiber.return;
160
+ let currentFiber = fiber;
161
+ while (currentFiber.return) {
162
+ stack.push(currentFiber);
163
+ currentFiber = currentFiber.return;
143
164
  }
144
165
  const newStack = new Array(stack.length);
145
166
  for (let i = 0; i < stack.length; i++) {
@@ -172,13 +193,29 @@ var shouldFilterFiber = (fiber) => {
172
193
  }
173
194
  }
174
195
  };
175
- var getNearestHostFiber = (fiber) => {
176
- let hostFiber = traverseFiber(fiber, isHostFiber);
196
+ var getNearestHostFiber = (fiber, ascending = false) => {
197
+ let hostFiber = traverseFiber(fiber, isHostFiber, ascending);
177
198
  if (!hostFiber) {
178
- hostFiber = traverseFiber(fiber, isHostFiber, true);
199
+ hostFiber = traverseFiber(fiber, isHostFiber, !ascending);
179
200
  }
180
201
  return hostFiber;
181
202
  };
203
+ var getNearestHostFibers = (fiber) => {
204
+ const hostFibers = [];
205
+ const traverse = (node) => {
206
+ let currentNode = node;
207
+ while (currentNode) {
208
+ if (isHostFiber(currentNode)) {
209
+ hostFibers.push(currentNode);
210
+ } else if (currentNode.child) {
211
+ traverse(currentNode.child);
212
+ }
213
+ currentNode = currentNode.sibling;
214
+ }
215
+ };
216
+ traverse(fiber);
217
+ return hostFibers;
218
+ };
182
219
  var traverseFiber = (fiber, selector, ascending = false) => {
183
220
  if (!fiber) return null;
184
221
  if (selector(fiber) === true) return fiber;
@@ -201,39 +238,44 @@ var getTimings = (fiber) => {
201
238
  return { selfTime, totalTime };
202
239
  };
203
240
  var hasMemoCache = (fiber) => {
204
- return Boolean(fiber.updateQueue?.memoCache);
241
+ return Boolean(
242
+ fiber.updateQueue?.memoCache
243
+ );
205
244
  };
206
245
  var getType = (type) => {
207
- if (typeof type === "function") {
208
- return type;
246
+ const currentType = type;
247
+ if (typeof currentType === "function") {
248
+ return currentType;
209
249
  }
210
- if (typeof type === "object" && type) {
211
- return getType(type.type || type.render);
250
+ if (typeof currentType === "object" && currentType) {
251
+ return getType(
252
+ currentType.type || currentType.render
253
+ );
212
254
  }
213
255
  return null;
214
256
  };
215
257
  var getDisplayName = (type) => {
216
- if (typeof type !== "function" && !(typeof type === "object" && type)) {
258
+ const currentType = type;
259
+ if (typeof currentType !== "function" && !(typeof currentType === "object" && currentType)) {
217
260
  return null;
218
261
  }
219
- const name = type.displayName || type.name || null;
262
+ const name = currentType.displayName || currentType.name || null;
220
263
  if (name) return name;
221
- type = getType(type);
222
- if (!type) return null;
223
- return type.displayName || type.name || null;
264
+ const unwrappedType = getType(currentType);
265
+ if (!unwrappedType) return null;
266
+ return unwrappedType.displayName || unwrappedType.name || null;
224
267
  };
225
- var isUsingRDT = () => globalThis.__REACT_DEVTOOLS_BACKEND_MANAGER_INJECTED__ != null;
268
+ var isUsingRDT = () => "reactDevtoolsAgent" in getRDTHook();
226
269
  var detectReactBuildType = (renderer) => {
227
- try {
270
+ return safeTry(() => {
228
271
  if (typeof renderer.version === "string" && renderer.bundleType > 0) {
229
272
  return "development";
230
273
  }
231
- } catch {
232
- }
233
- return "production";
274
+ return "production";
275
+ });
234
276
  };
235
277
  var checkDCE = (fn) => {
236
- try {
278
+ safeTry(() => {
237
279
  const code = Function.prototype.toString.call(fn);
238
280
  if (code.indexOf("^_^") > -1) {
239
281
  setTimeout(() => {
@@ -242,8 +284,7 @@ var checkDCE = (fn) => {
242
284
  );
243
285
  });
244
286
  }
245
- } catch {
246
- }
287
+ });
247
288
  };
248
289
  var NO_OP = () => {
249
290
  };
@@ -254,6 +295,7 @@ var installRDTHook = (onActive) => {
254
295
  checkDCE,
255
296
  supportsFiber: true,
256
297
  supportsFlight: true,
298
+ hasUnsupportedRendererAttached: false,
257
299
  renderers,
258
300
  onCommitFiberRoot: NO_OP,
259
301
  onCommitFiberUnmount: NO_OP,
@@ -267,22 +309,23 @@ var installRDTHook = (onActive) => {
267
309
  }
268
310
  return nextID;
269
311
  },
270
- _instrumentationSource: "bippy",
312
+ _instrumentationSource: BIPPY_INSTRUMENTATION_STRING,
271
313
  _instrumentationIsActive: false
272
314
  };
273
- try {
315
+ safeTry(() => {
274
316
  Object.defineProperty(globalThis, "__REACT_DEVTOOLS_GLOBAL_HOOK__", {
275
- configurable: true,
276
317
  value: rdtHook
277
318
  });
278
- } catch {
279
- }
319
+ });
280
320
  return rdtHook;
281
321
  };
282
322
  var getRDTHook = (onActive) => {
283
323
  let rdtHook = globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;
284
324
  if (rdtHook) onActive?.();
285
- if (!window.hasOwnProperty("__REACT_DEVTOOLS_GLOBAL_HOOK__")) {
325
+ if (!Object.prototype.hasOwnProperty.call(
326
+ globalThis,
327
+ "__REACT_DEVTOOLS_GLOBAL_HOOK__"
328
+ )) {
286
329
  rdtHook = installRDTHook(onActive);
287
330
  }
288
331
  return rdtHook;
@@ -398,7 +441,7 @@ var createFiberVisitor = ({
398
441
  onError
399
442
  }) => {
400
443
  return (_rendererID, root, state) => {
401
- const rootFiber = root.current;
444
+ const rootFiber = "current" in root ? root.current : root;
402
445
  const onRender = (fiber, phase) => onRenderWithoutState(fiber, phase, state);
403
446
  let rootInstance = rootInstanceMap.get(root);
404
447
  if (!rootInstance) {
@@ -406,8 +449,10 @@ var createFiberVisitor = ({
406
449
  rootInstanceMap.set(root, rootInstance);
407
450
  }
408
451
  const { prevFiber } = rootInstance;
409
- try {
410
- if (prevFiber !== null) {
452
+ safeTry(() => {
453
+ if (!rootFiber) {
454
+ unmountFiber(onRender, root);
455
+ } else if (prevFiber !== null) {
411
456
  const wasMounted = prevFiber && prevFiber.memoizedState != null && prevFiber.memoizedState.element != null && // A dehydrated root is not considered mounted
412
457
  prevFiber.memoizedState.isDehydrated !== true;
413
458
  const isMounted = rootFiber.memoizedState != null && rootFiber.memoizedState.element != null && // A dehydrated root is not considered mounted
@@ -425,56 +470,102 @@ var createFiberVisitor = ({
425
470
  unmountFiber(onRender, rootFiber);
426
471
  }
427
472
  } else {
428
- mountFiberRecursively(onRender, rootFiber, false);
473
+ mountFiberRecursively(onRender, rootFiber, true);
429
474
  }
430
- } catch (err) {
431
- if (onError) {
432
- onError(err);
433
- } else {
434
- throw err;
435
- }
436
- }
475
+ }, onError);
437
476
  rootInstance.prevFiber = rootFiber;
438
477
  };
439
478
  };
440
- var instrument = ({
441
- onCommitFiberRoot,
442
- onCommitFiberUnmount,
443
- onPostCommitFiberRoot,
444
- onActive,
445
- name
446
- }) => {
447
- const devtoolsHook = getRDTHook(onActive);
448
- devtoolsHook._instrumentationSource = name ?? "bippy";
449
- const prevOnCommitFiberRoot = devtoolsHook.onCommitFiberRoot;
450
- if (onCommitFiberRoot) {
451
- devtoolsHook.onCommitFiberRoot = (rendererID, root, priority) => {
452
- if (prevOnCommitFiberRoot)
453
- prevOnCommitFiberRoot(rendererID, root, priority);
454
- onCommitFiberRoot(rendererID, root, priority);
455
- };
456
- }
457
- const prevOnCommitFiberUnmount = devtoolsHook.onCommitFiberUnmount;
458
- if (onCommitFiberUnmount) {
459
- devtoolsHook.onCommitFiberUnmount = (rendererID, root) => {
460
- if (prevOnCommitFiberUnmount) prevOnCommitFiberUnmount(rendererID, root);
461
- onCommitFiberUnmount(rendererID, root);
462
- };
463
- }
464
- const prevOnPostCommitFiberRoot = devtoolsHook.onPostCommitFiberRoot;
465
- if (onPostCommitFiberRoot) {
466
- devtoolsHook.onPostCommitFiberRoot = (rendererID, root) => {
467
- if (prevOnPostCommitFiberRoot) {
468
- prevOnPostCommitFiberRoot(rendererID, root);
479
+ var instrument = (options) => {
480
+ return getRDTHook(() => {
481
+ const rdtHook = getRDTHook();
482
+ options.onActive?.();
483
+ rdtHook._instrumentationSource = options.name ?? BIPPY_INSTRUMENTATION_STRING;
484
+ const prevOnCommitFiberRoot = rdtHook.onCommitFiberRoot;
485
+ if (options.onCommitFiberRoot) {
486
+ rdtHook.onCommitFiberRoot = (rendererID, root, priority) => {
487
+ if (prevOnCommitFiberRoot)
488
+ prevOnCommitFiberRoot(rendererID, root, priority);
489
+ options.onCommitFiberRoot?.(rendererID, root, priority);
490
+ };
491
+ }
492
+ const prevOnCommitFiberUnmount = rdtHook.onCommitFiberUnmount;
493
+ if (options.onCommitFiberUnmount) {
494
+ rdtHook.onCommitFiberUnmount = (rendererID, root) => {
495
+ if (prevOnCommitFiberUnmount)
496
+ prevOnCommitFiberUnmount(rendererID, root);
497
+ options.onCommitFiberUnmount?.(rendererID, root);
498
+ };
499
+ }
500
+ const prevOnPostCommitFiberRoot = rdtHook.onPostCommitFiberRoot;
501
+ if (options.onPostCommitFiberRoot) {
502
+ rdtHook.onPostCommitFiberRoot = (rendererID, root) => {
503
+ if (prevOnPostCommitFiberRoot)
504
+ prevOnPostCommitFiberRoot(rendererID, root);
505
+ options.onPostCommitFiberRoot?.(rendererID, root);
506
+ };
507
+ }
508
+ });
509
+ };
510
+ var secure = (options) => {
511
+ const onActive = options.onActive;
512
+ options.onActive = () => {
513
+ let isSecure = true;
514
+ safeTry(() => {
515
+ onActive?.();
516
+ const rdtHook = getRDTHook();
517
+ for (const renderer of rdtHook.renderers.values()) {
518
+ const [majorVersion] = renderer.version.split(".");
519
+ if (Number(majorVersion) < 17) {
520
+ isSecure = false;
521
+ }
522
+ const buildType = detectReactBuildType(renderer);
523
+ if (buildType !== "development") {
524
+ isSecure = false;
525
+ }
469
526
  }
470
- };
527
+ });
528
+ if (!isSecure) {
529
+ options.onCommitFiberRoot = void 0;
530
+ options.onCommitFiberUnmount = void 0;
531
+ options.onPostCommitFiberRoot = void 0;
532
+ options.onActive = void 0;
533
+ return;
534
+ }
535
+ const onCommitFiberRoot = options.onCommitFiberRoot;
536
+ if (onCommitFiberRoot) {
537
+ options.onCommitFiberRoot = (rendererID, root, priority) => {
538
+ safeTry(() => onCommitFiberRoot(rendererID, root, priority));
539
+ };
540
+ }
541
+ const onCommitFiberUnmount = options.onCommitFiberUnmount;
542
+ if (onCommitFiberUnmount) {
543
+ options.onCommitFiberUnmount = (rendererID, root) => {
544
+ safeTry(() => onCommitFiberUnmount(rendererID, root));
545
+ };
546
+ }
547
+ const onPostCommitFiberRoot = options.onPostCommitFiberRoot;
548
+ if (onPostCommitFiberRoot) {
549
+ options.onPostCommitFiberRoot = (rendererID, root) => {
550
+ safeTry(() => onPostCommitFiberRoot(rendererID, root));
551
+ };
552
+ }
553
+ };
554
+ return options;
555
+ };
556
+ var safeTry = (fn, onError) => {
557
+ try {
558
+ return fn();
559
+ } catch (error) {
560
+ onError?.(error);
471
561
  }
472
- return devtoolsHook;
562
+ return null;
473
563
  };
474
- var isBrowser = typeof document !== "undefined" && typeof document.createElement === "function";
475
- var isNode = typeof process !== "undefined" && process.versions != null && process.versions.node != null;
476
- if (isBrowser || !isNode) {
564
+
565
+ // src/index.ts
566
+ if (typeof window !== "undefined" && // @ts-expect-error `document` may not be defined in some enviroments
567
+ (window.document?.createElement || window.navigator?.product === "ReactNative") && typeof process !== "undefined" && process.versions != null && process.versions.node != null) {
477
568
  installRDTHook();
478
569
  }
479
570
 
480
- export { CONCURRENT_MODE_NUMBER, CONCURRENT_MODE_SYMBOL_STRING, ChildDeletion, ClassComponentTag, Cloned, ContentReset, ContextConsumerTag, DEPRECATED_ASYNC_MODE_SYMBOL_STRING, DehydratedSuspenseComponent, DidCapture, ForwardRefTag, Fragment, FunctionComponentTag, HostComponentTag, HostHoistableTag, HostRoot, HostSingletonTag, HostText, Hydrating, LegacyHiddenComponent, MemoComponentTag, MutationMask, OffscreenComponent, OffscreenComponentTag, PerformedWork, Placement, Ref, SimpleMemoComponentTag, Snapshot, SuspenseComponentTag, Update, Visibility, createFiberVisitor, detectReactBuildType, didFiberCommit, didFiberRender, getDisplayName, getFiberStack, getMutatedHostFibers, getNearestHostFiber, getRDTHook, getTimings, getType, hasMemoCache, installRDTHook, instrument, isCompositeFiber, isHostFiber, isInstrumentationActive, isUsingRDT, isValidElement, mountFiberRecursively, shouldFilterFiber, traverseContexts, traverseFiber, traverseProps, traverseState, unmountFiber, unmountFiberChildrenRecursively, updateFiberRecursively };
571
+ export { BIPPY_INSTRUMENTATION_STRING, createFiberVisitor, detectReactBuildType, didFiberCommit, didFiberRender, getDisplayName, getFiberStack, getMutatedHostFibers, getNearestHostFiber, getNearestHostFibers, getRDTHook, getTimings, getType, hasMemoCache, installRDTHook, instrument, isCompositeFiber, isHostFiber, isInstrumentationActive, isUsingRDT, isValidElement, isValidFiber, mountFiberRecursively, safeTry, secure, shouldFilterFiber, traverseContexts, traverseEffects, traverseFiber, traverseProps, traverseState, unmountFiber, unmountFiberChildrenRecursively, updateFiberRecursively, version };
package/package.json CHANGED
@@ -1,82 +1,85 @@
1
1
  {
2
- "name": "bippy",
3
- "version": "0.0.24",
4
- "description": "a hacky way to get fibers from react",
5
- "keywords": [
6
- "react",
7
- "react-instrumentation",
8
- "react instrumentation",
9
- "fiber",
10
- "internals"
11
- ],
12
- "homepage": "https://github.com/aidenybai/bippy#readme",
13
- "bugs": {
14
- "url": "https://github.com/aidenybai/bippy/issues"
15
- },
16
- "repository": {
17
- "type": "git",
18
- "url": "git+https://github.com/aidenybai/bippy.git"
19
- },
20
- "license": "MIT",
21
- "author": {
22
- "name": "Aiden Bai",
23
- "email": "aiden@million.dev"
24
- },
25
- "type": "module",
26
- "exports": {
27
- "./package.json": "./package.json",
28
- ".": {
29
- "import": {
30
- "types": "./dist/index.d.ts",
31
- "default": "./dist/index.js"
32
- },
33
- "require": {
34
- "types": "./dist/index.d.cts",
35
- "default": "./dist/index.cjs"
36
- }
37
- },
38
- "./dist/*": "./dist/*.js",
39
- "./dist/*.js": "./dist/*.js",
40
- "./dist/*.cjs": "./dist/*.cjs",
41
- "./dist/*.mjs": "./dist/*.mjs"
42
- },
43
- "main": "dist/index.js",
44
- "module": "dist/index.js",
45
- "types": "dist/index.d.ts",
46
- "files": [
47
- "dist",
48
- "bin",
49
- "package.json",
50
- "README.md",
51
- "LICENSE"
52
- ],
53
- "scripts": {
54
- "build": "NODE_ENV=production tsup",
55
- "dev": "NODE_ENV=development tsup --watch",
56
- "lint": "eslint 'src/**/*.{ts,tsx}' --fix",
57
- "prettier": "prettier --config .prettierrc.mjs -w src",
58
- "publint": "publint",
59
- "test": "vitest --dom",
60
- "test:watch": "vitest --dom --watch"
61
- },
62
- "devDependencies": {
63
- "@testing-library/react": "^16.1.0",
64
- "@types/react": "^18.3.12",
65
- "@types/react-dom": "^19.0.2",
66
- "@types/react-reconciler": "^0.28.8",
67
- "@vercel/style-guide": "^6.0.0",
68
- "eslint": "^8.57.1",
69
- "happy-dom": "^15.11.7",
70
- "prettier": "^3.3.3",
71
- "publint": "^0.2.12",
72
- "react": "*",
73
- "react-dom": "*",
74
- "react-reconciler": "^0.29.2",
75
- "terser": "^5.36.0",
76
- "tsup": "^8.2.4",
77
- "vitest": "^2.1.8"
78
- },
79
- "publishConfig": {
80
- "access": "public"
81
- }
2
+ "name": "bippy",
3
+ "version": "0.1.0",
4
+ "description": "a hacky way to get fibers from react",
5
+ "keywords": [
6
+ "react",
7
+ "react-instrumentation",
8
+ "react instrumentation",
9
+ "fiber",
10
+ "internals"
11
+ ],
12
+ "homepage": "https://github.com/aidenybai/bippy#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/aidenybai/bippy/issues"
15
+ },
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/aidenybai/bippy.git"
19
+ },
20
+ "license": "MIT",
21
+ "author": {
22
+ "name": "Aiden Bai",
23
+ "email": "aiden@million.dev"
24
+ },
25
+ "type": "module",
26
+ "exports": {
27
+ "./package.json": "./package.json",
28
+ ".": {
29
+ "import": {
30
+ "types": "./dist/index.d.ts",
31
+ "default": "./dist/index.js"
32
+ },
33
+ "require": {
34
+ "types": "./dist/index.d.cts",
35
+ "default": "./dist/index.cjs"
36
+ }
37
+ },
38
+ "./dist/*": "./dist/*.js",
39
+ "./dist/*.js": "./dist/*.js",
40
+ "./dist/*.cjs": "./dist/*.cjs",
41
+ "./dist/*.mjs": "./dist/*.mjs"
42
+ },
43
+ "main": "dist/index.js",
44
+ "module": "dist/index.js",
45
+ "types": "dist/index.d.ts",
46
+ "files": [
47
+ "dist",
48
+ "bin",
49
+ "package.json",
50
+ "README.md",
51
+ "LICENSE"
52
+ ],
53
+ "scripts": {
54
+ "build": "NODE_ENV=production tsup",
55
+ "dev": "NODE_ENV=development tsup --watch",
56
+ "lint": "pnpm biome lint --write src/*.ts",
57
+ "format": "pnpm biome format --write src/*.ts",
58
+ "check": "pnpm biome check --write src/*.ts",
59
+ "publint": "publint",
60
+ "test": "vitest --dom",
61
+ "coverage": "vitest run --coverage --dom"
62
+ },
63
+ "devDependencies": {
64
+ "@biomejs/biome": "1.9.4",
65
+ "@testing-library/react": "^16.1.0",
66
+ "@types/react": "^18.3.12",
67
+ "@types/react-dom": "^19.0.2",
68
+ "@types/react-reconciler": "^0.28.8",
69
+ "@vitest/coverage-istanbul": "2.1.8",
70
+ "@vitest/ui": "^2.1.8",
71
+ "happy-dom": "^15.11.7",
72
+ "prettier": "^3.3.3",
73
+ "publint": "^0.2.12",
74
+ "react": "19.0.0",
75
+ "react-dom": "19.0.0",
76
+ "react-reconciler": "^0.29.2",
77
+ "semver": "^7.6.3",
78
+ "terser": "^5.36.0",
79
+ "tsup": "^8.2.4",
80
+ "vitest": "^2.1.8"
81
+ },
82
+ "publishConfig": {
83
+ "access": "public"
84
+ }
82
85
  }