UNPKG

@backland/schema

Version:

TypeScript schema declaration and validation library with static type inference

35 lines (34 loc) 1.43 kB
import { Cast } from '@backland/utils'; import type { GraphType } from './GraphType/GraphType'; import { FinalFieldDefinition, ObjectType } from './ObjectType'; import { DescribeAndOverrideField, DescribeWithoutSeal } from './fields/Infer'; export interface ExtendType<Input> { definition: DescribeWithoutSeal<Input>; def(): this['definition']; extend<V extends FinalFieldDefinition>(value: V | ((current: this['definition']) => V)): ExtendType<Omit<this['definition'], keyof V> & V>; graphType(name?: string): GraphType<Cast<this['definition'], FinalFieldDefinition>>; objectType(name?: string): ObjectType<Cast<this['definition'], { def: { [K: string]: FinalFieldDefinition; }; }>['def']>; optional(): ExtendType<MakeTypeOptional<this['definition']>>; required(): ExtendType<MakeTypeRequired<this['definition']>>; list(): ExtendType<MakeTypeList<this['definition']>>; single(): ExtendType<MakeTypeSingle<this['definition']>>; } export declare function extendType<Input>(input: Input): ExtendType<Input>; export type MakeTypeOptional<Type> = DescribeAndOverrideField<Type, { optional: true; }>; export type MakeTypeRequired<Type> = DescribeAndOverrideField<Type, { optional: false; }>; export type MakeTypeList<Type> = { array: { of: Type; }; }; export type MakeTypeSingle<Type> = DescribeAndOverrideField<Type, { list: false; }>;