From 737b43ce246c5244505df7f79f7c0a9c6f4c8451 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 19 Nov 2019 16:30:58 +0300 Subject: [PATCH] feat(client-generator): add generator utils --- npm/packs/client-generator/src/angular.ts | 17 +++++++++-------- npm/packs/client-generator/src/cli.ts | 13 ++++++++++--- npm/packs/client-generator/src/index.ts | 3 --- .../src/templates/angular/service-templates.ts | 10 ++++++++-- .../client-generator/src/utils/generators.ts | 13 +++++++++++++ 5 files changed, 40 insertions(+), 16 deletions(-) create mode 100644 npm/packs/client-generator/src/utils/generators.ts diff --git a/npm/packs/client-generator/src/angular.ts b/npm/packs/client-generator/src/angular.ts index 9a2a6fd8b8..b2a8d61b48 100644 --- a/npm/packs/client-generator/src/angular.ts +++ b/npm/packs/client-generator/src/angular.ts @@ -7,13 +7,15 @@ export async function angular(data: APIDefination.Response, selectedModules: str selectedModules.forEach(async module => { const element = data.modules[module]; - let contents = [] as string[]; - const actions = (Object.keys(element.controllers) || []).map(key => element.controllers[key].actions); + (Object.keys(element.controllers) || []).forEach(key => { + const controller = element.controllers[key]; - actions.forEach(action => { - const actionKeys = Object.keys(action); + const actions = element.controllers[key].actions; + + const actionKeys = Object.keys(actions); + let contents = [] as string[]; actionKeys.forEach(key => { - const element = action[key]; + const element = actions[key]; console.log(element); switch (element.httpMethod) { @@ -25,9 +27,8 @@ export async function angular(data: APIDefination.Response, selectedModules: str break; } }); + const service = ServiceTemplates.classTemplate(controller.controllerName, contents.join('\n')); + fse.writeFileSync(`dist/${changeCase.kebabCase(controller.controllerName)}.service.ts`, service); }); - - const service = ServiceTemplates.classTemplate(element.rootPath, contents.join('\n')); - await fse.writeFile(`dist/${changeCase.kebabCase(element.rootPath)}.service.ts`, service); }); } diff --git a/npm/packs/client-generator/src/cli.ts b/npm/packs/client-generator/src/cli.ts index 3a401e2580..5b93e134d1 100644 --- a/npm/packs/client-generator/src/cli.ts +++ b/npm/packs/client-generator/src/cli.ts @@ -3,15 +3,22 @@ import { axiosInstance } from './utils/axios'; import ora = require('ora'); import { angular } from './angular'; import chalk from 'chalk'; +import { APIDefination } from './types/api-defination'; export async function cli(program: any) { if (program.ui !== 'angular') { program.ui = ((await uiSelection(['Angular'])) as string).toLowerCase(); } - const loading = ora('Waiting for the API response... \n'); loading.start(); - const data = (await axiosInstance.get('a')) as any; + let data = {} as APIDefination.Response; + try { + data = (await axiosInstance.get('https://localhost:44305/api/abp/api-definition')).data; + } catch (error) { + console.error(error); + process.exit(1); + } + console.log(data); loading.stop(); const selection = async (modules: string[]): Promise => { @@ -26,7 +33,7 @@ export async function cli(program: any) { }; // const modules = await selection(Object.keys(data.modules)); - const modules = ['multi-tenancy']; + const modules = ['saas']; switch (program.ui) { case 'angular': diff --git a/npm/packs/client-generator/src/index.ts b/npm/packs/client-generator/src/index.ts index 93bf54c757..978acf42ab 100644 --- a/npm/packs/client-generator/src/index.ts +++ b/npm/packs/client-generator/src/index.ts @@ -1,9 +1,6 @@ #!/usr/bin/env node import chalk from 'chalk'; import program from 'commander'; -import ora from 'ora'; -import { axiosInstance } from './utils/axios'; -import { moduleSelection, uiSelection } from './utils/prompt'; import { cli } from './cli'; const clear = require('clear'); const figlet = require('figlet'); diff --git a/npm/packs/client-generator/src/templates/angular/service-templates.ts b/npm/packs/client-generator/src/templates/angular/service-templates.ts index c9abfc7700..818c2186df 100644 --- a/npm/packs/client-generator/src/templates/angular/service-templates.ts +++ b/npm/packs/client-generator/src/templates/angular/service-templates.ts @@ -16,9 +16,15 @@ export class ${changeCase.pascalCase(name)}Service { }`; } - export function getMethodTemplate(name: string, url: string, params: string[] = [], queryParams?: object) { + export function getMethodTemplate( + name: string, + url: string, + args: string = '', + params: string[] = [], + queryParams?: object, + ) { return ` - ${changeCase.camelCase(replacer(name))}(${params.join(', ')}): Observable { + ${changeCase.camelCase(replacer(name))}(${args}): Observable { return this.restService.request({ method: 'GET', url: '/${url}${params.length ? '/' + params.join('/') : ''}', diff --git a/npm/packs/client-generator/src/utils/generators.ts b/npm/packs/client-generator/src/utils/generators.ts new file mode 100644 index 0000000000..9d1c172f1e --- /dev/null +++ b/npm/packs/client-generator/src/utils/generators.ts @@ -0,0 +1,13 @@ +export interface GenerateArgsParam { + key: string; + type: string; + isOptional?: boolean; +} + +export function generateArgs(args: GenerateArgsParam[]): string { + return args.reduce((acc, val) => { + const arg = `${val.key}${val.isOptional ? '?' : ''}: ${val.type}`; + if (acc) return `${acc}, ${arg}`; + else return arg; + }, ''); +}