react-form-action 1.3.0 → 1.4.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/dist/client.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as react from 'react';
2
2
  import react__default, { PropsWithChildren, FormHTMLAttributes } from 'react';
3
- import { c as FormAction, F as FormState, b as InitialState, I as InvalidState, a as FailureState, S as SuccessState } from './createFormAction-252fadef.js';
3
+ import { b as FormAction, A as ActionState, a as InitialState, I as InvalidState, F as FailureState, S as SuccessState } from './createFormAction-4e719362.js';
4
4
  import { RenderProp } from 'react-render-prop-type';
5
5
  import { useFormStatus } from 'react-dom';
6
6
  import { ZodFormattedError } from 'zod';
@@ -15,7 +15,7 @@ declare function createForm<Data, Error = Data, ValidationError = Record<string,
15
15
  };
16
16
 
17
17
  type FormStateProps<Data, Error, ValidationError, Payload> = {
18
- action: (state: FormState<Data, Error, ValidationError>, payload: Payload) => Promise<FormState<Data, Error, ValidationError>>;
18
+ action: (state: ActionState<Data, Error, ValidationError>, payload: Payload) => Promise<ActionState<Data, Error, ValidationError>>;
19
19
  initialData: Data;
20
20
  permalink?: string;
21
21
  /**
@@ -27,13 +27,13 @@ type FormStateProps<Data, Error, ValidationError, Payload> = {
27
27
  autoReset?: boolean;
28
28
  };
29
29
  declare function initial<Data>(data: Data): InitialState<Data>;
30
- type FormStatusFlags<T extends FormState<unknown, unknown, unknown>["type"] | unknown = unknown> = {
30
+ type FormStatusFlags<T extends ActionState<unknown, unknown, unknown>["type"] | unknown = unknown> = {
31
31
  isInitial: T extends "initial" ? true : false;
32
32
  isInvalid: T extends "invalid" ? true : false;
33
33
  isFailure: T extends "failure" ? true : false;
34
34
  isSuccess: T extends "success" ? true : false;
35
35
  };
36
- type FormMetaState<T extends FormState<unknown, unknown, unknown>> = T & FormStatusFlags<T["type"]> & {
36
+ type FormMetaState<T extends ActionState<unknown, unknown, unknown>> = T & FormStatusFlags<T["type"]> & {
37
37
  isPending: boolean;
38
38
  };
39
39
  type FormProps<Data, Error, ValidationError> = Omit<FormHTMLAttributes<HTMLFormElement>, "action" | "children"> & FormStateProps<Data, Error, ValidationError, FormData> & RenderProp<FormMetaState<InitialState<Data>> | FormMetaState<InvalidState<ValidationError>> | FormMetaState<FailureState<Error>> | FormMetaState<SuccessState<Data>>>;
@@ -43,11 +43,11 @@ declare function Form<Data, Error, ValidationError>({ children, action, initialD
43
43
  * A context exposing the form action state.
44
44
  * @private You don't need to use this component directly. Use the `createForm` function instead.
45
45
  */
46
- declare const FormContext: react.Context<FormMetaState<FormState<unknown, unknown, unknown>> | null>;
46
+ declare const FormContext: react.Context<FormMetaState<ActionState<unknown, unknown, unknown>> | null>;
47
47
  /**
48
48
  * A hook to consume the form action state from the context.
49
49
  */
50
- declare const useFormContext: () => FormMetaState<FormState<unknown, unknown, unknown>>;
50
+ declare const useFormContext: () => FormMetaState<ActionState<unknown, unknown, unknown>>;
51
51
 
52
52
  declare function FormStatus({ children, }: RenderProp<ReturnType<typeof useFormStatus>>): react.ReactNode;
53
53
 
package/dist/client.mjs CHANGED
@@ -1 +1 @@
1
- "use client";import F from"react";import x,{useTransition as P}from"react";import{useActionState as D}from"react";function k(r){return{type:"initial",data:r,error:null,validationError:null}}var s={isInitial:!1,isInvalid:!1,isFailure:!1,isSuccess:!1};function d({children:r,action:e,initialData:n,permalink:t,autoReset:o=!1,...m}){let[a,l,i]=D(e,k(n),t),[,E]=P(),S=a.type==="initial"?{...a,...s,isPending:i,isInitial:!0}:a.type==="invalid"?{...a,...s,isPending:i,isInvalid:!0}:a.type==="failure"?{...a,...s,isPending:i,isFailure:!0}:{...a,...s,isPending:i,isSuccess:!0};return x.createElement("form",{...o?{action:l}:{onSubmit:u=>{u.preventDefault();let y=u.currentTarget;E(()=>{l(new FormData(y))})}},...m},r(S))}import{createContext as h,use as T}from"react";var p=h(null),c=()=>{let r=T(p);if(!r)throw new Error("Form Context must be initialized before use.");return r};function z(r){return{Form:({children:n,...t})=>F.createElement(d,{action:r,...t},o=>F.createElement(p,{value:o},n))}}import{useFormStatus as g}from"react-dom";function W({children:r}){return r(g())}function $({children:r}){let{isPending:e}=c();return e&&r}import f from"react";var v=".",w=Object.freeze({_errors:Object.freeze([])});function G({errors:r,name:e="",children:n=({errors:t})=>f.createElement(f.Fragment,null,t[0])}){if(e.length===0)return n({errors:r._errors});let t=e.split(v),o=r;for(;t.length;){let m=t.shift();o=o[m]??w}return n({errors:o._errors})}export{d as Form,p as FormContext,W as FormStatus,$ as Pending,G as ZodFieldError,z as createForm,k as initial,c as useFormContext};
1
+ "use client";import f from"react";import x,{useTransition as P}from"react";import{useActionState as D}from"react";function k(r){return{type:"initial",data:r,error:null,validationError:null}}var s={isInitial:!1,isInvalid:!1,isFailure:!1,isSuccess:!1};function c({children:r,action:e,initialData:a,permalink:t,autoReset:o=!1,...m}){let[n,l,i]=D(e,k(a),t),[,E]=P(),S=n.type==="initial"?{...n,...s,isPending:i,isInitial:!0}:n.type==="invalid"?{...n,...s,isPending:i,isInvalid:!0}:n.type==="failure"?{...n,...s,isPending:i,isFailure:!0}:{...n,...s,isPending:i,isSuccess:!0};return x.createElement("form",{...o?{action:l}:{onSubmit:u=>{u.preventDefault();let y=u.currentTarget;E(()=>{l(new FormData(y))})}},...m},r(S))}import{createContext as A,use as h}from"react";var p=A(null),d=()=>{let r=h(p);if(!r)throw new Error("Form Context must be initialized before use.");return r};function z(r){return{Form:({children:a,...t})=>f.createElement(c,{action:r,...t},o=>f.createElement(p,{value:o},a))}}import{useFormStatus as T}from"react-dom";function W({children:r}){return r(T())}function $({children:r}){let{isPending:e}=d();return e&&r}import F from"react";var g=".",v=Object.freeze({_errors:Object.freeze([])});function G({errors:r,name:e="",children:a=({errors:t})=>F.createElement(F.Fragment,null,t[0])}){if(e.length===0)return a({errors:r._errors});let t=e.split(g),o=r;for(;t.length;){let m=t.shift();o=o[m]??v}return a({errors:o._errors})}export{c as Form,p as FormContext,W as FormStatus,$ as Pending,G as ZodFieldError,z as createForm,k as initial,d as useFormContext};
@@ -22,12 +22,12 @@ type SuccessState<T> = {
22
22
  error: null;
23
23
  validationError: null;
24
24
  };
25
- type FormState<Data, Error, ValidationError = Record<string, never>> = InitialState<Data> | InvalidState<ValidationError> | FailureState<Error> | SuccessState<Data>;
26
- type FormAction<Data, Error = Data, ValidationError = Record<string, never>, Payload = FormData> = (state: FormState<Data, Error, ValidationError>, payload: Payload) => Promise<FormState<Data, Error, ValidationError>>;
25
+ type ActionState<Data, Error, ValidationError = Record<string, never>> = InitialState<Data> | InvalidState<ValidationError> | FailureState<Error> | SuccessState<Data>;
26
+ type FormAction<Data, Error = Data, ValidationError = Record<string, never>, Payload = FormData> = (state: ActionState<Data, Error, ValidationError>, payload: Payload) => Promise<ActionState<Data, Error, ValidationError>>;
27
27
  declare function createFormAction<Data, Error = Data, ValidationError = Record<string, never>, Payload = FormData>(formAction: (params: {
28
28
  success: (data: Data) => SuccessState<Data>;
29
29
  failure: (error: Error) => FailureState<Error>;
30
30
  invalid: (validationError: ValidationError) => InvalidState<ValidationError>;
31
- }) => FormAction<Data, Error, ValidationError, Payload>): (state: FormState<Data, Error, ValidationError>, payload: Payload) => Promise<FormState<Data, Error, ValidationError>>;
31
+ }) => FormAction<Data, Error, ValidationError, Payload>): (state: ActionState<Data, Error, ValidationError>, payload: Payload) => Promise<ActionState<Data, Error, ValidationError>>;
32
32
 
