@tanstack/form-core 0.10.3 → 0.12.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.
Files changed (104) hide show
  1. package/dist/cjs/FieldApi.d.ts +95 -0
  2. package/dist/cjs/FormApi.d.ts +118 -0
  3. package/dist/cjs/index.cjs +926 -0
  4. package/dist/cjs/index.cjs.map +1 -0
  5. package/dist/cjs/index.d.cts +5 -0
  6. package/dist/cjs/index.d.ts +5 -0
  7. package/dist/cjs/index.js +926 -0
  8. package/dist/cjs/mergeForm.d.ts +4 -0
  9. package/dist/cjs/tests/FieldApi.spec.d.ts +1 -0
  10. package/dist/cjs/tests/FieldApi.test-d.d.ts +1 -0
  11. package/dist/cjs/tests/FormApi.spec.d.ts +1 -0
  12. package/dist/cjs/tests/mutateMergeDeep.spec.d.ts +1 -0
  13. package/dist/cjs/tests/utils.d.ts +1 -0
  14. package/dist/cjs/tests/utils.spec.d.ts +1 -0
  15. package/dist/cjs/types.d.ts +14 -0
  16. package/dist/cjs/utils.d.ts +57 -0
  17. package/dist/mjs/FieldApi.d.ts +95 -0
  18. package/dist/mjs/FormApi.d.ts +118 -0
  19. package/dist/mjs/index.d.mts +5 -0
  20. package/dist/mjs/index.d.ts +5 -0
  21. package/dist/mjs/index.js +926 -0
  22. package/dist/mjs/index.mjs +926 -0
  23. package/dist/mjs/index.mjs.map +1 -0
  24. package/dist/mjs/mergeForm.d.ts +4 -0
  25. package/dist/mjs/tests/FieldApi.spec.d.ts +1 -0
  26. package/dist/mjs/tests/FieldApi.test-d.d.ts +1 -0
  27. package/dist/mjs/tests/FormApi.spec.d.ts +1 -0
  28. package/dist/mjs/tests/mutateMergeDeep.spec.d.ts +1 -0
  29. package/dist/mjs/tests/utils.d.ts +1 -0
  30. package/dist/mjs/tests/utils.spec.d.ts +1 -0
  31. package/dist/mjs/types.d.ts +14 -0
  32. package/dist/mjs/utils.d.ts +57 -0
  33. package/package.json +16 -21
  34. package/src/FieldApi.ts +328 -236
  35. package/src/FormApi.ts +302 -216
  36. package/src/index.ts +1 -0
  37. package/src/mergeForm.ts +42 -0
  38. package/src/tests/FieldApi.spec.ts +135 -48
  39. package/src/tests/FieldApi.test-d.ts +10 -6
  40. package/src/tests/FormApi.spec.ts +171 -62
  41. package/src/tests/mutateMergeDeep.spec.ts +32 -0
  42. package/src/tests/utils.ts +1 -1
  43. package/src/types.ts +11 -2
  44. package/src/utils.ts +137 -14
  45. package/build/legacy/FieldApi.cjs +0 -340
  46. package/build/legacy/FieldApi.cjs.map +0 -1
  47. package/build/legacy/FieldApi.d.cts +0 -4
  48. package/build/legacy/FieldApi.d.ts +0 -4
  49. package/build/legacy/FieldApi.js +0 -315
  50. package/build/legacy/FieldApi.js.map +0 -1
  51. package/build/legacy/FormApi.cjs +0 -438
  52. package/build/legacy/FormApi.cjs.map +0 -1
  53. package/build/legacy/FormApi.d.cts +0 -4
  54. package/build/legacy/FormApi.d.ts +0 -4
  55. package/build/legacy/FormApi.js +0 -419
  56. package/build/legacy/FormApi.js.map +0 -1
  57. package/build/legacy/index.cjs +0 -31
  58. package/build/legacy/index.cjs.map +0 -1
  59. package/build/legacy/index.d.cts +0 -170
  60. package/build/legacy/index.d.ts +0 -170
  61. package/build/legacy/index.js +0 -6
  62. package/build/legacy/index.js.map +0 -1
  63. package/build/legacy/types.cjs +0 -19
  64. package/build/legacy/types.cjs.map +0 -1
  65. package/build/legacy/types.d.cts +0 -7
  66. package/build/legacy/types.d.ts +0 -7
  67. package/build/legacy/types.js +0 -1
  68. package/build/legacy/types.js.map +0 -1
  69. package/build/legacy/utils.cjs +0 -132
  70. package/build/legacy/utils.cjs.map +0 -1
  71. package/build/legacy/utils.d.cts +0 -37
  72. package/build/legacy/utils.d.ts +0 -37
  73. package/build/legacy/utils.js +0 -103
  74. package/build/legacy/utils.js.map +0 -1
  75. package/build/modern/FieldApi.cjs +0 -337
  76. package/build/modern/FieldApi.cjs.map +0 -1
  77. package/build/modern/FieldApi.d.cts +0 -4
  78. package/build/modern/FieldApi.d.ts +0 -4
  79. package/build/modern/FieldApi.js +0 -312
  80. package/build/modern/FieldApi.js.map +0 -1
  81. package/build/modern/FormApi.cjs +0 -431
  82. package/build/modern/FormApi.cjs.map +0 -1
  83. package/build/modern/FormApi.d.cts +0 -4
  84. package/build/modern/FormApi.d.ts +0 -4
  85. package/build/modern/FormApi.js +0 -412
  86. package/build/modern/FormApi.js.map +0 -1
  87. package/build/modern/index.cjs +0 -31
  88. package/build/modern/index.cjs.map +0 -1
  89. package/build/modern/index.d.cts +0 -170
  90. package/build/modern/index.d.ts +0 -170
  91. package/build/modern/index.js +0 -6
  92. package/build/modern/index.js.map +0 -1
  93. package/build/modern/types.cjs +0 -19
  94. package/build/modern/types.cjs.map +0 -1
  95. package/build/modern/types.d.cts +0 -7
  96. package/build/modern/types.d.ts +0 -7
  97. package/build/modern/types.js +0 -1
  98. package/build/modern/types.js.map +0 -1
  99. package/build/modern/utils.cjs +0 -132
  100. package/build/modern/utils.cjs.map +0 -1
  101. package/build/modern/utils.d.cts +0 -37
  102. package/build/modern/utils.d.ts +0 -37
  103. package/build/modern/utils.js +0 -103
  104. package/build/modern/utils.js.map +0 -1
