@roastery/barista
v0.1.1
Published
Elysia HTTP server factory for the Roastery CMS ecosystem
Maintainers
Readme
@roastery/barista
Elysia HTTP server factory for the Roastery CMS ecosystem.
Overview
barista exposes a barista factory function that assembles a pre-configured Elysia application, serving as the HTTP server entry point for Roastery CMS applications. Every cross-cutting concern a Roastery service needs is wired in for you:
- CORS (
@elysia/cors) - Typed environment validation at boot (
env) —PORT/NODE_ENVplus any extra schemas you declare - Global error handling (
errorHandler) — maps@roastery/terroirexceptions to HTTP status codes - Response shaping (
responseMapper+ theservedecorator) — maps domain entities to DTOs inside a{ status, data }envelope - Request tracing (
requestTrace) — structured per-request logging via@roastery/aroma - Optional health check (
elysia-healthcheck)
A companion patron helper builds an end-to-end typed Eden Treaty client for any such app.
Installation
bun add @roastery/baristaUsage
import { barista } from '@roastery/barista';
import { t } from '@roastery/terroir';
const app = barista({
elysia: { name: 'my-service' },
environmentDTOs: [t.Object({ DATABASE_URL: t.String() })],
corsConfig: { origin: true },
healthCheck: true,
})
.get('/', ({ env, serve }) => serve('OK', { port: env.PORT }))
.listen(Number(process.env.PORT));barista accepts a BaristaArgs object — every field is optional, so barista({}) yields a fully functional app with sensible defaults. It returns the live Elysia instance (chain .get, .post, .listen, …) with the env decorator statically typed from your declared schemas.
| Field | Purpose |
|-------|---------|
| elysia | Raw ElysiaConfig forwarded to new Elysia(...) |
| environmentDTOs | Extra t.Object({...}) schemas validated at boot and merged into the typed env decorator |
| aromaArgs | Options for the shared @roastery/aroma logger |
| corsConfig | Configuration for @elysia/cors |
| healthCheck | When true, mounts the health-check endpoint |
Typed client
import { patron } from '@roastery/barista/patron';
const client = patron(app); // in-process, typed from the app's routes
const { data } = await client.index.get();Technologies
| Tool | Purpose |
|------|---------|
| Elysia | HTTP framework for Bun |
| tsup | Bundling to ESM + CJS with .d.ts generation |
| Bun | Runtime, test runner, and package manager |
| Knip | Unused exports and dependency detection |
| Husky + commitlint | Git hooks and conventional commit enforcement |
Development
# Run tests
bun run test:unit
# Run tests with coverage
bun run test:coverage
# Build for distribution
bun run build
# Check for unused exports and dependencies
bun run knip
# Full setup (build + bun link)
bun run setupLicense
MIT
