imbytecat
7e27640a26
feat(deploy): migrations 嵌入二进制,实现真单文件部署
...
- embed-migrations.ts:扫 ./drizzle/meta/_journal.json,生成 src/server/db/migrations.gen.ts,每条 SQL 通过 `import sql_<idx> from '../../../drizzle/<tag>.sql' with { type: 'text' }` 在 bun build --compile 时被静态嵌入二进制
- migrate.ts 重写:runtime 用 createHash('sha256') 计算迁移哈希,仅用 db.execute(sql) + db.transaction() 公开 API 写入 drizzle.__drizzle_migrations 簿记表(不依赖 @internal 的 db.dialect/db.session)
- db:generate 链 db:embed,保证 SQL 改动总是同步到 migrations.gen.ts
- Dockerfile 删 COPY drizzle/,binary 是部署唯一 artifact
- 同步 README / AGENTS / biome.json
2026-04-25 14:05:58 +08:00
imbytecat
e28fe9dc7b
perf(compile): 启用 bytecode + minify + inline sourcemap
...
- Bun 官方 bytecode caching:中型应用 startup ~2x(docs.bun.sh/docs/bundler/bytecode)
- minify:减小 bytecode 体积,二进制仅 +2MB sourcemap
- sourcemap inline:嵌入二进制,保证错误堆栈可读,并在 compile.ts 清理 bundler 残留的 *.js.map
2026-04-25 14:05:35 +08:00
imbytecat
20104a6d53
docs(readme): 补 test 脚本与 query helper 步骤
...
- scripts 表加 `bun run test`
- Add a feature 拆出 `src/client/queries/<feature>.ts` 步骤,与 AGENTS.md 对齐
2026-04-25 13:37:05 +08:00
imbytecat
a3a62c24b9
docs: 新增 README,AGENTS 同步至当前架构
...
- README: 用户向 quick-start、scripts 表、add-a-feature checklist、deploy 流程
- AGENTS:
- 修订 stale 文案(VITE_APP_TITLE/experimental_defaults/.gitkeep/route 组件风格)
- 新增 Testing 段(bun test 约定)和 Endpoints 段(/, /health, /api/*)
- Layout 补 logger.ts、health.ts、components/、styles.css、根 drizzle/
- 追加 10 条 room-to-grow 纪律(client query / middleware / interceptor / 测试等扩展边界)
2026-04-25 13:31:45 +08:00
imbytecat
6dc7f9f791
test: 启用 bun test 并补 todo contract 示例
...
- package.json 加 "test": "bun test"
- todo.contract.test.ts 给 starter 一个可复制的 colocated 测试样板
覆盖 valid input / missing field / wrong type 三种 case
2026-04-25 13:31:34 +08:00
imbytecat
8f7744ca0d
feat(server): 新增统一 logger 入口与 /health liveness 端点
...
- src/server/logger.ts 包一层 console.*,给后续 pino/otel 迁移留单点
- interceptors.ts 的 logError 改走 logger.error,业务侧禁止直接 console.*
- /health 返回 'ok',纯 liveness(不查 DB),DB 挂时探活仍绿
2026-04-25 13:31:25 +08:00
imbytecat
830c908712
refactor(arch): 移除 experimental_defaults,提炼 useInvalidateTodos,闭环若干悬挂配置
...
- orpc.ts: 改为纯 createTanstackQueryUtils,不再依赖 experimental_ API
- 抽出 src/client/queries/todo.ts 的 useInvalidateTodos,避免 query key 散落页面
- shutdown: setTimeout 内 db.$client.end() 失败也走 process.exit
- 删除 db/index.ts 未被使用的 DB 类型导出
- 删除 env.ts 未被消费的 VITE_APP_TITLE,根 title 改为 package.json name
- 清理 routes/index.tsx 的 JSX 区段注释、compose.yaml 注释掉的端口块、robots.txt URL 注释
2026-04-25 13:31:16 +08:00
imbytecat
2c5bceb826
fix(deploy): 端到端跑通编译二进制 + docker compose
...
端到端验证时发现 4 处细节,一起补上:
1. bin.ts 漏了 default: 'serve'——CMD ["./server"] 会直接吐 help 而
不是起服务(在 compose 里 app 立刻 exit)。citty 原生支持 default
2. Dockerfile 在 bun install 之前就要 COPY patches/,否则 package.json
的 patchedDependencies 找不到补丁文件,install 失败
3. drizzle/ 目录在仓库里必须存在(带 .gitkeep),否则 Dockerfile 末尾
COPY drizzle/ 到运行镜像会失败
4. migrate.ts 之前只检查 ./drizzle 目录是否存在就跳过——空目录时仍会
进到 drizzle 的 readMigrationFiles,报 Can't find meta/_journal.json。
改成检查 meta/_journal.json 是否存在,更准确地区分"还没生成过迁移"
与"有迁移待应用"
验证路径:
- docker compose up -d --build → migrate 完成退出 → app 健康
- curl /api/spec.json → 200,OpenAPI 文档含 todo.{list,create,update,remove}
2026-04-24 20:43:36 +08:00
imbytecat
5dd54ec9e9
docs(agents): 同步架构简化后的规约
...
- DB:module-level const db(删掉 getDB/closeDB 的描述),说明为什么
不需要兼容 Cloudflare Workers 的 lazy init
- Routers 直接 import db,不再过 middleware;只在真正需要 per-request
上下文时才新建 middlewares/
- Layout 刷新 db/ 与 api/ 目录的注释;Don'ts 补上不要回退到 lazy DB 单例
2026-04-24 20:38:51 +08:00
imbytecat
22ac02cbc6
refactor(db): 精简 generatedFields,删三分支 PK 策略与泛型 keys 工具
...
- PK 策略原本给了 native(PG18)/extension/app-side 三条路,对 base 项目
是 YAGNI。全部落到最稳妥的 $defaultFn(uuidv7):任意 PG 版本都能跑,
不依赖扩展或 18+ 的 uuidv7() 原生函数
- createGeneratedFieldKeys 泛型 reduce 只为了生成 { id: true, createdAt:
true, updatedAt: true } 这三项,直接手写 as const 更直观
- 删掉 pk/id/createdAt/updatedAt 的独立 helper 导出——没人引用,它们
只是 generatedFields 的内部组合
2026-04-24 20:37:51 +08:00
imbytecat
2678a53034
refactor(api): 删掉 db ORPC middleware,handler 直接用 db
...
db middleware 的存在只是为了把 db 注入到 ORPC context——这是 Cloudflare
Workers / 多租户场景的模式(db 依赖 per-request 的 env binding)。在
Bun 单进程 + 模块级 const db 下,这层中间件是纯粹的仪式:一行 import
直接拿到 db,反而更清晰。
- 删除 src/server/api/middlewares/ 整个目录(不留空脚手架,KISS)
- context.ts 去掉 DBContext 与示例注释,只留 BaseContext { headers }
作为未来 auth/tenant 等 middleware 的扩展点
- routers/todo.router.ts 不再 .use(db),handler 内直接 db.query / db.insert
需要 per-request 上下文(auth、tenant、rate-limit)时再按 ORPC 的
os.middleware 模式新增,不在此预先铺陈。
2026-04-24 20:37:11 +08:00
imbytecat
d15b22ad1b
refactor(db): 去掉 lazy singleton,改为模块级 const db
...
getDB/closeDB + 可空单例是 Cloudflare Workers 场景的模式——每个请求独
立上下文、不允许模块加载期副作用。在 Bun 单进程长驻服务下这些都是冗余
的仪式,徒增心智。
改为模块级 const db:
- src/server/db/index.ts 直接 export drizzle(...) 实例
- shutdown 插件用 db.$client.end() 收尾
- db.middleware.ts 跟随内部重命名以避免同名遮蔽(本身的去留放到下一
次提交)
2026-04-24 20:36:16 +08:00
imbytecat
f6b6edee23
fix(deps): 补丁绕过 @tanstack/start-plugin-core 误引 @rsbuild/core
...
@tanstack/start-plugin-core@1.168 .0 的 dist/esm/index.js 在 Vite 场景
下也会静态导入 ./rsbuild/planning.js,而后者硬依赖被标为 optional peer
的 @rsbuild/core,导致 vite build 启动阶段 ERR_MODULE_NOT_FOUND。
引入 bun patch 只保留 vite 相关导出(删掉 RSBUILD_ENVIRONMENT_NAMES
和 tanStackStartRsbuild),不安装 rsbuild 全家桶(rspack 很重)。
等上游修复再移除本补丁。
2026-04-24 20:35:22 +08:00
imbytecat
19e60d358f
feat(cli): 引入 citty CLI,迁移改为显式 ./server migrate
...
- 顶层新增 bin.ts 作为编译入口,citty 懒加载 src/cli/ 下子命令
- src/cli/serve.ts 通过 _serve-nitro.mjs 桥接启动 Nitro(规避
.output/server/index.mjs 顶层 serve(...) 的副作用导入)
- src/cli/migrate.ts 显式跑 drizzle migrate;env / drizzle 都在 run()
里 await import,避免 citty --help 遍历 subCommands 时触发 env 校验
- compile.ts 入口切到 bin.ts;移除 src/server/plugins/migrate.ts
与 vite.config.ts 中的启动时自动迁移
- compose.yaml 新增一次性 migrate 服务,app depends_on
service_completed_successfully,保证迁移先行再起服
- tsconfig 排除 .output / out;AGENTS.md 补充 CLI 与部署规约
2026-04-24 20:32:32 +08:00
imbytecat
4518a63959
docs(agents): 同步 drizzle 0.x 降级后的指引
...
修正 AGENTS.md 里与 1.0 beta 相关的过时条目(drizzle-orm/zod、
defineRelations、RQB v2 对象语法等),改为记录当前真实用法:
drizzle-zod 包、`drizzle({ schema })`、RQB v1 回调写法。顺手裁掉
通用的 Biome/TS 说明,补上几条仓库特有的坑(Nitro 插件在 vite.config
里注册、distroless cc 变体、无 CI/pre-commit 等)。
2026-04-24 20:13:56 +08:00
imbytecat
75c77159b4
refactor(db): 适配 drizzle-orm 0.x API 并引入 drizzle-zod
...
drizzle-orm 从 1.0 beta 降级到 0.45 后,1.0 的 defineRelations、drizzle-orm/zod
子路径以及 RQB v2 的 orderBy 对象语法均不可用。改用 schema 作为 drizzle()
入参、从独立的 drizzle-zod 包导入 schema 生成器,并将 orderBy 改回 0.x 的
回调写法。同时删除因降级而失效的旧迁移。
2026-04-24 20:08:41 +08:00
imbytecat
f9847e6f6e
chore: 移除 opencode.jsonc 配置文件
2026-04-24 20:02:01 +08:00
imbytecat
ac58950853
chore: 为 TanStack MCP 配置 Authorization 鉴权头
2026-04-24 19:51:48 +08:00
imbytecat
02757226f7
chore(deps): 锁定 Bun 版本并升级依赖
...
- Dockerfile 与 mise.toml 固定 bun 至 1.3.13
- 升级 ORPC/TanStack/Biome/Vite/TypeScript 等依赖
- drizzle-orm 与 drizzle-kit 回退至稳定版
2026-04-24 19:50:17 +08:00
imbytecat
934ba80c94
chore(deps): 升级 TanStack Router/Start 及 @types/bun 依赖
2026-04-11 20:53:34 +08:00
imbytecat
15118e8aa2
chore(deps): 升级 ORPC、React 与 Vite 相关依赖
2026-04-10 10:34:31 +08:00
imbytecat
1af5d4e3c0
fix: 修复编译二进制 Ctrl+C 无法退出的问题
2026-04-02 07:48:25 +08:00
imbytecat
6795730485
refactor(db): 暴露 closeDB() 函数以支持连接池清理
2026-04-02 07:48:16 +08:00
imbytecat
c20cf02d9f
chore: update Docker Compose configuration
...
- Use postgres:18-alpine image
- Update environment variable format
- Rename volume from pgdata to postgres_data
- Increase healthcheck interval to 10s
2026-04-02 03:49:38 +08:00
imbytecat
341315a01b
chore: upgrade PostgreSQL to v18 and restructure compose.yaml
2026-04-02 03:43:37 +08:00
imbytecat
77b3484415
refactor: 改用 Nitro 插件实现启动时数据库迁移
2026-04-02 03:42:45 +08:00
imbytecat
5de4d5f940
chore: upgrade PostgreSQL to v18 and restructure compose.yaml
2026-04-02 02:45:00 +08:00
imbytecat
ed770909ef
chore: 添加 Docker 打包和 Compose 编排支持
2026-04-02 02:43:21 +08:00
imbytecat
9175909033
chore: 更新依赖
2026-04-02 00:57:49 +08:00
imbytecat
5f5f6c469a
chore: remove unused shadcn MCP
2026-04-02 00:53:30 +08:00
imbytecat
087796038e
chore(routes): 重新生成路由树以反映健康检查端点删除
2026-04-02 00:49:33 +08:00
imbytecat
ca4e25827f
chore(api): 删除未使用的健康检查端点
2026-04-02 00:48:41 +08:00
imbytecat
7700ba4520
docs: 修正 AGENTS.md 与代码库的 12 处不一致
2026-04-02 00:37:44 +08:00
imbytecat
c67e773086
refactor: 抽取 UI 组件、改进错误页面、统一导入路径并简化数据库接口
2026-04-02 00:13:43 +08:00
imbytecat
4ec4576fc5
chore: remove Node.js from mise.toml (pure Bun project)
2026-04-01 23:28:35 +08:00
imbytecat
22363279c8
docs: 精简 AGENTS.md 文档结构并优化内容呈现
2026-04-01 23:24:23 +08:00
imbytecat
b38d475b6f
chore(deps): 升级 @orpc/* 至 1.13.13, @tanstack/react-query 至 5.96.1, @biomejs/biome 至 2.4.10
2026-04-01 23:18:42 +08:00
imbytecat
486cb7b129
chore(vscode): add promptToUseWorkspaceVersion for TypeScript SDK
2026-04-01 20:56:10 +08:00
imbytecat
c894631c64
chore(db): 提交初始数据库迁移文件
2026-04-01 19:54:49 +08:00
imbytecat
ce3684fdc0
fix: use relative import in drizzle.config.ts for path alias compatibility
2026-04-01 19:48:43 +08:00
imbytecat
cd7b65fda4
refactor: flatten monorepo into standalone project
2026-04-01 19:43:21 +08:00
imbytecat
036afb8d20
chore: remove React Compiler and @rolldown/plugin-babel
2026-04-01 18:26:09 +08:00
imbytecat
688252fd49
chore(deps): bump @biomejs/biome to 2.4.9 and @orpc/* to 1.13.11
2026-03-26 01:14:09 +08:00
imbytecat
42c2fff7cd
chore: update VS Code TypeScript SDK path
2026-03-25 09:58:50 +08:00
imbytecat
034f570794
chore(deps): update TanStack devtools packages
2026-03-25 09:51:21 +08:00
imbytecat
ea5935e29b
chore(deps): remove babel-plugin-react-compiler
2026-03-25 09:45:37 +08:00
imbytecat
3663f3d010
chore(deps): add @rolldown/plugin-babel and update dependencies
...
- Add @rolldown/plugin-babel for React compiler support
- Update TypeScript to 6.0.2
- Update TanStack packages (@tanstack/react-query, @tanstack/react-router, @tanstack/react-start)
- Update @vitejs/plugin-react to 6.0.1
- Update Vite to 8.0.2 and Nitro nightly
- Refactor vite.config.ts to use separate babel plugin with reactCompilerPreset
2026-03-25 09:44:13 +08:00
imbytecat
9d1beab2e1
chore: migrate to TypeScript 6.0.2
...
- Upgrade typescript from 5.9.3 to 6.0.2
- Add explicit types: ['node'] to base tsconfig (TS6 breaking change)
- Remove deprecated baseUrl from server tsconfig
- All typecheck passing
2026-03-25 09:23:07 +08:00
imbytecat
88326c4992
refactor(server): 改用 Vite 原生 tsconfig 路径解析
2026-03-22 01:27:47 +08:00
imbytecat
4e2bc5b8dc
chore(deps): 更新 bun lock
2026-03-22 00:39:25 +08:00