155 lines
4.7 KiB
JavaScript

const fs = require('fs');
// ../lib 可以替换成 @ali/lowcode-code-generator
const CodeGenerator = require('../lib').default;
function flatFiles(rootName, dir) {
const dirRoot = rootName ? `${rootName}/${dir.name}` : dir.name;
const files = dir.files.map(file => ({
name: `${dirRoot}/${file.name}.${file.ext}`,
content: file.content,
ext: '',
}));
const filesInSub = dir.dirs.map(subDir => flatFiles(`${dirRoot}`, subDir));
const result = files.concat.apply(files, filesInSub);
return result;
}
function displayResultInConsole(root, fileName) {
const files = flatFiles('.', root);
files.forEach(file => {
if (!fileName || fileName === file.name) {
console.log(`========== ${file.name} Start ==========`);
console.log(file.content);
console.log(`========== ${file.name} End ==========`);
}
});
}
async function writeResultToDisk(root, path) {
const publisher = CodeGenerator.publishers.disk();
return publisher.publish({
project: root,
outputPath: path,
projectSlug: 'demo-project',
createProjectFolder: true,
});
}
function main() {
const schemaJson = fs.readFileSync('./demo/sampleSchema.json', { encoding: 'utf8' });
const createIceJsProjectBuilder = CodeGenerator.solutions.icejs;
const builder = createIceJsProjectBuilder();
builder.generateProject(schemaJson).then(result => {
displayResultInConsole(result);
writeResultToDisk(result, 'output/lowcodeDemo').then(response =>
console.log('Write to disk: ', JSON.stringify(response)),
);
return result;
});
}
function exportModule() {
const schemaJson = fs.readFileSync('./demo/shenmaSample.json', { encoding: 'utf8' });
const moduleBuilder = CodeGenerator.createModuleBuilder({
plugins: [
CodeGenerator.plugins.react.reactCommonDeps(),
CodeGenerator.plugins.common.esmodule({
fileType: 'jsx',
}),
CodeGenerator.plugins.react.containerClass(),
CodeGenerator.plugins.react.containerInitState(),
CodeGenerator.plugins.react.containerLifeCycle(),
CodeGenerator.plugins.react.containerMethod(),
CodeGenerator.plugins.react.jsx(),
CodeGenerator.plugins.style.css(),
],
postProcessors: [
CodeGenerator.postprocessor.prettier(),
],
mainFileName: 'index',
});
moduleBuilder.generateModuleCode(schemaJson).then(result => {
displayResultInConsole(result);
return result;
});
}
function exportProject() {
const schemaJson = fs.readFileSync('./demo/sampleSchema.json', { encoding: 'utf8' });
const builder = CodeGenerator.createProjectBuilder({
template: CodeGenerator.solutionParts.icejs.template,
plugins: {
components: [
CodeGenerator.plugins.react.reactCommonDeps(),
CodeGenerator.plugins.common.esmodule({
fileType: 'jsx',
}),
CodeGenerator.plugins.react.containerClass(),
CodeGenerator.plugins.react.containerInitState(),
CodeGenerator.plugins.react.containerLifeCycle(),
CodeGenerator.plugins.react.containerMethod(),
CodeGenerator.plugins.react.jsx(),
CodeGenerator.plugins.style.css(),
],
pages: [
CodeGenerator.plugins.react.reactCommonDeps(),
CodeGenerator.plugins.common.esmodule({
fileType: 'jsx',
}),
CodeGenerator.plugins.react.containerClass(),
CodeGenerator.plugins.react.containerInitState(),
CodeGenerator.plugins.react.containerLifeCycle(),
CodeGenerator.plugins.react.containerMethod(),
CodeGenerator.plugins.react.jsx(),
CodeGenerator.plugins.style.css(),
],
router: [
CodeGenerator.plugins.common.esmodule(),
CodeGenerator.solutionParts.icejs.plugins.router(),
],
entry: [
CodeGenerator.solutionParts.icejs.plugins.entry(),
],
constants: [
CodeGenerator.plugins.project.constants(),
],
utils: [
CodeGenerator.plugins.common.esmodule(),
CodeGenerator.plugins.project.utils(),
],
i18n: [
CodeGenerator.plugins.project.i18n(),
],
globalStyle: [
CodeGenerator.solutionParts.icejs.plugins.globalStyle(),
],
htmlEntry: [
CodeGenerator.solutionParts.icejs.plugins.entryHtml(),
],
packageJSON: [
CodeGenerator.solutionParts.icejs.plugins.packageJSON(),
],
},
postProcessors: [
CodeGenerator.postprocessor.prettier(),
],
});
builder.generateProject(schemaJson).then(result => {
displayResultInConsole(result);
writeResultToDisk(result, 'output/lowcodeDemo').then(response =>
console.log('Write to disk: ', JSON.stringify(response)),
);
return result;
});
}
// main();
// exportModule();
exportProject();