@textbus/collaborate 5.3.2 → 5.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base/collaborate.d.ts +5 -1
- package/dist/index.esm.js +56 -6
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +55 -5
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -72,9 +72,13 @@ export declare class Collaborate {
|
|
|
72
72
|
private sharedModelForArraySlot;
|
|
73
73
|
/**
|
|
74
74
|
* 在可观察数组中插入稀疏空洞(与 YArray 中 XmlElement 占位对齐)。
|
|
75
|
-
*
|
|
75
|
+
* 仅在远端同步路径调用;先改 raw,再用与 {@link ArrayProxyHandler} `length` 增长一致的原子命令
|
|
76
|
+
* `retain` + `insert`(`undefined` 槽)记录,`unApply` 为 `retain` + `delete`。
|
|
77
|
+
* `runLocalUpdate` 在 `updateFromRemote` 为 true 时会跳过,不会把洞再写回 Y。
|
|
76
78
|
*/
|
|
77
79
|
private insertSparseHole;
|
|
80
|
+
/** 与 Y 洞位对齐的稀疏洞写入,仅操作 raw */
|
|
81
|
+
private applySparseHoleToRaw;
|
|
78
82
|
/**
|
|
79
83
|
* 双向同步数组
|
|
80
84
|
* @param sharedArray
|
package/dist/index.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Injectable, Inject, Optional } from '@viewfly/core';
|
|
2
|
-
import { makeError, Slot, ChangeOrigin, observe,
|
|
2
|
+
import { makeError, Slot, ChangeOrigin, observe, AsyncSlot, AsyncComponent, Component, toRaw, getObserver, attachModel, valueToJSON, Scheduler, Registry, Selection, HISTORY_STACK_SIZE, RootComponentRef, History } from '@textbus/core';
|
|
3
3
|
import { Subject, map, filter, Subscription } from '@tanbo/stream';
|
|
4
4
|
import { Doc, createAbsolutePositionFromRelativePosition, createRelativePositionFromTypeIndex, Map, Array as Array$1, Text, XmlElement, UndoManager } from 'yjs';
|
|
5
5
|
import { HocuspocusProvider } from '@hocuspocus/provider';
|
|
@@ -731,11 +731,10 @@ var Collaborate = /*#__PURE__*/ function() {
|
|
|
731
731
|
key: "createSharedArrayByLocalArray",
|
|
732
732
|
value: function createSharedArrayByLocalArray(localArray) {
|
|
733
733
|
var sharedArray = new Array$1();
|
|
734
|
-
var
|
|
735
|
-
|
|
736
|
-
if (i in raw) {
|
|
734
|
+
for(var i = 0; i < localArray.length; i++){
|
|
735
|
+
if (i in localArray) {
|
|
737
736
|
sharedArray.push([
|
|
738
|
-
this.sharedModelForArraySlot(
|
|
737
|
+
this.sharedModelForArraySlot(localArray[i])
|
|
739
738
|
]);
|
|
740
739
|
} else {
|
|
741
740
|
sharedArray.push([
|
|
@@ -1070,9 +1069,60 @@ var Collaborate = /*#__PURE__*/ function() {
|
|
|
1070
1069
|
key: "insertSparseHole",
|
|
1071
1070
|
value: /**
|
|
1072
1071
|
* 在可观察数组中插入稀疏空洞(与 YArray 中 XmlElement 占位对齐)。
|
|
1073
|
-
*
|
|
1072
|
+
* 仅在远端同步路径调用;先改 raw,再用与 {@link ArrayProxyHandler} `length` 增长一致的原子命令
|
|
1073
|
+
* `retain` + `insert`(`undefined` 槽)记录,`unApply` 为 `retain` + `delete`。
|
|
1074
|
+
* `runLocalUpdate` 在 `updateFromRemote` 为 true 时会跳过,不会把洞再写回 Y。
|
|
1074
1075
|
*/ function insertSparseHole(localArray, atIndex) {
|
|
1075
1076
|
var raw = toRaw(localArray);
|
|
1077
|
+
var oldLen = raw.length;
|
|
1078
|
+
this.applySparseHoleToRaw(raw, atIndex);
|
|
1079
|
+
var holeCount = atIndex >= oldLen ? atIndex + 1 - oldLen : 1;
|
|
1080
|
+
var newTail = [];
|
|
1081
|
+
if (atIndex >= oldLen) {
|
|
1082
|
+
for(var i = oldLen; i < oldLen + holeCount; i++){
|
|
1083
|
+
newTail.push(raw[i]);
|
|
1084
|
+
}
|
|
1085
|
+
} else {
|
|
1086
|
+
newTail.push(undefined);
|
|
1087
|
+
}
|
|
1088
|
+
var changeMarker = localArray.__changeMarker__;
|
|
1089
|
+
changeMarker.beforeChange();
|
|
1090
|
+
var parentModel = getObserver(raw);
|
|
1091
|
+
var subModels = newTail.map(function(item) {
|
|
1092
|
+
var m = observe(item);
|
|
1093
|
+
attachModel(parentModel, m);
|
|
1094
|
+
return m;
|
|
1095
|
+
});
|
|
1096
|
+
var retainOffset = atIndex >= oldLen ? oldLen : atIndex;
|
|
1097
|
+
changeMarker.markAsDirtied({
|
|
1098
|
+
paths: [],
|
|
1099
|
+
apply: [
|
|
1100
|
+
{
|
|
1101
|
+
type: 'retain',
|
|
1102
|
+
offset: retainOffset
|
|
1103
|
+
},
|
|
1104
|
+
{
|
|
1105
|
+
type: 'insert',
|
|
1106
|
+
data: valueToJSON(newTail),
|
|
1107
|
+
ref: subModels
|
|
1108
|
+
}
|
|
1109
|
+
],
|
|
1110
|
+
unApply: [
|
|
1111
|
+
{
|
|
1112
|
+
type: 'retain',
|
|
1113
|
+
offset: retainOffset
|
|
1114
|
+
},
|
|
1115
|
+
{
|
|
1116
|
+
type: 'delete',
|
|
1117
|
+
count: holeCount
|
|
1118
|
+
}
|
|
1119
|
+
]
|
|
1120
|
+
});
|
|
1121
|
+
}
|
|
1122
|
+
},
|
|
1123
|
+
{
|
|
1124
|
+
key: "applySparseHoleToRaw",
|
|
1125
|
+
value: /** 与 Y 洞位对齐的稀疏洞写入,仅操作 raw */ function applySparseHoleToRaw(raw, atIndex) {
|
|
1076
1126
|
var len = raw.length;
|
|
1077
1127
|
if (atIndex >= len) {
|
|
1078
1128
|
raw.length = atIndex + 1;
|