TypeScript 97.4%
SQL 1%
JavaScript 0.9%
CSS 0.6%
1import { chromium } from "@playwright/test";2const b = await chromium.launch();3const p = await b.newPage({ viewport: { width: 390, height: 844 }, isMobile: true, hasTouch: true });4await p.goto((process.env.QA_BASE ?? "http://localhost:3000") + (process.argv[2] ?? "/"), { waitUntil: "networkidle" });5await p.waitForTimeout(800);6for (let y = 0; y < 9000; y += 800) {7 await p.evaluate((yy) => window.scrollTo(0, yy), y);8 await p.waitForTimeout(250);9}10const out = await p.evaluate(() => {11 const vw = window.innerWidth; const res = [];12 const inScroller = (el) => { let q = el.parentElement; while (q && q !== document.body) { const o = getComputedStyle(q).overflowX; if (o === 'auto' || o === 'scroll') return true; q = q.parentElement; } return false; };13 for (const el of document.querySelectorAll("body *")) {14 const r = el.getBoundingClientRect();15 if (r.width > 0 && r.right > vw + 1 && r.left < vw && !el.closest(".snap-row, .marquee, [data-allow-overflow]") && !inScroller(el)) {16 res.push({ tag: el.tagName, cls: (el.className || "").toString().slice(0, 120), text: el.textContent?.trim().slice(0, 60), right: Math.round(r.right), parent: (el.parentElement?.className || "").toString().slice(0, 100) });17 }18 }19 return { docOverflow: document.documentElement.scrollWidth - vw, res: res.slice(0, 8) };20});21console.log(JSON.stringify(out, null, 1));22await b.close();23