zustic 1.1.1 → 1.1.3
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/hook-form/index.d.mts +221 -10
- package/dist/hook-form/index.d.ts +221 -10
- package/dist/hook-form/index.js +1 -1
- package/dist/hook-form/index.mjs +1 -1
- package/dist/query/index.d.mts +19 -2
- package/dist/query/index.d.ts +19 -2
- package/dist/query/index.js +1 -1
- package/dist/query/index.mjs +1 -1
- package/package.json +1 -1
|
@@ -1,16 +1,68 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React$1 from 'react';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Required field validation rule.
|
|
5
|
+
* Can be a simple boolean or an object with custom error message.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* // Simple required
|
|
9
|
+
* required: true
|
|
10
|
+
*
|
|
11
|
+
* // With custom message
|
|
12
|
+
* required: { value: true, message: "Email is required" }
|
|
13
|
+
*/
|
|
3
14
|
type RequiredRule = boolean | {
|
|
4
15
|
value: boolean;
|
|
5
16
|
message: string;
|
|
6
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* Numeric validation rule for min/max constraints.
|
|
20
|
+
* Can be a plain number or an object with custom error message.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // Simple min value
|
|
24
|
+
* min: 18
|
|
25
|
+
*
|
|
26
|
+
* // With custom message
|
|
27
|
+
* min: { value: 18, message: "Must be 18 or older" }
|
|
28
|
+
*/
|
|
7
29
|
type NumberRule = number | {
|
|
8
30
|
value: number;
|
|
9
31
|
message: string;
|
|
10
32
|
};
|
|
33
|
+
/**
|
|
34
|
+
* Individual form field state and configuration.
|
|
35
|
+
* Tracks value, error, validation rules, and user interaction state.
|
|
36
|
+
*
|
|
37
|
+
* @template T - The type of the field value
|
|
38
|
+
*
|
|
39
|
+
* @property value - Current field value
|
|
40
|
+
* @property error - Current error message (if any)
|
|
41
|
+
* @property touched - Whether field has been focused/interacted with
|
|
42
|
+
* @property isDirty - Whether field has been modified from initial value
|
|
43
|
+
* @property required - Required validation rule
|
|
44
|
+
* @property pattern - Regex pattern for string validation
|
|
45
|
+
* @property min - Minimum value or length
|
|
46
|
+
* @property max - Maximum value or length
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* const emailField: Field<string> = {
|
|
50
|
+
* value: "",
|
|
51
|
+
* error: null,
|
|
52
|
+
* touched: false,
|
|
53
|
+
* isDirty: false,
|
|
54
|
+
* required: { value: true, message: "Email is required" },
|
|
55
|
+
* pattern: {
|
|
56
|
+
* value: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
|
|
57
|
+
* message: "Invalid email format"
|
|
58
|
+
* }
|
|
59
|
+
* }
|
|
60
|
+
*/
|
|
11
61
|
type Field<T> = {
|
|
12
62
|
value: T;
|
|
13
63
|
error?: string | null;
|
|
64
|
+
touched?: boolean;
|
|
65
|
+
isDirty?: boolean;
|
|
14
66
|
required?: RequiredRule;
|
|
15
67
|
pattern?: {
|
|
16
68
|
value: RegExp;
|
|
@@ -19,22 +71,111 @@ type Field<T> = {
|
|
|
19
71
|
min?: NumberRule;
|
|
20
72
|
max?: NumberRule;
|
|
21
73
|
};
|
|
22
|
-
|
|
74
|
+
/**
|
|
75
|
+
* Validation resolver result containing validated values and errors.
|
|
76
|
+
* Used as return type for custom validation resolvers (Zod, Yup, etc).
|
|
77
|
+
*
|
|
78
|
+
* @template T - Type of form values
|
|
79
|
+
* @property values - Validated values if validation passes
|
|
80
|
+
* @property errors - Object containing field-level errors if validation fails
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* // Successful validation
|
|
84
|
+
* { values: { email: "user@example.com", age: 25 } }
|
|
85
|
+
*
|
|
86
|
+
* // Failed validation
|
|
87
|
+
* { errors: { email: "Invalid email", age: "Must be 18+" } }
|
|
88
|
+
*/
|
|
89
|
+
type ResolverResult<T extends Record<string, any>> = {
|
|
23
90
|
values?: T;
|
|
24
91
|
errors?: Partial<Record<keyof T, string>>;
|
|
25
92
|
};
|
|
26
|
-
|
|
27
|
-
|
|
93
|
+
/**
|
|
94
|
+
* Custom validation resolver function for external validation libraries.
|
|
95
|
+
* Can be synchronous or asynchronous.
|
|
96
|
+
*
|
|
97
|
+
* @template T - Type of form values
|
|
98
|
+
* @param values - Current form values to validate
|
|
99
|
+
* @returns Validation result with values or errors
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* // Zod resolver
|
|
103
|
+
* const schema = z.object({
|
|
104
|
+
* email: z.string().email(),
|
|
105
|
+
* password: z.string().min(8)
|
|
106
|
+
* });
|
|
107
|
+
*
|
|
108
|
+
* const resolver = async (values) => {
|
|
109
|
+
* const result = schema.safeParse(values);
|
|
110
|
+
* if (result.success) {
|
|
111
|
+
* return { values: result.data };
|
|
112
|
+
* }
|
|
113
|
+
* const errors = {};
|
|
114
|
+
* result.error.issues.forEach(issue => {
|
|
115
|
+
* errors[issue.path[0]] = issue.message;
|
|
116
|
+
* });
|
|
117
|
+
* return { errors };
|
|
118
|
+
* };
|
|
119
|
+
*/
|
|
120
|
+
type Resolver<T extends Record<string, any>> = (values: T) => ResolverResult<T> | Promise<ResolverResult<T>>;
|
|
121
|
+
/**
|
|
122
|
+
* Configuration parameters for form creation.
|
|
123
|
+
* Defines initial values and optional custom validation.
|
|
124
|
+
*
|
|
125
|
+
* @template T - Type of form values (must be an object)
|
|
126
|
+
* @property defaultValues - Initial field values with optional validation rules
|
|
127
|
+
* @property resolver - Optional custom validation function (Zod, Yup, etc)
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* const params: HookFormParams<{ email: string; age: number }> = {
|
|
131
|
+
* defaultValues: {
|
|
132
|
+
* email: {
|
|
133
|
+
* value: "",
|
|
134
|
+
* required: { value: true, message: "Email is required" }
|
|
135
|
+
* },
|
|
136
|
+
* age: { value: 0, min: 18 }
|
|
137
|
+
* },
|
|
138
|
+
* resolver: zodResolver(schema)
|
|
139
|
+
* }
|
|
140
|
+
*/
|
|
141
|
+
interface HookFormParams<T extends Record<string, any>> {
|
|
28
142
|
defaultValues: {
|
|
29
143
|
[K in keyof T]: Field<T[K]> | T[K];
|
|
30
144
|
};
|
|
31
145
|
resolver?: Resolver<T>;
|
|
32
146
|
}
|
|
33
|
-
|
|
147
|
+
/**
|
|
148
|
+
* Props for the Controller component.
|
|
149
|
+
* Configures controlled input rendering and additional input properties.
|
|
150
|
+
*
|
|
151
|
+
* @template T - Type of form values
|
|
152
|
+
* @property field - The field name being controlled
|
|
153
|
+
* @property render - Function that renders the input element with form props
|
|
154
|
+
* @property autoFocus - Auto-focus this input on mount
|
|
155
|
+
* @property onBlur - Custom callback when input loses focus
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* const props: ControllerProps<FormData> = {
|
|
159
|
+
* field: "email",
|
|
160
|
+
* onBlur: () => console.log("Email field blurred"),
|
|
161
|
+
* render: (field) => (
|
|
162
|
+
* <input
|
|
163
|
+
* value={field.value}
|
|
164
|
+
* onChange={(e) => field.onChange(e.target.value)}
|
|
165
|
+
* ref={field.ref}
|
|
166
|
+
* disabled={field.disabled}
|
|
167
|
+
* />
|
|
168
|
+
* )
|
|
169
|
+
* }
|
|
170
|
+
*/
|
|
171
|
+
interface ControllerProps<T extends Record<string, any>> {
|
|
34
172
|
field: keyof T;
|
|
35
|
-
render: (
|
|
173
|
+
render: (field: {
|
|
174
|
+
value: any;
|
|
175
|
+
error: string;
|
|
176
|
+
onChange: (value: string) => void;
|
|
177
|
+
}) => React.ReactNode;
|
|
36
178
|
}
|
|
37
|
-
type HandleSubmitType<T> = (cb: (data: T) => void) => (e: React.FormEvent<HTMLFormElement>) => void;
|
|
38
179
|
|
|
39
180
|
/**
|
|
40
181
|
* Creates a Zod resolver for form validation.
|
|
@@ -72,9 +213,79 @@ declare const yupResolver: (schema: any) => (values: any) => Promise<{
|
|
|
72
213
|
values?: undefined;
|
|
73
214
|
}>;
|
|
74
215
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
216
|
+
/**
|
|
217
|
+
* Creates a type-safe form with validation, state management, and controller components.
|
|
218
|
+
* Supports both built-in validation and custom resolvers (Zod, Yup).
|
|
219
|
+
*
|
|
220
|
+
* @template T - Form values type (must be an object)
|
|
221
|
+
* @param params - Form configuration
|
|
222
|
+
* @param params.defaultValues - Default field values with optional validation rules
|
|
223
|
+
* @param params.resolver - Optional custom validation resolver (Zod or Yup)
|
|
224
|
+
* @returns A hook function that returns form methods and Controller component
|
|
225
|
+
*
|
|
226
|
+
* @example
|
|
227
|
+
* // Using built-in validation
|
|
228
|
+
* const form = createForm<{ email: string; age: number }>({
|
|
229
|
+
* defaultValues: {
|
|
230
|
+
* email: {
|
|
231
|
+
* value: "",
|
|
232
|
+
* required: { value: true, message: "Email is required" },
|
|
233
|
+
* pattern: { value: /^[^\s@]+@[^\s@]+\.[^\s@]+$/, message: "Invalid email" }
|
|
234
|
+
* },
|
|
235
|
+
* age: {
|
|
236
|
+
* value: 0,
|
|
237
|
+
* required: true,
|
|
238
|
+
* min: { value: 18, message: "Must be 18+" }
|
|
239
|
+
* }
|
|
240
|
+
* }
|
|
241
|
+
* });
|
|
242
|
+
*
|
|
243
|
+
* const { handleSubmit, Controller } = form();
|
|
244
|
+
*
|
|
245
|
+
* // In your component:
|
|
246
|
+
* // <form onSubmit={handleSubmit((data) => console.log(data))}>
|
|
247
|
+
* // <Controller
|
|
248
|
+
* // field="email"
|
|
249
|
+
* // render={(value, error, onChange) => (
|
|
250
|
+
* // <div>
|
|
251
|
+
* // <input value={value} onChange={(e) => onChange(e.target.value)} />
|
|
252
|
+
* // {error && <span>{error}</span>}
|
|
253
|
+
* // </div>
|
|
254
|
+
* // )}
|
|
255
|
+
* // />
|
|
256
|
+
* // </form>
|
|
257
|
+
*
|
|
258
|
+
* @example
|
|
259
|
+
* // Using Zod resolver
|
|
260
|
+
* import { z } from 'zod';
|
|
261
|
+
* import { zodResolver } from './index';
|
|
262
|
+
*
|
|
263
|
+
* const schema = z.object({
|
|
264
|
+
* email: z.string().email("Invalid email"),
|
|
265
|
+
* password: z.string().min(8, "Min 8 characters")
|
|
266
|
+
* });
|
|
267
|
+
*
|
|
268
|
+
* const form = createForm({
|
|
269
|
+
* defaultValues: {
|
|
270
|
+
* email: "",
|
|
271
|
+
* password: ""
|
|
272
|
+
* },
|
|
273
|
+
* resolver: zodResolver(schema)
|
|
274
|
+
* });
|
|
275
|
+
*/
|
|
276
|
+
declare function createForm<T extends Record<string, any>>(params: HookFormParams<T>): () => {
|
|
277
|
+
handleSubmit: (cb: (data: T) => void) => (e: React$1.FormEvent<HTMLFormElement>) => Promise<void>;
|
|
278
|
+
Controller: ({ field, render }: ControllerProps<T>) => React$1.ReactNode;
|
|
279
|
+
setValue: (key: keyof T, value: T[keyof T]) => void;
|
|
280
|
+
getvalues: (key?: keyof T | undefined) => void;
|
|
281
|
+
getErrors: (key?: keyof T | undefined) => string | Partial<Record<keyof T, string>>;
|
|
282
|
+
setError: (field: keyof T, error: string) => void;
|
|
283
|
+
reset: () => void;
|
|
284
|
+
watch: (key: keyof T) => T[keyof T];
|
|
285
|
+
setTouched: (field: keyof T, touched: boolean) => void;
|
|
286
|
+
isDirty: (field?: keyof T | undefined) => boolean;
|
|
287
|
+
clearAllErrors: () => void;
|
|
288
|
+
clearFieldError: (field: keyof T) => void;
|
|
78
289
|
};
|
|
79
290
|
|
|
80
291
|
export { createForm, yupResolver, zodResolver };
|
|
@@ -1,16 +1,68 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React$1 from 'react';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Required field validation rule.
|
|
5
|
+
* Can be a simple boolean or an object with custom error message.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* // Simple required
|
|
9
|
+
* required: true
|
|
10
|
+
*
|
|
11
|
+
* // With custom message
|
|
12
|
+
* required: { value: true, message: "Email is required" }
|
|
13
|
+
*/
|
|
3
14
|
type RequiredRule = boolean | {
|
|
4
15
|
value: boolean;
|
|
5
16
|
message: string;
|
|
6
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* Numeric validation rule for min/max constraints.
|
|
20
|
+
* Can be a plain number or an object with custom error message.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // Simple min value
|
|
24
|
+
* min: 18
|
|
25
|
+
*
|
|
26
|
+
* // With custom message
|
|
27
|
+
* min: { value: 18, message: "Must be 18 or older" }
|
|
28
|
+
*/
|
|
7
29
|
type NumberRule = number | {
|
|
8
30
|
value: number;
|
|
9
31
|
message: string;
|
|
10
32
|
};
|
|
33
|
+
/**
|
|
34
|
+
* Individual form field state and configuration.
|
|
35
|
+
* Tracks value, error, validation rules, and user interaction state.
|
|
36
|
+
*
|
|
37
|
+
* @template T - The type of the field value
|
|
38
|
+
*
|
|
39
|
+
* @property value - Current field value
|
|
40
|
+
* @property error - Current error message (if any)
|
|
41
|
+
* @property touched - Whether field has been focused/interacted with
|
|
42
|
+
* @property isDirty - Whether field has been modified from initial value
|
|
43
|
+
* @property required - Required validation rule
|
|
44
|
+
* @property pattern - Regex pattern for string validation
|
|
45
|
+
* @property min - Minimum value or length
|
|
46
|
+
* @property max - Maximum value or length
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* const emailField: Field<string> = {
|
|
50
|
+
* value: "",
|
|
51
|
+
* error: null,
|
|
52
|
+
* touched: false,
|
|
53
|
+
* isDirty: false,
|
|
54
|
+
* required: { value: true, message: "Email is required" },
|
|
55
|
+
* pattern: {
|
|
56
|
+
* value: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
|
|
57
|
+
* message: "Invalid email format"
|
|
58
|
+
* }
|
|
59
|
+
* }
|
|
60
|
+
*/
|
|
11
61
|
type Field<T> = {
|
|
12
62
|
value: T;
|
|
13
63
|
error?: string | null;
|
|
64
|
+
touched?: boolean;
|
|
65
|
+
isDirty?: boolean;
|
|
14
66
|
required?: RequiredRule;
|
|
15
67
|
pattern?: {
|
|
16
68
|
value: RegExp;
|
|
@@ -19,22 +71,111 @@ type Field<T> = {
|
|
|
19
71
|
min?: NumberRule;
|
|
20
72
|
max?: NumberRule;
|
|
21
73
|
};
|
|
22
|
-
|
|
74
|
+
/**
|
|
75
|
+
* Validation resolver result containing validated values and errors.
|
|
76
|
+
* Used as return type for custom validation resolvers (Zod, Yup, etc).
|
|
77
|
+
*
|
|
78
|
+
* @template T - Type of form values
|
|
79
|
+
* @property values - Validated values if validation passes
|
|
80
|
+
* @property errors - Object containing field-level errors if validation fails
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* // Successful validation
|
|
84
|
+
* { values: { email: "user@example.com", age: 25 } }
|
|
85
|
+
*
|
|
86
|
+
* // Failed validation
|
|
87
|
+
* { errors: { email: "Invalid email", age: "Must be 18+" } }
|
|
88
|
+
*/
|
|
89
|
+
type ResolverResult<T extends Record<string, any>> = {
|
|
23
90
|
values?: T;
|
|
24
91
|
errors?: Partial<Record<keyof T, string>>;
|
|
25
92
|
};
|
|
26
|
-
|
|
27
|
-
|
|
93
|
+
/**
|
|
94
|
+
* Custom validation resolver function for external validation libraries.
|
|
95
|
+
* Can be synchronous or asynchronous.
|
|
96
|
+
*
|
|
97
|
+
* @template T - Type of form values
|
|
98
|
+
* @param values - Current form values to validate
|
|
99
|
+
* @returns Validation result with values or errors
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* // Zod resolver
|
|
103
|
+
* const schema = z.object({
|
|
104
|
+
* email: z.string().email(),
|
|
105
|
+
* password: z.string().min(8)
|
|
106
|
+
* });
|
|
107
|
+
*
|
|
108
|
+
* const resolver = async (values) => {
|
|
109
|
+
* const result = schema.safeParse(values);
|
|
110
|
+
* if (result.success) {
|
|
111
|
+
* return { values: result.data };
|
|
112
|
+
* }
|
|
113
|
+
* const errors = {};
|
|
114
|
+
* result.error.issues.forEach(issue => {
|
|
115
|
+
* errors[issue.path[0]] = issue.message;
|
|
116
|
+
* });
|
|
117
|
+
* return { errors };
|
|
118
|
+
* };
|
|
119
|
+
*/
|
|
120
|
+
type Resolver<T extends Record<string, any>> = (values: T) => ResolverResult<T> | Promise<ResolverResult<T>>;
|
|
121
|
+
/**
|
|
122
|
+
* Configuration parameters for form creation.
|
|
123
|
+
* Defines initial values and optional custom validation.
|
|
124
|
+
*
|
|
125
|
+
* @template T - Type of form values (must be an object)
|
|
126
|
+
* @property defaultValues - Initial field values with optional validation rules
|
|
127
|
+
* @property resolver - Optional custom validation function (Zod, Yup, etc)
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* const params: HookFormParams<{ email: string; age: number }> = {
|
|
131
|
+
* defaultValues: {
|
|
132
|
+
* email: {
|
|
133
|
+
* value: "",
|
|
134
|
+
* required: { value: true, message: "Email is required" }
|
|
135
|
+
* },
|
|
136
|
+
* age: { value: 0, min: 18 }
|
|
137
|
+
* },
|
|
138
|
+
* resolver: zodResolver(schema)
|
|
139
|
+
* }
|
|
140
|
+
*/
|
|
141
|
+
interface HookFormParams<T extends Record<string, any>> {
|
|
28
142
|
defaultValues: {
|
|
29
143
|
[K in keyof T]: Field<T[K]> | T[K];
|
|
30
144
|
};
|
|
31
145
|
resolver?: Resolver<T>;
|
|
32
146
|
}
|
|
33
|
-
|
|
147
|
+
/**
|
|
148
|
+
* Props for the Controller component.
|
|
149
|
+
* Configures controlled input rendering and additional input properties.
|
|
150
|
+
*
|
|
151
|
+
* @template T - Type of form values
|
|
152
|
+
* @property field - The field name being controlled
|
|
153
|
+
* @property render - Function that renders the input element with form props
|
|
154
|
+
* @property autoFocus - Auto-focus this input on mount
|
|
155
|
+
* @property onBlur - Custom callback when input loses focus
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* const props: ControllerProps<FormData> = {
|
|
159
|
+
* field: "email",
|
|
160
|
+
* onBlur: () => console.log("Email field blurred"),
|
|
161
|
+
* render: (field) => (
|
|
162
|
+
* <input
|
|
163
|
+
* value={field.value}
|
|
164
|
+
* onChange={(e) => field.onChange(e.target.value)}
|
|
165
|
+
* ref={field.ref}
|
|
166
|
+
* disabled={field.disabled}
|
|
167
|
+
* />
|
|
168
|
+
* )
|
|
169
|
+
* }
|
|
170
|
+
*/
|
|
171
|
+
interface ControllerProps<T extends Record<string, any>> {
|
|
34
172
|
field: keyof T;
|
|
35
|
-
render: (
|
|
173
|
+
render: (field: {
|
|
174
|
+
value: any;
|
|
175
|
+
error: string;
|
|
176
|
+
onChange: (value: string) => void;
|
|
177
|
+
}) => React.ReactNode;
|
|
36
178
|
}
|
|
37
|
-
type HandleSubmitType<T> = (cb: (data: T) => void) => (e: React.FormEvent<HTMLFormElement>) => void;
|
|
38
179
|
|
|
39
180
|
/**
|
|
40
181
|
* Creates a Zod resolver for form validation.
|
|
@@ -72,9 +213,79 @@ declare const yupResolver: (schema: any) => (values: any) => Promise<{
|
|
|
72
213
|
values?: undefined;
|
|
73
214
|
}>;
|
|
74
215
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
216
|
+
/**
|
|
217
|
+
* Creates a type-safe form with validation, state management, and controller components.
|
|
218
|
+
* Supports both built-in validation and custom resolvers (Zod, Yup).
|
|
219
|
+
*
|
|
220
|
+
* @template T - Form values type (must be an object)
|
|
221
|
+
* @param params - Form configuration
|
|
222
|
+
* @param params.defaultValues - Default field values with optional validation rules
|
|
223
|
+
* @param params.resolver - Optional custom validation resolver (Zod or Yup)
|
|
224
|
+
* @returns A hook function that returns form methods and Controller component
|
|
225
|
+
*
|
|
226
|
+
* @example
|
|
227
|
+
* // Using built-in validation
|
|
228
|
+
* const form = createForm<{ email: string; age: number }>({
|
|
229
|
+
* defaultValues: {
|
|
230
|
+
* email: {
|
|
231
|
+
* value: "",
|
|
232
|
+
* required: { value: true, message: "Email is required" },
|
|
233
|
+
* pattern: { value: /^[^\s@]+@[^\s@]+\.[^\s@]+$/, message: "Invalid email" }
|
|
234
|
+
* },
|
|
235
|
+
* age: {
|
|
236
|
+
* value: 0,
|
|
237
|
+
* required: true,
|
|
238
|
+
* min: { value: 18, message: "Must be 18+" }
|
|
239
|
+
* }
|
|
240
|
+
* }
|
|
241
|
+
* });
|
|
242
|
+
*
|
|
243
|
+
* const { handleSubmit, Controller } = form();
|
|
244
|
+
*
|
|
245
|
+
* // In your component:
|
|
246
|
+
* // <form onSubmit={handleSubmit((data) => console.log(data))}>
|
|
247
|
+
* // <Controller
|
|
248
|
+
* // field="email"
|
|
249
|
+
* // render={(value, error, onChange) => (
|
|
250
|
+
* // <div>
|
|
251
|
+
* // <input value={value} onChange={(e) => onChange(e.target.value)} />
|
|
252
|
+
* // {error && <span>{error}</span>}
|
|
253
|
+
* // </div>
|
|
254
|
+
* // )}
|
|
255
|
+
* // />
|
|
256
|
+
* // </form>
|
|
257
|
+
*
|
|
258
|
+
* @example
|
|
259
|
+
* // Using Zod resolver
|
|
260
|
+
* import { z } from 'zod';
|
|
261
|
+
* import { zodResolver } from './index';
|
|
262
|
+
*
|
|
263
|
+
* const schema = z.object({
|
|
264
|
+
* email: z.string().email("Invalid email"),
|
|
265
|
+
* password: z.string().min(8, "Min 8 characters")
|
|
266
|
+
* });
|
|
267
|
+
*
|
|
268
|
+
* const form = createForm({
|
|
269
|
+
* defaultValues: {
|
|
270
|
+
* email: "",
|
|
271
|
+
* password: ""
|
|
272
|
+
* },
|
|
273
|
+
* resolver: zodResolver(schema)
|
|
274
|
+
* });
|
|
275
|
+
*/
|
|
276
|
+
declare function createForm<T extends Record<string, any>>(params: HookFormParams<T>): () => {
|
|
277
|
+
handleSubmit: (cb: (data: T) => void) => (e: React$1.FormEvent<HTMLFormElement>) => Promise<void>;
|
|
278
|
+
Controller: ({ field, render }: ControllerProps<T>) => React$1.ReactNode;
|
|
279
|
+
setValue: (key: keyof T, value: T[keyof T]) => void;
|
|
280
|
+
getvalues: (key?: keyof T | undefined) => void;
|
|
281
|
+
getErrors: (key?: keyof T | undefined) => string | Partial<Record<keyof T, string>>;
|
|
282
|
+
setError: (field: keyof T, error: string) => void;
|
|
283
|
+
reset: () => void;
|
|
284
|
+
watch: (key: keyof T) => T[keyof T];
|
|
285
|
+
setTouched: (field: keyof T, touched: boolean) => void;
|
|
286
|
+
isDirty: (field?: keyof T | undefined) => boolean;
|
|
287
|
+
clearAllErrors: () => void;
|
|
288
|
+
clearFieldError: (field: keyof T) => void;
|
|
78
289
|
};
|
|
79
290
|
|
|
80
291
|
export { createForm, yupResolver, zodResolver };
|
package/dist/hook-form/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var g=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var D=(t,s)=>{for(var a in s)g(t,a,{get:s[a],enumerable:!0})},M=(t,s,a,i)=>{if(s&&typeof s=="object"||typeof s=="function")for(let c of j(s))!C.call(t,c)&&c!==a&&g(t,c,{get:()=>s[c],enumerable:!(i=w(s,c))||i.enumerable});return t};var q=t=>M(g({},"__esModule",{value:!0}),t);var A={};D(A,{createForm:()=>z,yupResolver:()=>F,zodResolver:()=>R});module.exports=q(A);var b=require("react");function S(t,s=[]){let a,i=[],c=e=>{let o=typeof e=="function"?e(a):e;a={...a,...o},i.forEach(r=>r())},p=()=>a,f=N(c,p,s);a=t(f,p);let y=e=>(i.push(e),()=>{i=i.filter(o=>o!==e)});return(e=o=>o)=>(0,b.useSyncExternalStore)(y,()=>e(a))}var N=(t,s,a)=>!a||a.length===0?t:a.reduceRight((i,c)=>c(t,s)(i),t);function O(t){return t.charAt(0).toUpperCase()+t.slice(1)}function E(t,s){return t?typeof t=="boolean"?{value:t,message:t?`${O(s)} is required`:""}:t:{value:!1,message:""}}function h(t,s){return t===void 0?null:typeof t=="number"?{value:t,message:s==="min"?`Minimum is ${t}`:`Maximum is ${t}`}:t}function v(t){let s={};return Object.keys(t||{}).forEach(a=>{let i=t[a];typeof i=="object"&&"value"in i&&(s[a]=i.value)}),s}var R=t=>s=>{let a=t.safeParse(s);if(a.success)return{values:a.data};let i={};return a.error.issues.forEach(c=>{let p=c.path[0];i[p]=c.message}),{errors:i}},F=t=>async s=>{try{return{values:await t.validate(s,{abortEarly:!1})}}catch(a){let i={};return a.inner.forEach(c=>{i[c.path]=c.message}),{errors:i}}};function V(t){let s={};return Object.keys(t).forEach(a=>{let i=t[a];i&&typeof i=="object"&&"value"in i?s[a]={error:"",...i}:s[a]={value:i,error:""}}),s}function k(t,s){if(typeof s=="number"){let a=Number(t);return isNaN(a)?0:a}return typeof s=="boolean"?!!t:t}function z(t){let{defaultValues:s,resolver:a}=t,i=V(s),c=S((f,y)=>({...i,setFieldValue:(e,o)=>{var n;let r=y()[e];f({[e]:{...r,value:k(o,(n=i[e])==null?void 0:n.value)}})},defaultValidateField:e=>{let r=y()[e],n="",u=k(r.value,r.value),T=E(r.required,String(e)),d=h(r.min,"min"),m=h(r.max,"max");return T.value&&!u?n=T.message:typeof u=="string"&&r.pattern&&!r.pattern.value.test(u)?n=r.pattern.message:d&&(typeof u=="string"&&u.length<d.value||typeof u=="number"&&u<d.value)?n=d.message:m&&(typeof u=="string"&&u.length>m.value||typeof u=="number"&&u>m.value)&&(n=m.message),f({[e]:{...r,error:n}}),n},resolverValidate:async e=>{if(!a)return;let o=y(),r=o[e],n="",u=v(o),T=await a(u);if(T!=null&&T.errors){let d=T.errors[e];d&&(n=d)}return f({[e]:{...r,error:n}}),n},handleSubmit:e=>async o=>{o.preventDefault();let r=!1,n=y(),u=v(n),T=Object.keys(u);if(a){for(let d of T)await n.resolverValidate(d)&&(r=!0);r||e(u);return}for(let d of T)n.defaultValidateField(d)&&(r=!0);r||e(u)},getvalues:e=>e?y()[e].value:v(e),setValue:(e,o)=>{f({[e]:{...y()[e],value:o}})},setError:(e,o)=>{let r=y()[e];f({[e]:{...r,error:o}})},getErrors:e=>{let o=y();if(e){let n=o[e];return(n==null?void 0:n.error)||""}let r={};return Object.keys(o).forEach(n=>{let u=o[n];u.error&&(r[n]=u.error)}),r},clearFieldError:e=>{let o=y()[e];f({[e]:{...o,error:""}})},clearAllErrors:()=>{let e=y(),o={};Object.keys(e).forEach(r=>{let n=e[r];o[r]={...n,error:""}}),f(o)},isDirty:e=>{let o=y();if(e){let r=o[e];return(r==null?void 0:r.isDirty)||!1}return Object.keys(o).some(r=>o[r].isDirty)},isTouched:e=>{let r=y()[e];return(r==null?void 0:r.touched)||!1},setTouched:(e,o)=>{let r=y()[e];f({[e]:{...r,touched:o}})},reset:()=>{let e={};Object.keys(i).forEach(o=>{e[o]={...i[o],error:"",touched:!1,isDirty:!1}}),f(e)}}));function p({field:f,render:y}){let e=c(),o=e[f].value,r=e[f].error,n=e.setFieldValue,u=e.defaultValidateField,T=e.resolverValidate,d=e.setTouched;return y({error:r||"",onChange:async l=>{n(f,l),d(f,!0),a?await T(f):u(f)},value:o})}return()=>{let f=c(l=>l.handleSubmit),y=c(l=>l.setValue),e=c(l=>l.getvalues),o=c(l=>l.getErrors),r=c(l=>l.setError),n=c(l=>l.reset),u=c(l=>l.setTouched),T=c(l=>l.isDirty),d=c(l=>l.clearAllErrors),m=c(l=>l.clearFieldError);return{handleSubmit:f,Controller:p,setValue:y,getvalues:e,getErrors:o,setError:r,reset:n,watch:l=>c(P=>P[l].value),setTouched:u,isDirty:T,clearAllErrors:d,clearFieldError:m}}}0&&(module.exports={createForm,yupResolver,zodResolver});
|
package/dist/hook-form/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as
|
|
1
|
+
import{a as h}from"../chunk-RXPCG2VZ.mjs";function V(o){return o.charAt(0).toUpperCase()+o.slice(1)}function b(o,u){return o?typeof o=="boolean"?{value:o,message:o?`${V(u)} is required`:""}:o:{value:!1,message:""}}function g(o,u){return o===void 0?null:typeof o=="number"?{value:o,message:u==="min"?`Minimum is ${o}`:`Maximum is ${o}`}:o}function v(o){let u={};return Object.keys(o||{}).forEach(i=>{let c=o[i];typeof c=="object"&&"value"in c&&(u[i]=c.value)}),u}var x=o=>u=>{let i=o.safeParse(u);if(i.success)return{values:i.data};let c={};return i.error.issues.forEach(l=>{let p=l.path[0];c[p]=l.message}),{errors:c}},S=o=>async u=>{try{return{values:await o.validate(u,{abortEarly:!1})}}catch(i){let c={};return i.inner.forEach(l=>{c[l.path]=l.message}),{errors:c}}};function E(o){let u={};return Object.keys(o).forEach(i=>{let c=o[i];c&&typeof c=="object"&&"value"in c?u[i]={error:"",...c}:u[i]={value:c,error:""}}),u}function k(o,u){if(typeof u=="number"){let i=Number(o);return isNaN(i)?0:i}return typeof u=="boolean"?!!o:o}function w(o){let{defaultValues:u,resolver:i}=o,c=E(u),l=h((f,y)=>({...c,setFieldValue:(e,t)=>{var s;let r=y()[e];f({[e]:{...r,value:k(t,(s=c[e])==null?void 0:s.value)}})},defaultValidateField:e=>{let r=y()[e],s="",a=k(r.value,r.value),m=b(r.required,String(e)),d=g(r.min,"min"),T=g(r.max,"max");return m.value&&!a?s=m.message:typeof a=="string"&&r.pattern&&!r.pattern.value.test(a)?s=r.pattern.message:d&&(typeof a=="string"&&a.length<d.value||typeof a=="number"&&a<d.value)?s=d.message:T&&(typeof a=="string"&&a.length>T.value||typeof a=="number"&&a>T.value)&&(s=T.message),f({[e]:{...r,error:s}}),s},resolverValidate:async e=>{if(!i)return;let t=y(),r=t[e],s="",a=v(t),m=await i(a);if(m!=null&&m.errors){let d=m.errors[e];d&&(s=d)}return f({[e]:{...r,error:s}}),s},handleSubmit:e=>async t=>{t.preventDefault();let r=!1,s=y(),a=v(s),m=Object.keys(a);if(i){for(let d of m)await s.resolverValidate(d)&&(r=!0);r||e(a);return}for(let d of m)s.defaultValidateField(d)&&(r=!0);r||e(a)},getvalues:e=>e?y()[e].value:v(e),setValue:(e,t)=>{f({[e]:{...y()[e],value:t}})},setError:(e,t)=>{let r=y()[e];f({[e]:{...r,error:t}})},getErrors:e=>{let t=y();if(e){let s=t[e];return(s==null?void 0:s.error)||""}let r={};return Object.keys(t).forEach(s=>{let a=t[s];a.error&&(r[s]=a.error)}),r},clearFieldError:e=>{let t=y()[e];f({[e]:{...t,error:""}})},clearAllErrors:()=>{let e=y(),t={};Object.keys(e).forEach(r=>{let s=e[r];t[r]={...s,error:""}}),f(t)},isDirty:e=>{let t=y();if(e){let r=t[e];return(r==null?void 0:r.isDirty)||!1}return Object.keys(t).some(r=>t[r].isDirty)},isTouched:e=>{let r=y()[e];return(r==null?void 0:r.touched)||!1},setTouched:(e,t)=>{let r=y()[e];f({[e]:{...r,touched:t}})},reset:()=>{let e={};Object.keys(c).forEach(t=>{e[t]={...c[t],error:"",touched:!1,isDirty:!1}}),f(e)}}));function p({field:f,render:y}){let e=l(),t=e[f].value,r=e[f].error,s=e.setFieldValue,a=e.defaultValidateField,m=e.resolverValidate,d=e.setTouched;return y({error:r||"",onChange:async n=>{s(f,n),d(f,!0),i?await m(f):a(f)},value:t})}return()=>{let f=l(n=>n.handleSubmit),y=l(n=>n.setValue),e=l(n=>n.getvalues),t=l(n=>n.getErrors),r=l(n=>n.setError),s=l(n=>n.reset),a=l(n=>n.setTouched),m=l(n=>n.isDirty),d=l(n=>n.clearAllErrors),T=l(n=>n.clearFieldError);return{handleSubmit:f,Controller:p,setValue:y,getvalues:e,getErrors:t,setError:r,reset:s,watch:n=>l(F=>F[n].value),setTouched:a,isDirty:m,clearAllErrors:d,clearFieldError:T}}}export{w as createForm,S as yupResolver,x as zodResolver};
|
package/dist/query/index.d.mts
CHANGED
|
@@ -336,10 +336,27 @@ type InferQueryResult<T> = T extends QueryDef<any, infer Result, any> ? Result :
|
|
|
336
336
|
* api.utils.updateQueryData('getUser', {id: 1}, (draft) => {...});
|
|
337
337
|
* ```
|
|
338
338
|
*/
|
|
339
|
-
type HooksFromEndpoints<T extends EndpointsMap<TagTypes>, TagTypes extends readonly string[] = readonly []> =
|
|
339
|
+
type HooksFromEndpoints<T extends EndpointsMap<TagTypes>, TagTypes extends readonly string[] = readonly []> =
|
|
340
|
+
/** Normal query hooks */
|
|
341
|
+
{
|
|
340
342
|
[K in keyof T as T[K] extends {
|
|
341
343
|
type: 'query';
|
|
342
|
-
} ? `use${Capitalize<string & K>}Query` :
|
|
344
|
+
} ? `use${Capitalize<string & K>}Query` : never]: T[K] extends QueryDef<infer Arg, infer Result, any> ? (arg: Arg, option?: QueryHookOption) => MainQueryHookResult<Result> : never;
|
|
345
|
+
}
|
|
346
|
+
/** Lazy query hooks */
|
|
347
|
+
& {
|
|
348
|
+
[K in keyof T as T[K] extends {
|
|
349
|
+
type: 'query';
|
|
350
|
+
} ? `useLazy${Capitalize<string & K>}Query` : never]: T[K] extends QueryDef<infer Arg, infer Result, any> ? () => readonly [
|
|
351
|
+
(arg: Arg) => void,
|
|
352
|
+
MainQueryHookResult<Result>
|
|
353
|
+
] : never;
|
|
354
|
+
}
|
|
355
|
+
/** Mutation hooks */
|
|
356
|
+
& {
|
|
357
|
+
[K in keyof T as T[K] extends {
|
|
358
|
+
type: 'mutation';
|
|
359
|
+
} ? `use${Capitalize<string & K>}Mutation` : never]: T[K] extends MutationDef<infer Arg, infer Result, any> ? () => readonly [
|
|
343
360
|
(arg: Arg) => Promise<Result>,
|
|
344
361
|
MainMutationState<Result>
|
|
345
362
|
] : never;
|
package/dist/query/index.d.ts
CHANGED
|
@@ -336,10 +336,27 @@ type InferQueryResult<T> = T extends QueryDef<any, infer Result, any> ? Result :
|
|
|
336
336
|
* api.utils.updateQueryData('getUser', {id: 1}, (draft) => {...});
|
|
337
337
|
* ```
|
|
338
338
|
*/
|
|
339
|
-
type HooksFromEndpoints<T extends EndpointsMap<TagTypes>, TagTypes extends readonly string[] = readonly []> =
|
|
339
|
+
type HooksFromEndpoints<T extends EndpointsMap<TagTypes>, TagTypes extends readonly string[] = readonly []> =
|
|
340
|
+
/** Normal query hooks */
|
|
341
|
+
{
|
|
340
342
|
[K in keyof T as T[K] extends {
|
|
341
343
|
type: 'query';
|
|
342
|
-
} ? `use${Capitalize<string & K>}Query` :
|
|
344
|
+
} ? `use${Capitalize<string & K>}Query` : never]: T[K] extends QueryDef<infer Arg, infer Result, any> ? (arg: Arg, option?: QueryHookOption) => MainQueryHookResult<Result> : never;
|
|
345
|
+
}
|
|
346
|
+
/** Lazy query hooks */
|
|
347
|
+
& {
|
|
348
|
+
[K in keyof T as T[K] extends {
|
|
349
|
+
type: 'query';
|
|
350
|
+
} ? `useLazy${Capitalize<string & K>}Query` : never]: T[K] extends QueryDef<infer Arg, infer Result, any> ? () => readonly [
|
|
351
|
+
(arg: Arg) => void,
|
|
352
|
+
MainQueryHookResult<Result>
|
|
353
|
+
] : never;
|
|
354
|
+
}
|
|
355
|
+
/** Mutation hooks */
|
|
356
|
+
& {
|
|
357
|
+
[K in keyof T as T[K] extends {
|
|
358
|
+
type: 'mutation';
|
|
359
|
+
} ? `use${Capitalize<string & K>}Mutation` : never]: T[K] extends MutationDef<infer Arg, infer Result, any> ? () => readonly [
|
|
343
360
|
(arg: Arg) => Promise<Result>,
|
|
344
361
|
MainMutationState<Result>
|
|
345
362
|
] : never;
|
package/dist/query/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var Y=Object.create;var C=Object.defineProperty;var Z=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var rr=Object.getPrototypeOf,tr=Object.prototype.hasOwnProperty;var er=(t,s)=>{for(var o in s)C(t,o,{get:s[o],enumerable:!0})},D=(t,s,o,r)=>{if(s&&typeof s=="object"||typeof s=="function")for(let p of j(s))!tr.call(t,p)&&p!==o&&C(t,p,{get:()=>s[p],enumerable:!(r=Z(s,p))||r.enumerable});return t};var nr=(t,s,o)=>(o=t!=null?Y(rr(t)):{},D(s||!t||!t.__esModule?C(o,"default",{value:t,enumerable:!0}):o,t)),sr=t=>D(C({},"__esModule",{value:!0}),t);var ir={};er(ir,{createApi:()=>or});module.exports=sr(ir);var I=nr(require("react"));var J=require("react");function _(t,s=[]){let o,r=[],p=u=>{let g=typeof u=="function"?u(o):u;o={...o,...g},r.forEach(w=>w())},S=()=>o,L=ar(p,S,s);o=t(L,S);let E=u=>(r.push(u),()=>{r=r.filter(g=>g!==u)});return(u=g=>g)=>(0,J.useSyncExternalStore)(E,()=>u(o))}var ar=(t,s,o)=>!o||o.length===0?t:o.reduceRight((r,p)=>p(t,s)(r),t);var $=async(t,s,o,r,p,S,L)=>{var w,M,T,F,A,K,c,b;s({isLoading:!0});let E,u,g=new Promise((y,n)=>{E=y,u=n});if(r!=null&&r.onQueryStarted)try{r.onQueryStarted(t,{queryFulfilled:g})}catch(y){}try{let y=null,n=null,i=o().cashExp,l=Date.now(),a=!1;if(L||JSON.stringify(o().arg||{})!==JSON.stringify(t||{})?a=!1:a=i>=l,a&&(y=o().data),!a&&(r!=null&&r.queryFnc)){s({isFetching:!0});let{data:e,error:h}=await((w=r==null?void 0:r.queryFnc)==null?void 0:w.call(r,t,p));e&&(y=e),h&&(n=h)}else{let e=r.queryFn(t);if(r!=null&&r.transformHeader&&(e.headers=await((M=r==null?void 0:r.transformHeader)==null?void 0:M.call(r,e==null?void 0:e.headers))),r!=null&&r.transformBody&&(e.body=await((T=r==null?void 0:r.transformBody)==null?void 0:T.call(r,e==null?void 0:e.body))),!a){s({isFetching:!0});let{data:h,error:x}=await p(e);h&&(y=h),x&&(n=x)}}if(y&&(r!=null&&r.transformResponse&&(y=await((A=r.transformResponse)==null?void 0:A.call(r,y,(F=o())==null?void 0:F.data,t))),r!=null&&r.onSuccess&&await((K=r.onSuccess)==null?void 0:K.call(r,y,t))),n&&(r!=null&&r.transformError&&(n=await((c=r.transformError)==null?void 0:c.call(r,n,o().error,t))),r!=null&&r.onError&&await((b=r.onError)==null?void 0:b.call(r,n,t))),y){let e=null;return r.providesTags&&(typeof r.providesTags=="function"?e=r.providesTags(y):Array.isArray(r.providesTags)&&(e=r.providesTags)),s({data:y,isSuccess:!0,isLoading:!1,isFetching:!1,cashExp:a?i:Date.now()+S,arg:t,tags:e}),E==null||E({data:y}),{data:y}}return s({isLoading:!1,isSuccess:!1,isFetching:!1,isError:!0,error:n,arg:t}),u==null||u(n),{error:n}}catch(y){return s({isLoading:!1,isSuccess:!1,isFetching:!1,isError:!0,error:y,arg:t}),u==null||u(y),{error:y}}};async function H(t,s,o,r,p,S,L,E,u){var F,A,K;let g={arg:t,def:r,get:o,set:s};for(let c of u)await((F=c.beforeQuery)==null?void 0:F.call(c,g));let w=-1,M=async c=>{if(c<=w)throw new Error("next() called multiple times");w=c;let b=E[c];return b?b(g,()=>M(c+1)):$(t,s,o,r,p,S,L)},T=await M(0);for(let c of u)await((A=c.afterQuery)==null?void 0:A.call(c,T,g));if(T!=null&&T.error)for(let c of u)await((K=c.onError)==null?void 0:K.call(c,T.error,g));return T}function B(t){return t.charAt(0).toUpperCase()+t.slice(1)}function R(t,s){return`${t}__${JSON.stringify(s!=null?s:{})}`}function W(t,s){let o=typeof t=="string",r=typeof s=="string";if(o&&r)return t===s;if(!o&&!r){let p=t.type===s.type,S=!t.id||t.id===s.id;return p&&S}return!1}function or(t){let{baseQuery:s,endpoints:o,cacheTimeout:r=30*1e3,middlewares:p=[],plugins:S=[],tagTypes:L=[]}=t,u=o({query:n=>({type:"query",queryFn:n.query,...n}),mutation:n=>({type:"mutation",queryFn:n.query,...n})}),g={},w=(S||[]).filter(n=>n.middleware&&typeof n.middleware=="function").map(n=>n.middleware),M=new Map,T=new Map,F=(n,i)=>{let l=(i.plugins||[]).filter(e=>(e==null?void 0:e.middleware)&&typeof e.middleware=="function").map(e=>e.middleware),a={data:null,isLoading:!1,isError:!1,isSuccess:!1,error:null,reFetch:()=>{},query:()=>{}};if(i.type==="query"){let e=m=>{if(!M.has(m)){let q=_((f,d)=>(T.set(m,{set:f,get:d}),{data:null,isLoading:!1,isError:!1,isSuccess:!1,error:null,arg:null,cashExp:0,query:Q=>H(Q,f,d,i,s,r,!1,[...p,...i.middlewares||[],...l,...w],[...S,...i.plugins||[]]),reFetch:()=>{var Q;return H((Q=d())==null?void 0:Q.arg,f,d,i,s,r,!0,[...p,...i.middlewares||[],...l,...w],[...S,...i.plugins||[]])}}));M.set(m,q)}return M.get(m)};return{useQuery:(m,q)=>{let f=R(n,m),d=e(f),{skip:Q}=q||{},{query:k,error:v,isError:P,isLoading:z,isSuccess:O,reFetch:N,data:U}=d();return(0,I.useEffect)(()=>{Q||k(m)},[JSON.stringify(m||{})]),{error:v,isError:P,isLoading:z,isSuccess:O,data:U,reFetch:N}},useLazyQuery:()=>{let[m,q]=I.default.useState(void 0),[f,d]=I.default.useState(!1),Q=X=>{q(X),d(!0)},k=f&&m!==void 0?R(n,m):"__lazy__",v=e(k),{query:P,error:z,isError:O,isLoading:N,isSuccess:U,data:G,reFetch:V}=v();return(0,I.useEffect)(()=>{f&&P(m)},[f,JSON.stringify(m),P]),[Q,{error:z,isError:O,isLoading:N,isSuccess:U,data:G,reFetch:V}]}}}if(i.type==="mutation"){let e=null;return{useMutation:()=>{e||(e=_((k,v)=>({data:null,isLoading:!1,isError:!1,isSuccess:!1,error:null,arg:null,cashExp:0,query:P=>H(P,k,v,i,s,0,!1,[...p,...i.middlewares||[],...l,...w],[...S,...i.plugins||[]])})));let{query:x,error:m,isError:q,isLoading:f,isSuccess:d,data:Q}=e();return[x,{error:m,isError:q,isLoading:f,isSuccess:d,data:Q}]}}}};for(let n in u){let i=u[n],l=B(n),a=F(n,i);i.type==="query"&&(g[`use${l}Query`]=a==null?void 0:a.useQuery,g[`useLazy${l}Query`]=a==null?void 0:a.useLazyQuery),i.type==="mutation"&&(g[`use${l}Mutation`]=a==null?void 0:a.useMutation)}function A(n,i,l){var m;let a=R(n,i),e=T.get(a);if(!e)return;let h=(m=e.get())==null?void 0:m.data,x=l(h);return e.set({data:x}),{undo(){e.set({data:h})}}}function K(n,i){var e;let l=R(n,i),a=T.get(l);if(a)return(e=a.get())==null?void 0:e.data}function c(n){var i;if(!(!n||n.length===0))for(let[,l]of T.entries()){let a=l.get(),e=(a==null?void 0:a.tags)||[];n.some(x=>e.some(m=>W(x,m)))&&(l.set({cashExp:0}),(i=a==null?void 0:a.reFetch)==null||i.call(a))}}function b(){var n,i;for(let[,l]of T.entries())l.set({cashExp:0}),(i=(n=l.get())==null?void 0:n.reFetch)==null||i.call(n)}function y(n,i){var e,h;let l=R(n,i),a=T.get(l);a&&(a.set({cashExp:0}),(h=(e=a.get())==null?void 0:e.reFetch)==null||h.call(e))}return{...g,utils:{updateQueryData:A,invalidateTags:c,resetApiState:b,refetchQuery:y,getApiDraftData:K}}}0&&(module.exports={createApi});
|
package/dist/query/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as
|
|
1
|
+
import{a as N}from"../chunk-RXPCG2VZ.mjs";import $,{useEffect as B}from"react";var _=async(a,o,g,r,w,Q,k)=>{var S,F,l,x,M,K,i,q;o({isLoading:!0});let d,p,h=new Promise((u,e)=>{d=u,p=e});if(r!=null&&r.onQueryStarted)try{r.onQueryStarted(a,{queryFulfilled:h})}catch(u){}try{let u=null,e=null,s=g().cashExp,c=Date.now(),n=!1;if(k||JSON.stringify(g().arg||{})!==JSON.stringify(a||{})?n=!1:n=s>=c,n&&(u=g().data),!n&&(r!=null&&r.queryFnc)){o({isFetching:!0});let{data:t,error:m}=await((S=r==null?void 0:r.queryFnc)==null?void 0:S.call(r,a,w));t&&(u=t),m&&(e=m)}else{let t=r.queryFn(a);if(r!=null&&r.transformHeader&&(t.headers=await((F=r==null?void 0:r.transformHeader)==null?void 0:F.call(r,t==null?void 0:t.headers))),r!=null&&r.transformBody&&(t.body=await((l=r==null?void 0:r.transformBody)==null?void 0:l.call(r,t==null?void 0:t.body))),!n){o({isFetching:!0});let{data:m,error:A}=await w(t);m&&(u=m),A&&(e=A)}}if(u&&(r!=null&&r.transformResponse&&(u=await((M=r.transformResponse)==null?void 0:M.call(r,u,(x=g())==null?void 0:x.data,a))),r!=null&&r.onSuccess&&await((K=r.onSuccess)==null?void 0:K.call(r,u,a))),e&&(r!=null&&r.transformError&&(e=await((i=r.transformError)==null?void 0:i.call(r,e,g().error,a))),r!=null&&r.onError&&await((q=r.onError)==null?void 0:q.call(r,e,a))),u){let t=null;return r.providesTags&&(typeof r.providesTags=="function"?t=r.providesTags(u):Array.isArray(r.providesTags)&&(t=r.providesTags)),o({data:u,isSuccess:!0,isLoading:!1,isFetching:!1,cashExp:n?s:Date.now()+Q,arg:a,tags:t}),d==null||d({data:u}),{data:u}}return o({isLoading:!1,isSuccess:!1,isFetching:!1,isError:!0,error:e,arg:a}),p==null||p(e),{error:e}}catch(u){return o({isLoading:!1,isSuccess:!1,isFetching:!1,isError:!0,error:u,arg:a}),p==null||p(u),{error:u}}};async function H(a,o,g,r,w,Q,k,d,p){var x,M,K;let h={arg:a,def:r,get:g,set:o};for(let i of p)await((x=i.beforeQuery)==null?void 0:x.call(i,h));let S=-1,F=async i=>{if(i<=S)throw new Error("next() called multiple times");S=i;let q=d[i];return q?q(h,()=>F(i+1)):_(a,o,g,r,w,Q,k)},l=await F(0);for(let i of p)await((M=i.afterQuery)==null?void 0:M.call(i,l,h));if(l!=null&&l.error)for(let i of p)await((K=i.onError)==null?void 0:K.call(i,l.error,h));return l}function D(a){return a.charAt(0).toUpperCase()+a.slice(1)}function I(a,o){return`${a}__${JSON.stringify(o!=null?o:{})}`}function J(a,o){let g=typeof a=="string",r=typeof o=="string";if(g&&r)return a===o;if(!g&&!r){let w=a.type===o.type,Q=!a.id||a.id===o.id;return w&&Q}return!1}function nr(a){let{baseQuery:o,endpoints:g,cacheTimeout:r=30*1e3,middlewares:w=[],plugins:Q=[],tagTypes:k=[]}=a,p=g({query:e=>({type:"query",queryFn:e.query,...e}),mutation:e=>({type:"mutation",queryFn:e.query,...e})}),h={},S=(Q||[]).filter(e=>e.middleware&&typeof e.middleware=="function").map(e=>e.middleware),F=new Map,l=new Map,x=(e,s)=>{let c=(s.plugins||[]).filter(t=>(t==null?void 0:t.middleware)&&typeof t.middleware=="function").map(t=>t.middleware),n={data:null,isLoading:!1,isError:!1,isSuccess:!1,error:null,reFetch:()=>{},query:()=>{}};if(s.type==="query"){let t=y=>{if(!F.has(y)){let b=N((T,f)=>(l.set(y,{set:T,get:f}),{data:null,isLoading:!1,isError:!1,isSuccess:!1,error:null,arg:null,cashExp:0,query:E=>H(E,T,f,s,o,r,!1,[...w,...s.middlewares||[],...c,...S],[...Q,...s.plugins||[]]),reFetch:()=>{var E;return H((E=f())==null?void 0:E.arg,T,f,s,o,r,!0,[...w,...s.middlewares||[],...c,...S],[...Q,...s.plugins||[]])}}));F.set(y,b)}return F.get(y)};return{useQuery:(y,b)=>{let T=I(e,y),f=t(T),{skip:E}=b||{},{query:R,error:P,isError:L,isLoading:z,isSuccess:O,reFetch:v,data:C}=f();return B(()=>{E||R(y)},[JSON.stringify(y||{})]),{error:P,isError:L,isLoading:z,isSuccess:O,data:C,reFetch:v}},useLazyQuery:()=>{let[y,b]=$.useState(void 0),[T,f]=$.useState(!1),E=V=>{b(V),f(!0)},R=T&&y!==void 0?I(e,y):"__lazy__",P=t(R),{query:L,error:z,isError:O,isLoading:v,isSuccess:C,data:U,reFetch:G}=P();return B(()=>{T&&L(y)},[T,JSON.stringify(y),L]),[E,{error:z,isError:O,isLoading:v,isSuccess:C,data:U,reFetch:G}]}}}if(s.type==="mutation"){let t=null;return{useMutation:()=>{t||(t=N((R,P)=>({data:null,isLoading:!1,isError:!1,isSuccess:!1,error:null,arg:null,cashExp:0,query:L=>H(L,R,P,s,o,0,!1,[...w,...s.middlewares||[],...c,...S],[...Q,...s.plugins||[]])})));let{query:A,error:y,isError:b,isLoading:T,isSuccess:f,data:E}=t();return[A,{error:y,isError:b,isLoading:T,isSuccess:f,data:E}]}}}};for(let e in p){let s=p[e],c=D(e),n=x(e,s);s.type==="query"&&(h[`use${c}Query`]=n==null?void 0:n.useQuery,h[`useLazy${c}Query`]=n==null?void 0:n.useLazyQuery),s.type==="mutation"&&(h[`use${c}Mutation`]=n==null?void 0:n.useMutation)}function M(e,s,c){var y;let n=I(e,s),t=l.get(n);if(!t)return;let m=(y=t.get())==null?void 0:y.data,A=c(m);return t.set({data:A}),{undo(){t.set({data:m})}}}function K(e,s){var t;let c=I(e,s),n=l.get(c);if(n)return(t=n.get())==null?void 0:t.data}function i(e){var s;if(!(!e||e.length===0))for(let[,c]of l.entries()){let n=c.get(),t=(n==null?void 0:n.tags)||[];e.some(A=>t.some(y=>J(A,y)))&&(c.set({cashExp:0}),(s=n==null?void 0:n.reFetch)==null||s.call(n))}}function q(){var e,s;for(let[,c]of l.entries())c.set({cashExp:0}),(s=(e=c.get())==null?void 0:e.reFetch)==null||s.call(e)}function u(e,s){var t,m;let c=I(e,s),n=l.get(c);n&&(n.set({cashExp:0}),(m=(t=n.get())==null?void 0:t.reFetch)==null||m.call(t))}return{...h,utils:{updateQueryData:M,invalidateTags:i,resetApiState:q,refetchQuery:u,getApiDraftData:K}}}export{nr as createApi};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zustic",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.3",
|
|
4
4
|
"description": "A fast, minimal state management solution for React ecosystems. Works seamlessly with React, Next.js, and React Native, offering predictable state updates with a tiny footprint.",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "tsup",
|