From 61dcbb19eb47cafcb0e8c18b644a09730669be73 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Wed, 21 Jun 2023 18:37:31 +0300 Subject: [PATCH] Excract generic as array (or not) --- npm/ng-packs/packages/schematics/src/utils/generics.ts | 8 +++++--- npm/ng-packs/packages/schematics/src/utils/rule.ts | 3 +++ npm/ng-packs/packages/schematics/src/utils/type.ts | 6 ++---- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/npm/ng-packs/packages/schematics/src/utils/generics.ts b/npm/ng-packs/packages/schematics/src/utils/generics.ts index 193c62b1a5..96376900e7 100644 --- a/npm/ng-packs/packages/schematics/src/utils/generics.ts +++ b/npm/ng-packs/packages/schematics/src/utils/generics.ts @@ -67,21 +67,23 @@ export function generateRefWithPlaceholders(sourceType: string) { } export function extractSimpleGenerics(sourceType: string) { - const { identifier, generics } = extractGenerics(sourceType); + const { identifier, generics, array } = extractGenerics(sourceType); return { identifier: getLastSegment(identifier), generics: generics.map(getLastSegment), + array }; } export function extractGenerics(sourceType: string) { + const isArray = /\[\]$/.test(sourceType); const regex = /(?[^<]+)(<(?.+)>)?/g; const { identifier = '', generics = '' } = regex.exec(sourceType)?.groups ?? {}; - - return { + return { identifier, generics: generics.split(/,\s*/).filter(Boolean), + array: isArray ? '[]':'' }; } diff --git a/npm/ng-packs/packages/schematics/src/utils/rule.ts b/npm/ng-packs/packages/schematics/src/utils/rule.ts index c68347531f..c2a44e6474 100644 --- a/npm/ng-packs/packages/schematics/src/utils/rule.ts +++ b/npm/ng-packs/packages/schematics/src/utils/rule.ts @@ -25,6 +25,9 @@ export function applyWithOverwrite(source: Source, rules: Rule[]): Rule { export function mergeAndAllowDelete(host: Tree, rule: Rule) { return async (tree: Tree, context: SchematicContext) => { const nextTree = await callRule(rule, tree, context).toPromise(); + if(!nextTree){ + return; + } host.merge(nextTree, MergeStrategy.AllowDeleteConflict); }; } diff --git a/npm/ng-packs/packages/schematics/src/utils/type.ts b/npm/ng-packs/packages/schematics/src/utils/type.ts index dbae0c55db..a5c83f8e63 100644 --- a/npm/ng-packs/packages/schematics/src/utils/type.ts +++ b/npm/ng-packs/packages/schematics/src/utils/type.ts @@ -14,10 +14,8 @@ export function createTypeSimplifier() { ); type = /any` : identifier; + const { identifier, generics, array} = extractSimpleGenerics(type); + return generics.length ? `${identifier}<${generics.join(', ')}>${array}` : identifier; }); return (type: string) => {