import { SourceNames } from "./datasource" interface Base { _id?: string _rev?: string } export interface FieldSchema { // TODO: replace with field types enum when done type: string fieldName?: string name: string tableId?: string relationshipType?: string through?: string foreignKey?: string autocolumn?: boolean throughFrom?: string throughTo?: string main?: boolean meta?: { toTable: string toKey: string } constraints?: { type?: string email?: boolean inclusion?: string[] length?: { minimum?: string | number maximum?: string | number } presence?: boolean } } export interface TableSchema { [key: string]: FieldSchema } export interface Table extends Base { type?: string views?: {} name: string primary?: string[] schema: TableSchema primaryDisplay?: string sourceId?: string constrained?: string[] } export interface Row extends Base { type?: string tableId?: string [key: string]: any } interface JsonSchemaField { properties: { [key: string]: { type: string title: string customType?: string } } required?: string[] } export interface AutomationStep { description: string event?: string icon: string id: string inputs: { [key: string]: any } name: string schema: { inputs: JsonSchemaField outputs: JsonSchemaField } stepId: string tagline: string type: string } export interface Automation extends Base { name: string type: string appId?: string definition: { steps: AutomationStep[] trigger?: AutomationStep } } export interface Datasource extends Base { type: string name: string source: SourceNames // the config is defined by the schema config: { [key: string]: string | number | boolean } plus: boolean entities?: { [key: string]: Table } } export interface QueryParameter { name: string default: string } export interface Query { _id?: string datasourceId: string name: string parameters: QueryParameter[] fields: { headers: object queryString: string | null path: string requestBody: string | undefined } transformer: string | null schema: any readable: boolean queryVerb: string }