@backland/schema
Version:
TypeScript schema declaration and validation library with static type inference
35 lines (34 loc) • 1.43 kB
TypeScript
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;
}>;