From e1959594a6b0650dc14de8ad69af0306909d7cb1 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 19 Aug 2020 12:07:08 +0300 Subject: [PATCH] feat: collect interfaces from types based on importRefs --- .../schematics/src/commands/api/index.ts | 10 +++--- .../packages/schematics/src/utils/model.ts | 35 +++++++++++++++++-- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/npm/ng-packs/packages/schematics/src/commands/api/index.ts b/npm/ng-packs/packages/schematics/src/commands/api/index.ts index f4ad6f7dcf..f89bcc2ae9 100644 --- a/npm/ng-packs/packages/schematics/src/commands/api/index.ts +++ b/npm/ng-packs/packages/schematics/src/commands/api/index.ts @@ -20,14 +20,14 @@ export default function(params: GenerateProxySchema) { const mapControllerToService = createControllerToServiceMapper(solution, definition.remoteServiceName); const controllers = Object.values(definition.controllers || {}); - const importRefs: Record = {}; + const serviceImports: Record = {}; const createServiceFiles = chain( controllers.map(controller => { const service = mapControllerToService(controller); service.imports.forEach(({refs, path}) => refs.forEach(ref => { - if (!importRefs[path]) return (importRefs[path] = [ref]); - importRefs[path] = [...new Set([...importRefs[path], ref])]; + if (!serviceImports[path]) return (serviceImports[path] = [ref]); + serviceImports[path] = [...new Set([...serviceImports[path], ref])]; })); return applyWithOverwrite(url('./files-service'), [ @@ -42,10 +42,10 @@ export default function(params: GenerateProxySchema) { ), ); - const mapImportRefsToModel = createImportRefsToModelMapper(solution); + const mapImportRefsToModel = createImportRefsToModelMapper(solution, data.types); const createModelFiles = chain( - Object.values(importRefs).map(refs => { + Object.values(serviceImports).map(refs => { return applyWithOverwrite(url('./files-model'), [ applyTemplates({ ...cases, diff --git a/npm/ng-packs/packages/schematics/src/utils/model.ts b/npm/ng-packs/packages/schematics/src/utils/model.ts index 5e4b56f803..79efea320c 100644 --- a/npm/ng-packs/packages/schematics/src/utils/model.ts +++ b/npm/ng-packs/packages/schematics/src/utils/model.ts @@ -1,10 +1,39 @@ -import { Model } from '../models'; +import { strings } from '@angular-devkit/core'; +import { Interface, Model, Property, Type } from '../models'; import { parseNamespace } from './namespace'; +import { createTypeSimplifier } from './type'; + +export function createImportRefsToModelMapper(solution: string, types: Record) { + const simplifyType = createTypeSimplifier(solution); -export function createImportRefsToModelMapper(solution: string) { return (importRefs: string[]) => { - return new Model({ + const model = new Model({ namespace: parseNamespace(solution, importRefs[0]), }); + + importRefs.forEach(ref => { + const typeDef = types[ref]; + let identifier = simplifyType(ref); + (typeDef.genericArguments ?? []).forEach((t, i) => { + identifier = identifier.replace(`T${i}`, t); + }); + + const base = typeDef.baseType ? simplifyType(typeDef.baseType) : null; + const _interface = new Interface({ identifier, base }); + + typeDef.properties?.forEach(({ name, typeSimple }) => { + name = strings.camelize(name); + const type = simplifyType(typeSimple); + const optional = typeSimple.endsWith('?') ? '?' : ''; + + _interface.properties.push(new Property({ name, type, optional })); + }); + + console.log(_interface); + + model.interfaces.push(_interface); + }); + + return model; }; }