CI / lint + typecheck + test + build (push) Canceled after 0s
- CI: GitHub Actions (bun 1.3.14, lint/typecheck/test/build/format gates) - Docker: multi-stage standalone build + .dockerignore (next.config output=standalone) - Auth: better-auth server (memory adapter, drizzle-swap-ready) + react client + /api/auth/[...all] route handler - API: /api/health + /api/openapi routes, openapi-typescript codegen to types/api.ts, typed openapi-fetch client (lib/api, lib/http) - Shiki: server-side CodeBlock component (escaped HTML) - E2E: playwright home + health specs on dedicated :3100 (chromium 1243 installed from GCS after CDN timeout) - Dev: allow 127.0.0.1/localhost dev origins (HMR for local tooling)
25 lines
544 B
TypeScript
25 lines
544 B
TypeScript
import { codeToHtml } from "shiki";
|
|
|
|
const DEFAULT_THEME = "github-dark";
|
|
|
|
export async function CodeBlock({
|
|
code,
|
|
lang = "text",
|
|
theme = DEFAULT_THEME,
|
|
className,
|
|
}: {
|
|
code: string;
|
|
lang?: string;
|
|
theme?: string;
|
|
className?: string;
|
|
}) {
|
|
const html = await codeToHtml(code, {
|
|
lang,
|
|
theme,
|
|
});
|
|
|
|
// Safe: shiki escapes all input before emitting HTML (no raw user content
|
|
// reaches innerHTML), so no sanitizer is required here.
|
|
return <div className={className} dangerouslySetInnerHTML={{ __html: html }} />;
|
|
}
|