// @flow // type names ---------------------------------------------------------------- export type Cleaner = (raw: any) => T export type Uncleaner = (clean: T) => any export type ObjectCleaner = Cleaner & { +shape: $ObjMap(type: T) => Cleaner>, +withRest: Cleaner } type ReturnType = (f: () => T) => T // simple types -------------------------------------------------------------- declare export var asBoolean: Cleaner declare export var asNone: Cleaner declare export var asNull: Cleaner declare export var asNumber: Cleaner declare export var asString: Cleaner declare export var asUndefined: Cleaner declare export var asUnknown: Cleaner declare export function asValue< T: Array >( ...values: T ): Cleaner<$ElementType> // data structures ----------------------------------------------------------- declare export function asArray(cleaner: Cleaner): Cleaner declare export var asObject: {| (cleaner: Cleaner): Cleaner<{ [keys: string]: T }>, (shape: Shape): ObjectCleaner<$ObjMap> |} declare export function asTuple( ...shape: Shape ): Cleaner<$TupleMap> // branching ----------------------------------------------------------------- declare export var asEither: {| (a: Cleaner): Cleaner, (a: Cleaner, b: Cleaner): Cleaner, (a: Cleaner, b: Cleaner, c: Cleaner): Cleaner, ( a: Cleaner, b: Cleaner, c: Cleaner, d: Cleaner ): Cleaner, ( a: Cleaner, b: Cleaner, c: Cleaner, d: Cleaner, e: Cleaner ): Cleaner, ( a: Cleaner, b: Cleaner, c: Cleaner, d: Cleaner, e: Cleaner, f: Cleaner ): Cleaner, ( a: Cleaner, b: Cleaner, c: Cleaner, d: Cleaner, e: Cleaner, f: Cleaner, g: Cleaner ): Cleaner, ( a: Cleaner, b: Cleaner, c: Cleaner, d: Cleaner, e: Cleaner, f: Cleaner, g: Cleaner, h: Cleaner ): Cleaner, ( a: Cleaner, b: Cleaner, c: Cleaner, d: Cleaner, e: Cleaner, f: Cleaner, g: Cleaner, h: Cleaner, i: Cleaner ): Cleaner, ( a: Cleaner, b: Cleaner, c: Cleaner, d: Cleaner, e: Cleaner, f: Cleaner, g: Cleaner, h: Cleaner, i: Cleaner, j: Cleaner ): Cleaner, ( a: Cleaner, b: Cleaner, c: Cleaner, d: Cleaner, e: Cleaner, f: Cleaner, g: Cleaner, h: Cleaner, i: Cleaner, j: Cleaner, k: Cleaner ): Cleaner, ( a: Cleaner, b: Cleaner, c: Cleaner, d: Cleaner, e: Cleaner, f: Cleaner, g: Cleaner, h: Cleaner, i: Cleaner, j: Cleaner, k: Cleaner, l: Cleaner ): Cleaner, ( a: Cleaner, b: Cleaner, c: Cleaner, d: Cleaner, e: Cleaner, f: Cleaner, g: Cleaner, h: Cleaner, i: Cleaner, j: Cleaner, k: Cleaner, l: Cleaner, m: Cleaner ): Cleaner, ( a: Cleaner, b: Cleaner, c: Cleaner, d: Cleaner, e: Cleaner, f: Cleaner, g: Cleaner, h: Cleaner, i: Cleaner, j: Cleaner, k: Cleaner, l: Cleaner, m: Cleaner, n: Cleaner ): Cleaner, ( a: Cleaner, b: Cleaner, c: Cleaner, d: Cleaner, e: Cleaner, f: Cleaner, g: Cleaner, h: Cleaner, i: Cleaner, j: Cleaner, k: Cleaner, l: Cleaner, m: Cleaner, n: Cleaner, o: Cleaner ): Cleaner, ( a: Cleaner, b: Cleaner, c: Cleaner, d: Cleaner, e: Cleaner, f: Cleaner, g: Cleaner, h: Cleaner, i: Cleaner, j: Cleaner, k: Cleaner, l: Cleaner, m: Cleaner, n: Cleaner, o: Cleaner, p: Cleaner

): Cleaner |} declare export var asMaybe: {| (cleaner: Cleaner): Cleaner, ( cleaner: Cleaner, // The extra $Call prevents Flow from inferring T from the fallback: fallback: $Call> | (() => $Call>) ): Cleaner |} declare export var asOptional: {| (cleaner: Cleaner): Cleaner, ( cleaner: Cleaner, // The extra $Call prevents Flow from inferring T from the fallback: fallback: $Call> | (() => $Call>) ): Cleaner |} // parsing ------------------------------------------------------------------- declare export function asCodec( cleaner: Cleaner, uncleaner: Uncleaner ): Cleaner declare export var asDate: Cleaner declare export function asJSON(cleaner: Cleaner): Cleaner declare export function uncleaner(cleaner: Cleaner): Uncleaner // deprecated ---------------------------------------------------------------- declare export var asMap: typeof asObject