Commit 2de6b4b9 authored by nanahira's avatar nanahira

add getMetadataFromDecorator

parent d401ecb5
...@@ -10,4 +10,5 @@ Dockerfile ...@@ -10,4 +10,5 @@ Dockerfile
/dist/test /dist/test
/src /src
/tests /tests
/dist/tests /dist/tests
\ No newline at end of file /build.js
export type AllDecorators = MethodDecorator &
ClassDecorator &
PropertyDecorator;
export type AnyDecorators =
| MethodDecorator
| ClassDecorator
| PropertyDecorator
| ParameterDecorator;
export * from './interfaces'; export * from './interfaces';
export * from './decorator-types';
import 'reflect-metadata'; 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'; import { getClass } from './utility/utility';
export class Reflector<M extends StringDict, AM extends StringDict> { export class Reflector<M extends StringDict, AM extends StringDict> {
...@@ -41,4 +48,16 @@ export class Reflector<M extends StringDict, AM extends StringDict> { ...@@ -41,4 +48,16 @@ export class Reflector<M extends StringDict, AM extends StringDict> {
...valueFromProperty, ...valueFromProperty,
] as ArrayValue<AM, K>; ] 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 'reflect-metadata';
import { ArrayValueMap, GenericMap, Key, MergeKey, StringDict } from './def'; import { AllDecorators, ArrayValueMap, GenericMap, Key, MergeKey, StringDict } from './def';
import { getClass } from './utility/utility'; import { getClass } from './utility/utility';
export type AllDecorators = MethodDecorator &
ClassDecorator &
PropertyDecorator;
export class MetadataSetter<M extends StringDict, AM extends StringDict> { export class MetadataSetter<M extends StringDict, AM extends StringDict> {
private getMetadataInDecorator< private getMetadataInDecorator<
K extends MergeKey<M, AM>, K extends MergeKey<M, AM>,
......
...@@ -212,4 +212,29 @@ describe('Reflector', () => { ...@@ -212,4 +212,29 @@ describe('Reflector', () => {
expect(reflector.get('bar', A, 'staticMethod')).toStrictEqual([5, 6]); expect(reflector.get('bar', A, 'staticMethod')).toStrictEqual([5, 6]);
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