Files
2026-09-21 03:53:15 +03:00

97 lines
3.9 KiB
JavaScript

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();