@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 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
- * arguments for the `as()` method based on input type and field value
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 AsArgs<Type extends keyof InputTypeMap, Value> = Type extends 'checkbox' ? Value extends string[] ? [type: Type, value: Value[number] | (string & {})] : [type: Type] : Type extends 'radio' | 'submit' | 'hidden' ? [type: Type, value: Value | (string & {})] : [type: 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>>(...args: AsArgs<K$1, T>): InputElementProps<K$1>;
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 FormFieldUnknown<T> = FieldMethods<T> & {
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>>(...args: AsArgs<K$1, FormFieldValue>): InputElementProps<K$1>;
153
+ as<K$1 extends FieldInputType<FormFieldValue>>(type: K$1, ...value: AsValueArgs<K$1, FormFieldValue>): InputElementProps<K$1>;
149
154
  } & {
150
- [key: string | number]: FormFieldUnknown<unknown>;
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> = T extends void ? Record<string, never> : WillRecurseIndefinitely<T> extends true ? FormFieldUnknown<T> : 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]> };
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
  /**
@@ -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":"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"}
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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@oomfware/forms",
4
- "version": "0.2.1",
4
+ "version": "0.2.2",
5
5
  "description": "form validation middleware",
6
6
  "license": "0BSD",
7
7
  "repository": {
package/src/lib/types.ts CHANGED
@@ -85,15 +85,20 @@ export type FieldInputType<T> = {
85
85
  }[keyof InputTypeMap];
86
86
 
87
87
  /**
88
- * arguments for the `as()` method based on input type and field value
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 AsArgs<Type extends keyof InputTypeMap, Value> = Type extends 'checkbox'
95
+ export type AsValueArgs<Type extends keyof InputTypeMap, Value> = Type extends 'checkbox'
91
96
  ? Value extends string[]
92
- ? [type: Type, value: Value[number] | (string & {})]
93
- : [type: Type]
97
+ ? [value: Value[number] | (string & {})]
98
+ : []
94
99
  : Type extends 'radio' | 'submit' | 'hidden'
95
- ? [type: Type, value: Value | (string & {})]
96
- : [type: Type];
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>>(...args: AsArgs<K, T>): InputElementProps<K>;
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 FormFieldUnknown<T> = FieldMethods<T> & {
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>>(...args: AsArgs<K, FormFieldValue>): InputElementProps<K>;
226
+ as<K extends FieldInputType<FormFieldValue>>(
227
+ type: K,
228
+ ...value: AsValueArgs<K, FormFieldValue>
229
+ ): InputElementProps<K>;
222
230
  } & {
223
- [key: string | number]: FormFieldUnknown<unknown>;
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> = T extends void
231
- ? Record<string, never>
232
- : WillRecurseIndefinitely<T> extends true
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[]