* listeners.
*/
export type HydrationStrategy = (
- hydrate: () => void,
+ hydrate: () => void | Promise<any>,
forEachElement: (cb: (el: Element) => any) => void,
) => (() => void) | void
(hydrate, forEach) => {
if (isString(interactions)) interactions = [interactions]
let hasHydrated = false
- const doHydrate = (e: Event) => {
+ const doHydrate = async (e: Event) => {
if (!hasHydrated) {
hasHydrated = true
teardown()
- hydrate()
+ // eslint-disable-next-line no-restricted-syntax
+ await hydrate()
// replay event
e.target!.dispatchEvent(new (e.constructor as any)(e.type, e))
}
expect(await page().evaluate(() => window.isHydrated)).toBe(false)
// wait for hydration
await page().waitForFunction(() => window.isHydrated)
- // assert message order: hyration should happen after already queued main thread work
- expect(messages.slice(1)).toMatchObject(['resolve', 'busy', 'hydrated'])
+ // assert message order
+ expect(messages.slice(1)).toMatchObject(['resolve', 'hydrated'])
await assertHydrationSuccess()
})