|
|
@ -68,7 +68,7 @@ export function createImportRefToImportReducerCreator( |
|
|
return (imports: Import[], importRef: string) => |
|
|
return (imports: Import[], importRef: string) => |
|
|
reduceTypesToImport( |
|
|
reduceTypesToImport( |
|
|
imports, |
|
|
imports, |
|
|
mergeBaseTypeWithProperties(types[importRef]).reduce((typeNames: string[], { type }) => { |
|
|
mergeBaseTypeWithProperties(types[importRef]).reduce((typeNames: string[], type) => { |
|
|
parseGenerics(type) |
|
|
parseGenerics(type) |
|
|
.toGenerics() |
|
|
.toGenerics() |
|
|
.forEach(t => typeNames.push(t)); |
|
|
.forEach(t => typeNames.push(t)); |
|
|
@ -81,27 +81,22 @@ 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 baseTypes = baseType ? [{ type: baseType }] : []; |
|
|
const baseTypes = baseType ? [baseType] : []; |
|
|
const propTypes = (properties ?? []).map(({ type }) => ({ type })); |
|
|
const propTypes = (properties ?? []).map(({ type }) => type); |
|
|
|
|
|
|
|
|
return [...baseTypes, ...propTypes].map(removeGenerics); |
|
|
return [...baseTypes, ...propTypes].map(removeGenerics); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
export function createGenericRemover(genericArguments: string[] | null) { |
|
|
export function createGenericRemover(genericArguments: string[] | null) { |
|
|
if (!genericArguments) return (def: SimpleTypeDef) => def; |
|
|
if (!genericArguments) return (type: string) => type; |
|
|
|
|
|
|
|
|
return ({ type }: SimpleTypeDef) => ({ |
|
|
return (type: string) => |
|
|
type: genericArguments.includes(type) |
|
|
genericArguments.includes(type) |
|
|
? '' |
|
|
? '' |
|
|
: type.replace(/<([^<>]+)>/, (_, match) => { |
|
|
: type.replace(/<([^<>]+)>/, (_, match) => { |
|
|
return match |
|
|
return match |
|
|
.split(/,\s*/) |
|
|
.split(/,\s*/) |
|
|
.filter((t: string) => !genericArguments.includes(t)) |
|
|
.filter((t: string) => !genericArguments.includes(t)) |
|
|
.join(','); |
|
|
.join(','); |
|
|
}), |
|
|
}); |
|
|
}); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
interface SimpleTypeDef { |
|
|
|
|
|
type: string; |
|
|
|
|
|
} |
|
|
} |
|
|
|