@aponiajs/platform-elysia
Public Elysia application, controller, compilation, plugin module, and route context APIs.
Install with the Elysia peer:
bun add @aponiajs/common@alpha @aponiajs/platform-elysia@alpha elysia@^1.4.29Application exports
AponiaFactoryAponiaElysiaApplicationAponiaApplicationOptionsConfiguredAponiaApplicationOptionsElysiaCompilationOptionsNativeElysiaConfiguratorAponiaNativeApplication
See Application API.
Root module compilation
compileRootModule(rootModule: AponiaRootModule): ModuleDefinitionAponiaRootModule accepts a decorated module class, a DynamicModule, or an
existing low-level ModuleDefinition.
Low-level controllers
Exports:
ELYSIA_CONTROLLERdefineElysiaControllerElysiaControllerDefinitionRegisteredElysiaControllerDefinitionElysiaControllerPluginOptionsElysiaControllerRegistrationOptions
defineElysiaController(ControllerClass, {
inject: [TOKEN],
path: "/health",
registerRoutes: (application, controller) => {
application.get("/health", () => controller.read());
},
});registerRoutes writes directly to the root Elysia application after native
plugins mount. path is optional diagnostic metadata. The returned descriptor
also carries a generated buildPlugin compatibility fallback.
The original plugin-producing form remains supported:
defineElysiaController(ControllerClass, {
inject: [TOKEN],
buildPlugin: (controller) => new Elysia(),
});The built plugin must be an Elysia instance; anything else fails with
INVALID_CONTROLLER. A descriptor with a non-Elysia platform kind fails with
UNSUPPORTED_CONTROLLER.
A concrete buildPlugin return type contributes routes to
AponiaNativeApplication. The direct registerRoutes form optimizes runtime
registration but does not add route generics to the current static return type.
Plugin modules
Exports:
ElysiaPluginModuledefineElysiaPluginElysiaPluginModuleOptionsAsyncElysiaPluginModuleOptionsElysiaPluginImportNativeElysiaPlugin
ElysiaPluginModule.register(plugin, { key: "plugin-key" });
ElysiaPluginModule.registerAsync({
key: "configured-plugin",
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (config) => createPlugin(config),
});The registerAsync factory must return synchronously.
defineElysiaPlugin<TPlugin>(
plugin: TPlugin,
options?: ElysiaPluginModuleOptions,
): ElysiaPluginImport<TPlugin>ElysiaPluginImport is the dynamic module with the plugin attached, so one
export mounts the plugin and names its type. See
Elysia plugin modules.
HTTP errors
Exports:
HttpErrorhttpErrorhttpErrorsHttpErrorFactories,HttpErrorFactory,HttpErrorOptionsHttpErrorStatus,HttpErrorStatusCode,HttpErrorStatusNameProblemDetails,ResolveHttpErrorStatus
throw httpErrors.notFound("User 42 does not exist.", { code: "USER_NOT_FOUND" });
throw httpError(422, "The submitted profile is invalid.", { code: "PROFILE_INVALID" });A thrown HttpError answers with its status, application/problem+json, and an
RFC 9457 body. See HTTP errors.
WebSocket types
Exports:
ElysiaWebSocketElysiaWebSocketServer
These are the native Elysia socket wrapper and application types injected by
@ConnectedSocket() and @WebSocketServer(). See
WebSocket gateways.
Route context types
Exports:
ElysiaRouteContextElysiaInputSchemaElysiaPluginSourceElysiaPluginTypes
type ElysiaRouteContext<
TSchemaOrPlugins extends InputSchema | ElysiaPluginTypes = {},
TPlugins extends ElysiaPluginTypes = never,
>;The first argument accepts either a route schema or the plugins whose types the
handler reads. ElysiaInputSchema is Elysia's own InputSchema, re-exported so
an application can declare its own context alias without importing elysia.
See typed plugin context.