Skip to content

Commit cdd6366

Browse files
author
Gleb Ivanov
committed
fixed review issues
1 parent a13fc5a commit cdd6366

8 files changed

+82
-94
lines changed

dist/vue-class-component.common.js

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
99

1010
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
1111

12-
require('reflect-metadata');
1312
var Vue = _interopDefault(require('vue'));
1413

15-
function copyReflectionMetadata(from, to, reflectionMap) {
16-
shallowCopy(from.prototype, to.prototype, reflectionMap.instance);
17-
shallowCopy(from, to, reflectionMap.static);
18-
}
19-
function shallowCopy(from, to, propertyKeys) {
20-
var _loop_1 = function (propertyKey) {
21-
propertyKeys[propertyKey].forEach(function (metadataKey) {
22-
var metadata = Reflect.getOwnMetadata(metadataKey, from, propertyKey);
23-
Reflect.defineMetadata(metadataKey, metadata, to, propertyKey);
24-
});
25-
};
26-
for (var propertyKey in propertyKeys) {
27-
_loop_1(propertyKey);
28-
}
29-
}
30-
3114
var hasProto = { __proto__: [] } instanceof Array;
3215
function createDecorator(factory) {
3316
return function (target, key, index) {
@@ -122,18 +105,13 @@ var $internalHooks = [
122105
];
123106
function componentFactory(Component, options) {
124107
if (options === void 0) { options = {}; }
125-
var reflectionMap = {
126-
instance: {},
127-
static: {}
128-
};
129108
options.name = options.name || Component._componentTag || Component.name;
130109
// prototype props.
131110
var proto = Component.prototype;
132111
Object.getOwnPropertyNames(proto).forEach(function (key) {
133112
if (key === 'constructor') {
134113
return;
135114
}
136-
reflectionMap.instance[key] = Reflect.getOwnMetadataKeys(proto, key);
137115
// hooks
138116
if ($internalHooks.indexOf(key) > -1) {
139117
options[key] = proto[key];
@@ -169,8 +147,7 @@ function componentFactory(Component, options) {
169147
? superProto.constructor
170148
: Vue;
171149
var Extended = Super.extend(options);
172-
forwardStaticMembersAndCollectReflection(Extended, Component, Super, reflectionMap);
173-
copyReflectionMetadata(Component, Extended, reflectionMap);
150+
forwardStaticMembers(Extended, Component, Super);
174151
return Extended;
175152
}
176153
var reservedPropertyNames = [
@@ -188,14 +165,13 @@ var reservedPropertyNames = [
188165
'directive',
189166
'filter'
190167
];
191-
function forwardStaticMembersAndCollectReflection(Extended, Original, Super, reflectionMap) {
168+
function forwardStaticMembers(Extended, Original, Super) {
192169
// We have to use getOwnPropertyNames since Babel registers methods as non-enumerable
193170
Object.getOwnPropertyNames(Original).forEach(function (key) {
194171
// `prototype` should not be overwritten
195172
if (key === 'prototype') {
196173
return;
197174
}
198-
reflectionMap.static[key] = Reflect.getOwnMetadataKeys(Original, key);
199175
// Some browsers does not allow reconfigure built-in properties
200176
var extendedDescriptor = Object.getOwnPropertyDescriptor(Extended, key);
201177
if (extendedDescriptor && !extendedDescriptor.configurable) {

dist/vue-class-component.js

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,13 @@
44
* @license MIT
55
*/
66
(function (global, factory) {
7-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('reflect-metadata'), require('vue')) :
8-
typeof define === 'function' && define.amd ? define(['exports', 'reflect-metadata', 'vue'], factory) :
9-
(factory((global.VueClassComponent = {}),null,global.Vue));
10-
}(this, (function (exports,reflectMetadata,Vue) { 'use strict';
7+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('vue')) :
8+
typeof define === 'function' && define.amd ? define(['exports', 'vue'], factory) :
9+
(factory((global.VueClassComponent = {}),global.Vue));
10+
}(this, (function (exports,Vue) { 'use strict';
1111

1212
Vue = Vue && Vue.hasOwnProperty('default') ? Vue['default'] : Vue;
1313

14-
function copyReflectionMetadata(from, to, reflectionMap) {
15-
shallowCopy(from.prototype, to.prototype, reflectionMap.instance);
16-
shallowCopy(from, to, reflectionMap.static);
17-
}
18-
function shallowCopy(from, to, propertyKeys) {
19-
var _loop_1 = function (propertyKey) {
20-
propertyKeys[propertyKey].forEach(function (metadataKey) {
21-
var metadata = Reflect.getOwnMetadata(metadataKey, from, propertyKey);
22-
Reflect.defineMetadata(metadataKey, metadata, to, propertyKey);
23-
});
24-
};
25-
for (var propertyKey in propertyKeys) {
26-
_loop_1(propertyKey);
27-
}
28-
}
29-
3014
var hasProto = { __proto__: [] } instanceof Array;
3115
function createDecorator(factory) {
3216
return function (target, key, index) {
@@ -121,18 +105,13 @@ var $internalHooks = [
121105
];
122106
function componentFactory(Component, options) {
123107
if (options === void 0) { options = {}; }
124-
var reflectionMap = {
125-
instance: {},
126-
static: {}
127-
};
128108
options.name = options.name || Component._componentTag || Component.name;
129109
// prototype props.
130110
var proto = Component.prototype;
131111
Object.getOwnPropertyNames(proto).forEach(function (key) {
132112
if (key === 'constructor') {
133113
return;
134114
}
135-
reflectionMap.instance[key] = Reflect.getOwnMetadataKeys(proto, key);
136115
// hooks
137116
if ($internalHooks.indexOf(key) > -1) {
138117
options[key] = proto[key];
@@ -168,8 +147,7 @@ function componentFactory(Component, options) {
168147
? superProto.constructor
169148
: Vue;
170149
var Extended = Super.extend(options);
171-
forwardStaticMembersAndCollectReflection(Extended, Component, Super, reflectionMap);
172-
copyReflectionMetadata(Component, Extended, reflectionMap);
150+
forwardStaticMembers(Extended, Component, Super);
173151
return Extended;
174152
}
175153
var reservedPropertyNames = [
@@ -187,14 +165,13 @@ var reservedPropertyNames = [
187165
'directive',
188166
'filter'
189167
];
190-
function forwardStaticMembersAndCollectReflection(Extended, Original, Super, reflectionMap) {
168+
function forwardStaticMembers(Extended, Original, Super) {
191169
// We have to use getOwnPropertyNames since Babel registers methods as non-enumerable
192170
Object.getOwnPropertyNames(Original).forEach(function (key) {
193171
// `prototype` should not be overwritten
194172
if (key === 'prototype') {
195173
return;
196174
}
197-
reflectionMap.static[key] = Reflect.getOwnMetadataKeys(Original, key);
198175
// Some browsers does not allow reconfigure built-in properties
199176
var extendedDescriptor = Object.getOwnPropertyDescriptor(Extended, key);
200177
if (extendedDescriptor && !extendedDescriptor.configurable) {

dist/vue-class-component.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
"chai": "^4.1.2",
5050
"css-loader": "^0.28.9",
5151
"mocha": "^5.0.1",
52+
"reflect-metadata": "^0.1.12",
5253
"rimraf": "^2.6.2",
5354
"rollup": "^0.55.5",
5455
"rollup-plugin-replace": "^2.0.0",
@@ -61,7 +62,5 @@
6162
"vue-template-compiler": "^2.5.13",
6263
"webpack": "^3.11.0"
6364
},
64-
"dependencies": {
65-
"reflect-metadata": "^0.1.12"
66-
}
65+
"dependencies": {}
6766
}

src/component.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import 'reflect-metadata'
21
import Vue, { ComponentOptions } from 'vue'
3-
import { copyReflectionMetadata, ReflectionMap } from './reflect'
2+
import { copyReflectionMetadata, reflectionIsSupported, ReflectionMap } from './reflect'
43
import { VueClass, DecoratedClass } from './declarations'
54
import { collectDataFromConstructor } from './data'
65
import { hasProto, isPrimitive, warn } from './util'
@@ -28,7 +27,7 @@ export function componentFactory (
2827
const reflectionMap: ReflectionMap = {
2928
instance: {},
3029
static: {}
31-
};
30+
}
3231

3332
options.name = options.name || (Component as any)._componentTag || (Component as any).name
3433
// prototype props.
@@ -37,7 +36,11 @@ export function componentFactory (
3736
if (key === 'constructor') {
3837
return
3938
}
40-
reflectionMap.instance[key] = Reflect.getOwnMetadataKeys(proto, key);
39+
40+
if (reflectionIsSupported()) {
41+
reflectionMap.instance[key] = Reflect.getOwnMetadataKeys(proto, key)
42+
}
43+
4144
// hooks
4245
if ($internalHooks.indexOf(key) > -1) {
4346
options[key] = proto[key]
@@ -78,7 +81,10 @@ export function componentFactory (
7881
const Extended = Super.extend(options)
7982

8083
forwardStaticMembersAndCollectReflection(Extended, Component, Super, reflectionMap)
81-
copyReflectionMetadata(Component, Extended, reflectionMap)
84+
85+
if (reflectionIsSupported()) {
86+
copyReflectionMetadata(Component, Extended, reflectionMap)
87+
}
8288

8389
return Extended
8490
}
@@ -115,7 +121,9 @@ function forwardStaticMembersAndCollectReflection (
115121
return
116122
}
117123

118-
reflectionMap.static[key] = Reflect.getOwnMetadataKeys(Original, key);
124+
if (reflectionIsSupported()) {
125+
reflectionMap.static[key] = Reflect.getOwnMetadataKeys(Original, key)
126+
}
119127

120128
// Some browsers does not allow reconfigure built-in properties
121129
const extendedDescriptor = Object.getOwnPropertyDescriptor(Extended, key)

src/globals.d.ts

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,33 @@
33
* should not expose to userland
44
*/
55

6+
declare namespace Reflect {
7+
function decorate(decorators: ClassDecorator[], target: Function): Function
8+
function decorate(decorators: (PropertyDecorator | MethodDecorator)[], target: Object, propertyKey: string | symbol, attributes?: PropertyDescriptor): PropertyDescriptor
9+
function metadata(metadataKey: any, metadataValue: any): {
10+
(target: Function): void
11+
(target: Object, propertyKey: string | symbol): void
12+
}
13+
function defineMetadata(metadataKey: any, metadataValue: any, target: Object): void
14+
function defineMetadata(metadataKey: any, metadataValue: any, target: Object, propertyKey: string | symbol): void
15+
function hasMetadata(metadataKey: any, target: Object): boolean
16+
function hasMetadata(metadataKey: any, target: Object, propertyKey: string | symbol): boolean
17+
function hasOwnMetadata(metadataKey: any, target: Object): boolean
18+
function hasOwnMetadata(metadataKey: any, target: Object, propertyKey: string | symbol): boolean
19+
function getMetadata(metadataKey: any, target: Object): any
20+
function getMetadata(metadataKey: any, target: Object, propertyKey: string | symbol): any
21+
function getOwnMetadata(metadataKey: any, target: Object): any
22+
function getOwnMetadata(metadataKey: any, target: Object, propertyKey: string | symbol): any
23+
function getMetadataKeys(target: Object): any[]
24+
function getMetadataKeys(target: Object, propertyKey: string | symbol): any[]
25+
function getOwnMetadataKeys(target: Object): any[]
26+
function getOwnMetadataKeys(target: Object, propertyKey: string | symbol): any[]
27+
function deleteMetadata(metadataKey: any, target: Object): boolean
28+
function deleteMetadata(metadataKey: any, target: Object, propertyKey: string | symbol): boolean
29+
}
30+
631
declare const process: {
732
env: {
833
NODE_ENV: string
934
}
10-
}
35+
}

src/reflect.ts

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,32 @@
11
import { VueConstructor } from 'vue'
2-
import 'reflect-metadata'
32

43
export type StringToArrayMap = {
5-
[key: string]: Array<string>
4+
[key: string]: Array<string>
65
}
76

87
export type ReflectionMap = {
9-
instance: StringToArrayMap,
10-
static: StringToArrayMap
8+
instance: StringToArrayMap,
9+
static: StringToArrayMap
10+
}
11+
12+
export function reflectionIsSupported() {
13+
return (Reflect && Reflect.defineMetadata) !== undefined
1114
}
1215

1316
export function copyReflectionMetadata(
14-
from: VueConstructor,
15-
to: VueConstructor,
16-
reflectionMap: ReflectionMap
17+
from: VueConstructor,
18+
to: VueConstructor,
19+
reflectionMap: ReflectionMap
1720
) {
18-
shallowCopy(from.prototype, to.prototype, reflectionMap.instance);
19-
shallowCopy(from, to, reflectionMap.static);
21+
shallowCopy(from.prototype, to.prototype, reflectionMap.instance)
22+
shallowCopy(from, to, reflectionMap.static)
2023
}
2124

2225
function shallowCopy(from: VueConstructor, to: VueConstructor, propertyKeys: StringToArrayMap) {
23-
for (const propertyKey in propertyKeys) {
24-
propertyKeys[propertyKey].forEach((metadataKey) => {
25-
const metadata = Reflect.getOwnMetadata(metadataKey, from, propertyKey)
26-
Reflect.defineMetadata(metadataKey, metadata, to, propertyKey)
27-
})
28-
}
26+
for (const propertyKey in propertyKeys) {
27+
propertyKeys[propertyKey].forEach((metadataKey) => {
28+
const metadata = Reflect.getOwnMetadata(metadataKey, from, propertyKey)
29+
Reflect.defineMetadata(metadataKey, metadata, to, propertyKey)
30+
})
31+
}
2932
}

test/test.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -372,21 +372,21 @@ describe('vue-class-component', () => {
372372
})
373373

374374
it('copies reflection metadata', function () {
375-
@Component
376-
class Test extends Vue {
377-
@Reflect.metadata('worksStatic', true)
378-
static staticValue: string = 'staticValue';
375+
@Component
376+
class Test extends Vue {
377+
@Reflect.metadata('worksStatic', true)
378+
static staticValue: string = 'staticValue'
379379

380-
@Reflect.metadata('worksMethod', true)
381-
test(): void { }
380+
@Reflect.metadata('worksMethod', true)
381+
test(): void { }
382382

383-
@Reflect.metadata('worksAccessor', true)
384-
get testAccessor(): boolean { return true; }
385-
set testAccessor(value: boolean) { void(value) }
386-
}
383+
@Reflect.metadata('worksAccessor', true)
384+
get testAccessor(): boolean { return true }
385+
set testAccessor(value: boolean) { void(value) }
386+
}
387387

388-
expect(Reflect.getOwnMetadata('worksStatic', Test, 'staticValue')).to.equal(true);
389-
expect(Reflect.getOwnMetadata('worksMethod', Test.prototype, 'test')).to.equal(true);
390-
expect(Reflect.getOwnMetadata('worksAccessor', Test.prototype, 'testAccessor')).to.equal(true);
388+
expect(Reflect.getOwnMetadata('worksStatic', Test, 'staticValue')).to.equal(true)
389+
expect(Reflect.getOwnMetadata('worksMethod', Test.prototype, 'test')).to.equal(true)
390+
expect(Reflect.getOwnMetadata('worksAccessor', Test.prototype, 'testAccessor')).to.equal(true)
391391
})
392392
})

0 commit comments

Comments
 (0)