mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2025-12-12 11:20:11 +00:00
126 lines
3.8 KiB
JavaScript
126 lines
3.8 KiB
JavaScript
/* eslint-disable no-console */
|
|
/* eslint-disable @typescript-eslint/quotes */
|
|
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
// @ts-check
|
|
// 这个文件是用来构建模板中的静态文件的
|
|
const fs = require('fs');
|
|
const glob = require('glob');
|
|
const path = require('path');
|
|
const JSON5 = require('json5');
|
|
const { spawnSync } = require('child_process');
|
|
|
|
const PROJECT_ROOT = path.join(__dirname, '..');
|
|
|
|
const TEMPLATES = [
|
|
{
|
|
sourceDir: path.join(PROJECT_ROOT, 'static-files/rax'),
|
|
outputDir: path.join(PROJECT_ROOT, 'src/plugins/project/framework/rax/template'),
|
|
},
|
|
];
|
|
|
|
try {
|
|
TEMPLATES.forEach(buildTemplateStaticFiles);
|
|
console.log('All done.');
|
|
} catch (e) {
|
|
console.error(e);
|
|
process.exit(1);
|
|
}
|
|
|
|
function buildTemplateStaticFiles({ sourceDir, outputDir }) {
|
|
console.log('processing %s template...', path.dirname(sourceDir));
|
|
|
|
// 扫描所有的目录
|
|
const sourceFiles = glob.sync('**/*', {
|
|
nodir: true,
|
|
dot: true,
|
|
cwd: sourceDir,
|
|
});
|
|
|
|
console.log('got %d files: %o', sourceFiles.length, sourceFiles);
|
|
|
|
const staticFiles = {
|
|
imports: [],
|
|
runs: [],
|
|
};
|
|
|
|
// 生成对应的文件
|
|
sourceFiles.forEach((sourceFileName, index) => {
|
|
console.log('processing %s', sourceFileName);
|
|
const sourceFileContent = fs.readFileSync(path.join(sourceDir, sourceFileName), 'utf-8');
|
|
const sourceFileRealName = sourceFileName.replace(/\.template$/, '');
|
|
const outputFileName = `${sourceFileRealName}.ts`;
|
|
const outputFileFullPath = path.join(outputDir, 'files', outputFileName);
|
|
|
|
const sourceFileExtName = path.extname(sourceFileRealName);
|
|
const sourceFileBaseName = path.basename(sourceFileRealName, sourceFileExtName);
|
|
|
|
// 确保目录存在
|
|
fs.mkdirSync(path.dirname(outputFileFullPath), { recursive: true });
|
|
|
|
// 写入文件
|
|
fs.writeFileSync(
|
|
outputFileFullPath,
|
|
[
|
|
`/* eslint-disable max-len */`,
|
|
`/* Note: this file is generated by "npm run template", please dont modify this file directly */`,
|
|
`/* -- instead, you should modify "${path.relative(
|
|
PROJECT_ROOT,
|
|
path.join(sourceDir, sourceFileName),
|
|
)}" and run "npm run template" */`,
|
|
`import { ResultFile } from '@alilc/lowcode-types';`,
|
|
'',
|
|
`export default function getFile(): [string[], ResultFile] {`,
|
|
` return ${JSON5.stringify([
|
|
// 文件目录:
|
|
path.dirname(sourceFileRealName).split(path.sep).filter(Boolean),
|
|
// 文件名和内容:
|
|
{
|
|
name: sourceFileBaseName,
|
|
ext: sourceFileExtName.replace(/^\./, ''),
|
|
content: sourceFileContent,
|
|
},
|
|
])};`,
|
|
`}`,
|
|
'',
|
|
].join('\n'),
|
|
{
|
|
encoding: 'utf-8',
|
|
},
|
|
);
|
|
|
|
staticFiles.imports.push(`import file${index} from './files/${sourceFileRealName}';`);
|
|
|
|
staticFiles.runs.push(` runFileGenerator(root, file${index})`);
|
|
});
|
|
|
|
console.log('generating static-files.ts...');
|
|
fs.writeFileSync(
|
|
path.join(outputDir, 'static-files.ts'),
|
|
[
|
|
`/* Note: this file is generated by "npm run template", please dont modify this file directly */`,
|
|
`import { ResultDir } from '@alilc/lowcode-types';
|
|
|
|
import { createResultDir } from '../../../../../utils/resultHelper';
|
|
import { runFileGenerator } from '../../../../../utils/templateHelper';`,
|
|
...staticFiles.imports,
|
|
'',
|
|
`export function generateStaticFiles(root = createResultDir('.')): ResultDir {`,
|
|
...staticFiles.runs,
|
|
` return root;`,
|
|
`}`,
|
|
'',
|
|
].join('\n'),
|
|
{ encoding: 'utf-8' },
|
|
);
|
|
|
|
// prettier 一把
|
|
console.log('run prettier...');
|
|
spawnSync('npx', ['prettier', '--write', `${outputDir}`], {
|
|
stdio: 'inherit',
|
|
shell: true,
|
|
});
|
|
|
|
console.log('done %s', path.basename(sourceDir));
|
|
}
|