Skip to content

Commit

Permalink
fix(hydrate): ensure beforeHydrateFn and afterHydrateFn always return…
Browse files Browse the repository at this point in the history
… a function (#5890)
  • Loading branch information
christian-bromann authored Jul 8, 2024
1 parent 23f2b47 commit a7c212c
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/hydrate/runner/render.ts
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ async function render(win: MockWindow, opts: HydrateFactoryOptions, results: Hyd
}

initializeWindow(win, win.document, opts, results);
const beforeHydrateFn = typeof opts.beforeHydrate === 'function' ? opts.beforeHydrate(win.document) : NOOP;
const beforeHydrateFn = typeof opts.beforeHydrate === 'function' ? opts.beforeHydrate : NOOP;
try {
await Promise.resolve(beforeHydrateFn(win.document));
return new Promise<HydrateResults>((resolve) => hydrateFactory(win, opts, results, afterHydrate, resolve));
Expand Down Expand Up @@ -162,7 +162,7 @@ async function afterHydrate(
results: HydrateResults,
resolve: (results: HydrateResults) => void,
) {
const afterHydrateFn = typeof opts.afterHydrate === 'function' ? opts.afterHydrate(win.document) : NOOP;
const afterHydrateFn = typeof opts.afterHydrate === 'function' ? opts.afterHydrate : NOOP;
try {
await Promise.resolve(afterHydrateFn(win.document));
return resolve(finalizeHydrate(win, win.document, opts, results));
Expand Down
14 changes: 14 additions & 0 deletions test/end-to-end/src/declarative-shadow-dom/test.e2e.ts
Original file line number Diff line number Diff line change
Expand Up @@ -253,4 +253,18 @@ describe('renderToString', () => {
`<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>`,
);
});

it('calls beforeHydrate and afterHydrate function hooks', async () => {
const beforeHydrate = jest.fn((doc) => (doc.querySelector('div').textContent = 'Hello Universe'));
const afterHydrate = jest.fn();

const { html } = await renderToString('<div>Hello World</div>', {
beforeHydrate,
afterHydrate,
});

expect(beforeHydrate).toHaveBeenCalledTimes(1);
expect(afterHydrate).toHaveBeenCalledTimes(1);
expect(html).toContain('<body><div>Hello Universe</div></body>');
});
});

0 comments on commit a7c212c

Please sign in to comment.