@fluidframework/map 0.52.0-44610 → 0.53.0
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/directory.d.ts.map +1 -1
- package/dist/directory.js +40 -41
- package/dist/directory.js.map +1 -1
- package/dist/interfaces.d.ts +4 -5
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/map.js +2 -2
- package/dist/map.js.map +1 -1
- package/dist/mapKernel.d.ts +1 -2
- package/dist/mapKernel.d.ts.map +1 -1
- package/dist/mapKernel.js +17 -17
- package/dist/mapKernel.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/lib/directory.d.ts.map +1 -1
- package/lib/directory.js +40 -41
- package/lib/directory.js.map +1 -1
- package/lib/interfaces.d.ts +4 -5
- package/lib/interfaces.d.ts.map +1 -1
- package/lib/interfaces.js.map +1 -1
- package/lib/map.js +2 -2
- package/lib/map.js.map +1 -1
- package/lib/mapKernel.d.ts +1 -2
- package/lib/mapKernel.d.ts.map +1 -1
- package/lib/mapKernel.js +17 -17
- package/lib/mapKernel.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.d.ts.map +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/package.json +10 -10
- package/src/directory.ts +32 -43
- package/src/interfaces.ts +0 -5
- package/src/map.ts +2 -2
- package/src/mapKernel.ts +15 -20
- package/src/packageVersion.ts +1 -1
package/src/directory.ts
CHANGED
|
@@ -52,14 +52,12 @@ interface IDirectoryMessageHandler {
|
|
|
52
52
|
* Apply the given operation.
|
|
53
53
|
* @param op - The directory operation to apply
|
|
54
54
|
* @param local - Whether the message originated from the local client
|
|
55
|
-
* @param message - The full message
|
|
56
55
|
* @param localOpMetadata - For local client messages, this is the metadata that was submitted with the message.
|
|
57
56
|
* For messages from a remote client, this will be undefined.
|
|
58
57
|
*/
|
|
59
58
|
process(
|
|
60
59
|
op: IDirectoryOperation,
|
|
61
60
|
local: boolean,
|
|
62
|
-
message: ISequencedDocumentMessage,
|
|
63
61
|
localOpMetadata: unknown,
|
|
64
62
|
): void;
|
|
65
63
|
|
|
@@ -687,7 +685,7 @@ export class SharedDirectory extends SharedObject<ISharedDirectoryEvents> implem
|
|
|
687
685
|
const op: IDirectoryOperation = message.contents as IDirectoryOperation;
|
|
688
686
|
const handler = this.messageHandlers.get(op.type);
|
|
689
687
|
assert(handler !== undefined, 0x00e /* `Missing message handler for message type: ${message.type}` */);
|
|
690
|
-
handler.process(op, local,
|
|
688
|
+
handler.process(op, local, localOpMetadata);
|
|
691
689
|
}
|
|
692
690
|
}
|
|
693
691
|
|
|
@@ -728,10 +726,10 @@ export class SharedDirectory extends SharedObject<ISharedDirectoryEvents> implem
|
|
|
728
726
|
this.messageHandlers.set(
|
|
729
727
|
"clear",
|
|
730
728
|
{
|
|
731
|
-
process: (op: IDirectoryClearOperation, local,
|
|
729
|
+
process: (op: IDirectoryClearOperation, local, localOpMetadata) => {
|
|
732
730
|
const subdir = this.getWorkingDirectory(op.path) as SubDirectory | undefined;
|
|
733
731
|
if (subdir) {
|
|
734
|
-
subdir.processClearMessage(op, local,
|
|
732
|
+
subdir.processClearMessage(op, local, localOpMetadata);
|
|
735
733
|
}
|
|
736
734
|
},
|
|
737
735
|
submit: (op: IDirectoryClearOperation, localOpMetadata: unknown) => {
|
|
@@ -746,10 +744,10 @@ export class SharedDirectory extends SharedObject<ISharedDirectoryEvents> implem
|
|
|
746
744
|
this.messageHandlers.set(
|
|
747
745
|
"delete",
|
|
748
746
|
{
|
|
749
|
-
process: (op: IDirectoryDeleteOperation, local,
|
|
747
|
+
process: (op: IDirectoryDeleteOperation, local, localOpMetadata) => {
|
|
750
748
|
const subdir = this.getWorkingDirectory(op.path) as SubDirectory | undefined;
|
|
751
749
|
if (subdir) {
|
|
752
|
-
subdir.processDeleteMessage(op, local,
|
|
750
|
+
subdir.processDeleteMessage(op, local, localOpMetadata);
|
|
753
751
|
}
|
|
754
752
|
},
|
|
755
753
|
submit: (op: IDirectoryDeleteOperation, localOpMetadata: unknown) => {
|
|
@@ -764,11 +762,11 @@ export class SharedDirectory extends SharedObject<ISharedDirectoryEvents> implem
|
|
|
764
762
|
this.messageHandlers.set(
|
|
765
763
|
"set",
|
|
766
764
|
{
|
|
767
|
-
process: (op: IDirectorySetOperation, local,
|
|
765
|
+
process: (op: IDirectorySetOperation, local, localOpMetadata) => {
|
|
768
766
|
const subdir = this.getWorkingDirectory(op.path) as SubDirectory | undefined;
|
|
769
767
|
if (subdir) {
|
|
770
768
|
const context = local ? undefined : this.makeLocal(op.key, op.path, op.value);
|
|
771
|
-
subdir.processSetMessage(op, context, local,
|
|
769
|
+
subdir.processSetMessage(op, context, local, localOpMetadata);
|
|
772
770
|
}
|
|
773
771
|
},
|
|
774
772
|
submit: (op: IDirectorySetOperation, localOpMetadata: unknown) => {
|
|
@@ -784,10 +782,10 @@ export class SharedDirectory extends SharedObject<ISharedDirectoryEvents> implem
|
|
|
784
782
|
this.messageHandlers.set(
|
|
785
783
|
"createSubDirectory",
|
|
786
784
|
{
|
|
787
|
-
process: (op: IDirectoryCreateSubDirectoryOperation, local,
|
|
785
|
+
process: (op: IDirectoryCreateSubDirectoryOperation, local, localOpMetadata) => {
|
|
788
786
|
const parentSubdir = this.getWorkingDirectory(op.path) as SubDirectory | undefined;
|
|
789
787
|
if (parentSubdir) {
|
|
790
|
-
parentSubdir.processCreateSubDirectoryMessage(op, local,
|
|
788
|
+
parentSubdir.processCreateSubDirectoryMessage(op, local, localOpMetadata);
|
|
791
789
|
}
|
|
792
790
|
},
|
|
793
791
|
submit: (op: IDirectoryCreateSubDirectoryOperation, localOpMetadata: unknown) => {
|
|
@@ -803,10 +801,10 @@ export class SharedDirectory extends SharedObject<ISharedDirectoryEvents> implem
|
|
|
803
801
|
this.messageHandlers.set(
|
|
804
802
|
"deleteSubDirectory",
|
|
805
803
|
{
|
|
806
|
-
process: (op: IDirectoryDeleteSubDirectoryOperation, local,
|
|
804
|
+
process: (op: IDirectoryDeleteSubDirectoryOperation, local, localOpMetadata) => {
|
|
807
805
|
const parentSubdir = this.getWorkingDirectory(op.path) as SubDirectory | undefined;
|
|
808
806
|
if (parentSubdir) {
|
|
809
|
-
parentSubdir.processDeleteSubDirectoryMessage(op, local,
|
|
807
|
+
parentSubdir.processDeleteSubDirectoryMessage(op, local, localOpMetadata);
|
|
810
808
|
}
|
|
811
809
|
},
|
|
812
810
|
submit: (op: IDirectoryDeleteSubDirectoryOperation, localOpMetadata: unknown) => {
|
|
@@ -946,7 +944,6 @@ class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implements IDirec
|
|
|
946
944
|
key,
|
|
947
945
|
localValue,
|
|
948
946
|
true,
|
|
949
|
-
null,
|
|
950
947
|
);
|
|
951
948
|
|
|
952
949
|
// If we are not attached, don't submit the op.
|
|
@@ -978,7 +975,7 @@ class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implements IDirec
|
|
|
978
975
|
}
|
|
979
976
|
|
|
980
977
|
// Create the sub directory locally first.
|
|
981
|
-
this.createSubDirectoryCore(subdirName, true
|
|
978
|
+
this.createSubDirectoryCore(subdirName, true);
|
|
982
979
|
|
|
983
980
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
984
981
|
const subDir: IDirectory = this._subdirectories.get(subdirName)!;
|
|
@@ -1017,7 +1014,7 @@ class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implements IDirec
|
|
|
1017
1014
|
*/
|
|
1018
1015
|
public deleteSubDirectory(subdirName: string): boolean {
|
|
1019
1016
|
// Delete the sub directory locally first.
|
|
1020
|
-
const successfullyRemoved = this.deleteSubDirectoryCore(subdirName, true
|
|
1017
|
+
const successfullyRemoved = this.deleteSubDirectoryCore(subdirName, true);
|
|
1021
1018
|
|
|
1022
1019
|
// If we are not attached, don't submit the op.
|
|
1023
1020
|
if (!this.directory.isAttached()) {
|
|
@@ -1055,7 +1052,7 @@ class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implements IDirec
|
|
|
1055
1052
|
*/
|
|
1056
1053
|
public delete(key: string): boolean {
|
|
1057
1054
|
// Delete the key locally first.
|
|
1058
|
-
const successfullyRemoved = this.deleteCore(key, true
|
|
1055
|
+
const successfullyRemoved = this.deleteCore(key, true);
|
|
1059
1056
|
|
|
1060
1057
|
// If we are not attached, don't submit the op.
|
|
1061
1058
|
if (!this.directory.isAttached()) {
|
|
@@ -1077,7 +1074,7 @@ class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implements IDirec
|
|
|
1077
1074
|
*/
|
|
1078
1075
|
public clear(): void {
|
|
1079
1076
|
// Clear the data locally first.
|
|
1080
|
-
this.clearCore(true
|
|
1077
|
+
this.clearCore(true);
|
|
1081
1078
|
|
|
1082
1079
|
// If we are not attached, don't submit the op.
|
|
1083
1080
|
if (!this.directory.isAttached()) {
|
|
@@ -1182,7 +1179,6 @@ class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implements IDirec
|
|
|
1182
1179
|
public processClearMessage(
|
|
1183
1180
|
op: IDirectoryClearOperation,
|
|
1184
1181
|
local: boolean,
|
|
1185
|
-
message: ISequencedDocumentMessage,
|
|
1186
1182
|
localOpMetadata: unknown,
|
|
1187
1183
|
): void {
|
|
1188
1184
|
if (local) {
|
|
@@ -1195,7 +1191,7 @@ class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implements IDirec
|
|
|
1195
1191
|
return;
|
|
1196
1192
|
}
|
|
1197
1193
|
this.clearExceptPendingKeys();
|
|
1198
|
-
this.directory.emit("clear", local,
|
|
1194
|
+
this.directory.emit("clear", local, this.directory);
|
|
1199
1195
|
}
|
|
1200
1196
|
|
|
1201
1197
|
/**
|
|
@@ -1210,13 +1206,12 @@ class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implements IDirec
|
|
|
1210
1206
|
public processDeleteMessage(
|
|
1211
1207
|
op: IDirectoryDeleteOperation,
|
|
1212
1208
|
local: boolean,
|
|
1213
|
-
message: ISequencedDocumentMessage,
|
|
1214
1209
|
localOpMetadata: unknown,
|
|
1215
1210
|
): void {
|
|
1216
|
-
if (!this.needProcessStorageOperation(op, local,
|
|
1211
|
+
if (!this.needProcessStorageOperation(op, local, localOpMetadata)) {
|
|
1217
1212
|
return;
|
|
1218
1213
|
}
|
|
1219
|
-
this.deleteCore(op.key, local
|
|
1214
|
+
this.deleteCore(op.key, local);
|
|
1220
1215
|
}
|
|
1221
1216
|
|
|
1222
1217
|
/**
|
|
@@ -1232,10 +1227,9 @@ class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implements IDirec
|
|
|
1232
1227
|
op: IDirectorySetOperation,
|
|
1233
1228
|
context: ILocalValue | undefined,
|
|
1234
1229
|
local: boolean,
|
|
1235
|
-
message: ISequencedDocumentMessage,
|
|
1236
1230
|
localOpMetadata: unknown,
|
|
1237
1231
|
): void {
|
|
1238
|
-
if (!this.needProcessStorageOperation(op, local,
|
|
1232
|
+
if (!this.needProcessStorageOperation(op, local, localOpMetadata)) {
|
|
1239
1233
|
return;
|
|
1240
1234
|
}
|
|
1241
1235
|
|
|
@@ -1243,7 +1237,7 @@ class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implements IDirec
|
|
|
1243
1237
|
// so we can assume context is not undefined
|
|
1244
1238
|
|
|
1245
1239
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
1246
|
-
this.setCore(op.key, context!, local
|
|
1240
|
+
this.setCore(op.key, context!, local);
|
|
1247
1241
|
}
|
|
1248
1242
|
|
|
1249
1243
|
/**
|
|
@@ -1258,13 +1252,12 @@ class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implements IDirec
|
|
|
1258
1252
|
public processCreateSubDirectoryMessage(
|
|
1259
1253
|
op: IDirectoryCreateSubDirectoryOperation,
|
|
1260
1254
|
local: boolean,
|
|
1261
|
-
message: ISequencedDocumentMessage,
|
|
1262
1255
|
localOpMetadata: unknown,
|
|
1263
1256
|
): void {
|
|
1264
|
-
if (!this.needProcessSubDirectoryOperations(op, local,
|
|
1257
|
+
if (!this.needProcessSubDirectoryOperations(op, local, localOpMetadata)) {
|
|
1265
1258
|
return;
|
|
1266
1259
|
}
|
|
1267
|
-
this.createSubDirectoryCore(op.subdirName, local
|
|
1260
|
+
this.createSubDirectoryCore(op.subdirName, local);
|
|
1268
1261
|
}
|
|
1269
1262
|
|
|
1270
1263
|
/**
|
|
@@ -1279,13 +1272,12 @@ class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implements IDirec
|
|
|
1279
1272
|
public processDeleteSubDirectoryMessage(
|
|
1280
1273
|
op: IDirectoryDeleteSubDirectoryOperation,
|
|
1281
1274
|
local: boolean,
|
|
1282
|
-
message: ISequencedDocumentMessage,
|
|
1283
1275
|
localOpMetadata: unknown,
|
|
1284
1276
|
): void {
|
|
1285
|
-
if (!this.needProcessSubDirectoryOperations(op, local,
|
|
1277
|
+
if (!this.needProcessSubDirectoryOperations(op, local, localOpMetadata)) {
|
|
1286
1278
|
return;
|
|
1287
1279
|
}
|
|
1288
|
-
this.deleteSubDirectoryCore(op.subdirName, local
|
|
1280
|
+
this.deleteSubDirectoryCore(op.subdirName, local);
|
|
1289
1281
|
}
|
|
1290
1282
|
|
|
1291
1283
|
/**
|
|
@@ -1388,7 +1380,6 @@ class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implements IDirec
|
|
|
1388
1380
|
private needProcessStorageOperation(
|
|
1389
1381
|
op: IDirectoryKeyOperation,
|
|
1390
1382
|
local: boolean,
|
|
1391
|
-
message: ISequencedDocumentMessage,
|
|
1392
1383
|
localOpMetadata: unknown,
|
|
1393
1384
|
): boolean {
|
|
1394
1385
|
if (this.pendingClearMessageId !== -1) {
|
|
@@ -1432,7 +1423,6 @@ class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implements IDirec
|
|
|
1432
1423
|
private needProcessSubDirectoryOperations(
|
|
1433
1424
|
op: IDirectorySubDirectoryOperation,
|
|
1434
1425
|
local: boolean,
|
|
1435
|
-
message: ISequencedDocumentMessage,
|
|
1436
1426
|
localOpMetadata: unknown,
|
|
1437
1427
|
): boolean {
|
|
1438
1428
|
if (this.pendingSubDirectories.has(op.subdirName)) {
|
|
@@ -1473,9 +1463,9 @@ class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implements IDirec
|
|
|
1473
1463
|
* @param local - Whether the message originated from the local client
|
|
1474
1464
|
* @param op - The message if from a remote clear, or null if from a local clear
|
|
1475
1465
|
*/
|
|
1476
|
-
private clearCore(local: boolean
|
|
1466
|
+
private clearCore(local: boolean) {
|
|
1477
1467
|
this._storage.clear();
|
|
1478
|
-
this.directory.emit("clear", local,
|
|
1468
|
+
this.directory.emit("clear", local, this.directory);
|
|
1479
1469
|
}
|
|
1480
1470
|
|
|
1481
1471
|
/**
|
|
@@ -1485,12 +1475,12 @@ class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implements IDirec
|
|
|
1485
1475
|
* @param op - The message if from a remote delete, or null if from a local delete
|
|
1486
1476
|
* @returns True if the key existed and was deleted, false if it did not exist
|
|
1487
1477
|
*/
|
|
1488
|
-
private deleteCore(key: string, local: boolean
|
|
1478
|
+
private deleteCore(key: string, local: boolean) {
|
|
1489
1479
|
const previousValue = this.get(key);
|
|
1490
1480
|
const successfullyRemoved = this._storage.delete(key);
|
|
1491
1481
|
if (successfullyRemoved) {
|
|
1492
1482
|
const event: IDirectoryValueChanged = { key, path: this.absolutePath, previousValue };
|
|
1493
|
-
this.directory.emit("valueChanged", event, local,
|
|
1483
|
+
this.directory.emit("valueChanged", event, local, this.directory);
|
|
1494
1484
|
const containedEvent: IValueChanged = { key, previousValue };
|
|
1495
1485
|
this.emit("containedValueChanged", containedEvent, local, this);
|
|
1496
1486
|
}
|
|
@@ -1504,11 +1494,11 @@ class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implements IDirec
|
|
|
1504
1494
|
* @param local - Whether the message originated from the local client
|
|
1505
1495
|
* @param op - The message if from a remote set, or null if from a local set
|
|
1506
1496
|
*/
|
|
1507
|
-
private setCore(key: string, value: ILocalValue, local: boolean
|
|
1497
|
+
private setCore(key: string, value: ILocalValue, local: boolean) {
|
|
1508
1498
|
const previousValue = this.get(key);
|
|
1509
1499
|
this._storage.set(key, value);
|
|
1510
1500
|
const event: IDirectoryValueChanged = { key, path: this.absolutePath, previousValue };
|
|
1511
|
-
this.directory.emit("valueChanged", event, local,
|
|
1501
|
+
this.directory.emit("valueChanged", event, local, this.directory);
|
|
1512
1502
|
const containedEvent: IValueChanged = { key, previousValue };
|
|
1513
1503
|
this.emit("containedValueChanged", containedEvent, local, this);
|
|
1514
1504
|
}
|
|
@@ -1517,9 +1507,8 @@ class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implements IDirec
|
|
|
1517
1507
|
* Create subdirectory implementation used for both locally sourced creation as well as incoming remote creation.
|
|
1518
1508
|
* @param subdirName - The name of the subdirectory being created
|
|
1519
1509
|
* @param local - Whether the message originated from the local client
|
|
1520
|
-
* @param op - The message if from a remote create, or null if from a local create
|
|
1521
1510
|
*/
|
|
1522
|
-
private createSubDirectoryCore(subdirName: string, local: boolean
|
|
1511
|
+
private createSubDirectoryCore(subdirName: string, local: boolean) {
|
|
1523
1512
|
if (!this._subdirectories.has(subdirName)) {
|
|
1524
1513
|
this._subdirectories.set(
|
|
1525
1514
|
subdirName,
|
|
@@ -1538,7 +1527,7 @@ class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implements IDirec
|
|
|
1538
1527
|
* @param local - Whether the message originated from the local client
|
|
1539
1528
|
* @param op - The message if from a remote delete, or null if from a local delete
|
|
1540
1529
|
*/
|
|
1541
|
-
private deleteSubDirectoryCore(subdirName: string, local: boolean
|
|
1530
|
+
private deleteSubDirectoryCore(subdirName: string, local: boolean) {
|
|
1542
1531
|
// This should make the subdirectory structure unreachable so it can be GC'd and won't appear in snapshots
|
|
1543
1532
|
// Might want to consider cleaning out the structure more exhaustively though?
|
|
1544
1533
|
return this._subdirectories.delete(subdirName);
|
package/src/interfaces.ts
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
|
|
7
6
|
import { ISharedObject, ISharedObjectEvents } from "@fluidframework/shared-object-base";
|
|
8
7
|
import { IEvent, IEventProvider, IEventThisPlaceHolder } from "@fluidframework/common-definitions";
|
|
9
8
|
|
|
@@ -146,12 +145,10 @@ export interface ISharedDirectoryEvents extends ISharedObjectEvents {
|
|
|
146
145
|
(event: "valueChanged", listener: (
|
|
147
146
|
changed: IDirectoryValueChanged,
|
|
148
147
|
local: boolean,
|
|
149
|
-
op: ISequencedDocumentMessage | null,
|
|
150
148
|
target: IEventThisPlaceHolder,
|
|
151
149
|
) => void);
|
|
152
150
|
(event: "clear", listener: (
|
|
153
151
|
local: boolean,
|
|
154
|
-
op: ISequencedDocumentMessage | null,
|
|
155
152
|
target: IEventThisPlaceHolder,
|
|
156
153
|
) => void);
|
|
157
154
|
}
|
|
@@ -249,11 +246,9 @@ export interface ISharedMapEvents extends ISharedObjectEvents {
|
|
|
249
246
|
(event: "valueChanged", listener: (
|
|
250
247
|
changed: IValueChanged,
|
|
251
248
|
local: boolean,
|
|
252
|
-
op: ISequencedDocumentMessage | null,
|
|
253
249
|
target: IEventThisPlaceHolder) => void);
|
|
254
250
|
(event: "clear", listener: (
|
|
255
251
|
local: boolean,
|
|
256
|
-
op: ISequencedDocumentMessage | null,
|
|
257
252
|
target: IEventThisPlaceHolder
|
|
258
253
|
) => void);
|
|
259
254
|
}
|
package/src/map.ts
CHANGED
|
@@ -364,7 +364,7 @@ export class SharedMap extends SharedObject<ISharedMapEvents> implements IShared
|
|
|
364
364
|
* @internal
|
|
365
365
|
*/
|
|
366
366
|
protected applyStashedOp(content: any): unknown {
|
|
367
|
-
this.kernel.tryProcessMessage(content, false, undefined
|
|
367
|
+
this.kernel.tryProcessMessage(content, false, undefined);
|
|
368
368
|
return this.kernel.tryGetStashedOpLocalMetadata(content);
|
|
369
369
|
}
|
|
370
370
|
|
|
@@ -374,7 +374,7 @@ export class SharedMap extends SharedObject<ISharedMapEvents> implements IShared
|
|
|
374
374
|
*/
|
|
375
375
|
protected processCore(message: ISequencedDocumentMessage, local: boolean, localOpMetadata: unknown) {
|
|
376
376
|
if (message.type === MessageType.Operation) {
|
|
377
|
-
this.kernel.tryProcessMessage(message.contents, local,
|
|
377
|
+
this.kernel.tryProcessMessage(message.contents, local, localOpMetadata);
|
|
378
378
|
}
|
|
379
379
|
}
|
|
380
380
|
|
package/src/mapKernel.ts
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { IFluidHandle, IFluidSerializer } from "@fluidframework/core-interfaces";
|
|
7
|
-
import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
|
|
8
7
|
import { ValueType } from "@fluidframework/shared-object-base";
|
|
9
8
|
import { assert, TypedEventEmitter } from "@fluidframework/common-utils";
|
|
10
9
|
import {
|
|
@@ -27,14 +26,12 @@ interface IMapMessageHandler {
|
|
|
27
26
|
* Apply the given operation.
|
|
28
27
|
* @param op - The map operation to apply
|
|
29
28
|
* @param local - Whether the message originated from the local client
|
|
30
|
-
* @param message - The full message. Not provided for stashed ops.
|
|
31
29
|
* @param localOpMetadata - For local client messages, this is the metadata that was submitted with the message.
|
|
32
30
|
* For messages from a remote client, this will be undefined.
|
|
33
31
|
*/
|
|
34
32
|
process(
|
|
35
33
|
op: IMapOperation,
|
|
36
34
|
local: boolean,
|
|
37
|
-
message: ISequencedDocumentMessage | undefined,
|
|
38
35
|
localOpMetadata: unknown,
|
|
39
36
|
): void;
|
|
40
37
|
|
|
@@ -317,7 +314,6 @@ export class MapKernel {
|
|
|
317
314
|
key,
|
|
318
315
|
localValue,
|
|
319
316
|
true,
|
|
320
|
-
undefined,
|
|
321
317
|
);
|
|
322
318
|
|
|
323
319
|
// If we are not attached, don't submit the op.
|
|
@@ -340,7 +336,7 @@ export class MapKernel {
|
|
|
340
336
|
*/
|
|
341
337
|
public delete(key: string): boolean {
|
|
342
338
|
// Delete the key locally first.
|
|
343
|
-
const successfullyRemoved = this.deleteCore(key, true
|
|
339
|
+
const successfullyRemoved = this.deleteCore(key, true);
|
|
344
340
|
|
|
345
341
|
// If we are not attached, don't submit the op.
|
|
346
342
|
if (!this.isAttached()) {
|
|
@@ -361,7 +357,7 @@ export class MapKernel {
|
|
|
361
357
|
*/
|
|
362
358
|
public clear(): void {
|
|
363
359
|
// Clear the data locally first.
|
|
364
|
-
this.clearCore(true
|
|
360
|
+
this.clearCore(true);
|
|
365
361
|
|
|
366
362
|
// If we are not attached, don't submit the op.
|
|
367
363
|
if (!this.isAttached()) {
|
|
@@ -456,14 +452,13 @@ export class MapKernel {
|
|
|
456
452
|
public tryProcessMessage(
|
|
457
453
|
op: IMapOperation,
|
|
458
454
|
local: boolean,
|
|
459
|
-
message: ISequencedDocumentMessage | undefined,
|
|
460
455
|
localOpMetadata: unknown,
|
|
461
456
|
): boolean {
|
|
462
457
|
if (this.messageHandlers.has(op.type)) {
|
|
463
458
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
464
459
|
this.messageHandlers
|
|
465
460
|
.get(op.type)!
|
|
466
|
-
.process(op, local,
|
|
461
|
+
.process(op, local, localOpMetadata);
|
|
467
462
|
return true;
|
|
468
463
|
}
|
|
469
464
|
return false;
|
|
@@ -476,11 +471,11 @@ export class MapKernel {
|
|
|
476
471
|
* @param local - Whether the message originated from the local client
|
|
477
472
|
* @param op - The message if from a remote set, or null if from a local set
|
|
478
473
|
*/
|
|
479
|
-
private setCore(key: string, value: ILocalValue, local: boolean
|
|
474
|
+
private setCore(key: string, value: ILocalValue, local: boolean): void {
|
|
480
475
|
const previousValue = this.get(key);
|
|
481
476
|
this.data.set(key, value);
|
|
482
477
|
const event: IValueChanged = { key, previousValue };
|
|
483
|
-
this.eventEmitter.emit("valueChanged", event, local,
|
|
478
|
+
this.eventEmitter.emit("valueChanged", event, local, this.eventEmitter);
|
|
484
479
|
}
|
|
485
480
|
|
|
486
481
|
/**
|
|
@@ -488,9 +483,9 @@ export class MapKernel {
|
|
|
488
483
|
* @param local - Whether the message originated from the local client
|
|
489
484
|
* @param op - The message if from a remote clear, or null if from a local clear
|
|
490
485
|
*/
|
|
491
|
-
private clearCore(local: boolean
|
|
486
|
+
private clearCore(local: boolean): void {
|
|
492
487
|
this.data.clear();
|
|
493
|
-
this.eventEmitter.emit("clear", local,
|
|
488
|
+
this.eventEmitter.emit("clear", local, this.eventEmitter);
|
|
494
489
|
}
|
|
495
490
|
|
|
496
491
|
/**
|
|
@@ -500,12 +495,12 @@ export class MapKernel {
|
|
|
500
495
|
* @param op - The message if from a remote delete, or null if from a local delete
|
|
501
496
|
* @returns True if the key existed and was deleted, false if it did not exist
|
|
502
497
|
*/
|
|
503
|
-
private deleteCore(key: string, local: boolean
|
|
498
|
+
private deleteCore(key: string, local: boolean): boolean {
|
|
504
499
|
const previousValue = this.get(key);
|
|
505
500
|
const successfullyRemoved = this.data.delete(key);
|
|
506
501
|
if (successfullyRemoved) {
|
|
507
502
|
const event: IValueChanged = { key, previousValue };
|
|
508
|
-
this.eventEmitter.emit("valueChanged", event, local,
|
|
503
|
+
this.eventEmitter.emit("valueChanged", event, local, this.eventEmitter);
|
|
509
504
|
}
|
|
510
505
|
return successfullyRemoved;
|
|
511
506
|
}
|
|
@@ -597,7 +592,7 @@ export class MapKernel {
|
|
|
597
592
|
messageHandlers.set(
|
|
598
593
|
"clear",
|
|
599
594
|
{
|
|
600
|
-
process: (op: IMapClearOperation, local,
|
|
595
|
+
process: (op: IMapClearOperation, local, localOpMetadata) => {
|
|
601
596
|
if (local) {
|
|
602
597
|
assert(localOpMetadata !== undefined,
|
|
603
598
|
0x015 /* "pendingMessageId is missing from the local client's clear operation" */);
|
|
@@ -611,7 +606,7 @@ export class MapKernel {
|
|
|
611
606
|
this.clearExceptPendingKeys();
|
|
612
607
|
return;
|
|
613
608
|
}
|
|
614
|
-
this.clearCore(local
|
|
609
|
+
this.clearCore(local);
|
|
615
610
|
},
|
|
616
611
|
submit: (op: IMapClearOperation, localOpMetadata: unknown) => {
|
|
617
612
|
// We don't reuse the metadata but send a new one on each submit.
|
|
@@ -625,11 +620,11 @@ export class MapKernel {
|
|
|
625
620
|
messageHandlers.set(
|
|
626
621
|
"delete",
|
|
627
622
|
{
|
|
628
|
-
process: (op: IMapDeleteOperation, local,
|
|
623
|
+
process: (op: IMapDeleteOperation, local, localOpMetadata) => {
|
|
629
624
|
if (!this.needProcessKeyOperation(op, local, localOpMetadata)) {
|
|
630
625
|
return;
|
|
631
626
|
}
|
|
632
|
-
this.deleteCore(op.key, local
|
|
627
|
+
this.deleteCore(op.key, local);
|
|
633
628
|
},
|
|
634
629
|
submit: (op: IMapDeleteOperation, localOpMetadata: unknown) => {
|
|
635
630
|
// We don't reuse the metadata but send a new one on each submit.
|
|
@@ -643,14 +638,14 @@ export class MapKernel {
|
|
|
643
638
|
messageHandlers.set(
|
|
644
639
|
"set",
|
|
645
640
|
{
|
|
646
|
-
process: (op: IMapSetOperation, local,
|
|
641
|
+
process: (op: IMapSetOperation, local, localOpMetadata) => {
|
|
647
642
|
if (!this.needProcessKeyOperation(op, local, localOpMetadata)) {
|
|
648
643
|
return;
|
|
649
644
|
}
|
|
650
645
|
|
|
651
646
|
// needProcessKeyOperation should have returned false if local is true
|
|
652
647
|
const context = this.makeLocal(op.key, op.value);
|
|
653
|
-
this.setCore(op.key, context, local
|
|
648
|
+
this.setCore(op.key, context, local);
|
|
654
649
|
},
|
|
655
650
|
submit: (op: IMapSetOperation, localOpMetadata: unknown) => {
|
|
656
651
|
// We don't reuse the metadata but send a new one on each submit.
|
package/src/packageVersion.ts
CHANGED