Skip to content

Commit b1cbb3d

Browse files
committed
Merge branch 'hotfix/shim-types'
2 parents 67c332f + 02546ae commit b1cbb3d

File tree

7 files changed

+249
-50
lines changed

7 files changed

+249
-50
lines changed

dist/shim.js

Lines changed: 66 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,37 @@
33
exports.__esModule = true;
44
exports.default = void 0;
55

6+
var _vue = _interopRequireDefault(require("vue"));
7+
8+
var _isPlainObject = _interopRequireDefault(require("lodash/isPlainObject"));
9+
610
var _sensibles = require("./sensibles");
711

12+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13+
14+
var isArray = Array.isArray || function (value) {
15+
return Object.prototype.toString.call(value) === '[object Array]';
16+
};
17+
818
var type = function type(props) {
919
return Object.assign({
1020
def: function def(v) {
11-
this.default = v;
21+
if (v === undefined && !this.default) {
22+
return this;
23+
}
24+
25+
if (isArray(v)) {
26+
this.default = function () {
27+
return [].concat(v);
28+
};
29+
} else if ((0, _isPlainObject.default)(v)) {
30+
this.default = function () {
31+
return Object.assign({}, v);
32+
};
33+
} else {
34+
this.default = v;
35+
}
36+
1237
return this;
1338
},
1439

@@ -17,7 +42,9 @@ var type = function type(props) {
1742
return this;
1843
},
1944

20-
validator: function validator() {}
45+
validator: function validator() {
46+
return true;
47+
}
2148
}, props);
2249
};
2350

@@ -29,8 +56,22 @@ var vueTypes = (0, _sensibles.setDefaults)({
2956
}
3057
}
3158
});
59+
var typeMap = {
60+
func: Function,
61+
bool: Boolean,
62+
string: String,
63+
number: Number,
64+
integer: Number,
65+
array: Array,
66+
object: Object,
67+
arrayOf: Array,
68+
objectOf: Object,
69+
shape: Object
70+
};
71+
var getters = ['any', 'func', 'bool', 'string', 'number', 'array', 'object', 'symbol'];
72+
var methods = ['oneOf', 'custom', 'instanceOf', 'oneOfType', 'arrayOf', 'objectOf'];
3273

33-
var createValidator = function createValidator(root, name, getter, props) {
74+
function createValidator(root, name, getter, props) {
3475
var _descr;
3576

3677
if (getter === void 0) {
@@ -42,23 +83,28 @@ var createValidator = function createValidator(root, name, getter, props) {
4283
return type(props).def(getter ? vueTypes.sensibleDefaults[name] : undefined);
4384
}, _descr);
4485
return Object.defineProperty(root, name, descr);
45-
};
86+
}
4687

47-
var getters = ['any', 'func', 'bool', 'string', 'number', 'array', 'object', 'symbol'];
48-
var methods = ['oneOf', 'custom', 'instanceOf', 'oneOfType', 'arrayOf', 'objectOf'];
4988
getters.forEach(function (p) {
5089
return createValidator(vueTypes, p, true, {
90+
type: typeMap[p] || null,
5191
validate: function validate() {}
5292
});
5393
});
5494
methods.forEach(function (p) {
55-
return createValidator(vueTypes, p, false);
95+
return createValidator(vueTypes, p, false, {
96+
type: typeMap[p] || null
97+
});
5698
});
57-
createValidator(vueTypes, 'integer', true); // does not have a validate method
99+
createValidator(vueTypes, 'integer', true, {
100+
type: Number
101+
}); // does not have a validate method
58102

