Commit 2de6b4b9 authored by nanahira's avatar nanahira

add getMetadataFromDecorator

parent d401ecb5
......@@ -10,4 +10,5 @@ Dockerfile
/dist/test
/src
/tests
/dist/tests
\ No newline at end of file
/dist/tests
/build.js
export type AllDecorators = MethodDecorator &
ClassDecorator &
PropertyDecorator;
export type AnyDecorators =
| MethodDecorator
| ClassDecorator
| PropertyDecorator
| ParameterDecorator;
export * from './interfaces';
export * from './decorator-types';
import 'reflect-metadata';
import { ArrayValue, GenericMap, Key, MapValue, StringDict } from './def';
import {
AnyDecorators,
ArrayValue,
GenericMap,
Key,
MapValue,
StringDict,
} from './def';
import { getClass } from './utility/utility';
export class Reflector<M extends StringDict, AM extends StringDict> {
......@@ -41,4 +48,16 @@ export class Reflector<M extends StringDict, AM extends StringDict> {
...valueFromProperty,
] as ArrayValue<AM, K>;
}
getMetadataFromDecorator<K extends Key<GenericMap<M, AM>>>(
dec: AnyDecorators,
metadataKey: K,
): MapValue<M, AM, K> {
const _dec = dec as PropertyDecorator;
class TempClass {}
const propertyKey =
'_temp_property_key_' + Math.random().toString(16).slice(2);
_dec(TempClass.prototype, propertyKey);
return this.get(metadataKey, TempClass, propertyKey);
}
}
import 'reflect-metadata';
import { ArrayValueMap, GenericMap, Key, MergeKey, StringDict } from './def';
import { AllDecorators, ArrayValueMap, GenericMap, Key, MergeKey, StringDict } from './def';
import { getClass } from './utility/utility';
export type AllDecorators = MethodDecorator &
ClassDecorator &
PropertyDecorator;
export class MetadataSetter<M extends StringDict, AM extends StringDict> {
private getMetadataInDecorator<
K extends MergeKey<M, AM>,
......
......@@ -212,4 +212,29 @@ describe('Reflector', () => {
expect(reflector.get('bar', A, 'staticMethod')).toStrictEqual([5, 6]);
expect(reflector.get('bar', a, 'staticMethod')).toStrictEqual([5, 6]);
});
it('should get metadata from decorator', () => {
const classDec: ClassDecorator = Metadata.set('foo', 'class-decorator');
const propDec: PropertyDecorator = Metadata.set(
'foo',
'property-decorator',
);
const methodDec: MethodDecorator = Metadata.set('foo', 'method-decorator');
const transDec = Metadata.append('bar', 444);
expect(reflector.getMetadataFromDecorator(classDec, 'foo')).toEqual(
'class-decorator',
);
expect(reflector.getMetadataFromDecorator(propDec, 'foo')).toEqual(
'property-decorator',
);
expect(reflector.getMetadataFromDecorator(methodDec, 'foo')).toEqual(
'method-decorator',
);
expect(reflector.getMetadataFromDecorator(transDec, 'bar')).toEqual([444]);
});
});
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment