@znck/prop-types
Advanced tools
Comparing version 0.4.0-alpha.3 to 0.4.0
@@ -5,2 +5,12 @@ # Change Log | ||
<a name="0.4.0"></a> | ||
# [0.4.0](https://github.com/znck/vue-prop-types/compare/v0.4.0-alpha.3...v0.4.0) (2019-01-19) | ||
### Bug Fixes | ||
* Add babel transform plugin to remove prop-types ([49ae0d5](https://github.com/znck/vue-prop-types/commit/49ae0d5)) | ||
<a name="0.4.0-alpha.3"></a> | ||
@@ -7,0 +17,0 @@ # [0.4.0-alpha.3](https://github.com/znck/vue-prop-types/compare/v0.4.0-alpha.2...v0.4.0-alpha.3) (2019-01-19) |
/** | ||
* @znck/prop-types v0.4.0-alpha.3 | ||
* (c) 2019 undefined <undefined> (undefined) | ||
* @znck/prop-types v0.4.0 | ||
* (c) 2019 Rahul Kadyan <hi@znck.me> (https://znck.me) | ||
* @license MIT | ||
*/ | ||
function _typeof(obj) { | ||
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { | ||
_typeof = function (obj) { | ||
return typeof obj; | ||
}; | ||
} else { | ||
_typeof = function (obj) { | ||
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; | ||
}; | ||
} | ||
return _typeof(obj); | ||
} | ||
function _classCallCheck(instance, Constructor) { | ||
if (!(instance instanceof Constructor)) { | ||
throw new TypeError("Cannot call a class as a function"); | ||
} | ||
} | ||
function _defineProperties(target, props) { | ||
for (var i = 0; i < props.length; i++) { | ||
var descriptor = props[i]; | ||
descriptor.enumerable = descriptor.enumerable || false; | ||
descriptor.configurable = true; | ||
if ("value" in descriptor) descriptor.writable = true; | ||
Object.defineProperty(target, descriptor.key, descriptor); | ||
} | ||
} | ||
function _createClass(Constructor, protoProps, staticProps) { | ||
if (protoProps) _defineProperties(Constructor.prototype, protoProps); | ||
if (staticProps) _defineProperties(Constructor, staticProps); | ||
return Constructor; | ||
} | ||
function _slicedToArray(arr, i) { | ||
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); | ||
} | ||
function _toConsumableArray(arr) { | ||
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); | ||
} | ||
function _arrayWithoutHoles(arr) { | ||
if (Array.isArray(arr)) { | ||
for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; | ||
return arr2; | ||
} | ||
} | ||
function _arrayWithHoles(arr) { | ||
if (Array.isArray(arr)) return arr; | ||
} | ||
function _iterableToArray(iter) { | ||
if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); | ||
} | ||
function _iterableToArrayLimit(arr, i) { | ||
var _arr = []; | ||
var _n = true; | ||
var _d = false; | ||
var _e = undefined; | ||
try { | ||
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { | ||
_arr.push(_s.value); | ||
if (i && _arr.length === i) break; | ||
} | ||
} catch (err) { | ||
_d = true; | ||
_e = err; | ||
} finally { | ||
try { | ||
if (!_n && _i["return"] != null) _i["return"](); | ||
} finally { | ||
if (_d) throw _e; | ||
} | ||
} | ||
return _arr; | ||
} | ||
function _nonIterableSpread() { | ||
throw new TypeError("Invalid attempt to spread non-iterable instance"); | ||
} | ||
function _nonIterableRest() { | ||
throw new TypeError("Invalid attempt to destructure non-iterable instance"); | ||
} | ||
var TYPES = { | ||
const TYPES = { | ||
string: String, | ||
@@ -109,20 +15,16 @@ number: Number, | ||
}; | ||
var typeValues = Object.values(TYPES); | ||
const typeValues = () => Object.values(TYPES); | ||
function runValidation(validator, value) { | ||
var strict = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; | ||
var types = ensureArray(validator.type); | ||
return (types.length === 0 || types.some(function (type) { | ||
return isType(type, value, strict || validator.required !== true); | ||
})) && (typeof validator.validator !== 'function' || validator.validator(value)); | ||
let strict = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; | ||
const types = ensureArray(validator.type); | ||
return (types.length === 0 || types.some(type => isType(type, value, strict || validator.required !== true))) && (typeof validator.validator !== 'function' || validator.validator(value)); | ||
} | ||
function isType(type, item) { | ||
var nullAllowed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; | ||
let nullAllowed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; | ||
if (nullAllowed && (item === null || item === undefined)) return true; | ||
if (Array === type && Array.isArray(item)) return true; | ||
return Object.entries(TYPES).some(function (_ref) { | ||
var _ref2 = _slicedToArray(_ref, 2), | ||
key = _ref2[0], | ||
TYPE = _ref2[1]; | ||
return TYPE === type && _typeof(item) === key; | ||
return Object.entries(TYPES).some((_ref) => { | ||
let key = _ref[0], | ||
TYPE = _ref[1]; | ||
return TYPE === type && typeof item === key; | ||
} // eslint-disable-line valid-typeof | ||
@@ -140,238 +42,188 @@ ); | ||
var PropTypes = | ||
/*#__PURE__*/ | ||
function () { | ||
class PropTypes { | ||
/** @private */ | ||
function PropTypes(type) { | ||
_classCallCheck(this, PropTypes); | ||
constructor(type) { | ||
this.type = type; | ||
} | ||
_createClass(PropTypes, [{ | ||
key: "value", | ||
value: function value(_value) { | ||
this.default = _value && _typeof(_value) === 'object' ? function () { | ||
return _value; | ||
} : _value; | ||
return this; | ||
} | ||
}, { | ||
key: "validate", | ||
value: function validate(cb) { | ||
var _this = this; | ||
get type() { | ||
return this._type; | ||
} | ||
if (!(typeof cb === 'function')) return this; | ||
var validator = this.validator; | ||
set type(value) { | ||
this._type = ensureArray(value); | ||
} | ||
this.validator = function () { | ||
try { | ||
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { | ||
args[_key] = arguments[_key]; | ||
} | ||
get isRequired() { | ||
this.required = true; | ||
return this; | ||
} | ||
return (!(typeof validator === 'function') || validator.call(_this, args)) && cb.apply(_this, args); | ||
} catch (err) { | ||
return false; | ||
} | ||
}; | ||
value(value) { | ||
this.default = value && typeof value === 'object' ? () => value : value; | ||
return this; | ||
} | ||
return this; | ||
} | ||
/** @private */ | ||
validate(cb) { | ||
var _this = this; | ||
}, { | ||
key: "type", | ||
get: function get() { | ||
return this._type; | ||
}, | ||
set: function set(value) { | ||
this._type = ensureArray(value); | ||
} | ||
}, { | ||
key: "isRequired", | ||
get: function get() { | ||
this.required = true; | ||
return this; | ||
} | ||
}], [{ | ||
key: "create", | ||
value: function create(type) { | ||
return new PropTypes(type); | ||
} | ||
/** @private */ | ||
if (!(typeof cb === 'function')) return this; | ||
const validator = this.validator; | ||
}, { | ||
key: "clone", | ||
value: function clone(prop) { | ||
var type = this.create(prop.type); | ||
type.validate(prop.validator); | ||
return type; | ||
} | ||
}, { | ||
key: "instanceOf", | ||
value: function instanceOf(type) { | ||
return this.create(type); | ||
} | ||
}, { | ||
key: "oneOf", | ||
value: function oneOf() { | ||
for (var _len2 = arguments.length, values = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { | ||
values[_key2] = arguments[_key2]; | ||
this.validator = function () { | ||
try { | ||
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { | ||
args[_key] = arguments[_key]; | ||
} | ||
return (!(typeof validator === 'function') || validator.call(_this, args)) && cb.apply(_this, args); | ||
} catch (err) { | ||
return false; | ||
} | ||
}; | ||
values = values.flat(); | ||
ensureOne(values); | ||
return this; | ||
} | ||
/** @private */ | ||
var types = _toConsumableArray(new Set(values.map(function (value) { | ||
return TYPES[_typeof(value)] || Object; | ||
}))); | ||
var prop = this.create(types); | ||
var setOfValues = new Set(values); | ||
static create(type) { | ||
return new PropTypes(type); | ||
} | ||
/** @private */ | ||
prop.validator = function (value) { | ||
return setOfValues.has(value); | ||
}; | ||
return prop; | ||
static clone(prop) { | ||
const type = this.create(prop.type); | ||
type.validate(prop.validator); | ||
return type; | ||
} | ||
static get string() { | ||
return this.create(String); | ||
} | ||
static get number() { | ||
return this.create(Number); | ||
} | ||
static get bool() { | ||
return this.create(Boolean); | ||
} | ||
static get array() { | ||
return this.create(Array); | ||
} | ||
static get object() { | ||
return this.create(Object); | ||
} | ||
static get func() { | ||
return this.create(Function); | ||
} | ||
static get symbol() { | ||
return this.create(Symbol); | ||
} | ||
static get any() { | ||
return this.create(); | ||
} | ||
static instanceOf(type) { | ||
return this.create(type); | ||
} | ||
static oneOf() { | ||
for (var _len2 = arguments.length, values = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { | ||
values[_key2] = arguments[_key2]; | ||
} | ||
}, { | ||
key: "oneOfType", | ||
value: function oneOfType() { | ||
for (var _len3 = arguments.length, types = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { | ||
types[_key3] = arguments[_key3]; | ||
} | ||
types = types.flat().map(normalizeType); | ||
ensureOne(types); | ||
var prop = this.create(types.map(function (type) { | ||
return ensureArray(type.type); | ||
}).flat()); | ||
values = values.flat(); | ||
ensureOne(values); | ||
const types = [...new Set(values.map(value => TYPES[typeof value] || Object))]; | ||
const prop = this.create(types); | ||
const setOfValues = new Set(values); | ||
prop.validator = function (value) { | ||
return types.some(function (validator) { | ||
return runValidation(validator, value); | ||
}); | ||
}; | ||
prop.validator = value => { | ||
return setOfValues.has(value); | ||
}; | ||
return prop; | ||
return prop; | ||
} | ||
static oneOfType() { | ||
for (var _len3 = arguments.length, types = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { | ||
types[_key3] = arguments[_key3]; | ||
} | ||
}, { | ||
key: "arrayOf", | ||
value: function arrayOf() { | ||
for (var _len4 = arguments.length, expected = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { | ||
expected[_key4] = arguments[_key4]; | ||
} | ||
return this.collectionOf(Array, expected); | ||
types = types.flat().map(normalizeType); | ||
ensureOne(types); | ||
const prop = this.create(types.map(type => ensureArray(type.type)).flat()); | ||
prop.validator = value => types.some(validator => runValidation(validator, value)); | ||
return prop; | ||
} | ||
static arrayOf() { | ||
for (var _len4 = arguments.length, expected = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { | ||
expected[_key4] = arguments[_key4]; | ||
} | ||
}, { | ||
key: "objectOf", | ||
value: function objectOf() { | ||
for (var _len5 = arguments.length, expected = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { | ||
expected[_key5] = arguments[_key5]; | ||
} | ||
return this.collectionOf(Object, expected); | ||
return this.collectionOf(Array, expected); | ||
} | ||
static objectOf() { | ||
for (var _len5 = arguments.length, expected = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { | ||
expected[_key5] = arguments[_key5]; | ||
} | ||
/** @private */ | ||
}, { | ||
key: "collectionOf", | ||
value: function collectionOf(type, expected) { | ||
var prop = this.create(type); | ||
var types = expected.flat().map(normalizeType); | ||
return this.collectionOf(Object, expected); | ||
} | ||
/** @private */ | ||
prop.validator = function (value) { | ||
return Object.values(value).every(function (item) { | ||
return types.some(function (type) { | ||
return runValidation(type, item); | ||
}); | ||
}); | ||
}; | ||
return prop; | ||
} | ||
}, { | ||
key: "shape", | ||
value: function shape(_shape) { | ||
var prop = this.create(Object); | ||
var shapeType = {}; | ||
Object.entries(_shape).forEach(function (_ref) { | ||
var _ref2 = _slicedToArray(_ref, 2), | ||
key = _ref2[0], | ||
value = _ref2[1]; | ||
static collectionOf(type, expected) { | ||
const prop = this.create(type); | ||
const types = expected.flat().map(normalizeType); | ||
shapeType[key] = normalizeType(value); | ||
prop.validator = value => Object.values(value).every(item => types.some(type => runValidation(type, item))); | ||
return prop; | ||
} | ||
static shape(shape) { | ||
const prop = this.create(Object); | ||
const shapeType = {}; | ||
Object.entries(shape).forEach((_ref) => { | ||
let key = _ref[0], | ||
value = _ref[1]; | ||
shapeType[key] = normalizeType(value); | ||
}); | ||
prop.validator = value => { | ||
if (!(value && typeof value === 'object')) return prop.required !== true; | ||
return Object.entries(shapeType).every((_ref2) => { | ||
let key = _ref2[0], | ||
type = _ref2[1]; | ||
return runValidation(type, value[key]); | ||
}); | ||
}; | ||
prop.validator = function (value) { | ||
if (!(value && _typeof(value) === 'object')) return prop.required !== true; | ||
return Object.entries(shapeType).every(function (_ref3) { | ||
var _ref4 = _slicedToArray(_ref3, 2), | ||
key = _ref4[0], | ||
type = _ref4[1]; | ||
return prop; | ||
} | ||
return runValidation(type, value[key]); | ||
}); | ||
}; | ||
return prop; | ||
} | ||
}, { | ||
key: "validate", | ||
value: function validate(fn) { | ||
try { | ||
if (fn() === false) { | ||
console.error('There are some failing validation.'); | ||
} | ||
} catch (e) { | ||
console.error(e); | ||
static validate(fn) { | ||
try { | ||
if (fn() === false) { | ||
console.error('There are some failing validation.'); | ||
} | ||
} catch (e) { | ||
console.error(e); | ||
} | ||
}, { | ||
key: "string", | ||
get: function get() { | ||
return this.create(String); | ||
} | ||
}, { | ||
key: "number", | ||
get: function get() { | ||
return this.create(Number); | ||
} | ||
}, { | ||
key: "bool", | ||
get: function get() { | ||
return this.create(Boolean); | ||
} | ||
}, { | ||
key: "array", | ||
get: function get() { | ||
return this.create(Array); | ||
} | ||
}, { | ||
key: "object", | ||
get: function get() { | ||
return this.create(Object); | ||
} | ||
}, { | ||
key: "func", | ||
get: function get() { | ||
return this.create(Function); | ||
} | ||
}, { | ||
key: "symbol", | ||
get: function get() { | ||
return this.create(Symbol); | ||
} | ||
}, { | ||
key: "any", | ||
get: function get() { | ||
return this.create(); | ||
} | ||
}]); | ||
} | ||
return PropTypes; | ||
}(); | ||
} | ||
@@ -381,3 +233,3 @@ function normalizeType(type) { | ||
if (type in TYPES) return PropTypes.create(TYPES[type]); | ||
if (typeValues.includes(type)) return PropTypes.create(type); | ||
if (typeValues().includes(type)) return PropTypes.create(type); | ||
if (typeof type === 'function') return { | ||
@@ -384,0 +236,0 @@ validator: type, |
/** | ||
* @znck/prop-types v0.4.0-alpha.3 | ||
* (c) 2019 undefined <undefined> (undefined) | ||
* @znck/prop-types v0.4.0 | ||
* (c) 2019 Rahul Kadyan <hi@znck.me> (https://znck.me) | ||
* @license MIT | ||
@@ -8,97 +8,3 @@ */ | ||
function _typeof(obj) { | ||
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { | ||
_typeof = function (obj) { | ||
return typeof obj; | ||
}; | ||
} else { | ||
_typeof = function (obj) { | ||
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; | ||
}; | ||
} | ||
return _typeof(obj); | ||
} | ||
function _classCallCheck(instance, Constructor) { | ||
if (!(instance instanceof Constructor)) { | ||
throw new TypeError("Cannot call a class as a function"); | ||
} | ||
} | ||
function _defineProperties(target, props) { | ||
for (var i = 0; i < props.length; i++) { | ||
var descriptor = props[i]; | ||
descriptor.enumerable = descriptor.enumerable || false; | ||
descriptor.configurable = true; | ||
if ("value" in descriptor) descriptor.writable = true; | ||
Object.defineProperty(target, descriptor.key, descriptor); | ||
} | ||
} | ||
function _createClass(Constructor, protoProps, staticProps) { | ||
if (protoProps) _defineProperties(Constructor.prototype, protoProps); | ||
if (staticProps) _defineProperties(Constructor, staticProps); | ||
return Constructor; | ||
} | ||
function _slicedToArray(arr, i) { | ||
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); | ||
} | ||
function _toConsumableArray(arr) { | ||
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); | ||
} | ||
function _arrayWithoutHoles(arr) { | ||
if (Array.isArray(arr)) { | ||
for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; | ||
return arr2; | ||
} | ||
} | ||
function _arrayWithHoles(arr) { | ||
if (Array.isArray(arr)) return arr; | ||
} | ||
function _iterableToArray(iter) { | ||
if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); | ||
} | ||
function _iterableToArrayLimit(arr, i) { | ||
var _arr = []; | ||
var _n = true; | ||
var _d = false; | ||
var _e = undefined; | ||
try { | ||
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { | ||
_arr.push(_s.value); | ||
if (i && _arr.length === i) break; | ||
} | ||
} catch (err) { | ||
_d = true; | ||
_e = err; | ||
} finally { | ||
try { | ||
if (!_n && _i["return"] != null) _i["return"](); | ||
} finally { | ||
if (_d) throw _e; | ||
} | ||
} | ||
return _arr; | ||
} | ||
function _nonIterableSpread() { | ||
throw new TypeError("Invalid attempt to spread non-iterable instance"); | ||
} | ||
function _nonIterableRest() { | ||
throw new TypeError("Invalid attempt to destructure non-iterable instance"); | ||
} | ||
var TYPES = { | ||
const TYPES = { | ||
string: String, | ||
@@ -112,20 +18,16 @@ number: Number, | ||
}; | ||
var typeValues = Object.values(TYPES); | ||
const typeValues = () => Object.values(TYPES); | ||
function runValidation(validator, value) { | ||
var strict = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; | ||
var types = ensureArray(validator.type); | ||
return (types.length === 0 || types.some(function (type) { | ||
return isType(type, value, strict || validator.required !== true); | ||
})) && (typeof validator.validator !== 'function' || validator.validator(value)); | ||
let strict = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; | ||
const types = ensureArray(validator.type); | ||
return (types.length === 0 || types.some(type => isType(type, value, strict || validator.required !== true))) && (typeof validator.validator !== 'function' || validator.validator(value)); | ||
} | ||
function isType(type, item) { | ||
var nullAllowed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; | ||
let nullAllowed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; | ||
if (nullAllowed && (item === null || item === undefined)) return true; | ||
if (Array === type && Array.isArray(item)) return true; | ||
return Object.entries(TYPES).some(function (_ref) { | ||
var _ref2 = _slicedToArray(_ref, 2), | ||
key = _ref2[0], | ||
TYPE = _ref2[1]; | ||
return TYPE === type && _typeof(item) === key; | ||
return Object.entries(TYPES).some((_ref) => { | ||
let key = _ref[0], | ||
TYPE = _ref[1]; | ||
return TYPE === type && typeof item === key; | ||
} // eslint-disable-line valid-typeof | ||
@@ -143,238 +45,188 @@ ); | ||
var PropTypes = | ||
/*#__PURE__*/ | ||
function () { | ||
class PropTypes { | ||
/** @private */ | ||
function PropTypes(type) { | ||
_classCallCheck(this, PropTypes); | ||
constructor(type) { | ||
this.type = type; | ||
} | ||
_createClass(PropTypes, [{ | ||
key: "value", | ||
value: function value(_value) { | ||
this.default = _value && _typeof(_value) === 'object' ? function () { | ||
return _value; | ||
} : _value; | ||
return this; | ||
} | ||
}, { | ||
key: "validate", | ||
value: function validate(cb) { | ||
var _this = this; | ||
get type() { | ||
return this._type; | ||
} | ||
if (!(typeof cb === 'function')) return this; | ||
var validator = this.validator; | ||
set type(value) { | ||
this._type = ensureArray(value); | ||
} | ||
this.validator = function () { | ||
try { | ||
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { | ||
args[_key] = arguments[_key]; | ||
} | ||
get isRequired() { | ||
this.required = true; | ||
return this; | ||
} | ||
return (!(typeof validator === 'function') || validator.call(_this, args)) && cb.apply(_this, args); | ||
} catch (err) { | ||
return false; | ||
} | ||
}; | ||
value(value) { | ||
this.default = value && typeof value === 'object' ? () => value : value; | ||
return this; | ||
} | ||
return this; | ||
} | ||
/** @private */ | ||
validate(cb) { | ||
var _this = this; | ||
}, { | ||
key: "type", | ||
get: function get() { | ||
return this._type; | ||
}, | ||
set: function set(value) { | ||
this._type = ensureArray(value); | ||
} | ||
}, { | ||
key: "isRequired", | ||
get: function get() { | ||
this.required = true; | ||
return this; | ||
} | ||
}], [{ | ||
key: "create", | ||
value: function create(type) { | ||
return new PropTypes(type); | ||
} | ||
/** @private */ | ||
if (!(typeof cb === 'function')) return this; | ||
const validator = this.validator; | ||
}, { | ||
key: "clone", | ||
value: function clone(prop) { | ||
var type = this.create(prop.type); | ||
type.validate(prop.validator); | ||
return type; | ||
} | ||
}, { | ||
key: "instanceOf", | ||
value: function instanceOf(type) { | ||
return this.create(type); | ||
} | ||
}, { | ||
key: "oneOf", | ||
value: function oneOf() { | ||
for (var _len2 = arguments.length, values = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { | ||
values[_key2] = arguments[_key2]; | ||
this.validator = function () { | ||
try { | ||
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { | ||
args[_key] = arguments[_key]; | ||
} | ||
return (!(typeof validator === 'function') || validator.call(_this, args)) && cb.apply(_this, args); | ||
} catch (err) { | ||
return false; | ||
} | ||
}; | ||
values = values.flat(); | ||
ensureOne(values); | ||
return this; | ||
} | ||
/** @private */ | ||
var types = _toConsumableArray(new Set(values.map(function (value) { | ||
return TYPES[_typeof(value)] || Object; | ||
}))); | ||
var prop = this.create(types); | ||
var setOfValues = new Set(values); | ||
static create(type) { | ||
return new PropTypes(type); | ||
} | ||
/** @private */ | ||
prop.validator = function (value) { | ||
return setOfValues.has(value); | ||
}; | ||
return prop; | ||
static clone(prop) { | ||
const type = this.create(prop.type); | ||
type.validate(prop.validator); | ||
return type; | ||
} | ||
static get string() { | ||
return this.create(String); | ||
} | ||
static get number() { | ||
return this.create(Number); | ||
} | ||
static get bool() { | ||
return this.create(Boolean); | ||
} | ||
static get array() { | ||
return this.create(Array); | ||
} | ||
static get object() { | ||
return this.create(Object); | ||
} | ||
static get func() { | ||
return this.create(Function); | ||
} | ||
static get symbol() { | ||
return this.create(Symbol); | ||
} | ||
static get any() { | ||
return this.create(); | ||
} | ||
static instanceOf(type) { | ||
return this.create(type); | ||
} | ||
static oneOf() { | ||
for (var _len2 = arguments.length, values = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { | ||
values[_key2] = arguments[_key2]; | ||
} | ||
}, { | ||
key: "oneOfType", | ||
value: function oneOfType() { | ||
for (var _len3 = arguments.length, types = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { | ||
types[_key3] = arguments[_key3]; | ||
} | ||
types = types.flat().map(normalizeType); | ||
ensureOne(types); | ||
var prop = this.create(types.map(function (type) { | ||
return ensureArray(type.type); | ||
}).flat()); | ||
values = values.flat(); | ||
ensureOne(values); | ||
const types = [...new Set(values.map(value => TYPES[typeof value] || Object))]; | ||
const prop = this.create(types); | ||
const setOfValues = new Set(values); | ||
prop.validator = function (value) { | ||
return types.some(function (validator) { | ||
return runValidation(validator, value); | ||
}); | ||
}; | ||
prop.validator = value => { | ||
return setOfValues.has(value); | ||
}; | ||
return prop; | ||
return prop; | ||
} | ||
static oneOfType() { | ||
for (var _len3 = arguments.length, types = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { | ||
types[_key3] = arguments[_key3]; | ||
} | ||
}, { | ||
key: "arrayOf", | ||
value: function arrayOf() { | ||
for (var _len4 = arguments.length, expected = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { | ||
expected[_key4] = arguments[_key4]; | ||
} | ||
return this.collectionOf(Array, expected); | ||
types = types.flat().map(normalizeType); | ||
ensureOne(types); | ||
const prop = this.create(types.map(type => ensureArray(type.type)).flat()); | ||
prop.validator = value => types.some(validator => runValidation(validator, value)); | ||
return prop; | ||
} | ||
static arrayOf() { | ||
for (var _len4 = arguments.length, expected = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { | ||
expected[_key4] = arguments[_key4]; | ||
} | ||
}, { | ||
key: "objectOf", | ||
value: function objectOf() { | ||
for (var _len5 = arguments.length, expected = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { | ||
expected[_key5] = arguments[_key5]; | ||
} | ||
return this.collectionOf(Object, expected); | ||
return this.collectionOf(Array, expected); | ||
} | ||
static objectOf() { | ||
for (var _len5 = arguments.length, expected = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { | ||
expected[_key5] = arguments[_key5]; | ||
} | ||
/** @private */ | ||
}, { | ||
key: "collectionOf", | ||
value: function collectionOf(type, expected) { | ||
var prop = this.create(type); | ||
var types = expected.flat().map(normalizeType); | ||
return this.collectionOf(Object, expected); | ||
} | ||
/** @private */ | ||
prop.validator = function (value) { | ||
return Object.values(value).every(function (item) { | ||
return types.some(function (type) { | ||
return runValidation(type, item); | ||
}); | ||
}); | ||
}; | ||
return prop; | ||
} | ||
}, { | ||
key: "shape", | ||
value: function shape(_shape) { | ||
var prop = this.create(Object); | ||
var shapeType = {}; | ||
Object.entries(_shape).forEach(function (_ref) { | ||
var _ref2 = _slicedToArray(_ref, 2), | ||
key = _ref2[0], | ||
value = _ref2[1]; | ||
static collectionOf(type, expected) { | ||
const prop = this.create(type); | ||
const types = expected.flat().map(normalizeType); | ||
shapeType[key] = normalizeType(value); | ||
prop.validator = value => Object.values(value).every(item => types.some(type => runValidation(type, item))); | ||
return prop; | ||
} | ||
static shape(shape) { | ||
const prop = this.create(Object); | ||
const shapeType = {}; | ||
Object.entries(shape).forEach((_ref) => { | ||
let key = _ref[0], | ||
value = _ref[1]; | ||
shapeType[key] = normalizeType(value); | ||
}); | ||
prop.validator = value => { | ||
if (!(value && typeof value === 'object')) return prop.required !== true; | ||
return Object.entries(shapeType).every((_ref2) => { | ||
let key = _ref2[0], | ||
type = _ref2[1]; | ||
return runValidation(type, value[key]); | ||
}); | ||
}; | ||
prop.validator = function (value) { | ||
if (!(value && _typeof(value) === 'object')) return prop.required !== true; | ||
return Object.entries(shapeType).every(function (_ref3) { | ||
var _ref4 = _slicedToArray(_ref3, 2), | ||
key = _ref4[0], | ||
type = _ref4[1]; | ||
return prop; | ||
} | ||
return runValidation(type, value[key]); | ||
}); | ||
}; | ||
return prop; | ||
} | ||
}, { | ||
key: "validate", | ||
value: function validate(fn) { | ||
try { | ||
if (fn() === false) { | ||
console.error('There are some failing validation.'); | ||
} | ||
} catch (e) { | ||
console.error(e); | ||
static validate(fn) { | ||
try { | ||
if (fn() === false) { | ||
console.error('There are some failing validation.'); | ||
} | ||
} catch (e) { | ||
console.error(e); | ||
} | ||
}, { | ||
key: "string", | ||
get: function get() { | ||
return this.create(String); | ||
} | ||
}, { | ||
key: "number", | ||
get: function get() { | ||
return this.create(Number); | ||
} | ||
}, { | ||
key: "bool", | ||
get: function get() { | ||
return this.create(Boolean); | ||
} | ||
}, { | ||
key: "array", | ||
get: function get() { | ||
return this.create(Array); | ||
} | ||
}, { | ||
key: "object", | ||
get: function get() { | ||
return this.create(Object); | ||
} | ||
}, { | ||
key: "func", | ||
get: function get() { | ||
return this.create(Function); | ||
} | ||
}, { | ||
key: "symbol", | ||
get: function get() { | ||
return this.create(Symbol); | ||
} | ||
}, { | ||
key: "any", | ||
get: function get() { | ||
return this.create(); | ||
} | ||
}]); | ||
} | ||
return PropTypes; | ||
}(); | ||
} | ||
@@ -384,3 +236,3 @@ function normalizeType(type) { | ||
if (type in TYPES) return PropTypes.create(TYPES[type]); | ||
if (typeValues.includes(type)) return PropTypes.create(type); | ||
if (typeValues().includes(type)) return PropTypes.create(type); | ||
if (typeof type === 'function') return { | ||
@@ -387,0 +239,0 @@ validator: type, |
{ | ||
"name": "@znck/prop-types", | ||
"version": "0.4.0-alpha.3", | ||
"version": "0.4.0", | ||
"description": "Fluent prop validation for Vue", | ||
@@ -52,3 +52,4 @@ "main": "dist/prop-types.js", | ||
"vue": "2.*" | ||
} | ||
}, | ||
"sideEffects": false | ||
} |
@@ -19,3 +19,4 @@ <div class="text-xs-center" align="center" style="margin: 20px"> | ||
> It uses `process.env.NODE_ENV` to detect production build. | ||
> It uses `process.env.NODE_ENV !== 'production'` to detect production build. | ||
> Use `rollup-plugin-replace` for rollup and `DefinePlugin` for webpack. | ||
@@ -37,2 +38,11 @@ ## Usage | ||
```js | ||
// babel.config.js or .babelrc.js | ||
... | ||
plugins: [ | ||
'@znck/prop-types/replace' | ||
] | ||
... | ||
``` | ||
Here is an example of using PropTypes with a Vue component, which also | ||
@@ -39,0 +49,0 @@ documents the different validators provided: |
118
remove.js
/** | ||
* @znck/prop-types v0.4.0-alpha.3 | ||
* (c) 2019 undefined <undefined> (undefined) | ||
* @znck/prop-types v0.4.0 | ||
* (c) 2019 Rahul Kadyan <hi@znck.me> (https://znck.me) | ||
* @license MIT | ||
@@ -8,72 +8,46 @@ */ | ||
function _taggedTemplateLiteral(strings, raw) { | ||
if (!raw) { | ||
raw = strings.slice(0); | ||
} | ||
return Object.freeze(Object.defineProperties(strings, { | ||
raw: { | ||
value: Object.freeze(raw) | ||
} | ||
})); | ||
} | ||
function _templateObject2() { | ||
var data = _taggedTemplateLiteral(["if (process.env.NODE_ENV !== 'production') { ", " }"]); | ||
_templateObject2 = function _templateObject2() { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function _templateObject() { | ||
var data = _taggedTemplateLiteral(["process.env.NODE_ENV !== 'production' ? ", " : ", ""]); | ||
_templateObject = function _templateObject() { | ||
return data; | ||
}; | ||
return data; | ||
} | ||
function remove (babel) { | ||
var t = babel.types; | ||
var name = 'PropTypes'; | ||
var hasPropTypes = false; | ||
var newProps = t.objectExpression([]); | ||
var oldProps; | ||
const t = babel.types; | ||
let name = 'PropTypes'; | ||
let hasPropTypes = false; | ||
let newProps = t.objectExpression([]); | ||
let oldProps; | ||
return { | ||
name: '@znck/prop-types/remove', | ||
visitor: { | ||
ImportDeclaration: function ImportDeclaration(path) { | ||
ImportDeclaration(path) { | ||
if (path.node.source.value === '@znck/prop-types') { | ||
hasPropTypes = true; | ||
name = path.node.specifiers.find(function (s) { | ||
return s.type === 'ImportDefaultSpecifier'; | ||
}).local.name; | ||
name = path.node.specifiers.find(s => s.type === 'ImportDefaultSpecifier').local.name; | ||
} | ||
}, | ||
Identifier: function Identifier(path) { | ||
Identifier(path) { | ||
if (!hasPropTypes) return; | ||
if (!path.isIdentifier({ | ||
name: name | ||
name | ||
})) return; | ||
if (path.node._processed) return; | ||
path.node._processed = true; | ||
var prop = path.findParent(function (path) { | ||
return path.isObjectProperty(); | ||
}); | ||
let prop = path.findParent(path => path.isObjectProperty()); | ||
if (prop) { | ||
if (oldProps) { | ||
prop.skip(); | ||
path.stop(); | ||
return; | ||
} | ||
const props = prop.parentPath; | ||
var info = {}; | ||
if (props && props.isObjectExpression()) { | ||
const api = props.parentPath; | ||
if (api && api.isObjectProperty() && api.get('key').isIdentifier({ | ||
name: 'props' | ||
})) { | ||
// continue | ||
prop = prop; | ||
} else prop = null; | ||
} else prop = null; | ||
} | ||
if (prop) { | ||
const info = {}; | ||
prop.get('value').traverse({ | ||
Identifier: function Identifier(path) { | ||
Identifier(path) { | ||
if (path.isIdentifier({ | ||
@@ -86,17 +60,19 @@ name: 'boolean' | ||
})) { | ||
var call = path.findParent(function (path) { | ||
return path.isCallExpression(); | ||
}); | ||
const call = path.findParent(path => path.isCallExpression()); | ||
info.default = call.get('arguments.0'); | ||
} | ||
}, | ||
FunctionExpression: function FunctionExpression() { | ||
FunctionExpression() { | ||
path.skip(); | ||
}, | ||
ArrayExpression: function ArrayExpression(path) { | ||
ArrayExpression(path) { | ||
path.skip(); | ||
}, | ||
ObjectExpression: function ObjectExpression(path) { | ||
ObjectExpression(path) { | ||
path.skip(); | ||
} | ||
}); | ||
@@ -123,10 +99,6 @@ | ||
if (prop.container.length === newProps.properties.length) { | ||
oldProps = prop.findParent(function (path) { | ||
return path.isObjectExpression(); | ||
}); | ||
oldProps = prop.findParent(path => path.isObjectExpression()); | ||
if (newProps.properties.every(function (prop) { | ||
return t.isObjectProperty(prop) && t.isObjectExpression(prop.value) && (!prop.value.properties || !prop.value.properties.length); | ||
})) { | ||
var properties = newProps.properties.map(function (prop) { | ||
if (newProps.properties.every(prop => t.isObjectProperty(prop) && t.isObjectExpression(prop.value) && (!prop.value.properties || !prop.value.properties.length))) { | ||
const properties = newProps.properties.map(prop => { | ||
if (prop.computed) return prop;else return t.stringLiteral(prop.key.name); | ||
@@ -137,11 +109,10 @@ }); | ||
oldProps.replaceWith(babel.template.ast(_templateObject(), oldProps.node, newProps)); | ||
const node = babel.template.ast`process.env.NODE_ENV !== 'production' ? ${oldProps.node} : ${newProps}`; | ||
oldProps.replaceWith(node); | ||
} | ||
} else { | ||
var statement = path.findParent(function (path) { | ||
return path.isExpressionStatement(); | ||
}); | ||
const statement = path.findParent(path => path.isExpressionStatement()); | ||
if (statement) { | ||
var node = babel.template.ast(_templateObject2(), statement.node); | ||
const node = babel.template.ast`if (process.env.NODE_ENV !== 'production') { ${statement.node} }`; | ||
@@ -154,2 +125,3 @@ if (statement.parentPath.isProgram()) { | ||
} | ||
} | ||
@@ -156,0 +128,0 @@ }; |
@@ -11,4 +11,4 @@ export const TYPES = { | ||
export const typeNames = Object.keys(TYPES) | ||
export const typeValues = Object.values(TYPES) | ||
export const typeNames = () => Object.keys(TYPES) | ||
export const typeValues = () => Object.values(TYPES) | ||
@@ -33,3 +33,3 @@ export function runValidation(validator, value, strict = false) { | ||
return Object.entries(TYPES).some( | ||
([key, TYPE]) => TYPE === type && typeof item === key // eslint-disable-line valid-typeof | ||
({ 0: key, 1: TYPE }) => TYPE === type && typeof item === key // eslint-disable-line valid-typeof | ||
) | ||
@@ -36,0 +36,0 @@ } |
@@ -160,3 +160,3 @@ import { | ||
Object.entries(shape).forEach(([key, value]) => { | ||
Object.entries(shape).forEach(({0: key, 1: value}) => { | ||
shapeType[key] = normalizeType(value) | ||
@@ -168,3 +168,3 @@ }) | ||
return Object.entries(shapeType).every(([key, type]) => | ||
return Object.entries(shapeType).every(({0: key, 1: type}) => | ||
runValidation(type, value[key]) | ||
@@ -193,3 +193,3 @@ ) | ||
if (typeValues.includes(type)) return PropTypes.create(type) | ||
if (typeValues().includes(type)) return PropTypes.create(type) | ||
@@ -196,0 +196,0 @@ if (typeof type === 'function') return { validator: type, type: [] } |
@@ -27,11 +27,20 @@ export default function(babel) { | ||
const prop = path.findParent(path => path.isObjectProperty()) | ||
let prop = path.findParent(path => path.isObjectProperty()) | ||
if (prop) { | ||
if (oldProps) { | ||
prop.skip() | ||
path.stop() | ||
return | ||
} | ||
const props = prop.parentPath | ||
if (props && props.isObjectExpression()) { | ||
const api = props.parentPath | ||
if ( | ||
api && | ||
api.isObjectProperty() && | ||
api.get('key').isIdentifier({ name: 'props' }) | ||
) { | ||
// continue | ||
prop = prop | ||
} else prop = null | ||
} else prop = null | ||
} | ||
if (prop) { | ||
const info = {} | ||
@@ -131,7 +140,8 @@ | ||
oldProps.replaceWith( | ||
babel.template.ast`process.env.NODE_ENV !== 'production' ? ${ | ||
oldProps.node | ||
} : ${newProps}` | ||
) | ||
const node = babel.template | ||
.ast`process.env.NODE_ENV !== 'production' ? ${ | ||
oldProps.node | ||
} : ${newProps}` | ||
oldProps.replaceWith(node) | ||
} | ||
@@ -138,0 +148,0 @@ } else { |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
122
38367
950