stackpress
Version:
Incept is a content management framework.
190 lines (189 loc) • 5.4 kB
JavaScript
export function safeValue(value) {
return typeof value !== 'undefined' ? value : '';
}
;
export function required(value) {
return value !== null && typeof value !== 'undefined';
}
;
export function notempty(value) {
if (Array.isArray(value)) {
return value.length > 0;
}
else if (typeof value === 'object') {
return Object.keys(value).length > 0;
}
else if (typeof value === 'number') {
return value !== 0;
}
return safeValue(value).toString().length > 0;
}
;
export function eq(value, compare) {
return value == compare;
}
;
export function ne(value, compare) {
return value != compare;
}
;
export function option(value, options) {
return options.includes(value);
}
;
export function starting(value, start) {
return safeValue(value).toString().startsWith(start);
}
;
export function ending(value, start) {
return safeValue(value).toString().endsWith(start);
}
;
export function regex(value, regex) {
return new RegExp(regex).test(safeValue(value).toString());
}
;
export function date(value) {
if (value instanceof Date) {
return true;
}
return new Date(value).toString() !== 'Invalid Date';
}
;
export function future(value) {
return assert.date(value) && new Date(value || 0) > new Date();
}
;
export function past(value) {
return assert.date(value) && new Date(value || 0) < new Date();
}
;
export function present(value) {
return assert.date(value)
&& new Date(value || 0).toDateString() === new Date().toDateString();
}
;
export function gt(value, compare) {
return (Number(value) || 0) > compare;
}
;
export function ge(value, compare) {
return (Number(value) || 0) >= compare;
}
;
export function lt(value, compare) {
return (Number(value) || 0) < compare;
}
;
export function le(value, compare) {
return (Number(value) || 0) <= compare;
}
;
export function ceq(value, compare) {
return eq(safeValue(value).toString().length, compare);
}
;
export function cgt(value, compare) {
return gt(safeValue(value).toString().length, compare);
}
;
export function cge(value, compare) {
return ge(safeValue(value).toString().length, compare);
}
;
export function clt(value, compare) {
return lt(safeValue(value).toString().length, compare);
}
;
export function cle(value, compare) {
return le(safeValue(value).toString().length, compare);
}
;
export function weq(value, compare) {
return eq(safeValue(value).toString().split(' ').length, compare);
}
;
export function wgt(value, compare) {
return gt(safeValue(value).toString().split(' ').length, compare);
}
;
export function wge(value, compare) {
return ge(safeValue(value).toString().split(' ').length, compare);
}
;
export function wlt(value, compare) {
return lt(safeValue(value).toString().split(' ').length, compare);
}
;
export function wle(value, compare) {
return le(safeValue(value).toString().split(' ').length, compare);
}
;
export function cc(value) {
return regex(value, /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/);
}
;
export function color(value) {
return regex(value, /^#?([a-f0-9]{6}|[a-f0-9]{3})$/);
}
;
export function email(value) {
return regex(value, /^(?:(?:(?:[^@,"\[\]\x5c\x00-\x20\x7f-\xff\.]|\x5c(?=[@,"\[\]\x5c\x00-\x20\x7f-\xff]))(?:[^@,"\[\]\x5c\x00-\x20\x7f-\xff\.]|(?<=\x5c)[@,"\[\]\x5c\x00-\x20\x7f-\xff]|\x5c(?=[@,"\[\]\x5c\x00-\x20\x7f-\xff])|\.(?=[^\.])){1,62}(?:[^@,"\[\]\x5c\x00-\x20\x7f-\xff\.]|(?<=\x5c)[@,"\[\]\x5c\x00-\x20\x7f-\xff])|[^@,"\[\]\x5c\x00-\x20\x7f-\xff\.]{1,2})|"(?:[^"]|(?<=\x5c)"){1,62}")@(?:(?!.{64})(?:[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.?|[a-zA-Z0-9]\.?)+\.(?:xn--[a-zA-Z0-9]+|[a-zA-Z]{2,6})|\[(?:[0-1]?\d?\d|2[0-4]\d|25[0-5])(?:\.(?:[0-1]?\d?\d|2[0-4]\d|25[0-5])){3}\])$/);
}
;
export function hex(value) {
return regex(value, /^[a-f0-9]+$/);
}
;
export function price(value) {
return regex(value.toString(), /^(\d*(\.\d{2}){0, 1})|(\d+)$/);
}
;
export function url(value) {
return regex(value, /^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?\/?/i);
}
;
export function boolean(value) {
return typeof value === 'boolean';
}
;
export function string(value) {
return typeof value === 'string';
}
;
export function number(value) {
return typeof value === 'number' || regex(value.toString(), /^\d+(\.\d+)*$/);
}
;
export function float(value) {
return typeof value === 'number' || regex(value.toString(), /^\d+\.\d+$/);
}
;
export function integer(value) {
return typeof value === 'number' || regex(value.toString(), /^\d+$/);
}
;
export function object(value) {
return value !== null
&& !Array.isArray(value)
&& value?.constructor?.name === 'Object';
}
;
export function array(values, validator, ...args) {
return Array.isArray(values) && values.every(value => assert[validator].apply(assert, [value, ...args]));
}
export const pattern = regex;
export const oneof = option;
const assert = {
required, notempty, eq, ne,
option, regex, date, future,
past, present, gt, ge,
lt, le, ceq, cgt,
cge, clt, cle, weq,
wgt, wge, wlt, wle,
cc, color, email, hex,
price, url, boolean, string,
number, float, integer, object,
array, pattern, oneof
};
export default assert;