import { Result } from 'neverthrow' const isT = (validate: (value: unknown) => boolean) => ( value: unknown, ): value is T => validate(value) export const isString = isT(value => typeof value === 'string') export const isObject = isT>( value => typeof value === 'object' && !Array.isArray(value) && !isResult(value), ) export const isArray = isT>(value => Array.isArray(value)) export const isBoolean = isT(value => typeof value === 'boolean') export const isNumber = isT(value => typeof value === 'number') export const isResult = isT>( value => // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any !!(value as any)._unsafeUnwrap, )