@sourceregistry/sveltekit-enhance 1.0.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.
@@ -0,0 +1,314 @@
1
+ import type { EnhanceErrorHandler, EnhanceInput, MaybePromise } from "../index.js";
2
+ /**
3
+ * A single validation issue produced by a validator.
4
+ */
5
+ export type ValidationIssue = {
6
+ path: string;
7
+ message: string;
8
+ code?: string;
9
+ };
10
+ /**
11
+ * Successful validation result.
12
+ */
13
+ export type ValidationSuccess<T> = {
14
+ success: true;
15
+ data: T;
16
+ };
17
+ /**
18
+ * Failed validation result.
19
+ */
20
+ export type ValidationFailure = {
21
+ success: false;
22
+ errors: ValidationIssue[];
23
+ };
24
+ /**
25
+ * The result returned by all validators.
26
+ */
27
+ export type ValidationResult<T> = ValidationSuccess<T> | ValidationFailure;
28
+ /**
29
+ * Internal path representation used while walking nested values.
30
+ */
31
+ export type ValidationPath = Array<string | number>;
32
+ export type Validator<T> = (value: unknown, path?: ValidationPath) => ValidationResult<T>;
33
+ type AnyValidator = Validator<any>;
34
+ export type InferValidator<V> = V extends Validator<infer T> ? T : never;
35
+ type SchemaOptions = {
36
+ prefix_name?: string;
37
+ unpack_prefixed?: boolean;
38
+ transform?: (value: FormDataEntryValue, key: string, data: FormData) => any;
39
+ processor?: (input: any) => any;
40
+ };
41
+ export declare const reviver: (key: string | undefined, value: any) => any;
42
+ declare const createContext: (data: FormData) => {
43
+ readonly data: FormData;
44
+ has: (...names: string[]) => boolean;
45
+ hasOneOf: (...name: string[]) => boolean;
46
+ string: (name: string) => string | undefined;
47
+ _string: (name: string) => string | null | undefined;
48
+ string$: (name: string) => string;
49
+ pattern$: (name: string, pattern: string | RegExp) => string;
50
+ enum: <E extends Record<string, string | number | any>>(name: string, _enum: E) => keyof E | undefined;
51
+ enum$: <E extends Record<string, string | number | any>>(name: string, _enum: E) => E[keyof E];
52
+ date: (name: string, parser?: (formdata: FormData, name: string) => number | string | Date | undefined) => Date | undefined;
53
+ date$: (name: string, parser?: (formdata: FormData, name: string) => number | string | Date) => Date;
54
+ process: <T, R>(name: string, parser: ((formdata: FormData, name: string) => T) | ((name: string) => T), processor: (val: T, name: string) => R) => R;
55
+ number: (name: string) => number | undefined;
56
+ number$: (name: string) => number | undefined;
57
+ boolean: (name: string) => boolean | undefined;
58
+ boolean$: (name: string) => boolean;
59
+ json: <T = unknown, F = T>(name: string, transformer?: (val: F) => T) => T | undefined;
60
+ jsond: (options: {
61
+ transform?: (value: FormDataEntryValue, key: string, data: FormData) => any;
62
+ processor?: (input: any) => any;
63
+ } & ({
64
+ prefix_name: string;
65
+ unpack_prefixed?: true;
66
+ } | {
67
+ prefix_name?: undefined;
68
+ })) => any;
69
+ json$: <T = unknown, F = T>(name: string, transformer?: (val: F) => T) => T;
70
+ file: (name: string) => File | null | undefined;
71
+ file$: (name: string) => File | undefined;
72
+ files: (name: string) => File[];
73
+ fileRecord: (prefix: string, removePrefix?: boolean) => Record<string, File[]>;
74
+ array: <T>(name: string, mapper?: (item: FormDataEntryValue, index: number, array: FormDataEntryValue[]) => T) => T[] | undefined;
75
+ array$: <T>(name: string, mapper?: (item: FormDataEntryValue, index: number, array: FormDataEntryValue[]) => T) => T[];
76
+ onlyIf: <T = never>(condition: boolean, TRUE: T, FALSE?: undefined) => T | undefined;
77
+ onlyIfPresent: <T = never>(key: string, TRUE: (entry: FormDataEntryValue) => T, FALSE?: undefined) => T | undefined;
78
+ onlyIfArrayPresent: <T, R>(key: string, TRUE: (entries: FormDataEntryValue[]) => T, FALSE: R) => T | R;
79
+ selector: <C extends (A extends true ? { [K in string]: (entries: FormDataEntryValue[], key: K) => T; } : { [K in string]: (entry: FormDataEntryValue, key: K) => T; }) & {
80
+ $error?: (error: unknown) => never;
81
+ $default?: (data: FormData) => T;
82
+ }, A extends boolean = false, T = any>(cases: C, useArray?: A) => ReturnType<C[keyof C]> | undefined;
83
+ selector$: <C extends (A extends true ? { [K in string]: (entries: FormDataEntryValue[], key: K) => T; } : { [K in string]: (entry: FormDataEntryValue, key: K) => T; }) & {
84
+ $error?: (error: unknown) => never;
85
+ $default?: (data: FormData) => T;
86
+ }, A extends boolean = false, T = any>(cases: C, useArray?: A) => ReturnType<C[keyof C]>;
87
+ basedOn: <T = unknown, R = unknown>(val: T, processor?: (val: T) => R) => R;
88
+ record: <T = any>(options?: Partial<{
89
+ transformer: (value: [string, FormDataEntryValue | FormDataEntryValue[]]) => [string, any | any[]];
90
+ filter: (value: [string, FormDataEntryValue[]]) => boolean;
91
+ }>) => T;
92
+ validate: <T extends Validator<any>>(schema: T, options?: SchemaOptions) => InferValidator<T>;
93
+ };
94
+ export type FormContext = ReturnType<typeof createContext>;
95
+ export declare function hasOneOf(formdata: FormData, names: string[]): boolean;
96
+ export declare function string(formdata: FormData, name: string): string | null | undefined;
97
+ export declare function string$(formdata: FormData, name: string): string;
98
+ /**
99
+ * Reads a required string and validates it against a regex pattern.
100
+ * Accepts either a prebuilt `RegExp` or a pattern string.
101
+ * Throws a SvelteKit `fail(400)` callback when required checks fail.
102
+ */
103
+ export declare function pattern$(formdata: FormData, name: string, pattern: string | RegExp): string;
104
+ export declare function number(formdata: FormData, name: string): number | undefined;
105
+ export declare function number$(formdata: FormData, name: string): number | undefined;
106
+ export declare function boolean(formdata: FormData, name: string): boolean | undefined;
107
+ export declare function boolean$(formdata: FormData, name: string): boolean;
108
+ export declare function date(formdata: FormData, name: string, parser?: (formdata: FormData, name: string) => number | string | Date | undefined): Date | undefined;
109
+ export declare function date$(formdata: FormData, name: string, parser: (formdata: FormData, name: string) => number | string | Date): Date;
110
+ export declare function json<T = unknown, F = T>(formdata: FormData, name: string, transformer?: (val: F) => T): T | undefined;
111
+ export declare function record(formdata: FormData, options?: Partial<{
112
+ transformer: (value: [string, FormDataEntryValue | FormDataEntryValue[]]) => [string, any | any[]];
113
+ filter: (value: [string, FormDataEntryValue[]]) => boolean;
114
+ }>): {
115
+ [k: string]: FormDataEntryValue | FormDataEntryValue[];
116
+ };
117
+ export declare function json$<T = unknown, F = T>(formdata: FormData, name: string, transformer?: (val: F) => T): T;
118
+ export declare function jsond(formdata: FormData, options?: {
119
+ prefix_name?: string;
120
+ unpack_prefixed?: boolean;
121
+ transform?: (value: FormDataEntryValue, key: string, data: FormData) => any;
122
+ processor?: (input: any) => any;
123
+ }): any;
124
+ export declare function file(formdata: FormData, name: string): File | null | undefined;
125
+ export declare function fileRecord(formdata: FormData, prefix: string, removePrefix?: boolean): Record<string, File[]>;
126
+ export declare function file$(formdata: FormData, name: string): File | undefined;
127
+ export declare function files(formdata: FormData, name: string): File[];
128
+ export declare function array<T>(formdata: FormData, name: string, mapper?: (item: FormDataEntryValue, index: number, array: FormDataEntryValue[]) => T): T[] | undefined;
129
+ export declare function array$<T>(formdata: FormData, name: string, mapper?: (item: FormDataEntryValue, index: number, array: FormDataEntryValue[]) => T): T[];
130
+ /**
131
+ * TODO not compliant with enum standard but works for now
132
+ * @param formdata
133
+ * @param name
134
+ * @param _enum
135
+ */
136
+ export declare function Enum<E extends Record<string, string | number | any>>(formdata: FormData, name: string, _enum: E): keyof E | undefined;
137
+ /**
138
+ * TODO not compliant with enum standard but works for now
139
+ * @param formdata
140
+ * @param name
141
+ * @param _enum
142
+ */
143
+ export declare function Enum$<E extends Record<string, string | number | any>>(formdata: FormData, name: string, _enum: E): E[keyof E];
144
+ export declare function OldArray<T = string>(formdata: FormData, name: string, parser: (input: {
145
+ data: string;
146
+ }) => T[]): T[];
147
+ export declare function arrayString<T = string>(formdata: FormData, name: string, delimiter: string, mapper?: (item: string) => T): T[];
148
+ export declare function onlyIf<T = never>(condition: boolean, TRUE: T, FALSE?: undefined): T | undefined;
149
+ export declare function onlyIfPresent<T = never>(formdata: FormData, key: string, TRUE: (entry: FormDataEntryValue) => T, FALSE?: undefined): T | undefined;
150
+ export declare function onlyIfArrayPresent<T, R>(formdata: FormData, key: string, TRUE: (entries: FormDataEntryValue[]) => T, FALSE: R): T | R;
151
+ export declare function basedOn<T = unknown, R = unknown>(val: T, processor?: (val: T) => R): R;
152
+ export declare function selector<C extends (A extends true ? {
153
+ [K in string]: (entries: FormDataEntryValue[], key: K) => T;
154
+ } : {
155
+ [K in string]: (entry: FormDataEntryValue, key: K) => T;
156
+ }) & {
157
+ $error?: (error: unknown) => never;
158
+ $default?: (data: FormData) => T;
159
+ }, A extends boolean = false, T = any>(formData: FormData, cases: C, useArray?: A): ReturnType<C[keyof C]> | undefined;
160
+ export declare function selector$<C extends (A extends true ? {
161
+ [K in string]: (entries: FormDataEntryValue[], key: K) => T;
162
+ } : {
163
+ [K in string]: (entry: FormDataEntryValue, key: K) => T;
164
+ }) & {
165
+ $error?: (error: unknown) => never;
166
+ $default?: (data: FormData) => T;
167
+ }, A extends boolean = false, T = any>(formData: FormData, cases: C, useArray?: A): NonNullable<ReturnType<C[keyof C]>>;
168
+ export declare function handle<T>(data: MaybePromise<FormData> | Request, fn: (input: {
169
+ data: FormData;
170
+ form: FormContext;
171
+ }) => MaybePromise<T>, ...errorHandlers: EnhanceErrorHandler[]): Promise<T>;
172
+ export declare function enhance(input: EnhanceInput): Promise<{
173
+ form: FormContext;
174
+ }>;
175
+ export declare function process<T, R>(formdata: FormData, name: string, parser: (formdata: FormData, name: string) => T, processor: (val: T, name: string) => R): R;
176
+ export declare function validate<const T extends AnyValidator>(formdata: FormData, validator: T, options?: SchemaOptions): InferValidator<T>;
177
+ export declare const schema: <const T extends AnyValidator>(validator: T, options?: SchemaOptions) => (input: EnhanceInput) => Promise<{
178
+ readonly form: {
179
+ readonly result: InferValidator<T>;
180
+ readonly data: FormData;
181
+ readonly has: (...names: string[]) => boolean;
182
+ readonly hasOneOf: (...name: string[]) => boolean;
183
+ readonly string: (name: string) => string | undefined;
184
+ readonly _string: (name: string) => string | null | undefined;
185
+ readonly string$: (name: string) => string;
186
+ readonly pattern$: (name: string, pattern: string | RegExp) => string;
187
+ readonly enum: <E extends Record<string, string | number | any>>(name: string, _enum: E) => keyof E | undefined;
188
+ readonly enum$: <E extends Record<string, string | number | any>>(name: string, _enum: E) => E[keyof E];
189
+ readonly date: (name: string, parser?: (formdata: FormData, name: string) => number | string | Date | undefined) => Date | undefined;
190
+ readonly date$: (name: string, parser?: (formdata: FormData, name: string) => number | string | Date) => Date;
191
+ readonly process: <T_1, R>(name: string, parser: ((formdata: FormData, name: string) => T_1) | ((name: string) => T_1), processor: (val: T_1, name: string) => R) => R;
192
+ readonly number: (name: string) => number | undefined;
193
+ readonly number$: (name: string) => number | undefined;
194
+ readonly boolean: (name: string) => boolean | undefined;
195
+ readonly boolean$: (name: string) => boolean;
196
+ readonly json: <T_1 = unknown, F = T_1>(name: string, transformer?: (val: F) => T_1) => T_1 | undefined;
197
+ readonly jsond: (options: {
198
+ transform?: (value: FormDataEntryValue, key: string, data: FormData) => any;
199
+ processor?: (input: any) => any;
200
+ } & ({
201
+ prefix_name: string;
202
+ unpack_prefixed?: true;
203
+ } | {
204
+ prefix_name?: undefined;
205
+ })) => any;
206
+ readonly json$: <T_1 = unknown, F_1 = T_1>(name: string, transformer?: (val: F_1) => T_1) => T_1;
207
+ readonly file: (name: string) => File | null | undefined;
208
+ readonly file$: (name: string) => File | undefined;
209
+ readonly files: (name: string) => File[];
210
+ readonly fileRecord: (prefix: string, removePrefix?: boolean) => Record<string, File[]>;
211
+ readonly array: <T_1>(name: string, mapper?: (item: FormDataEntryValue, index: number, array: FormDataEntryValue[]) => T_1) => T_1[] | undefined;
212
+ readonly array$: <T_1>(name: string, mapper?: (item: FormDataEntryValue, index: number, array: FormDataEntryValue[]) => T_1) => T_1[];
213
+ readonly onlyIf: <T_1 = never>(condition: boolean, TRUE: T_1, FALSE?: undefined) => T_1 | undefined;
214
+ readonly onlyIfPresent: <T_1 = never>(key: string, TRUE: (entry: FormDataEntryValue) => T_1, FALSE?: undefined) => T_1 | undefined;
215
+ readonly onlyIfArrayPresent: <T_1, R_1>(key: string, TRUE: (entries: FormDataEntryValue[]) => T_1, FALSE: R_1) => T_1 | R_1;
216
+ readonly selector: <C extends (A extends true ? { [K in string]: (entries: FormDataEntryValue[], key: K) => T_1; } : { [K in string]: (entry: FormDataEntryValue, key: K) => T_1; }) & {
217
+ $error?: (error: unknown) => never;
218
+ $default?: (data: FormData) => T_1;
219
+ }, A extends boolean = false, T_1 = any>(cases: C, useArray?: A) => ReturnType<C[keyof C]> | undefined;
220
+ readonly selector$: <C extends (A_1 extends true ? { [K in string]: (entries: FormDataEntryValue[], key: K) => T_2; } : { [K in string]: (entry: FormDataEntryValue, key: K) => T_2; }) & {
221
+ $error?: (error: unknown) => never;
222
+ $default?: (data: FormData) => T_2;
223
+ }, A_1 extends boolean = false, T_2 = any>(cases: C, useArray?: A_1) => ReturnType<C[keyof C]>;
224
+ readonly basedOn: <T_3 = unknown, R_2 = unknown>(val: T_3, processor?: (val: T_3) => R_2) => R_2;
225
+ readonly record: <T_3 = any>(options?: Partial<{
226
+ transformer: (value: [string, FormDataEntryValue | FormDataEntryValue[]]) => [string, any | any[]];
227
+ filter: (value: [string, FormDataEntryValue[]]) => boolean;
228
+ }>) => T_3;
229
+ readonly validate: <T_3 extends Validator<any>>(schema: T_3, options?: SchemaOptions) => InferValidator<T_3>;
230
+ };
231
+ }>;
232
+ export declare const Form: {
233
+ string: typeof string;
234
+ string$: typeof string$;
235
+ number: typeof number;
236
+ number$: typeof number$;
237
+ boolean: typeof boolean;
238
+ boolean$: typeof boolean$;
239
+ date: typeof date;
240
+ date$: typeof date$;
241
+ file: typeof file;
242
+ file$: typeof file$;
243
+ files: typeof files;
244
+ array: typeof array;
245
+ array$: typeof array$;
246
+ json: typeof json;
247
+ json$: typeof json$;
248
+ jsond: typeof jsond;
249
+ process: typeof process;
250
+ validate: typeof validate;
251
+ onlyIf: typeof onlyIf;
252
+ onlyIfPresent: typeof onlyIfPresent;
253
+ onlyIfArrayPresent: typeof onlyIfArrayPresent;
254
+ selector: typeof selector;
255
+ selector$: typeof selector$;
256
+ enhance: typeof enhance;
257
+ schema: <const T extends AnyValidator>(validator: T, options?: SchemaOptions) => (input: EnhanceInput) => Promise<{
258
+ readonly form: {
259
+ readonly result: InferValidator<T>;
260
+ readonly data: FormData;
261
+ readonly has: (...names: string[]) => boolean;
262
+ readonly hasOneOf: (...name: string[]) => boolean;
263
+ readonly string: (name: string) => string | undefined;
264
+ readonly _string: (name: string) => string | null | undefined;
265
+ readonly string$: (name: string) => string;
266
+ readonly pattern$: (name: string, pattern: string | RegExp) => string;
267
+ readonly enum: <E extends Record<string, string | number | any>>(name: string, _enum: E) => keyof E | undefined;
268
+ readonly enum$: <E extends Record<string, string | number | any>>(name: string, _enum: E) => E[keyof E];
269
+ readonly date: (name: string, parser?: (formdata: FormData, name: string) => number | string | Date | undefined) => Date | undefined;
270
+ readonly date$: (name: string, parser?: (formdata: FormData, name: string) => number | string | Date) => Date;
271
+ readonly process: <T_1, R>(name: string, parser: ((formdata: FormData, name: string) => T_1) | ((name: string) => T_1), processor: (val: T_1, name: string) => R) => R;
272
+ readonly number: (name: string) => number | undefined;
273
+ readonly number$: (name: string) => number | undefined;
274
+ readonly boolean: (name: string) => boolean | undefined;
275
+ readonly boolean$: (name: string) => boolean;
276
+ readonly json: <T_1 = unknown, F = T_1>(name: string, transformer?: (val: F) => T_1) => T_1 | undefined;
277
+ readonly jsond: (options: {
278
+ transform?: (value: FormDataEntryValue, key: string, data: FormData) => any;
279
+ processor?: (input: any) => any;
280
+ } & ({
281
+ prefix_name: string;
282
+ unpack_prefixed?: true;
283
+ } | {
284
+ prefix_name?: undefined;
285
+ })) => any;
286
+ readonly json$: <T_1 = unknown, F_1 = T_1>(name: string, transformer?: (val: F_1) => T_1) => T_1;
287
+ readonly file: (name: string) => File | null | undefined;
288
+ readonly file$: (name: string) => File | undefined;
289
+ readonly files: (name: string) => File[];
290
+ readonly fileRecord: (prefix: string, removePrefix?: boolean) => Record<string, File[]>;
291
+ readonly array: <T_1>(name: string, mapper?: (item: FormDataEntryValue, index: number, array: FormDataEntryValue[]) => T_1) => T_1[] | undefined;
292
+ readonly array$: <T_1>(name: string, mapper?: (item: FormDataEntryValue, index: number, array: FormDataEntryValue[]) => T_1) => T_1[];
293
+ readonly onlyIf: <T_1 = never>(condition: boolean, TRUE: T_1, FALSE?: undefined) => T_1 | undefined;
294
+ readonly onlyIfPresent: <T_1 = never>(key: string, TRUE: (entry: FormDataEntryValue) => T_1, FALSE?: undefined) => T_1 | undefined;
295
+ readonly onlyIfArrayPresent: <T_1, R_1>(key: string, TRUE: (entries: FormDataEntryValue[]) => T_1, FALSE: R_1) => T_1 | R_1;
296
+ readonly selector: <C extends (A extends true ? { [K in string]: (entries: FormDataEntryValue[], key: K) => T_1; } : { [K in string]: (entry: FormDataEntryValue, key: K) => T_1; }) & {
297
+ $error?: (error: unknown) => never;
298
+ $default?: (data: FormData) => T_1;
299
+ }, A extends boolean = false, T_1 = any>(cases: C, useArray?: A) => ReturnType<C[keyof C]> | undefined;
300
+ readonly selector$: <C extends (A_1 extends true ? { [K in string]: (entries: FormDataEntryValue[], key: K) => T_2; } : { [K in string]: (entry: FormDataEntryValue, key: K) => T_2; }) & {
301
+ $error?: (error: unknown) => never;
302
+ $default?: (data: FormData) => T_2;
303
+ }, A_1 extends boolean = false, T_2 = any>(cases: C, useArray?: A_1) => ReturnType<C[keyof C]>;
304
+ readonly basedOn: <T_3 = unknown, R_2 = unknown>(val: T_3, processor?: (val: T_3) => R_2) => R_2;
305
+ readonly record: <T_3 = any>(options?: Partial<{
306
+ transformer: (value: [string, FormDataEntryValue | FormDataEntryValue[]]) => [string, any | any[]];
307
+ filter: (value: [string, FormDataEntryValue[]]) => boolean;
308
+ }>) => T_3;
309
+ readonly validate: <T_3 extends Validator<any>>(schema: T_3, options?: SchemaOptions) => InferValidator<T_3>;
310
+ };
311
+ }>;
312
+ handle: typeof handle;
313
+ };
314
+ export {};