@oomfware/forms 0.2.1 → 0.2.2
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/index.d.mts +15 -7
- package/dist/index.d.mts.map +1 -1
- package/package.json +1 -1
- package/src/lib/types.ts +26 -14
package/dist/index.d.mts
CHANGED
|
@@ -52,9 +52,14 @@ type InputTypeMap = {
|
|
|
52
52
|
*/
|
|
53
53
|
type FieldInputType<T> = { [K in keyof InputTypeMap]: T extends InputTypeMap[K] ? K : never }[keyof InputTypeMap];
|
|
54
54
|
/**
|
|
55
|
-
*
|
|
55
|
+
* value argument for the `as()` method based on input type.
|
|
56
|
+
* returns `[value]` tuple for types that require a value, or `[]` otherwise.
|
|
57
|
+
*
|
|
58
|
+
* note: separating `type` from `value` in the `.as()` signature ensures TypeScript
|
|
59
|
+
* can properly infer the type parameter before resolving the value constraint.
|
|
60
|
+
* using `...args: [type, value?]` with a union of tuple types causes inference issues.
|
|
56
61
|
*/
|
|
57
|
-
type
|
|
62
|
+
type AsValueArgs<Type extends keyof InputTypeMap, Value> = Type extends 'checkbox' ? Value extends string[] ? [value: Value[number] | (string & {})] : [] : Type extends 'radio' | 'submit' | 'hidden' ? [value: Value | (string & {})] : [];
|
|
58
63
|
interface CheckboxRadioProps<T extends 'checkbox' | 'radio'> {
|
|
59
64
|
name: string;
|
|
60
65
|
type: T;
|
|
@@ -129,7 +134,7 @@ type FormFieldLeaf<T extends FormFieldValue> = FieldMethods<T> & {
|
|
|
129
134
|
* <input {...fields.color.as('radio', 'red')} />
|
|
130
135
|
* ```
|
|
131
136
|
*/
|
|
132
|
-
as<K$1 extends FieldInputType<T>>(...
|
|
137
|
+
as<K$1 extends FieldInputType<T>>(type: K$1, ...value: AsValueArgs<K$1, T>): InputElementProps<K$1>;
|
|
133
138
|
};
|
|
134
139
|
/**
|
|
135
140
|
* container field type for objects/arrays with `.allIssues()` method
|
|
@@ -141,19 +146,22 @@ type FormFieldContainer<T> = FieldMethods<T> & {
|
|
|
141
146
|
/**
|
|
142
147
|
* fallback field type when recursion would be infinite
|
|
143
148
|
*/
|
|
144
|
-
type
|
|
149
|
+
type UnknownField<T> = FieldMethods<T> & {
|
|
145
150
|
/** get all issues for this field and descendants */
|
|
146
151
|
allIssues(): FormIssue[] | undefined;
|
|
147
152
|
/** get props for an input element */
|
|
148
|
-
as<K$1 extends FieldInputType<FormFieldValue>>(...
|
|
153
|
+
as<K$1 extends FieldInputType<FormFieldValue>>(type: K$1, ...value: AsValueArgs<K$1, FormFieldValue>): InputElementProps<K$1>;
|
|
149
154
|
} & {
|
|
150
|
-
[key: string | number]:
|
|
155
|
+
[key: string | number]: UnknownField<any>;
|
|
156
|
+
};
|
|
157
|
+
type RecursiveFormFields = FormFieldContainer<any> & {
|
|
158
|
+
[key: string | number]: UnknownField<any>;
|
|
151
159
|
};
|
|
152
160
|
/**
|
|
153
161
|
* recursive type to build form fields structure with proxy access.
|
|
154
162
|
* preserves type information through the object hierarchy.
|
|
155
163
|
*/
|
|
156
|
-
type FormFields<T> =
|
|
164
|
+
type FormFields<T> = WillRecurseIndefinitely<T> extends true ? RecursiveFormFields : NonNullable<T> extends string | number | boolean | File ? FormFieldLeaf<NonNullable<T>> : T extends string[] | File[] ? FormFieldLeaf<T> & { [K in number]: FormFieldLeaf<T[number]> } : T extends Array<infer U> ? FormFieldContainer<T> & { [K in number]: FormFields<U> } : FormFieldContainer<T> & { [K in keyof T]-?: FormFields<T[K]> };
|
|
157
165
|
//#endregion
|
|
158
166
|
//#region src/lib/form.d.ts
|
|
159
167
|
/**
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/lib/types.ts","../src/lib/form.ts","../src/lib/middleware.ts","../src/lib/errors.ts"],"sourcesContent":[],"mappings":";;;;KAEY,kBAAkB,IAAI,QAAQ;KAErC,gBAAgB,IAAI;;;AAFzB;AAA8B,UAWb,SAAA,CAXa;EAAY,CAAA,GAAA,EAAA,MAAA,CAAA,EAY1B,UAZ0B,CAAA,MAAA,GAAA,MAAA,GAAA,OAAA,GAYa,IAZb,GAYoB,SAZpB,CAAA;;;AAAG;AAW7C;AACuD,UAMtC,SAAA,CANsC;EAAO,OAAA,EAAA,MAAA;EAA9C,IAAA,EAAA,CAAA,MAAA,GAAA,MAAA,CAAA,EAAA;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/lib/types.ts","../src/lib/form.ts","../src/lib/middleware.ts","../src/lib/errors.ts"],"sourcesContent":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/lib/types.ts
CHANGED
|
@@ -85,15 +85,20 @@ export type FieldInputType<T> = {
|
|
|
85
85
|
}[keyof InputTypeMap];
|
|
86
86
|
|
|
87
87
|
/**
|
|
88
|
-
*
|
|
88
|
+
* value argument for the `as()` method based on input type.
|
|
89
|
+
* returns `[value]` tuple for types that require a value, or `[]` otherwise.
|
|
90
|
+
*
|
|
91
|
+
* note: separating `type` from `value` in the `.as()` signature ensures TypeScript
|
|
92
|
+
* can properly infer the type parameter before resolving the value constraint.
|
|
93
|
+
* using `...args: [type, value?]` with a union of tuple types causes inference issues.
|
|
89
94
|
*/
|
|
90
|
-
export type
|
|
95
|
+
export type AsValueArgs<Type extends keyof InputTypeMap, Value> = Type extends 'checkbox'
|
|
91
96
|
? Value extends string[]
|
|
92
|
-
? [
|
|
93
|
-
: [
|
|
97
|
+
? [value: Value[number] | (string & {})]
|
|
98
|
+
: []
|
|
94
99
|
: Type extends 'radio' | 'submit' | 'hidden'
|
|
95
|
-
? [
|
|
96
|
-
: [
|
|
100
|
+
? [value: Value | (string & {})]
|
|
101
|
+
: [];
|
|
97
102
|
|
|
98
103
|
// #endregion
|
|
99
104
|
|
|
@@ -200,7 +205,7 @@ export type FormFieldLeaf<T extends FormFieldValue> = FieldMethods<T> & {
|
|
|
200
205
|
* <input {...fields.color.as('radio', 'red')} />
|
|
201
206
|
* ```
|
|
202
207
|
*/
|
|
203
|
-
as<K extends FieldInputType<T>>(...
|
|
208
|
+
as<K extends FieldInputType<T>>(type: K, ...value: AsValueArgs<K, T>): InputElementProps<K>;
|
|
204
209
|
};
|
|
205
210
|
|
|
206
211
|
/**
|
|
@@ -214,23 +219,30 @@ export type FormFieldContainer<T> = FieldMethods<T> & {
|
|
|
214
219
|
/**
|
|
215
220
|
* fallback field type when recursion would be infinite
|
|
216
221
|
*/
|
|
217
|
-
type
|
|
222
|
+
type UnknownField<T> = FieldMethods<T> & {
|
|
218
223
|
/** get all issues for this field and descendants */
|
|
219
224
|
allIssues(): FormIssue[] | undefined;
|
|
220
225
|
/** get props for an input element */
|
|
221
|
-
as<K extends FieldInputType<FormFieldValue>>(
|
|
226
|
+
as<K extends FieldInputType<FormFieldValue>>(
|
|
227
|
+
type: K,
|
|
228
|
+
...value: AsValueArgs<K, FormFieldValue>
|
|
229
|
+
): InputElementProps<K>;
|
|
222
230
|
} & {
|
|
223
|
-
[key: string | number]:
|
|
231
|
+
[key: string | number]: UnknownField<any>;
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
// by breaking this out into its own type, we avoid the TS recursion depth limit
|
|
235
|
+
type RecursiveFormFields = FormFieldContainer<any> & {
|
|
236
|
+
[key: string | number]: UnknownField<any>;
|
|
224
237
|
};
|
|
225
238
|
|
|
226
239
|
/**
|
|
227
240
|
* recursive type to build form fields structure with proxy access.
|
|
228
241
|
* preserves type information through the object hierarchy.
|
|
229
242
|
*/
|
|
230
|
-
export type FormFields<T> =
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
? FormFieldUnknown<T>
|
|
243
|
+
export type FormFields<T> =
|
|
244
|
+
WillRecurseIndefinitely<T> extends true
|
|
245
|
+
? RecursiveFormFields
|
|
234
246
|
: NonNullable<T> extends string | number | boolean | File
|
|
235
247
|
? FormFieldLeaf<NonNullable<T>>
|
|
236
248
|
: T extends string[] | File[]
|