import puppeteer from "puppeteer-core"; const url = process.argv[2] || "https://tile-server.ru/#14/55.7558/37.6173"; const browser = await puppeteer.launch({ executablePath: "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe", headless: "new", args: ["--no-sandbox", "--use-gl=angle", "--enable-webgl"] }); const page = await browser.newPage(); await page.setViewport({ width: 1400, height: 900 }); await page.evaluateOnNewDocument(() => { const wrap = () => { if (!window.maplibregl || window.__mapHooked) { return; } window.__mapHooked = true; const Orig = window.maplibregl.Map; window.maplibregl.Map = function (options) { const inner = options.transformRequest; options.transformRequest = (reqUrl, resourceType) => { console.log("TRANSFORM", resourceType, reqUrl); return inner ? inner(reqUrl, resourceType) : { url: reqUrl }; }; const map = new Orig(options); map.on("error", (e) => { const err = e.error; console.log("MAPERR", err && (err.message || String(err)), err && err.status, err && err.url); }); window.__map = map; return map; }; }; setInterval(wrap, 5); }); page.on("console", (msg) => console.log("CONSOLE", msg.type(), msg.text())); page.on("pageerror", (err) => console.log("PAGEERROR", err.message)); await page.goto(url, { waitUntil: "domcontentloaded", timeout: 45000 }); await new Promise((r) => setTimeout(r, 10000)); const info = await page.evaluate(async () => { const map = window.__map; const layers = ["water", "building", "transportation", "boundary", "place"]; const source = {}; const rendered = {}; if (map) { for (const layer of layers) { try { source[layer] = map.querySourceFeatures("openmaptiles", { sourceLayer: layer }).length; } catch (e) { source[layer] = String(e); } } const feats = map.queryRenderedFeatures(); for (const f of feats) { rendered[f.layer.id] = (rendered[f.layer.id] || 0) + 1; } } const cacheInfo = []; try { const caches = map.style.sourceCaches || map.style._sourceCaches; const cache = caches.openmaptiles || caches["openmaptiles"]; const tiles = cache._tiles || cache.tiles || {}; for (const [id, tile] of Object.entries(tiles)) { cacheInfo.push({ id, state: tile.state, keys: Object.keys(tile).sort(), raw: tile.rawTileData ? tile.rawTileData.byteLength : null, latest: tile.latestRawTileData ? tile.latestRawTileData.byteLength : null, vt: tile.vtLayers ? Object.keys(tile.vtLayers) : null, idx: Boolean(tile.latestFeatureIndex) }); } } catch (e) { cacheInfo.push({ err: String(e) }); } const probeFetch = await fetch("https://tile-server.ru/api/v1/tiles/central-fed-district/14/9904/5121.pbf?v=2"); const probeBuf = await probeFetch.arrayBuffer(); return { hash: location.hash, live: document.getElementById("live-coords")?.textContent, areTilesLoaded: map.areTilesLoaded(), source, rendered, renderedTotal: map ? map.queryRenderedFeatures().length : null, cacheInfo, mainFetch: { status: probeFetch.status, type: probeFetch.headers.get("content-type"), encoding: probeFetch.headers.get("content-encoding"), len: probeBuf.byteLength } }; }); console.log("INFO", JSON.stringify(info)); await page.screenshot({ path: "c:/Users/ggpo1/Desktop/tile-server/.tmp-tiles/shots/prod-hook.png" }); await browser.close();