@tanstack/react-form 0.42.0 → 0.43.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.
Files changed (71) hide show
  1. package/dist/cjs/nextjs/createServerValidate.cjs +18 -10
  2. package/dist/cjs/nextjs/createServerValidate.cjs.map +1 -1
  3. package/dist/cjs/nextjs/createServerValidate.d.cts +5 -9
  4. package/dist/cjs/nextjs/error.cjs.map +1 -1
  5. package/dist/cjs/nextjs/error.d.cts +6 -5
  6. package/dist/cjs/nextjs/types.d.cts +2 -2
  7. package/dist/cjs/remix/createServerValidate.cjs +18 -10
  8. package/dist/cjs/remix/createServerValidate.cjs.map +1 -1
  9. package/dist/cjs/remix/createServerValidate.d.cts +5 -9
  10. package/dist/cjs/remix/error.cjs.map +1 -1
  11. package/dist/cjs/remix/error.d.cts +6 -5
  12. package/dist/cjs/remix/types.d.cts +2 -2
  13. package/dist/cjs/start/createServerValidate.cjs +21 -12
  14. package/dist/cjs/start/createServerValidate.cjs.map +1 -1
  15. package/dist/cjs/start/createServerValidate.d.cts +4 -10
  16. package/dist/cjs/start/error.cjs.map +1 -1
  17. package/dist/cjs/start/error.d.cts +6 -5
  18. package/dist/cjs/start/getFormData.cjs +4 -5
  19. package/dist/cjs/start/getFormData.cjs.map +1 -1
  20. package/dist/cjs/start/getFormData.d.cts +2 -3
  21. package/dist/cjs/start/types.d.cts +2 -2
  22. package/dist/cjs/types.d.cts +2 -2
  23. package/dist/cjs/useField.cjs.map +1 -1
  24. package/dist/cjs/useField.d.cts +10 -10
  25. package/dist/cjs/useForm.cjs.map +1 -1
  26. package/dist/cjs/useForm.d.cts +7 -7
  27. package/dist/cjs/useTransform.cjs.map +1 -1
  28. package/dist/cjs/useTransform.d.cts +2 -2
  29. package/dist/esm/nextjs/createServerValidate.d.ts +5 -9
  30. package/dist/esm/nextjs/createServerValidate.js +18 -10
  31. package/dist/esm/nextjs/createServerValidate.js.map +1 -1
  32. package/dist/esm/nextjs/error.d.ts +6 -5
  33. package/dist/esm/nextjs/error.js.map +1 -1
  34. package/dist/esm/nextjs/types.d.ts +2 -2
  35. package/dist/esm/remix/createServerValidate.d.ts +5 -9
  36. package/dist/esm/remix/createServerValidate.js +18 -10
  37. package/dist/esm/remix/createServerValidate.js.map +1 -1
  38. package/dist/esm/remix/error.d.ts +6 -5
  39. package/dist/esm/remix/error.js.map +1 -1
  40. package/dist/esm/remix/types.d.ts +2 -2
  41. package/dist/esm/start/createServerValidate.d.ts +4 -10
  42. package/dist/esm/start/createServerValidate.js +21 -12
  43. package/dist/esm/start/createServerValidate.js.map +1 -1
  44. package/dist/esm/start/error.d.ts +6 -5
  45. package/dist/esm/start/error.js.map +1 -1
  46. package/dist/esm/start/getFormData.d.ts +2 -3
  47. package/dist/esm/start/getFormData.js +4 -5
  48. package/dist/esm/start/getFormData.js.map +1 -1
  49. package/dist/esm/start/types.d.ts +2 -2
  50. package/dist/esm/types.d.ts +2 -2
  51. package/dist/esm/useField.d.ts +10 -10
  52. package/dist/esm/useField.js.map +1 -1
  53. package/dist/esm/useForm.d.ts +7 -7
  54. package/dist/esm/useForm.js.map +1 -1
  55. package/dist/esm/useTransform.d.ts +2 -2
  56. package/dist/esm/useTransform.js.map +1 -1
  57. package/package.json +17 -12
  58. package/src/nextjs/createServerValidate.ts +71 -43
  59. package/src/nextjs/error.ts +13 -6
  60. package/src/nextjs/types.ts +16 -3
  61. package/src/remix/createServerValidate.ts +71 -43
  62. package/src/remix/error.ts +13 -6
  63. package/src/remix/types.ts +16 -3
  64. package/src/start/createServerValidate.tsx +73 -47
  65. package/src/start/error.ts +13 -6
  66. package/src/start/getFormData.tsx +6 -6
  67. package/src/start/types.ts +16 -3
  68. package/src/types.ts +42 -12
  69. package/src/useField.tsx +295 -58
  70. package/src/useForm.tsx +132 -14
  71. package/src/useTransform.ts +38 -4
@@ -1,17 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const decodeFormdata = require("decode-formdata");
4
+ const formCore = require("@tanstack/form-core");
4
5
  const error = require("./error.cjs");
