Skip to content

工具函数叶模块群

系统概览

@/core/utils 神桶已被拆分为多个具体叶模块。ADR-191 去桶化后,每个工具函数按职责归入零依赖或应用层叶模块,避免整桶 ESM 求值拉起整套应用层依赖链导致的 vitest worker 挂死问题。

核心职责

模块职责依赖级别
format.tsformatTimeformatError 文本格式化零依赖
math-geometry.tsdist2d/dist3d/degToRad/radToDeg 纯数学零依赖
collections.tsensureArrayfilterKeysCacheallSettledFilter零依赖
escape-html.tsescapeHtml HTML 转义零依赖
json-stringify.tsjsonStringifyjsonParse 安全 JSON零依赖
uuid.tsgenerateUuid UUID v4零依赖
image.tscanvasToBase64 Canvas 编码零依赖(仅 HTMLCanvasElement)
auto-save.tssetTriggerAutoSave/triggerAutoSave应用层叶(不依赖具体保存实现)
ui-card.tscardContainer UI 卡片容器应用层叶(依赖 dom)
ui-loading.tswithLoadingIndicator 加载指示器应用层叶(依赖 dom/i18n)
status-helpers.tstryCatchStatus/withLoadingStatus/withLoadingStatusTargeted 状态栏错误包装与加载态包装应用层叶(依赖 status-bar)
core/library-path.tscomputeLibraryRef/resolveLibraryRef/CATEGORY_DIR/getBrowseDir应用层叶(依赖 libraryRoot)

对外 API(节选)

  • formatTime(seconds) — 秒数 → "mm:ss.cs" 格式。
  • formatError(err, maxLen) — 错误对象 → 简短可读字符串。
  • escapeHtml(s) — HTML 特殊字符转义。
  • jsonStringify(x) / jsonParse<T>(s) — 安全 JSON,异常时返回 null。
  • triggerAutoSave() — 触发自动保存。
  • withLoadingIndicator(key, fn) — 带加载提示的异步包装。
  • computeLibraryRef(filePath) — 计算模型在库中的相对引用。

与其他子系统关系

  • core/config.ts 作为 barrel 聚合导出部分叶模块,供仍通过 @/core/config 消费的代码兼容使用。
  • menus/ 直接引用 core/library-path.tscore/auto-save.tscore/ui-loading.ts 等具体叶模块。
  • scene/ 直接引用 core/async.tscore/auto-save.tscore/format.tscore/uuid.tscore/image.ts 等。

不变量

  • 零依赖叶模块禁止 import 应用层/场景层/菜单层模块。
  • 应用层叶模块允许依赖 core/domcore/i18ncore/status-bar 等通用基础设施,但禁止反向依赖 scene/*menus/*
  • 所有叶模块均可独立单元测试,不会触发整桶依赖求值。