#!/usr/bin/env node /** * D23: completion-rate.vue 完成率页 flat 色收编全局令牌 (debt 60 -> 0) * $c-comp-* 局部色阶 -> uni.scss $flat-* 全局令牌;移除页面 palette 声明 */ const fs = require('fs'); const F = 'pages/stats/completion-rate.vue'; let src = fs.readFileSync(F, 'utf8'); const MAP = [ ['$c-comp-bg', '$flat-bg'], ['$c-comp-card', '$flat-card'], ['$c-comp-warm', '$flat-warm'], ['$c-comp-done-deep', '$flat-teal-deep'], // 先长后短 ['$c-comp-done', '$flat-teal'], ['$c-comp-ink', '$flat-ink'], ['$c-comp-muted2', '$flat-muted-2'], ['$c-comp-muted', '$flat-muted'], ['$c-comp-danger-line', '$flat-danger-line'], ['$c-comp-orange-text', '$flat-orange-text'], ['$c-comp-bar-yellow', '$flat-bar'], ['$c-comp-bar-green-to', '$flat-green-deep'], ['$c-comp-bar-green', '$flat-green'], ]; for (const [from, to] of MAP) { const re = new RegExp(from.replace('$', '\\$') + '(?![\\w-])', 'g'); src = src.replace(re, to); } // 移除 palette 声明块(现已全部指向全局令牌) src = src.replace( /\/\/ ===== 完成率页专属色阶[^\n]*\n(?:\$c-comp-[^\n]*\n)+\n/, '' ); fs.writeFileSync(F, src); console.log('done; remaining $c-comp:', (src.match(/\$c-comp-/g) || []).length); const lines = src.split('\n'); let n = 0; for (let i = 0; i < lines.length; i++) { if (/#[0-9a-fA-F]{3,8}\b/.test(lines[i])) { console.log('HEX ' + (i + 1) + ': ' + lines[i].trim().slice(0, 100)); n++; } } console.log('remaining hex lines:', n);