Skip to content

@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 / 一次性返回全部行。

ts
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)*limittotalcount() 取),其余 5 端点同 createCrudRoutesfilterWhere?: (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 辅助。