33
- export { FormState as F, InvalidState as I, SuccessState as S, FailureState as a, InitialState as b, FormAction as c, createFormAction as d };
33
+ export { ActionState as A, FailureState as F, InvalidState as I, SuccessState as S, InitialState as a, FormAction as b, createFormAction as c };
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { F as FormState, I as InvalidState, a as FailureState, S as SuccessState } from './createFormAction-252fadef.js';
2
- export { c as FormAction, b as InitialState, d as createFormAction } from './createFormAction-252fadef.js';
1
+ import { A as ActionState, I as InvalidState, F as FailureState, S as SuccessState } from './createFormAction-4e719362.js';
2
+ export { b as FormAction, a as InitialState, c as createFormAction } from './createFormAction-4e719362.js';
3
3
  import { ZodTypeAny, ZodType, ZodObject, ZodRawShape, objectUtil, z, ZodSchema, ZodEffects } from 'zod';
4
4
 
5
5
  declare const emptyInput: unique symbol;
@@ -30,7 +30,7 @@ type FormActionBuilder<Schema extends ZodTypeAny | EmptyInput, Err = Error, Cont
30
30
  * @param action async function to execute. It will receive parsed formData as input, when the builder was initialized with a schema.
31
31
  * @returns runnable server action exportable from a module.
