imbytecat
|
4a78ba2882
|
refactor(db): UUIDv7 \u751f\u6210\u4e0b\u63a8\u5230 PG18 \u539f\u751f uuidv7()\uff0c\u8005\u53ea\u6539 schema
\u53ea\u6539 schema \u5c42\u9762\uff1a
- src/server/db/fields.ts:
$defaultFn(() => Bun.randomUUIDv7()) \u2192 default(sql`uuidv7()`)
- AGENTS.md Stack & runtime: \u52a0 PG18+ \u786c\u7ea6\u675f
- AGENTS.md Drizzle \u8282\u8bf4\u660e DB-side uuidv7\uff08\u5355\u8c03\u3001\u4f7f\u7528 DB \u65f6\u949f\uff09
- AGENTS.md Bun-native \u539f\u5219\u533a\u5206 app-code UUIDv7 \u4e0e DB PK
- AGENTS.md Don'ts \u9996\u6761\u52a0 "AI \u4e0d\u80fd\u8dd1 db:generate"
\u4f9d\u7136\u9700\u8981\u4f60\u624b\u52a8\u8dd1 `bun run db:generate` \u4ee5\uff1a
1) \u751f\u6210\u65b0 migration\uff08\u5e94\u8be5\u662f DROP \u8001\u8868 + CREATE \u65b0\u8868\uff0c
\u6216\u4f60\u624b\u5199 ALTER COLUMN id SET DEFAULT uuidv7()\uff09
2) \u91cd\u751f migrations.gen.ts
\u672c commit \u72b6\u6001\u4e0b\u8fd0\u884c\u65f6\u5c1a\u4e0d\u53ef\u7528\uff08\u8001 migration \u672a\u8bbe DEFAULT\uff0c
\u63d2\u5165\u4f1a\u62a5 NOT NULL \u9519\uff09\uff1bdb:generate \u540e\u91cd\u65b0 build/compile/deploy \u624d\u662f
\u5b8c\u6574\u72b6\u6001\u3002fix / typecheck / test 3/3 \u5747\u8fc7\uff08\u9759\u6001\u68c0\u67e5\u4e0d\u4f9d\u8d56 migration\uff09\u3002
|
2026-04-25 17:12:06 +08:00 |
|
imbytecat
|
fafe02bdbd
|
refactor: 主动审计修复多处可观测性、依赖、代码质量缺口
通过并行 explore + librarian + 自查发现并修复:
代码缺陷
- shutdown.ts: db.$client.end().finally(...) 静默吞错——关闭失败会
谎报 "DB pool closed" 后照常 exit 0。改用 await + try/catch
分别记录成功/失败,setTimeout 也换成 Bun.sleep。
- interceptors.ts: 两条 instanceof ORPCError && instanceof
ValidationError 重复检查,改用 early return + 单 if 分支区分 code。
- types.ts: 移除从未被引用的 RouterInputs 死代码(仅 RouterOutputs
被 TodoItem 用到)。
Bun 原生 API(删/换 Node 兼容层)
- fields.ts: uuid v7 → Bun.randomUUIDv7(),删除 uuid 依赖
- migrate.ts: node:crypto.createHash → Bun.CryptoHasher.hash,
少一个 Promise.all 项 + 一个 import
- shutdown.ts: setTimeout → Bun.sleep(顺带)
Biome 2.4 规则补强
- domains.types: "all"——开启类型感知规则集(noFloatingPromises /
noMisusedPromises / useAwaitThenable / noUnnecessaryConditions
等 Promise/异步陷阱)
- domains.drizzle: "recommended"、domains.react: "recommended"
- 显式开启 suspicious.noImportCycles(2.4 已 promote)
文档
- AGENTS.md 在 Stack & runtime 段加 "Prefer Bun-native APIs"
原则,列出 UUIDv7/SHA-256/sleep/Bun.file 的优先路径
- AGENTS.md 在 Code style (Biome) 段记录本次启用的 lint domain
与 noImportCycles 规则
验证:fix / typecheck / test 3/3 / build 568ms / compile 117M /
docker compose 全套(migrate JSON 日志 ✓、UUIDv7 写入 ✓、SIGTERM
shutdown 正确序列化 ✓)
|
2026-04-25 17:06:22 +08:00 |
|
imbytecat
|
815ee31f95
|
refactor(layout): 根目录脚本归位 src/ 与 scripts/,sql.d.ts 下沉到 db/
- bin.ts → src/bin.ts (生产入口归并到 src/,import 改用 #package + @/cli/*)
- compile.ts → scripts/compile.ts (开发期工具)
- embed-migrations.ts → scripts/embed-migrations.ts (codegen)
- src/sql.d.ts → src/server/db/sql.d.ts (与唯一消费者 migrations.gen.ts 共址)
效果:项目根从 3 个零散 .ts 减为 0 个,src/ 是完整应用源码,scripts/
明确区分开发期工具。所有 package.json scripts、AGENTS.md layout/CLI 章节、
compile.ts ENTRYPOINT 与 .js.map 清理路径同步更新。
验证:fix / typecheck / test 3/3 / build 570ms / compile 117M / docker
compose 全套(migrate 干净的 logger=cli.migrate JSON 日志、app /health
200、POST /api/todo/create 成功)。
|
2026-04-25 16:50:48 +08:00 |
|
imbytecat
|
34d2cbb1cd
|
refactor(logging): 二次审计修复 oracle 漏掉的可观测性缺口与占位符冗余
二次深度审计发现:
1. shutdown.ts SIGINT/SIGTERM 路径完全沉默——生产环境 k8s pod 终止时
操作者在日志里看不到任何痕迹。补 getLogger(['shutdown']) 三条日志:
- "Draining for shutdown" {signal, graceMs} (优雅关停起点)
- "Forcing exit on repeated signal" {signal} (二次信号强制退出)
- "DB pool closed, exiting" (干净退出确认)
2. interceptors.ts 与 shutdown.ts 的 {error}/{signal} 占位符在 JSON 模式
下导致 message 字段重复 inspect 转义 properties 里的同一份内容
(Error/对象会被 JSON.stringify 内联进 message,引号被反斜杠转义)。
规则收敛:占位符仅用于"想要内联渲染"的基本类型(id、count、duration),
对象/Error 直接放 properties,message 保持人类可读短句。
3. AGENTS.md Logging 段更新示例与规则,反映实际最佳实践。
端到端验证(compose + Postgres 18-alpine):
- /api/rpc/todo/list 成功 → logger=db level=INFO 输出 SQL ✓
- /api/rpc/todo/create 校验失败 → logger=api level=ERROR
message="Unhandled error in ORPC handler" 干净,properties.error
完整保留 code/status/message/data 字段 ✓
- SIGTERM → 三条 shutdown logger 事件按预期输出 ✓
- typecheck / test 3/3 / build / compile 117M 全绿 ✓
|
2026-04-25 16:24:00 +08:00 |
|
imbytecat
|
ce39faf778
|
refactor(logging): 接受 oracle 审计建议打磨三处不够极致的细节
1. configureSync 用 getConfig() === null 守卫幂等初始化。原写法
reset: true 在 ESM 缓存正常时多余、HMR 重复求值时会反复
resetSync() + 累积 process.on('exit') 监听器。
2. ['logtape','meta'] logger 加 parentSinks: 'override'。原配置
它既挂自己的 console sink、又继承 root sink,meta 的 warning/
error/fatal 会被打印两次。
3. DrizzleLogger 显式传 'info' level。原默认 'debug' 与 LOG_LEVEL
默认 'info' 形成隐形依赖:用户必须同时设两个变量才能看到 SQL。
现在 LOG_DB=true 单开关即生效,符合"开关即可用"审美。
附带:删除未消费的 export type { LogLevel };getLogger 改成直接
re-export from '@logtape/logtape',少一层本地 import 间接。
端到端验证(compose + Postgres 18-alpine):
- LOG_DB=true 默认 LOG_LEVEL=info 下 SQL 以 level=INFO logger=db 输出 ✓
- meta logger 不再重复 sink ✓
- typecheck / test 3/3 / build / compile 117M 全绿 ✓
Oracle 审计 ses_23c5090efffe1jzPR5fVVm1y6m,KISS 评分由 8/10 升至 9.2/10。
|
2026-04-25 16:14:30 +08:00 |
|
imbytecat
|
cc3a5dc5ad
|
feat(logging): 引入 LogTape 替换 console.* 为结构化日志
为什么选 LogTape(2026 实测):
- pino 在 bun build --compile 编译产物里因 worker_threads + 动态 require 在
/\$bunfs/ 虚拟文件系统中崩溃,与单二进制部署核心目标冲突;
- LogTape 零依赖(5.3KB)、零 worker、纯 ESM、原生 Bun 导出条件,runtime
agnostic,配合 configureSync 完美兼容 --bytecode 模式(无裸 top-level await);
- 一等公民集成:@logtape/drizzle-orm(SQL 查询日志)、@logtape/otel(后续
OpenTelemetry sink 留扩展点)。
变更:
- src/server/logger.ts: configureSync 引导 + getLogger 重导出。format 默认
process.stdout.isTTY ? pretty : json,可经 LOG_FORMAT 显式覆盖(绕开 Bun
bundler 把 process.env.NODE_ENV 在 --minify 时 inline 成字面量的特殊处理)。
- src/server/api/interceptors.ts: logError 改用 getLogger(['api']).error(...) +
结构化 properties,弃 logger.error 顶层 API。
- src/cli/migrate.ts: 所有 console.log 改走 getLogger(['cli','migrate']),logger
在 run() 内 lazy-import 以保持 citty subcommand 模块体 side-effect-free。
- src/server/db/index.ts: env.LOG_DB=true 时挂 DrizzleLogger 适配器,SQL 查询
按类别 ['db'] 在 debug 级输出(含 query/params/formattedQuery 三字段)。
新增 env 旋钮(t3-oss 校验):
- LOG_LEVEL: trace|debug|info|warning|error|fatal,默认 info
- LOG_FORMAT: pretty|json,默认 TTY 自动选
- LOG_DB: stringbool,默认 false
端到端验证(compose + Postgres 18-alpine):
- TTY 终端:pretty 输出含 ✨ 图标 + ANSI 彩色 + 类别·路径 ✓
- 管道/Docker:JSON Lines 一行一条,含 @timestamp/level/logger/properties ✓
- LOG_FORMAT=pretty 强制覆盖 ✓
- ./server migrate 应用 migration 并经 logger 输出 ✓
- ./server serve + RPC round-trip:interceptor logError 与 drizzle SQL 日志
在生产 JSON 模式下结构化输出 ✓
- fix / typecheck / test 3/3 / build / compile 117M 二进制全绿
|
2026-04-25 16:04:31 +08:00 |
|
imbytecat
|
dd1facd240
|
refactor(imports): #nitro 重命名为 #server,imports 字段 ASCII 排序
命名上避开实现耦合:被指向的 .output/server/index.mjs 本质是"编译后的 HTTP 服务器入口",与 nitro(构建器)无关;包装器 _serve-nitro.mjs 仍持"nitro"。未来即便切换至 hono / vite-ssr / h3,#server 名字仍准确。
字段排序改为 ASCII 升序:#drizzle/*.sql < #package < #server,便于 sort-package-json 与人眼对账。
端到端验证(compose + Postgres 18):
- ./server migrate ✓ (embedded SQL)
- /health = ok ✓
- /api/spec.json title=fullstack-starter version=1.0.0 ✓ (#package)
- RPC todo create+list 完整 round-trip ✓ (#server 解析 nitro 产物)
- biome/typecheck/test/build/compile 全绿
|
2026-04-25 15:28:04 +08:00 |
|
imbytecat
|
5174cff3c5
|
refactor(cli): _serve-nitro 改用 #nitro subpath import
src/cli/_serve-nitro.mjs 原本用 ../../.output/server/index.mjs 跨边界导入 nitro 构建产物,与 #package / #drizzle/* 同属 "src/ 跳出根目录" 场景。统一改为 #nitro。
新增 package.json#imports:
"#nitro": "./.output/server/index.mjs"
端到端验证(compose + Postgres 18):
- 编译二进制内嵌 nitro serve() 入口 ✓
- ./server migrate:embedded SQL 应用成功 ✓
- ./server 运行:/health、/api/spec.json (title/version)、RPC create+list 全 OK ✓
- Stack trace 印证 #nitro 由 Bun 正确解析到 .output/server/index.mjs ✓
- biome/typecheck/test/build/compile 全绿
|
2026-04-25 15:23:05 +08:00 |
|
imbytecat
|
7f4cfc8973
|
refactor: 跨边界导入改用 Node # subpath imports(package.json + drizzle SQL)
业务代码沿用 @/* (shadcn 等生态约定);仅"跳出 src/"的真实跨边界场景采用 Node 标准 #name:
- #package → ./package.json:替换 @/../package.json (2 处) 这种用 alias 跳出根目录的 hack
- #drizzle/*.sql → ./drizzle/*.sql:让 codegen 输出的 migrations.gen.ts 不再走 ../../../
效果:
- tsconfig.paths 与 vite.resolve.tsconfigPaths 维持,业务代码 0 改动
- 配置仅新增 package.json#imports 4 行
- Bun runtime / Vite 8 / TS bundler / 编译产物均原生支持
端到端验证:
- 编译二进制:CREATE TABLE 和 'fullstack-starter' 内嵌 ✓
- ./server migrate:应用嵌入式迁移成功 ✓
- ./server 运行:/health、/api/spec.json (title/version)、RPC create+list、OpenAPI create、Scalar /api/docs 全部 OK ✓
- bun run dev:Vite SSR <title>fullstack-starter</title> 注入 ✓
- fix/typecheck/test/build/compile 全绿
|
2026-04-25 15:15:20 +08:00 |
|
imbytecat
|
ed257fe4e6
|
refactor: 应用 Oracle round-4 复核,硬化 migrator 与默认安全值
- migrate: 校验已应用 migration 的 SHA-256,拒绝 schema drift;
split 后 trim + skip empty,避免空 statement 触发 SQL 错误
- todo.contract: update 拒绝空 patch
- env: DATABASE_URL 限定 postgres(ql):// scheme,配置错误更早失败
- compile: autoloadDotenv: false,二进制部署不再吞 cwd 的 .env
- Error.tsx: 生产环境隐藏 error.message,避免内部错误泄露
- AGENTS: 同步 generatedFieldKeys / migrator 行为新描述
|
2026-04-25 14:38:44 +08:00 |
|
imbytecat
|
695e826dcf
|
refactor(types): 消除非必要 as 逃逸,锁紧 strict 政策
按 Oracle 复核处置全仓 5 处类型断言:
- fields.ts: as const → satisfies Record<GeneratedFieldKey, true>
- compile.ts: as readonly string[] → ReadonlySet<string>.has()
- embed-migrations.ts: JSON.parse as Journal → Zod schema 运行时校验,JSON.parse 显式 unknown
- interceptors.ts: 唯一保留的跨包断言(ORPC→Zod)注释扩写为完整背景
- router.tsx: satisfies 非 cast,保留
biome.json 增配 noExplicitAny / noTsIgnore / noNonNullAssertion,防止后续漂移。
|
2026-04-25 14:23:08 +08:00 |
|
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
|
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
|
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
|
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
|
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
|
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
|
77b3484415
|
refactor: 改用 Nitro 插件实现启动时数据库迁移
|
2026-04-02 03:42:45 +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
|
c67e773086
|
refactor: 抽取 UI 组件、改进错误页面、统一导入路径并简化数据库接口
|
2026-04-02 00:13:43 +08:00 |
|
imbytecat
|
cd7b65fda4
|
refactor: flatten monorepo into standalone project
|
2026-04-01 19:43:21 +08:00 |
|
imbytecat
|
a6125718f5
|
refactor: 重构演示应用目录结构与配置文件路径
- 重命名构建配置文件至指定应用目录
- 重命名 drizzle.config.ts 文件至 apps/demo-app/ 目录下
- 添加演示应用的完整包配置,包含构建、开发、数据库管理及依赖项,支持 Tauri 桌面应用开发。
- 重命名 robots.txt 文件至 demo-app 应用目录下
- 重命名 src-tauri/.gitignore 文件为 apps/demo-app/src-tauri/.gitignore
- 重命名 AGENTS.md 文件至指定目录路径
- 重命名构建脚本文件以匹配新项目路径结构
- 重命名默认能力配置文件以匹配新项目路径
- 重命名 Cargo.lock 文件以匹配新的项目路径结构
- 重命名 Cargo.toml 文件以正确反映其在项目中的路径位置
- 重命名图标文件以正确匹配新项目路径
- 重命名128x128.png图标文件至demo-app应用目录下
- 重命名图标文件以正确匹配新项目路径
- 重命名图标文件以匹配新项目路径
- 重命名图标文件以正确匹配新项目路径
- 重命名图标文件以匹配新项目路径
- 重命名图标文件以正确反映其在项目中的路径位置
- 重命名图标文件以匹配新项目路径结构
- 重命名图标文件以正确匹配新项目路径
- 重命名图标文件以正确匹配新项目路径
- 重命名图标文件以正确匹配新项目路径
- 重命名图标文件以正确匹配新项目路径
- 重命名图标文件以匹配新项目路径结构
- 重命名图标文件以正确放置在演示应用的资源目录中
- 重命名图标文件以正确匹配新项目路径
- 重命名图标文件以正确匹配新项目路径
- 重命名命令模块文件路径以匹配项目结构
- 重命名文件以正确反映其在项目中的位置
- 重命名主程序文件路径以匹配项目结构
- 重命名 sidecar.rs 文件至 demo-app 项目路径下
- 重命名 tauri.conf.json 文件至指定目录路径
- 重命名错误组件文件以正确反映其在项目中的位置
- 重命名文件 NotFount.tsx 到指定目录路径
- 重命名数据库入口文件路径以适应项目结构调整
- 重命名数据 schema 文件路径以匹配项目结构
- 重命名文件以正确反映其在项目中的位置路径
- 重命名环境配置文件以正确反映其在项目中的位置。
- 重命名文件以正确反映其在项目中的路径位置
- 重命名文件以正确反映其在项目中的位置
- 重命名文件以正确反映其在项目中的路径位置
- 重命名文件以正确反映其在项目中的路径位置
- 重命名工具函数文件以正确反映其在项目中的位置
- 重命名客户端文件以正确反映其在项目中的位置
- 重命名文件以正确反映其在项目中的位置
- 重命名文件路径以正确组织项目结构中的契约文件
- 重命名文件路径以正确反映其在项目中的位置
- 重命名文件以正确反映其在项目中的位置
- 重命名数据库中间件文件以正确反映其在项目中的位置
- 重命名中间件文件路径以匹配项目结构
- 重命名路由文件以正确反映其在项目中的位置
- 重命名文件以正确反映其在项目中的位置。
- 重命名类型文件以正确反映其在项目中的路径位置
- 重命名路由配置文件以匹配项目目录结构
- 重命名根路由文件以正确反映其在项目中的位置
- 重命名RPC路由文件至demo-app应用目录下
- 重命名路由文件路径以匹配项目结构调整
- 重命名路由树生成文件至 demo-app 应用目录下
- 重命名样式文件以正确反映其在项目中的位置
- 添加 TypeScript 配置以扩展 React 项目模板并设置路径别名。
- 重命名 vite.config.ts 文件至 apps/demo-app/ 目录下
- 移除 biome.json 中对 routeTree.gen.ts 文件的排除规则
- 更新依赖版本以统一使用 catalog 依赖管理,提升项目依赖一致性并升级关键包至最新稳定版本。
- 配置安装时的公共提升模式,包含类型包和特定命名空间的包。
- 删除空的 drizzle 目录占位文件
- 将 node 版本更新为最新版本,同时将 bun 和 rust 版本设置为最新。
- 将项目名称更新为 monorepo 并重构脚本与依赖配置以支持工作区结构和统一的 turbo 管理。
- 添加基础 TypeScript 配置文件,启用严格模式并配置模块解析与编译选项以支持现代 JavaScript 特性。
- 添加 Bun 专用的 TypeScript 配置,继承基础配置并引入 Bun 类型定义。
- 添加 tsconfig 包的配置文件并定义基础、Bun 和 React 的配置导出,同时引入 Bun 类型定义作为开发依赖。
- 添加React项目专用的TypeScript配置,指定JSX处理方式并扩展基础配置。
- 删除旧的 TypeScript 配置文件以移除过时的编译选项和路径别名设置。
|
2026-01-21 14:31:12 +08:00 |
|
imbytecat
|
72c566b721
|
feat: 添加 Tauri 桌面应用支持并设置窗口标题
- 添加 Tauri API 依赖包以支持桌面应用功能
- 添加 Tauri 应用 API 依赖以支持本地应用功能。
- 启用本地与远程访问权限并添加窗口标题设置权限
- 在 Tauri 应用中动态设置窗口标题为“待办事项”
|
2026-01-18 16:18:17 +08:00 |
|
imbytecat
|
7f27221081
|
feat: 替换首页为完整待办事项应用并清理废弃路由
- 将首页替换为功能完整的待办事项应用,支持添加、标记完成、删除任务及进度统计,并优化了UI交互与视觉反馈。
- 删除待办事项功能页面及其相关逻辑实现
- 移除已废弃的 todos 路由相关配置及引用,保持路由树结构与实际路由文件一致。
|
2026-01-18 16:02:04 +08:00 |
|
imbytecat
|
7152ee9347
|
feat: 在Todos路由中添加数据加载器
- 在Todos路由中添加加载器,确保在页面渲染前预先获取待办事项数据。
|
2026-01-18 05:18:24 +08:00 |
|
imbytecat
|
09870c86f5
|
refactor: 移除 todos 路由预加载逻辑以优化性能
- 移除 todos 路由的预加载逻辑以优化性能和简化代码
|
2026-01-18 05:08:35 +08:00 |
|
imbytecat
|
2cadbb96f7
|
refactor: 重构待办事项合约导入与导出方式
- 更新导入方式,将 todoContract 的导入改为命名空间导入并直接引用整个模块。
- 重构待办事项合约,将各操作方法从对象结构中提取为独立导出的常量。
|
2026-01-18 05:00:13 +08:00 |
|
imbytecat
|
8a109f9fa2
|
refactor: 更新事件处理函数类型定义
- 更新事件处理函数类型以使用更精确的类型定义,提升代码可读性和类型安全性。
|
2026-01-18 04:53:41 +08:00 |
|
imbytecat
|
d3dbfd9e9b
|
refactor: 移除未使用的列表查询状态初始化代码
- 移除未使用的列表查询状态初始化代码
|
2026-01-18 04:30:03 +08:00 |
|
imbytecat
|
c7be8bd358
|
refactor: 移除操作后刷新逻辑,依赖客户端状态同步
- 为 todo 相关的创建、更新和删除操作配置默认的 onSuccess 回调,以自动失效列表查询缓存。
- 移除所有操作后的刷新查询逻辑,依赖客户端状态自动同步更新。
|
2026-01-18 04:21:57 +08:00 |
|
imbytecat
|
5c55644c57
|
refactor: 移除 TanStack Query 上下文初始化逻辑
- 删除 TanStack Query 上下文的初始化逻辑
- 移除对 context 模块的导出,仅保留对 devtools 模块的导出。
- 移除对旧查询上下文的依赖,直接创建并注入新的 QueryClient 实例到路由上下文中,并更新 SSR 集成配置以使用新实例。
|
2026-01-18 04:07:53 +08:00 |
|
imbytecat
|
effb7f16c7
|
feat: 增强路由类型安全与数据预加载
- 为路由器上下文添加类型约束以确保类型安全
- 在根路由中添加查询客户端上下文类型并使用带上下文的根路由创建函数
- 启用加载器以预先获取待办事项列表数据
|
2026-01-18 04:04:52 +08:00 |
|
imbytecat
|
7af770adef
|
feat: 添加自定义错误和404页面组件
- 添加错误组件以显示未处理的错误信息
- 将NotFound组件重命名为NotFoundComponent并更新显示文本为404 - Not Found。
- 使用自定义错误和未找到页面组件替换默认的错误和404提示。
|
2026-01-18 04:00:08 +08:00 |
|
imbytecat
|
08adadcfea
|
refactor: 重构Todo合约验证模式,分离插入与更新校验逻辑
- 重构Todo合约验证模式,分离插入和更新数据的校验Schema,并移除不必要的字段。
|
2026-01-18 03:45:13 +08:00 |
|
imbytecat
|
6092d82f34
|
refactor: 重构ORPC模块结构与路由实现
- 更新导入路径以正确引用合约文件并重构导出结构。
- 使用 os 实例替换手动实现的 ORPC 处理函数,统一通过生成的合约接口调用并集成数据库中间件。
- 使用服务器实例的路由功能替换原有的路由定义。
- 添加ORPC服务器实现,基于合约定义并指定空上下文类型。
- 修正导入路径,将 './contracts' 更新为 './contract' 以匹配实际文件路径。
|
2026-01-18 03:44:07 +08:00 |
|
imbytecat
|
ae36575256
|
refactor: 重构RPC合约与客户端类型体系
- 更新客户端类型引用,将APIClient替换为RouterClient以保持类型一致性。
- 删除旧的 RPC 合约定义文件,移除过时的类型和验证逻辑。
- 添加合约入口文件并导出待办事项合约
- 添加待办事项合约,定义列表、创建、更新和删除操作的输入输出验证规则。
- 更新 todo 处理程序以使用统一的合约导入并简化导入路径。
- 调整导出内容,仅导出客户端的orpc函数和类型模块。
- 使用合约类型替换原有路由客户端类型,并引入合约输入输出的类型推断。
|
2026-01-18 03:37:51 +08:00 |
|
imbytecat
|
1d8479c063
|
refactor: 统一客户端类型定义并增强类型一致性
- 更新客户端类型以使用定义的 APIClient 类型并确保类型一致性
- 添加类型定义以导出基于路由配置的客户端类型。
|
2026-01-18 03:26:26 +08:00 |
|
imbytecat
|
debb47a60e
|
refactor: 简化客户端创建逻辑并明确泛型类型
- 更新客户端创建逻辑,明确指定泛型类型并简化导出方式。
|
2026-01-18 03:22:23 +08:00 |
|
imbytecat
|
f0ae8196cd
|
feat: 使用 zod 合约实现类型安全的 todo 服务
- 添加 @orpc/contract 依赖以支持合约定义和类型安全。
- 添加 @orpc/contract 依赖以支持契约定义和类型安全。
- 更新客户端类型定义并移除冗余的 APIRouterClient 引入,确保客户端实例类型与路由定义一致。
- 添加基于 zod 的类型安全接口定义,包含待办事项的增删改查操作契约及对应的输入输出验证规则。
- 使用合约定义重构 Todo 处理函数,统一接口输入输出验证并移除冗余的 Zod 模式定义。
- 更新导出模块,将路由功能改为导出合约定义。
- 移除未使用的导入和类型定义,精简路由配置文件。
|
2026-01-18 03:20:05 +08:00 |
|
imbytecat
|
26c50acdf6
|
fix: 更新数据库中间件导入路径
- 更新数据库中间件导入路径以正确引用模块。
|
2026-01-18 03:06:32 +08:00 |
|
imbytecat
|
f38867c548
|
refactor: 重构数据库实例管理,支持按需创建与上下文注入
- 移除默认导出的 db 实例,改为按需创建数据库实例
- 使用数据库中间件提供上下文中的数据库实例,统一通过上下文获取数据库连接并执行操作。
- 添加数据库中间件以在请求上下文中注入数据库实例,支持服务器端全局缓存和无服务器环境下的每次新建实例。
- 导出中间件模块中的数据库相关功能。
|
2026-01-18 03:03:28 +08:00 |
|
imbytecat
|
daaa220a47
|
refactor: 统一HTTP方法处理为ANY并集中响应
- 将所有HTTP方法处理统一为ANY方法,直接在单个处理器中处理所有请求并返回响应或404错误。
|
2026-01-18 02:57:33 +08:00 |
|
imbytecat
|
89b94a9926
|
refactor: 更新客户端与路由类型命名以保持一致性
- 更新客户端类型引用,将 RouterClient 替换为 APIRouterClient 以匹配路由定义的最新命名。
- 更新类型导出名称以使用更清晰的命名并移除冗余的别名。
|
2026-01-18 02:30:23 +08:00 |
|