@keysdown/form-wrapper 1.0.5 → 2.0.1

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.
Files changed (65) hide show
  1. package/README.md +335 -31
  2. package/dist/form-wrapper.cjs +1 -1
  3. package/dist/form-wrapper.js +114 -28
  4. package/dist/form-wrapper.umd.cjs +1 -1
  5. package/dist/plugins/formValidation.cjs +1 -0
  6. package/dist/plugins/formValidation.d.ts +4 -0
  7. package/dist/plugins/formValidation.js +7 -0
  8. package/dist/plugins/locales.cjs +1 -0
  9. package/dist/plugins/locales.d.ts +2 -0
  10. package/dist/plugins/locales.js +115 -0
  11. package/dist/plugins/rules.cjs +1 -0
  12. package/dist/plugins/rules.d.ts +2 -0
  13. package/dist/plugins/rules.js +2 -0
  14. package/dist/rules-BIt-pifQ.cjs +1 -0
  15. package/dist/rules-DZmnRoUy.js +196 -0
  16. package/dist/src/core/Errors.d.ts +1 -1
  17. package/dist/src/core/Form.d.ts +11 -0
  18. package/dist/src/plugins/formValidation.d.ts +3 -0
  19. package/dist/src/plugins/locales/en.d.ts +3 -0
  20. package/dist/src/plugins/locales/es.d.ts +3 -0
  21. package/dist/src/plugins/locales/index.d.ts +3 -0
  22. package/dist/src/plugins/locales/pt.d.ts +3 -0
  23. package/dist/src/plugins/rules/alpha.d.ts +2 -0
  24. package/dist/src/plugins/rules/alphaNumeric.d.ts +2 -0
  25. package/dist/src/plugins/rules/array.d.ts +2 -0
  26. package/dist/src/plugins/rules/between.d.ts +2 -0
  27. package/dist/src/plugins/rules/boolean.d.ts +2 -0
  28. package/dist/src/plugins/rules/confirmed.d.ts +2 -0
  29. package/dist/src/plugins/rules/date.d.ts +2 -0
  30. package/dist/src/plugins/rules/different.d.ts +2 -0
  31. package/dist/src/plugins/rules/digits.d.ts +2 -0
  32. package/dist/src/plugins/rules/digitsBetween.d.ts +2 -0
  33. package/dist/src/plugins/rules/email.d.ts +2 -0
  34. package/dist/src/plugins/rules/endsWith.d.ts +2 -0
  35. package/dist/src/plugins/rules/greaterThan.d.ts +2 -0
  36. package/dist/src/plugins/rules/greaterThanOrEqual.d.ts +2 -0
  37. package/dist/src/plugins/rules/in.d.ts +2 -0
  38. package/dist/src/plugins/rules/index.d.ts +35 -0
  39. package/dist/src/plugins/rules/integer.d.ts +2 -0
  40. package/dist/src/plugins/rules/ip.d.ts +2 -0
  41. package/dist/src/plugins/rules/json.d.ts +2 -0
  42. package/dist/src/plugins/rules/lessThan.d.ts +2 -0
  43. package/dist/src/plugins/rules/lessThanOrEqual.d.ts +2 -0
  44. package/dist/src/plugins/rules/max.d.ts +2 -0
  45. package/dist/src/plugins/rules/min.d.ts +2 -0
  46. package/dist/src/plugins/rules/notIn.d.ts +2 -0
  47. package/dist/src/plugins/rules/nullable.d.ts +2 -0
  48. package/dist/src/plugins/rules/numeric.d.ts +2 -0
  49. package/dist/src/plugins/rules/regex.d.ts +2 -0
  50. package/dist/src/plugins/rules/required.d.ts +2 -0
  51. package/dist/src/plugins/rules/same.d.ts +2 -0
  52. package/dist/src/plugins/rules/size.d.ts +2 -0
  53. package/dist/src/plugins/rules/startsWith.d.ts +2 -0
  54. package/dist/src/plugins/rules/string.d.ts +2 -0
  55. package/dist/src/plugins/rules/url.d.ts +2 -0
  56. package/dist/src/plugins/rules/uuid.d.ts +2 -0
  57. package/dist/src/types/fields.d.ts +1 -0
  58. package/dist/src/types/locale.d.ts +7 -0
  59. package/dist/src/types/plugin.d.ts +2 -0
  60. package/dist/src/types/rules.d.ts +7 -1
  61. package/dist/src/types/validations.d.ts +3 -2
  62. package/dist/src/utils/rule.d.ts +2 -0
  63. package/package.json +17 -2
  64. package/dist/form-wrapper.iife.js +0 -1
  65. package/dist/src/utils/validations.d.ts +0 -3
@@ -0,0 +1,3 @@
1
+ import { FormWrapperPlugin } from '../types/plugin';
2
+ declare const formValidation: FormWrapperPlugin;
3
+ export default formValidation;
@@ -0,0 +1,3 @@
1
+ import { Locale } from '../../types/locale';
2
+ declare const en: Locale;
3
+ export default en;
@@ -0,0 +1,3 @@
1
+ import { Locale } from '../../types/locale';
2
+ declare const es: Locale;
3
+ export default es;
@@ -0,0 +1,3 @@
1
+ export { default as en } from './en';
2
+ export { default as pt } from './pt';
3
+ export { default as es } from './es';
@@ -0,0 +1,3 @@
1
+ import { Locale } from '../../types/locale';
2
+ declare const pt: Locale;
3
+ export default pt;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -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;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import('../../types/rules').RuleFunction;
2
+ export default _default;
@@ -2,6 +2,7 @@ import { Validation } from './validations';
2
2
  export interface Field {
3
3
  validation?: object;
4
4
  value: any;
5
+ attribute?: string;
5
6
  }
6
7
  export interface FieldDeclaration {
7
8
  validation: Validation;
@@ -0,0 +1,7 @@
1
+ export interface LocaleMessages {
2
+ [ruleName: string]: string;
3
+ }
4
+ export interface Locale {
5
+ name: string;
6
+ messages: LocaleMessages;
7
+ }
@@ -0,0 +1,2 @@
1
+ import { Rules } from './rules';
2
+ export type FormWrapperPlugin = (FormClass: any, RuleRegistry: Rules) => void;
@@ -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]: (value: any, attributes: string[]) => Promise<any>;
8
+ [key: string]: RuleHandler;
3
9
  }
@@ -1,4 +1,5 @@
1
+ import { RuleString, RuleFunction, ValidationRule } from './rules';
1
2
  export interface Validation {
2
- rules: string[];
3
- messages: object;
3
+ rules: (RuleString | RuleFunction)[] | string;
4
+ messages: Record<ValidationRule | string, string>;
4
5
  }
@@ -0,0 +1,2 @@
1
+ import { RuleFunction } from '../types/rules';
2
+ export declare function defineRule(name: string, handler: (...args: any[]) => Promise<any>): RuleFunction;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keysdown/form-wrapper",
3
- "version": "1.0.5",
3
+ "version": "2.0.1",
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 Array.isArray(e)?e.some(e=>this.collection.hasOwnProperty(e)):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}wasChanged(e){return Array.isArray(e)?e.some(e=>this[e]!==this.originalValues[e]):this[e]!==this.originalValues[e]}filled(e){return Array.isArray(e)?e.every(e=>this[e]!==null&&this[e]!==void 0&&this[e]!==``):this[e]!==null&&this[e]!==void 0&&this[e]!==``}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})({});
@@ -1,3 +0,0 @@
1
- import { Rules } from '../types/rules';
2
- export declare const required: (value: any) => Promise<any>;
3
- export declare const Rule: Rules;