Files
speckle-server/scratch/audit-lite-object.mjs
T

41 lines
1.7 KiB
JavaScript

import puppeteer from 'puppeteer'
import fs from 'node:fs'
const url = 'http://localhost:5174/?projectId=4ed64f05c0&objectId=b8ff7fa87ba35b2ca40863d3003ead1d'
const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox'] })
const page = await browser.newPage()
await page.setViewport({ width: 1200, height: 800, deviceScaleFactor: 1 })
const logs = []
page.on('console', (msg) => logs.push(`${msg.type()}: ${msg.text()}`))
page.on('pageerror', (err) => logs.push(`pageerror: ${err.message}`))
await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 })
await page.waitForFunction(() => document.querySelector('#log')?.textContent?.includes('Done.'), { timeout: 180000 })
await page.screenshot({ path: 'scratch/lite-viewer-object.png', fullPage: false })
const data = await page.evaluate(() => {
const canvas = document.querySelector('#viewer canvas')
const log = document.querySelector('#log')?.textContent
const rect = canvas?.getBoundingClientRect()
let sample = null
if (canvas) {
const c = document.createElement('canvas')
c.width = canvas.width
c.height = canvas.height
const ctx = c.getContext('2d')
ctx.drawImage(canvas, 0, 0)
const img = ctx.getImageData(0, 0, c.width, c.height).data
let nonBg = 0
let min = 255
let max = 0
for (let i = 0; i < img.length; i += 16) {
const r = img[i], g = img[i + 1], b = img[i + 2]
min = Math.min(min, r, g, b)
max = Math.max(max, r, g, b)
if (!(Math.abs(r - 223) < 4 && Math.abs(g - 228) < 4 && Math.abs(b - 234) < 4)) nonBg++
}
sample = { width: canvas.width, height: canvas.height, min, max, nonBg }
}
return { log, rect, sample }
})
console.log(JSON.stringify({ url, data, logs }, null, 2))
await browser.close()