import { MetadataUtils } from 'typeorm/metadata-builder/MetadataUtils' import { ColumnOptions, EntityOptions, ColumnMetadata, EntityTarget, EntityInternalStorageWorkspace } from "./types"; export const internalStorage = { entityMetadata: new WeakMap>(), pushEntityOptions(target: EntityTarget, options: EntityOptions<{}>) { internalStorage.entityMetadata.set(target, options); }, columnMetadata: [] as Array, pushColumnOptions(object: object, propertyName: string, options?: ColumnOptions) { internalStorage.columnMetadata.push({ object, propertyName, options, }); }, getEntityWorkspace(target: EntityTarget): EntityInternalStorageWorkspace { const inheritanceTree = MetadataUtils.getInheritanceTree(target) return { entityOptions: internalStorage.entityMetadata.get(target) as EntityOptions | undefined, columnMetadata: internalStorage.columnMetadata.filter(column => inheritanceTree.includes(column.object.constructor)), } } }