UNPKG

naystack

Version:

A stack built with tight Next + Drizzle + GraphQL

35 lines (32 loc) 1.99 kB
import { GraphQLScalarType } from 'graphql'; import { ClassType, Query, Arg } from 'type-graphql'; import { Context } from './types.mjs'; type ReturnOptions = Parameters<typeof Query>[1]; type ArgsOptions = Parameters<typeof Arg>[2]; type Values = object | string | number | boolean; type DeepPartial<T> = { [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K]; }; interface BaseDefinition<T extends Values, U extends Values> { output: T extends object ? ClassType<DeepPartial<T>> | [ClassType<DeepPartial<T>>] : GraphQLScalarType<T, T> | NumberConstructor | StringConstructor | BooleanConstructor; outputOptions?: ReturnOptions; input?: U extends object ? ClassType<U> | [ClassType<U>] : GraphQLScalarType<U, U> | NumberConstructor | StringConstructor | BooleanConstructor; inputOptions?: ArgsOptions; authorized?: boolean; } interface QueryDefinition<T extends Values, U extends Values> extends BaseDefinition<T, U> { fn: (ctx: Context, data: U) => Promise<T | T[]> | T | T[]; mutation?: boolean; } interface FieldResolverDefinition<T extends Values, U extends Values, Root> extends BaseDefinition<T, U> { fn: (root: Root, ctx: Context, data: U) => Promise<T | T[]> | T | T[]; } declare function query<T extends Values, U extends Values>(fn: QueryDefinition<T, U>["fn"], options: Omit<QueryDefinition<T, U>, "fn">): QueryDefinition<T, U>; declare function field<T extends Values, U extends Values, Root>(fn: FieldResolverDefinition<T, U, Root>["fn"], options: Omit<FieldResolverDefinition<T, U, Root>, "fn">): FieldResolverDefinition<T, U, Root>; declare function QueryLibrary<T extends Record<string, QueryDefinition<any, any>>>(queries: T): { new (): {}; }; declare function FieldLibrary<X extends object, T extends Record<string, FieldResolverDefinition<any, any, X>> = Record<string, FieldResolverDefinition<any, any, X>>>(type: ClassType, queries: T): { new (): {}; }; export { FieldLibrary, QueryLibrary, field, query };