Skip to content

chyVacheck/evo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

⚡️ Evo Framework

Evo — современный TypeScript-фреймворк для создания структурированных, типобезопасных HTTP-сервисов без магии и внешних зависимостей.


🧩 Основная идея

Evo создан, чтобы дать полный контроль над архитектурой бэкенда.
Без скрытых абстракций, без зависимостей, без магии — всё явно и предсказуемо.

  • 💡 Type-safe от начала до конца — строгая типизация для роутов, DTO, сервисов и контекста.
  • ⚙️ Модульная структура — чёткое разделение ответственности (core, base, middleware, modules).
  • 🧠 Предсказуемость — никакой «магии» как у крупных фреймворков, только чистый и понятный код.
  • 🔍 Контроль — вся маршрутизация, валидация и ответы определяются вручную.
  • 🧰 Гибкость — можно использовать как основу для REST API, CLI, сервисов или собственных инструментов.

🧱 Архитектура

logs/               # логи приложения
src/
├── config/         # конфигурационные файлы
├── core/           # ядро: базовые классы, типы, ошибки, middleware
│   ├── app/        # главный класс приложения
│   ├── base/       # базовые модули и контроллеры
│   ├── database/   # базы данных с которыми работает приложение с коробки
│   ├── errors/     # ошибки ядра
│   ├── exceptions/ # исключения уровня API
│   ├── logger/     # логгер
│   ├── middleware/ # стандартные middleware
│   ├── types/      # общие типы и интерфейсы
│   └── utils/      # вспомогательные утилиты
├── modules/        # прикладные модули (user, todo, etc.)
└── index.ts        # точка входа приложения

🚀 Быстрый старт

# Клонировать репозиторий
git clone https://github.com/chyvacheck/evo.git
cd evo

# Установить зависимости
bun install

# Запустить dev-сервер
bun run dev

💡 Пример простого контроллера

import { ControllerModule } from '@core/base';
import { HttpStatusCode, SuccessResponse } from '@core/http';
import { HttpContext, PathParamsOf } from '@core/types/http';
import { UserService } from '@modules/user/User.service';
import { CreateUserRequest } from '@modules/user/request/CreateUser.dto';

export class UserController extends ControllerModule {
	private service = UserService.getInstance();

	/** GET /user/:id */
	public async getOneUserById(
		ctx: HttpContextValidated<
			'/user/:id', // auto generate params from path
			any, // Query
			ValidatedParamsState<ObjectIdParamsRequest> // state
		>
	) {
		this.info({
			message: 'Request to get one user by id',
			requestId: ctx.requestId,
			details: {
				id: ctx.state.validated.params.id
			}
		});

		const resp = await this.service.getOneUserById({
			requestId: ctx.requestId,
			id: ctx.state.validated.params.id
		});

		const response = SuccessResponse.ok({
			message: 'User found successfully',
			details: { id: resp.getData()._id },
			data: resp.getData()
		});

		ctx.reply.status(response.getStatusCode()).json(response.toJSON());
	}
}

🧰 Ключевые возможности

  • 🌐 RESTful API с поддержкой JSON
  • 🔗 Централизованная маршрутизация с поддержкой вложенных маршрутов
  • 🔨 Валидация входных данных с помощью zod
  • 🔄 Централизованная обработка ошибок
  • 🔒 Унифицированные ответы (SuccessResponse, ErrorResponse)
  • 🧾 Типизированный контекст HttpContext и HttpContextValidated
  • 🧩 Middleware-пайплайн (before / after / finally)
  • 📦 Простая интеграция с MongoDB через BaseMongoRepository и BaseMongoService
  • 🚀 CLI для генерации новых модулей (в разработке)

📜 Лицензия

Проект распространяется под лицензией
Evo Non-Commercial License v1.0

Свободно использовать в образовательных, исследовательских и личных целях.
Коммерческое использование запрещено.
Все права принадлежат Dmytro Shakh.


✨ Автор

Dmytro Shakh
💻 GitHub: @chyvacheck
📧 Email: dmytro.4or.dev@gmail.com
🧠 Framework: Evo


About

Type-safe backend framework for building structured and explicit HTTP services.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors