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 { parseNamespace } from './namespace';
import { relativePathToModel } from './path'; import { relativePathToModel } from './path';
import { parseGenerics } from './tree'; 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>) { export function createImportRefsToModelMapper(solution: string, types: Record<string, Type>) {
const mapImportRefToInterface = createImportRefToInterfaceMapper(solution, types); const mapImportRefToInterface = createImportRefToInterfaceMapper(solution, types);
@ -81,20 +86,11 @@ export function createImportRefToImportReducerCreator(
export function mergeBaseTypeWithProperties({ baseType, genericArguments, properties }: Type) { export function mergeBaseTypeWithProperties({ baseType, genericArguments, properties }: Type) {
const removeGenerics = createGenericRemover(genericArguments); const removeGenerics = createGenericRemover(genericArguments);
const clearTypes = (type: string) => removeTypeModifiers(removeGenerics(type));
const baseTypes = baseType ? [baseType] : []; const baseTypes = baseType ? [baseType] : [];
const propTypes = (properties ?? []).map(({ type }) => type); const propTypes = (properties ?? []).map(({ type }) => type);
return [...baseTypes, ...propTypes].reduce(flattenUnionTypes, []).map(removeGenerics); return [...baseTypes, ...propTypes].reduce(flattenUnionTypes, []).map(clearTypes);
}
export function flattenUnionTypes(types: string[], type: string) {
type
.replace(/^{/, '')
.replace(/}$/, '')
.split(':')
.forEach(t => types.push(t));
return types;
} }
export function createGenericRemover(genericArguments: string[] | null) { 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) { export function createTypeParser(replacerFn = (t: string) => t) {
const optionalRegex = /\?/g; return (originalType: string) =>
flattenUnionTypes([], originalType)
return (originalType: string) => {
const unionType = originalType
.replace(/^{/, '')
.replace(/}$/, '')
.split(':');
return unionType
.map(type => { .map(type => {
type = type.startsWith('[') ? type.slice(1, -1) + '[]' : type; type = removeTypeModifiers(type);
type = type.replace(optionalRegex, '');
type = type.replace( type = type.replace(
/System\.([0-9A-Za-z]+)/g, /System\.([0-9A-Za-z]+)/g,
(_, match) => SYSTEM_TYPES.get(match) ?? strings.camelize(match), (_, match) => SYSTEM_TYPES.get(match) ?? strings.camelize(match),
); );
return replacerFn(type); return replacerFn(type);
}) })
.join(' | '); .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) { export function createTypesToImportsReducer(solution: string, namespace: string) {

Loading…
Cancel
Save