Skip to content
v1.11.1 リリース済み · GitHub で見る

Nestelia

Elysia と Bun のためのモジュラーフレームワーク。
デコレーター · DI · モジュール · Elysia の速度。

デコレーター駆動ルーティング

@Controller、@Get、@Post、@Body など — Elysia 上でネイティブに動作するクリーンな宣言的デコレーター API。

nestelia は各デコレートされたルートを Elysia ハンドラーに直接マッピングし、フレームワーク層で型推論とスキーマバリデーションを提供します。

users.controller.ts
import { Controller, Get, Post, Body } from 'nestelia'
import { CreateUserDto } from './dto'

@Controller('/users')
export class UsersController {

  @Get()
  findAll() {
    return { users: [] }
  }

  @Post()
  create(@Body() dto: CreateUserDto) {
    return dto
  }
}

依存性の注入

reflect-metadata によるシングルトン・トランジェント・リクエストスコープをサポートするコンストラクターベースの DI。

@Injectable() でクラスをマークしプロバイダーとして宣言するだけ — nestelia が起動時に依存関係グラフ全体を自動解決します。

users.service.ts
import { Injectable } from 'nestelia'

@Injectable()
export class UsersService {
  private users: User[] = []

  async findAll(): Promise<User[]> {
    return this.users
  }

  async create(dto: CreateUserDto): Promise<User> {
    this.users.push(dto)
    return dto
  }
}

モジュラーアーキテクチャ

コントローラー、プロバイダー、インポートを明確な構造を持つ凝集した再利用可能なモジュールにカプセル化。

createElysiaApplication を一度呼び出すだけで依存関係グラフ全体が接続され、準備完了の Elysia インスタンスが返されます。

main.ts
import 'reflect-metadata'
import { createElysiaApplication } from 'nestelia'
import { AppModule } from './app.module'

const app = await createElysiaApplication(AppModule)

app.listen(3000)
// Listening on http://localhost:3000

パフォーマンス

NestJS スタイルの DX を Elysia レベルの速度で——デコレーターと DI のオーバーヘッドはほぼゼロ。

1.7x faster than Fastify
1.9x faster than Express
2.3x faster than NestJS
ElysiaBun
74,395 reqs/s
NesteliaBun
71,703 reqs/s
FastifyNode
42,640 reqs/s
ExpressNode
37,825 reqs/s
NestJSNode
30,582 reqs/s
リクエスト/秒で測定。GET / → プレーンテキスト 'Hello World'。500 接続、10 秒間。

MIT ライセンスの下で公開されています。