Skip to content

Commit cdd6366

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

File tree

8 files changed

+82
-94
lines changed

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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy