Files
TsxVueClassApi/bin/test/generator.js
编码猿 dc70b5fc26 rr
2025-08-29 22:07:01 +08:00

45 lines
1.4 KiB
Plaintext

const fs = require('fs');
const path = require('path');
const chokidar = require('chokidar');
const { parse } = require('@babel/parser');
const { codeFrameColumns } = require('@babel/code-frame');
// 配置常量
const AUTO_START = '/* auto-generated-start */';
const AUTO_END = '/* auto-generated-end */';
const INDENT = ' '; // 缩进2空格
// 配置文件路径
// const CONFIG_PATH = path.join(__dirname, '../config/dynamic-config.js');
const CONFIG_PATH = "/Users/bmy/source/TsxVueClassApi/src/core/config/configure.config.ts";
const TARGET_PATH = path.join(__dirname, 'templates/TargetClass.ts');
function generateClassMethods(keys) {
// 读取目标文件
let targetContent;
try {
targetContent = fs.readFileSync(TARGET_PATH, 'utf8');
} catch {
targetContent = `${AUTO_START}\n${AUTO_END}`;
}
// 生成新方法代码
const newMethods = keys.map(key =>
`${INDENT}public ${key}() {\n${INDENT} // Auto-generated\n${INDENT}}`
).join('\n\n');
// 替换标记区域
const newContent = targetContent.replace(
new RegExp(`${AUTO_START}([\\s\\S]*?)${AUTO_END}`),
`${AUTO_START}\n${newMethods}\n${INDENT}${AUTO_END}`
);
// 格式校验
try {
parse(newContent, { plugins: ['typescript'] });
fs.writeFileSync(TARGET_PATH, newContent);
} catch (err) {
console.error('⚠️ 生成代码语法错误:');
console.log(codeFrameColumns(newContent, err.loc, { highlightCode: true }));
}
}