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
81 lines
2.3 KiB
TypeScript
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 }
|
|
}
|