use-state-validate
Advanced tools
Comparing version 3.0.0-alpha.19 to 3.0.0-alpha.21
@@ -1,3 +0,3 @@ | ||
import type { ReactNode } from "react"; | ||
declare type IFieldObjectCustomProps<T, P> = Pick<P, Exclude<keyof P, keyof IFieldValidationPropsBase<T>>>; | ||
import type { DependencyList, ReactNode } from "react"; | ||
declare type IFieldObjectCustomConfig<T, P> = Pick<P, Exclude<keyof P, keyof IFieldValidationConfigBase<T>>>; | ||
interface IFieldValidationStateBase<T> { | ||
@@ -18,12 +18,13 @@ errors: ReactNode[]; | ||
} | ||
export declare type IFieldObject<T, P = {}> = IFieldObjectCustomProps<T, P> & IFieldObjectBase<T>; | ||
export declare type IFieldObject<T, P = {}> = IFieldObjectCustomConfig<T, P> & IFieldObjectBase<T>; | ||
export declare type RuleCallback<T> = (value: T) => boolean; | ||
interface IFieldValidationPropsBase<T> { | ||
interface IFieldValidationConfigBase<T> { | ||
cueDelay?: number; | ||
deps?: DependencyList; | ||
label?: string; | ||
cueDelay?: number; | ||
required?: boolean | ReactNode; | ||
rules?: [RuleCallback<T>, ReactNode?][]; | ||
} | ||
export declare type IFieldValidationProps<T, P = {}> = P & IFieldValidationPropsBase<T>; | ||
declare const useStateValidate: <T, P extends IFieldValidationPropsBase<T>>(initial: T, props: P) => IFieldObject<T, P>; | ||
export declare type IFieldValidationConfig<T, P = {}> = P & IFieldValidationConfigBase<T>; | ||
declare const useStateValidate: <T, P extends IFieldValidationConfigBase<T>>(initial: T, props: P) => IFieldObject<T, P>; | ||
export declare const fieldBagChanged: <T, P = {}>(fieldBag: object) => boolean; | ||
@@ -43,3 +44,3 @@ export declare const fieldBagValid: <T, P = {}>(fieldBag: object) => boolean; | ||
export declare const ruleZip: () => (value: string) => boolean; | ||
export declare const defineProps: <T, P = {}>(rule: IFieldValidationProps<T, P>) => IFieldValidationProps<T, P>; | ||
export declare const defineConfig: <T, P = {}>(rule: IFieldValidationConfig<T, P>) => IFieldValidationConfig<T, P>; | ||
export default useStateValidate; |
@@ -1,1 +0,1 @@ | ||
"use strict";var __rest=this&&this.__rest||function(e,r){var t={};for(a in e)Object.prototype.hasOwnProperty.call(e,a)&&r.indexOf(a)<0&&(t[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,a=Object.getOwnPropertySymbols(e);l<a.length;l++)r.indexOf(a[l])<0&&Object.prototype.propertyIsEnumerable.call(e,a[l])&&(t[a[l]]=e[a[l]]);return t};Object.defineProperty(exports,"__esModule",{value:!0}),exports.defineProps=exports.ruleZip=exports.ruleNumeric=exports.rulePhone=exports.ruleMatch=exports.ruleLength=exports.ruleEnum=exports.ruleEmail=exports.fieldBagTraverse=exports.fieldBagReduceToValues=exports.fieldBagValid=exports.fieldBagChanged=void 0;const react_1=require("react"),useStateValidate=(t,l)=>{const[e,r]=(0,react_1.useState)(deriveFieldObject(t,l)),a=(0,react_1.useRef)(e),u=(0,react_1.useRef)(!1);let s=(0,react_1.useRef)();const i=()=>clearTimeout(s.current),c=e=>{a.current=Object.assign(Object.assign({},a.current),e),r(a.current)},n=()=>c(deriveFieldObject(t,l)),d=e=>{i(),c({cue:e,cueInvalid:e&&!a.current.valid})};return(0,react_1.useEffect)(()=>(u.current&&n(),u.current=!0,i),[t]),Object.assign(Object.assign({},e),{restore:n,setCue:d,setValue:e=>{i();let r=a.current["cue"];0===l.cueDelay?r=!0:l.cueDelay&&(r=!1,s.current=setTimeout(()=>{d(!0)},l.cueDelay));e=deriveFieldObject(e,l);c(Object.assign(Object.assign({},e),{changed:t!==e.value,cue:r,cueInvalid:r&&!e.valid}))}})},deriveFieldObject=(e,r)=>{var{label:t,required:l,rules:a}=r,r=__rest(r,["label","cueDelay","required","rules"]),a=validate(e,{label:t,required:l,rules:a});return Object.assign({errors:a,cue:!1,valid:0===a.length,cueInvalid:!1,changed:!1,required:!!l,label:t||"",value:e},r)},validate=(t,r)=>{const l=r.label||"Field";return[[e=>!r.required||0===e||!!e,"boolean"!=typeof r.required&&r.required||l+" is required"],...r.rules||[]].map(([e,r])=>!e(t)&&(r||l+" is invalid")).filter(Boolean)},fieldBagChanged=e=>Object.values(e).every(({changed:e})=>e),fieldBagValid=(exports.fieldBagChanged=fieldBagChanged,e=>Object.values(e).every(({valid:e})=>e)),fieldBagReduceToValues=(exports.fieldBagValid=fieldBagValid,e=>Object.entries(e).reduce((e,[r,t])=>(e[r]=t.value,e),{})),fieldBagTraverse=(exports.fieldBagReduceToValues=fieldBagReduceToValues,(e,r)=>Object.values(e).forEach(r)),ruleEmail=(exports.fieldBagTraverse=fieldBagTraverse,()=>e=>/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(e)),ruleEnum=(exports.ruleEmail=ruleEmail,r=>e=>-1<r.indexOf(e)),ruleLength=(exports.ruleEnum=ruleEnum,({min:r,max:t})=>e=>(r||0)<=e.length&&e.length<=(t||Number.MIN_VALUE)),ruleMatch=(exports.ruleLength=ruleLength,r=>e=>r.test(e)),rulePhone=(exports.ruleMatch=ruleMatch,()=>(0,exports.ruleMatch)(/^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/)),ruleNumeric=(exports.rulePhone=rulePhone,()=>e=>!isNaN(e)),ruleZip=(exports.ruleNumeric=ruleNumeric,()=>(0,exports.ruleMatch)(/^[0-9]{5}(?:-[0-9]{4})?$/)),defineProps=(exports.ruleZip=ruleZip,e=>e);exports.defineProps=defineProps,exports.default=useStateValidate; | ||
"use strict";var __rest=this&&this.__rest||function(e,r){var t={};for(a in e)Object.prototype.hasOwnProperty.call(e,a)&&r.indexOf(a)<0&&(t[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,a=Object.getOwnPropertySymbols(e);l<a.length;l++)r.indexOf(a[l])<0&&Object.prototype.propertyIsEnumerable.call(e,a[l])&&(t[a[l]]=e[a[l]]);return t};Object.defineProperty(exports,"__esModule",{value:!0}),exports.defineConfig=exports.ruleZip=exports.ruleNumeric=exports.rulePhone=exports.ruleMatch=exports.ruleLength=exports.ruleEnum=exports.ruleEmail=exports.fieldBagTraverse=exports.fieldBagReduceToValues=exports.fieldBagValid=exports.fieldBagChanged=void 0;const react_1=require("react"),useStateValidate=(t,l)=>{const[e,r]=(0,react_1.useState)(deriveFieldObject(t,l)),a=(0,react_1.useRef)(e),u=(0,react_1.useRef)(!1);let i=(0,react_1.useRef)();const s=()=>clearTimeout(i.current),c=e=>{a.current=Object.assign(Object.assign({},a.current),e),r(a.current)},n=()=>c(deriveFieldObject(t,l)),d=e=>{s(),c({cue:e,cueInvalid:e&&!a.current.valid})};return(0,react_1.useEffect)(()=>(u.current&&n(),u.current=!0,s),[t]),(0,react_1.useEffect)(()=>c(deriveFieldObject(e.value,l)),l.deps||[]),Object.assign(Object.assign({},e),{restore:n,setCue:d,setValue:e=>{s();let r=a.current["cue"];0===l.cueDelay?r=!0:l.cueDelay&&(r=!1,i.current=setTimeout(()=>{d(!0)},l.cueDelay));e=deriveFieldObject(e,l);c(Object.assign(Object.assign({},e),{changed:t!==e.value,cue:r,cueInvalid:r&&!e.valid}))}})},deriveFieldObject=(e,r)=>{var{label:t,required:l,rules:a}=r,r=__rest(r,["cueDelay","deps","label","required","rules"]),a=validate(e,{label:t,required:l,rules:a});return Object.assign({errors:a,cue:!1,valid:0===a.length,cueInvalid:!1,changed:!1,required:!!l,label:t||"",value:e},r)},validate=(t,r)=>{const l=r.label||"Field";return[[e=>!r.required||0===e||!!e,"boolean"!=typeof r.required&&r.required||l+" is required"],...r.rules||[]].map(([e,r])=>!e(t)&&(r||l+" is invalid")).filter(Boolean)},fieldBagChanged=e=>Object.values(e).every(({changed:e})=>e),fieldBagValid=(exports.fieldBagChanged=fieldBagChanged,e=>Object.values(e).every(({valid:e})=>e)),fieldBagReduceToValues=(exports.fieldBagValid=fieldBagValid,e=>Object.entries(e).reduce((e,[r,t])=>(e[r]=t.value,e),{})),fieldBagTraverse=(exports.fieldBagReduceToValues=fieldBagReduceToValues,(e,r)=>Object.values(e).forEach(r)),ruleEmail=(exports.fieldBagTraverse=fieldBagTraverse,()=>e=>/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(e)),ruleEnum=(exports.ruleEmail=ruleEmail,r=>e=>-1<r.indexOf(e)),ruleLength=(exports.ruleEnum=ruleEnum,({min:r,max:t})=>e=>(r||0)<=e.length&&e.length<=(t||Number.MIN_VALUE)),ruleMatch=(exports.ruleLength=ruleLength,r=>e=>r.test(e)),rulePhone=(exports.ruleMatch=ruleMatch,()=>(0,exports.ruleMatch)(/^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/)),ruleNumeric=(exports.rulePhone=rulePhone,()=>e=>!isNaN(e)),ruleZip=(exports.ruleNumeric=ruleNumeric,()=>(0,exports.ruleMatch)(/^[0-9]{5}(?:-[0-9]{4})?$/)),defineConfig=(exports.ruleZip=ruleZip,e=>e);exports.defineConfig=defineConfig,exports.default=useStateValidate; |
@@ -1,3 +0,3 @@ | ||
import type { ReactNode } from "react"; | ||
declare type IFieldObjectCustomProps<T, P> = Pick<P, Exclude<keyof P, keyof IFieldValidationPropsBase<T>>>; | ||
import type { DependencyList, ReactNode } from "react"; | ||
declare type IFieldObjectCustomConfig<T, P> = Pick<P, Exclude<keyof P, keyof IFieldValidationConfigBase<T>>>; | ||
interface IFieldValidationStateBase<T> { | ||
@@ -18,12 +18,13 @@ errors: ReactNode[]; | ||
} | ||
export declare type IFieldObject<T, P = {}> = IFieldObjectCustomProps<T, P> & IFieldObjectBase<T>; | ||
export declare type IFieldObject<T, P = {}> = IFieldObjectCustomConfig<T, P> & IFieldObjectBase<T>; | ||
export declare type RuleCallback<T> = (value: T) => boolean; | ||
interface IFieldValidationPropsBase<T> { | ||
interface IFieldValidationConfigBase<T> { | ||
cueDelay?: number; | ||
deps?: DependencyList; | ||
label?: string; | ||
cueDelay?: number; | ||
required?: boolean | ReactNode; | ||
rules?: [RuleCallback<T>, ReactNode?][]; | ||
} | ||
export declare type IFieldValidationProps<T, P = {}> = P & IFieldValidationPropsBase<T>; | ||
declare const useStateValidate: <T, P extends IFieldValidationPropsBase<T>>(initial: T, props: P) => IFieldObject<T, P>; | ||
export declare type IFieldValidationConfig<T, P = {}> = P & IFieldValidationConfigBase<T>; | ||
declare const useStateValidate: <T, P extends IFieldValidationConfigBase<T>>(initial: T, props: P) => IFieldObject<T, P>; | ||
export declare const fieldBagChanged: <T, P = {}>(fieldBag: object) => boolean; | ||
@@ -43,3 +44,3 @@ export declare const fieldBagValid: <T, P = {}>(fieldBag: object) => boolean; | ||
export declare const ruleZip: () => (value: string) => boolean; | ||
export declare const defineProps: <T, P = {}>(rule: IFieldValidationProps<T, P>) => IFieldValidationProps<T, P>; | ||
export declare const defineConfig: <T, P = {}>(rule: IFieldValidationConfig<T, P>) => IFieldValidationConfig<T, P>; | ||
export default useStateValidate; |
@@ -1,1 +0,1 @@ | ||
import{useEffect,useRef,useState}from"react";const useStateValidate=(u,l)=>{const[e,r]=useState(deriveFieldObject(u,l)),a=useRef(e),t=useRef(!1);let i=useRef();const d=()=>clearTimeout(i.current),c=e=>{a.current={...a.current,...e},r(a.current)},n=()=>c(deriveFieldObject(u,l)),s=e=>{d(),c({cue:e,cueInvalid:e&&!a.current.valid})};return useEffect(()=>(t.current&&n(),t.current=!0,d),[u]),{...e,restore:n,setCue:s,setValue:e=>{d();let r=a.current["cue"];0===l.cueDelay?r=!0:l.cueDelay&&(r=!1,i.current=setTimeout(()=>{s(!0)},l.cueDelay));e=deriveFieldObject(e,l);c({...e,changed:u!==e.value,cue:r,cueInvalid:r&&!e.valid})}}},deriveFieldObject=(e,{label:r,cueDelay:u,required:l,rules:a,...t})=>{a=validate(e,{label:r,required:l,rules:a});return{errors:a,cue:!1,valid:0===a.length,cueInvalid:!1,changed:!1,required:!!l,label:r||"",value:e,...t}},validate=(u,r)=>{const l=r.label||"Field";return[[e=>!r.required||0===e||!!e,"boolean"!=typeof r.required&&r.required||l+" is required"],...r.rules||[]].map(([e,r])=>!e(u)&&(r||l+" is invalid")).filter(Boolean)},fieldBagChanged=e=>Object.values(e).every(({changed:e})=>e),fieldBagValid=e=>Object.values(e).every(({valid:e})=>e),fieldBagReduceToValues=e=>Object.entries(e).reduce((e,[r,u])=>(e[r]=u.value,e),{}),fieldBagTraverse=(e,r)=>Object.values(e).forEach(r),ruleEmail=()=>e=>/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(e),ruleEnum=r=>e=>-1<r.indexOf(e),ruleLength=({min:r,max:u})=>e=>(r||0)<=e.length&&e.length<=(u||Number.MIN_VALUE),ruleMatch=r=>e=>r.test(e),rulePhone=()=>ruleMatch(/^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/),ruleNumeric=()=>e=>!isNaN(e),ruleZip=()=>ruleMatch(/^[0-9]{5}(?:-[0-9]{4})?$/),defineProps=e=>e;export default useStateValidate;export{fieldBagChanged,fieldBagValid,fieldBagReduceToValues,fieldBagTraverse,ruleEmail,ruleEnum,ruleLength,ruleMatch,rulePhone,ruleNumeric,ruleZip,defineProps}; | ||
import{useEffect,useRef,useState}from"react";const useStateValidate=(u,l)=>{const[e,r]=useState(deriveFieldObject(u,l)),a=useRef(e),t=useRef(!1);let i=useRef();const d=()=>clearTimeout(i.current),c=e=>{a.current={...a.current,...e},r(a.current)},n=()=>c(deriveFieldObject(u,l)),s=e=>{d(),c({cue:e,cueInvalid:e&&!a.current.valid})};return useEffect(()=>(t.current&&n(),t.current=!0,d),[u]),useEffect(()=>c(deriveFieldObject(e.value,l)),l.deps||[]),{...e,restore:n,setCue:s,setValue:e=>{d();let r=a.current["cue"];0===l.cueDelay?r=!0:l.cueDelay&&(r=!1,i.current=setTimeout(()=>{s(!0)},l.cueDelay));e=deriveFieldObject(e,l);c({...e,changed:u!==e.value,cue:r,cueInvalid:r&&!e.valid})}}},deriveFieldObject=(e,{cueDelay:r,deps:u,label:l,required:a,rules:t,...i})=>{t=validate(e,{label:l,required:a,rules:t});return{errors:t,cue:!1,valid:0===t.length,cueInvalid:!1,changed:!1,required:!!a,label:l||"",value:e,...i}},validate=(u,r)=>{const l=r.label||"Field";return[[e=>!r.required||0===e||!!e,"boolean"!=typeof r.required&&r.required||l+" is required"],...r.rules||[]].map(([e,r])=>!e(u)&&(r||l+" is invalid")).filter(Boolean)},fieldBagChanged=e=>Object.values(e).every(({changed:e})=>e),fieldBagValid=e=>Object.values(e).every(({valid:e})=>e),fieldBagReduceToValues=e=>Object.entries(e).reduce((e,[r,u])=>(e[r]=u.value,e),{}),fieldBagTraverse=(e,r)=>Object.values(e).forEach(r),ruleEmail=()=>e=>/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(e),ruleEnum=r=>e=>-1<r.indexOf(e),ruleLength=({min:r,max:u})=>e=>(r||0)<=e.length&&e.length<=(u||Number.MIN_VALUE),ruleMatch=r=>e=>r.test(e),rulePhone=()=>ruleMatch(/^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/),ruleNumeric=()=>e=>!isNaN(e),ruleZip=()=>ruleMatch(/^[0-9]{5}(?:-[0-9]{4})?$/),defineConfig=e=>e;export default useStateValidate;export{fieldBagChanged,fieldBagValid,fieldBagReduceToValues,fieldBagTraverse,ruleEmail,ruleEnum,ruleLength,ruleMatch,rulePhone,ruleNumeric,ruleZip,defineConfig}; |
{ | ||
"name": "use-state-validate", | ||
"version": "3.0.0-alpha.19", | ||
"version": "3.0.0-alpha.21", | ||
"description": "Clean featherweight state validation", | ||
@@ -40,2 +40,6 @@ "sideEffects": false, | ||
"require": "./lib/cjs/index.js" | ||
}, | ||
"./package.json": { | ||
"import": "./package.json", | ||
"require": "./package.json" | ||
} | ||
@@ -48,2 +52,3 @@ }, | ||
"prep-pub": "npm run build && npm login", | ||
"publish:alpha": "npm publish --tag alpha", | ||
"publish:prepatch": "npm run prep-pub && npm version prepatch --preid alpha && npm publish --tag alpha", | ||
@@ -50,0 +55,0 @@ "publish:premajor": "npm run prep-pub && npm version premajor --preid alpha && npm publish --tag alpha", |
@@ -11,3 +11,8 @@ # use-state-validate | ||
``` bash | ||
# npm | ||
npm install use-state-validate | ||
# yarn | ||
yarn add use-state-validate | ||
# pnpm | ||
pnpm install use-state-validate | ||
``` | ||
@@ -14,0 +19,0 @@ |
14234
88
47