n4s
Version:
typed schema validation version of enforce
74 lines (70 loc) • 2.11 kB
text/typescript
/**
* Schema rules type declarations.
*/
import './isArrayOf';
import './loose';
import './optional';
import './partial';
import './pick';
import './omit';
import './shape';
import './record';
import './tuple';
import type { RuleInstance } from '../../utils/RuleInstance';
import { MultiTypeInput, MultiTypeInputArgs } from './schemaRulesTypes';
import type {
IsArrayOfRuleInstance,
LazyRuleInstance,
LooseRuleInstance,
OptionalRuleInstance,
PartialRuleInstance,
PickRuleInstance,
OmitRuleInstance,
ShapeRuleInstance,
RecordRuleInstance,
TupleRuleInstance,
} from './schemaRules';
/**
* Type mappings for schema rule lazy API return types
*/
export type SchemaRuleLazyTypes = {
isArrayOf: <Rules extends RuleInstance<any, any>[]>(
...rules: Rules
) => IsArrayOfRuleInstance<MultiTypeInput<Rules>, MultiTypeInputArgs<Rules>>;
list: <Rules extends RuleInstance<any, any>[]>(
...rules: Rules
) => IsArrayOfRuleInstance<MultiTypeInput<Rules>, MultiTypeInputArgs<Rules>>;
lazy: <T>(factory: () => RuleInstance<T, any>) => LazyRuleInstance<T>;
loose: <S extends Record<string, RuleInstance<any>>>(
schema: S,
) => LooseRuleInstance<S>;
optional: <R extends RuleInstance<any>>(
rule: R,
) => OptionalRuleInstance<R['infer']>;
partial: <S extends Record<string, RuleInstance<any>>>(
schema: S,
) => PartialRuleInstance<S>;
pick: <S extends Record<string, RuleInstance<any>>>(
schema: S,
keys: string[] | string,
) => PickRuleInstance<S>;
omit: <S extends Record<string, RuleInstance<any>>>(
schema: S,
keys: string[] | string,
) => OmitRuleInstance<S>;
shape: <S extends Record<string, RuleInstance<any>>>(
schema: S,
) => ShapeRuleInstance<S>;
record: {
<V extends RuleInstance<any, any>>(
valueRule: V,
): RecordRuleInstance<never, V>;
<K extends RuleInstance<string, any>, V extends RuleInstance<any, any>>(
keyRule: K,
valueRule: V,
): RecordRuleInstance<K, V>;
};
tuple: <Rules extends RuleInstance<any, any>[]>(
...rules: Rules
) => TupleRuleInstance<Rules>;
};