chore: establish YCode replication baseline and TODO
This commit is contained in:
commit
6dc59f89ba
1118 files changed
+196002
No files matched your search
@@ -0,0 +1,45 @@
|
||||
// Inspect only YCode's already-built, isolated homepage fixture. No WorkBuddy connection.
|
||||
const fs = require('node:fs')
|
||||
const path = require('node:path')
|
||||
const { app, BrowserWindow } = require('electron')
|
||||
app.disableHardwareAcceleration()
|
||||
const root = path.resolve(__dirname, '..')
|
||||
const output = path.join(root, '.tmp', 'home-visual-audit-20261016')
|
||||
fs.mkdirSync(output, { recursive: true })
|
||||
app.setPath('userData', path.join(output, 'user-data'))
|
||||
const selectors = [
|
||||
'.wb-home-header', '.wb-home-header__title', '.wb-scene-tabs',
|
||||
'.wb-segmented', '.wb-segmented-item', '.wb-home-composer__chips',
|
||||
'.quick-actions__item', '.wb-home-composer__input-slot', '.cr-input-container',
|
||||
'.composer__toolbar', '.composer__toolbar-left', '.composer__toolbar-right',
|
||||
'.wb-home-route__growth-buddy', '.source-home-robot img',
|
||||
'.wb-home-composer__below-input',
|
||||
]
|
||||
const properties = ['font-family', 'font-size', 'font-weight', 'line-height', 'letter-spacing',
|
||||
'color', 'background-color', 'border-radius', 'border-top-width', 'border-top-color',
|
||||
'padding-top', 'padding-right', 'padding-bottom', 'padding-left', 'gap', 'box-shadow',
|
||||
'text-rendering', '-webkit-font-smoothing', 'transform', 'opacity']
|
||||
app.whenReady().then(async () => {
|
||||
const win = new BrowserWindow({ width: 1336, height: 901, useContentSize: true,
|
||||
frame: false, show: false, webPreferences: { contextIsolation: true, nodeIntegration: false } })
|
||||
const errors = []
|
||||
win.webContents.on('console-message', (_event, level, message) => { if (level === 3) errors.push(message) })
|
||||
const fixture = path.join(root, '.tmp', 'home-native-ui', 'index.html')
|
||||
await win.loadFile(fixture)
|
||||
await new Promise(resolve => setTimeout(resolve, 1350))
|
||||
const nodes = await win.webContents.executeJavaScript(`(${function (selectors, properties) {
|
||||
return selectors.flatMap(selector => Array.from(document.querySelectorAll(selector), (el, index) => {
|
||||
const r = el.getBoundingClientRect(), style = getComputedStyle(el)
|
||||
return { selector, index, text: el.textContent, bounds: [r.x, r.y, r.width, r.height],
|
||||
styles: Object.fromEntries(properties.map(key => [key, style.getPropertyValue(key)])) }
|
||||
}))
|
||||
}.toString()})(${JSON.stringify(selectors)},${JSON.stringify(properties)})`)
|
||||
fs.writeFileSync(path.join(output, 'native-layout.json'), JSON.stringify({
|
||||
capturedAt: new Date().toISOString(), fixture, viewport: { width: 1336, height: 901 }, nodes, errors,
|
||||
scope: 'Frozen YCode fixture bundle, not the production app and not the original WorkBuddy runtime',
|
||||
}, null, 2))
|
||||
fs.writeFileSync(path.join(output, 'native.png'), (await win.webContents.capturePage()).toPNG())
|
||||
win.destroy()
|
||||
console.log(JSON.stringify({ output, nodes: nodes.length, errors }))
|
||||
app.quit()
|
||||
}).catch(error => { console.error(error); app.exit(1) })
|
||||
Reference in new issue
Block a user