Skip to content

Commit e3a2a4f

Browse files
authored
Merge pull request #4 from abraham/get-own-metadata
Add getOwnMetadata
2 parents 8daaad5 + 11e23c0 commit e3a2a4f

File tree

4 files changed

+52
-1
lines changed

4 files changed

+52
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ import '@abraham/reflection/dist/reflect';
3737
Reflect.defineMetadata(metadataKey, metadataValue, target);
3838
```
3939

40-
4140
API
4241
----
4342

@@ -47,6 +46,7 @@ Reflection does not currently cover the complete API surface of reflect-metadata
4746
Reflect.decorate(...);
4847
Reflect.defineMetadata(...);
4948
Reflect.getMetadata(...);
49+
Reflect.getOwnMetadata(...);
5050
Reflect.hasOwnMetadata(...);
5151
Reflect.metadata(...);
5252
```

src/get-own-metadata.test.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { Reflection as Reflect } from './index';
2+
3+
const prototype = {};
4+
const metadataKey = 'key';
5+
const metadataValue = 'value';
6+
const target = {};
7+
const propertyKey = 'name';
8+
9+
test('invalid target', () => {
10+
expect(() => Reflect.getOwnMetadata(metadataKey)).toThrow(TypeError);
11+
});
12+
13+
test('not defined with target', () => {
14+
expect(Reflect.getOwnMetadata(metadataKey, target)).toBeUndefined();
15+
});
16+
17+
test('defined', () => {
18+
Reflect.defineMetadata(metadataKey, metadataValue, target);
19+
expect(Reflect.getOwnMetadata(metadataKey, target)).toEqual(metadataValue);
20+
});
21+
22+
test('defined on prototype', () => {
23+
const target = Object.create(prototype);
24+
Reflect.defineMetadata(metadataKey, metadataValue, prototype);
25+
expect(Reflect.getOwnMetadata(metadataKey, target)).toBeUndefined();
26+
});
27+
28+
test('not defined with property key', () => {
29+
expect(Reflect.getOwnMetadata(metadataKey, target, propertyKey)).toBeUndefined();
30+
});
31+
32+
test('defined with property key', () => {
33+
Reflect.defineMetadata(metadataKey, metadataValue, target, propertyKey);
34+
expect(Reflect.getOwnMetadata(metadataKey, target, propertyKey)).toEqual(metadataValue);
35+
});
36+
37+
test('defined on prototype with property key', () => {
38+
const target = Object.create(prototype);
39+
Reflect.defineMetadata(metadataKey, metadataValue, prototype, propertyKey);
40+
expect(Reflect.getOwnMetadata(metadataKey, target, propertyKey)).toBeUndefined();
41+
});

src/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ export const Reflection = Object.assign({}, Reflect, {
22
decorate,
33
defineMetadata,
44
getMetadata,
5+
getOwnMetadata,
56
hasOwnMetadata,
67
metadata,
78
});
@@ -42,6 +43,10 @@ export function getMetadata(metadataKey: MetadataKey, target: Target, propertyKe
4243
return ordinaryGetMetadata(metadataKey, target, propertyKey);
4344
}
4445

46+
export function getOwnMetadata(metadataKey: MetadataKey, target: Target, propertyKey?: PropertyKey) {
47+
return ordinaryGetOwnMetadata(metadataKey, target, propertyKey);
48+
}
49+
4550
export function hasOwnMetadata(metadataKey: MetadataKey, target: Target, propertyKey?: PropertyKey): boolean {
4651
return ordinaryHasOwnMetadata(metadataKey, target, propertyKey);
4752
}
@@ -87,6 +92,7 @@ function ordinaryHasOwnMetadata(metadataKey: MetadataKey, target: Target, proper
8792
}
8893

8994
function ordinaryGetOwnMetadata(metadataKey: MetadataKey, target: Target, propertyKey?: PropertyKey): Function | undefined {
95+
if (target === undefined) throw new TypeError();
9096
const metadataMap = getMetadataMap(target, propertyKey);
9197
return metadataMap && metadataMap.get(metadataKey);
9298
}

src/reflect.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,7 @@ test('metadata', () => {
1919
test('hasOwnMetadata', () => {
2020
expect(Reflect.hasOwnMetadata).toBeDefined();
2121
});
22+
23+
test('getOwnMetadata', () => {
24+
expect(Reflect.getOwnMetadata).toBeDefined();
25+
});

0 commit comments

Comments
 (0)