5
- const isFormValidationError = (error2) => {
6
- return typeof error2 === "object";
7
- };
8
6
  const createServerValidate = (defaultOpts) => async (formData, info) => {
9
- const { validatorAdapter, onServerValidate } = defaultOpts;
10
- const runValidator = async (propsValue) => {
11
- if (validatorAdapter && typeof onServerValidate !== "function") {
12
- return validatorAdapter().validateAsync(propsValue, onServerValidate);
7
+ const { onServerValidate } = defaultOpts;
8
+ const runValidator = async ({
9
+ value,
10
+ validationSource
11
+ }) => {
12
+ if (formCore.isStandardSchemaValidator(onServerValidate)) {
13
+ return await formCore.standardSchemaValidators.validateAsync(
14
+ { value, validationSource },
15
+ onServerValidate
16
+ );
13
17
  }
14
- return onServerValidate(propsValue);
18
+ return onServerValidate({
19
+ value,
20
+ signal: void 0,
21
+ formApi: void 0
22
+ });
15
23
  };
16
24
  const values = decodeFormdata.decode(formData, info);
17
25
  const onServerError = await runValidator({
@@ -19,13 +27,13 @@ const createServerValidate = (defaultOpts) => async (formData, info) => {
19
27
  validationSource: "form"
20
28
  });
21
29
  if (!onServerError) return;
22
- const onServerErrorStr = onServerError && typeof onServerError !== "string" && isFormValidationError(onServerError) ? onServerError.form : onServerError;
30
+ const onServerErrorVal = formCore.isGlobalFormValidationError(onServerError) ? onServerError.form : onServerError;
23
31
  const formState = {
24
32
  errorMap: {
25
33
  onServer: onServerError
26
34
  },
27
35
  values,
28
- errors: onServerErrorStr ? [onServerErrorStr] : []
36
+ errors: onServerErrorVal ? [onServerErrorVal] : []
29
37
  };
30
38
  throw new error.ServerValidateError({
31
39
  formState
@@ -1 +1 @@
1
- {"version":3,"file":"createServerValidate.cjs","sources":["../../../src/nextjs/createServerValidate.ts"],"sourcesContent":["import { decode } from 'decode-formdata'\nimport { ServerValidateError } from './error'\nimport type {\n FormOptions,\n FormValidationError,\n ValidationError,\n Validator,\n} from '@tanstack/form-core'\nimport type { ServerFormState } from './types'\n\ntype OnServerValidateFn<TFormData> = (props: {\n value: TFormData\n}) => ValidationError | Promise<ValidationError>\n\ntype OnServerValidateOrFn<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> =\n TFormValidator extends Validator<TFormData, infer FFN>\n ? FFN | OnServerValidateFn<TFormData>\n : OnServerValidateFn<TFormData>\n\ninterface CreateServerValidateOptions<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> extends FormOptions<TFormData, TFormValidator> {\n onServerValidate: OnServerValidateOrFn<TFormData, TFormValidator>\n}\n\nconst isFormValidationError = (\n error: unknown,\n): error is FormValidationError<unknown> => {\n return typeof error === 'object'\n}\n\nexport const createServerValidate =\n <\n TFormData,\n TFormValidator extends\n | Validator<TFormData, unknown>\n | undefined = undefined,\n >(\n defaultOpts: CreateServerValidateOptions<TFormData, TFormValidator>,\n ) =>\n async (formData: FormData, info?: Parameters<typeof decode>[1]) => {\n const { validatorAdapter, onServerValidate } = defaultOpts\n\n const runValidator = async (propsValue: {\n value: TFormData\n validationSource: 'form'\n }) => {\n if (validatorAdapter && typeof onServerValidate !== 'function') {\n return validatorAdapter().validateAsync(propsValue, onServerValidate)\n }\n\n return (onServerValidate as OnServerValidateFn<TFormData>)(propsValue)\n }\n\n const values = decode(formData, info) as never as TFormData\n\n const onServerError = await runValidator({\n value: values,\n validationSource: 'form',\n })\n\n if (!onServerError) return\n\n const onServerErrorStr =\n onServerError &&\n typeof onServerError !== 'string' &&\n isFormValidationError(onServerError)\n ? onServerError.form\n : onServerError\n\n const formState: ServerFormState<TFormData> = {\n errorMap: {\n onServer: onServerError,\n },\n values,\n errors: onServerErrorStr ? [onServerErrorStr] : [],\n }\n\n throw new ServerValidateError({\n formState,\n })\n }\n\nexport const initialFormState: ServerFormState<any> = {\n errorMap: {\n onServer: undefined,\n },\n values: undefined,\n errors: [],\n}\n"],"names":["error","decode","ServerValidateError"],"mappings":";;;;AA6BA,MAAM,wBAAwB,CAC5BA,WAC0C;AAC1C,SAAO,OAAOA,WAAU;AAC1B;AAEO,MAAM,uBACX,CAME,gBAEF,OAAO,UAAoB,SAAwC;AAC3D,QAAA,EAAE,kBAAkB,iBAAA,IAAqB;AAEzC,QAAA,eAAe,OAAO,eAGtB;AACA,QAAA,oBAAoB,OAAO,qBAAqB,YAAY;AAC9D,aAAO,iBAAiB,EAAE,cAAc,YAAY,gBAAgB;AAAA,IAAA;AAGtE,WAAQ,iBAAmD,UAAU;AAAA,EACvE;AAEM,QAAA,SAASC,eAAAA,OAAO,UAAU,IAAI;AAE9B,QAAA,gBAAgB,MAAM,aAAa;AAAA,IACvC,OAAO;AAAA,IACP,kBAAkB;AAAA,EAAA,CACnB;AAED,MAAI,CAAC,cAAe;AAEd,QAAA,mBACJ,iBACA,OAAO,kBAAkB,YACzB,sBAAsB,aAAa,IAC/B,cAAc,OACd;AAEN,QAAM,YAAwC;AAAA,IAC5C,UAAU;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,IACA,QAAQ,mBAAmB,CAAC,gBAAgB,IAAI,CAAA;AAAA,EAClD;AAEA,QAAM,IAAIC,MAAAA,oBAAoB;AAAA,IAC5B;AAAA,EAAA,CACD;AACH;AAEK,MAAM,mBAAyC;AAAA,EACpD,UAAU;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,EACR,QAAQ,CAAA;AACV;;;"}
1
+ {"version":3,"file":"createServerValidate.cjs","sources":["../../../src/nextjs/createServerValidate.ts"],"sourcesContent":["import { decode } from 'decode-formdata'\nimport {\n isGlobalFormValidationError,\n isStandardSchemaValidator,\n standardSchemaValidators,\n} from '@tanstack/form-core'\nimport { ServerValidateError } from './error'\nimport type {\n FormAsyncValidateOrFn,\n FormOptions,\n FormValidateAsyncFn,\n FormValidateOrFn,\n UnwrapFormAsyncValidateOrFn,\n} from '@tanstack/form-core'\nimport type { ServerFormState } from './types'\n\ninterface CreateServerValidateOptions<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n> extends FormOptions<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnServer\n > {\n onServerValidate: TOnServer\n}\n\nexport const createServerValidate =\n <\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n >(\n defaultOpts: CreateServerValidateOptions<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnServer\n >,\n ) =>\n async (formData: FormData, info?: Parameters<typeof decode>[1]) => {\n const { onServerValidate } = defaultOpts\n\n const runValidator = async ({\n value,\n validationSource,\n }: {\n value: TFormData\n validationSource: 'form'\n }) => {\n if (isStandardSchemaValidator(onServerValidate)) {\n return await standardSchemaValidators.validateAsync(\n { value, validationSource },\n onServerValidate,\n )\n }\n return (onServerValidate as FormValidateAsyncFn<TFormData>)({\n value,\n signal: undefined as never,\n formApi: undefined as never,\n })\n }\n\n const values = decode(formData, info) as never as TFormData\n\n const onServerError = (await runValidator({\n value: values,\n validationSource: 'form',\n })) as UnwrapFormAsyncValidateOrFn<TOnServer> | undefined\n\n if (!onServerError) return\n\n const onServerErrorVal = (\n isGlobalFormValidationError(onServerError)\n ? onServerError.form\n : onServerError\n ) as UnwrapFormAsyncValidateOrFn<TOnServer>\n\n const formState: ServerFormState<TFormData, TOnServer> = {\n errorMap: {\n onServer: onServerError,\n },\n values,\n errors: onServerErrorVal ? [onServerErrorVal] : [],\n }\n\n throw new ServerValidateError({\n formState,\n })\n }\n\nexport const initialFormState: ServerFormState<any, undefined> = {\n errorMap: {\n onServer: undefined,\n },\n values: undefined,\n errors: [],\n}\n"],"names":["isStandardSchemaValidator","standardSchemaValidators","decode","isGlobalFormValidationError","ServerValidateError"],"mappings":";;;;;AAwCO,MAAM,uBACX,CAWE,gBAYF,OAAO,UAAoB,SAAwC;AAC3D,QAAA,EAAE,qBAAqB;AAE7B,QAAM,eAAe,OAAO;AAAA,IAC1B;AAAA,IACA;AAAA,EAAA,MAII;AACA,QAAAA,SAAAA,0BAA0B,gBAAgB,GAAG;AAC/C,aAAO,MAAMC,SAAyB,yBAAA;AAAA,QACpC,EAAE,OAAO,iBAAiB;AAAA,QAC1B;AAAA,MACF;AAAA,IAAA;AAEF,WAAQ,iBAAoD;AAAA,MAC1D;AAAA,MACA,QAAQ;AAAA,MACR,SAAS;AAAA,IAAA,CACV;AAAA,EACH;AAEM,QAAA,SAASC,eAAAA,OAAO,UAAU,IAAI;AAE9B,QAAA,gBAAiB,MAAM,aAAa;AAAA,IACxC,OAAO;AAAA,IACP,kBAAkB;AAAA,EAAA,CACnB;AAED,MAAI,CAAC,cAAe;AAEpB,QAAM,mBACJC,SAAAA,4BAA4B,aAAa,IACrC,cAAc,OACd;AAGN,QAAM,YAAmD;AAAA,IACvD,UAAU;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,IACA,QAAQ,mBAAmB,CAAC,gBAAgB,IAAI,CAAA;AAAA,EAClD;AAEA,QAAM,IAAIC,MAAAA,oBAAoB;AAAA,IAC5B;AAAA,EAAA,CACD;AACH;AAEK,MAAM,mBAAoD;AAAA,EAC/D,UAAU;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,EACR,QAAQ,CAAA;AACV;;;"}
@@ -1,13 +1,9 @@
1
1
  import { decode } from 'decode-formdata';
2
- import { FormOptions, ValidationError, Validator } from '@tanstack/form-core';
2
+ import { FormAsyncValidateOrFn, FormOptions, FormValidateOrFn } from '@tanstack/form-core';
3
3
  import { ServerFormState } from './types.cjs';
4
- type OnServerValidateFn<TFormData> = (props: {
5
- value: TFormData;
6
- }) => ValidationError | Promise<ValidationError>;
7
- type OnServerValidateOrFn<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined> = TFormValidator extends Validator<TFormData, infer FFN> ? FFN | OnServerValidateFn<TFormData> : OnServerValidateFn<TFormData>;
8
- interface CreateServerValidateOptions<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined> extends FormOptions<TFormData, TFormValidator> {
9
- onServerValidate: OnServerValidateOrFn<TFormData, TFormValidator>;
4
+ interface CreateServerValidateOptions<TFormData, TOnMount extends undefined | FormValidateOrFn<TFormData>, TOnChange extends undefined | FormValidateOrFn<TFormData>, TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnBlur extends undefined | FormValidateOrFn<TFormData>, TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnSubmit extends undefined | FormValidateOrFn<TFormData>, TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>> extends FormOptions<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer> {
5
+ onServerValidate: TOnServer;
10
6
  }
11
- export declare const createServerValidate: <TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined>(defaultOpts: CreateServerValidateOptions<TFormData, TFormValidator>) => (formData: FormData, info?: Parameters<typeof decode>[1]) => Promise<void>;
12
- export declare const initialFormState: ServerFormState<any>;
7
+ export declare const createServerValidate: <TFormData, TOnMount extends undefined | FormValidateOrFn<TFormData>, TOnChange extends undefined | FormValidateOrFn<TFormData>, TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnBlur extends undefined | FormValidateOrFn<TFormData>, TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnSubmit extends undefined | FormValidateOrFn<TFormData>, TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>>(defaultOpts: CreateServerValidateOptions<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer>) => (formData: FormData, info?: Parameters<typeof decode>[1]) => Promise<void>;
8
+ export declare const initialFormState: ServerFormState<any, undefined>;
13
9
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"error.cjs","sources":["../../../src/nextjs/error.ts"],"sourcesContent":["import type { ServerFormState } from './types'\n\ninterface ServerValidateErrorState<TFormData> {\n formState: ServerFormState<TFormData>\n}\n\nexport class ServerValidateError<TFormData>\n extends Error\n implements ServerValidateErrorState<TFormData>\n{\n formState: ServerFormState<TFormData>\n\n constructor(options: ServerValidateErrorState<TFormData>) {\n super('Your form has errors. Please check the fields and try again.')\n this.name = 'ServerValidateError'\n this.formState = options.formState\n }\n}\n"],"names":[],"mappings":";;AAMO,MAAM,4BACH,MAEV;AAAA,EAGE,YAAY,SAA8C;AACxD,UAAM,8DAA8D;AACpE,SAAK,OAAO;AACZ,SAAK,YAAY,QAAQ;AAAA,EAAA;AAE7B;;"}
1
+ {"version":3,"file":"error.cjs","sources":["../../../src/nextjs/error.ts"],"sourcesContent":["import type { ServerFormState } from './types'\nimport type { FormAsyncValidateOrFn } from '@tanstack/form-core'\n\ninterface ServerValidateErrorState<\n TFormData,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n> {\n formState: ServerFormState<TFormData, TOnServer>\n}\n\nexport class ServerValidateError<\n TFormData,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n >\n extends Error\n implements ServerValidateErrorState<TFormData, TOnServer>\n{\n formState: ServerFormState<TFormData, TOnServer>\n\n constructor(options: ServerValidateErrorState<TFormData, TOnServer>) {\n super('Your form has errors. Please check the fields and try again.')\n this.name = 'ServerValidateError'\n this.formState = options.formState\n }\n}\n"],"names":[],"mappings":";;AAUO,MAAM,4BAIH,MAEV;AAAA,EAGE,YAAY,SAAyD;AACnE,UAAM,8DAA8D;AACpE,SAAK,OAAO;AACZ,SAAK,YAAY,QAAQ;AAAA,EAAA;AAE7B;;"}
@@ -1,9 +1,10 @@
1
1
  import { ServerFormState } from './types.cjs';
2
- interface ServerValidateErrorState<TFormData> {
3
- formState: ServerFormState<TFormData>;
2
+ import { FormAsyncValidateOrFn } from '@tanstack/form-core';
3
+ interface ServerValidateErrorState<TFormData, TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>> {
4
+ formState: ServerFormState<TFormData, TOnServer>;
4
5
  }
5
- export declare class ServerValidateError<TFormData> extends Error implements ServerValidateErrorState<TFormData> {
6
- formState: ServerFormState<TFormData>;
7
- constructor(options: ServerValidateErrorState<TFormData>);
6
+ export declare class ServerValidateError<TFormData, TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>> extends Error implements ServerValidateErrorState<TFormData, TOnServer> {
7
+ formState: ServerFormState<TFormData, TOnServer>;
8
+ constructor(options: ServerValidateErrorState<TFormData, TOnServer>);
8
9
  }
9
10
  export {};
@@ -1,2 +1,2 @@
1
- import { FormState } from '@tanstack/form-core';
2
- export type ServerFormState<TFormData> = Pick<FormState<TFormData>, 'values' | 'errors' | 'errorMap'>;
1
+ import { FormAsyncValidateOrFn, FormState } from '@tanstack/form-core';
2
+ export type ServerFormState<TFormData, TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>> = Pick<FormState<TFormData, undefined, undefined, undefined, undefined, undefined, undefined, undefined, TOnServer>, 'values' | 'errors' | 'errorMap'>;
@@ -1,17 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const decodeFormdata = require("decode-formdata");
4
+ const formCore = require("@tanstack/form-core");
4
5
  const error = require("./error.cjs");
5
- const isFormValidationError = (error2) => {
6
- return typeof error2 === "object";
7
- };
8
6
  const createServerValidate = (defaultOpts) => async (formData, info) => {
9
- const { validatorAdapter, onServerValidate } = defaultOpts;
10
- const runValidator = async (propsValue) => {
11
- if (validatorAdapter && typeof onServerValidate !== "function") {
12
- return validatorAdapter().validateAsync(propsValue, onServerValidate);
7
+ const { onServerValidate } = defaultOpts;
8
+ const runValidator = async ({
9
+ value,
10
+ validationSource
11
+ }) => {
12
+ if (formCore.isStandardSchemaValidator(onServerValidate)) {
13
+ return await formCore.standardSchemaValidators.validateAsync(
14
+ { value, validationSource },
15
+ onServerValidate
16
+ );
13
17
  }
14
- return onServerValidate(propsValue);
18
+ return onServerValidate({
19
+ value,
20
+ signal: void 0,
21
+ formApi: void 0
22
+ });
15
23
  };
16
24
  const values = decodeFormdata.decode(formData, info);
17
25
  const onServerError = await runValidator({
@@ -19,13 +27,13 @@ const createServerValidate = (defaultOpts) => async (formData, info) => {
19
27
  validationSource: "form"
20
28
  });
21
29
  if (!onServerError) return;
22
- const onServerErrorStr = onServerError && typeof onServerError !== "string" && isFormValidationError(onServerError) ? onServerError.form : onServerError;
30
+ const onServerErrorVal = formCore.isGlobalFormValidationError(onServerError) ? onServerError.form : onServerError;
23
31
  const formState = {
24
32
  errorMap: {
25
33
  onServer: onServerError
26
34
  },
27
35
  values,
28
- errors: onServerErrorStr ? [onServerErrorStr] : []
36
+ errors: onServerErrorVal ? [onServerErrorVal] : []
29
37
  };
30
38
  throw new error.ServerValidateError({
31
39
  formState
@@ -1 +1 @@
1
- {"version":3,"file":"createServerValidate.cjs","sources":["../../../src/remix/createServerValidate.ts"],"sourcesContent":["import { decode } from 'decode-formdata'\nimport { ServerValidateError } from './error'\nimport type {\n FormOptions,\n FormValidationError,\n ValidationError,\n Validator,\n} from '@tanstack/form-core'\nimport type { ServerFormState } from './types'\n\ntype OnServerValidateFn<TFormData> = (props: {\n value: TFormData\n}) => ValidationError | Promise<ValidationError>\n\ntype OnServerValidateOrFn<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> =\n TFormValidator extends Validator<TFormData, infer FFN>\n ? FFN | OnServerValidateFn<TFormData>\n : OnServerValidateFn<TFormData>\n\ninterface CreateServerValidateOptions<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> extends FormOptions<TFormData, TFormValidator> {\n onServerValidate: OnServerValidateOrFn<TFormData, TFormValidator>\n}\n\nconst isFormValidationError = (\n error: unknown,\n): error is FormValidationError<unknown> => {\n return typeof error === 'object'\n}\n\nexport const createServerValidate =\n <\n TFormData,\n TFormValidator extends\n | Validator<TFormData, unknown>\n | undefined = undefined,\n >(\n defaultOpts: CreateServerValidateOptions<TFormData, TFormValidator>,\n ) =>\n async (formData: FormData, info?: Parameters<typeof decode>[1]) => {\n const { validatorAdapter, onServerValidate } = defaultOpts\n\n const runValidator = async (propsValue: {\n value: TFormData\n validationSource: 'form'\n }) => {\n if (validatorAdapter && typeof onServerValidate !== 'function') {\n return validatorAdapter().validateAsync(propsValue, onServerValidate)\n }\n\n return (onServerValidate as OnServerValidateFn<TFormData>)(propsValue)\n }\n\n const values = decode(formData, info) as never as TFormData\n\n const onServerError = await runValidator({\n value: values,\n validationSource: 'form',\n })\n\n if (!onServerError) return\n\n const onServerErrorStr =\n onServerError &&\n typeof onServerError !== 'string' &&\n isFormValidationError(onServerError)\n ? onServerError.form\n : onServerError\n\n const formState: ServerFormState<TFormData> = {\n errorMap: {\n onServer: onServerError,\n },\n values,\n errors: onServerErrorStr ? [onServerErrorStr] : [],\n }\n\n throw new ServerValidateError({\n formState,\n })\n }\n\nexport const initialFormState: ServerFormState<any> = {\n errorMap: {\n onServer: undefined,\n },\n values: undefined,\n errors: [],\n}\n"],"names":["error","decode","ServerValidateError"],"mappings":";;;;AA6BA,MAAM,wBAAwB,CAC5BA,WAC0C;AAC1C,SAAO,OAAOA,WAAU;AAC1B;AAEO,MAAM,uBACX,CAME,gBAEF,OAAO,UAAoB,SAAwC;AAC3D,QAAA,EAAE,kBAAkB,iBAAA,IAAqB;AAEzC,QAAA,eAAe,OAAO,eAGtB;AACA,QAAA,oBAAoB,OAAO,qBAAqB,YAAY;AAC9D,aAAO,iBAAiB,EAAE,cAAc,YAAY,gBAAgB;AAAA,IAAA;AAGtE,WAAQ,iBAAmD,UAAU;AAAA,EACvE;AAEM,QAAA,SAASC,eAAAA,OAAO,UAAU,IAAI;AAE9B,QAAA,gBAAgB,MAAM,aAAa;AAAA,IACvC,OAAO;AAAA,IACP,kBAAkB;AAAA,EAAA,CACnB;AAED,MAAI,CAAC,cAAe;AAEd,QAAA,mBACJ,iBACA,OAAO,kBAAkB,YACzB,sBAAsB,aAAa,IAC/B,cAAc,OACd;AAEN,QAAM,YAAwC;AAAA,IAC5C,UAAU;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,IACA,QAAQ,mBAAmB,CAAC,gBAAgB,IAAI,CAAA;AAAA,EAClD;AAEA,QAAM,IAAIC,MAAAA,oBAAoB;AAAA,IAC5B;AAAA,EAAA,CACD;AACH;AAEK,MAAM,mBAAyC;AAAA,EACpD,UAAU;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,EACR,QAAQ,CAAA;AACV;;;"}
1
+ {"version":3,"file":"createServerValidate.cjs","sources":["../../../src/remix/createServerValidate.ts"],"sourcesContent":["import { decode } from 'decode-formdata'\nimport {\n isGlobalFormValidationError,\n isStandardSchemaValidator,\n standardSchemaValidators,\n} from '@tanstack/form-core'\nimport { ServerValidateError } from './error'\nimport type {\n FormAsyncValidateOrFn,\n FormOptions,\n FormValidateAsyncFn,\n FormValidateOrFn,\n UnwrapFormAsyncValidateOrFn,\n} from '@tanstack/form-core'\nimport type { ServerFormState } from './types'\n\ninterface CreateServerValidateOptions<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n> extends FormOptions<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnServer\n > {\n onServerValidate: TOnServer\n}\n\nexport const createServerValidate =\n <\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n >(\n defaultOpts: CreateServerValidateOptions<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnServer\n >,\n ) =>\n async (formData: FormData, info?: Parameters<typeof decode>[1]) => {\n const { onServerValidate } = defaultOpts\n\n const runValidator = async ({\n value,\n validationSource,\n }: {\n value: TFormData\n validationSource: 'form'\n }) => {\n if (isStandardSchemaValidator(onServerValidate)) {\n return await standardSchemaValidators.validateAsync(\n { value, validationSource },\n onServerValidate,\n )\n }\n return (onServerValidate as FormValidateAsyncFn<TFormData>)({\n value,\n signal: undefined as never,\n formApi: undefined as never,\n })\n }\n\n const values = decode(formData, info) as never as TFormData\n\n const onServerError = (await runValidator({\n value: values,\n validationSource: 'form',\n })) as UnwrapFormAsyncValidateOrFn<TOnServer> | undefined\n\n if (!onServerError) return\n\n const onServerErrorVal = (\n isGlobalFormValidationError(onServerError)\n ? onServerError.form\n : onServerError\n ) as UnwrapFormAsyncValidateOrFn<TOnServer>\n\n const formState: ServerFormState<TFormData, TOnServer> = {\n errorMap: {\n onServer: onServerError,\n },\n values,\n errors: onServerErrorVal ? [onServerErrorVal] : [],\n }\n\n throw new ServerValidateError({\n formState,\n })\n }\n\nexport const initialFormState: ServerFormState<any, undefined> = {\n errorMap: {\n onServer: undefined,\n },\n values: undefined,\n errors: [],\n}\n"],"names":["isStandardSchemaValidator","standardSchemaValidators","decode","isGlobalFormValidationError","ServerValidateError"],"mappings":";;;;;AAwCO,MAAM,uBACX,CAWE,gBAYF,OAAO,UAAoB,SAAwC;AAC3D,QAAA,EAAE,qBAAqB;AAE7B,QAAM,eAAe,OAAO;AAAA,IAC1B;AAAA,IACA;AAAA,EAAA,MAII;AACA,QAAAA,SAAAA,0BAA0B,gBAAgB,GAAG;AAC/C,aAAO,MAAMC,SAAyB,yBAAA;AAAA,QACpC,EAAE,OAAO,iBAAiB;AAAA,QAC1B;AAAA,MACF;AAAA,IAAA;AAEF,WAAQ,iBAAoD;AAAA,MAC1D;AAAA,MACA,QAAQ;AAAA,MACR,SAAS;AAAA,IAAA,CACV;AAAA,EACH;AAEM,QAAA,SAASC,eAAAA,OAAO,UAAU,IAAI;AAE9B,QAAA,gBAAiB,MAAM,aAAa;AAAA,IACxC,OAAO;AAAA,IACP,kBAAkB;AAAA,EAAA,CACnB;AAED,MAAI,CAAC,cAAe;AAEpB,QAAM,mBACJC,SAAAA,4BAA4B,aAAa,IACrC,cAAc,OACd;AAGN,QAAM,YAAmD;AAAA,IACvD,UAAU;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,IACA,QAAQ,mBAAmB,CAAC,gBAAgB,IAAI,CAAA;AAAA,EAClD;AAEA,QAAM,IAAIC,MAAAA,oBAAoB;AAAA,IAC5B;AAAA,EAAA,CACD;AACH;AAEK,MAAM,mBAAoD;AAAA,EAC/D,UAAU;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,EACR,QAAQ,CAAA;AACV;;;"}
@@ -1,13 +1,9 @@
1
1
  import { decode } from 'decode-formdata';
2
- import { FormOptions, ValidationError, Validator } from '@tanstack/form-core';
2
+ import { FormAsyncValidateOrFn, FormOptions, FormValidateOrFn } from '@tanstack/form-core';
3
3
  import { ServerFormState } from './types.cjs';
4
- type OnServerValidateFn<TFormData> = (props: {
5
- value: TFormData;
6
- }) => ValidationError | Promise<ValidationError>;
7
- type OnServerValidateOrFn<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined> = TFormValidator extends Validator<TFormData, infer FFN> ? FFN | OnServerValidateFn<TFormData> : OnServerValidateFn<TFormData>;
8
- interface CreateServerValidateOptions<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined> extends FormOptions<TFormData, TFormValidator> {
9
- onServerValidate: OnServerValidateOrFn<TFormData, TFormValidator>;
4
+ interface CreateServerValidateOptions<TFormData, TOnMount extends undefined | FormValidateOrFn<TFormData>, TOnChange extends undefined | FormValidateOrFn<TFormData>, TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnBlur extends undefined | FormValidateOrFn<TFormData>, TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnSubmit extends undefined | FormValidateOrFn<TFormData>, TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>> extends FormOptions<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer> {
5
+ onServerValidate: TOnServer;
10
6
  }
11
- export declare const createServerValidate: <TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined>(defaultOpts: CreateServerValidateOptions<TFormData, TFormValidator>) => (formData: FormData, info?: Parameters<typeof decode>[1]) => Promise<void>;
12
- export declare const initialFormState: ServerFormState<any>;
7
+ export declare const createServerValidate: <TFormData, TOnMount extends undefined | FormValidateOrFn<TFormData>, TOnChange extends undefined | FormValidateOrFn<TFormData>, TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnBlur extends undefined | FormValidateOrFn<TFormData>, TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnSubmit extends undefined | FormValidateOrFn<TFormData>, TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>>(defaultOpts: CreateServerValidateOptions<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer>) => (formData: FormData, info?: Parameters<typeof decode>[1]) => Promise<void>;
8
+ export declare const initialFormState: ServerFormState<any, undefined>;
13
9
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"error.cjs","sources":["../../../src/remix/error.ts"],"sourcesContent":["import type { ServerFormState } from './types'\n\ninterface ServerValidateErrorState<TFormData> {\n formState: ServerFormState<TFormData>\n}\n\nexport class ServerValidateError<TFormData>\n extends Error\n implements ServerValidateErrorState<TFormData>\n{\n formState: ServerFormState<TFormData>\n\n constructor(options: ServerValidateErrorState<TFormData>) {\n super('Your form has errors. Please check the fields and try again.')\n this.name = 'ServerValidateError'\n this.formState = options.formState\n }\n}\n"],"names":[],"mappings":";;AAMO,MAAM,4BACH,MAEV;AAAA,EAGE,YAAY,SAA8C;AACxD,UAAM,8DAA8D;AACpE,SAAK,OAAO;AACZ,SAAK,YAAY,QAAQ;AAAA,EAAA;AAE7B;;"}
1
+ {"version":3,"file":"error.cjs","sources":["../../../src/remix/error.ts"],"sourcesContent":["import type { ServerFormState } from './types'\nimport type { FormAsyncValidateOrFn } from '@tanstack/form-core'\n\ninterface ServerValidateErrorState<\n TFormData,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n> {\n formState: ServerFormState<TFormData, TOnServer>\n}\n\nexport class ServerValidateError<\n TFormData,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n >\n extends Error\n implements ServerValidateErrorState<TFormData, TOnServer>\n{\n formState: ServerFormState<TFormData, TOnServer>\n\n constructor(options: ServerValidateErrorState<TFormData, TOnServer>) {\n super('Your form has errors. Please check the fields and try again.')\n this.name = 'ServerValidateError'\n this.formState = options.formState\n }\n}\n"],"names":[],"mappings":";;AAUO,MAAM,4BAIH,MAEV;AAAA,EAGE,YAAY,SAAyD;AACnE,UAAM,8DAA8D;AACpE,SAAK,OAAO;AACZ,SAAK,YAAY,QAAQ;AAAA,EAAA;AAE7B;;"}
@@ -1,9 +1,10 @@
1
1
  import { ServerFormState } from './types.cjs';
2
- interface ServerValidateErrorState<TFormData> {
3
- formState: ServerFormState<TFormData>;
2
+ import { FormAsyncValidateOrFn } from '@tanstack/form-core';
3
+ interface ServerValidateErrorState<TFormData, TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>> {
4
+ formState: ServerFormState<TFormData, TOnServer>;
4
5
  }
5
- export declare class ServerValidateError<TFormData> extends Error implements ServerValidateErrorState<TFormData> {
6
- formState: ServerFormState<TFormData>;
7
- constructor(options: ServerValidateErrorState<TFormData>);
6
+ export declare class ServerValidateError<TFormData, TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>> extends Error implements ServerValidateErrorState<TFormData, TOnServer> {
7
+ formState: ServerFormState<TFormData, TOnServer>;
8
+ constructor(options: ServerValidateErrorState<TFormData, TOnServer>);
8
9
  }
9
10
  export {};
@@ -1,2 +1,2 @@
1
- import { FormState } from '@tanstack/form-core';
2
- export type ServerFormState<TFormData> = Pick<FormState<TFormData>, 'values' | 'errors' | 'errorMap'>;
1
+ import { FormAsyncValidateOrFn, FormState } from '@tanstack/form-core';
2
+ export type ServerFormState<TFormData, TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>> = Pick<FormState<TFormData, undefined, undefined, undefined, undefined, undefined, undefined, undefined, TOnServer>, 'values' | 'errors' | 'errorMap'>;
@@ -1,33 +1,42 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const decodeFormdata = require("decode-formdata");
4
+ const formCore = require("@tanstack/form-core");
5
+ const http = require("vinxi/http");
4
6
  const utils = require("./utils.cjs");
5
7
  const error = require("./error.cjs");
6
- const isFormValidationError = (error2) => {
7
- return typeof error2 === "object";
8
- };
9
- const createServerValidate = (defaultOpts) => async (ctx, formData, info) => {
10
- const { validatorAdapter, onServerValidate } = defaultOpts;
11
- const runValidator = async (propsValue) => {
12
- if (validatorAdapter && typeof onServerValidate !== "function") {
13
- return validatorAdapter().validateAsync(propsValue, onServerValidate);
8
+ const createServerValidate = (defaultOpts) => async (formData, info) => {
9
+ const { onServerValidate } = defaultOpts;
10
+ const runValidator = async ({
11
+ value,
12
+ validationSource
13
+ }) => {
14
+ if (formCore.isStandardSchemaValidator(onServerValidate)) {
15
+ return await formCore.standardSchemaValidators.validateAsync(
16
+ { value, validationSource },
17
+ onServerValidate
18
+ );
14
19
  }
15
- return onServerValidate(propsValue);
20
+ return onServerValidate({
21
+ value,
22
+ signal: void 0,
23
+ formApi: void 0
24
+ });
16
25
  };
17
- const referer = ctx.request.headers.get("referer");
26
+ const referer = http.getHeader("referer");
18
27
  const data = decodeFormdata.decode(formData, info);
19
28
  const onServerError = await runValidator({
20
29
  value: data,
21
30
  validationSource: "form"
22
31
  });
23
32
  if (!onServerError) return;
24
- const onServerErrorStr = onServerError && typeof onServerError !== "string" && isFormValidationError(onServerError) ? onServerError.form : onServerError;
33
+ const onServerErrorVal = formCore.isGlobalFormValidationError(onServerError) ? onServerError.form : onServerError;
25
34
  const formState = {
26
35
  errorMap: {
27
36
  onServer: onServerError
28
37
  },
29
38
  values: data,
30
- errors: onServerErrorStr ? [onServerErrorStr] : []
39
+ errors: onServerErrorVal ? [onServerErrorVal] : []
31
40
  };
32
41
  const cookie = await utils._tanstackInternalsCookie.serialize(formState);
33
42
  throw new error.ServerValidateError({
@@ -1 +1 @@
1
- {"version":3,"file":"createServerValidate.cjs","sources":["../../../src/start/createServerValidate.tsx"],"sourcesContent":["import { decode } from 'decode-formdata'\nimport { _tanstackInternalsCookie } from './utils'\nimport { ServerValidateError } from './error'\nimport type {\n FormOptions,\n FormValidationError,\n ValidationError,\n Validator,\n} from '@tanstack/form-core'\nimport type { FetchFn } from '@tanstack/start'\nimport type { ServerFormState } from './types'\n\ntype Ctx = Parameters<FetchFn<FormData, unknown>>[1]\n\ntype OnServerValidateFn<TFormData> = (props: {\n value: TFormData\n}) => ValidationError | Promise<ValidationError>\n\ntype OnServerValidateOrFn<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> =\n TFormValidator extends Validator<TFormData, infer FFN>\n ? FFN | OnServerValidateFn<TFormData>\n : OnServerValidateFn<TFormData>\n\ninterface CreateServerValidateOptions<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> extends FormOptions<TFormData, TFormValidator> {\n onServerValidate: OnServerValidateOrFn<TFormData, TFormValidator>\n}\n\nconst isFormValidationError = (\n error: unknown,\n): error is FormValidationError<unknown> => {\n return typeof error === 'object'\n}\n\nexport const createServerValidate =\n <\n TFormData,\n TFormValidator extends\n | Validator<TFormData, unknown>\n | undefined = undefined,\n >(\n defaultOpts: CreateServerValidateOptions<TFormData, TFormValidator>,\n ) =>\n async (ctx: Ctx, formData: FormData, info?: Parameters<typeof decode>[1]) => {\n const { validatorAdapter, onServerValidate } = defaultOpts\n\n const runValidator = async (propsValue: {\n value: TFormData\n validationSource: 'form'\n }) => {\n if (validatorAdapter && typeof onServerValidate !== 'function') {\n return validatorAdapter().validateAsync(propsValue, onServerValidate)\n }\n\n return (onServerValidate as OnServerValidateFn<TFormData>)(propsValue)\n }\n\n const referer = ctx.request.headers.get('referer')!\n\n const data = decode(formData, info) as never as TFormData\n\n const onServerError = await runValidator({\n value: data,\n validationSource: 'form',\n })\n\n if (!onServerError) return\n\n const onServerErrorStr =\n onServerError &&\n typeof onServerError !== 'string' &&\n isFormValidationError(onServerError)\n ? onServerError.form\n : onServerError\n\n const formState: ServerFormState<TFormData> = {\n errorMap: {\n onServer: onServerError,\n },\n values: data,\n errors: onServerErrorStr ? [onServerErrorStr] : [],\n }\n\n const cookie = await _tanstackInternalsCookie.serialize(formState)\n\n throw new ServerValidateError({\n response: new Response('ok', {\n headers: {\n Location: referer,\n 'Set-Cookie': cookie,\n },\n status: 302,\n }),\n formState: formState,\n })\n }\n"],"names":["error","decode","_tanstackInternalsCookie","ServerValidateError"],"mappings":";;;;;AAiCA,MAAM,wBAAwB,CAC5BA,WAC0C;AAC1C,SAAO,OAAOA,WAAU;AAC1B;AAEO,MAAM,uBACX,CAME,gBAEF,OAAO,KAAU,UAAoB,SAAwC;AACrE,QAAA,EAAE,kBAAkB,iBAAA,IAAqB;AAEzC,QAAA,eAAe,OAAO,eAGtB;AACA,QAAA,oBAAoB,OAAO,qBAAqB,YAAY;AAC9D,aAAO,iBAAiB,EAAE,cAAc,YAAY,gBAAgB;AAAA,IAAA;AAGtE,WAAQ,iBAAmD,UAAU;AAAA,EACvE;AAEA,QAAM,UAAU,IAAI,QAAQ,QAAQ,IAAI,SAAS;AAE3C,QAAA,OAAOC,eAAAA,OAAO,UAAU,IAAI;AAE5B,QAAA,gBAAgB,MAAM,aAAa;AAAA,IACvC,OAAO;AAAA,IACP,kBAAkB;AAAA,EAAA,CACnB;AAED,MAAI,CAAC,cAAe;AAEd,QAAA,mBACJ,iBACA,OAAO,kBAAkB,YACzB,sBAAsB,aAAa,IAC/B,cAAc,OACd;AAEN,QAAM,YAAwC;AAAA,IAC5C,UAAU;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,IACA,QAAQ;AAAA,IACR,QAAQ,mBAAmB,CAAC,gBAAgB,IAAI,CAAA;AAAA,EAClD;AAEA,QAAM,SAAS,MAAMC,+BAAyB,UAAU,SAAS;AAEjE,QAAM,IAAIC,MAAAA,oBAAoB;AAAA,IAC5B,UAAU,IAAI,SAAS,MAAM;AAAA,MAC3B,SAAS;AAAA,QACP,UAAU;AAAA,QACV,cAAc;AAAA,MAChB;AAAA,MACA,QAAQ;AAAA,IAAA,CACT;AAAA,IACD;AAAA,EAAA,CACD;AACH;;"}
1
+ {"version":3,"file":"createServerValidate.cjs","sources":["../../../src/start/createServerValidate.tsx"],"sourcesContent":["import { decode } from 'decode-formdata'\nimport {\n isGlobalFormValidationError,\n isStandardSchemaValidator,\n standardSchemaValidators,\n} from '@tanstack/form-core'\nimport { getHeader } from 'vinxi/http'\nimport { _tanstackInternalsCookie } from './utils'\nimport { ServerValidateError } from './error'\nimport type {\n FormAsyncValidateOrFn,\n FormOptions,\n FormValidateAsyncFn,\n FormValidateOrFn,\n UnwrapFormAsyncValidateOrFn,\n} from '@tanstack/form-core'\nimport type { ServerFormState } from './types'\n\ninterface CreateServerValidateOptions<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n> extends FormOptions<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnServer\n > {\n onServerValidate: TOnServer\n}\n\nexport const createServerValidate =\n <\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n >(\n defaultOpts: CreateServerValidateOptions<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnServer\n >,\n ) =>\n async (formData: FormData, info?: Parameters<typeof decode>[1]) => {\n const { onServerValidate } = defaultOpts\n\n const runValidator = async ({\n value,\n validationSource,\n }: {\n value: TFormData\n validationSource: 'form'\n }) => {\n if (isStandardSchemaValidator(onServerValidate)) {\n return await standardSchemaValidators.validateAsync(\n { value, validationSource },\n onServerValidate,\n )\n }\n return (onServerValidate as FormValidateAsyncFn<TFormData>)({\n value,\n signal: undefined as never,\n formApi: undefined as never,\n })\n }\n\n const referer = getHeader('referer')!\n\n const data = decode(formData, info) as never as TFormData\n\n const onServerError = (await runValidator({\n value: data,\n validationSource: 'form',\n })) as UnwrapFormAsyncValidateOrFn<TOnServer> | undefined\n\n if (!onServerError) return\n\n const onServerErrorVal = (\n isGlobalFormValidationError(onServerError)\n ? onServerError.form\n : onServerError\n ) as UnwrapFormAsyncValidateOrFn<TOnServer>\n\n const formState: ServerFormState<TFormData, TOnServer> = {\n errorMap: {\n onServer: onServerError,\n },\n values: data,\n errors: onServerErrorVal ? [onServerErrorVal] : [],\n }\n\n const cookie = await _tanstackInternalsCookie.serialize(formState)\n\n throw new ServerValidateError({\n response: new Response('ok', {\n headers: {\n Location: referer,\n 'Set-Cookie': cookie,\n },\n status: 302,\n }),\n formState: formState,\n })\n }\n"],"names":["isStandardSchemaValidator","standardSchemaValidators","getHeader","decode","isGlobalFormValidationError","_tanstackInternalsCookie","ServerValidateError"],"mappings":";;;;;;;AA0CO,MAAM,uBACX,CAWE,gBAYF,OAAO,UAAoB,SAAwC;AAC3D,QAAA,EAAE,qBAAqB;AAE7B,QAAM,eAAe,OAAO;AAAA,IAC1B;AAAA,IACA;AAAA,EAAA,MAII;AACA,QAAAA,SAAAA,0BAA0B,gBAAgB,GAAG;AAC/C,aAAO,MAAMC,SAAyB,yBAAA;AAAA,QACpC,EAAE,OAAO,iBAAiB;AAAA,QAC1B;AAAA,MACF;AAAA,IAAA;AAEF,WAAQ,iBAAoD;AAAA,MAC1D;AAAA,MACA,QAAQ;AAAA,MACR,SAAS;AAAA,IAAA,CACV;AAAA,EACH;AAEM,QAAA,UAAUC,eAAU,SAAS;AAE7B,QAAA,OAAOC,eAAAA,OAAO,UAAU,IAAI;AAE5B,QAAA,gBAAiB,MAAM,aAAa;AAAA,IACxC,OAAO;AAAA,IACP,kBAAkB;AAAA,EAAA,CACnB;AAED,MAAI,CAAC,cAAe;AAEpB,QAAM,mBACJC,SAAAA,4BAA4B,aAAa,IACrC,cAAc,OACd;AAGN,QAAM,YAAmD;AAAA,IACvD,UAAU;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,IACA,QAAQ;AAAA,IACR,QAAQ,mBAAmB,CAAC,gBAAgB,IAAI,CAAA;AAAA,EAClD;AAEA,QAAM,SAAS,MAAMC,+BAAyB,UAAU,SAAS;AAEjE,QAAM,IAAIC,MAAAA,oBAAoB;AAAA,IAC5B,UAAU,IAAI,SAAS,MAAM;AAAA,MAC3B,SAAS;AAAA,QACP,UAAU;AAAA,QACV,cAAc;AAAA,MAChB;AAAA,MACA,QAAQ;AAAA,IAAA,CACT;AAAA,IACD;AAAA,EAAA,CACD;AACH;;"}
@@ -1,13 +1,7 @@
1
1
  import { decode } from 'decode-formdata';
2
- import { FormOptions, ValidationError, Validator } from '@tanstack/form-core';
3
- import { FetchFn } from '@tanstack/start';
4
- type Ctx = Parameters<FetchFn<FormData, unknown>>[1];
5
- type OnServerValidateFn<TFormData> = (props: {
6
- value: TFormData;
7
- }) => ValidationError | Promise<ValidationError>;
8
- type OnServerValidateOrFn<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined> = TFormValidator extends Validator<TFormData, infer FFN> ? FFN | OnServerValidateFn<TFormData> : OnServerValidateFn<TFormData>;
9
- interface CreateServerValidateOptions<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined> extends FormOptions<TFormData, TFormValidator> {
10
- onServerValidate: OnServerValidateOrFn<TFormData, TFormValidator>;
2
+ import { FormAsyncValidateOrFn, FormOptions, FormValidateOrFn } from '@tanstack/form-core';
3
+ interface CreateServerValidateOptions<TFormData, TOnMount extends undefined | FormValidateOrFn<TFormData>, TOnChange extends undefined | FormValidateOrFn<TFormData>, TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnBlur extends undefined | FormValidateOrFn<TFormData>, TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnSubmit extends undefined | FormValidateOrFn<TFormData>, TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>> extends FormOptions<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer> {
4
+ onServerValidate: TOnServer;
11
5
  }
12
- export declare const createServerValidate: <TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined>(defaultOpts: CreateServerValidateOptions<TFormData, TFormValidator>) => (ctx: Ctx, formData: FormData, info?: Parameters<typeof decode>[1]) => Promise<void>;
6
+ export declare const createServerValidate: <TFormData, TOnMount extends undefined | FormValidateOrFn<TFormData>, TOnChange extends undefined | FormValidateOrFn<TFormData>, TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnBlur extends undefined | FormValidateOrFn<TFormData>, TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnSubmit extends undefined | FormValidateOrFn<TFormData>, TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>, TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>>(defaultOpts: CreateServerValidateOptions<TFormData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnServer>) => (formData: FormData, info?: Parameters<typeof decode>[1]) => Promise<void>;
13
7
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"error.cjs","sources":["../../../src/start/error.ts"],"sourcesContent":["import type { ServerFormState } from './types'\n\ninterface ServerValidateErrorState<TFormData> {\n formState: ServerFormState<TFormData>\n response: Response\n}\n\nexport class ServerValidateError<TFormData>\n extends Error\n implements ServerValidateErrorState<TFormData>\n{\n response: Response\n formState: ServerFormState<TFormData>\n\n constructor(options: ServerValidateErrorState<TFormData>) {\n super('Your form has errors. Please check the fields and try again.')\n this.name = 'ServerValidateError'\n this.response = options.response\n this.formState = options.formState\n }\n}\n"],"names":[],"mappings":";;AAOO,MAAM,4BACH,MAEV;AAAA,EAIE,YAAY,SAA8C;AACxD,UAAM,8DAA8D;AACpE,SAAK,OAAO;AACZ,SAAK,WAAW,QAAQ;AACxB,SAAK,YAAY,QAAQ;AAAA,EAAA;AAE7B;;"}
1
+ {"version":3,"file":"error.cjs","sources":["../../../src/start/error.ts"],"sourcesContent":["import type { ServerFormState } from './types'\nimport type { FormAsyncValidateOrFn } from '@tanstack/form-core'\n\ninterface ServerValidateErrorState<\n TFormData,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n> {\n formState: ServerFormState<TFormData, TOnServer>\n response: Response\n}\n\nexport class ServerValidateError<\n TFormData,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n >\n extends Error\n implements ServerValidateErrorState<TFormData, TOnServer>\n{\n formState: ServerFormState<TFormData, TOnServer>\n response: Response\n\n constructor(options: ServerValidateErrorState<TFormData, TOnServer>) {\n super('Your form has errors. Please check the fields and try again.')\n this.name = 'ServerValidateError'\n this.response = options.response\n this.formState = options.formState\n }\n}\n"],"names":[],"mappings":";;AAWO,MAAM,4BAIH,MAEV;AAAA,EAIE,YAAY,SAAyD;AACnE,UAAM,8DAA8D;AACpE,SAAK,OAAO;AACZ,SAAK,WAAW,QAAQ;AACxB,SAAK,YAAY,QAAQ;AAAA,EAAA;AAE7B;;"}
@@ -1,11 +1,12 @@
1
1
  import { ServerFormState } from './types.cjs';
2
- interface ServerValidateErrorState<TFormData> {
3
- formState: ServerFormState<TFormData>;
2
+ import { FormAsyncValidateOrFn } from '@tanstack/form-core';
3
+ interface ServerValidateErrorState<TFormData, TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>> {
4
+ formState: ServerFormState<TFormData, TOnServer>;
4
5
  response: Response;
5
6
  }
6
- export declare class ServerValidateError<TFormData> extends Error implements ServerValidateErrorState<TFormData> {
7
+ export declare class ServerValidateError<TFormData, TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>> extends Error implements ServerValidateErrorState<TFormData, TOnServer> {
8
+ formState: ServerFormState<TFormData, TOnServer>;
7
9
  response: Response;
8
- formState: ServerFormState<TFormData>;
9
- constructor(options: ServerValidateErrorState<TFormData>);
10
+ constructor(options: ServerValidateErrorState<TFormData, TOnServer>);
10
11
  }
11
12
  export {};
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const http = require("vinxi/http");
3
4
  const utils = require("./utils.cjs");
4
5
  const initialFormState = {
5
6
  errorMap: {
@@ -7,11 +8,9 @@ const initialFormState = {
7
8
  },
8
9
  errors: []
9
10
  };
10
- const getFormData = async (ctx) => {
11
- const data = await utils._tanstackInternalsCookie.parse(
12
- ctx.request.headers.get("Cookie")
13
- );
14
- ctx.request.headers.delete("Cookie");
11
+ const getFormData = async () => {
12
+ const data = await utils._tanstackInternalsCookie.parse(http.getHeader("Cookie"));
13
+ http.removeResponseHeader("Cookie");
15
14
  if (!data) return initialFormState;
16
15
  return data;
17
16
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getFormData.cjs","sources":["../../../src/start/getFormData.tsx"],"sourcesContent":["import { _tanstackInternalsCookie } from './utils'\nimport type { FetchFnCtx } from '@tanstack/start'\nimport type { ServerFormState } from './types'\n\nexport const initialFormState = {\n errorMap: {\n onServer: undefined,\n },\n errors: [],\n}\n\nexport const getFormData = async (ctx: FetchFnCtx) => {\n const data = (await _tanstackInternalsCookie.parse(\n ctx.request.headers.get('Cookie'),\n )) as undefined | ServerFormState<any>\n // Delete the cookie before it hits the client again¸\n ctx.request.headers.delete('Cookie')\n if (!data) return initialFormState\n return data\n}\n"],"names":["_tanstackInternalsCookie"],"mappings":";;;AAIO,MAAM,mBAAmB;AAAA,EAC9B,UAAU;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ,CAAA;AACV;AAEa,MAAA,cAAc,OAAO,QAAoB;AAC9C,QAAA,OAAQ,MAAMA,MAAAA,yBAAyB;AAAA,IAC3C,IAAI,QAAQ,QAAQ,IAAI,QAAQ;AAAA,EAClC;AAEI,MAAA,QAAQ,QAAQ,OAAO,QAAQ;AAC/B,MAAA,CAAC,KAAa,QAAA;AACX,SAAA;AACT;;;"}
1
+ {"version":3,"file":"getFormData.cjs","sources":["../../../src/start/getFormData.tsx"],"sourcesContent":["import { getHeader, removeResponseHeader } from 'vinxi/http'\nimport { _tanstackInternalsCookie } from './utils'\nimport type { ServerFormState } from './types'\n\nexport const initialFormState = {\n errorMap: {\n onServer: undefined,\n },\n errors: [],\n}\n\nexport const getFormData = async () => {\n const data = (await _tanstackInternalsCookie.parse(getHeader('Cookie')!)) as\n | undefined\n | ServerFormState<any, undefined>\n // Delete the cookie before it hits the client again¸\n removeResponseHeader('Cookie')\n if (!data) return initialFormState\n return data\n}\n"],"names":["_tanstackInternalsCookie","getHeader","removeResponseHeader"],"mappings":";;;;AAIO,MAAM,mBAAmB;AAAA,EAC9B,UAAU;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ,CAAA;AACV;AAEO,MAAM,cAAc,YAAY;AACrC,QAAM,OAAQ,MAAMA,MAAA,yBAAyB,MAAMC,KAAA,UAAU,QAAQ,CAAE;AAIvEC,OAAAA,qBAAqB,QAAQ;AACzB,MAAA,CAAC,KAAa,QAAA;AACX,SAAA;AACT;;;"}
@@ -1,4 +1,3 @@
1
- import { FetchFnCtx } from '@tanstack/start';
2
1
  import { ServerFormState } from './types.cjs';
3
2
  export declare const initialFormState: {
4
3
  errorMap: {
@@ -6,9 +5,9 @@ export declare const initialFormState: {
6
5
  };
7
6
  errors: never[];
8
7
  };
9
- export declare const getFormData: (ctx: FetchFnCtx) => Promise<{
8
+ export declare const getFormData: () => Promise<{
10
9
  errorMap: {
11
10
  onServer: undefined;
12
11
  };
13
12
  errors: never[];
14
- } | ServerFormState<any>>;
13
+ } | ServerFormState<any, undefined>>;
@@ -1,2 +1,2 @@
1
- import { FormState } from '@tanstack/form-core';
2
- export type ServerFormState<TFormData> = Pick<FormState<TFormData>, 'values' | 'errors' | 'errorMap'>;
1
+ import { FormAsyncValidateOrFn, FormState } from '@tanstack/form-core';
2
+ export type ServerFormState<TFormData, TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>> = Pick<FormState<TFormData, undefined, undefined, undefined, undefined, undefined, undefined, undefined, TOnServer>, 'values' | 'errors' | 'errorMap'>;
@@ -1,7 +1,7 @@
1
- import { DeepKeys, DeepValue, FieldApiOptions, Validator } from '@tanstack/form-core';
1
+ import { DeepKeys, DeepValue, FieldApiOptions, FieldAsyncValidateOrFn, FieldValidateOrFn, FormAsyncValidateOrFn, FormValidateOrFn } from '@tanstack/form-core';
2
2
  /**
3
3
  * The field options.
4
4
  */
5
- export type UseFieldOptions<TParentData, TName extends DeepKeys<TParentData>, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> = FieldApiOptions<TParentData, TName, TFieldValidator, TFormValidator, TData> & {
5
+ export type UseFieldOptions<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FieldAsyncValidateOrFn<TParentData, TName, TData>, TFormOnMount extends undefined | FormValidateOrFn<TParentData>, TFormOnChange extends undefined | FormValidateOrFn<TParentData>, TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnBlur extends undefined | FormValidateOrFn<TParentData>, TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>, TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>> = FieldApiOptions<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnServer> & {
6
6
  mode?: 'value' | 'array';
7
7
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useField.cjs","sources":["../../src/useField.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react'\nimport { useStore } from '@tanstack/react-store'\nimport { FieldApi, functionalUpdate } from '@tanstack/form-core'\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect'\nimport type { FunctionComponent, ReactNode } from 'react'\nimport type { UseFieldOptions } from './types'\nimport type { DeepKeys, DeepValue, Validator } from '@tanstack/form-core'\n\ninterface ReactFieldApi<\n TParentData,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n> {\n /**\n * A pre-bound and type-safe sub-field component using this field as a root.\n */\n Field: FieldComponent<TParentData, TFormValidator>\n}\n\n/**\n * A type representing a hook for using a field in a form with the given form data type.\n *\n * A function that takes an optional object with a `name` property and field options, and returns a `FieldApi` instance for the specified field.\n */\nexport type UseField<\n TParentData,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n> = <\n TName extends DeepKeys<TParentData>,\n TFieldValidator extends\n | Validator<DeepValue<TParentData, TName>, unknown>\n | undefined = undefined,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n>(\n opts: Omit<\n UseFieldOptions<TParentData, TName, TFieldValidator, TFormValidator, TData>,\n 'form'\n >,\n) => FieldApi<TParentData, TName, TFieldValidator, TFormValidator, TData>\n\n/**\n * A hook for managing a field in a form.\n * @param opts An object with field options.\n *\n * @returns The `FieldApi` instance for the specified field.\n */\nexport function useField<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TFieldValidator extends\n | Validator<DeepValue<TParentData, TName>, unknown>\n | undefined = undefined,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n>(\n opts: UseFieldOptions<\n TParentData,\n TName,\n TFieldValidator,\n TFormValidator,\n TData\n >,\n) {\n const [fieldApi] = useState(() => {\n const api = new FieldApi({\n ...opts,\n form: opts.form,\n name: opts.name,\n })\n\n const extendedApi: typeof api & ReactFieldApi<TParentData, TFormValidator> =\n api as never\n\n extendedApi.Field = Field as never\n\n return extendedApi\n })\n\n useIsomorphicLayoutEffect(fieldApi.mount, [fieldApi])\n\n /**\n * fieldApi.update should not have any side effects. Think of it like a `useRef`\n * that we need to keep updated every render with the most up-to-date information.\n */\n useIsomorphicLayoutEffect(() => {\n fieldApi.update(opts)\n })\n\n useStore(\n fieldApi.store,\n opts.mode === 'array'\n ? (state) => {\n return [state.meta, Object.keys(state.value ?? []).length]\n }\n : undefined,\n )\n\n return fieldApi\n}\n\n/**\n * @param children A render function that takes a field API instance and returns a React element.\n */\ntype FieldComponentProps<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TFieldValidator extends\n | Validator<DeepValue<TParentData, TName>, unknown>\n | undefined = undefined,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = {\n children: (\n fieldApi: FieldApi<\n TParentData,\n TName,\n TFieldValidator,\n TFormValidator,\n TData\n >,\n ) => ReactNode\n} & UseFieldOptions<TParentData, TName, TFieldValidator, TFormValidator, TData>\n\n/**\n * A type alias representing a field component for a specific form data type.\n */\nexport type FieldComponent<\n TParentData,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n> = <\n TName extends DeepKeys<TParentData>,\n TFieldValidator extends\n | Validator<DeepValue<TParentData, TName>, unknown>\n | undefined = undefined,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n>({\n children,\n ...fieldOptions\n}: Omit<\n FieldComponentProps<\n TParentData,\n TName,\n TFieldValidator,\n TFormValidator,\n TData\n >,\n 'form'\n>) => ReactNode\n\n/**\n * A function component that takes field options and a render function as children and returns a React component.\n *\n * The `Field` component uses the `useField` hook internally to manage the field instance.\n */\nexport const Field = (<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TFieldValidator extends\n | Validator<DeepValue<TParentData, TName>, unknown>\n | undefined = undefined,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n>({\n children,\n ...fieldOptions\n}: FieldComponentProps<\n TParentData,\n TName,\n TFieldValidator,\n TFormValidator,\n TData\n>): ReactNode => {\n const fieldApi = useField(fieldOptions as any)\n\n const jsxToDisplay = useMemo(\n () => functionalUpdate(children, fieldApi as any),\n /**\n * The reason this exists is to fix an issue with the React Compiler.\n * Namely, functionalUpdate is memoized where it checks for `fieldApi`, which is a static type.\n * This means that when `state.value` changes, it does not trigger a re-render. The useMemo explicitly fixes this problem\n */\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [children, fieldApi, fieldApi.state.value, fieldApi.state.meta],\n )\n return (<>{jsxToDisplay}</>) as never\n}) satisfies FunctionComponent<FieldComponentProps<any, any, any, any, any>>\n"],"names":["useState","FieldApi","useIsomorphicLayoutEffect","useStore","useMemo","functionalUpdate"],"mappings":";;;;;;;AAiDO,SAAS,SAWd,MAOA;AACA,QAAM,CAAC,QAAQ,IAAIA,MAAAA,SAAS,MAAM;AAC1B,UAAA,MAAM,IAAIC,kBAAS;AAAA,MACvB,GAAG;AAAA,MACH,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,IAAA,CACZ;AAED,UAAM,cACJ;AAEF,gBAAY,QAAQ;AAEb,WAAA;AAAA,EAAA,CACR;AAEDC,4BAAAA,0BAA0B,SAAS,OAAO,CAAC,QAAQ,CAAC;AAMpDA,4BAAAA,0BAA0B,MAAM;AAC9B,aAAS,OAAO,IAAI;AAAA,EAAA,CACrB;AAEDC,aAAA;AAAA,IACE,SAAS;AAAA,IACT,KAAK,SAAS,UACV,CAAC,UAAU;AACF,aAAA,CAAC,MAAM,MAAM,OAAO,KAAK,MAAM,SAAS,EAAE,EAAE,MAAM;AAAA,IAAA,IAE3D;AAAA,EACN;AAEO,SAAA;AACT;AA4DO,MAAM,QAAS,CAUpB;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAMiB;AACT,QAAA,WAAW,SAAS,YAAmB;AAE7C,QAAM,eAAeC,MAAA;AAAA,IACnB,MAAMC,SAAiB,iBAAA,UAAU,QAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOhD,CAAC,UAAU,UAAU,SAAS,MAAM,OAAO,SAAS,MAAM,IAAI;AAAA,EAChE;AACA,+DAAW,UAAa,aAAA,CAAA;AAC1B;;;"}
1
+ {"version":3,"file":"useField.cjs","sources":["../../src/useField.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react'\nimport { useStore } from '@tanstack/react-store'\nimport { FieldApi, functionalUpdate } from '@tanstack/form-core'\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect'\nimport type {\n DeepKeys,\n DeepValue,\n FieldAsyncValidateOrFn,\n FieldValidateOrFn,\n FormAsyncValidateOrFn,\n FormValidateOrFn,\n} from '@tanstack/form-core'\nimport type { FunctionComponent, ReactNode } from 'react'\nimport type { UseFieldOptions } from './types'\n\ninterface ReactFieldApi<\n TParentData,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n> {\n /**\n * A pre-bound and type-safe sub-field component using this field as a root.\n */\n Field: FieldComponent<\n TParentData,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer\n >\n}\n\n/**\n * A type representing a hook for using a field in a form with the given form data type.\n *\n * A function that takes an optional object with a `name` property and field options, and returns a `FieldApi` instance for the specified field.\n */\nexport type UseField<\n TParentData,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n> = <\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n>(\n opts: Omit<\n UseFieldOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer\n >,\n 'form'\n >,\n) => FieldApi<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer\n>\n\n/**\n * A hook for managing a field in a form.\n * @param opts An object with field options.\n *\n * @returns The `FieldApi` instance for the specified field.\n */\nexport function useField<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n>(\n opts: UseFieldOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer\n >,\n) {\n const [fieldApi] = useState(() => {\n const api = new FieldApi({\n ...opts,\n form: opts.form,\n name: opts.name,\n })\n\n const extendedApi: typeof api &\n ReactFieldApi<\n TParentData,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer\n > = api as never\n\n extendedApi.Field = Field as never\n\n return extendedApi\n })\n\n useIsomorphicLayoutEffect(fieldApi.mount, [fieldApi])\n\n /**\n * fieldApi.update should not have any side effects. Think of it like a `useRef`\n * that we need to keep updated every render with the most up-to-date information.\n */\n useIsomorphicLayoutEffect(() => {\n fieldApi.update(opts)\n })\n\n useStore(\n fieldApi.store,\n opts.mode === 'array'\n ? (state) => {\n return [state.meta, Object.keys(state.value ?? []).length]\n }\n : undefined,\n )\n\n return fieldApi\n}\n\n/**\n * @param children A render function that takes a field API instance and returns a React element.\n */\ntype FieldComponentProps<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n> = {\n children: (\n fieldApi: FieldApi<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer\n >,\n ) => ReactNode\n} & UseFieldOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer\n>\n\n/**\n * A type alias representing a field component for a specific form data type.\n */\nexport type FieldComponent<\n TParentData,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n> = <\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n>({\n children,\n ...fieldOptions\n}: Omit<\n FieldComponentProps<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer\n >,\n 'form'\n>) => ReactNode\n\n/**\n * A function component that takes field options and a render function as children and returns a React component.\n *\n * The `Field` component uses the `useField` hook internally to manage the field instance.\n */\nexport const Field = (<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n>({\n children,\n ...fieldOptions\n}: FieldComponentProps<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnServer\n>): ReactNode => {\n const fieldApi = useField(fieldOptions as any)\n\n const jsxToDisplay = useMemo(\n () => functionalUpdate(children, fieldApi as any),\n /**\n * The reason this exists is to fix an issue with the React Compiler.\n * Namely, functionalUpdate is memoized where it checks for `fieldApi`, which is a static type.\n * This means that when `state.value` changes, it does not trigger a re-render. The useMemo explicitly fixes this problem\n */\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [children, fieldApi, fieldApi.state.value, fieldApi.state.meta],\n )\n return (<>{jsxToDisplay}</>) as never\n}) satisfies FunctionComponent<\n FieldComponentProps<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n>\n"],"names":["useState","FieldApi","useIsomorphicLayoutEffect","useStore","useMemo","functionalUpdate"],"mappings":";;;;;;;AA4HO,SAAS,SA0Bd,MAoBA;AACA,QAAM,CAAC,QAAQ,IAAIA,MAAAA,SAAS,MAAM;AAC1B,UAAA,MAAM,IAAIC,kBAAS;AAAA,MACvB,GAAG;AAAA,MACH,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,IAAA,CACZ;AAED,UAAM,cAWA;AAEN,gBAAY,QAAQ;AAEb,WAAA;AAAA,EAAA,CACR;AAEDC,4BAAAA,0BAA0B,SAAS,OAAO,CAAC,QAAQ,CAAC;AAMpDA,4BAAAA,0BAA0B,MAAM;AAC9B,aAAS,OAAO,IAAI;AAAA,EAAA,CACrB;AAEDC,aAAA;AAAA,IACE,SAAS;AAAA,IACT,KAAK,SAAS,UACV,CAAC,UAAU;AACF,aAAA,CAAC,MAAM,MAAM,OAAO,KAAK,MAAM,SAAS,EAAE,EAAE,MAAM;AAAA,IAAA,IAE3D;AAAA,EACN;AAEO,SAAA;AACT;AAuIO,MAAM,QAAS,CAyBpB;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAmBiB;AACT,QAAA,WAAW,SAAS,YAAmB;AAE7C,QAAM,eAAeC,MAAA;AAAA,IACnB,MAAMC,SAAiB,iBAAA,UAAU,QAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOhD,CAAC,UAAU,UAAU,SAAS,MAAM,OAAO,SAAS,MAAM,IAAI;AAAA,EAChE;AACA,+DAAW,UAAa,aAAA,CAAA;AAC1B;;;"}