/** * Metadata args utility functions. */ export class MetadataUtils { /** * Gets given's entity all inherited classes. * Gives in order from parents to children. * For example Post extends ContentModel which extends Unit it will give * [Unit, ContentModel, Post] */ static getInheritanceTree(entity: Function): Function[] { const tree: Function[] = [entity]; const getPrototypeOf = (object: Function): void => { const proto = Object.getPrototypeOf(object); if (proto && proto.name) { tree.push(proto); getPrototypeOf(proto); } }; getPrototypeOf(entity); return tree; } /** * Checks if this table is inherited from another table. */ static isInherited(target1: Function, target2: Function) { return target1.prototype instanceof target2; } /** * Filters given array of targets by a given classes. * If classes are not given, then it returns array itself. */ static filterByTarget(array: T[], classes?: any[]): T[] { if (!classes) return array; return array.filter(item => item.target && classes.indexOf(item.target) !== -1); } }