feat: complete WorkBuddy parity and Windows release workflow
This commit is contained in:
1 parent
143516b3a8
commit
d5512df549
434 files changed
+54977
-1854
No files matched your search
@@ -0,0 +1,52 @@
|
||||
const fs = require('node:fs')
|
||||
const assert = require('node:assert/strict')
|
||||
const crypto = require('node:crypto')
|
||||
const postcss = require('postcss')
|
||||
const evidence = JSON.parse(fs.readFileSync('.tmp/rea-todo20-new-project-dialog.json', 'utf8').replace(/^\uFEFF/, ''))
|
||||
assert.equal(evidence.evidence_id, 'ev_bc0f5546bb714cad4634168969a115be8f34e307bc09f51caf1457f5d3ed61ec')
|
||||
const output = postcss.root()
|
||||
function sheet(name) {
|
||||
const item = evidence.normalized_result.styles.items.find(item => item.file_path.endsWith(name))
|
||||
assert.ok(item?.source.included)
|
||||
const text = item.source.artifact.text
|
||||
assert.equal(crypto.createHash('sha256').update(text).digest('hex'), item.source.artifact.sha256)
|
||||
return postcss.parse(text)
|
||||
}
|
||||
sheet('tokens-Df-i-zsO.css').walkRules(rule => {
|
||||
if (!rule.selector.includes(':root') && !rule.selector.includes('[data-theme=dark]')) return
|
||||
if (!rule.nodes.some(node => node.type === 'decl' && node.prop.startsWith('--'))) return
|
||||
const dark = rule.selector.includes('dark')
|
||||
const target = postcss.rule({ selector: dark ? '[data-theme=dark] .yc-project-surface' : '.yc-project-surface' })
|
||||
for (const node of rule.nodes) if (node.type === 'decl' && node.prop.startsWith('--')) target.append(node.clone())
|
||||
output.append(target)
|
||||
})
|
||||
assert.ok(output.nodes.length >= 2)
|
||||
function select(container) {
|
||||
const result = container.clone({ nodes: [] })
|
||||
for (const node of container.nodes || []) {
|
||||
if (node.type === 'rule' && /\.wb-(?:button|input|textarea)(?:[\s.:#[\]>+~,-]|__|--|$)/.test(node.selector)) {
|
||||
const copy = node.clone()
|
||||
copy.selectors = copy.selectors.map(selector => `:where(.yc-project-surface) ${selector}`)
|
||||
result.append(copy)
|
||||
} else if (node.type === 'atrule' && node.nodes && !/keyframes$/.test(node.name)) {
|
||||
const nested = select(node)
|
||||
if (nested.nodes.length) result.append(nested)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
const controls = sheet('src-Bh3YZ35H.css')
|
||||
controls.walkRules(rule => {
|
||||
if (!rule.selector.includes(':root') && !rule.selector.includes('[data-theme=dark]')) return
|
||||
const declarations = rule.nodes.filter(node => node.type === 'decl' && node.prop.startsWith('--'))
|
||||
if (!declarations.length) return
|
||||
const target = postcss.rule({ selector: rule.selector.includes('dark') ? '[data-theme=dark] .yc-project-surface' : '.yc-project-surface' })
|
||||
declarations.forEach(node => target.append(node.clone()))
|
||||
output.append(target)
|
||||
})
|
||||
output.append(select(controls).nodes)
|
||||
const text = `/* WorkBuddy 5.8.3 shared controls/tokens; REA ${evidence.evidence_id}. */\n${output.toString()}\n`
|
||||
const file = 'src/renderer/src/projects/source-project-controls.css'
|
||||
if (process.argv.includes('--check')) assert.equal(fs.readFileSync(file, 'utf8'), text)
|
||||
else fs.writeFileSync(file, text)
|
||||
console.log(`PASS project controls/tokens: ${output.nodes.length} top-level blocks, hashes verified`)
|
||||
Reference in new issue
Block a user