Files
pangolin/design/codegen/gen_flutter_icons.mjs
T
wangjia f6ce5267d5 feat(design): 支付渠道 switch 原型 + segswitch 原子 + 图标/语言同源闸
- .segswitch 段控原子入 atoms.css + 登记 index.html
- purchase/ui-mobile/ui-desktop 三屏:购买页支付渠道 switch(USDT→crypto 默认 / 人民币→alipay),套餐价随渠道分币种显示,删两步弹层 + nezha
- 订单列表/详情集成进移动+桌面主框架
- icons.js 58 图标 sprite 单源 + gen_flutter_icons codegen + check-l1-sync 同源闸(图标同集 + l10n 完整)
- pay-v2 开发决策日志 docs/pay-v2-dev-log.md

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
2026-07-11 23:45:55 +08:00

46 lines
1.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env node
// gen_flutter_icons.mjs —— 图标单源 codegends-flow step 2a)。
// 图标真源 = design/prototype/icons.jsLucide sprite)。读其 key 集,kebab→camel
// 生成 client/lib/widgets/pangolin_icons.dart(每个 sprite key 一行 static const)。
// 零依赖(Node fs)。运行:node design/codegen/gen_flutter_icons.mjs
import { readFileSync, writeFileSync } from 'node:fs';
import { fileURLToPath } from 'node:url';
import { dirname, resolve } from 'node:path';
const __dirname = dirname(fileURLToPath(import.meta.url));
const root = resolve(__dirname, '..', '..');
const SPRITE = resolve(root, 'design/prototype/icons.js');
const OUT = resolve(root, 'client/lib/widgets/pangolin_icons.dart');
const src = readFileSync(SPRITE, 'utf8');
// 抽 key:形如 'kebab-name': '<...
const keys = [];
const re = /'([a-z0-9-]+)'\s*:\s*'</g;
let m;
while ((m = re.exec(src)) !== null) keys.push(m[1]);
if (keys.length === 0) { console.error('no icon keys found in', SPRITE); process.exit(1); }
// 去重、稳定顺序(保留 sprite 出现次序)
const seen = new Set();
const ordered = keys.filter((k) => (seen.has(k) ? false : (seen.add(k), true)));
const camel = (k) => k.replace(/-([a-z0-9])/g, (_, c) => c.toUpperCase());
const lines = ordered.map((k) => {
const c = camel(k);
return ` static const ${c} = LucideIcons.${c};`;
});
const out = `// GENERATED by design/codegen/gen_flutter_icons.mjs —— 勿手改;图标真源=design/prototype/icons.js
// 重新生成:node design/codegen/gen_flutter_icons.mjs
import 'package:lucide_icons_flutter/lucide_icons.dart';
class PangolinIcons {
PangolinIcons._();
${lines.join('\n')}
}
`;
writeFileSync(OUT, out);
console.log(`generated ${OUT} (${ordered.length} icons)`);