diff --git a/npm/ng-packs/packages/schematics/src/utils/model.ts b/npm/ng-packs/packages/schematics/src/utils/model.ts index 0dd2c4e020..9078f422b7 100644 --- a/npm/ng-packs/packages/schematics/src/utils/model.ts +++ b/npm/ng-packs/packages/schematics/src/utils/model.ts @@ -4,7 +4,12 @@ import { sortImports } from './import'; import { parseNamespace } from './namespace'; import { relativePathToModel } from './path'; import { parseGenerics } from './tree'; -import { createTypeSimplifier, createTypesToImportsReducer } from './type'; +import { + createTypeSimplifier, + createTypesToImportsReducer, + flattenUnionTypes, + removeTypeModifiers, +} from './type'; export function createImportRefsToModelMapper(solution: string, types: Record) { const mapImportRefToInterface = createImportRefToInterfaceMapper(solution, types); @@ -81,20 +86,11 @@ export function createImportRefToImportReducerCreator( export function mergeBaseTypeWithProperties({ baseType, genericArguments, properties }: Type) { const removeGenerics = createGenericRemover(genericArguments); + const clearTypes = (type: string) => removeTypeModifiers(removeGenerics(type)); const baseTypes = baseType ? [baseType] : []; const propTypes = (properties ?? []).map(({ type }) => type); - return [...baseTypes, ...propTypes].reduce(flattenUnionTypes, []).map(removeGenerics); -} - -export function flattenUnionTypes(types: string[], type: string) { - type - .replace(/^{/, '') - .replace(/}$/, '') - .split(':') - .forEach(t => types.push(t)); - - return types; + return [...baseTypes, ...propTypes].reduce(flattenUnionTypes, []).map(clearTypes); } export function createGenericRemover(genericArguments: string[] | null) { diff --git a/npm/ng-packs/packages/schematics/src/utils/type.ts b/npm/ng-packs/packages/schematics/src/utils/type.ts index 5a56e2e445..d82dd001bc 100644 --- a/npm/ng-packs/packages/schematics/src/utils/type.ts +++ b/npm/ng-packs/packages/schematics/src/utils/type.ts @@ -21,26 +21,33 @@ export function createTypeSimplifier(solution: string) { } export function createTypeParser(replacerFn = (t: string) => t) { - const optionalRegex = /\?/g; - - return (originalType: string) => { - const unionType = originalType - .replace(/^{/, '') - .replace(/}$/, '') - .split(':'); - - return unionType + return (originalType: string) => + flattenUnionTypes([], originalType) .map(type => { - type = type.startsWith('[') ? type.slice(1, -1) + '[]' : type; - type = type.replace(optionalRegex, ''); + type = removeTypeModifiers(type); type = type.replace( /System\.([0-9A-Za-z]+)/g, (_, match) => SYSTEM_TYPES.get(match) ?? strings.camelize(match), ); + return replacerFn(type); }) .join(' | '); - }; +} + +export function flattenUnionTypes(types: string[], type: string) { + type + .replace(/^{/, '') + .replace(/}$/, '') + .split(':') + .forEach(t => types.push(t)); + + return types; +} + +export function removeTypeModifiers(type: string) { + type = type.startsWith('[') ? type.slice(1, -1) + '[]' : type; + return type.replace(/\?/g, ''); } export function createTypesToImportsReducer(solution: string, namespace: string) {