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 82d90a6c34..f4ad6f7dcf 100644 --- a/npm/ng-packs/packages/schematics/src/commands/api/index.ts +++ b/npm/ng-packs/packages/schematics/src/commands/api/index.ts @@ -1,7 +1,7 @@ import { normalize, strings } from '@angular-devkit/core'; import { applyTemplates, branchAndMerge, chain, move, SchematicContext, SchematicsException, Tree, url } from '@angular-devkit/schematics'; import { Exception } from '../../enums'; -import { applyWithOverwrite, buildDefaultPath, createApiDefinitionReader, createControllerToServiceMapper, createImportRefToModelMapper, interpolate, resolveProject, serializeParameters } from '../../utils'; +import { applyWithOverwrite, buildDefaultPath, createApiDefinitionReader, createControllerToServiceMapper, createImportRefsToModelMapper, interpolate, resolveProject, serializeParameters } from '../../utils'; import * as cases from '../../utils/text'; import type { Schema as GenerateProxySchema } from './schema'; @@ -20,12 +20,15 @@ export default function(params: GenerateProxySchema) { const mapControllerToService = createControllerToServiceMapper(solution, definition.remoteServiceName); const controllers = Object.values(definition.controllers || {}); - const importRefs: string[] = []; + const importRefs: Record = {}; const createServiceFiles = chain( controllers.map(controller => { const service = mapControllerToService(controller); - service.imports.forEach(({refs}) => refs.forEach(ref => importRefs.push(ref))); + service.imports.forEach(({refs, path}) => refs.forEach(ref => { + if (!importRefs[path]) return (importRefs[path] = [ref]); + importRefs[path] = [...new Set([...importRefs[path], ref])]; + })); return applyWithOverwrite(url('./files-service'), [ applyTemplates({ @@ -39,14 +42,14 @@ export default function(params: GenerateProxySchema) { ), ); - const mapImportRefToModel = createImportRefToModelMapper(solution); + const mapImportRefsToModel = createImportRefsToModelMapper(solution); const createModelFiles = chain( - importRefs.map(ref => { + Object.values(importRefs).map(refs => { return applyWithOverwrite(url('./files-model'), [ applyTemplates({ ...cases, - ...mapImportRefToModel(ref), + ...mapImportRefsToModel(refs), }), move(normalize(targetPath)), ]); diff --git a/npm/ng-packs/packages/schematics/src/utils/model.ts b/npm/ng-packs/packages/schematics/src/utils/model.ts index e1032844ab..5e4b56f803 100644 --- a/npm/ng-packs/packages/schematics/src/utils/model.ts +++ b/npm/ng-packs/packages/schematics/src/utils/model.ts @@ -1,10 +1,10 @@ import { Model } from '../models'; import { parseNamespace } from './namespace'; -export function createImportRefToModelMapper(solution: string) { - return (importRef: string) => { +export function createImportRefsToModelMapper(solution: string) { + return (importRefs: string[]) => { return new Model({ - namespace: parseNamespace(solution, importRef), + namespace: parseNamespace(solution, importRefs[0]), }); }; }