Skip to content

Commit 3983beb

Browse files
committed
extract useTrackRenders into separate file
1 parent 67a3e4e commit 3983beb

File tree

2 files changed

+39
-37
lines changed

2 files changed

+39
-37
lines changed

src/renderStream/createRenderStream.tsx

Lines changed: 1 addition & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {render as baseRender, RenderOptions} from '@testing-library/react'
44
import {Assertable, markAssertable} from '../assertable.js'
55
import {RenderInstance, type Render, type BaseRender} from './Render.js'
66
import {type RenderStreamContextValue} from './context.js'
7-
import {RenderStreamContextProvider, useRenderStreamContext} from './context.js'
7+
import {RenderStreamContextProvider} from './context.js'
88
import {disableActWarnings} from './disableActWarnings.js'
99

1010
export type ValidSnapshot =
@@ -337,42 +337,6 @@ export function createRenderStream<Snapshot extends ValidSnapshot = void>({
337337
return stream
338338
}
339339

340-
function resolveR18HookOwner(): React.ComponentType | undefined {
341-
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
342-
return (React as any).__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED
343-
?.ReactCurrentOwner?.current?.elementType
344-
}
345-
346-
function resolveR19HookOwner(): React.ComponentType | undefined {
347-
/* eslint-disable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call */
348-
return (
349-
React as any
350-
).__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE?.A?.getOwner()
351-
.elementType
352-
}
353-
354-
export function useTrackRenders({name}: {name?: string} = {}) {
355-
const component = name ?? resolveR18HookOwner() ?? resolveR19HookOwner()
356-
357-
if (!component) {
358-
throw new Error(
359-
'useTrackRenders: Unable to determine component. Please ensure the hook is called inside a rendered component or provide a `name` option.',
360-
)
361-
}
362-
363-
const ctx = useRenderStreamContext()
364-
365-
if (!ctx) {
366-
throw new Error(
367-
'useTrackRenders: A Render Stream must be created and rendered to track component renders',
368-
)
369-
}
370-
371-
React.useLayoutEffect(() => {
372-
ctx.renderedComponents.unshift(component)
373-
})
374-
}
375-
376340
function rethrowWithCapturedStackTrace(constructorOpt: Function | undefined) {
377341
return function catchFn(error: unknown) {
378342
if (error instanceof Object) {

src/renderStream/useTrackRenders.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import React from 'rehackt'
2+
import {useRenderStreamContext} from './context.js'
3+
4+
function resolveR18HookOwner(): React.ComponentType | undefined {
5+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
6+
return (React as any).__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED
7+
?.ReactCurrentOwner?.current?.elementType
8+
}
9+
10+
function resolveR19HookOwner(): React.ComponentType | undefined {
11+
/* eslint-disable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call */
12+
return (
13+
React as any
14+
).__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE?.A?.getOwner()
15+
.elementType
16+
}
17+
18+
export function useTrackRenders({name}: {name?: string} = {}) {
19+
const component = name ?? resolveR18HookOwner() ?? resolveR19HookOwner()
20+
21+
if (!component) {
22+
throw new Error(
23+
'useTrackRenders: Unable to determine component. Please ensure the hook is called inside a rendered component or provide a `name` option.',
24+
)
25+
}
26+
27+
const ctx = useRenderStreamContext()
28+
29+
if (!ctx) {
30+
throw new Error(
31+
'useTrackRenders: A Render Stream must be created and rendered to track component renders',
32+
)
33+
}
34+
35+
React.useLayoutEffect(() => {
36+
ctx.renderedComponents.unshift(component)
37+
})
38+
}

0 commit comments

Comments
 (0)