UNPKG

typed-reflector

Version:

Metadata reflector with typing support.

8 lines (7 loc) 7.95 kB
{ "version": 3, "sources": ["../index.ts", "../src/reflector.ts", "../src/utility/utility.ts", "../src/setter.ts"], "sourcesContent": ["export * from './src/reflector';\nexport * from './src/setter';\nexport * from './src/def';\n", "import 'reflect-metadata';\nimport { ArrayValue, GenericMap, Key, MapValue, StringDict } from './def';\nimport { getClass } from './utility/utility';\n\nexport class Reflector<M extends StringDict, AM extends StringDict> {\n get<K extends Key<GenericMap<M, AM>>>(\n metadataKey: K,\n instance: any,\n key?: string | symbol,\n ): MapValue<M, AM, K> {\n const instanceClass = getClass(instance);\n if (key) {\n return Reflect.getMetadata(metadataKey, instanceClass, key);\n } else {\n return Reflect.getMetadata(metadataKey, instanceClass);\n }\n }\n\n getArray<K extends Key<AM>>(\n metadataKey: K,\n instance: any,\n key?: string | symbol,\n ): ArrayValue<AM, K> {\n return this.get(metadataKey, instance, key) || [];\n }\n\n getProperty<K extends Key<AM>, I = any>(\n metadataKey: K,\n instance: I,\n key: keyof I & (string | symbol),\n alternate?: any,\n ): ArrayValue<AM, K> {\n const valueFromClass = this.getArray(metadataKey, instance);\n const valueFromAlternate = alternate\n ? this.getArray(metadataKey, alternate)\n : [];\n const valueFromProperty = this.getArray(metadataKey, instance, key);\n return [\n ...valueFromClass,\n ...valueFromAlternate,\n ...valueFromProperty,\n ] as ArrayValue<AM, K>;\n }\n}\n", "export function isClass(target: any) {\n if (typeof target !== 'function') {\n return false;\n }\n const proto = target.constructor;\n return proto === Function;\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function getClass(target: any): Function {\n return isClass(target) ? target : getClass(target.constructor);\n}\n", "import 'reflect-metadata';\nimport { ArrayValueMap, GenericMap, Key, MergeKey, StringDict } from './def';\nimport { getClass } from './utility/utility';\n\nexport type AllDecorators = MethodDecorator &\n ClassDecorator &\n PropertyDecorator;\n\nexport class MetadataSetter<M extends StringDict, AM extends StringDict> {\n private getMetadataInDecorator<\n K extends MergeKey<M, AM>,\n GM extends Record<MergeKey<M, AM>, any> = GenericMap<M, AM>,\n >(metaKey: K, target: any, key?: any): GM[K] {\n if (key) {\n return Reflect.getMetadata(metaKey, target, key);\n } else {\n return Reflect.getMetadata(metaKey, target);\n }\n }\n\n private setMetadataInDecorator<\n K extends MergeKey<M, AM>,\n GM extends Record<MergeKey<M, AM>, any> = GenericMap<M, AM>,\n >(metaKey: K, value: GM[K], target: any, key?: any) {\n if (key) {\n return Reflect.defineMetadata(metaKey, value, target, key);\n } else {\n return Reflect.defineMetadata(metaKey, value, target);\n }\n }\n\n transform<\n K extends MergeKey<M, AM>,\n IK extends Key<AM>,\n GM extends Record<MergeKey<M, AM>, any> = GenericMap<M, AM>,\n >(\n metadataKey: K,\n metadataValueFun: (oldValue: GM[K]) => GM[K],\n keysIndexMeta?: IK,\n ): AllDecorators {\n return (target, key?) => {\n const targetClass = getClass(target);\n const oldValue = this.getMetadataInDecorator<K, GM>(\n metadataKey,\n targetClass,\n key,\n );\n const newValue = metadataValueFun(oldValue);\n this.setMetadataInDecorator(metadataKey, newValue, targetClass, key);\n if (keysIndexMeta) {\n const keysDec = this.appendUnique<IK, any>(keysIndexMeta, key);\n keysDec(targetClass);\n }\n };\n }\n\n set<K extends MergeKey<M, AM>, IK extends Key<AM>>(\n metadataKey: K,\n metadataValue: GenericMap<M, AM>[K],\n keysIndexMeta?: IK,\n ) {\n return this.transform<K, IK>(\n metadataKey,\n () => metadataValue,\n keysIndexMeta,\n );\n }\n\n append<K extends Key<AM>, IK extends Key<AM>>(\n metadataKey: K,\n metadataValue: AM[K],\n keysIndexMeta?: IK,\n ) {\n return this.transform<K, IK, ArrayValueMap<AM>>(\n metadataKey,\n (arr) => {\n const newArr = arr || [];\n newArr.push(metadataValue);\n return newArr;\n },\n keysIndexMeta,\n );\n }\n\n appendUnique<K extends Key<AM>, IK extends Key<AM>>(\n metadataKey: K,\n metadataValue: AM[K],\n keysIndexMeta?: IK,\n ) {\n return this.transform<K, IK, ArrayValueMap<AM>>(\n metadataKey,\n (arr) => {\n const newArr = arr || [];\n if (newArr.includes(metadataValue)) {\n return newArr;\n }\n newArr.push(metadataValue);\n return newArr;\n },\n keysIndexMeta,\n );\n }\n\n concat<K extends Key<AM>, IK extends Key<AM>>(\n metadataKey: K,\n metadataValue: ArrayValueMap<AM>[K],\n keysIndexMeta?: IK,\n ) {\n return this.transform<K, IK, ArrayValueMap<AM>>(\n metadataKey,\n (arr) => (arr || []).concat(metadataValue),\n keysIndexMeta,\n );\n }\n\n param<K extends Key<AM>, IK extends Key<AM>>(\n metadataKey: K,\n metadataValue: AM[K],\n keysIndexMeta?: IK,\n ): ParameterDecorator {\n return (obj, key, i) => {\n const dec = this.transform<K, IK, ArrayValueMap<AM>>(\n metadataKey,\n (arr) => {\n const newArr = arr || [];\n newArr[i] = metadataValue;\n return newArr;\n },\n keysIndexMeta,\n );\n dec(obj, key);\n };\n }\n}\n"], "mappings": "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", "names": ["import_reflect_metadata"] }