import { type TRoutePathScope } from '../common/constants'; import type { Hook } from '@hono/zod-openapi'; import { OpenAPIHono } from '@hono/zod-openapi'; import type { ValueOrPromise } from '@venizia/ignis-helpers/common'; import { BaseHelper } from '@venizia/ignis-helpers/core'; import type { Env, Schema } from 'hono'; import type { IAuthRouteConfig, IBindRouteOptions, IController, IControllerOptions, IDefineRouteOptions, TRouteHandler } from '../common/types'; /** Abstract base class for all REST controllers, providing route registration and auth middleware integration. */ export declare abstract class AbstractRestController = Record> extends BaseHelper implements IController { isConfigured: boolean; router: OpenAPIHono; path: string; definitions: Definitions; constructor(opts: IControllerOptions); /** Returns the OpenAPIHono router instance for this controller. */ getRouter(): OpenAPIHono; /** Registers decorator-defined routes from the metadata registry; `paths` selects them by shape - see the two-phase call in {@link configure}. */ registerRoutesFromRegistry(opts?: { paths?: TRoutePathScope; }): void; /** Configures the controller by binding all routes and registering decorator-based routes. Idempotent. */ configure(opts?: ConfigurableOptions): Promise>; /** @internal Builds auth + custom middlewares and security specs from route config. */ buildRouteMiddlewares(opts: { configs: RouteConfig; }): { restConfig: Omit; security: { [x: string]: never[]; }[]; mws: import("hono").MiddlewareHandler[]; }; /** Processes route config, injecting auth middleware and OpenAPI security specs. */ getRouteConfigs(opts: { configs: RouteConfig; }): RouteConfig & { getRoutingPath(): RouteConfig["path"] extends infer T ? T extends RouteConfig["path"] ? T extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${Rest extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${Rest extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${Rest extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${Rest extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${Rest extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${Rest extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${Rest extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${Rest extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${Rest extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${Rest extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${/*elided*/ any}` : Rest}` : Rest}` : Rest}` : Rest}` : Rest}` : Rest}` : Rest}` : Rest}` : Rest}` : Rest}` : T : never : never; }; /** Like getRouteConfigs but adds HTML response schema for JSX rendering. */ getJSXRouteConfigs(opts: { configs: RouteConfig; }): RouteConfig & { getRoutingPath(): RouteConfig["path"] extends infer T ? T extends RouteConfig["path"] ? T extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${Rest extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${Rest extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${Rest extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${Rest extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${Rest extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${Rest extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${Rest extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${Rest extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${Rest extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${Rest extends `${infer Start}/{${infer Param}}${infer Rest}` ? `${Start}/:${Param}${/*elided*/ any}` : Rest}` : Rest}` : Rest}` : Rest}` : Rest}` : Rest}` : Rest}` : Rest}` : Rest}` : Rest}` : T : never : never; }; /** Override to register routes using bindRoute or defineRoute. */ abstract binding(): ValueOrPromise; /** Creates a fluent binding for registering a route (call .to() to attach handler). */ abstract bindRoute(opts: { configs: RouteConfig; }): IBindRouteOptions; /** Defines and registers a route with its handler in a single call. */ abstract defineRoute(opts: { configs: RouteConfig; handler: TRouteHandler; hook?: Hook>; }): IDefineRouteOptions; } //# sourceMappingURL=abstract.d.ts.map