@ fluidframework/ commer- tree (英语)
合并Tree本身不是完整的DDS,而是为DDS提供一个必须维护一个数据的可重复使用的数据结构 协作编辑的项目序列。 合并Tree既用于共享序列,也用于共享Matrix.
见 GitHub 图像 需要更多关于流体框架和内部软件包的细节.
使用 Fluid 框架库
对于依赖流体框架库的公共API,我们建议 ^ (caret)版本范围.
例如,使用 ^1.3.4。 。 。 .
依赖不稳定的API,例如: beta API,我们推荐一个更具限制性的版本范围.
例如,使用一个 ~ 版本范围.
安装
运行此命令以安装软件包 :
npm i @fluidframework/merge-tree
从此软件包导入
此软件包使用 packet.json 导出 通过支持级别将API分离. 有关支助保障的信息改为: API 支持级别。 。 。 .
导入 public API 从 @fluidframework/merge-tree。 。 。 .
导入 legacy API 从 @fluidframework/merge-tree/legacy。 。 。 .
API 文档
读取 @ fluidframework/ commer- tree (英语) API 文档 https://fluidframework.com/docs/apis/commerce-tree 页面存档备份,存于互联网档案馆。 。 。 .
业务
合并公司提供的三个基本业务是:
insert(start, segment)remove(start, end)annotate(start, end, propertySet)
执行情况
并列Trees 代表一个序列作为命令的片段列表. 每一段包含一个或多个连续值 顺序 例如,一个共享字符串包含字符段:
["The cat"], [" sat on the mat."]
为生成本地客户端所理解的当前序列而拖动所有段.
"The cat sat on the mat."
(注意 " 合并特雷 " 所载项目如何分成几个部分是 " 合并特雷 " 实施细节和 " 合并特雷 " ) 随时间变化。 )
当地业务
要处理插入和去除等操作, 将序列中的位置映射到包含的片段 并抵消部分内的职位。 合并Tree的实施使用 B+Tree 来加速 绘制图,以了解合并的语义 比较容易考虑一个天真的执行,搜索 包含的(部分,相抵)按顺序排列。 此天真搜索减去每个搜索的长度 直至到达包含剩余冲抵部分.
position 10 -> { segment: [" sat on the mat."], offset: 2 }
最初只考虑本地编辑操作, 插入并删除工作, 插入新片段或 gemstoning 已删除。 墓碑片段保留了在序列中的位置,但在行走时长度为零 树.
当插入/删除发生在一个现有段内所包含位置时,原来的段是"分". 在插入时,新插入的部分被插入到正文的两半之间. 涉及 拆去,拆去的部分 细分部分是墓碑.
insert(12, "quietly") -> ["The cat"], [" sat "], ["quietly "], ["on the mat."]
remove(19, 30) -> ["The cat"], [" sat "], ["quietly"], [del: " "], [del: "on the mat"], ["."]
远程操作
为了支持从远程客户端合并编辑操作,我们需要扩展我们的原始搜索功能
(position) -> (segment, offset) 用于核算远程客户端合并的状态
远程客户端在它的并购Tree上进行了操作.
从概念上讲,这是通过以下列方式调整我们对(部分,抵消)的天真线性搜索来实现的:
- 插入“ 之后” 的部件会跳过远程客户端的操作( 即长度为 0 )
- 墓碑上刻有远程客户端操作的"后"字段,但插入了"前"字段 (即墓葬前有原有长度. )
...“ 之后” 表示远程客户端的 并购 尚未应用插入和/ 或操作 墓碑为段.
为了让客户能够说明哪些部分的插入/搬出其他客户已处理过 合并特雷我们做两件事:
- 客户端插入/删除每个段的并列轨迹以及Fluid服务分配给它的序列号(缩写"seq") 插入/搬运操作.
- 当发送一个并列Tree op时,客户端包括它从 Fluid 服务处理过的后几个后缀#. 这个号码 被称为 op's "RefSeq#"的参考序列号或"refSeq#"
“ 客户端” 和“ refSeq” 成为我们搜索功能的新参数 :
(client, refSeq, position) -> (segment, offset)
在客户端发送操作时远程客户端上插入并/或移除了一段, 如果其中任一:
- 引用的序列号大于或等于操作的服务器指定序列号 插入/删除了部分.
- 客户发送了导致插入/搬运的操作. (在这种情况下,客户尚未收到) 他们从服务器上排序的操作,但由于客户端在本地生产,所以知道插入/移除。 )
如果以上两种条件都是虚假的,那么插入/去除发生在远程操作的"后",以及 因此,在搜索过程中应忽略.
请注意,目前尚未由流体服务进行排序的任何当地应用业务,都不得而知 远程客户端,在处理远程操作时应当被忽略.
客户最低要求
Fluid框架客户端库支持此文档中的平台. 这些要求有意具有限制性. 在一个主要的版本系列中,我们可以放松这些要求,但我们不能使其更严格. 对于长期支持(LTS)版本,我们可能需要支持这些平台几年.
其他配置可以奏效,但Fluid框架不支持. 如果一个不支持的配置停止工作, 我们不会将此归类为错误 . 要请求支持未列出的配置, 请存档 . 产品组会评估你的要求. 在此问题上,请具体说明配置的现状:
- 配置有效但需要官方支持.
- 配置不起作用,需要更改.
支持的运行时间
- Fluid框架支持节点.js版本22和24同时收到 上游支助。 。 。 .
- 流体框架将停止支持第22版 当上游支持于2027-04-30结束时。 。 。 .
- 流体框架不支持节点.js与
--no-experimental-fetch旗帜.
- Fluid框架支持支持ES2022标准库的现代浏览器.
支持的工具
- 类型脚本 6.0数字 :
- 流体框架支持全部
strict选项. - 设定建设目标(
lib, (中文(简体) ),target改为:ES2022或后会. - 启用
strictNullChecks。 。 。 . - 流体框架不支持 在 TypeScript 6.0 中贬值的配置选项。 。 。 .
- 流体框架不完全支持
exactOptionalPropertyTypes。 。 。 . 如果您启用此选项, 请不要使用in, (中文(简体) ),Reflect.has, (中文(简体) ),Object.hasOwn,或Object.prototype.hasOwnProperty改为Fluid框架类型的窄成员. 这些方法可以错误地排除undefined从可能的值.
- 流体框架支持全部
- 网络软件包 页:1
- 我们不需要一个特定的捆绑者. 其他处理ES模块的捆绑机可以工作,但我们只积极测试网页包.
模块分辨率
在类型脚本中 compilerOptions,使用时 Node16, (中文(简体) ), Node20, (中文(简体) ), NodeNext,或 Bundler 模块分辨率.
这些设置遵循 节点.js v12+无害环境管理 分辨率和加载算法。 。 。 .
不使用 Node10 模块分辨率.
模块格式
- ES模块: 使用ES模块来消耗Fluid框架客户端软件包,包括在Node.js中.
- 常见JS : Fluid Framework在3.0版本或后期不正式支持CommonJS.
贡献准则
你们可以 贡献 通过这些方式实现流体框架:
详细指示改为: repo 文档。 。 。 .
本项目遵循 Microsoft 开源行为守则。 。 。 . 更多信息,改为: 《行为守则》经常被问到的问题。 。 。 . 问题或评论,联系 打开码@ microsoft.com。 。 。 .
这个项目可能包含微软项目的商标或标志,产品,或服务. 这些商标或标志的使用必须遵循微软 商标和品牌准则。 。 。 . 在这个项目的修改后版本中使用微软商标或标志不得造成混淆或暗示微软赞助.
帮助
读取 流体框架文件 用于了解流体框架概念和API.
要求提供文件未载列的资料, 创建问题。 。 。 .
商标
这个项目可能包含微软项目的商标或标志,产品,或服务.
这些商标或标志的使用必须遵循微软的 商标和品牌准则。 。 。 .
在这个项目的修改后版本中使用微软商标或标志不得造成混淆或暗示微软赞助.