discord-client/parcel/lib/field-validator.js

116 lines
2.4 KiB
JavaScript

export const validatorStack = {};
export const inputStack = new WeakMap();
export class Class{
static get _validators(){ return validatorStack; }
/* (1) Push a new Format
*
* @_format<String> Format name
* @_validator<Function> Format callback
* @_error<String> Error message
*
* @return pushed<bool> Whether the validator has been pushed
*
---------------------------------------------------------*/
static pushFormat(_format=null, _validator=null, _error='error'){
/* (1) Error: invalid _format */
if( typeof _format !== 'string' )
return false;
/* (2) Error: invalid _validator */
if( !(_validator instanceof Function) )
return false;
/* (3) Store validator */
Class._validators[_format] = { error: _error, validator: _validator };
return true;
}
/* (1) Pop an existing Format
*
* @_format<String> Format name
*
* @return popped<bool> Whether the validator has been popped
*
---------------------------------------------------------*/
static popFormat(_format=null){
/* (1) Error: invalid _format */
if( typeof _format !== 'string' )
return false;
/* (2) Error: _validator not found */
if( Class._validators[_format] == null )
return false;
/* (3) Remove validator */
delete Class._validators[_format];
return true;
}
/* (2) Builds an validat-able input
*
* @_format<String> Existing validator name
* @_default<mixed> [OPT] Mutable input default value (default to NULL)
*
---------------------------------------------------------*/
constructor(_format, _default=null){
/* (1) Store fields (default value) */
this.mutable = _default;
/* (2) Store _format in STATIC inputStack */
inputStack.set(this, { format: _format });
}
/* (3) Checks if the _mutable has a current valid value
*
* @return valid<bool> Whether the _mutable is valid or not
*
---------------------------------------------------------*/
is_valid(){
// 1. Extract validator name
let format = inputStack.get(this).format;
// 2. Dispatch validation
return validatorStack[format].validator( this.mutable );
}
/* (3) Get current error message
*
* @return NULL if is_valid()
*
---------------------------------------------------------*/
get error(){
// 1. NULL if valid
if( this.is_valid() )
return '';
// 2. Extract validator name
let format = inputStack.get(this).format;
// 3. Dispatch validation
return validatorStack[format].error;
}
}