|
|
ed56a209ea
|
chore(格式): Prettier 统一到全仓,后端和契约一次性格式化
Deploy / deploy (push) Has been cancelled
原来只有 `apps/web` 在 Prettier 下(配置在 `apps/web/.prettierrc.toml`、脚本在
web 的 package.json),后端和契约从来没格式化过 —— 手写在 100 列上下,`db/schema.ts`
还是 drizzle-kit pull 留下的 tab 缩进。两套口径分叉久了,跨端改一处就得记着「这边
什么风格」。
- 配置搬到根目录 `.prettierrc.toml`,内容不变(`semi=false`,其余全默认,
printWidth 80 —— 和前端已有的格式一致,不另立一套宽度);
- 脚本统一成根目录 `bun run fmt`,覆盖 `apps/*/src`、`apps/web/tests` 和两个构建
配置;web 自己那份 `fmt` 和重复的 prettier 依赖删掉;
- `.prettierignore` 挡掉两类不该碰的:drizzle-kit 生成的 `src/db/meta/` 结构快照
(它是 db:generate 的比对输入,只该由 drizzle-kit 写)、unplugin 每次 dev 都会
重写的 `auto-imports.d.ts` / `components.d.ts`;
- 全量跑了一遍。纯格式,无行为改动:api typecheck / check:routes / check:ast、
前端 type-check 全过,起 api 打了接口确认正常。前端这 39 个文件的小改动是
prettier 版本漂移(类型断言的换行口径变了),不是新配置带来的。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-09-16 08:27:34 -06:00 |
|
|
|
4abaf9c7e4
|
fix(collab): 动态 import 竞态、切走页面的语义、演示模式的身份错位
- collabDoc.start 要 await 六个动态 import,房间可能在这期间就关了(机房首次
加载 y* 那几个 chunk 正是最慢的时候)。stop() 先跑完面对的是 doc === null,
什么也拆不到;import 回来之后 start 的后半段照样建文档、装 binaryHandler、
挂 yCollab、发 SyncStep1——给一个不存在的房间。加会话代号,过期就整个放弃。
- SyncCodeEditor 卸载(切走题目页、把语言切成流程图)原来只是悄悄 stop(),
房间和 active 都还留着,老师那边模态框照开、字照敲,一个也到不了;watch
没有 immediate,学生切回来也不会重建。改成明确 leave() 结束协作。
另外 @ready 也作为起点之一:学生排队时切走、老师这期间接了单,切回来能接上。
- 演示模式下 isTeacherOrAbove 被强制 false,服务端却按库里的 adminType 照样
把他算作在线老师:学生因此拿到 pending 而不是 no_teacher,排队等一个顶栏里
根本没有求助列表的人;他自己看到的求助按钮点下去,服务端回「教师不能发起求助」。
两头都不对,索性对演示模式整个关掉这个功能。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016DHxhKNxXfG89JnVzHbvgj
|
2026-08-30 09:38:04 -06:00 |
|
|
|
86857dedf0
|
feat(web): 协作编辑走 collab 通道
Yjs sync/awareness 协议直接跑在 /ws/collab 上,服务端哑转发。
内容源是学生:学生端先把编辑器内容写进 ytext 再挂 yCollab,
教师端 seedContent 恒为 null —— 这条根治了老实现里谁的代码活下来看运气的问题。
订正 brief 里的一处疏漏:SyncCodeEditor.vue 挂在每个用户的题目页上,教师也不例外
(ProblemEditor.vue 只按语言是不是 Flowchart 分支,不看角色)。教师接单同样会让
collabStore.room 非空,若不按角色收窄,教师自己停在某道题页面上接单时,这个组件
会把教师自己的编辑器内容当成种子插入文档,还会跟 CollabModal 抢
setBinaryHandler 这个单例槽位。改为 `room && !collabStore.isTeacher` 才起协作,
教师端的协作只归 CollabModal 管。
另外两处修正:
- editorView 用 shallowRef 而非 ref —— CodeMirror 的 EditorView 是带 getter 的类
实例,ref() 的深度 UnwrapRef 会把它拆成丢了原型方法的假类型,vue-tsc 报错。
- Header.vue 挂 CollabModal 放进根 n-flex 内部而不是同级 —— 组件一旦变成多根
fragment,default.vue 里 `<Header class="header" />` 的 class 就没有单一根节点
可以落地,header 行会丢掉居中样式(实测触发了 Vue 的
Extraneous non-props attributes 警告)。n-modal 默认 teleport 到 body,塞在
这里不影响其实际渲染位置。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K1d8B3f4SXJwDvUY625eQd
|
2026-08-28 07:43:08 -06:00 |
|