45 lines
1.4 KiB
Plaintext
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 }));
|
|
}
|
|
} |