From 2bd40d7589167553d82f69993363eecf466fff20 Mon Sep 17 00:00:00 2001 From: eternalsky Date: Wed, 14 Dec 2022 10:00:27 +0800 Subject: [PATCH] feat(codegen): add demo slots & add new cli option solutionOptions --- .../bin/lowcode-code-generator.js | 1 + modules/code-generator/src/cli/run.ts | 18 ++++++++++++++++-- .../src/generator/ProjectBuilder.ts | 9 +++++++++ modules/code-generator/src/types/core.ts | 1 + 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/modules/code-generator/bin/lowcode-code-generator.js b/modules/code-generator/bin/lowcode-code-generator.js index 6259a5a6f..79c36c49a 100755 --- a/modules/code-generator/bin/lowcode-code-generator.js +++ b/modules/code-generator/bin/lowcode-code-generator.js @@ -14,6 +14,7 @@ program .option('-c, --cwd ', 'specify the working directory', '.') .option('-q, --quiet', 'be quiet, do not output anything unless get error', false) .option('-v, --verbose', 'be verbose, output more information', false) + .option('--solution-options ', 'specify the solution options', '{}') .arguments('[input-schema] ali lowcode schema JSON file') .action(function doGenerate(inputSchema, command) { var options = command.opts(); diff --git a/modules/code-generator/src/cli/run.ts b/modules/code-generator/src/cli/run.ts index db66b4601..7dcfd9d5a 100644 --- a/modules/code-generator/src/cli/run.ts +++ b/modules/code-generator/src/cli/run.ts @@ -25,6 +25,7 @@ export async function run( output?: string; quiet?: boolean; verbose?: boolean; + solutionOptions?: string; }, ): Promise { try { @@ -41,6 +42,19 @@ export async function run( ); } + let solutionOptions = {}; + + if (options.solutionOptions) { + try { + solutionOptions = JSON.parse(options.solutionOptions); + } catch (err: any) { + throw new Error( + `solution options parse error, error message is "${err.message}"`, + ); + } + } + + // 读取 Schema const schema = await loadSchemaFile(schemaFile); @@ -48,7 +62,7 @@ export async function run( const createProjectBuilder = await getProjectBuilderFactory(options.solution, { quiet: options.quiet, }); - const builder = createProjectBuilder(); + const builder = createProjectBuilder(solutionOptions); // 生成代码 const generatedSourceCodes = await builder.generateProject(schema); @@ -75,7 +89,7 @@ export async function run( async function getProjectBuilderFactory( solution: string, { quiet }: { quiet?: boolean }, -): Promise<() => IProjectBuilder> { +): Promise<(options: {[prop: string]: any}) => IProjectBuilder> { if (solution in CodeGenerator.solutions) { return CodeGenerator.solutions[solution as 'icejs' | 'rax']; } diff --git a/modules/code-generator/src/generator/ProjectBuilder.ts b/modules/code-generator/src/generator/ProjectBuilder.ts index 186def2c5..1cac2dea2 100644 --- a/modules/code-generator/src/generator/ProjectBuilder.ts +++ b/modules/code-generator/src/generator/ProjectBuilder.ts @@ -241,6 +241,15 @@ export class ProjectBuilder implements IProjectBuilder { }); } + // demo + if (parseResult.project && builders.demo) { + const { files } = await builders.demo.generateModule(parseResult.project); + buildResult.push({ + path: this.template.slots.demo.path, + files, + }); + } + // TODO: 更多 slots 的处理??是不是可以考虑把 template 中所有的 slots 都处理下? // Post Process diff --git a/modules/code-generator/src/types/core.ts b/modules/code-generator/src/types/core.ts index b1a00ad37..f79db6cd9 100644 --- a/modules/code-generator/src/types/core.ts +++ b/modules/code-generator/src/types/core.ts @@ -25,6 +25,7 @@ export enum FileType { TS = 'ts', TSX = 'tsx', JSON = 'json', + MD = 'md', } export enum ChunkType {