import { GraphQLEnumType, GraphQLField, GraphQLInputType, GraphQLOutputType, GraphQLResolveInfo, GraphQLScalarType } from 'graphql' import { ObjectTypeComposer } from 'graphql-compose' import * as Sequelize from 'sequelize' import { CacheHint } from 'apollo-cache-control' export function parseOutpuFields ( info: GraphQLResolveInfo, key?: string ): string[] export function parseAssociationOutpuFields ( info: GraphQLResolveInfo, key?: string ): string[] export function getPrimaryKeyField (attributes: any): string export function getFilterAttributes ( Model: Sequelize.Model, info: GraphQLResolveInfo, key: string ): string[] export function parseQueryOptions (attributes: string[], args: any): any export interface ArgsPaginationFields { page?: number paginate?: number } export interface PaginationFields { limit: number offset: number } export function parsePagination (args: ArgsPaginationFields): PaginationFields export function findAll ( Model: Sequelize.Model, args: any, info: GraphQLResolveInfo, where?: any ): Promise export function createOrderBy ( rawAttributes: any, name: string ): GraphQLEnumType export function getFields (attributes: string[], args: any): any export interface QueryResolvers { findAll: ( root: any, args: any, ctx: any, info: GraphQLResolveInfo ) => Promise findOne: ( root: any, args: any, ctx: any, info: GraphQLResolveInfo ) => Promise } export function createQueryResolvers ( Model: Sequelize.Model, cacheOptions?: CacheHint ): QueryResolvers export interface MutationResolvers { create: ( root: any, args: any, ctx: any, info: GraphQLResolveInfo ) => Promise update: ( root: any, args: any, ctx: any, info: GraphQLResolveInfo ) => Promise delete: ( root: any, args: any, ctx: any, info: GraphQLResolveInfo ) => Promise<[TInstance]> } export function createMutationResolvers ( Model: Sequelize.Model, sequelizeInstance: Sequelize.Sequelize ): MutationResolvers export function sequelizeTypeToGraphQLType (type: string): GraphQLScalarType export interface FieldOptions { allowNull?: boolean ignore?: string[] } export function modelAttributesToGraphQLFields ( rawAttributes: any, options: FieldOptions ): any export function attributeToFilters (attribute: any): any export function createInputQueryFilters (rawAttributes: any): any export interface BasePaginationField { type: GraphQLScalarType description: string } export interface PaginationField { page: BasePaginationField paginate: BasePaginationField } export function getPaginationFields (): PaginationField & any export function createQueryArgs (rawAttributes: any, name: string): any export function modelToType ( name: string, rawAttributes: any, options: FieldOptions ): ObjectTypeComposer export function checkIsModel (target: any): boolean export interface TypeOptions { ignore: string[] fields: any } export interface ObjectTypeComposerMapper { [key: string]: ObjectTypeComposer } export function createTypes ( models: any, options?: TypeOptions ): ObjectTypeComposerMapper export function appendAssociations ( types: ObjectTypeComposerMapper, name: string, associations: any ): void