import { Service, GenericService } from '../core-api/service'; import { Controller, GenericController } from '../core-api/controller'; import { Middleware } from '../middlewares'; import { Policy } from '../core/registries/policies'; import { Strapi } from './core/strapi'; type ControllerConfig = T; type ServiceConfig = Service; type HandlerConfig = { auth?: false | { scope: string[] }; policies?: Array; middlewares?: Array; }; type SingleTypeRouterConfig = { find?: HandlerConfig; update?: HandlerConfig; delete?: HandlerConfig; }; type CollectionTypeRouterConfig = { find?: HandlerConfig; findOne?: HandlerConfig; create?: HandlerConfig; update?: HandlerConfig; delete?: HandlerConfig; }; type RouterConfig = { prefix?: string; only?: string[]; except?: string[]; config: SingleTypeRouterConfig | CollectionTypeRouterConfig; }; interface Route { method: string; path: string; } interface Router { prefix: string; routes: Route[]; } type ControllerCallback = (params: { strapi: Strapi; }) => T; type ServiceCallback = (params: { strapi: Strapi }) => T; export function createCoreRouter(uid: string, cfg?: RouterConfig = {}): () => Router; export function createCoreController( uid: string, cfg?: ControllerCallback | T = {} ): () => T & Controller; export function createCoreService( uid: string, cfg?: ServiceCallback | T = {} ): () => T;