32
32
  */
33
- run: Schema extends ZodTypeAny ? <Data>(action: SchemaAction<Data, Context, Schema>) => (state: FormState<Data, Err, z.inferFormattedError<Schema>>, payload: FormData) => Promise<Flatten<InvalidState<z.inferFormattedError<Schema>> | FailureState<Err> | SuccessState<Data>>> : <Data>(action: Action<Data, Context>) => (state: FormState<Data, Err>, payload: FormData) => Promise<Flatten<FailureState<Err> | SuccessState<Data>>>;
33
+ run: Schema extends ZodTypeAny ? <Data>(action: SchemaAction<Data, Context, Schema>) => (state: ActionState<Data, Err, z.inferFormattedError<Schema>>, payload: FormData) => Promise<Flatten<InvalidState<z.inferFormattedError<Schema>> | FailureState<Err> | SuccessState<Data>>> : <Data>(action: Action<Data, Context>) => (state: ActionState<Data, Err>, payload: FormData) => Promise<Flatten<FailureState<Err> | SuccessState<Data>>>;
34
34
  /**
35
35
  * A chainable context enhancing helper.
36
36
  * @param middleware A function which receives the current context, and returns an object which will be added to the context.
@@ -52,4 +52,4 @@ type FormActionBuilder<Schema extends ZodTypeAny | EmptyInput, Err = Error, Cont
52
52
  };
53
53
  declare const formAction: FormActionBuilder<typeof emptyInput, Error, InitialContext>;
54
54
 
55
- export { FailureState, FormState, InvalidState, SuccessState, formAction };
55
+ export { ActionState, FailureState, InvalidState, SuccessState, formAction };
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- function y(e){function o(n){return{type:"success",data:n,error:null,validationError:null}}function a(n){return{type:"failure",data:null,error:n,validationError:null}}function s(n){return{type:"invalid",data:null,error:null,validationError:n}}return(n,S)=>e({success:o,failure:a,invalid:s})(n,S)}import{ZodFirstPartyTypeKind as C}from"zod";import{zfd as w}from"zod-form-data";var l=Symbol();function d(e,o=[],a){async function s(t){let r={formData:t};for(let i of o){let u=await i({ctx:r});r={...r,...u}}return r}return{input(t){if(e===l)return d(t,o,a);if(e._def.effect)throw new Error("Previous input is not augmentable because it contains an effect.");if(t._def.effect)throw new Error("Your input contains effect which prevents merging it with the previous inputs.");if(e._def.typeName===C.ZodObject){let r=e.merge(t);return d(r,o)}else throw Error("Merging inputs works only for object schemas without effects.")},use(t){return d(e,[...o,t],a)},error(t){return d(e,o,t)},run:e===l?t=>y(({success:r,failure:i})=>async(u,m)=>{let x=await s(m);try{return r(await t({ctx:x}))}catch(c){if(a)return i(a({error:c,ctx:x}));throw c}}):e===l?void 0:t=>y(({success:r,failure:i,invalid:u})=>{let m=w.formData(e);return async(x,c)=>{let f=await s(c),p=m.safeParse(c);if(!p.success)return u(p.error.format());let h=p.data;try{return r(await t({input:h,ctx:f}))}catch(E){if(a)return i(a({error:E,ctx:f}));throw E}}})}}var P=d(l);export{y as createFormAction,P as formAction};
1
+ function y(e){function o(n){return{type:"success",data:n,error:null,validationError:null}}function a(n){return{type:"failure",data:null,error:n,validationError:null}}function s(n){return{type:"invalid",data:null,error:null,validationError:n}}return(n,S)=>e({success:o,failure:a,invalid:s})(n,S)}import{ZodFirstPartyTypeKind as C}from"zod";import{zfd as w}from"zod-form-data";var l=Symbol();function d(e,o=[],a){async function s(t){let r={formData:t};for(let i of o){let u=await i({ctx:r});r={...r,...u}}return r}return{input(t){if(e===l)return d(t,o,a);if(e._def.effect)throw new Error("Previous input is not augmentable because it contains an effect.");if(t._def.effect)throw new Error("Your input contains effect which prevents merging it with the previous inputs.");if(e._def.typeName===C.ZodObject){let r=e.merge(t);return d(r,o)}else throw Error("Merging inputs works only for object schemas without effects.")},use(t){return d(e,[...o,t],a)},error(t){return d(e,o,t)},run:e===l?t=>y(({success:r,failure:i})=>async(u,x)=>{let m=await s(x);try{return r(await t({ctx:m}))}catch(c){if(a)return i(a({error:c,ctx:m}));throw c}}):e===l?void 0:t=>y(({success:r,failure:i,invalid:u})=>{let x=w.formData(e);return async(m,c)=>{let f=await s(c),p=x.safeParse(c);if(!p.success)return u(p.error.format());let h=p.data;try{return r(await t({input:h,ctx:f}))}catch(E){if(a)return i(a({error:E,ctx:f}));throw E}}})}}var P=d(l);export{y as createFormAction,P as formAction};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-form-action",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "State management helpers for the react form actions.",
5
5
  "repository": {
6
6
  "type": "git",