Skip to content

Commit b32e822

Browse files
committed
Fix metadata map getting recreated
1 parent 336807a commit b32e822

File tree

2 files changed

+14
-9
lines changed

2 files changed

+14
-9
lines changed

src/define-metadata.test.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,27 @@
11
import { Reflection as Reflect } from './index';
22

3+
const metadataKey = 'key';
4+
const metadataValue = 'value';
5+
const target = {};
6+
37
test('with invalid target', () => {
4-
const metadataKey = 'key';
5-
const metadataValue = 'value';
68
expect(() => Reflect.defineMetadata(metadataKey, metadataValue)).toThrow(TypeError);
79
});
810

911
test('with target but no property key', () => {
10-
const metadataKey = 'key';
11-
const metadataValue = 'value';
12-
const target = {};
1312
expect(() => Reflect.defineMetadata(metadataKey, metadataValue, target)).not.toThrow();
1413
});
1514

1615
test('with target and property key', () => {
17-
const metadataKey = 'key';
18-
const metadataValue = 'value';
19-
const target = {};
2016
const propertyKey = 'name';
2117
expect(() => Reflect.defineMetadata(metadataKey, metadataValue, target, propertyKey)).not.toThrow();
2218
});
19+
20+
test('metadata map is reused', () => {
21+
const metadataKey2 = 'key2';
22+
const metadataValue2 = 'value2';
23+
Reflect.defineMetadata(metadataKey, metadataValue, target);
24+
Reflect.defineMetadata(metadataKey2, metadataValue2, target);
25+
expect(Reflect.getOwnMetadata(metadataKey, target)).toEqual(metadataValue);
26+
expect(Reflect.getOwnMetadata(metadataKey2, target)).toEqual(metadataValue2);
27+
});

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ function decorateProperty(decorators: MemberDecorator[], target: Target, propert
7171
function ordinaryDefineOwnMetadata(metadataKey: MetadataKey, metadataValue: MetadataValue, target: Target, propertyKey?: PropertyKey): void {
7272
if (propertyKey && !['string', 'symbol'].includes(typeof propertyKey)) throw new TypeError();
7373

74-
createMetadataMap(target, propertyKey)
74+
(getMetadataMap(target, propertyKey) || createMetadataMap(target, propertyKey))
7575
.set(metadataKey, metadataValue);
7676
}
7777

0 commit comments

Comments
 (0)