@keysdown/form-wrapper 1.0.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +342 -31
- package/dist/form-wrapper.cjs +1 -1
- package/dist/form-wrapper.js +115 -29
- package/dist/form-wrapper.umd.cjs +1 -1
- package/dist/plugins/formValidation.cjs +1 -0
- package/dist/plugins/formValidation.d.ts +4 -0
- package/dist/plugins/formValidation.js +7 -0
- package/dist/plugins/locales.cjs +1 -0
- package/dist/plugins/locales.d.ts +2 -0
- package/dist/plugins/locales.js +115 -0
- package/dist/plugins/rules.cjs +1 -0
- package/dist/plugins/rules.d.ts +2 -0
- package/dist/plugins/rules.js +2 -0
- package/dist/rules-BIt-pifQ.cjs +1 -0
- package/dist/rules-DZmnRoUy.js +196 -0
- package/dist/src/core/Errors.d.ts +1 -1
- package/dist/src/core/Form.d.ts +12 -0
- package/dist/src/plugins/formValidation.d.ts +3 -0
- package/dist/src/plugins/locales/en.d.ts +3 -0
- package/dist/src/plugins/locales/es.d.ts +3 -0
- package/dist/src/plugins/locales/index.d.ts +3 -0
- package/dist/src/plugins/locales/pt.d.ts +3 -0
- package/dist/src/plugins/rules/alpha.d.ts +2 -0
- package/dist/src/plugins/rules/alphaNumeric.d.ts +2 -0
- package/dist/src/plugins/rules/array.d.ts +2 -0
- package/dist/src/plugins/rules/between.d.ts +2 -0
- package/dist/src/plugins/rules/boolean.d.ts +2 -0
- package/dist/src/plugins/rules/confirmed.d.ts +2 -0
- package/dist/src/plugins/rules/date.d.ts +2 -0
- package/dist/src/plugins/rules/different.d.ts +2 -0
- package/dist/src/plugins/rules/digits.d.ts +2 -0
- package/dist/src/plugins/rules/digitsBetween.d.ts +2 -0
- package/dist/src/plugins/rules/email.d.ts +2 -0
- package/dist/src/plugins/rules/endsWith.d.ts +2 -0
- package/dist/src/plugins/rules/greaterThan.d.ts +2 -0
- package/dist/src/plugins/rules/greaterThanOrEqual.d.ts +2 -0
- package/dist/src/plugins/rules/in.d.ts +2 -0
- package/dist/src/plugins/rules/index.d.ts +35 -0
- package/dist/src/plugins/rules/integer.d.ts +2 -0
- package/dist/src/plugins/rules/ip.d.ts +2 -0
- package/dist/src/plugins/rules/json.d.ts +2 -0
- package/dist/src/plugins/rules/lessThan.d.ts +2 -0
- package/dist/src/plugins/rules/lessThanOrEqual.d.ts +2 -0
- package/dist/src/plugins/rules/max.d.ts +2 -0
- package/dist/src/plugins/rules/min.d.ts +2 -0
- package/dist/src/plugins/rules/notIn.d.ts +2 -0
- package/dist/src/plugins/rules/nullable.d.ts +2 -0
- package/dist/src/plugins/rules/numeric.d.ts +2 -0
- package/dist/src/plugins/rules/regex.d.ts +2 -0
- package/dist/src/plugins/rules/required.d.ts +2 -0
- package/dist/src/plugins/rules/same.d.ts +2 -0
- package/dist/src/plugins/rules/size.d.ts +2 -0
- package/dist/src/plugins/rules/startsWith.d.ts +2 -0
- package/dist/src/plugins/rules/string.d.ts +2 -0
- package/dist/src/plugins/rules/url.d.ts +2 -0
- package/dist/src/plugins/rules/uuid.d.ts +2 -0
- package/dist/src/types/fields.d.ts +1 -0
- package/dist/src/types/locale.d.ts +7 -0
- package/dist/src/types/plugin.d.ts +2 -0
- package/dist/src/types/rules.d.ts +7 -1
- package/dist/src/types/validations.d.ts +3 -2
- package/dist/src/utils/collections.d.ts +1 -1
- package/dist/src/utils/rule.d.ts +2 -0
- package/package.json +17 -2
- package/dist/form-wrapper.iife.js +0 -1
- package/dist/src/utils/validations.d.ts +0 -3
package/dist/src/core/Form.d.ts
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
import { Field, Fields, RawFields } from '../types/fields';
|
|
2
2
|
import { Values } from '../types/values';
|
|
3
3
|
import { Validation } from './Validation';
|
|
4
|
+
import { Rules, RuleHandler } from '../types/rules';
|
|
5
|
+
import { FormWrapperPlugin } from '../types/plugin';
|
|
6
|
+
import { Locale, LocaleMessages } from '../types/locale';
|
|
4
7
|
export declare class Form {
|
|
5
8
|
[key: string]: any;
|
|
9
|
+
static rules: Rules;
|
|
10
|
+
static defaultMessages: LocaleMessages;
|
|
11
|
+
private static interpolateMessage;
|
|
6
12
|
awaiting: boolean;
|
|
7
13
|
originalValues: Values;
|
|
14
|
+
fieldAttributes: Record<string, string>;
|
|
8
15
|
validation: Validation;
|
|
9
16
|
constructor(fields: Fields | RawFields);
|
|
17
|
+
static extend(plugin: FormWrapperPlugin): typeof Form;
|
|
18
|
+
static addRule(name: string, handler: RuleHandler): typeof Form;
|
|
19
|
+
static locale(locale: Locale): typeof Form;
|
|
10
20
|
addField(field: string, value: Field): this;
|
|
11
21
|
addFields(fields: Fields | RawFields): this;
|
|
12
22
|
get errors(): import('./Errors').Errors;
|
|
@@ -17,6 +27,8 @@ export declare class Form {
|
|
|
17
27
|
removeField(field: string): this;
|
|
18
28
|
removeFields(fields: string[]): this;
|
|
19
29
|
reset(): this;
|
|
30
|
+
wasChanged(field: string | string[]): boolean;
|
|
31
|
+
filled(field: string | string[]): boolean;
|
|
20
32
|
get rules(): import('./Rules').Rules;
|
|
21
33
|
setAwaiting(awaiting?: boolean): this;
|
|
22
34
|
validate(field?: string | null): Promise<this | void>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Rules } from '../../types/rules';
|
|
2
|
+
export { default as required } from './required';
|
|
3
|
+
export { default as email } from './email';
|
|
4
|
+
export { default as url } from './url';
|
|
5
|
+
export { default as min } from './min';
|
|
6
|
+
export { default as max } from './max';
|
|
7
|
+
export { default as between } from './between';
|
|
8
|
+
export { default as size } from './size';
|
|
9
|
+
export { default as alpha } from './alpha';
|
|
10
|
+
export { default as alphaNumeric } from './alphaNumeric';
|
|
11
|
+
export { default as string } from './string';
|
|
12
|
+
export { default as integer } from './integer';
|
|
13
|
+
export { default as numeric } from './numeric';
|
|
14
|
+
export { default as array } from './array';
|
|
15
|
+
export { default as boolean } from './boolean';
|
|
16
|
+
export { default as date } from './date';
|
|
17
|
+
export { default as same } from './same';
|
|
18
|
+
export { default as different } from './different';
|
|
19
|
+
export { default as confirmed } from './confirmed';
|
|
20
|
+
export { default as inRule } from './in';
|
|
21
|
+
export { default as notIn } from './notIn';
|
|
22
|
+
export { default as regex } from './regex';
|
|
23
|
+
export { default as startsWith } from './startsWith';
|
|
24
|
+
export { default as endsWith } from './endsWith';
|
|
25
|
+
export { default as digits } from './digits';
|
|
26
|
+
export { default as digitsBetween } from './digitsBetween';
|
|
27
|
+
export { default as ip } from './ip';
|
|
28
|
+
export { default as json } from './json';
|
|
29
|
+
export { default as uuid } from './uuid';
|
|
30
|
+
export { default as lessThan } from './lessThan';
|
|
31
|
+
export { default as greaterThan } from './greaterThan';
|
|
32
|
+
export { default as lessThanOrEqual } from './lessThanOrEqual';
|
|
33
|
+
export { default as greaterThanOrEqual } from './greaterThanOrEqual';
|
|
34
|
+
export { default as nullable } from './nullable';
|
|
35
|
+
export declare const allRules: Rules;
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
export type ValidationRule = 'required' | 'email' | 'url' | 'min' | 'max' | 'between' | 'size' | 'alpha' | 'alphaNumeric' | 'string' | 'integer' | 'numeric' | 'array' | 'boolean' | 'date' | 'same' | 'different' | 'confirmed' | 'in' | 'notIn' | 'regex' | 'startsWith' | 'endsWith' | 'digits' | 'digitsBetween' | 'ip' | 'json' | 'uuid' | 'lessThan' | 'greaterThan' | 'lessThanOrEqual' | 'greaterThanOrEqual' | 'nullable' | (string & {});
|
|
2
|
+
export type RuleString = ValidationRule | `${ValidationRule}:${string}`;
|
|
3
|
+
export type RuleHandler = (value: any, attributes?: string[], form?: any, field?: string) => Promise<any>;
|
|
4
|
+
export interface RuleFunction extends RuleHandler {
|
|
5
|
+
ruleName: string;
|
|
6
|
+
}
|
|
1
7
|
export interface Rules {
|
|
2
|
-
[key: string]:
|
|
8
|
+
[key: string]: RuleHandler;
|
|
3
9
|
}
|
|
@@ -6,7 +6,7 @@ export declare class Collection<T> {
|
|
|
6
6
|
any(): boolean;
|
|
7
7
|
fill(items: Items<T>): this;
|
|
8
8
|
push(key: string, data: any): this;
|
|
9
|
-
has(key: string): boolean;
|
|
9
|
+
has(key: string | string[]): boolean;
|
|
10
10
|
get(item: string, defaultValue?: T | null): T | null;
|
|
11
11
|
unset(key: string): this;
|
|
12
12
|
clear(): this;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keysdown/form-wrapper",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/keysdown/form-wrapper.git"
|
|
@@ -21,11 +21,26 @@
|
|
|
21
21
|
"import": "./dist/form-wrapper.js",
|
|
22
22
|
"require": "./dist/form-wrapper.umd.cjs",
|
|
23
23
|
"types": "./dist/form-wrapper.d.ts"
|
|
24
|
+
},
|
|
25
|
+
"./plugins/formValidation": {
|
|
26
|
+
"import": "./dist/plugins/formValidation.js",
|
|
27
|
+
"require": "./dist/plugins/formValidation.cjs",
|
|
28
|
+
"types": "./dist/plugins/formValidation.d.ts"
|
|
29
|
+
},
|
|
30
|
+
"./plugins/rules": {
|
|
31
|
+
"import": "./dist/plugins/rules.js",
|
|
32
|
+
"require": "./dist/plugins/rules.cjs",
|
|
33
|
+
"types": "./dist/plugins/rules.d.ts"
|
|
34
|
+
},
|
|
35
|
+
"./plugins/locales": {
|
|
36
|
+
"import": "./dist/plugins/locales.js",
|
|
37
|
+
"require": "./dist/plugins/locales.cjs",
|
|
38
|
+
"types": "./dist/plugins/locales.d.ts"
|
|
24
39
|
}
|
|
25
40
|
},
|
|
26
41
|
"scripts": {
|
|
27
42
|
"dev": "vite",
|
|
28
|
-
"build": "tsc && vite build",
|
|
43
|
+
"build": "tsc && vite build && vite build --config vite.config.plugins.ts",
|
|
29
44
|
"preview": "vite preview",
|
|
30
45
|
"test": "vitest run",
|
|
31
46
|
"test:watch": "vitest",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var FormWrapper=(function(e){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var t=e=>typeof e==`string`?e.split(`|`):e,n=e=>({validation:{rules:e.validation?.rules?t(e.validation.rules):[],messages:e.validation?.messages??{}},value:e.value??null}),r=class{collection={};all(){return this.collection}first(e){let t=this.get(e);if(t){let e=Array.isArray(t)?t[0]:t;if(e)return String(e)}return null}any(){return Object.keys(this.collection).length>0}fill(e){return this.collection=e,this}push(e,t){return this.collection={...this.collection,[e]:t},this}has(e){return this.collection.hasOwnProperty(e)}get(e,t=null){return this.has(e)?this.collection[e]:t}unset(e){return this.has(e)&&delete this.collection[e],this}clear(){return this.collection={},this}},i=class extends r{},a=class extends r{},o=class extends r{push(e,t){let n=this.get(e)||[];return this.collection={...this.collection,[e]:[...n,t]},this}get(e){return super.get(e,[])}},s=class{errors=new o;messages=new i;rules=new a},c={required:e=>new Promise((t,n)=>{if(e==null)return n();String(e).replace(/\s/g,``).length>0?t(e):n()})},l=e=>typeof e==`object`&&!!e&&!Array.isArray(e),u=(e,t,n=null)=>{let r=t||new FormData;return Object.keys(e).forEach(t=>{let i=e[t];if(t=n?`${n}[${t}]`:t,!([void 0,null].indexOf(i)>-1)){if(l(i)&&!(i instanceof File)||Array.isArray(i)){u(i,r,t);return}r.append(t,i)}}),r},d=class{awaiting=!1;originalValues={};validation=new s;constructor(e){this.addFields(e)}addField(e,t){if(typeof t==`object`&&t&&Object.prototype.toString.call(t)===`[object Object]`&&`value`in t){let r=n(t);this[e]=r.value,this.originalValues[e]=r.value,this.validation.messages.push(e,r.validation.messages),this.validation.rules.push(e,r.validation.rules)}else this[e]=t,this.originalValues[e]=t;return this}addFields(e){return Object.keys(e).forEach(t=>{this.addField(t,e[t])}),this}get errors(){return this.validation.errors}fill(e,t=!1){return Object.keys(e).forEach(n=>{let r=e[n];t&&(this.originalValues[n]=r),this[n]=r}),this}get messages(){return this.validation.messages}removeField(e){return delete this[e],delete this.originalValues[e],this.validation.errors.unset(e),this.validation.messages.unset(e),this.validation.rules.unset(e),this}removeFields(e){return e.forEach(e=>{this.removeField(e)}),this}reset(){return this.validation.errors.clear(),Object.keys(this.originalValues).forEach(e=>{this[e]=this.originalValues[e]}),this}get rules(){return this.validation.rules}setAwaiting(e=!0){return this.awaiting=e,this}validate(e=null){return e?this.validateField(e):this.validateForm()}validateField(e){this.validation.errors.unset(e);let t=this.validation.rules.get(e);if(t&&t.length>0){let n=t.map(t=>{let n=t.split(`:`),r=n[0],i=n.length===2?n[1].split(`,`):[];return r in c?c[r](this[e],i).catch(t=>{let n=this.validation.messages.get(e);return n&&r in n&&this.validation.errors.push(e,n[r]),Promise.reject(t)}):Promise.reject(Error(`There is no validation rule called "${r}"`))});return Promise.all(n).then(()=>{})}return Promise.resolve()}validateForm(){let e=Object.keys(this.originalValues).map(e=>this.validateField(e));return Promise.all(e).then(()=>Promise.resolve(this)).catch(()=>Promise.reject(this))}values(e){let t={};return Object.keys(this.originalValues).forEach(n=>{(!e||e.includes(n))&&(t[n]=this[n])}),t}valuesAsFormData(e){return u(this.values(e))}},f=e=>new d(e),p=d;return e.createForm=f,e.default=p,e})({});
|