From 9a550a13fad6e0bf32f4ad6dab6913709c653e56 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 18 Nov 2019 17:51:02 +0300 Subject: [PATCH] feat(client-generator): add creating file template process --- npm/packs/client-generator/lib/angular.js | 10 ++++++- .../templates/angular/service-templates.d.ts | 2 +- .../templates/angular/service-templates.js | 10 +++++-- .../lib/types/api-defination.d.ts | 8 +++++- npm/packs/client-generator/package.json | 2 ++ npm/packs/client-generator/src/angular.ts | 17 ++++++++++-- npm/packs/client-generator/src/cli.ts | 3 ++- .../templates/angular/service-templates.ts | 8 +++--- .../src/types/api-defination.ts | 7 ++++- npm/packs/client-generator/yarn.lock | 26 ++++++++++++++++++- 10 files changed, 78 insertions(+), 15 deletions(-) diff --git a/npm/packs/client-generator/lib/angular.js b/npm/packs/client-generator/lib/angular.js index ba7acbe760..087ae4dab1 100644 --- a/npm/packs/client-generator/lib/angular.js +++ b/npm/packs/client-generator/lib/angular.js @@ -36,11 +36,19 @@ var __generator = (this && this.__generator) || function (thisArg, body) { } }; Object.defineProperty(exports, "__esModule", { value: true }); +var service_templates_1 = require("./templates/angular/service-templates"); function angular(data, selectedModules) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { selectedModules.forEach(function (module) { - console.log(module); + var element = data.modules[module]; + var contents = []; + (Object.keys(element.controllers) || []).forEach(function (key) { + console.warn(element.controllers[key].controllerName); + contents.push(''); + }); + var service = service_templates_1.ServiceTemplates.classTemplate(element.rootPath, contents); + console.log(service); }); return [2 /*return*/]; }); diff --git a/npm/packs/client-generator/lib/templates/angular/service-templates.d.ts b/npm/packs/client-generator/lib/templates/angular/service-templates.d.ts index 58b185e760..dd677804e2 100644 --- a/npm/packs/client-generator/lib/templates/angular/service-templates.d.ts +++ b/npm/packs/client-generator/lib/templates/angular/service-templates.d.ts @@ -1,3 +1,3 @@ export declare namespace ServiceTemplates { - function classTemplate(name: string): void; + function classTemplate(name: string, content: string[]): string; } diff --git a/npm/packs/client-generator/lib/templates/angular/service-templates.js b/npm/packs/client-generator/lib/templates/angular/service-templates.js index 7c7aedcf14..cebdf9f43b 100644 --- a/npm/packs/client-generator/lib/templates/angular/service-templates.js +++ b/npm/packs/client-generator/lib/templates/angular/service-templates.js @@ -1,9 +1,15 @@ "use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); +var change_case_1 = __importDefault(require("change-case")); var ServiceTemplates; (function (ServiceTemplates) { - function classTemplate(name) { - "import { RestService } from '@abp/ng.core';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class " + name + "Service {\n\n constructor(private restService: RestService) { }\n\n}"; + function classTemplate(name, content) { + return "import { RestService } from '@abp/ng.core';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class " + change_case_1.default.pascalCase(name) + "Service {\n\n constructor(private restService: RestService) { }\n\n " + content.forEach(function (element) { + element + '\n\n'; + }) + "\n}"; } ServiceTemplates.classTemplate = classTemplate; })(ServiceTemplates = exports.ServiceTemplates || (exports.ServiceTemplates = {})); diff --git a/npm/packs/client-generator/lib/types/api-defination.d.ts b/npm/packs/client-generator/lib/types/api-defination.d.ts index 69d1a94fa5..6f9f25f7eb 100644 --- a/npm/packs/client-generator/lib/types/api-defination.d.ts +++ b/npm/packs/client-generator/lib/types/api-defination.d.ts @@ -3,6 +3,12 @@ export declare namespace APIDefination { modules: Modules; } interface Modules { - [key: string]: any; + [key: string]: Module; + } + interface Module { + rootPath: string; + controllers: { + [key: string]: any; + }; } } diff --git a/npm/packs/client-generator/package.json b/npm/packs/client-generator/package.json index 9ca4520ffc..1caf2b449d 100644 --- a/npm/packs/client-generator/package.json +++ b/npm/packs/client-generator/package.json @@ -23,11 +23,13 @@ "clear": "^0.1.0", "commander": "^4.0.1", "figlet": "^1.2.4", + "fs-extra": "^8.1.0", "inquirer": "^7.0.0", "ora": "^4.0.3", "path": "^0.12.7" }, "devDependencies": { + "@types/fs-extra": "^8.0.1", "@types/inquirer": "^6.5.0", "@types/node": "^12.12.8", "nodemon": "^1.19.4", diff --git a/npm/packs/client-generator/src/angular.ts b/npm/packs/client-generator/src/angular.ts index 4ae29b9d41..a81ea7961c 100644 --- a/npm/packs/client-generator/src/angular.ts +++ b/npm/packs/client-generator/src/angular.ts @@ -1,7 +1,20 @@ import { APIDefination } from './types/api-defination'; +import { ServiceTemplates } from './templates/angular/service-templates'; +import changeCase from 'change-case'; +import fse from 'fs-extra'; export async function angular(data: APIDefination.Response, selectedModules: string[]) { - selectedModules.forEach(module => { - console.log(module); + selectedModules.forEach(async module => { + const element = data.modules[module]; + + let contents = [] as string[]; + (Object.keys(element.controllers) || []).forEach(key => { + console.warn(element.controllers[key].controllerName); + contents.push(' '); + }); + + const service = ServiceTemplates.classTemplate(element.rootPath, contents); + await fse.writeFile(`${changeCase.kebabCase(element.rootPath + '-service')}.ts`, service); + console.log(service); }); } diff --git a/npm/packs/client-generator/src/cli.ts b/npm/packs/client-generator/src/cli.ts index d88f16f641..3a401e2580 100644 --- a/npm/packs/client-generator/src/cli.ts +++ b/npm/packs/client-generator/src/cli.ts @@ -25,7 +25,8 @@ export async function cli(program: any) { return selectedModules; }; - const modules = await selection(Object.keys(data.modules)); + // const modules = await selection(Object.keys(data.modules)); + const modules = ['multi-tenancy']; switch (program.ui) { case 'angular': 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 8b8bf1704d..d46f3e123f 100644 --- a/npm/packs/client-generator/src/templates/angular/service-templates.ts +++ b/npm/packs/client-generator/src/templates/angular/service-templates.ts @@ -1,8 +1,8 @@ import changeCase from 'change-case'; export namespace ServiceTemplates { - export function classTemplate(name: string, content: string[]) { - `import { RestService } from '@abp/ng.core'; + export function classTemplate(name: string, contents: string[]) { + return `import { RestService } from '@abp/ng.core'; import { Injectable } from '@angular/core'; @Injectable({ @@ -12,9 +12,7 @@ export class ${changeCase.pascalCase(name)}Service { constructor(private restService: RestService) { } - ${content.forEach(element => { - element + '\n\n'; - })} + ${contents[0]} }`; } } diff --git a/npm/packs/client-generator/src/types/api-defination.ts b/npm/packs/client-generator/src/types/api-defination.ts index 7c1a38a11e..83783efdc0 100644 --- a/npm/packs/client-generator/src/types/api-defination.ts +++ b/npm/packs/client-generator/src/types/api-defination.ts @@ -4,6 +4,11 @@ export namespace APIDefination { } export interface Modules { - [key: string]: any; + [key: string]: Module; + } + + export interface Module { + rootPath: string; + controllers: { [key: string]: any }; } } diff --git a/npm/packs/client-generator/yarn.lock b/npm/packs/client-generator/yarn.lock index 4e5321ab25..020da8e630 100644 --- a/npm/packs/client-generator/yarn.lock +++ b/npm/packs/client-generator/yarn.lock @@ -6,6 +6,12 @@ version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" +"@types/fs-extra@^8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.0.1.tgz#a2378d6e7e8afea1564e44aafa2e207dadf77686" + dependencies: + "@types/node" "*" + "@types/inquirer@^6.5.0": version "6.5.0" resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-6.5.0.tgz#b83b0bf30b88b8be7246d40e51d32fe9d10e09be" @@ -586,6 +592,14 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" @@ -664,7 +678,7 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.2: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" @@ -962,6 +976,12 @@ isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + optionalDependencies: + graceful-fs "^4.1.6" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -1806,6 +1826,10 @@ unique-string@^1.0.0: dependencies: crypto-random-string "^1.0.0" +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"