import { instanceTypes, is } from "../util/helpers/instances"
/**
* Provides a way to handle prop types and validation
*
* @class PropType
*/
class PropType {
props = {}
/**
* @constructor
* @param {string} type | Type of the property, refeers to {instanceTypes}
* @memberof PropType
*/
constructor(type) {
this.type = type
this.required = false
this.isRequired = this.isRequired.bind(this)
this.isValid = this.isValid.bind(this)
}
/**
* Data type
*
* @memberof PropType
*/
get type() {
return this.props.type
}
set type(value) {
this.props.type = value
}
/**
* Wether the property is required
*
* @memberof PropType
*/
get required() {
return this.props.required
}
set required(value) {
this.props.required = value
}
/**
* Sets the required property to true
* @memberof PropType
*/
isRequired() {
this.required = true
return this
}
/**
* Checks the type validity of the value
*
* @param {any} value | the value of the property that needs to be validated
* @returns {boolean} | validity of the prop
* @memberof PropType
*/
isValid(value) {
return is(this.type, value)
}
}
/**
* Default instance for type string
*
* @memberof PropType
*/
PropType.string = () => new PropType(instanceTypes.string)
/**
* Default instance for type array
*
* @memberof PropType
*/
PropType.array = () => new PropType(instanceTypes.array)
/**
* Default instance for type number
*
* @memberof PropType
*/
PropType.number = () => new PropType(instanceTypes.number)
/**
* Default instance for type bool
*
* @memberof PropType
*/
PropType.bool = () => new PropType(instanceTypes.bool)
/**
* Default instance for type date
*
* @memberof PropType
*/
PropType.date = () => new PropType(instanceTypes.date)
/**
* Default instance for type func
*
* @memberof PropType
*/
PropType.func = () => new PropType(instanceTypes.func)
/**
* Default instance for type object
*
* @memberof PropType
*/
PropType.object = () => new PropType(instanceTypes.object)
/**
* Default instance for type regExp
*
* @memberof PropType
*/
PropType.regExp = () => new PropType(instanceTypes.regExp)
export default PropType