Skip to content

Commit a7c212c

Browse files
fix(hydrate): ensure beforeHydrateFn and afterHydrateFn always return a function (#5890)
1 parent 23f2b47 commit a7c212c

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

src/hydrate/runner/render.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ async function render(win: MockWindow, opts: HydrateFactoryOptions, results: Hyd
130130
}
131131

132132
initializeWindow(win, win.document, opts, results);
133-
const beforeHydrateFn = typeof opts.beforeHydrate === 'function' ? opts.beforeHydrate(win.document) : NOOP;
133+
const beforeHydrateFn = typeof opts.beforeHydrate === 'function' ? opts.beforeHydrate : NOOP;
134134
try {
135135
await Promise.resolve(beforeHydrateFn(win.document));
136136
return new Promise<HydrateResults>((resolve) => hydrateFactory(win, opts, results, afterHydrate, resolve));
@@ -162,7 +162,7 @@ async function afterHydrate(
162162
results: HydrateResults,
163163
resolve: (results: HydrateResults) => void,
164164
) {
165-
const afterHydrateFn = typeof opts.afterHydrate === 'function' ? opts.afterHydrate(win.document) : NOOP;
165+
const afterHydrateFn = typeof opts.afterHydrate === 'function' ? opts.afterHydrate : NOOP;
166166
try {
167167
await Promise.resolve(afterHydrateFn(win.document));
168168
return resolve(finalizeHydrate(win, win.document, opts, results));

test/end-to-end/src/declarative-shadow-dom/test.e2e.ts

+14
Original file line numberDiff line numberDiff line change
@@ -253,4 +253,18 @@ describe('renderToString', () => {
253253
`<car-detail class=\"sc-car-list\" custom-hydrate-flag=\"\" c-id=\"2.4.2.0\" s-id=\"4\"><!--r.4--><section class=\"sc-car-list\" c-id=\"4.0.0.0\"><!--t.4.1.1.0-->2023 VW Beetle</section></car-detail>`,
254254
);
255255
});
256+
257+
it('calls beforeHydrate and afterHydrate function hooks', async () => {
258+
const beforeHydrate = jest.fn((doc) => (doc.querySelector('div').textContent = 'Hello Universe'));
259+
const afterHydrate = jest.fn();
260+
261+
const { html } = await renderToString('<div>Hello World</div>', {
262+
beforeHydrate,
263+
afterHydrate,
264+
});
265+
266+
expect(beforeHydrate).toHaveBeenCalledTimes(1);
267+
expect(afterHydrate).toHaveBeenCalledTimes(1);
268+
expect(html).toContain('<body><div>Hello Universe</div></body>');
269+
});
256270
});

0 commit comments

Comments
 (0)