@canshift/core

中文文档
13.11.1发布于 2026/10/22UNLICENSEDTypeScriptES Module构建来源已验证近 30 天下载 2276

CANShift 共享配置域类型、 设置和验证

中文使用文档
文档目录11 节
  1. 目的
  2. 文件夹结构
  3. 公共 API
  4. Schema 版本和迁移
  5. 形状变化(从1.24.0层)
  6. 验证
  7. 固件同步要求
  8. 正在安装的项目
  9. 构建测试( T)
  10. 公约和规则
  11. 连接到其他项目

移动核心

canshift-core ——CANShift生态系统纯TypeScript合同层.

📖 文档 - 配置合同和电线 协议版本规则.


目的

canshift-core 为:

  • 配置类型 —— 说 DashboardConfig, (中文(简体) ), Widget 歧视工会, PageConfig, (中文(简体) ), TopBarConfig, (中文(简体) ), ButtonAction, (中文(简体) ), DeviceConfig, (中文(简体) ), SignalConfig, (中文(简体) ), InputBindingsConfig
  • 验证 对仪表板、信号和设备配置进行运行时间检查
  • Schema 迁移 ——将更老的配置带往前的版本链 CURRENT_SCHEMA_VERSION
  • 设计符号和部件测量标准( W) —— 说 DARK_TOKENS 调色板+ tokensToCssVars 由Tuner公司消费canshift-tuner/生成 src/styles/tokens.generated.css),加 (中文(简体) ) widget-metrics.ts (由固件渲染器镜像的共用测量表/标签/相向光几何)和 theme-presets.ts (8个内置短线主题)
  • 线格式计划 —— 说 DeviceConfigWireSchema, (中文(简体) ), InputBindingsConfigWireSchema, (中文(简体) ), TrackTelemetrySchema, (中文(简体) ), ScreenSettingsSchema, ECU 配置文件, 硬件配置文件

它纯为TypeScript,有Node.js,浏览器,或React Introduct API. 现在 它被消耗 canshift-tuner 财务报告和审定财务报表 canshift-mobile. 运输形态 居住类型 canshift-tuner/src/transport/ 所以核心可以留下来 浏览器/节点中和 .

