Files
Arian Tron 61f56f997c
Some checks failed
Test examples / Test Examples (20) (push) Has been cancelled
Test examples / Test Examples (22) (push) Has been cancelled
Lock Threads / action (push) Has been cancelled
Trigger Release / start (push) Has been cancelled
Stale issue handler / stale (push) Has been cancelled
Update Font Data / create-pull-request (push) Has been cancelled
build-and-deploy / deploy-target (push) Has been cancelled
build-and-deploy / build (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / build-wasm (nodejs) (push) Has been cancelled
build-and-deploy / build-wasm (web) (push) Has been cancelled
build-and-deploy / Deploy preview tarball (push) Has been cancelled
build-and-deploy / Potentially publish release (push) Has been cancelled
build-and-deploy / publish-turbopack-npm-packages (push) Has been cancelled
build-and-deploy / Deploy examples (push) Has been cancelled
build-and-deploy / thank you, build (push) Has been cancelled
build-and-deploy / Upload Turbopack Bytesize metrics to Datadog (push) Has been cancelled
Rspack Next.js development integration tests / Rspack integration tests (push) Has been cancelled
Rspack Next.js production integration tests / Rspack integration tests (push) Has been cancelled
Turbopack Next.js development integration tests / Next.js integration tests (push) Has been cancelled
Turbopack Next.js production integration tests / Next.js integration tests (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack development test manifest (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack production test manifest (push) Has been cancelled
Upload bundler test manifests to areweturboyet.com / Upload test results (push) Has been cancelled
Update React / create-pull-request (push) Has been cancelled
test-e2e-project-reset-cron / reset-test-project (push) Has been cancelled
Notify about the top 15 issues/PRs/feature requests (most reacted) in the last 90 days / run (push) Has been cancelled
first commit
2026-03-10 19:37:31 +03:30

81 lines
2.3 KiB
TypeScript

// @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 }
}