Skip to content

Commit 2986cde

Browse files
committed
move render into createProfiler, remove Wrapper prop
1 parent 9b6fdee commit 2986cde

File tree

4 files changed

+38
-45
lines changed

4 files changed

+38
-45
lines changed

src/index.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
export type { NextRenderOptions, RenderStream } from "./profile/profile.js";
1+
export type {
2+
NextRenderOptions,
3+
RenderStream,
4+
RenderStreamWithRenderFn,
5+
} from "./profile/profile.js";
26
export {
37
createProfiler,
48
useTrackRenders,

src/profile/profile.tsx

+26-6
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { applyStackTrace, captureStackTrace } from "./traces.js";
66
import type { ProfilerContextValue } from "./context.js";
77
import { ProfilerContextProvider, useProfilerContext } from "./context.js";
88
import { disableActWarnings } from "./disableActWarnings.js";
9-
import { render } from "@testing-library/react";
9+
import { render as baseRender, RenderOptions } from "@testing-library/react";
1010

1111
export type ValidSnapshot =
1212
| void
@@ -80,9 +80,9 @@ export interface RenderStream<Snapshot extends ValidSnapshot>
8080
extends ProfiledComponentFields<Snapshot>,
8181
ProfiledComponentOnlyFields<Snapshot> {}
8282

83-
export interface RenderStreamWithWrapper<Snapshot extends ValidSnapshot>
83+
export interface RenderStreamWithRenderFn<Snapshot extends ValidSnapshot>
8484
extends RenderStream<Snapshot> {
85-
Wrapper: React.FC<{ children: React.ReactNode }>;
85+
render: typeof baseRender;
8686
}
8787

8888
export type ProfilerOptions<Snapshot extends ValidSnapshot> = {
@@ -108,7 +108,7 @@ export function createProfiler<Snapshot extends ValidSnapshot = void>({
108108
snapshotDOM = false,
109109
initialSnapshot,
110110
skipNonTrackingRenders,
111-
}: ProfilerOptions<Snapshot> = {}): RenderStreamWithWrapper<Snapshot> {
111+
}: ProfilerOptions<Snapshot> = {}): RenderStreamWithRenderFn<Snapshot> {
112112
let nextRender: Promise<Render<Snapshot>> | undefined;
113113
let resolveNextRender: ((render: Render<Snapshot>) => void) | undefined;
114114
let rejectNextRender: ((error: unknown) => void) | undefined;
@@ -221,7 +221,27 @@ export function createProfiler<Snapshot extends ValidSnapshot = void>({
221221
);
222222
}
223223

224-
const Profiler: RenderStreamWithWrapper<Snapshot> = Object.assign(
224+
const render = ((
225+
ui: React.ReactNode,
226+
options?: RenderOptions<any, any, any>
227+
) => {
228+
return baseRender(ui, {
229+
...options,
230+
wrapper: (props) => {
231+
let elem: React.ReactNode = React.createElement(
232+
Wrapper,
233+
undefined,
234+
props.children
235+
);
236+
if (options?.wrapper) {
237+
elem = React.createElement(options.wrapper, undefined, elem);
238+
}
239+
return elem;
240+
},
241+
});
242+
}) as typeof baseRender;
243+
244+
const Profiler: RenderStreamWithRenderFn<Snapshot> = Object.assign(
225245
{
226246
replaceSnapshot,
227247
mergeSnapshot,
@@ -318,7 +338,7 @@ export function createProfiler<Snapshot extends ValidSnapshot = void>({
318338
return nextRender;
319339
},
320340
} satisfies ProfiledComponentFields<Snapshot>,
321-
{ Wrapper }
341+
{ render }
322342
);
323343
return Profiler;
324344
}

src/renderHookToSnapshotStream.ts

+3-17
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import { render, RenderHookOptions } from "@testing-library/react";
1+
import { RenderHookOptions } from "@testing-library/react";
22
import {
33
createProfiler,
44
ProfiledComponentFields,
5-
RenderStream,
65
ValidSnapshot,
76
} from "./profile/profile.js";
87
import { Render } from "./profile/Render.js";
@@ -47,7 +46,7 @@ export function renderHookToSnapshotStream<
4746
unmount: () => void;
4847
},
4948
] {
50-
const { Wrapper, ...stream } = createProfiler<ReturnValue>();
49+
const { render, ...stream } = createProfiler<ReturnValue>();
5150

5251
const ProfiledHook: React.FC<Props> = (props) => {
5352
stream.replaceSnapshot(renderCallback(props));
@@ -56,20 +55,7 @@ export function renderHookToSnapshotStream<
5655

5756
const { rerender: baseRerender, unmount } = render(
5857
createElement(ProfiledHook, initialProps),
59-
{
60-
...options,
61-
wrapper(props) {
62-
let elem: React.ReactNode = createElement(
63-
Wrapper,
64-
undefined,
65-
props.children
66-
);
67-
if (options.wrapper) {
68-
elem = createElement(options.wrapper, undefined, elem);
69-
}
70-
return elem;
71-
},
72-
}
58+
options
7359
);
7460

7561
function rerender(rerenderCallbackProps: Props) {

src/renderToRenderStream.ts

+4-21
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {
2-
render,
32
type RenderOptions as BaseOptions,
43
type RenderResult as BaseResult,
54
} from "@testing-library/react";
@@ -10,15 +9,14 @@ import {
109
ProfilerOptions,
1110
ValidSnapshot,
1211
} from "./profile/profile.js";
13-
import { createElement } from "react";
1412

1513
type RenderOptions<Snapshot extends ValidSnapshot = void> = BaseOptions &
1614
ProfilerOptions<Snapshot>;
1715

1816
type RenderResult<Snapshot extends ValidSnapshot = void> = [
1917
Stream: ProfiledComponentFields<Snapshot> &
2018
ProfiledComponentOnlyFields<Snapshot>,
21-
resultPromise: Promise<BaseResult>,
19+
renderResultPromise: Promise<BaseResult>,
2220
];
2321

2422
/**
@@ -35,27 +33,12 @@ export function renderToRenderStream<Snapshot extends ValidSnapshot = void>(
3533
...options
3634
}: RenderOptions<Snapshot> = {}
3735
): RenderResult<Snapshot> {
38-
const { Wrapper, ...stream } = createProfiler<Snapshot>({
36+
const { render, ...stream } = createProfiler<Snapshot>({
3937
onRender,
4038
snapshotDOM,
4139
initialSnapshot,
4240
skipNonTrackingRenders,
4341
});
44-
const result = Promise.resolve().then(() =>
45-
render(ui, {
46-
...options,
47-
wrapper(props) {
48-
let elem: React.ReactNode = createElement(
49-
Wrapper,
50-
undefined,
51-
props.children
52-
);
53-
if (options.wrapper) {
54-
elem = createElement(options.wrapper, undefined, elem);
55-
}
56-
return elem;
57-
},
58-
})
59-
);
60-
return [stream, result];
42+
const renderResultPromise = Promise.resolve().then(() => render(ui, options));
43+
return [stream, renderResultPromise];
6144
}

0 commit comments

Comments
 (0)