没错 没有 包含:

  • 固件 C++ 代码( 运行于 canshift-firmware/(中文(简体) )
  • UI 组件( 运行于 canshift-tuner/src/(中文(简体) )
  • 节点或反应原生特定 API

文件夹结构

canshift-core/
└── src/
    ├── index.ts              # Package root — re-exports every entry plus the config contract
    ├── entries/              # One file per subpath export, re-exports only
    ├── schemas/              # Zod schemas — dashboard, widgets, signals, device, wire payloads
    ├── migrations/           # Shape-change steps from MIGRATION_FLOOR_VERSION to CURRENT_SCHEMA_VERSION
    ├── validation/           # validateDashboard
    ├── wire/                 # TELE, ALERT and CAN monitor binary frames, device commands, JSON envelope parsing
    ├── track/                # Lap crossing detection, start/finish line
    ├── widget-metrics/       # Dash geometry and colours the firmware renderer mirrors
    ├── design-tokens/        # Tuner CSS tokens
    ├── controls/             # Button control vocabulary
    ├── ecu-profiles/         # Built-in ECU signal catalogues, OBD-II PIDs and DTCs
    ├── can-xml/              # CAN XML import
    ├── board-profile/        # Board profile blob format
    ├── constants/            # FIRMWARE_CAPS, STRING_CAPS, dash signals
    ├── display-tiers.ts      # Read by the firmware parity script — do not move
    ├── layout-grid.ts        # Read by the firmware parity script — do not move
    ├── schema-version.ts     # Read by the firmware build — do not move
    └── __tests__/

constants/firmware-caps.ts, (中文(简体) ), display-tiers.ts, (中文(简体) ), layout-grid.ts 财务报告和审定财务报表 schema-version.ts 是用一个兄弟的软件来解析的 退出,所以这些路径及其文字布局是合同的一部分.


公共 API

根出出口携带着所有消费进口品. 子路径带一片 一个没有树震的捆绑者只负载模块 切片后面:

导入它所持有的
@canshift/core下方的一切,加上仪表板配置合同,验证,迁移
@canshift/core/wireTELE, ALERT 和 CAN 监视帧, 设备命令, 状态 / USB / 计时器有效载荷解析器
@canshift/core/track拉普过道探测器、起跑/终点线、轨迹遥测计划
@canshift/core/widget-metricsDash 几何、重度、传感器范围和危险波段、转向灯段
@canshift/core/tokensTener 设计符及其 CSS 变量
@canshift/core/ecu-profilesECU目录, MaxxECU 单元, OBD- II 模式 01 PID 和 DTC 解码
@canshift/core/schema-versionCURRENT_SCHEMA_VERSION

出口没有取消消费进口,以后没有保留. Widget 是一个 工会歧视 type: 缩小 widget.type 缩进 widget.config, (中文(简体) ), 财务报告和审定财务报表 WidgetOfType<'gauge'> 一个成员的名字.


Schema 版本和迁移

每个配置文件都包含 "version" 字段的根 :

{ "version": "1.41.0", ... }

CURRENT_SCHEMA_VERSION (单位:千美元)src/schema-version.ts)是这个代码读取和写入的版本. 其分解如下:

  • 大师 ——突破计划变化,需要迁移
  • 毛里塔尼亚 ——添加剂变化,后相兼容
  • 帕齐 - 只修改文件或评论

在装入配置时,消费者必须:

  1. 读取 version
  2. 若为 version === CURRENT_SCHEMA_VERSION * 正常装载
  3. 若为 version < CURRENT_SCHEMA_VERSION 运行 migrateConfig(config, CURRENT_SCHEMA_VERSION); 比 MIGRATION_FLOOR_VERSION (1.24.0) 丢出一个 below_floor MigrationError
  4. 若为 version > CURRENT_SCHEMA_VERSION 请用户更新应用程序

登记处持有 只更改形状。只添加可选字段凸起的发布 CURRENT_SCHEMA_VERSION 且不需要输入 : migrateConfig 运行文件版本与目标之间的每一步顺序,然后设定目标版本. 超过1.24.0的配置不再装入(#151).

形状变化(从1.24.0层)

步骤变动
1.2.4.0 − 1.2.5.0转换为12列网格跨度的像素布局,取自目标屏幕配置
1.2.6.0 — 1.27.0 (中文(简体) )顶级部件 type 已调整为 config.type
1.2.8. − 1.29.0 (中文(简体) )遗留旗上方栏移入音轨栏
1.29.0 − 1.30.0 (中文(简体) )高盖 arcFillStyle 空出- 光谱限制填充
1.30.0 — 1.31.0 (中文(简体) )扣子图标字段被剥除——破折号上没有图标
1.36.0 − 1.37.0 (简体中文)主题相配 theme.day 编号 : theme.night
1.39.0 — 1.40.0 (中文(简体) )高盖 alertThreshold 扔了,它没有武器
1.42.0 — 1.43.0 (中文(简体) )criticalAlert 成为单条目列表 criticalAlerts
1.43.0 — 1.44.0 (中文(简体) )字符串切入固件缓冲器(上条文本/格式 15, ids 31), zOrder 夹住

migrateConfig 在任何迁移运行前(# 282) 深切入输入, 所以单个迁移可以自由突变, 而不用化名调用对象 .


验证

验证是 佐德后卫 (Zod为: canshift-core唯一的运行时间 (b) 依赖性。 每个验证符返回 :

{ valid: boolean; errors: string[]; warnings: string[]; config?: T }

config 只在成功分支上出现,并且经过验证 DashboardConfig (或等值)随时可以消费.

validateDashboard 涵盖:

  • 布局界限对齐 CANVAS 财务报告和审定财务报表 TOPBAR_HEIGHT
  • 十六进制颜色 HexColorSchema
  • 信号目录引用( 每个绑定的信号都存在)
  • 复制部件标识
  • 固件盖从 FIRMWARE_CAPS (每页最大部件,最大页等)
  • 歧视 WidgetConfig.type 详尽无遗

维特套接字套接字行为与捆绑 dashboard.json fixture (# 287) 所以当形状变化在没有对齐迁移的情况下被引入时立即回归表面.


固件同步要求

config_types.h 内 canshift-firmware/src/config/ 在 C++ 中镜像这些 TypeScript 类型. 更改时 DashboardConfig, (中文(简体) ), PageConfig, (中文(简体) ), WidgetConfig,或 SignalDef数字 :

  1. 在此更新类型脚本类型
  2. 弹出 CURRENT_SCHEMA_VERSION 如果改变并非纯粹是添加剂
  3. 在 migrations/migration-runner.ts 和相应的测试
  4. 更新 config_types.h 在坚固的软件中匹配
  5. 更新 config_loader.cpp 在读取新字段的固件中

在运行时检测到固件和核心之间的 Schema 错配 stale 固件与更新的配置对齐, 记录一个明显的错误而不是 默读字节(# 259) 。 坚固的器皿 不运行迁移 链式 ——只有图纳人向前迁移配置. 问题1019(A-COMPAT-1) 跟踪将拒绝不匹配的推进的固件侧前飞行 而不是无声地侮辱.


正在安装的项目

从 npm 安装 :

npm install @canshift/core

地方发展与未公布的变化: npm link 或暂时的 file: 取消——从未承诺.


构建测试( T)

npm run build         # tsc → dist/
npm run lint          # eslint src
npm run format:check  # prettier --check src/**/*.ts
npm test              # Vitest

下方的维特套房 src/__tests__/ 涵盖迁移,仪表板验证(完整和端到端),信号验证,设备验证,并捆绑固定.


公约和规则

  • 纯类型脚本 ——无节点,浏览器,或反应原生API
  • 严格打字 没有 any缩; 窄 unknown 使用前带有类型守护符
  • 仅公布条目 - 消费者从 @canshift/core 或其子路径出口; dist/ 未导出路径
  • 弹出 CURRENT_SCHEMA_VERSION 任何时候 DashboardConfig 形状变化,并在同一 PR 中进行对齐迁移
  • 歧视工会 —— 说 WidgetConfig 用途 type 作为歧视者; 新的部件类型扩展联盟和验证者的详尽切换
  • 镜像 C++ - 这里的每一个变化都必须在固件中反映出来 config_types.h

连接到其他项目

  • 移动调试器 配置符; 导入类型、 验证符、 迁移、 部件度量器、 主题预设、 设计符
  • 移动软件 —— 说 config_types.h 在 C++ 中镜像这些类型; 加载器读取相同的 JSON 形状,而渲染器镜像 widget-metrics.ts 编号 : theme-presets.ts 常数
  • 移动式 ——当需要配置或遥测类型(BLE status schema,屏幕设置边框,设计符号)时,直接消耗同一包

版本与发布记录

@canshift/core 共发布 63 个版本,首次发布于 2026/08/03;过去 12 个月发布了 63 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
13.11.1latest2026/10/2218 天前
13.11.02026/10/2119 天前
13.10.02026/10/2119 天前
13.9.02026/10/2119 天前
13.8.02026/10/2119 天前
13.7.02026/10/2119 天前

关于 @canshift/core 的常见问题

@canshift/core 是什么?

CANShift 共享配置域类型、 设置和验证

如何安装 @canshift/core?

在项目目录运行 npm install @canshift/core,或使用 pnpm add / yarn add / bun add。

@canshift/core 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@canshift/core 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@canshift/core 可以商用吗?

@canshift/core 使用 UNLICENSED 许可。作者声明为 UNLICENSED,即不授予公开使用许可(与公共领域的 Unlicense 不同)。使用前需获得作者授权。以上为概括,不构成法律意见,请以许可原文为准。

@canshift/core 的下载量有多少?

根据 npm 官方下载统计,@canshift/core 在 2026/10/09 – 2026/11/07 这 30 天内被下载 2,276 次,日均约 76 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@canshift/core 还在维护吗?

最新版本 13.11.1 发布于 2026/10/22(18 天前);至今共发布 63 个版本,其中过去 12 个月发布了 63 个;首次发布于 2026/08/03。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。