AponiaJSDocs
API reference

@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.29

Application exports

  • AponiaFactory
  • AponiaElysiaApplication
  • AponiaApplicationOptions
  • ConfiguredAponiaApplicationOptions
  • ElysiaCompilationOptions
  • NativeElysiaConfigurator
  • AponiaNativeApplication

See Application API.

Root module compilation

compileRootModule(rootModule: AponiaRootModule): ModuleDefinition

AponiaRootModule accepts a decorated module class, a DynamicModule, or an existing low-level ModuleDefinition.

Low-level controllers

Exports:

  • ELYSIA_CONTROLLER
  • defineElysiaController
  • ElysiaControllerDefinition
  • RegisteredElysiaControllerDefinition
  • ElysiaControllerPluginOptions
  • ElysiaControllerRegistrationOptions
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:

  • ElysiaPluginModule
  • defineElysiaPlugin
  • ElysiaPluginModuleOptions
  • AsyncElysiaPluginModuleOptions
  • ElysiaPluginImport
  • NativeElysiaPlugin
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:

  • HttpError
  • httpError
  • httpErrors
  • HttpErrorFactories, HttpErrorFactory, HttpErrorOptions
  • HttpErrorStatus, HttpErrorStatusCode, HttpErrorStatusName
  • ProblemDetails, 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:

  • ElysiaWebSocket
  • ElysiaWebSocketServer

These are the native Elysia socket wrapper and application types injected by @ConnectedSocket() and @WebSocketServer(). See WebSocket gateways.

Route context types

Exports:

  • ElysiaRouteContext
  • ElysiaInputSchema
  • ElysiaPluginSource
  • ElysiaPluginTypes
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.

On this page