Browse Source

fix: avoid importing modified types in schematics

pull/5137/head
Arman Ozak 6 years ago
parent
commit
7d272958ba
  1. 20
      npm/ng-packs/packages/schematics/src/utils/model.ts
  2. 31
      npm/ng-packs/packages/schematics/src/utils/type.ts

20
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<string, Type>) {
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) {

31
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) {

Loading…
Cancel
Save