HOPAK.JS · v0.5

Бекенд-фреймворк для Bun.

Файлова маршрутизація. Типізовані моделі. Згенерований CRUD.

$ bun add -g @hopak/cli
Швидкий старт

Як це працює

Модель

Поля, обмеження, звʼязки.

app/models/post.ts
import { model, text, boolean, belongsTo } from '@hopak/core';

export default model('post', {
  title: text().required().min(3).max(200),
  content: text().required(),
  published: boolean().default(false),
  author: belongsTo('user'),
});

Декларація створює колонки таблиці, TypeScript-тип рядка і валідатор.

Маршрути

Два файли. Шість ендпоінтів.

$ hopak generate crud post
Created app/routes/api/posts.ts
Created app/routes/api/posts/[id].ts
app/routes/api/posts.ts
import { crud } from '@hopak/core';
import post from '../../models/post';

export const GET = crud.list(post);
export const POST = crud.create(post);

Згенеровані файли — звичайний TypeScript. Ендпоінт можна змінити або видалити у будь-який момент.

Відповідь

Запит до запущеного сервера.

$ curl localhost:3000/api/posts
HTTP/1.1 200 OK
{
  "items": [
    { "id": 1, "title": "Hello", "published": true, "author_id": 4 }
  ],
  "total": 1,
  "limit": 20,
  "offset": 0
}

Сервер валідує вхідні дані, приховує чутливі поля і пагінує списки.