UNPKG

17.9 kBSource Map (JSON)View Raw
1{"version":3,"file":"MetadataStorage.js","sourceRoot":"","sources":["../../src/MetadataStorage.ts"],"names":[],"mappings":"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","sourcesContent":["import { TypeMetadata, ExposeMetadata, ExcludeMetadata, TransformMetadata } from './interfaces';\nimport { TransformationType } from './enums';\n\n/**\n * Storage all library metadata.\n */\nexport class MetadataStorage {\n // -------------------------------------------------------------------------\n // Properties\n // -------------------------------------------------------------------------\n\n private _typeMetadatas = new Map<Function, Map<string, TypeMetadata>>();\n private _transformMetadatas = new Map<Function, Map<string, TransformMetadata[]>>();\n private _exposeMetadatas = new Map<Function, Map<string, ExposeMetadata>>();\n private _excludeMetadatas = new Map<Function, Map<string, ExcludeMetadata>>();\n private _ancestorsMap = new Map<Function, Function[]>();\n\n // -------------------------------------------------------------------------\n // Adder Methods\n // -------------------------------------------------------------------------\n\n addTypeMetadata(metadata: TypeMetadata): void {\n if (!this._typeMetadatas.has(metadata.target)) {\n this._typeMetadatas.set(metadata.target, new Map<string, TypeMetadata>());\n }\n this._typeMetadatas.get(metadata.target).set(metadata.propertyName, metadata);\n }\n\n addTransformMetadata(metadata: TransformMetadata): void {\n if (!this._transformMetadatas.has(metadata.target)) {\n this._transformMetadatas.set(metadata.target, new Map<string, TransformMetadata[]>());\n }\n if (!this._transformMetadatas.get(metadata.target).has(metadata.propertyName)) {\n this._transformMetadatas.get(metadata.target).set(metadata.propertyName, []);\n }\n this._transformMetadatas.get(metadata.target).get(metadata.propertyName).push(metadata);\n }\n\n addExposeMetadata(metadata: ExposeMetadata): void {\n if (!this._exposeMetadatas.has(metadata.target)) {\n this._exposeMetadatas.set(metadata.target, new Map<string, ExposeMetadata>());\n }\n this._exposeMetadatas.get(metadata.target).set(metadata.propertyName, metadata);\n }\n\n addExcludeMetadata(metadata: ExcludeMetadata): void {\n if (!this._excludeMetadatas.has(metadata.target)) {\n this._excludeMetadatas.set(metadata.target, new Map<string, ExcludeMetadata>());\n }\n this._excludeMetadatas.get(metadata.target).set(metadata.propertyName, metadata);\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n findTransformMetadatas(\n target: Function,\n propertyName: string,\n transformationType: TransformationType\n ): TransformMetadata[] {\n return this.findMetadatas(this._transformMetadatas, target, propertyName).filter(metadata => {\n if (!metadata.options) return true;\n if (metadata.options.toClassOnly === true && metadata.options.toPlainOnly === true) return true;\n\n if (metadata.options.toClassOnly === true) {\n return (\n transformationType === TransformationType.CLASS_TO_CLASS ||\n transformationType === TransformationType.PLAIN_TO_CLASS\n );\n }\n if (metadata.options.toPlainOnly === true) {\n return transformationType === TransformationType.CLASS_TO_PLAIN;\n }\n\n return true;\n });\n }\n\n findExcludeMetadata(target: Function, propertyName: string): ExcludeMetadata {\n return this.findMetadata(this._excludeMetadatas, target, propertyName);\n }\n\n findExposeMetadata(target: Function, propertyName: string): ExposeMetadata {\n return this.findMetadata(this._exposeMetadatas, target, propertyName);\n }\n\n findExposeMetadataByCustomName(target: Function, name: string): ExposeMetadata {\n return this.getExposedMetadatas(target).find(metadata => {\n return metadata.options && metadata.options.name === name;\n });\n }\n\n findTypeMetadata(target: Function, propertyName: string): TypeMetadata {\n return this.findMetadata(this._typeMetadatas, target, propertyName);\n }\n\n getStrategy(target: Function): 'excludeAll' | 'exposeAll' | 'none' {\n const excludeMap = this._excludeMetadatas.get(target);\n const exclude = excludeMap && excludeMap.get(undefined);\n const exposeMap = this._exposeMetadatas.get(target);\n const expose = exposeMap && exposeMap.get(undefined);\n if ((exclude && expose) || (!exclude && !expose)) return 'none';\n return exclude ? 'excludeAll' : 'exposeAll';\n }\n\n getExposedMetadatas(target: Function): ExposeMetadata[] {\n return this.getMetadata(this._exposeMetadatas, target);\n }\n\n getExcludedMetadatas(target: Function): ExcludeMetadata[] {\n return this.getMetadata(this._excludeMetadatas, target);\n }\n\n getExposedProperties(target: Function, transformationType: TransformationType): string[] {\n return this.getExposedMetadatas(target)\n .filter(metadata => {\n if (!metadata.options) return true;\n if (metadata.options.toClassOnly === true && metadata.options.toPlainOnly === true) return true;\n\n if (metadata.options.toClassOnly === true) {\n return (\n transformationType === TransformationType.CLASS_TO_CLASS ||\n transformationType === TransformationType.PLAIN_TO_CLASS\n );\n }\n if (metadata.options.toPlainOnly === true) {\n return transformationType === TransformationType.CLASS_TO_PLAIN;\n }\n\n return true;\n })\n .map(metadata => metadata.propertyName);\n }\n\n getExcludedProperties(target: Function, transformationType: TransformationType): string[] {\n return this.getExcludedMetadatas(target)\n .filter(metadata => {\n if (!metadata.options) return true;\n if (metadata.options.toClassOnly === true && metadata.options.toPlainOnly === true) return true;\n\n if (metadata.options.toClassOnly === true) {\n return (\n transformationType === TransformationType.CLASS_TO_CLASS ||\n transformationType === TransformationType.PLAIN_TO_CLASS\n );\n }\n if (metadata.options.toPlainOnly === true) {\n return transformationType === TransformationType.CLASS_TO_PLAIN;\n }\n\n return true;\n })\n .map(metadata => metadata.propertyName);\n }\n\n clear(): void {\n this._typeMetadatas.clear();\n this._exposeMetadatas.clear();\n this._excludeMetadatas.clear();\n this._ancestorsMap.clear();\n }\n\n // -------------------------------------------------------------------------\n // Private Methods\n // -------------------------------------------------------------------------\n\n private getMetadata<T extends { target: Function; propertyName: string }>(\n metadatas: Map<Function, Map<string, T>>,\n target: Function\n ): T[] {\n const metadataFromTargetMap = metadatas.get(target);\n let metadataFromTarget: T[];\n if (metadataFromTargetMap) {\n metadataFromTarget = Array.from(metadataFromTargetMap.values()).filter(meta => meta.propertyName !== undefined);\n }\n const metadataFromAncestors: T[] = [];\n for (const ancestor of this.getAncestors(target)) {\n const ancestorMetadataMap = metadatas.get(ancestor);\n if (ancestorMetadataMap) {\n const metadataFromAncestor = Array.from(ancestorMetadataMap.values()).filter(\n meta => meta.propertyName !== undefined\n );\n metadataFromAncestors.push(...metadataFromAncestor);\n }\n }\n return metadataFromAncestors.concat(metadataFromTarget || []);\n }\n\n private findMetadata<T extends { target: Function; propertyName: string }>(\n metadatas: Map<Function, Map<string, T>>,\n target: Function,\n propertyName: string\n ): T {\n const metadataFromTargetMap = metadatas.get(target);\n if (metadataFromTargetMap) {\n const metadataFromTarget = metadataFromTargetMap.get(propertyName);\n if (metadataFromTarget) {\n return metadataFromTarget;\n }\n }\n for (const ancestor of this.getAncestors(target)) {\n const ancestorMetadataMap = metadatas.get(ancestor);\n if (ancestorMetadataMap) {\n const ancestorResult = ancestorMetadataMap.get(propertyName);\n if (ancestorResult) {\n return ancestorResult;\n }\n }\n }\n return undefined;\n }\n\n private findMetadatas<T extends { target: Function; propertyName: string }>(\n metadatas: Map<Function, Map<string, T[]>>,\n target: Function,\n propertyName: string\n ): T[] {\n const metadataFromTargetMap = metadatas.get(target);\n let metadataFromTarget: T[];\n if (metadataFromTargetMap) {\n metadataFromTarget = metadataFromTargetMap.get(propertyName);\n }\n const metadataFromAncestorsTarget: T[] = [];\n for (const ancestor of this.getAncestors(target)) {\n const ancestorMetadataMap = metadatas.get(ancestor);\n if (ancestorMetadataMap) {\n if (ancestorMetadataMap.has(propertyName)) {\n metadataFromAncestorsTarget.push(...ancestorMetadataMap.get(propertyName));\n }\n }\n }\n return metadataFromAncestorsTarget\n .slice()\n .reverse()\n .concat((metadataFromTarget || []).slice().reverse());\n }\n\n private getAncestors(target: Function): Function[] {\n if (!target) return [];\n if (!this._ancestorsMap.has(target)) {\n const ancestors: Function[] = [];\n for (\n let baseClass = Object.getPrototypeOf(target.prototype.constructor);\n typeof baseClass.prototype !== 'undefined';\n baseClass = Object.getPrototypeOf(baseClass.prototype.constructor)\n ) {\n ancestors.push(baseClass);\n }\n this._ancestorsMap.set(target, ancestors);\n }\n return this._ancestorsMap.get(target);\n }\n}\n"]}
\No newline at end of file