59103
Object.defineProperty(vueTypes, 'shape', {
60104
value: function value() {
61-
return Object.defineProperty(type(), 'loose', {
105+
return Object.defineProperty(type({
106+
type: Object
107+
}), 'loose', {
62108
get: function get() {
63109
return this;
64110
},
@@ -67,15 +113,22 @@ Object.defineProperty(vueTypes, 'shape', {
67113
}
68114
});
69115

70-
vueTypes.extend = function (props) {
116+
vueTypes.extend = function extend(props) {
71117
var name = props.name,
72118
validate = props.validate,
73119
_props$getter = props.getter,
74-
getter = _props$getter === void 0 ? false : _props$getter;
75-
return createValidator(vueTypes, name, getter, validate && {
76-
validate: function validate() {}
120+
getter = _props$getter === void 0 ? false : _props$getter,
121+
_props$type = props.type,
122+
type = _props$type === void 0 ? null : _props$type;
123+
return createValidator(vueTypes, name, getter, {
124+
type: type,
125+
validate: validate ? function () {} : undefined
77126
});
78127
};
79128

129+
if (process.env.NODE_ENV !== 'production') {
130+
_vue.default.config.silent === false && console.warn('You are using the production shimmed version of VueTypes in a development build. Refer to https://github.com/dwightjack/vue-types#production-build to learn how to configure VueTypes for usage in multiple environments.');
131+
}
132+
80133
var _default = vueTypes;
81134
exports.default = _default;

es/shim.js

Lines changed: 62 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,30 @@
1+
import Vue from 'vue';
2+
import isPlainObject from 'lodash/isPlainObject';
13
import { setDefaults } from './sensibles';
24

5+
var isArray = Array.isArray || function (value) {
6+
return Object.prototype.toString.call(value) === '[object Array]';
7+
};
8+
39
var type = function type(props) {
410
return Object.assign({
511
def: function def(v) {
6-
this.default = v;
12+
if (v === undefined && !this.default) {
13+
return this;
14+
}
15+
16+
if (isArray(v)) {
17+
this.default = function () {
18+
return [].concat(v);
19+
};
20+
} else if (isPlainObject(v)) {
21+
this.default = function () {
22+
return Object.assign({}, v);
23+
};
24+
} else {
25+
this.default = v;
26+
}
27+
728
return this;
829
},
930

@@ -12,7 +33,9 @@ var type = function type(props) {
1233
return this;
1334
},
1435

15-
validator: function validator() {}
36+
validator: function validator() {
37+
return true;
38+
}
1639
}, props);
1740
};
1841

@@ -24,8 +47,22 @@ var vueTypes = setDefaults({
2447
}
2548
}
2649
});
50+
var typeMap = {
51+
func: Function,
52+
bool: Boolean,
53+
string: String,
54+
number: Number,
55+
integer: Number,
56+
array: Array,
57+
object: Object,
58+
arrayOf: Array,
59+
objectOf: Object,
60+
shape: Object
61+
};
62+
var getters = ['any', 'func', 'bool', 'string', 'number', 'array', 'object', 'symbol'];
63+
var methods = ['oneOf', 'custom', 'instanceOf', 'oneOfType', 'arrayOf', 'objectOf'];
2764

28-
var createValidator = function createValidator(root, name, getter, props) {
65+
function createValidator(root, name, getter, props) {
2966
var _descr;
3067

3168
if (getter === void 0) {
@@ -37,23 +74,28 @@ var createValidator = function createValidator(root, name, getter, props) {
3774
return type(props).def(getter ? vueTypes.sensibleDefaults[name] : undefined);
3875
}, _descr);
3976
return Object.defineProperty(root, name, descr);
40-
};
77+
}
4178

42-
var getters = ['any', 'func', 'bool', 'string', 'number', 'array', 'object', 'symbol'];
43-
var methods = ['oneOf', 'custom', 'instanceOf', 'oneOfType', 'arrayOf', 'objectOf'];
4479
getters.forEach(function (p) {
4580
return createValidator(vueTypes, p, true, {
81+
type: typeMap[p] || null,
4682
validate: function validate() {}
4783
});
4884
});
4985
methods.forEach(function (p) {
50-
return createValidator(vueTypes, p, false);
86+
return createValidator(vueTypes, p, false, {
87+
type: typeMap[p] || null
88+
});
5189
});
52-
createValidator(vueTypes, 'integer', true); // does not have a validate method
90+
createValidator(vueTypes, 'integer', true, {
91+
type: Number
92+
}); // does not have a validate method
5393

5494
Object.defineProperty(vueTypes, 'shape', {
5595
value: function value() {
56-
return Object.defineProperty(type(), 'loose', {
96+
return Object.defineProperty(type({
97+
type: Object
98+
}), 'loose', {
5799
get: function get() {
58100
return this;
59101
},
@@ -62,14 +104,21 @@ Object.defineProperty(vueTypes, 'shape', {
62104
}
63105
});
64106

65-
vueTypes.extend = function (props) {
107+
vueTypes.extend = function extend(props) {
66108
var name = props.name,
67109
validate = props.validate,
68110
_props$getter = props.getter,
69-
getter = _props$getter === void 0 ? false : _props$getter;
70-
return createValidator(vueTypes, name, getter, validate && {
71-
validate: function validate() {}
111+
getter = _props$getter === void 0 ? false : _props$getter,
112+
_props$type = props.type,
113+
type = _props$type === void 0 ? null : _props$type;
114+
return createValidator(vueTypes, name, getter, {
115+
type: type,
116+
validate: validate ? function () {} : undefined
72117
});
73118
};
74119

120+
if (process.env.NODE_ENV !== 'production') {
121+
Vue.config.silent === false && console.warn('You are using the production shimmed version of VueTypes in a development build. Refer to https://github.com/dwightjack/vue-types#production-build to learn how to configure VueTypes for usage in multiple environments.');
122+
}
123+
75124
export default vueTypes;

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vue-types",
3-
"version": "1.5.0",
3+
"version": "1.5.2",
44
"description": "Prop types utility for Vue",
55
"author": "Marco Solazzi",
66
"license": "MIT",

src/shim.js

Lines changed: 45 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,30 @@
1+
import Vue from 'vue'
2+
import isPlainObject from 'lodash/isPlainObject'
13
import { setDefaults } from './sensibles'
24

5+
const isArray = Array.isArray || function (value) {
6+
return Object.prototype.toString.call(value) === '[object Array]'
7+
}
8+
39
const type = (props) => Object.assign({
410
def (v) {
5-
this.default = v
11+
if (v === undefined && !this.default) {
12+
return this
13+
}
14+
if (isArray(v)) {
15+
this.default = () => [].concat(v)
16+
} else if (isPlainObject(v)) {
17+
this.default = () => Object.assign({}, v)
18+
} else {
19+
this.default = v
20+
}
621
return this
722
},
823
get isRequired () {
924
this.required = true
1025
return this
1126
},
12-
validator () {}
27+
validator () { return true }
1328
}, props)
1429

1530
const vueTypes = setDefaults({
@@ -19,32 +34,49 @@ const vueTypes = setDefaults({
1934
}
2035
})
2136

22-
const createValidator = (root, name, getter = false, props) => {
37+
const typeMap = {
38+
func: Function,
39+
bool: Boolean,
40+
string: String,
41+
number: Number,
42+
integer: Number,
43+
array: Array,
44+
object: Object,
45+
arrayOf: Array,
46+
objectOf: Object,
47+
shape: Object
48+
}
49+
50+
const getters = ['any', 'func', 'bool', 'string', 'number', 'array', 'object', 'symbol']
51+
const methods = ['oneOf', 'custom', 'instanceOf', 'oneOfType', 'arrayOf', 'objectOf']
52+
53+
function createValidator (root, name, getter = false, props) {
2354
const prop = getter ? 'get' : 'value'
2455
const descr = { [prop]: () => type(props).def(getter ? vueTypes.sensibleDefaults[name] : undefined) }
2556

2657
return Object.defineProperty(root, name, descr)
2758
}
2859

29-
const getters = ['any', 'func', 'bool', 'string', 'number', 'array', 'object', 'symbol']
30-
const methods = ['oneOf', 'custom', 'instanceOf', 'oneOfType', 'arrayOf', 'objectOf']
31-
32-
getters.forEach((p) => createValidator(vueTypes, p, true, { validate () {} }))
33-
methods.forEach((p) => createValidator(vueTypes, p, false))
34-
createValidator(vueTypes, 'integer', true) // does not have a validate method
60+
getters.forEach((p) => createValidator(vueTypes, p, true, { type: typeMap[p] || null, validate () {} }))
61+
methods.forEach((p) => createValidator(vueTypes, p, false, { type: typeMap[p] || null }))
62+
createValidator(vueTypes, 'integer', true, { type: Number }) // does not have a validate method
3563

3664
Object.defineProperty(vueTypes, 'shape', {
3765
value () {
38-
return Object.defineProperty(type(), 'loose', {
66+
return Object.defineProperty(type({ type: Object }), 'loose', {
3967
get () { return this },
4068
enumerable: false
4169
})
4270
}
4371
})
4472

45-
vueTypes.extend = (props) => {
46-
const { name, validate, getter = false } = props
47-
return createValidator(vueTypes, name, getter, validate && { validate () {} })
73+
vueTypes.extend = function extend (props) {
74+
const { name, validate, getter = false, type = null } = props
75+
return createValidator(vueTypes, name, getter, { type, validate: validate ? () => {} : undefined })
76+
}
77+
78+
if (process.env.NODE_ENV !== 'production') {
79+
Vue.config.silent === false && console.warn('You are using the production shimmed version of VueTypes in a development build. Refer to https://github.com/dwightjack/vue-types#production-build to learn how to configure VueTypes for usage in multiple environments.')
4880
}
4981

5082
export default vueTypes

0 commit comments

Comments
 (0)