@acrux/server
服务端抽象(源码位于 packages/acrux-server)。Hono + Drizzle (D1)。无 cloudflare:workers 耦合。
占位内容
以下为 API 清单骨架,签名与示例待补全。
API
createCrudRoutes(opts)
从 drizzle 表 + zod create/upsert schema 生成标准 6-endpoint CRUD 路由,是前端 useCachedCollection 的服务端镜像。db 实例注入,不内部 import。GET / 一次性返回全部行。
import { createCrudRoutes } from "@acrux/server";
export const memoRoutes = createCrudRoutes({
db,
table: schema.memos,
create: memoSchema.create.body,
upsert: memoSchema.upsert.body,
orderBy: (t) => [desc(t.pinned), desc(t.createdAt)],
});createPaginatedRoutes(opts)
offset 分页路由,前端 usePaginatedCollection 的服务端镜像。仅 GET / 不同:GET /?page&limit&filter → { items, total }(offset = (page-1)*limit,total 由 count() 取),其余 5 端点同 createCrudRoutes。filterWhere?: (filter: string) => SQL | undefined 把不透明 filter 串翻译成 WHERE(同时作用于列表与 count)。defaultLimit(20) / maxLimit(100) 钳制每页条数。
createCursorRoutes(opts)
cursor 分页路由,前端 useCursorCollection 的服务端镜像。GET /?cursor&limit&filter → { items, nextCursor }。游标恒为 id 列(UUIDv7 单调,序 ≈ 创建序);多取 1 行探测下一页,溢出时 nextCursor = 本页末行 id,否则 null。direction(desc 默认 / asc) 同时驱动排序与游标比较。filterWhere / defaultLimit / maxLimit 同上。
crudBase(opts)
三个工厂共享的内部基底:生成除 GET / 之外的 5 个读/写端点的 Hono 链。一般不直接调用——需要自定义列表端点时可在其上续接 .get("/", …)。
HttpErr(status, message) / ErrorHandler
抛出 HttpErr,全局 ErrorHandler 序列化成 { status, error } JSON。
paramId / paramIdOrName / validJson
Hono 校验件与 zod 辅助。