import { GraphQLFieldConfig, GraphQLInputFieldConfig, GraphQLInputType } from 'graphql'; import { defaultsDeep } from 'lodash'; import { Repository } from 'typeorm'; import { Document } from './interfaces/Document'; import { PrimeFieldContext } from './interfaces/PrimeFieldContext'; import { PrimeFieldOperation } from './interfaces/PrimeFieldOperation'; import { Schema } from './interfaces/Schema'; import { SchemaField } from './interfaces/SchemaField'; export class PrimeField { public static type: string; public static title: string; public static description: string; public static defaultOptions: any = {}; public static env: string[] = []; constructor( protected schemaField: SchemaField, protected repositories: { document: Repository; schema: Repository; schemaField: Repository; } ) {} public get options() { const defaults = Object.getPrototypeOf(this).constructor.defaultOptions; return defaultsDeep(this.schemaField.options, defaults); } public outputType( context: PrimeFieldContext, operation: PrimeFieldOperation.READ ): | Promise | null> | GraphQLFieldConfig | null { return Promise.resolve(null); } public inputType( context: PrimeFieldContext, operation: PrimeFieldOperation.CREATE | PrimeFieldOperation.UPDATE ): Promise | GraphQLInputFieldConfig | null { return Promise.resolve(null); } public whereType( context: PrimeFieldContext ): Promise | GraphQLInputType | null { return Promise.resolve(null); } public processInput(data: any): Promise { return Promise.resolve(data); } public processOutput(data: any): Promise { return Promise.resolve(data); } }