feature-form 0.1.0 → 0.1.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.
@@ -1 +1 @@
1
- "use strict";var v=require("feature-core"),n=require("feature-state"),f=require("./lib/deep-copy.js"),_=require("./lib/standard-schema.js"),y=require("./lib/validation-status.js"),g=(t,e,l)=>new Promise((o,r)=>{var i=d=>{try{s(l.next(d))}catch(c){r(c)}},a=d=>{try{s(l.throw(d))}catch(c){r(c)}},s=d=>d.done?o(d.value):Promise.resolve(d.value).then(i,a);s((l=l.apply(t,e)).next())});function m(t,e){const{key:l,validator:o,validateOn:r=["submit"],revalidateOn:i=["submit","change"],collectErrorMode:a="firstError"}=e,s=n.createState(t).with(p({key:l,validation:o==null?void 0:{validator:o,config:{validateOn:r,revalidateOn:i,collectErrorMode:a}}}));return V(s),s}function S(t){return v.hasFeature(t,"form-field")}function p(t){const{key:e,validation:l}=t;return v.defineFeature({key:"form-field",install(o){const r=l==null?{type:"valid"}:{type:"unvalidated"};return{_validation:l,_validationRunId:0,_fieldValidatorStatus:r,_formValidatorErrors:[],_callbacks:{blur:[]},key:e,defaultValue:f.deepCopy(o._v),isTouched:n.createState(!1),isSubmitted:n.createState(!1),isValidating:n.createState(!1),status:n.createState(r).with(n.isEqualFeature(y.areValidationStatusesEqual)),_applyFormValidatorErrors(i){this._formValidatorErrors=i,this.status.set(u(this))},validate(){return g(this,null,function*(){if(this._validation==null)return this._fieldValidatorStatus={type:"valid"},this.status.set(u(this)),this.status.get().type==="valid";const i=++this._validationRunId;let a={type:"valid"};this.isValidating.set(!0);try{a=yield _.validateStandardSchema(this._validation.validator,this.get(),this._validation.config.collectErrorMode)}catch(s){a={type:"invalid",errors:[{message:s instanceof Error?s.message:String(s)}]}}finally{i===this._validationRunId&&this.isValidating.set(!1)}return i!==this._validationRunId?this.status.get().type==="valid":(this._fieldValidatorStatus=a,this.status.set(u(this)),this.status.get().type==="valid")})},onBlur(i){return this._callbacks.blur.push(i),()=>{const a=this._callbacks.blur.indexOf(i);a!==-1&&this._callbacks.blur.splice(a,1)}},blur(){const i=this.isTouched.get();this._validation!=null&&(this.isSubmitted.get()?this._validation.config.revalidateOn.includes("blur"):this._validation.config.validateOn.includes("blur")||this._validation.config.validateOn.includes("touched")&&!i)&&this.validate(),this.isTouched.set(!0);for(const a of this._callbacks.blur)a({wasTouched:i})},reset(){this.set(f.deepCopy(this.defaultValue),{listenerContext:{source:h}}),this._validationRunId++,this.isTouched.set(!1),this.isSubmitted.set(!1),this.isValidating.set(!1),this._formValidatorErrors=[],this._fieldValidatorStatus=this._validation==null?{type:"valid"}:{type:"unvalidated"},this.status.set(u(this))}}}})}const h="formFieldReset";function V(t){t.listen(({source:e})=>{e!==h&&t._validation!=null&&(t.isSubmitted.get()?t._validation.config.revalidateOn.includes("change"):t._validation.config.validateOn.includes("change")||t._validation.config.validateOn.includes("touched")&&t.isTouched.get())&&t.validate()})}function u(t){const e=t._fieldValidatorStatus.type==="invalid"?[...t._fieldValidatorStatus.errors,...t._formValidatorErrors]:t._formValidatorErrors;return e.length>0?{type:"invalid",errors:e}:t._fieldValidatorStatus}exports.createFormField=m,exports.formFieldResetSourceKey=h,exports.isFormField=S;
1
+ "use strict";var v=require("feature-core"),n=require("feature-state"),f=require("./lib/deep-copy.js"),_=require("./lib/standard-schema.js"),y=require("./lib/validation-status.js"),g=(t,e,s)=>new Promise((o,r)=>{var i=d=>{try{l(s.next(d))}catch(c){r(c)}},a=d=>{try{l(s.throw(d))}catch(c){r(c)}},l=d=>d.done?o(d.value):Promise.resolve(d.value).then(i,a);l((s=s.apply(t,e)).next())});function m(t,e){const{key:s,validator:o,validateOn:r=["submit"],revalidateOn:i=["submit","change"],collectErrorMode:a="firstError"}=e,l=n.createState(t).with(p({key:s,validation:o==null?void 0:{validator:o,config:{validateOn:r,revalidateOn:i,collectErrorMode:a}}}));return V(l),l}function S(t){return v.hasFeature(t,"form-field")}function p(t){const{key:e,validation:s}=t;return v.defineFeature({key:"form-field",install(o){const r=s==null?{type:"valid"}:{type:"unvalidated"};return{_validation:s,_validationRunId:0,_fieldValidatorStatus:r,_formValidatorErrors:[],_callbacks:{blur:[]},key:e,defaultValue:f.deepCopy(o._value),isTouched:n.createState(!1),isSubmitted:n.createState(!1),isValidating:n.createState(!1),status:n.createState(r).with(n.isEqualFeature(y.areValidationStatusesEqual)),_applyFormValidatorErrors(i){this._formValidatorErrors=i,this.status.set(u(this))},validate(){return g(this,null,function*(){if(this._validation==null)return this._fieldValidatorStatus={type:"valid"},this.status.set(u(this)),this.status.get().type==="valid";const i=++this._validationRunId;let a={type:"valid"};this.isValidating.set(!0);try{a=yield _.validateStandardSchema(this._validation.validator,this.get(),this._validation.config.collectErrorMode)}catch(l){a={type:"invalid",errors:[{message:l instanceof Error?l.message:String(l)}]}}finally{i===this._validationRunId&&this.isValidating.set(!1)}return i!==this._validationRunId?this.status.get().type==="valid":(this._fieldValidatorStatus=a,this.status.set(u(this)),this.status.get().type==="valid")})},onBlur(i){return this._callbacks.blur.push(i),()=>{const a=this._callbacks.blur.indexOf(i);a!==-1&&this._callbacks.blur.splice(a,1)}},blur(){const i=this.isTouched.get();this._validation!=null&&(this.isSubmitted.get()?this._validation.config.revalidateOn.includes("blur"):this._validation.config.validateOn.includes("blur")||this._validation.config.validateOn.includes("touched")&&!i)&&this.validate(),this.isTouched.set(!0);for(const a of this._callbacks.blur)a({wasTouched:i})},reset(){this.set(f.deepCopy(this.defaultValue),{listenerContext:{source:h}}),this._validationRunId++,this.isTouched.set(!1),this.isSubmitted.set(!1),this.isValidating.set(!1),this._formValidatorErrors=[],this._fieldValidatorStatus=this._validation==null?{type:"valid"}:{type:"unvalidated"},this.status.set(u(this))}}}})}const h="formFieldReset";function V(t){t.listen(({source:e})=>{e!==h&&t._validation!=null&&(t.isSubmitted.get()?t._validation.config.revalidateOn.includes("change"):t._validation.config.validateOn.includes("change")||t._validation.config.validateOn.includes("touched")&&t.isTouched.get())&&t.validate()})}function u(t){const e=t._fieldValidatorStatus.type==="invalid"?[...t._fieldValidatorStatus.errors,...t._formValidatorErrors]:t._formValidatorErrors;return e.length>0?{type:"invalid",errors:e}:t._fieldValidatorStatus}exports.createFormField=m,exports.formFieldResetSourceKey=h,exports.isFormField=S;
@@ -1 +1 @@
1
- import{hasFeature as f,defineFeature as _}from"feature-core";import{createState as d,isEqualFeature as m}from"feature-state";import{deepCopy as v}from"./lib/deep-copy.js";import{validateStandardSchema as g}from"./lib/standard-schema.js";import{areValidationStatusesEqual as p}from"./lib/validation-status.js";var y=(t,e,s)=>new Promise((n,r)=>{var i=o=>{try{l(s.next(o))}catch(c){r(c)}},a=o=>{try{l(s.throw(o))}catch(c){r(c)}},l=o=>o.done?n(o.value):Promise.resolve(o.value).then(i,a);l((s=s.apply(t,e)).next())});function V(t,e){const{key:s,validator:n,validateOn:r=["submit"],revalidateOn:i=["submit","change"],collectErrorMode:a="firstError"}=e,l=d(t).with(S({key:s,validation:n==null?void 0:{validator:n,config:{validateOn:r,revalidateOn:i,collectErrorMode:a}}}));return E(l),l}function b(t){return f(t,"form-field")}function S(t){const{key:e,validation:s}=t;return _({key:"form-field",install(n){const r=s==null?{type:"valid"}:{type:"unvalidated"};return{_validation:s,_validationRunId:0,_fieldValidatorStatus:r,_formValidatorErrors:[],_callbacks:{blur:[]},key:e,defaultValue:v(n._v),isTouched:d(!1),isSubmitted:d(!1),isValidating:d(!1),status:d(r).with(m(p)),_applyFormValidatorErrors(i){this._formValidatorErrors=i,this.status.set(u(this))},validate(){return y(this,null,function*(){if(this._validation==null)return this._fieldValidatorStatus={type:"valid"},this.status.set(u(this)),this.status.get().type==="valid";const i=++this._validationRunId;let a={type:"valid"};this.isValidating.set(!0);try{a=yield g(this._validation.validator,this.get(),this._validation.config.collectErrorMode)}catch(l){a={type:"invalid",errors:[{message:l instanceof Error?l.message:String(l)}]}}finally{i===this._validationRunId&&this.isValidating.set(!1)}return i!==this._validationRunId?this.status.get().type==="valid":(this._fieldValidatorStatus=a,this.status.set(u(this)),this.status.get().type==="valid")})},onBlur(i){return this._callbacks.blur.push(i),()=>{const a=this._callbacks.blur.indexOf(i);a!==-1&&this._callbacks.blur.splice(a,1)}},blur(){const i=this.isTouched.get();this._validation!=null&&(this.isSubmitted.get()?this._validation.config.revalidateOn.includes("blur"):this._validation.config.validateOn.includes("blur")||this._validation.config.validateOn.includes("touched")&&!i)&&this.validate(),this.isTouched.set(!0);for(const a of this._callbacks.blur)a({wasTouched:i})},reset(){this.set(v(this.defaultValue),{listenerContext:{source:h}}),this._validationRunId++,this.isTouched.set(!1),this.isSubmitted.set(!1),this.isValidating.set(!1),this._formValidatorErrors=[],this._fieldValidatorStatus=this._validation==null?{type:"valid"}:{type:"unvalidated"},this.status.set(u(this))}}}})}const h="formFieldReset";function E(t){t.listen(({source:e})=>{e!==h&&t._validation!=null&&(t.isSubmitted.get()?t._validation.config.revalidateOn.includes("change"):t._validation.config.validateOn.includes("change")||t._validation.config.validateOn.includes("touched")&&t.isTouched.get())&&t.validate()})}function u(t){const e=t._fieldValidatorStatus.type==="invalid"?[...t._fieldValidatorStatus.errors,...t._formValidatorErrors]:t._formValidatorErrors;return e.length>0?{type:"invalid",errors:e}:t._fieldValidatorStatus}export{V as createFormField,h as formFieldResetSourceKey,b as isFormField};
1
+ import{hasFeature as f,defineFeature as _}from"feature-core";import{createState as d,isEqualFeature as m}from"feature-state";import{deepCopy as v}from"./lib/deep-copy.js";import{validateStandardSchema as g}from"./lib/standard-schema.js";import{areValidationStatusesEqual as p}from"./lib/validation-status.js";var y=(t,e,s)=>new Promise((n,r)=>{var i=o=>{try{l(s.next(o))}catch(c){r(c)}},a=o=>{try{l(s.throw(o))}catch(c){r(c)}},l=o=>o.done?n(o.value):Promise.resolve(o.value).then(i,a);l((s=s.apply(t,e)).next())});function V(t,e){const{key:s,validator:n,validateOn:r=["submit"],revalidateOn:i=["submit","change"],collectErrorMode:a="firstError"}=e,l=d(t).with(S({key:s,validation:n==null?void 0:{validator:n,config:{validateOn:r,revalidateOn:i,collectErrorMode:a}}}));return E(l),l}function b(t){return f(t,"form-field")}function S(t){const{key:e,validation:s}=t;return _({key:"form-field",install(n){const r=s==null?{type:"valid"}:{type:"unvalidated"};return{_validation:s,_validationRunId:0,_fieldValidatorStatus:r,_formValidatorErrors:[],_callbacks:{blur:[]},key:e,defaultValue:v(n._value),isTouched:d(!1),isSubmitted:d(!1),isValidating:d(!1),status:d(r).with(m(p)),_applyFormValidatorErrors(i){this._formValidatorErrors=i,this.status.set(u(this))},validate(){return y(this,null,function*(){if(this._validation==null)return this._fieldValidatorStatus={type:"valid"},this.status.set(u(this)),this.status.get().type==="valid";const i=++this._validationRunId;let a={type:"valid"};this.isValidating.set(!0);try{a=yield g(this._validation.validator,this.get(),this._validation.config.collectErrorMode)}catch(l){a={type:"invalid",errors:[{message:l instanceof Error?l.message:String(l)}]}}finally{i===this._validationRunId&&this.isValidating.set(!1)}return i!==this._validationRunId?this.status.get().type==="valid":(this._fieldValidatorStatus=a,this.status.set(u(this)),this.status.get().type==="valid")})},onBlur(i){return this._callbacks.blur.push(i),()=>{const a=this._callbacks.blur.indexOf(i);a!==-1&&this._callbacks.blur.splice(a,1)}},blur(){const i=this.isTouched.get();this._validation!=null&&(this.isSubmitted.get()?this._validation.config.revalidateOn.includes("blur"):this._validation.config.validateOn.includes("blur")||this._validation.config.validateOn.includes("touched")&&!i)&&this.validate(),this.isTouched.set(!0);for(const a of this._callbacks.blur)a({wasTouched:i})},reset(){this.set(v(this.defaultValue),{listenerContext:{source:h}}),this._validationRunId++,this.isTouched.set(!1),this.isSubmitted.set(!1),this.isValidating.set(!1),this._formValidatorErrors=[],this._fieldValidatorStatus=this._validation==null?{type:"valid"}:{type:"unvalidated"},this.status.set(u(this))}}}})}const h="formFieldReset";function E(t){t.listen(({source:e})=>{e!==h&&t._validation!=null&&(t.isSubmitted.get()?t._validation.config.revalidateOn.includes("change"):t._validation.config.validateOn.includes("change")||t._validation.config.validateOn.includes("touched")&&t.isTouched.get())&&t.validate()})}function u(t){const e=t._fieldValidatorStatus.type==="invalid"?[...t._fieldValidatorStatus.errors,...t._formValidatorErrors]:t._formValidatorErrors;return e.length>0?{type:"invalid",errors:e}:t._fieldValidatorStatus}export{V as createFormField,h as formFieldResetSourceKey,b as isFormField};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "feature-form",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "private": false,
5
5
  "description": "Framework-agnostic reactive form state with Standard Schema validation and per-field triggers",
6
6
  "keywords": [
@@ -41,11 +41,11 @@
41
41
  "dependencies": {
42
42
  "@standard-schema/spec": "^1.1.0",
43
43
  "feature-core": "0.0.2",
44
- "feature-state": "0.1.0"
44
+ "feature-state": "0.1.1"
45
45
  },
46
46
  "devDependencies": {
47
- "@blgc/config": "0.1.0",
48
- "rollup-presets": "0.0.27"
47
+ "@blgc/config": "0.1.2",
48
+ "rollup-presets": "0.0.30"
49
49
  },
50
50
  "size-limit": [
51
51
  {
@@ -58,7 +58,7 @@
58
58
  "clean": "shx rm -rf dist && shx rm -rf .turbo && shx rm -rf node_modules",
59
59
  "install:clean": "pnpm run clean && pnpm install",
60
60
  "lint": "eslint .",
61
- "publish:patch": "pnpm build:prod && pnpm version patch && pnpm publish --no-git-checks --access=public",
61
+ "publish:patch": "pnpm build:prod && pnpm version patch --no-git-tag-version && pnpm publish --no-git-checks --access=public",
62
62
  "size": "size-limit --why",
63
63
  "start:dev": "tsc -w",
64
64
  "test": "vitest run",