展示 HN: Bun-sqlgen - Bun 的类型安全原始 SQL,无需 ORM
Bun 的类型安全 SQL,无需 ORM - 原始的 Bun.sql,实时检查您的架构。给查询打上名称标签 - sql.GetUser`...` - 它的完全类型化、非空安全的行将在调用现场直接出现:无需 ORM,无需泛型,无需手写类型。代码生成为每个查询计划对真实的 Postgres 或 SQLite 数据库进行检查(无需 Docker),因此错误的列和不良的 SQL 会使构建失败,而不是生产失败 - 足够快,可以在每次保存时重新运行。运行时保持 100% Bun 原生。发布为 @ilbertt/bun-sqlgen - 它的 README 是完整指南:两种方言、可空性覆盖、事务和配置。安装 bun add @ilbertt/bun-sqlgen 快速入门 迁移是您架构的真实来源 - 将它们放在任何文件夹中:-- db/migrations/0001_init.sql CREATE TABLE users ( id bigint PRIMARY KEY GENERATED ALWAYS AS IDENTITY, email text NOT NULL, display_name text ); 使用 withTypes 包装您的客户端,并给每个查询打上名称标签:import { withTypes } from '@ilbertt/bun-sqlgen'; import { SQL } from 'bun'; const sql = withTypes(new SQL(Bun.env.DATABASE_URL!)); export async function getUser(id: number) { const [user] = await sql.GetUser ` SELECT id, email, display_name FROM users WHERE id = ${id} `; return user; // 类型化 { id: string; email: string; display_name: string | null } } 生成类型:bun bun-sqlgen generate 'src/**/*.ts' --migrations db/migrations 这将写入 src/queries.gen.d.ts - 提交它。将其放置后,user.email 是编译错误,user.display_name.length 被标记为可能为 null,全部由普通的 tsc 实现。示例 可运行的项目位于 examples/ 文件夹中。贡献 发展设置和约定在 CONTRIBUTING.md 中。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