@fuaran-ui/ops

中文文档
0.33.5发布于 2026/11/15Apache-2.0TypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 2008

Canonical-JSON codec(编码器+结构解码器)和树-op 应用引擎用于 Fuaran UI 线型格式——一个相容的TypeScript主机,语言中性合同用fuaran-dotnet/docs/WIRE FORMAT.md,对照工作区w进行字节校验

中文使用文档
文档目录8 节
  1. 这是什么
  2. API 密码
  3. 三个模块
  4. DecodeError 代码(WIRE FORMAT.md §6)
  5. 安置助手
  6. 存储形状去除
  7. 遵义是稳定契约
  8. 许可证

@fuaran-ui/ops (英语)

Canonical-JSON 编码器(编码器+结构解码器)和树-op应用引擎用于 fuaran UI 线条格式——符合性 类型脚本主机 会 议 日 程 和 议 程 语言中性合同 fuaran-dotnet/docs/WIRE_FORMAT.md,兄弟关系 F#主持人. 建于打入的形状 @fuaran-ui/schema (同龄人依赖).

npm install @fuaran-ui/ops @fuaran-ui/schema

这是什么

这个 正确性 typeScript 参考执行的层. @fuaran-ui/schema 给您打入的树; 此软件包将生成 TS 授权树 符合电线的 —— 说 它可以被序列化,坚持,重放,并与F#级交换 字节取出. 对照工作空间验证端到端 wire-format-fixtures/ 实体:每个有效的固定 与 F# 编码器同为圆形字节, 每个拒绝的固定面 同样的 DecodeErrorCode 在同一个JSON路径.

API 密码

import { encodeNode, decodeNode, encodeOp, decodeOp, apply } from '@fuaran-ui/ops';
import type { TreeOp, DecodeError, ApplyError } from '@fuaran-ui/ops';

// Encode (typed tree → canonical JSON string)
const json: string = encodeNode(node);

// Decode (canonical JSON string → storage-shape Node<unknown> | DecodeError)
const decoded = decodeNode(json); // Result<Node<unknown>, DecodeError>
if (decoded.ok) {
  /* decoded.value : Node<unknown> */
}

// TreeOp codec
const opJson = encodeOp(op);
const op = decodeOp(opJson); // Result<TreeOp<unknown>, DecodeError>

// Apply a tree-op (→ new tree + telemetry | ApplyError)
const result = apply(tree, op); // ApplyResult<TMsg>
if (result.ok) {
  /* result.value.newTree, result.value.emittedTelemetry */
}

三个模块

模块作用
encodeF 对称端口# CanonicalJson 编码器。 决定性,字节稳定输出.
decodeF号港# JsonDecode 解码器。 结构, Result- 返回,六个错误代码.
applyF#应用引擎端口. 原子( E)Batch),还原-误入,发出遥测.

DecodeError 代码(WIRE FORMAT.md §6)

INVALID_JSON, (中文(简体) ), MISSING_FIELD, (中文(简体) ), WRONG_TYPE, (中文(简体) ), UNKNOWN_DU_CASE, (中文(简体) ), WRONG_NODE_KIND, (中文(简体) ), EMPTY_NODE_ID - 与F#解码器代码的字节相同,浮出水面 $- 固执 虚道.

安置助手

placeOp 编号 : moveOp 编号 : nudgeOp 编号 : canPlace (加上克隆动词) duplicateOp 编号 : pasteOp 联合国 …With 采用可注射的变体 fresh-id strategy)获得一个节点的操作 立场 —— 说 首先,最后,在某名兄弟之前或之后——从无姿势行动 词汇.

import { placeOp, moveOp, nudgeOp, canPlace, apply } from '@fuaran-ui/ops';

// Insert `child` immediately before sibling "b" under parent "left".
const r = placeOp(tree, child, {
  parentId: 'left',
  placement: { kind: 'Before', anchor: 'b' },
}); // Result<TreeOp, PlaceError>
if (r.ok) apply(tree, r.value);

这些帮助者只释放已存在的 TreeOp 形状 - 一个赤裸的 InsertChild 编号 : MoveNode 当附加已生成通缉令时, 否则 Batch [InsertChild|MoveNode, ReorderChildren],以及 ReorderChildren 一个人 给一块石头。 没有新的行动 无线格式变化任意 他们发出编码,解码, 并完全应用 就像一个消费者组装 是手写的 预检查镜像应用引擎自身的拒绝( 缺席 或 无子父母,自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出自出 帮助者拒绝和申请拒绝总是同意的;不是其中的锚 拒绝目的地儿童入境(UnknownAnchor而不是沉默无声 附录。 克隆动词重映相撞 在整个横行中 插入前表面, 因此重复或粘贴从不遍及全树 重复编号检查 .

存储形状去除

解码是 存储形状已去除: 总是产量 Node<unknown> 编号 : TreeOp<unknown>, (中文(简体) ), 因为电线没有打字'Msg 资料 'Msg 有效载荷及每个 关闭编码为 "<closure>" {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}请看 不透明 Binding.Static 有效载荷 编码器无法解码为字串 "<opaque>"。两个占位符 重新编码到同一哨点, 所以圆通会保持字节平稳; 键入重接 清除的有效载荷是宿主的责任.

遵义是稳定契约

按线条格式 前置对接规则 (单位:千美元)WIRE_FORMAT.md 第11节页:1 NodeKind 编号 : Spec 编号 : TreeOp 编号 : Binding 编号 : Action 案例更新 F# 编码器 + 解码器 + 程序 财务报告和审定财务报表 此 TS 编码 + @fuaran-ui/schema 同样的承诺。 字节平等反对 合同并非只是API不中断.

许可证

阿帕奇2.0 (英语). 见 STABILITY.md 实现地表稳定 声明.

版本与发布记录

@fuaran-ui/ops 共发布 28 个版本,首次发布于 2026/07/25;过去 12 个月发布了 28 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.33.5latest2026/11/15今天
0.33.42026/11/142 天前
0.33.32026/11/133 天前
0.33.22026/11/123 天前
0.33.12026/11/114 天前
0.33.02026/11/114 天前

关于 @fuaran-ui/ops 的常见问题

@fuaran-ui/ops 是什么?

Canonical-JSON codec(编码器+结构解码器)和树-op 应用引擎用于 Fuaran UI 线型格式——一个相容的TypeScript主机,语言中性合同用fuaran-dotnet/docs/WIRE FORMAT.md,对照工作区w进行字节校验

如何安装 @fuaran-ui/ops?

在项目目录运行 npm install @fuaran-ui/ops,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@fuaran-ui/schema(^0.28.1)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@fuaran-ui/ops 支持 TypeScript 吗?

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

@fuaran-ui/ops 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@fuaran-ui/ops 可以商用吗?

@fuaran-ui/ops 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@fuaran-ui/ops 的下载量有多少?

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

@fuaran-ui/ops 还在维护吗?

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