@colyseus/schema 3.0.51 → 3.0.52
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/build/cjs/index.js +47 -45
- package/build/cjs/index.js.map +1 -1
- package/build/esm/index.mjs +47 -45
- package/build/esm/index.mjs.map +1 -1
- package/build/umd/index.js +47 -45
- package/lib/encoder/ChangeTree.d.ts +0 -2
- package/lib/encoder/ChangeTree.js +18 -45
- package/lib/encoder/ChangeTree.js.map +1 -1
- package/lib/encoder/Root.d.ts +4 -2
- package/lib/encoder/Root.js +24 -1
- package/lib/encoder/Root.js.map +1 -1
- package/lib/types/custom/ArraySchema.js +2 -2
- package/lib/types/custom/ArraySchema.js.map +1 -1
- package/lib/types/custom/MapSchema.js +3 -0
- package/lib/types/custom/MapSchema.js.map +1 -1
- package/package.json +1 -1
- package/src/encoder/ChangeTree.ts +20 -50
- package/src/encoder/Root.ts +34 -3
- package/src/types/custom/ArraySchema.ts +3 -3
- package/src/types/custom/MapSchema.ts +4 -0
package/src/encoder/Root.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { OPERATION } from "../encoding/spec";
|
|
2
2
|
import { TypeContext } from "../types/TypeContext";
|
|
3
|
-
import { ChangeTree, setOperationAtIndex, ChangeTreeList, createChangeTreeList, ChangeSetName,
|
|
3
|
+
import { ChangeTree, setOperationAtIndex, ChangeTreeList, createChangeTreeList, ChangeSetName, type ChangeTreeNode } from "./ChangeTree";
|
|
4
4
|
|
|
5
5
|
export class Root {
|
|
6
6
|
protected nextUniqueId: number = 0;
|
|
@@ -47,7 +47,7 @@ export class Root {
|
|
|
47
47
|
|
|
48
48
|
this.refCount[changeTree.refId] = (previousRefCount || 0) + 1;
|
|
49
49
|
|
|
50
|
-
// console.log("ADD", { refId: changeTree.refId, refCount: this.refCount[changeTree.refId] });
|
|
50
|
+
// console.log("ADD", { refId: changeTree.refId, ref: changeTree.ref.constructor.name, refCount: this.refCount[changeTree.refId], isNewChangeTree });
|
|
51
51
|
|
|
52
52
|
return isNewChangeTree;
|
|
53
53
|
}
|
|
@@ -55,6 +55,8 @@ export class Root {
|
|
|
55
55
|
remove(changeTree: ChangeTree) {
|
|
56
56
|
const refCount = (this.refCount[changeTree.refId]) - 1;
|
|
57
57
|
|
|
58
|
+
// console.log("REMOVE", { refId: changeTree.refId, ref: changeTree.ref.constructor.name, refCount, needRemove: refCount <= 0 });
|
|
59
|
+
|
|
58
60
|
if (refCount <= 0) {
|
|
59
61
|
//
|
|
60
62
|
// Only remove "root" reference if it's the last reference
|
|
@@ -147,7 +149,36 @@ export class Root {
|
|
|
147
149
|
changeSet.tail = node;
|
|
148
150
|
}
|
|
149
151
|
|
|
150
|
-
|
|
152
|
+
public enqueueChangeTree(
|
|
153
|
+
changeTree: ChangeTree,
|
|
154
|
+
changeSet: 'changes' | 'filteredChanges' | 'allFilteredChanges' | 'allChanges',
|
|
155
|
+
queueRootNode = changeTree[changeSet].queueRootNode
|
|
156
|
+
) {
|
|
157
|
+
// skip
|
|
158
|
+
if (queueRootNode) { return; }
|
|
159
|
+
|
|
160
|
+
// Add to linked list if not already present
|
|
161
|
+
changeTree[changeSet].queueRootNode = this.addToChangeTreeList(this[changeSet], changeTree);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
protected addToChangeTreeList(list: ChangeTreeList, changeTree: ChangeTree): ChangeTreeNode {
|
|
165
|
+
const node: ChangeTreeNode = { changeTree, next: undefined, prev: undefined };
|
|
166
|
+
|
|
167
|
+
if (!list.next) {
|
|
168
|
+
list.next = node;
|
|
169
|
+
list.tail = node;
|
|
170
|
+
} else {
|
|
171
|
+
node.prev = list.tail;
|
|
172
|
+
list.tail!.next = node;
|
|
173
|
+
list.tail = node;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
list.length++;
|
|
177
|
+
|
|
178
|
+
return node;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
public removeChangeFromChangeSet(changeSetName: ChangeSetName, changeTree: ChangeTree) {
|
|
151
182
|
const changeSet = this[changeSetName];
|
|
152
183
|
const node = changeTree[changeSetName].queueRootNode;
|
|
153
184
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { $changes, $childType, $decoder, $deleteByIndex, $onEncodeEnd, $encoder, $filter, $getByIndex, $onDecodeEnd } from "../symbols";
|
|
2
2
|
import type { Schema } from "../../Schema";
|
|
3
|
-
import { ChangeTree,
|
|
3
|
+
import { ChangeTree, setOperationAtIndex } from "../../encoder/ChangeTree";
|
|
4
4
|
import { OPERATION } from "../../encoding/spec";
|
|
5
5
|
import { registerType } from "../registry";
|
|
6
6
|
import { Collection } from "../HelperTypes";
|
|
@@ -482,10 +482,10 @@ export class ArraySchema<V = any> implements Array<V>, Collection<number, V> {
|
|
|
482
482
|
// FIXME: this code block is duplicated on ChangeTree
|
|
483
483
|
//
|
|
484
484
|
if (changeTree.filteredChanges !== undefined) {
|
|
485
|
-
|
|
485
|
+
changeTree.root?.enqueueChangeTree(changeTree, 'filteredChanges');
|
|
486
486
|
|
|
487
487
|
} else {
|
|
488
|
-
|
|
488
|
+
changeTree.root?.enqueueChangeTree(changeTree, 'changes');
|
|
489
489
|
}
|
|
490
490
|
|
|
491
491
|
return this.items.splice(start, deleteCount, ...insertItems);
|
|
@@ -118,6 +118,10 @@ export class MapSchema<V=any, K extends string = string> implements Map<K, V>, C
|
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
+
if (this.deletedItems[index]) {
|
|
122
|
+
delete this.deletedItems[index];
|
|
123
|
+
}
|
|
124
|
+
|
|
121
125
|
} else {
|
|
122
126
|
index = changeTree.indexes[$numFields] ?? 0;
|
|
123
127
|
operation = OPERATION.ADD;
|