Skip to content

Commit

Permalink
💁‍♂️ close #9684 revert UnPackAsyncDefaultValues to avoid TS breaking…
Browse files Browse the repository at this point in the history
… change
  • Loading branch information
bluebill1049 committed Dec 30, 2022
1 parent 1af2563 commit 050db2a
Show file tree
Hide file tree
Showing 8 changed files with 44 additions and 64 deletions.
25 changes: 11 additions & 14 deletions reports/api-extractor.md
Expand Up @@ -75,7 +75,7 @@ export type Control<TFieldValues extends FieldValues = FieldValues, TContext = a
};

// @public
export const Controller: <TFieldValues extends FieldValues = FieldValues, TName extends Path<UnPackAsyncDefaultValues<TFieldValues>> = Path<UnPackAsyncDefaultValues<TFieldValues>>>(props: ControllerProps<TFieldValues, TName>) => ReactElement<any, string | JSXElementConstructor<any>>;
export const Controller: <TFieldValues extends FieldValues = FieldValues, TName extends Path<TFieldValues> = Path<TFieldValues>>(props: ControllerProps<TFieldValues, TName>) => ReactElement<any, string | JSXElementConstructor<any>>;

// @public (undocumented)
export type ControllerFieldState = {
Expand Down Expand Up @@ -182,10 +182,10 @@ export type FieldArrayMethodProps = {
};

// @public
export type FieldArrayPath<TFieldValues extends FieldValues> = ArrayPath<UnPackAsyncDefaultValues<TFieldValues>>;
export type FieldArrayPath<TFieldValues extends FieldValues> = ArrayPath<TFieldValues>;

// @public
export type FieldArrayPathValue<TFieldValues extends FieldValues, TFieldArrayPath extends FieldArrayPath<TFieldValues>> = PathValue<UnPackAsyncDefaultValues<TFieldValues>, TFieldArrayPath>;
export type FieldArrayPathValue<TFieldValues extends FieldValues, TFieldArrayPath extends FieldArrayPath<TFieldValues>> = PathValue<TFieldValues, TFieldArrayPath>;

// @public
export type FieldArrayWithId<TFieldValues extends FieldValues = FieldValues, TFieldArrayName extends FieldArrayPath<TFieldValues> = FieldArrayPath<TFieldValues>, TKeyName extends string = 'id'> = FieldArray<TFieldValues, TFieldArrayName> & Record<TKeyName, string>;
Expand All @@ -203,7 +203,7 @@ export type FieldError = {
};

// @public (undocumented)
export type FieldErrors<T extends FieldValues = FieldValues> = Partial<FieldValues extends IsAny<FieldValues> ? any : FieldErrorsImpl<DeepRequired<UnPackAsyncDefaultValues<T>>>>;
export type FieldErrors<T extends FieldValues = FieldValues> = Partial<FieldValues extends IsAny<FieldValues> ? any : FieldErrorsImpl<DeepRequired<T>>>;

// @public (undocumented)
export type FieldErrorsImpl<T extends FieldValues = FieldValues> = {
Expand All @@ -217,15 +217,15 @@ export type FieldName<TFieldValues extends FieldValues> = IsFlatObject<TFieldVal
export type FieldNamesMarkedBoolean<TFieldValues extends FieldValues> = DeepMap<DeepPartial<TFieldValues>, boolean>;

// @public
export type FieldPath<TFieldValues extends FieldValues> = Path<UnPackAsyncDefaultValues<TFieldValues>>;
export type FieldPath<TFieldValues extends FieldValues> = Path<TFieldValues>;

// @public
export type FieldPathByValue<TFieldValues extends FieldValues, TValue> = {
[Key in FieldPath<TFieldValues>]: FieldPathValue<TFieldValues, Key> extends TValue ? Key : never;
}[FieldPath<TFieldValues>];

// @public
export type FieldPathValue<TFieldValues extends FieldValues, TFieldPath extends FieldPath<TFieldValues>> = PathValue<UnPackAsyncDefaultValues<TFieldValues>, TFieldPath>;
export type FieldPathValue<TFieldValues extends FieldValues, TFieldPath extends FieldPath<TFieldValues>> = PathValue<TFieldValues, TFieldPath>;

// @public
export type FieldPathValues<TFieldValues extends FieldValues, TPath extends FieldPath<TFieldValues>[] | readonly FieldPath<TFieldValues>[]> = {} & {
Expand Down Expand Up @@ -259,9 +259,9 @@ export type FormState<TFieldValues extends FieldValues> = {
isValidating: boolean;
isValid: boolean;
submitCount: number;
defaultValues?: UnPackAsyncDefaultValues<TFieldValues> | undefined | Readonly<DeepPartial<TFieldValues>>;
dirtyFields: Partial<Readonly<FieldNamesMarkedBoolean<UnPackAsyncDefaultValues<TFieldValues>>>>;
touchedFields: Partial<Readonly<FieldNamesMarkedBoolean<UnPackAsyncDefaultValues<TFieldValues>>>>;
defaultValues?: undefined | Readonly<DeepPartial<TFieldValues>>;
dirtyFields: Partial<Readonly<FieldNamesMarkedBoolean<TFieldValues>>>;
touchedFields: Partial<Readonly<FieldNamesMarkedBoolean<TFieldValues>>>;
errors: FieldErrors<TFieldValues>;
};

Expand Down Expand Up @@ -488,9 +488,6 @@ export type TriggerConfig = Partial<{
shouldFocus: boolean;
}>;

// @public (undocumented)
export type UnPackAsyncDefaultValues<TFieldValues> = TFieldValues extends () => Promise<infer U> ? U : TFieldValues;

// @public @deprecated (undocumented)
export type UnpackNestedValue<T> = T extends NestedValue<infer U> ? U : T extends Date | FileList | File | Blob ? T : T extends object ? {
[K in keyof T]: UnpackNestedValue<T[K]>;
Expand Down Expand Up @@ -594,7 +591,7 @@ export type UseFormGetValues<TFieldValues extends FieldValues> = {
export type UseFormHandleSubmit<TFieldValues extends FieldValues> = (onValid: SubmitHandler<TFieldValues>, onInvalid?: SubmitErrorHandler<TFieldValues>) => (e?: React_2.BaseSyntheticEvent) => Promise<void>;

// @public (undocumented)
export type UseFormProps<TFieldValues extends UnPackAsyncDefaultValues<FieldValues> = UnPackAsyncDefaultValues<FieldValues>, TContext = any> = Partial<{
export type UseFormProps<TFieldValues extends FieldValues = FieldValues, TContext = any> = Partial<{
mode: Mode;
reValidateMode: Exclude<Mode, 'onTouched' | 'all'>;
defaultValues: DefaultValues<TFieldValues> | AsyncDefaultValues<TFieldValues>;
Expand Down Expand Up @@ -779,7 +776,7 @@ export type WatchObserver<TFieldValues extends FieldValues> = (value: DeepPartia
// Warnings were encountered during analysis:
//
// src/types/form.ts:97:3 - (ae-forgotten-export) The symbol "AsyncDefaultValues" needs to be exported by the entry point index.d.ts
// src/types/form.ts:432:3 - (ae-forgotten-export) The symbol "Subscription" needs to be exported by the entry point index.d.ts
// src/types/form.ts:425:3 - (ae-forgotten-export) The symbol "Subscription" needs to be exported by the entry point index.d.ts

// (No @packageDocumentation comment for this package)

Expand Down
22 changes: 13 additions & 9 deletions src/__tests__/type.test.tsx
Expand Up @@ -287,6 +287,14 @@ test('should work with generic component path assertion', () => {
});

test('should infer async default values', () => {
const formValues = {
test: 'test',
test1: {
nested: 'test',
},
fieldArray: [{ test: '' }],
};

function App() {
const {
register,
Expand All @@ -302,15 +310,9 @@ test('should infer async default values', () => {
setFocus,
trigger,
setError,
} = useForm({
} = useForm<typeof formValues>({
defaultValues: async () => {
return {
test: 'test',
test1: {
nested: 'test',
},
fieldArray: [{ test: '' }],
};
return formValues;
},
});
useFieldArray({
Expand All @@ -334,7 +336,9 @@ test('should infer async default values', () => {
setValue('test1.nested', 'data');
reset({
test: 'test',
test1: 'test1',
test1: {
nested: 'test1',
},
});

watch('test');
Expand Down
8 changes: 6 additions & 2 deletions src/__tests__/useForm.test.tsx
Expand Up @@ -1724,7 +1724,9 @@ describe('useForm', () => {
const {
register,
formState: { isLoading },
} = useForm({
} = useForm<{
test: string;
}>({
defaultValues: async () => {
await sleep(100);

Expand Down Expand Up @@ -1761,7 +1763,9 @@ describe('useForm', () => {

it('should update async default values for controlled components', async () => {
const App = () => {
const { control } = useForm({
const { control } = useForm<{
test: string;
}>({
defaultValues: async () => {
await sleep(100);

Expand Down
4 changes: 1 addition & 3 deletions src/logic/createFormControl.ts
Expand Up @@ -20,7 +20,6 @@ import {
SetFieldValue,
SetValueConfig,
Subjects,
UnPackAsyncDefaultValues,
UseFormClearErrors,
UseFormGetFieldState,
UseFormGetValues,
Expand Down Expand Up @@ -585,8 +584,7 @@ export function createFormControl<
true,
);

options.shouldValidate &&
trigger(name as Path<UnPackAsyncDefaultValues<TFieldValues>>);
options.shouldValidate && trigger(name as Path<TFieldValues>);
};

const setValues = <
Expand Down
10 changes: 2 additions & 8 deletions src/types/errors.ts
@@ -1,11 +1,5 @@
import { FieldValues, InternalFieldName, Ref } from './fields';
import {
BrowserNativeObject,
IsAny,
LiteralUnion,
Merge,
UnPackAsyncDefaultValues,
} from './utils';
import { BrowserNativeObject, IsAny, LiteralUnion, Merge } from './utils';
import { RegisterOptions, ValidateResult } from './validator';

export type Message = string;
Expand Down Expand Up @@ -47,7 +41,7 @@ export type FieldErrorsImpl<T extends FieldValues = FieldValues> = {
export type FieldErrors<T extends FieldValues = FieldValues> = Partial<
FieldValues extends IsAny<FieldValues>
? any
: FieldErrorsImpl<DeepRequired<UnPackAsyncDefaultValues<T>>>
: FieldErrorsImpl<DeepRequired<T>>
>;

export type InternalFieldErrors = Partial<
Expand Down
17 changes: 5 additions & 12 deletions src/types/form.ts
Expand Up @@ -18,7 +18,7 @@ import {
FieldPathValues,
} from './path';
import { Resolver } from './resolvers';
import { DeepMap, DeepPartial, Noop, UnPackAsyncDefaultValues } from './utils';
import { DeepMap, DeepPartial, Noop } from './utils';
import { RegisterOptions } from './validator';

declare const $NestedValue: unique symbol;
Expand Down Expand Up @@ -89,7 +89,7 @@ type AsyncDefaultValues<TFieldValues> = (
) => Promise<TFieldValues>;

export type UseFormProps<
TFieldValues extends UnPackAsyncDefaultValues<FieldValues> = UnPackAsyncDefaultValues<FieldValues>,
TFieldValues extends FieldValues = FieldValues,
TContext = any,
> = Partial<{
mode: Mode;
Expand Down Expand Up @@ -131,16 +131,9 @@ export type FormState<TFieldValues extends FieldValues> = {
isValidating: boolean;
isValid: boolean;
submitCount: number;
defaultValues?:
| UnPackAsyncDefaultValues<TFieldValues>
| undefined
| Readonly<DeepPartial<TFieldValues>>;
dirtyFields: Partial<
Readonly<FieldNamesMarkedBoolean<UnPackAsyncDefaultValues<TFieldValues>>>
>;
touchedFields: Partial<
Readonly<FieldNamesMarkedBoolean<UnPackAsyncDefaultValues<TFieldValues>>>
>;
defaultValues?: undefined | Readonly<DeepPartial<TFieldValues>>;
dirtyFields: Partial<Readonly<FieldNamesMarkedBoolean<TFieldValues>>>;
touchedFields: Partial<Readonly<FieldNamesMarkedBoolean<TFieldValues>>>;
errors: FieldErrors<TFieldValues>;
};

Expand Down
19 changes: 6 additions & 13 deletions src/types/path/eager.ts
@@ -1,9 +1,5 @@
import { FieldValues } from '../fields';
import {
BrowserNativeObject,
Primitive,
UnPackAsyncDefaultValues,
} from '../utils';
import { BrowserNativeObject, Primitive } from '../utils';

import { ArrayKey, IsTuple, TupleKeys } from './common';

Expand Down Expand Up @@ -38,9 +34,7 @@ export type Path<T> = T extends ReadonlyArray<infer V>
/**
* See {@link Path}
*/
export type FieldPath<TFieldValues extends FieldValues> = Path<
UnPackAsyncDefaultValues<TFieldValues>
>;
export type FieldPath<TFieldValues extends FieldValues> = Path<TFieldValues>;

/**
* Helper type for recursively constructing paths through a type.
Expand Down Expand Up @@ -78,9 +72,8 @@ export type ArrayPath<T> = T extends ReadonlyArray<infer V>
/**
* See {@link ArrayPath}
*/
export type FieldArrayPath<TFieldValues extends FieldValues> = ArrayPath<
UnPackAsyncDefaultValues<TFieldValues>
>;
export type FieldArrayPath<TFieldValues extends FieldValues> =
ArrayPath<TFieldValues>;

/**
* Type to evaluate the type which the given path points to.
Expand Down Expand Up @@ -118,15 +111,15 @@ export type PathValue<T, P extends Path<T> | ArrayPath<T>> = T extends any
export type FieldPathValue<
TFieldValues extends FieldValues,
TFieldPath extends FieldPath<TFieldValues>,
> = PathValue<UnPackAsyncDefaultValues<TFieldValues>, TFieldPath>;
> = PathValue<TFieldValues, TFieldPath>;

/**
* See {@link PathValue}
*/
export type FieldArrayPathValue<
TFieldValues extends FieldValues,
TFieldArrayPath extends FieldArrayPath<TFieldValues>,
> = PathValue<UnPackAsyncDefaultValues<TFieldValues>, TFieldArrayPath>;
> = PathValue<TFieldValues, TFieldArrayPath>;

/**
* Type to evaluate the type which the given paths point to.
Expand Down
3 changes: 0 additions & 3 deletions src/types/utils.ts
Expand Up @@ -53,9 +53,6 @@ export type DeepPartialSkipArrayKey<T> = T extends
? { [K in keyof T]: DeepPartialSkipArrayKey<T[K]> }
: { [K in keyof T]?: DeepPartialSkipArrayKey<T[K]> };

export type UnPackAsyncDefaultValues<TFieldValues> =
TFieldValues extends () => Promise<infer U> ? U : TFieldValues;

/**
* Checks whether the type is any
* See {@link https://stackoverflow.com/a/49928360/3406963}
Expand Down

0 comments on commit 050db2a

Please sign in to comment.