Skip to content

Commit

Permalink
adding isKnownError type guard
Browse files Browse the repository at this point in the history
  • Loading branch information
colevscode committed May 10, 2022
1 parent fe76716 commit dabe0c9
Showing 1 changed file with 37 additions and 19 deletions.
56 changes: 37 additions & 19 deletions src/forms.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,36 +6,54 @@ export interface SubmissionOptions {
fetchImpl?: typeof fetch;
}

export type FormErrorCode =
| 'INACTIVE'
| 'BLOCKED'
| 'EMPTY'
| 'PROJECT_NOT_FOUND'
| 'FORM_NOT_FOUND'
| 'NO_FILE_UPLOADS'
| 'TOO_MANY_FILES'
| 'FILES_TOO_BIG';

export type FieldErrorCode =
| 'REQUIRED_FIELD_MISSING'
| 'REQUIRED_FIELD_EMPTY'
| 'TYPE_EMAIL'
| 'TYPE_NUMERIC'
| 'TYPE_TEXT';
enum FormErrorCodeEnum {
INACTIVE = 'INACTIVE',
BLOCKED = 'BLOCKED',
EMPTY = 'EMPTY',
PROJECT_NOT_FOUND = 'PROJECT_NOT_FOUND',
FORM_NOT_FOUND = 'FORM_NOT_FOUND',
NO_FILE_UPLOADS = 'NO_FILE_UPLOADS',
TOO_MANY_FILES = 'TOO_MANY_FILES',
FILES_TOO_BIG = 'FILES_TOO_BIG'
}

enum FieldErrorCodeEnum {
REQUIRED_FIELD_MISSING = 'REQUIRED_FIELD_MISSING',
REQUIRED_FIELD_EMPTY = 'REQUIRED_FIELD_EMPTY',
TYPE_EMAIL = 'TYPE_EMAIL',
TYPE_NUMERIC = 'TYPE_NUMERIC',
TYPE_TEXT = 'TYPE_TEXT'
}

export type FormErrorCode = keyof typeof FormErrorCodeEnum;
export type FieldErrorCode = keyof typeof FieldErrorCodeEnum;

export interface FormError {
field?: string;
code: FormErrorCode | FieldErrorCode | null;
code?: FormErrorCode | FieldErrorCode;
message: string;
}

export interface FieldError extends FormError {
field: string;
code: FieldErrorCode | null;
code: FieldErrorCode;
}

export function isFieldError(error: FormError): error is FieldError {
return (error as FieldError).field !== undefined;
return (error as FieldError).code in FieldErrorCodeEnum;
}

type KnownError<T> = T extends
| { code: FormErrorCode }
| { code: FieldErrorCode }
? T
: never;

export function isKnownError(error: FormError): error is KnownError<FormError> {
return (
!!error.code &&
(error.code in FormErrorCodeEnum || error.code in FieldErrorCodeEnum)
);
}

export interface SuccessBody {
Expand Down

0 comments on commit dabe0c9

Please sign in to comment.