import { GraphQLEnumType } from 'graphql'; import { ObjectType, Field, FTSQuery } from '.'; export declare enum ModelType { ENUM = 0, VARIANT = 1, ENTITY = 2, UNION = 3, INTERFACE = 4, SCALAR = 5, JSON = 6 } export declare class WarthogModel { private _entities; private _ftsQueries; private _enums; private _interfaces; private _variants; private _unions; private _jsonFields; private _name2query; private _name2type; constructor(); addUnion(name: string, typeNames: string[]): void; addVariant(type: ObjectType): void; addEntity(type: ObjectType): void; addFTSQuery(query: FTSQuery): void; addInterface(_interface: ObjectType): void; addEnum(_enum: GraphQLEnumType): void; addJsonField(_jsonField: ObjectType): void; /** * Add emply full text search query with the given name * * @param name query name to be added */ addEmptyFTSQuery(name: string): FTSQuery; private _addQueryClause; /** * Add text search field to the named FTS query * * @param queryName fulltext query name * @param fieldName name of the field to be added to the query * @param typeName objectType which defined that field */ addQueryClause(queryName: string, fieldName: string, typeName: string): void; get entities(): ObjectType[]; get ftsQueries(): FTSQuery[]; get enums(): GraphQLEnumType[]; get interfaces(): ObjectType[]; get variants(): ObjectType[]; get unions(): UnionType[]; get jsonFields(): ObjectType[]; /** * Lookup ObjectType by it's name (as defined in the schema file) * * @param name ObjectTypeName as defined in the schema */ lookupEntity(name: string): ObjectType; lookupUnion(name: string): UnionType; lookupEnum(name: string): GraphQLEnumType; lookupVariant(name: string): ObjectType; lookupInterface(name: string): ObjectType; lookupQuery(queryName: string): FTSQuery; lookupJsonField(name: string): ObjectType; /** * Get subclasses of a given interface * * @param interfaceName Name of the interface */ getSubclasses(interfaceName: string): ObjectType[]; /** * Lookup Warthog's Field model object by it's ObjectType and name * * @param objTypeName Type name with the given field defined * @param name the name of the field */ lookupField(objTypeName: string, name: string): Field; addField(entity: string, field: Field): void; lookupType(name: string): ModelType; } export interface UnionType { name: string; types: ObjectType[]; }