// @ts-nocheck - On isolated test, this will be a type error. import type { Playwright } from '../../../lib/next-webdriver' async function getMetadataLinks(browser: Playwright) { const links = await browser.locator('link').evaluateAll((elements: any[]) => { return elements .filter((el) => { if (el.href.includes('/_next/static')) { return false } return [ '/favicon.ico', '/manifest.json', '/manifest.webmanifest', // Below may have suffixes like /icon1.png, /icon2.png, etc. // Or has suffixes like /icon-xxxxxx.png, /icon-image-yyyyyy.jpg, etc. '/icon', '/apple-icon', '/opengraph-image', '/twitter-image', ].some((file) => new URL(el.href, window.location.origin).pathname.includes(file) ) }) .map((el) => ({ href: new URL(el.href, window.location.origin).pathname, rel: el.rel, ...(el.type && { type: el.type }), })) .sort((a, b) => a.href.localeCompare(b.href)) }) return links } async function getMetadataMetas(browser: Playwright) { const metas = await browser.locator('meta').evaluateAll((elements: any[]) => { return elements .filter((meta) => { if (!meta.name && !meta.hasAttribute('property')) { return false } const attr = meta.name || meta.getAttribute('property') || '' return [ 'og:', 'twitter:', 'viewport', 'description', 'keywords', 'robots', ].some( (prefix) => attr.startsWith(prefix) || attr === prefix.slice(0, -1) ) }) .map((el) => ({ ...(el.name && { name: el.name }), ...(el.hasAttribute('property') && { property: el.getAttribute('property'), }), })) .sort((a, b) => { if (a.name && !b.name) return -1 if (!a.name && b.name) return 1 return (a.name || a.property || '').localeCompare( b.name || b.property || '' ) }) }) return metas } export async function getCommonMetadataHeadTags(browser: Playwright) { const [links, metas] = await Promise.all([ getMetadataLinks(browser), getMetadataMetas(browser), ]) return { links, metas } }