| feat: 修复 4 个存量缺陷并新增 9 个 API ## 存量缺陷修复 - 内容中的 %c/%s 未转义:用户数据里的格式符会被浏览器当作格式符解析, 多消耗 CSS 实参导致样式整体错位。新增 escapeFormat 统一转义。 - emoji 取不到:EMOJI_MAP 键名写作 'warning' 而 warning 实际传的 level 是 'warn',导致警告永远无 emoji;group/time/rainbow 复用 'info' 也 取不到各自的专属 emoji。改为按 LogLevel 建表并新增 context 参数。 - history 钉住调用方活引用:直接存原对象时调用方后续修改会反映到历史, 且 200 条缓冲可能长期钉住大对象图。新增 snapshotContent 浅快照。 - table 不走级别过滤也不写历史,与其它日志函数行为不一致。 ## 新增 API - timer(label, fn):try/finally 保证异常路径也结束计时,异常原样抛出不吞 - once / clearOnce:同 key 只打一次,循环内调试不再刷屏 - count / countSummary / clearCounters:调用计数与汇总 - withPrefix(prefix):返回带固定前缀的 logger,沿用级别与主题 - assert(cond, msg):失败时走 console.error 并抛出 - setStyles:可覆盖圆角/内边距/边框/标题色,传 undefined 恢复默认 ## 生产环境剥离 NODE_ENV=production 时全部日志 API 退化为 no-op。用局部 declare 规避 @types/node 依赖(浏览器库不应为一个环境判定引入 Node 全局类型)。 关键契约:no-op 只抑制日志,绝不抑制被包裹的业务逻辑 —— timer 在生产 环境下仍执行 fn 并原样返回结果,否则用户的业务代码会被静默跳过。 验证:新增 24 个用例(RED 23 fail → GREEN 39/39),R15 与生产契约 均经 mutation 测试确认可失败;tsc 干净;parcel build 成功;真实浏览器 控制台实测全部特性生效且零 error/warning。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> | 1 month ago |