return false;
}
-/** @type {Record<string, boolean>} */
-const seen = {};
+/** @type {Set<string> | null} */
+let seen = null;
/**
* Used for server-side resolution, to replicate Vite's CSS loading behaviour in production.
);
const csp_nonce = csp_nonce_meta?.nonce || csp_nonce_meta?.getAttribute('nonce');
+ seen ??= new Set(
+ Array.from(document.querySelectorAll('link[rel="stylesheet"]')).map((link) => {
+ return /** @type {HTMLLinkElement} */ (link).href;
+ })
+ );
+
for (const dep of deps) {
- if (dep in seen) continue;
- seen[dep] = true;
+ const href = new URL(dep, document.baseURI).href;
- if (document.querySelector(`link[href="${dep}"][rel="stylesheet"]`)) {
- continue;
- }
+ if (seen.has(href)) continue;
+ seen.add(href);
const link = document.createElement('link');
link.rel = 'stylesheet';
// we start watching requests
await page.goto('/routing/form-get', { waitUntil: 'load' });
- expect(await page.textContent('h1')).toBe('...');
- expect(await page.textContent('h2')).toBe('enter');
- expect(await page.textContent('h3')).toBe('...');
+ await expect(page.locator('h1')).toHaveText('...');
+ await expect(page.locator('h2')).toHaveText('enter');
+ await expect(page.locator('h3')).toHaveText('...');
/** @type {string[]} */
const requests = [];
await page.locator('button').click();
// Filter out server-side route resolution request
+ await expect(page.locator('h1')).toHaveText('updated');
+ await expect(page.locator('h2')).toHaveText('form');
+ await expect(page.locator('h3')).toHaveText('bar');
expect(requests.filter((r) => !r.includes('__route.js'))).toEqual([]);
- expect(await page.textContent('h1')).toBe('updated');
- expect(await page.textContent('h2')).toBe('form');
- expect(await page.textContent('h3')).toBe('bar');
});
test('responds to <form target="_blank"> submission with new tab', async ({ page }) => {