import { FastifyInstance } from "fastify"; import { DataSource, EntityTarget, Repository } from "typeorm"; import { z } from "zod"; import * as http from 'http'; export interface IFastiFoxPlugin { name: string register: (data: R) => void execute?: (data: E) => void } export interface IFoxFlowRoutePluginConnector { start: IFastiFoxPlugin[] middle: IFastiFoxPlugin[] end: IFastiFoxPlugin[] } export interface IUniqueRoute { status?: boolean inputPlugins?: Array<(input: any)=> Promise> outputPlugins?: Array<(input: any)=> Promise> } export interface IFastiFoxRoute { name?: { singular: string plural: string } listOne?: { schema?: z.ZodObject } & IUniqueRoute listMany?: { schema?: z.ZodObject withPagination?: boolean findableFields?: string[] } & IUniqueRoute create?: { findableFields?: string[] schema?: z.ZodObject } & IUniqueRoute update?: { schema?: z.ZodObject } & IUniqueRoute delete?: { } & IUniqueRoute addRoute?: Array } export enum RouteMethod { GET = 'GET', POST = 'POST', PUT = 'PUT', PATCH = 'PATCH', DELETE = 'DELETE', } export interface IRouteMaker extends IUniqueRoute { name: string method: RouteMethod schema?: z.ZodObject withPagination?: boolean findableFields?: string[] } export interface IGenerateCrudRouteMaker { routes: IRouteMaker[], } export interface IGenerateCrudInitialize { route: IFastiFoxRoute } export interface IPluginContructor { server: FastifyInstance, entity?: EntityTarget; datasource: DataSource, } export interface IGenerateCrudContructor { entity: EntityTarget; route: IFastiFoxRoute } export interface IGenerateCrudRoute { route: IFastiFoxRoute } export interface IGenerateCrudModule { server: FastifyInstance, datasource: DataSource, } export abstract class FastiFoxPlugin { repository: Repository; entity?: EntityTarget; server: FastifyInstance; constructor({ datasource, entity, server }: IPluginContructor){ if(entity){ this.repository = datasource.getRepository(entity); this.entity = entity; } this.server = server; } } export interface IFastiFoxModuleContructor { server: FastifyInstance datasource: DataSource, }