@@ -1,170 +0,0 @@
1
- import { Store } from '@tanstack/store';
2
- import { DeepKeys, DeepValue, Updater } from './utils.cjs';
3
- export { Narrow, Pretty, RequiredByKey, UpdaterFn, deleteBy, functionalUpdate, getBy, isNonEmptyArray, setBy } from './utils.cjs';
4
- import { ValidationError, Validator } from './types.cjs';
5
-
6
- type ValidateFn$1<TData, ValidatorType> = (values: TData, formApi: FormApi<TData, ValidatorType>) => ValidationError;
7
- type ValidateOrFn$1<TData, ValidatorType> = ValidatorType extends Validator<TData> ? Parameters<ReturnType<ValidatorType>['validate']>[1] : ValidateFn$1<TData, ValidatorType>;
8
- type ValidateAsyncFn$1<TData, ValidatorType> = (value: TData, fieldApi: FormApi<TData, ValidatorType>) => ValidationError | Promise<ValidationError>;
9
- type FormOptions<TData, ValidatorType> = {
10
- defaultValues?: TData;
11
- defaultState?: Partial<FormState<TData>>;
12
- asyncAlways?: boolean;
13
- asyncDebounceMs?: number;
14
- validator?: ValidatorType;
15
- onMount?: ValidateOrFn$1<TData, ValidatorType>;
16
- onChange?: ValidateOrFn$1<TData, ValidatorType>;
17
- onChangeAsync?: ValidateAsyncFn$1<TData, ValidatorType>;
18
- onChangeAsyncDebounceMs?: number;
19
- onBlur?: ValidateOrFn$1<TData, ValidatorType>;
20
- onBlurAsync?: ValidateAsyncFn$1<TData, ValidatorType>;
21
- onBlurAsyncDebounceMs?: number;
22
- onSubmit?: (values: TData, formApi: FormApi<TData, ValidatorType>) => any | Promise<any>;
23
- onSubmitInvalid?: (values: TData, formApi: FormApi<TData, ValidatorType>) => void;
24
- };
25
- type FieldInfo<TFormData, ValidatorType> = {
26
- instances: Record<string, FieldApi<TFormData, any, unknown, ValidatorType>>;
27
- } & ValidationMeta;
28
- type ValidationMeta = {
29
- validationCount?: number;
30
- validationAsyncCount?: number;
31
- validationPromise?: Promise<ValidationError[] | undefined>;
32
- validationResolve?: (errors: ValidationError[] | undefined) => void;
33
- validationReject?: (errors: unknown) => void;
34
- };
35
- type ValidationErrorMapKeys = `on${Capitalize<ValidationCause>}`;
36
- type ValidationErrorMap = {
37
- [K in ValidationErrorMapKeys]?: ValidationError;
38
- };
39
- type FormState<TData> = {
40
- values: TData;
41
- isFormValidating: boolean;
42
- formValidationCount: number;
43
- isFormValid: boolean;
44
- errors: ValidationError[];
45
- errorMap: ValidationErrorMap;
46
- fieldMeta: Record<DeepKeys<TData>, FieldMeta>;
47
- isFieldsValidating: boolean;
48
- isFieldsValid: boolean;
49
- isSubmitting: boolean;
50
- isTouched: boolean;
51
- isSubmitted: boolean;
52
- isValidating: boolean;
53
- isValid: boolean;
54
- canSubmit: boolean;
55
- submissionAttempts: number;
56
- };
57
- declare class FormApi<TFormData, ValidatorType> {
58
- options: FormOptions<TFormData, ValidatorType>;
59
- store: Store<FormState<TFormData>>;
60
- state: FormState<TFormData>;
61
- fieldInfo: Record<DeepKeys<TFormData>, FieldInfo<TFormData, ValidatorType>>;
62
- fieldName?: string;
63
- validationMeta: ValidationMeta;
64
- constructor(opts?: FormOptions<TFormData, ValidatorType>);
65
- mount: () => void;
66
- update: (options?: FormOptions<TFormData, ValidatorType>) => void;
67
- reset: () => void;
68
- validateAllFields: (cause: ValidationCause) => Promise<ValidationError[][]>;
69
- validateSync: (cause: ValidationCause) => void;
70
- __leaseValidateAsync: () => number;
71
- cancelValidateAsync: () => void;
72
- validateAsync: (cause: ValidationCause) => Promise<ValidationError[]>;
73
- validate: (cause: ValidationCause) => ValidationError[] | Promise<ValidationError[]>;
74
- handleSubmit: () => Promise<void>;
75
- getFieldValue: <TField extends DeepKeys<TFormData>>(field: TField) => DeepValue<TFormData, TField>;
76
- getFieldMeta: <TField extends DeepKeys<TFormData>>(field: TField) => FieldMeta | undefined;
77
- getFieldInfo: <TField extends DeepKeys<TFormData>>(field: TField) => FieldInfo<TFormData, ValidatorType>;
78
- setFieldMeta: <TField extends DeepKeys<TFormData>>(field: TField, updater: Updater<FieldMeta>) => void;
79
- setFieldValue: <TField extends DeepKeys<TFormData>>(field: TField, updater: Updater<DeepValue<TFormData, TField>>, opts?: {
80
- touch?: boolean;
81
- }) => void;
82
- deleteField: <TField extends DeepKeys<TFormData>>(field: TField) => void;
83
- pushFieldValue: <TField extends DeepKeys<TFormData>>(field: TField, value: DeepValue<TFormData, TField> extends any[] ? DeepValue<TFormData, TField>[number] : never, opts?: {
84
- touch?: boolean;
85
- }) => void;
86
- insertFieldValue: <TField extends DeepKeys<TFormData>>(field: TField, index: number, value: DeepValue<TFormData, TField> extends any[] ? DeepValue<TFormData, TField>[number] : never, opts?: {
87
- touch?: boolean;
88
- }) => void;
89
- removeFieldValue: <TField extends DeepKeys<TFormData>>(field: TField, index: number, opts?: {
90
- touch?: boolean;
91
- }) => void;
92
- swapFieldValues: <TField extends DeepKeys<TFormData>>(field: TField, index1: number, index2: number) => void;
93
- }
94
-
95
- type ValidationCause = 'change' | 'blur' | 'submit' | 'mount';
96
- type ValidateFn<TParentData, TName extends DeepKeys<TParentData>, ValidatorType, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> = (value: TData, fieldApi: FieldApi<TParentData, TName, ValidatorType, TData>) => ValidationError;
97
- type ValidateOrFn<TParentData, TName extends DeepKeys<TParentData>, ValidatorType, FormValidator, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> = ValidatorType extends Validator<TData> ? Parameters<ReturnType<ValidatorType>['validate']>[1] | ValidateFn<TParentData, TName, ValidatorType, TData> : FormValidator extends Validator<TData> ? Parameters<ReturnType<FormValidator>['validate']>[1] | ValidateFn<TParentData, TName, ValidatorType, TData> : ValidateFn<TParentData, TName, ValidatorType, TData>;
98
- type ValidateAsyncFn<TParentData, TName extends DeepKeys<TParentData>, ValidatorType, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> = (value: TData, fieldApi: FieldApi<TParentData, TName, ValidatorType, TData>) => ValidationError | Promise<ValidationError>;
99
- type AsyncValidateOrFn<TParentData, TName extends DeepKeys<TParentData>, ValidatorType, FormValidator, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> = ValidatorType extends Validator<TData> ? Parameters<ReturnType<ValidatorType>['validate']>[1] | ValidateAsyncFn<TParentData, TName, ValidatorType, TData> : FormValidator extends Validator<TData> ? Parameters<ReturnType<FormValidator>['validate']>[1] | ValidateAsyncFn<TParentData, TName, ValidatorType, TData> : ValidateAsyncFn<TParentData, TName, ValidatorType, TData>;
100
- interface FieldOptions<TParentData, TName extends DeepKeys<TParentData>, ValidatorType, FormValidator, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> {
101
- name: TName;
102
- index?: TData extends any[] ? number : never;
103
- defaultValue?: TData;
104
- asyncDebounceMs?: number;
105
- asyncAlways?: boolean;
106
- preserveValue?: boolean;
107
- validator?: ValidatorType;
108
- onMount?: (formApi: FieldApi<TParentData, TName, ValidatorType, TData>) => void;
109
- onChange?: ValidateOrFn<TParentData, TName, ValidatorType, FormValidator, TData>;
110
- onChangeAsync?: AsyncValidateOrFn<TParentData, TName, ValidatorType, FormValidator, TData>;
111
- onChangeAsyncDebounceMs?: number;
112
- onBlur?: ValidateOrFn<TParentData, TName, ValidatorType, FormValidator, TData>;
113
- onBlurAsync?: AsyncValidateOrFn<TParentData, TName, ValidatorType, FormValidator, TData>;
114
- onBlurAsyncDebounceMs?: number;
115
- onSubmit?: ValidateOrFn<TParentData, TName, ValidatorType, FormValidator, TData>;
116
- onSubmitAsync?: AsyncValidateOrFn<TParentData, TName, ValidatorType, FormValidator, TData>;
117
- defaultMeta?: Partial<FieldMeta>;
118
- }
119
- interface FieldApiOptions<TParentData, TName extends DeepKeys<TParentData>, ValidatorType, FormValidator, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> extends FieldOptions<TParentData, TName, ValidatorType, FormValidator, TData> {
120
- form: FormApi<TParentData, FormValidator>;
121
- }
122
- type FieldMeta = {
123
- isTouched: boolean;
124
- touchedErrors: ValidationError[];
125
- errors: ValidationError[];
126
- errorMap: ValidationErrorMap;
127
- isValidating: boolean;
128
- };
129
- type FieldState<TData> = {
130
- value: TData;
131
- meta: FieldMeta;
132
- };
133
- type ResolveName<TParentData> = unknown extends TParentData ? string : DeepKeys<TParentData>;
134
- declare class FieldApi<TParentData, TName extends DeepKeys<TParentData>, ValidatorType, FormValidator, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> {
135
- uid: number;
136
- form: FieldApiOptions<TParentData, TName, ValidatorType, TData>['form'];
137
- name: DeepKeys<TParentData>;
138
- options: FieldApiOptions<TParentData, TName, ValidatorType, TData>;
139
- store: Store<FieldState<TData>>;
140
- state: FieldState<TData>;
141
- prevState: FieldState<TData>;
142
- constructor(opts: FieldApiOptions<TParentData, TName, ValidatorType, FormValidator, TData>);
143
- mount: () => () => void;
144
- update: (opts: FieldApiOptions<TParentData, TName, ValidatorType, TData>) => void;
145
- getValue: () => TData;
146
- setValue: (updater: Updater<TData>, options?: {
147
- touch?: boolean;
148
- notify?: boolean;
149
- }) => void;
150
- _getMeta: () => FieldMeta | undefined;
151
- getMeta: () => FieldMeta;
152
- setMeta: (updater: Updater<FieldMeta>) => void;
153
- getInfo: () => FieldInfo<TParentData, TData>;
154
- pushValue: (value: TData extends any[] ? TData[number] : never) => void;
155
- insertValue: (index: number, value: TData extends any[] ? TData[number] : never) => void;
156
- removeValue: (index: number) => void;
157
- swapValues: (aIndex: number, bIndex: number) => void;
158
- getSubField: <TSubName extends DeepKeys<TData>, TSubData extends DeepValue<TData, TSubName> = DeepValue<TData, TSubName>>(name: TSubName) => FieldApi<TData, TSubName, ValidatorType, TSubData, DeepValue<TData, TSubName>>;
159
- validateSync: (value: TData | undefined, cause: ValidationCause) => {
160
- hasErrored: boolean;
161
- };
162
- __leaseValidateAsync: () => number;
163
- cancelValidateAsync: () => void;
164
- validateAsync: (value: TData | undefined, cause: ValidationCause) => Promise<ValidationError[]>;
165
- validate: (cause: ValidationCause, value?: TData) => ValidationError[] | Promise<ValidationError[]>;
166
- handleChange: (updater: Updater<TData>) => void;
167
- handleBlur: () => void;
168
- }
169
-
170
- export { DeepKeys, DeepValue, FieldApi, FieldApiOptions, FieldInfo, FieldMeta, FieldOptions, FieldState, FormApi, FormOptions, FormState, ResolveName, Updater, ValidationCause, ValidationError, ValidationErrorMap, ValidationErrorMapKeys, ValidationMeta, Validator };
@@ -1,170 +0,0 @@
1
- import { Store } from '@tanstack/store';
2
- import { DeepKeys, DeepValue, Updater } from './utils.js';
3
- export { Narrow, Pretty, RequiredByKey, UpdaterFn, deleteBy, functionalUpdate, getBy, isNonEmptyArray, setBy } from './utils.js';
4
- import { ValidationError, Validator } from './types.js';
5
-
6
- type ValidateFn$1<TData, ValidatorType> = (values: TData, formApi: FormApi<TData, ValidatorType>) => ValidationError;
7
- type ValidateOrFn$1<TData, ValidatorType> = ValidatorType extends Validator<TData> ? Parameters<ReturnType<ValidatorType>['validate']>[1] : ValidateFn$1<TData, ValidatorType>;
8
- type ValidateAsyncFn$1<TData, ValidatorType> = (value: TData, fieldApi: FormApi<TData, ValidatorType>) => ValidationError | Promise<ValidationError>;
9
- type FormOptions<TData, ValidatorType> = {
10
- defaultValues?: TData;
11
- defaultState?: Partial<FormState<TData>>;
12
- asyncAlways?: boolean;
13
- asyncDebounceMs?: number;
14
- validator?: ValidatorType;
15
- onMount?: ValidateOrFn$1<TData, ValidatorType>;
16
- onChange?: ValidateOrFn$1<TData, ValidatorType>;
17
- onChangeAsync?: ValidateAsyncFn$1<TData, ValidatorType>;
18
- onChangeAsyncDebounceMs?: number;
19
- onBlur?: ValidateOrFn$1<TData, ValidatorType>;
20
- onBlurAsync?: ValidateAsyncFn$1<TData, ValidatorType>;
21
- onBlurAsyncDebounceMs?: number;
22
- onSubmit?: (values: TData, formApi: FormApi<TData, ValidatorType>) => any | Promise<any>;
23
- onSubmitInvalid?: (values: TData, formApi: FormApi<TData, ValidatorType>) => void;
24
- };
25
- type FieldInfo<TFormData, ValidatorType> = {
26
- instances: Record<string, FieldApi<TFormData, any, unknown, ValidatorType>>;
27
- } & ValidationMeta;
28
- type ValidationMeta = {
29
- validationCount?: number;
30
- validationAsyncCount?: number;
31
- validationPromise?: Promise<ValidationError[] | undefined>;
32
- validationResolve?: (errors: ValidationError[] | undefined) => void;
33
- validationReject?: (errors: unknown) => void;
34
- };
35
- type ValidationErrorMapKeys = `on${Capitalize<ValidationCause>}`;
36
- type ValidationErrorMap = {
37
- [K in ValidationErrorMapKeys]?: ValidationError;
38
- };
39
- type FormState<TData> = {
40
- values: TData;
41
- isFormValidating: boolean;
42
- formValidationCount: number;
43
- isFormValid: boolean;
44
- errors: ValidationError[];
45
- errorMap: ValidationErrorMap;
46
- fieldMeta: Record<DeepKeys<TData>, FieldMeta>;
47
- isFieldsValidating: boolean;
48
- isFieldsValid: boolean;
49
- isSubmitting: boolean;
50
- isTouched: boolean;
51
- isSubmitted: boolean;
52
- isValidating: boolean;
53
- isValid: boolean;
54
- canSubmit: boolean;
55
- submissionAttempts: number;
56
- };
57
- declare class FormApi<TFormData, ValidatorType> {
58
- options: FormOptions<TFormData, ValidatorType>;
59
- store: Store<FormState<TFormData>>;
60
- state: FormState<TFormData>;
61
- fieldInfo: Record<DeepKeys<TFormData>, FieldInfo<TFormData, ValidatorType>>;
62
- fieldName?: string;
63
- validationMeta: ValidationMeta;
64
- constructor(opts?: FormOptions<TFormData, ValidatorType>);
65
- mount: () => void;
66
- update: (options?: FormOptions<TFormData, ValidatorType>) => void;
67
- reset: () => void;
68
- validateAllFields: (cause: ValidationCause) => Promise<ValidationError[][]>;
69
- validateSync: (cause: ValidationCause) => void;
70
- __leaseValidateAsync: () => number;
71
- cancelValidateAsync: () => void;
72
- validateAsync: (cause: ValidationCause) => Promise<ValidationError[]>;
73
- validate: (cause: ValidationCause) => ValidationError[] | Promise<ValidationError[]>;
74
- handleSubmit: () => Promise<void>;
75
- getFieldValue: <TField extends DeepKeys<TFormData>>(field: TField) => DeepValue<TFormData, TField>;
76
- getFieldMeta: <TField extends DeepKeys<TFormData>>(field: TField) => FieldMeta | undefined;
77
- getFieldInfo: <TField extends DeepKeys<TFormData>>(field: TField) => FieldInfo<TFormData, ValidatorType>;
78
- setFieldMeta: <TField extends DeepKeys<TFormData>>(field: TField, updater: Updater<FieldMeta>) => void;
79
- setFieldValue: <TField extends DeepKeys<TFormData>>(field: TField, updater: Updater<DeepValue<TFormData, TField>>, opts?: {
80
- touch?: boolean;
81
- }) => void;
82
- deleteField: <TField extends DeepKeys<TFormData>>(field: TField) => void;
83
- pushFieldValue: <TField extends DeepKeys<TFormData>>(field: TField, value: DeepValue<TFormData, TField> extends any[] ? DeepValue<TFormData, TField>[number] : never, opts?: {
84
- touch?: boolean;
85
- }) => void;
86
- insertFieldValue: <TField extends DeepKeys<TFormData>>(field: TField, index: number, value: DeepValue<TFormData, TField> extends any[] ? DeepValue<TFormData, TField>[number] : never, opts?: {
87
- touch?: boolean;
88
- }) => void;
89
- removeFieldValue: <TField extends DeepKeys<TFormData>>(field: TField, index: number, opts?: {
90
- touch?: boolean;
91
- }) => void;
92
- swapFieldValues: <TField extends DeepKeys<TFormData>>(field: TField, index1: number, index2: number) => void;
93
- }
94
-
95
- type ValidationCause = 'change' | 'blur' | 'submit' | 'mount';
96
- type ValidateFn<TParentData, TName extends DeepKeys<TParentData>, ValidatorType, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> = (value: TData, fieldApi: FieldApi<TParentData, TName, ValidatorType, TData>) => ValidationError;
97
- type ValidateOrFn<TParentData, TName extends DeepKeys<TParentData>, ValidatorType, FormValidator, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> = ValidatorType extends Validator<TData> ? Parameters<ReturnType<ValidatorType>['validate']>[1] | ValidateFn<TParentData, TName, ValidatorType, TData> : FormValidator extends Validator<TData> ? Parameters<ReturnType<FormValidator>['validate']>[1] | ValidateFn<TParentData, TName, ValidatorType, TData> : ValidateFn<TParentData, TName, ValidatorType, TData>;
98
- type ValidateAsyncFn<TParentData, TName extends DeepKeys<TParentData>, ValidatorType, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> = (value: TData, fieldApi: FieldApi<TParentData, TName, ValidatorType, TData>) => ValidationError | Promise<ValidationError>;
99
- type AsyncValidateOrFn<TParentData, TName extends DeepKeys<TParentData>, ValidatorType, FormValidator, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> = ValidatorType extends Validator<TData> ? Parameters<ReturnType<ValidatorType>['validate']>[1] | ValidateAsyncFn<TParentData, TName, ValidatorType, TData> : FormValidator extends Validator<TData> ? Parameters<ReturnType<FormValidator>['validate']>[1] | ValidateAsyncFn<TParentData, TName, ValidatorType, TData> : ValidateAsyncFn<TParentData, TName, ValidatorType, TData>;
100
- interface FieldOptions<TParentData, TName extends DeepKeys<TParentData>, ValidatorType, FormValidator, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> {
101
- name: TName;
102
- index?: TData extends any[] ? number : never;
103
- defaultValue?: TData;
104
- asyncDebounceMs?: number;
105
- asyncAlways?: boolean;
106
- preserveValue?: boolean;
107
- validator?: ValidatorType;
108
- onMount?: (formApi: FieldApi<TParentData, TName, ValidatorType, TData>) => void;
109
- onChange?: ValidateOrFn<TParentData, TName, ValidatorType, FormValidator, TData>;
110
- onChangeAsync?: AsyncValidateOrFn<TParentData, TName, ValidatorType, FormValidator, TData>;
111
- onChangeAsyncDebounceMs?: number;
112
- onBlur?: ValidateOrFn<TParentData, TName, ValidatorType, FormValidator, TData>;
113
- onBlurAsync?: AsyncValidateOrFn<TParentData, TName, ValidatorType, FormValidator, TData>;
114
- onBlurAsyncDebounceMs?: number;
115
- onSubmit?: ValidateOrFn<TParentData, TName, ValidatorType, FormValidator, TData>;
116
- onSubmitAsync?: AsyncValidateOrFn<TParentData, TName, ValidatorType, FormValidator, TData>;
117
- defaultMeta?: Partial<FieldMeta>;
118
- }
119
- interface FieldApiOptions<TParentData, TName extends DeepKeys<TParentData>, ValidatorType, FormValidator, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> extends FieldOptions<TParentData, TName, ValidatorType, FormValidator, TData> {
120
- form: FormApi<TParentData, FormValidator>;
121
- }
122
- type FieldMeta = {
123
- isTouched: boolean;
124
- touchedErrors: ValidationError[];
125
- errors: ValidationError[];
126
- errorMap: ValidationErrorMap;
127
- isValidating: boolean;
128
- };
129
- type FieldState<TData> = {
130
- value: TData;
131
- meta: FieldMeta;
132
- };
133
- type ResolveName<TParentData> = unknown extends TParentData ? string : DeepKeys<TParentData>;
134
- declare class FieldApi<TParentData, TName extends DeepKeys<TParentData>, ValidatorType, FormValidator, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> {
135
- uid: number;
136
- form: FieldApiOptions<TParentData, TName, ValidatorType, TData>['form'];
137
- name: DeepKeys<TParentData>;
138
- options: FieldApiOptions<TParentData, TName, ValidatorType, TData>;
139
- store: Store<FieldState<TData>>;
140
- state: FieldState<TData>;
141
- prevState: FieldState<TData>;
142
- constructor(opts: FieldApiOptions<TParentData, TName, ValidatorType, FormValidator, TData>);
143
- mount: () => () => void;
144
- update: (opts: FieldApiOptions<TParentData, TName, ValidatorType, TData>) => void;
145
- getValue: () => TData;
146
- setValue: (updater: Updater<TData>, options?: {
147
- touch?: boolean;
148
- notify?: boolean;
149
- }) => void;
150
- _getMeta: () => FieldMeta | undefined;
151
- getMeta: () => FieldMeta;
152
- setMeta: (updater: Updater<FieldMeta>) => void;
153
- getInfo: () => FieldInfo<TParentData, TData>;
154
- pushValue: (value: TData extends any[] ? TData[number] : never) => void;
155
- insertValue: (index: number, value: TData extends any[] ? TData[number] : never) => void;
156
- removeValue: (index: number) => void;
157
- swapValues: (aIndex: number, bIndex: number) => void;
158
- getSubField: <TSubName extends DeepKeys<TData>, TSubData extends DeepValue<TData, TSubName> = DeepValue<TData, TSubName>>(name: TSubName) => FieldApi<TData, TSubName, ValidatorType, TSubData, DeepValue<TData, TSubName>>;
159
- validateSync: (value: TData | undefined, cause: ValidationCause) => {
160
- hasErrored: boolean;
161
- };
162
- __leaseValidateAsync: () => number;
163
- cancelValidateAsync: () => void;
164
- validateAsync: (value: TData | undefined, cause: ValidationCause) => Promise<ValidationError[]>;
165
- validate: (cause: ValidationCause, value?: TData) => ValidationError[] | Promise<ValidationError[]>;
166
- handleChange: (updater: Updater<TData>) => void;
167
- handleBlur: () => void;
168
- }
169
-
170
- export { DeepKeys, DeepValue, FieldApi, FieldApiOptions, FieldInfo, FieldMeta, FieldOptions, FieldState, FormApi, FormOptions, FormState, ResolveName, Updater, ValidationCause, ValidationError, ValidationErrorMap, ValidationErrorMapKeys, ValidationMeta, Validator };
@@ -1,6 +0,0 @@
1
- // src/index.ts
2
- export * from "./FormApi.js";
3
- export * from "./FieldApi.js";
4
- export * from "./utils.js";
5
- export * from "./types.js";
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export * from './FormApi'\nexport * from './FieldApi'\nexport * from './utils'\nexport * from './types'\n"],"mappings":";AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
@@ -1,19 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __copyProps = (to, from, except, desc) => {
7
- if (from && typeof from === "object" || typeof from === "function") {
8
- for (let key of __getOwnPropNames(from))
9
- if (!__hasOwnProp.call(to, key) && key !== except)
10
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
- }
12
- return to;
13
- };
14
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
-
16
- // src/types.ts
17
- var types_exports = {};
18
- module.exports = __toCommonJS(types_exports);
19
- //# sourceMappingURL=types.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/types.ts"],"sourcesContent":["export type ValidationError = undefined | false | null | string\n\n// If/when TypeScript supports higher-kinded types, this should not be `unknown` anymore\nexport type Validator<Type, Fn = unknown> = () => {\n validate(value: Type, fn: Fn): ValidationError\n validateAsync(value: Type, fn: Fn): Promise<ValidationError>\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1,7 +0,0 @@
1
- type ValidationError = undefined | false | null | string;
2
- type Validator<Type, Fn = unknown> = () => {
3
- validate(value: Type, fn: Fn): ValidationError;
4
- validateAsync(value: Type, fn: Fn): Promise<ValidationError>;
5
- };
6
-
7
- export { ValidationError, Validator };
@@ -1,7 +0,0 @@
1
- type ValidationError = undefined | false | null | string;
2
- type Validator<Type, Fn = unknown> = () => {
3
- validate(value: Type, fn: Fn): ValidationError;
4
- validateAsync(value: Type, fn: Fn): Promise<ValidationError>;
5
- };
6
-
7
- export { ValidationError, Validator };
@@ -1 +0,0 @@
1
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,132 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/utils.ts
21
- var utils_exports = {};
22
- __export(utils_exports, {
23
- deleteBy: () => deleteBy,
24
- functionalUpdate: () => functionalUpdate,
25
- getBy: () => getBy,
26
- isNonEmptyArray: () => isNonEmptyArray,
27
- setBy: () => setBy
28
- });
29
- module.exports = __toCommonJS(utils_exports);
30
- function functionalUpdate(updater, input) {
31
- return typeof updater === "function" ? updater(input) : updater;
32
- }
33
- function getBy(obj, path) {
34
- const pathObj = makePathArray(path);
35
- return pathObj.reduce((current, pathPart) => {
36
- if (typeof current !== "undefined") {
37
- return current[pathPart];
38
- }
39
- return void 0;
40
- }, obj);
41
- }
42
- function setBy(obj, _path, updater) {
43
- const path = makePathArray(_path);
44
- function doSet(parent) {
45
- if (!path.length) {
46
- return functionalUpdate(updater, parent);
47
- }
48
- const key = path.shift();
49
- if (typeof key === "string") {
50
- if (typeof parent === "object") {
51
- return {
52
- ...parent,
53
- [key]: doSet(parent[key])
54
- };
55
- }
56
- return {
57
- [key]: doSet()
58
- };
59
- }
60
- if (Array.isArray(parent) && key !== void 0) {
61
- const prefix = parent.slice(0, key);
62
- return [
63
- ...prefix.length ? prefix : new Array(key),
64
- doSet(parent[key]),
65
- ...parent.slice(key + 1)
66
- ];
67
- }
68
- return [...new Array(key), doSet()];
69
- }
70
- return doSet(obj);
71
- }
72
- function deleteBy(obj, _path) {
73
- const path = makePathArray(_path);
74
- function doDelete(parent) {
75
- if (path.length === 1) {
76
- const finalPath = path[0];
77
- const { [finalPath]: remove, ...rest } = parent;
78
- return rest;
79
- }
80
- const key = path.shift();
81
- if (typeof key === "string") {
82
- if (typeof parent === "object") {
83
- return {
84
- ...parent,
85
- [key]: doDelete(parent[key])
86
- };
87
- }
88
- }
89
- if (typeof key === "number") {
90
- if (Array.isArray(parent)) {
91
- const prefix = parent.slice(0, key);
92
- return [
93
- ...prefix.length ? prefix : new Array(key),
94
- doDelete(parent[key]),
95
- ...parent.slice(key + 1)
96
- ];
97
- }
98
- }
99
- throw new Error("It seems we have created an infinite loop in deleteBy. ");
100
- }
101
- return doDelete(obj);
102
- }
103
- var reFindNumbers0 = /^(\d*)$/gm;
104
- var reFindNumbers1 = /\.(\d*)\./gm;
105
- var reFindNumbers2 = /^(\d*)\./gm;
106
- var reFindNumbers3 = /\.(\d*$)/gm;
107
- var reFindMultiplePeriods = /\.{2,}/gm;
108
- var intPrefix = "__int__";
109
- var intReplace = `${intPrefix}$1`;
110
- function makePathArray(str) {
111
- if (typeof str !== "string") {
112
- throw new Error("Path must be a string.");
113
- }
114
- return str.replace("[", ".").replace("]", "").replace(reFindNumbers0, intReplace).replace(reFindNumbers1, `.${intReplace}.`).replace(reFindNumbers2, `${intReplace}.`).replace(reFindNumbers3, `.${intReplace}`).replace(reFindMultiplePeriods, ".").split(".").map((d) => {
115
- if (d.indexOf(intPrefix) === 0) {
116
- return parseInt(d.substring(intPrefix.length), 10);
117
- }
118
- return d;
119
- });
120
- }
121
- function isNonEmptyArray(obj) {
122
- return !(Array.isArray(obj) && obj.length === 0);
123
- }
124
- // Annotate the CommonJS export names for ESM import in node:
125
- 0 && (module.exports = {
126
- deleteBy,
127
- functionalUpdate,
128
- getBy,
129
- isNonEmptyArray,
130
- setBy
131
- });
132
- //# sourceMappingURL=utils.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utils.ts"],"sourcesContent":["export type UpdaterFn<TInput, TOutput = TInput> = (input: TInput) => TOutput\n\nexport type Updater<TInput, TOutput = TInput> =\n | TOutput\n | UpdaterFn<TInput, TOutput>\n\nexport function functionalUpdate<TInput, TOutput = TInput>(\n updater: Updater<TInput, TOutput>,\n input: TInput,\n): TOutput {\n return typeof updater === 'function'\n ? (updater as UpdaterFn<TInput, TOutput>)(input)\n : updater\n}\n\n/**\n * Get a value from an object using a path, including dot notation.\n */\nexport function getBy(obj: any, path: any) {\n const pathObj = makePathArray(path)\n return pathObj.reduce((current: any, pathPart: any) => {\n if (typeof current !== 'undefined') {\n return current[pathPart]\n }\n return undefined\n }, obj)\n}\n\n/**\n * Set a value on an object using a path, including dot notation.\n */\nexport function setBy(obj: any, _path: any, updater: Updater<any>) {\n const path = makePathArray(_path)\n\n function doSet(parent?: any): any {\n if (!path.length) {\n return functionalUpdate(updater, parent)\n }\n\n const key = path.shift()\n\n if (typeof key === 'string') {\n if (typeof parent === 'object') {\n return {\n ...parent,\n [key]: doSet(parent[key]),\n }\n }\n return {\n [key]: doSet(),\n }\n }\n\n if (Array.isArray(parent) && key !== undefined) {\n const prefix = parent.slice(0, key)\n return [\n ...(prefix.length ? prefix : new Array(key)),\n doSet(parent[key]),\n ...parent.slice(key + 1),\n ]\n }\n return [...new Array(key), doSet()]\n }\n\n return doSet(obj)\n}\n\n/**\n * Delete a field on an object using a path, including dot notation.\n */\nexport function deleteBy(obj: any, _path: any) {\n const path = makePathArray(_path)\n\n function doDelete(parent: any): any {\n if (path.length === 1) {\n const finalPath = path[0]!\n const { [finalPath]: remove, ...rest } = parent\n return rest\n }\n\n const key = path.shift()\n\n if (typeof key === 'string') {\n if (typeof parent === 'object') {\n return {\n ...parent,\n [key]: doDelete(parent[key]),\n }\n }\n }\n\n if (typeof key === 'number') {\n if (Array.isArray(parent)) {\n const prefix = parent.slice(0, key)\n return [\n ...(prefix.length ? prefix : new Array(key)),\n doDelete(parent[key]),\n ...parent.slice(key + 1),\n ]\n }\n }\n\n throw new Error('It seems we have created an infinite loop in deleteBy. ')\n }\n\n return doDelete(obj)\n}\n\nconst reFindNumbers0 = /^(\\d*)$/gm\nconst reFindNumbers1 = /\\.(\\d*)\\./gm\nconst reFindNumbers2 = /^(\\d*)\\./gm\nconst reFindNumbers3 = /\\.(\\d*$)/gm\nconst reFindMultiplePeriods = /\\.{2,}/gm\n\nconst intPrefix = '__int__'\nconst intReplace = `${intPrefix}$1`\n\nfunction makePathArray(str: string) {\n if (typeof str !== 'string') {\n throw new Error('Path must be a string.')\n }\n\n return str\n .replace('[', '.')\n .replace(']', '')\n .replace(reFindNumbers0, intReplace)\n .replace(reFindNumbers1, `.${intReplace}.`)\n .replace(reFindNumbers2, `${intReplace}.`)\n .replace(reFindNumbers3, `.${intReplace}`)\n .replace(reFindMultiplePeriods, '.')\n .split('.')\n .map((d) => {\n if (d.indexOf(intPrefix) === 0) {\n return parseInt(d.substring(intPrefix.length), 10)\n }\n return d\n })\n}\n\nexport function isNonEmptyArray(obj: any) {\n return !(Array.isArray(obj) && obj.length === 0)\n}\n\nexport type RequiredByKey<T, K extends keyof T> = Omit<T, K> &\n Required<Pick<T, K>>\n\ntype ComputeRange<\n N extends number,\n Result extends Array<unknown> = [],\n> = Result['length'] extends N\n ? Result\n : ComputeRange<N, [...Result, Result['length']]>\ntype Index40 = ComputeRange<40>[number]\n\n// Is this type a tuple?\ntype IsTuple<T> = T extends readonly any[] & { length: infer Length }\n ? Length extends Index40\n ? T\n : never\n : never\n\n// If this type is a tuple, what indices are allowed?\ntype AllowedIndexes<\n Tuple extends ReadonlyArray<any>,\n Keys extends number = never,\n> = Tuple extends readonly []\n ? Keys\n : Tuple extends readonly [infer _, ...infer Tail]\n ? AllowedIndexes<Tail, Keys | Tail['length']>\n : Keys\n\nexport type DeepKeys<T, TDepth extends any[] = []> = TDepth['length'] extends 5\n ? never\n : unknown extends T\n ? string\n : object extends T\n ? string\n : T extends readonly any[] & IsTuple<T>\n ? AllowedIndexes<T> | DeepKeysPrefix<T, AllowedIndexes<T>, TDepth>\n : T extends any[]\n ? DeepKeys<T[number], [...TDepth, any]>\n : T extends Date\n ? never\n : T extends object\n ? (keyof T & string) | DeepKeysPrefix<T, keyof T, TDepth>\n : never\n\ntype DeepKeysPrefix<\n T,\n TPrefix,\n TDepth extends any[],\n> = TPrefix extends keyof T & (number | string)\n ? `${TPrefix}.${DeepKeys<T[TPrefix], [...TDepth, any]> & string}`\n : never\n\nexport type DeepValue<T, TProp> = T extends Record<string | number, any>\n ? TProp extends `${infer TBranch}.${infer TDeepProp}`\n ? DeepValue<T[TBranch], TDeepProp>\n : T[TProp & string]\n : never\n\ntype Narrowable = string | number | bigint | boolean\n\ntype NarrowRaw<A> =\n | (A extends [] ? [] : never)\n | (A extends Narrowable ? A : never)\n | {\n [K in keyof A]: A[K] extends Function ? A[K] : NarrowRaw<A[K]>\n }\n\nexport type Narrow<A> = Try<A, [], NarrowRaw<A>>\n\ntype Try<A1, A2, Catch = never> = A1 extends A2 ? A1 : Catch\n\n// Hack to get TypeScript to show simplified types in error messages\nexport type Pretty<T> = { [K in keyof T]: T[K] } & {}\n"],"mappings":"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","names":[]}
@@ -1,37 +0,0 @@
1
- type UpdaterFn<TInput, TOutput = TInput> = (input: TInput) => TOutput;
2
- type Updater<TInput, TOutput = TInput> = TOutput | UpdaterFn<TInput, TOutput>;
3
- declare function functionalUpdate<TInput, TOutput = TInput>(updater: Updater<TInput, TOutput>, input: TInput): TOutput;
4
- /**
5
- * Get a value from an object using a path, including dot notation.
6
- */
7
- declare function getBy(obj: any, path: any): any;
8
- /**
9
- * Set a value on an object using a path, including dot notation.
10
- */
11
- declare function setBy(obj: any, _path: any, updater: Updater<any>): any;
12
- /**
13
- * Delete a field on an object using a path, including dot notation.
14
- */
15
- declare function deleteBy(obj: any, _path: any): any;
16
- declare function isNonEmptyArray(obj: any): boolean;
17
- type RequiredByKey<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;
18
- type ComputeRange<N extends number, Result extends Array<unknown> = []> = Result['length'] extends N ? Result : ComputeRange<N, [...Result, Result['length']]>;
19
- type Index40 = ComputeRange<40>[number];
20
- type IsTuple<T> = T extends readonly any[] & {
21
- length: infer Length;
22
- } ? Length extends Index40 ? T : never : never;
23
- type AllowedIndexes<Tuple extends ReadonlyArray<any>, Keys extends number = never> = Tuple extends readonly [] ? Keys : Tuple extends readonly [infer _, ...infer Tail] ? AllowedIndexes<Tail, Keys | Tail['length']> : Keys;
24
- type DeepKeys<T, TDepth extends any[] = []> = TDepth['length'] extends 5 ? never : unknown extends T ? string : object extends T ? string : T extends readonly any[] & IsTuple<T> ? AllowedIndexes<T> | DeepKeysPrefix<T, AllowedIndexes<T>, TDepth> : T extends any[] ? DeepKeys<T[number], [...TDepth, any]> : T extends Date ? never : T extends object ? (keyof T & string) | DeepKeysPrefix<T, keyof T, TDepth> : never;
25
- type DeepKeysPrefix<T, TPrefix, TDepth extends any[]> = TPrefix extends keyof T & (number | string) ? `${TPrefix}.${DeepKeys<T[TPrefix], [...TDepth, any]> & string}` : never;
26
- type DeepValue<T, TProp> = T extends Record<string | number, any> ? TProp extends `${infer TBranch}.${infer TDeepProp}` ? DeepValue<T[TBranch], TDeepProp> : T[TProp & string] : never;
27
- type Narrowable = string | number | bigint | boolean;
28
- type NarrowRaw<A> = (A extends [] ? [] : never) | (A extends Narrowable ? A : never) | {
29
- [K in keyof A]: A[K] extends Function ? A[K] : NarrowRaw<A[K]>;
30
- };
31
- type Narrow<A> = Try<A, [], NarrowRaw<A>>;
32
- type Try<A1, A2, Catch = never> = A1 extends A2 ? A1 : Catch;
33
- type Pretty<T> = {
34
- [K in keyof T]: T[K];
35
- } & {};
36
-
37
- export { DeepKeys, DeepValue, Narrow, Pretty, RequiredByKey, Updater, UpdaterFn, deleteBy, functionalUpdate, getBy, isNonEmptyArray, setBy };
@@ -1,37 +0,0 @@
1
- type UpdaterFn<TInput, TOutput = TInput> = (input: TInput) => TOutput;
2
- type Updater<TInput, TOutput = TInput> = TOutput | UpdaterFn<TInput, TOutput>;
3
- declare function functionalUpdate<TInput, TOutput = TInput>(updater: Updater<TInput, TOutput>, input: TInput): TOutput;
4
- /**
5
- * Get a value from an object using a path, including dot notation.
6
- */
7
- declare function getBy(obj: any, path: any): any;
8
- /**
9
- * Set a value on an object using a path, including dot notation.
10
- */
11
- declare function setBy(obj: any, _path: any, updater: Updater<any>): any;
12
- /**
13
- * Delete a field on an object using a path, including dot notation.
14
- */
15
- declare function deleteBy(obj: any, _path: any): any;
16
- declare function isNonEmptyArray(obj: any): boolean;
17
- type RequiredByKey<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;
18
- type ComputeRange<N extends number, Result extends Array<unknown> = []> = Result['length'] extends N ? Result : ComputeRange<N, [...Result, Result['length']]>;
19
- type Index40 = ComputeRange<40>[number];
20
- type IsTuple<T> = T extends readonly any[] & {
21
- length: infer Length;
22
- } ? Length extends Index40 ? T : never : never;
23
- type AllowedIndexes<Tuple extends ReadonlyArray<any>, Keys extends number = never> = Tuple extends readonly [] ? Keys : Tuple extends readonly [infer _, ...infer Tail] ? AllowedIndexes<Tail, Keys | Tail['length']> : Keys;
24
- type DeepKeys<T, TDepth extends any[] = []> = TDepth['length'] extends 5 ? never : unknown extends T ? string : object extends T ? string : T extends readonly any[] & IsTuple<T> ? AllowedIndexes<T> | DeepKeysPrefix<T, AllowedIndexes<T>, TDepth> : T extends any[] ? DeepKeys<T[number], [...TDepth, any]> : T extends Date ? never : T extends object ? (keyof T & string) | DeepKeysPrefix<T, keyof T, TDepth> : never;
25
- type DeepKeysPrefix<T, TPrefix, TDepth extends any[]> = TPrefix extends keyof T & (number | string) ? `${TPrefix}.${DeepKeys<T[TPrefix], [...TDepth, any]> & string}` : never;
26
- type DeepValue<T, TProp> = T extends Record<string | number, any> ? TProp extends `${infer TBranch}.${infer TDeepProp}` ? DeepValue<T[TBranch], TDeepProp> : T[TProp & string] : never;
27
- type Narrowable = string | number | bigint | boolean;
28
- type NarrowRaw<A> = (A extends [] ? [] : never) | (A extends Narrowable ? A : never) | {
29
- [K in keyof A]: A[K] extends Function ? A[K] : NarrowRaw<A[K]>;
30
- };
31
- type Narrow<A> = Try<A, [], NarrowRaw<A>>;
32
- type Try<A1, A2, Catch = never> = A1 extends A2 ? A1 : Catch;
33
- type Pretty<T> = {
34
- [K in keyof T]: T[K];
35
- } & {};
36
-
37
- export { DeepKeys, DeepValue, Narrow, Pretty, RequiredByKey, Updater, UpdaterFn, deleteBy, functionalUpdate, getBy, isNonEmptyArray, setBy };