@tanstack/react-form 0.29.2 → 0.31.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/cjs/nextjs/createServerValidate.cjs +3 -3
- package/dist/cjs/nextjs/createServerValidate.cjs.map +1 -1
- package/dist/cjs/nextjs/createServerValidate.d.cts +3 -2
- package/dist/cjs/start/createServerValidate.cjs +3 -3
- package/dist/cjs/start/createServerValidate.cjs.map +1 -1
- package/dist/cjs/start/createServerValidate.d.cts +3 -2
- package/dist/esm/nextjs/createServerValidate.d.ts +3 -2
- package/dist/esm/nextjs/createServerValidate.js +3 -3
- package/dist/esm/nextjs/createServerValidate.js.map +1 -1
- package/dist/esm/start/createServerValidate.d.ts +3 -2
- package/dist/esm/start/createServerValidate.js +3 -3
- package/dist/esm/start/createServerValidate.js.map +1 -1
- package/package.json +6 -6
- package/src/nextjs/createServerValidate.ts +13 -5
- package/src/start/createServerValidate.tsx +13 -5
|
@@ -4,14 +4,14 @@ const decodeFormdata = require("decode-formdata");
|
|
|
4
4
|
const error = require("./error.cjs");
|
|
5
5
|
const createServerValidate = (defaultOpts) => async (formData, info) => {
|
|
6
6
|
const { validatorAdapter, onServerValidate } = defaultOpts;
|
|
7
|
-
const runValidator = (propsValue) => {
|
|
7
|
+
const runValidator = async (propsValue) => {
|
|
8
8
|
if (validatorAdapter && typeof onServerValidate !== "function") {
|
|
9
|
-
return validatorAdapter().
|
|
9
|
+
return validatorAdapter().validateAsync(propsValue, onServerValidate);
|
|
10
10
|
}
|
|
11
11
|
return onServerValidate(propsValue);
|
|
12
12
|
};
|
|
13
13
|
const values = decodeFormdata.decode(formData, info);
|
|
14
|
-
const onServerError = runValidator({ value: values });
|
|
14
|
+
const onServerError = await runValidator({ value: values });
|
|
15
15
|
if (!onServerError) return;
|
|
16
16
|
const formState = {
|
|
17
17
|
errorMap: {
|
|
@@ -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 ValidationError,\n Validator,\n} from '@tanstack/form-core'\nimport type { ServerFormState } from './types'\n\ntype OnServerValidateFn<TFormData> = (props: {\n value: TFormData\n}) => ValidationError\n\ninterface CreateServerValidateOptions<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> extends FormOptions<TFormData, TFormValidator> {\n onServerValidate:
|
|
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 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\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: { value: TFormData }) => {\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({ value: values })\n\n if (!onServerError) return\n\n const formState: ServerFormState<TFormData> = {\n errorMap: {\n onServer: onServerError,\n },\n values,\n errors: onServerError ? [onServerError] : [],\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":["decode","ServerValidateError"],"mappings":";;;;AA4BO,MAAM,uBACX,CAME,gBAEF,OAAO,UAAoB,SAAwC;AAC3D,QAAA,EAAE,kBAAkB,iBAAqB,IAAA;AAEzC,QAAA,eAAe,OAAO,eAAqC;AAC3D,QAAA,oBAAoB,OAAO,qBAAqB,YAAY;AAC9D,aAAO,iBAAiB,EAAE,cAAc,YAAY,gBAAgB;AAAA,IACtE;AAEA,WAAQ,iBAAmD,UAAU;AAAA,EAAA;AAGjE,QAAA,SAASA,eAAAA,OAAO,UAAU,IAAI;AAEpC,QAAM,gBAAgB,MAAM,aAAa,EAAE,OAAO,OAAQ,CAAA;AAE1D,MAAI,CAAC,cAAe;AAEpB,QAAM,YAAwC;AAAA,IAC5C,UAAU;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,IACA,QAAQ,gBAAgB,CAAC,aAAa,IAAI,CAAC;AAAA,EAAA;AAG7C,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,CAAC;AACX;;;"}
|
|
@@ -3,9 +3,10 @@ import { FormOptions, ValidationError, Validator } from '@tanstack/form-core';
|
|
|
3
3
|
import { ServerFormState } from './types.cjs';
|
|
4
4
|
type OnServerValidateFn<TFormData> = (props: {
|
|
5
5
|
value: TFormData;
|
|
6
|
-
}) => ValidationError
|
|
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>;
|
|
7
8
|
interface CreateServerValidateOptions<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined> extends FormOptions<TFormData, TFormValidator> {
|
|
8
|
-
onServerValidate:
|
|
9
|
+
onServerValidate: OnServerValidateOrFn<TFormData, TFormValidator>;
|
|
9
10
|
}
|
|
10
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>;
|
|
11
12
|
export declare const initialFormState: ServerFormState<any>;
|
|
@@ -5,15 +5,15 @@ const utils = require("./utils.cjs");
|
|
|
5
5
|
const error = require("./error.cjs");
|
|
6
6
|
const createServerValidate = (defaultOpts) => async (ctx, formData, info) => {
|
|
7
7
|
const { validatorAdapter, onServerValidate } = defaultOpts;
|
|
8
|
-
const runValidator = (propsValue) => {
|
|
8
|
+
const runValidator = async (propsValue) => {
|
|
9
9
|
if (validatorAdapter && typeof onServerValidate !== "function") {
|
|
10
|
-
return validatorAdapter().
|
|
10
|
+
return validatorAdapter().validateAsync(propsValue, onServerValidate);
|
|
11
11
|
}
|
|
12
12
|
return onServerValidate(propsValue);
|
|
13
13
|
};
|
|
14
14
|
const referer = ctx.request.headers.get("referer");
|
|
15
15
|
const data = decodeFormdata.decode(formData, info);
|
|
16
|
-
const onServerError = runValidator({ value: data });
|
|
16
|
+
const onServerError = await runValidator({ value: data });
|
|
17
17
|
if (!onServerError) return;
|
|
18
18
|
const formState = {
|
|
19
19
|
errorMap: {
|
|
@@ -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 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\n\ninterface CreateServerValidateOptions<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> extends FormOptions<TFormData, TFormValidator> {\n onServerValidate:
|
|
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 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\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: { value: TFormData }) => {\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({ value: data })\n\n if (!onServerError) return\n\n const formState: ServerFormState<TFormData> = {\n errorMap: {\n onServer: onServerError,\n },\n values: data,\n errors: onServerError ? [onServerError] : [],\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":["decode","_tanstackInternalsCookie","ServerValidateError"],"mappings":";;;;;AAgCO,MAAM,uBACX,CAME,gBAEF,OAAO,KAAU,UAAoB,SAAwC;AACrE,QAAA,EAAE,kBAAkB,iBAAqB,IAAA;AAEzC,QAAA,eAAe,OAAO,eAAqC;AAC3D,QAAA,oBAAoB,OAAO,qBAAqB,YAAY;AAC9D,aAAO,iBAAiB,EAAE,cAAc,YAAY,gBAAgB;AAAA,IACtE;AAEA,WAAQ,iBAAmD,UAAU;AAAA,EAAA;AAGvE,QAAM,UAAU,IAAI,QAAQ,QAAQ,IAAI,SAAS;AAE3C,QAAA,OAAOA,eAAAA,OAAO,UAAU,IAAI;AAElC,QAAM,gBAAgB,MAAM,aAAa,EAAE,OAAO,KAAM,CAAA;AAExD,MAAI,CAAC,cAAe;AAEpB,QAAM,YAAwC;AAAA,IAC5C,UAAU;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,IACA,QAAQ;AAAA,IACR,QAAQ,gBAAgB,CAAC,aAAa,IAAI,CAAC;AAAA,EAAA;AAG7C,QAAM,SAAS,MAAMC,MAAAA,yBAAyB,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;;"}
|
|
@@ -4,9 +4,10 @@ import { FetchFn } from '@tanstack/start';
|
|
|
4
4
|
type Ctx = Parameters<FetchFn<FormData, unknown>>[1];
|
|
5
5
|
type OnServerValidateFn<TFormData> = (props: {
|
|
6
6
|
value: TFormData;
|
|
7
|
-
}) => ValidationError
|
|
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>;
|
|
8
9
|
interface CreateServerValidateOptions<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined> extends FormOptions<TFormData, TFormValidator> {
|
|
9
|
-
onServerValidate:
|
|
10
|
+
onServerValidate: OnServerValidateOrFn<TFormData, TFormValidator>;
|
|
10
11
|
}
|
|
11
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>;
|
|
12
13
|
export {};
|
|
@@ -3,9 +3,10 @@ import { FormOptions, ValidationError, Validator } from '@tanstack/form-core';
|
|
|
3
3
|
import { ServerFormState } from './types.js';
|
|
4
4
|
type OnServerValidateFn<TFormData> = (props: {
|
|
5
5
|
value: TFormData;
|
|
6
|
-
}) => ValidationError
|
|
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>;
|
|
7
8
|
interface CreateServerValidateOptions<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined> extends FormOptions<TFormData, TFormValidator> {
|
|
8
|
-
onServerValidate:
|
|
9
|
+
onServerValidate: OnServerValidateOrFn<TFormData, TFormValidator>;
|
|
9
10
|
}
|
|
10
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>;
|
|
11
12
|
export declare const initialFormState: ServerFormState<any>;
|
|
@@ -2,14 +2,14 @@ import { decode } from "decode-formdata";
|
|
|
2
2
|
import { ServerValidateError } from "./error.js";
|
|
3
3
|
const createServerValidate = (defaultOpts) => async (formData, info) => {
|
|
4
4
|
const { validatorAdapter, onServerValidate } = defaultOpts;
|
|
5
|
-
const runValidator = (propsValue) => {
|
|
5
|
+
const runValidator = async (propsValue) => {
|
|
6
6
|
if (validatorAdapter && typeof onServerValidate !== "function") {
|
|
7
|
-
return validatorAdapter().
|
|
7
|
+
return validatorAdapter().validateAsync(propsValue, onServerValidate);
|
|
8
8
|
}
|
|
9
9
|
return onServerValidate(propsValue);
|
|
10
10
|
};
|
|
11
11
|
const values = decode(formData, info);
|
|
12
|
-
const onServerError = runValidator({ value: values });
|
|
12
|
+
const onServerError = await runValidator({ value: values });
|
|
13
13
|
if (!onServerError) return;
|
|
14
14
|
const formState = {
|
|
15
15
|
errorMap: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createServerValidate.js","sources":["../../../src/nextjs/createServerValidate.ts"],"sourcesContent":["import { decode } from 'decode-formdata'\nimport { ServerValidateError } from './error'\nimport type {\n FormOptions,\n ValidationError,\n Validator,\n} from '@tanstack/form-core'\nimport type { ServerFormState } from './types'\n\ntype OnServerValidateFn<TFormData> = (props: {\n value: TFormData\n}) => ValidationError\n\ninterface CreateServerValidateOptions<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> extends FormOptions<TFormData, TFormValidator> {\n onServerValidate:
|
|
1
|
+
{"version":3,"file":"createServerValidate.js","sources":["../../../src/nextjs/createServerValidate.ts"],"sourcesContent":["import { decode } from 'decode-formdata'\nimport { ServerValidateError } from './error'\nimport type {\n FormOptions,\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\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: { value: TFormData }) => {\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({ value: values })\n\n if (!onServerError) return\n\n const formState: ServerFormState<TFormData> = {\n errorMap: {\n onServer: onServerError,\n },\n values,\n errors: onServerError ? [onServerError] : [],\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":[],"mappings":";;AA4BO,MAAM,uBACX,CAME,gBAEF,OAAO,UAAoB,SAAwC;AAC3D,QAAA,EAAE,kBAAkB,iBAAqB,IAAA;AAEzC,QAAA,eAAe,OAAO,eAAqC;AAC3D,QAAA,oBAAoB,OAAO,qBAAqB,YAAY;AAC9D,aAAO,iBAAiB,EAAE,cAAc,YAAY,gBAAgB;AAAA,IACtE;AAEA,WAAQ,iBAAmD,UAAU;AAAA,EAAA;AAGjE,QAAA,SAAS,OAAO,UAAU,IAAI;AAEpC,QAAM,gBAAgB,MAAM,aAAa,EAAE,OAAO,OAAQ,CAAA;AAE1D,MAAI,CAAC,cAAe;AAEpB,QAAM,YAAwC;AAAA,IAC5C,UAAU;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,IACA,QAAQ,gBAAgB,CAAC,aAAa,IAAI,CAAC;AAAA,EAAA;AAG7C,QAAM,IAAI,oBAAoB;AAAA,IAC5B;AAAA,EAAA,CACD;AACH;AAEK,MAAM,mBAAyC;AAAA,EACpD,UAAU;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,EACR,QAAQ,CAAC;AACX;"}
|
|
@@ -4,9 +4,10 @@ import { FetchFn } from '@tanstack/start';
|
|
|
4
4
|
type Ctx = Parameters<FetchFn<FormData, unknown>>[1];
|
|
5
5
|
type OnServerValidateFn<TFormData> = (props: {
|
|
6
6
|
value: TFormData;
|
|
7
|
-
}) => ValidationError
|
|
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>;
|
|
8
9
|
interface CreateServerValidateOptions<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined> extends FormOptions<TFormData, TFormValidator> {
|
|
9
|
-
onServerValidate:
|
|
10
|
+
onServerValidate: OnServerValidateOrFn<TFormData, TFormValidator>;
|
|
10
11
|
}
|
|
11
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>;
|
|
12
13
|
export {};
|
|
@@ -3,15 +3,15 @@ import { _tanstackInternalsCookie } from "./utils.js";
|
|
|
3
3
|
import { ServerValidateError } from "./error.js";
|
|
4
4
|
const createServerValidate = (defaultOpts) => async (ctx, formData, info) => {
|
|
5
5
|
const { validatorAdapter, onServerValidate } = defaultOpts;
|
|
6
|
-
const runValidator = (propsValue) => {
|
|
6
|
+
const runValidator = async (propsValue) => {
|
|
7
7
|
if (validatorAdapter && typeof onServerValidate !== "function") {
|
|
8
|
-
return validatorAdapter().
|
|
8
|
+
return validatorAdapter().validateAsync(propsValue, onServerValidate);
|
|
9
9
|
}
|
|
10
10
|
return onServerValidate(propsValue);
|
|
11
11
|
};
|
|
12
12
|
const referer = ctx.request.headers.get("referer");
|
|
13
13
|
const data = decode(formData, info);
|
|
14
|
-
const onServerError = runValidator({ value: data });
|
|
14
|
+
const onServerError = await runValidator({ value: data });
|
|
15
15
|
if (!onServerError) return;
|
|
16
16
|
const formState = {
|
|
17
17
|
errorMap: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createServerValidate.js","sources":["../../../src/start/createServerValidate.tsx"],"sourcesContent":["import { decode } from 'decode-formdata'\nimport { _tanstackInternalsCookie } from './utils'\nimport { ServerValidateError } from './error'\nimport type {\n FormOptions,\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\n\ninterface CreateServerValidateOptions<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> extends FormOptions<TFormData, TFormValidator> {\n onServerValidate:
|
|
1
|
+
{"version":3,"file":"createServerValidate.js","sources":["../../../src/start/createServerValidate.tsx"],"sourcesContent":["import { decode } from 'decode-formdata'\nimport { _tanstackInternalsCookie } from './utils'\nimport { ServerValidateError } from './error'\nimport type {\n FormOptions,\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\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: { value: TFormData }) => {\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({ value: data })\n\n if (!onServerError) return\n\n const formState: ServerFormState<TFormData> = {\n errorMap: {\n onServer: onServerError,\n },\n values: data,\n errors: onServerError ? [onServerError] : [],\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":[],"mappings":";;;AAgCO,MAAM,uBACX,CAME,gBAEF,OAAO,KAAU,UAAoB,SAAwC;AACrE,QAAA,EAAE,kBAAkB,iBAAqB,IAAA;AAEzC,QAAA,eAAe,OAAO,eAAqC;AAC3D,QAAA,oBAAoB,OAAO,qBAAqB,YAAY;AAC9D,aAAO,iBAAiB,EAAE,cAAc,YAAY,gBAAgB;AAAA,IACtE;AAEA,WAAQ,iBAAmD,UAAU;AAAA,EAAA;AAGvE,QAAM,UAAU,IAAI,QAAQ,QAAQ,IAAI,SAAS;AAE3C,QAAA,OAAO,OAAO,UAAU,IAAI;AAElC,QAAM,gBAAgB,MAAM,aAAa,EAAE,OAAO,KAAM,CAAA;AAExD,MAAI,CAAC,cAAe;AAEpB,QAAM,YAAwC;AAAA,IAC5C,UAAU;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,IACA,QAAQ;AAAA,IACR,QAAQ,gBAAgB,CAAC,aAAa,IAAI,CAAC;AAAA,EAAA;AAG7C,QAAM,SAAS,MAAM,yBAAyB,UAAU,SAAS;AAEjE,QAAM,IAAI,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;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/react-form",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.31.0",
|
|
4
4
|
"description": "Powerful, type-safe forms for React.",
|
|
5
5
|
"author": "tannerlinsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -57,19 +57,19 @@
|
|
|
57
57
|
"src"
|
|
58
58
|
],
|
|
59
59
|
"dependencies": {
|
|
60
|
-
"@remix-run/node": "^2.11.
|
|
60
|
+
"@remix-run/node": "^2.11.2",
|
|
61
61
|
"@tanstack/react-store": "^0.5.5",
|
|
62
|
-
"decode-formdata": "^0.
|
|
63
|
-
"@tanstack/form-core": "0.
|
|
62
|
+
"decode-formdata": "^0.8.0",
|
|
63
|
+
"@tanstack/form-core": "0.30.0"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
|
-
"@tanstack/start": "^1.
|
|
66
|
+
"@tanstack/start": "^1.50.1",
|
|
67
67
|
"@types/react": "^18.3.3",
|
|
68
68
|
"@types/react-dom": "^18.3.0",
|
|
69
69
|
"@vitejs/plugin-react": "^4.3.1",
|
|
70
70
|
"react": "^18.3.1",
|
|
71
71
|
"react-dom": "^18.3.1",
|
|
72
|
-
"vite": "^5.4.
|
|
72
|
+
"vite": "^5.4.2"
|
|
73
73
|
},
|
|
74
74
|
"peerDependencies": {
|
|
75
75
|
"@tanstack/start": "^1.43.13",
|
|
@@ -9,13 +9,21 @@ import type { ServerFormState } from './types'
|
|
|
9
9
|
|
|
10
10
|
type OnServerValidateFn<TFormData> = (props: {
|
|
11
11
|
value: TFormData
|
|
12
|
-
}) => ValidationError
|
|
12
|
+
}) => ValidationError | Promise<ValidationError>
|
|
13
|
+
|
|
14
|
+
type OnServerValidateOrFn<
|
|
15
|
+
TFormData,
|
|
16
|
+
TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,
|
|
17
|
+
> =
|
|
18
|
+
TFormValidator extends Validator<TFormData, infer FFN>
|
|
19
|
+
? FFN | OnServerValidateFn<TFormData>
|
|
20
|
+
: OnServerValidateFn<TFormData>
|
|
13
21
|
|
|
14
22
|
interface CreateServerValidateOptions<
|
|
15
23
|
TFormData,
|
|
16
24
|
TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,
|
|
17
25
|
> extends FormOptions<TFormData, TFormValidator> {
|
|
18
|
-
onServerValidate:
|
|
26
|
+
onServerValidate: OnServerValidateOrFn<TFormData, TFormValidator>
|
|
19
27
|
}
|
|
20
28
|
|
|
21
29
|
export const createServerValidate =
|
|
@@ -30,9 +38,9 @@ export const createServerValidate =
|
|
|
30
38
|
async (formData: FormData, info?: Parameters<typeof decode>[1]) => {
|
|
31
39
|
const { validatorAdapter, onServerValidate } = defaultOpts
|
|
32
40
|
|
|
33
|
-
const runValidator = (propsValue: { value: TFormData }) => {
|
|
41
|
+
const runValidator = async (propsValue: { value: TFormData }) => {
|
|
34
42
|
if (validatorAdapter && typeof onServerValidate !== 'function') {
|
|
35
|
-
return validatorAdapter().
|
|
43
|
+
return validatorAdapter().validateAsync(propsValue, onServerValidate)
|
|
36
44
|
}
|
|
37
45
|
|
|
38
46
|
return (onServerValidate as OnServerValidateFn<TFormData>)(propsValue)
|
|
@@ -40,7 +48,7 @@ export const createServerValidate =
|
|
|
40
48
|
|
|
41
49
|
const values = decode(formData, info) as never as TFormData
|
|
42
50
|
|
|
43
|
-
const onServerError = runValidator({ value: values })
|
|
51
|
+
const onServerError = await runValidator({ value: values })
|
|
44
52
|
|
|
45
53
|
if (!onServerError) return
|
|
46
54
|
|
|
@@ -13,13 +13,21 @@ type Ctx = Parameters<FetchFn<FormData, unknown>>[1]
|
|
|
13
13
|
|
|
14
14
|
type OnServerValidateFn<TFormData> = (props: {
|
|
15
15
|
value: TFormData
|
|
16
|
-
}) => ValidationError
|
|
16
|
+
}) => ValidationError | Promise<ValidationError>
|
|
17
|
+
|
|
18
|
+
type OnServerValidateOrFn<
|
|
19
|
+
TFormData,
|
|
20
|
+
TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,
|
|
21
|
+
> =
|
|
22
|
+
TFormValidator extends Validator<TFormData, infer FFN>
|
|
23
|
+
? FFN | OnServerValidateFn<TFormData>
|
|
24
|
+
: OnServerValidateFn<TFormData>
|
|
17
25
|
|
|
18
26
|
interface CreateServerValidateOptions<
|
|
19
27
|
TFormData,
|
|
20
28
|
TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,
|
|
21
29
|
> extends FormOptions<TFormData, TFormValidator> {
|
|
22
|
-
onServerValidate:
|
|
30
|
+
onServerValidate: OnServerValidateOrFn<TFormData, TFormValidator>
|
|
23
31
|
}
|
|
24
32
|
|
|
25
33
|
export const createServerValidate =
|
|
@@ -34,9 +42,9 @@ export const createServerValidate =
|
|
|
34
42
|
async (ctx: Ctx, formData: FormData, info?: Parameters<typeof decode>[1]) => {
|
|
35
43
|
const { validatorAdapter, onServerValidate } = defaultOpts
|
|
36
44
|
|
|
37
|
-
const runValidator = (propsValue: { value: TFormData }) => {
|
|
45
|
+
const runValidator = async (propsValue: { value: TFormData }) => {
|
|
38
46
|
if (validatorAdapter && typeof onServerValidate !== 'function') {
|
|
39
|
-
return validatorAdapter().
|
|
47
|
+
return validatorAdapter().validateAsync(propsValue, onServerValidate)
|
|
40
48
|
}
|
|
41
49
|
|
|
42
50
|
return (onServerValidate as OnServerValidateFn<TFormData>)(propsValue)
|
|
@@ -46,7 +54,7 @@ export const createServerValidate =
|
|
|
46
54
|
|
|
47
55
|
const data = decode(formData, info) as never as TFormData
|
|
48
56
|
|
|
49
|
-
const onServerError = runValidator({ value: data })
|
|
57
|
+
const onServerError = await runValidator({ value: data })
|
|
50
58
|
|
|
51
59
|
if (!onServerError) return
|
|
52
60
|
|