@fluidframework/legacy-dds 2.53.0 → 2.60.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/CHANGELOG.md +4 -0
- package/api-report/{legacy-dds.legacy.alpha.api.md → legacy-dds.legacy.beta.api.md} +20 -20
- package/dist/array/interfaces.d.ts +4 -8
- package/dist/array/interfaces.d.ts.map +1 -1
- package/dist/array/interfaces.js.map +1 -1
- package/dist/array/sharedArray.d.ts +8 -0
- package/dist/array/sharedArray.d.ts.map +1 -1
- package/dist/array/sharedArray.js +108 -8
- package/dist/array/sharedArray.js.map +1 -1
- package/dist/array/sharedArrayFactory.d.ts +2 -4
- package/dist/array/sharedArrayFactory.d.ts.map +1 -1
- package/dist/array/sharedArrayFactory.js +2 -4
- package/dist/array/sharedArrayFactory.js.map +1 -1
- package/dist/array/sharedArrayOperations.d.ts +9 -18
- package/dist/array/sharedArrayOperations.d.ts.map +1 -1
- package/dist/array/sharedArrayOperations.js +1 -2
- package/dist/array/sharedArrayOperations.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/signal/interfaces.d.ts +3 -6
- package/dist/signal/interfaces.d.ts.map +1 -1
- package/dist/signal/interfaces.js.map +1 -1
- package/dist/signal/sharedSignal.d.ts.map +1 -1
- package/dist/signal/sharedSignal.js +19 -9
- package/dist/signal/sharedSignal.js.map +1 -1
- package/dist/signal/sharedSignalFactory.d.ts +1 -2
- package/dist/signal/sharedSignalFactory.d.ts.map +1 -1
- package/dist/signal/sharedSignalFactory.js +1 -2
- package/dist/signal/sharedSignalFactory.js.map +1 -1
- package/lib/array/interfaces.d.ts +4 -8
- package/lib/array/interfaces.d.ts.map +1 -1
- package/lib/array/interfaces.js.map +1 -1
- package/lib/array/sharedArray.d.ts +8 -0
- package/lib/array/sharedArray.d.ts.map +1 -1
- package/lib/array/sharedArray.js +108 -8
- package/lib/array/sharedArray.js.map +1 -1
- package/lib/array/sharedArrayFactory.d.ts +2 -4
- package/lib/array/sharedArrayFactory.d.ts.map +1 -1
- package/lib/array/sharedArrayFactory.js +2 -4
- package/lib/array/sharedArrayFactory.js.map +1 -1
- package/lib/array/sharedArrayOperations.d.ts +9 -18
- package/lib/array/sharedArrayOperations.d.ts.map +1 -1
- package/lib/array/sharedArrayOperations.js +1 -2
- package/lib/array/sharedArrayOperations.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/signal/interfaces.d.ts +3 -6
- package/lib/signal/interfaces.d.ts.map +1 -1
- package/lib/signal/interfaces.js.map +1 -1
- package/lib/signal/sharedSignal.d.ts.map +1 -1
- package/lib/signal/sharedSignal.js +11 -1
- package/lib/signal/sharedSignal.js.map +1 -1
- package/lib/signal/sharedSignalFactory.d.ts +1 -2
- package/lib/signal/sharedSignalFactory.d.ts.map +1 -1
- package/lib/signal/sharedSignalFactory.js +1 -2
- package/lib/signal/sharedSignalFactory.js.map +1 -1
- package/package.json +16 -16
- package/src/array/interfaces.ts +4 -8
- package/src/array/sharedArray.ts +120 -10
- package/src/array/sharedArrayFactory.ts +2 -4
- package/src/array/sharedArrayOperations.ts +9 -18
- package/src/packageVersion.ts +1 -1
- package/src/signal/interfaces.ts +3 -6
- package/src/signal/sharedSignal.ts +11 -2
- package/src/signal/sharedSignalFactory.ts +1 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
##
|
|
1
|
+
## Beta API Report File for "@fluidframework/legacy-dds"
|
|
2
2
|
|
|
3
3
|
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
|
|
4
4
|
|
|
5
5
|
```ts
|
|
6
6
|
|
|
7
|
-
// @
|
|
7
|
+
// @beta @legacy (undocumented)
|
|
8
8
|
export interface IDeleteOperation {
|
|
9
9
|
// (undocumented)
|
|
10
10
|
entryId: string;
|
|
@@ -12,7 +12,7 @@ export interface IDeleteOperation {
|
|
|
12
12
|
type: typeof OperationType.deleteEntry;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
// @
|
|
15
|
+
// @beta @legacy (undocumented)
|
|
16
16
|
export interface IInsertOperation<T = unknown> {
|
|
17
17
|
// (undocumented)
|
|
18
18
|
entryId: string;
|
|
@@ -24,7 +24,7 @@ export interface IInsertOperation<T = unknown> {
|
|
|
24
24
|
value: T;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
// @
|
|
27
|
+
// @beta @legacy (undocumented)
|
|
28
28
|
export interface IMoveOperation {
|
|
29
29
|
// (undocumented)
|
|
30
30
|
changedToEntryId: string;
|
|
@@ -36,7 +36,7 @@ export interface IMoveOperation {
|
|
|
36
36
|
type: typeof OperationType.moveEntry;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
// @
|
|
39
|
+
// @beta @legacy (undocumented)
|
|
40
40
|
export interface IRevertible {
|
|
41
41
|
// (undocumented)
|
|
42
42
|
dispose(): void;
|
|
@@ -44,7 +44,7 @@ export interface IRevertible {
|
|
|
44
44
|
revert(): void;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
// @
|
|
47
|
+
// @beta @legacy
|
|
48
48
|
export interface ISharedArray<T extends SerializableTypeForSharedArray> extends ISharedObject<ISharedArrayEvents> {
|
|
49
49
|
// (undocumented)
|
|
50
50
|
delete(index: number): void;
|
|
@@ -62,7 +62,7 @@ export interface ISharedArray<T extends SerializableTypeForSharedArray> extends
|
|
|
62
62
|
toggleMove(oldEntryId: string, newEntryId: string): void;
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
// @
|
|
65
|
+
// @beta @legacy
|
|
66
66
|
export interface ISharedArrayEvents extends ISharedObjectEvents {
|
|
67
67
|
// @eventProperty (undocumented)
|
|
68
68
|
(event: "valueChanged", listener: (op: ISharedArrayOperation, isLocal: boolean, target: IEventThisPlaceHolder) => void): void;
|
|
@@ -70,25 +70,25 @@ export interface ISharedArrayEvents extends ISharedObjectEvents {
|
|
|
70
70
|
(event: "revertible", listener: (revertible: IRevertible) => void): void;
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
// @
|
|
73
|
+
// @beta @legacy (undocumented)
|
|
74
74
|
export type ISharedArrayOperation<T = unknown> = IInsertOperation<T> | IDeleteOperation | IMoveOperation | ISharedArrayRevertibleOperation;
|
|
75
75
|
|
|
76
|
-
// @
|
|
76
|
+
// @beta @legacy (undocumented)
|
|
77
77
|
export type ISharedArrayRevertibleOperation = IToggleOperation | IToggleMoveOperation;
|
|
78
78
|
|
|
79
|
-
// @
|
|
79
|
+
// @beta @legacy (undocumented)
|
|
80
80
|
export interface ISharedSignal<T extends SerializableTypeForSharedSignal = any> extends ISharedObject<ISharedSignalEvents<T>> {
|
|
81
81
|
// (undocumented)
|
|
82
82
|
notify(metadata?: T): void;
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
// @
|
|
85
|
+
// @beta @legacy (undocumented)
|
|
86
86
|
export interface ISharedSignalEvents<T extends SerializableTypeForSharedSignal> extends ISharedObjectEvents {
|
|
87
87
|
// (undocumented)
|
|
88
88
|
(event: "notify", listener: (value: T, isLocal: boolean) => void): any;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
// @
|
|
91
|
+
// @beta @legacy (undocumented)
|
|
92
92
|
export interface IToggleMoveOperation {
|
|
93
93
|
// (undocumented)
|
|
94
94
|
changedToEntryId: string;
|
|
@@ -98,7 +98,7 @@ export interface IToggleMoveOperation {
|
|
|
98
98
|
type: typeof OperationType.toggleMove;
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
// @
|
|
101
|
+
// @beta @legacy (undocumented)
|
|
102
102
|
export interface IToggleOperation {
|
|
103
103
|
// (undocumented)
|
|
104
104
|
entryId: string;
|
|
@@ -108,7 +108,7 @@ export interface IToggleOperation {
|
|
|
108
108
|
type: typeof OperationType.toggle;
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
// @
|
|
111
|
+
// @beta @legacy (undocumented)
|
|
112
112
|
export const OperationType: {
|
|
113
113
|
readonly insertEntry: 0;
|
|
114
114
|
readonly deleteEntry: 1;
|
|
@@ -117,22 +117,22 @@ export const OperationType: {
|
|
|
117
117
|
readonly toggleMove: 4;
|
|
118
118
|
};
|
|
119
119
|
|
|
120
|
-
// @
|
|
120
|
+
// @beta @legacy (undocumented)
|
|
121
121
|
export type OperationType = (typeof OperationType)[keyof typeof OperationType];
|
|
122
122
|
|
|
123
|
-
// @
|
|
123
|
+
// @beta @legacy
|
|
124
124
|
export type SerializableTypeForSharedArray = boolean | number | string | object | IFluidHandle;
|
|
125
125
|
|
|
126
|
-
// @
|
|
126
|
+
// @beta @legacy
|
|
127
127
|
export type SerializableTypeForSharedSignal = boolean | number | string | IFluidHandle | object;
|
|
128
128
|
|
|
129
|
-
// @
|
|
129
|
+
// @beta @legacy
|
|
130
130
|
export const SharedArray: ISharedObjectKind<ISharedArray<SerializableTypeForSharedArray>> & SharedObjectKind<ISharedArray<SerializableTypeForSharedArray>>;
|
|
131
131
|
|
|
132
|
-
// @
|
|
132
|
+
// @beta @legacy
|
|
133
133
|
export const SharedArrayBuilder: <T extends SerializableTypeForSharedArray>() => ISharedObjectKind<ISharedArray<T>> & SharedObjectKind<ISharedArray<T>>;
|
|
134
134
|
|
|
135
|
-
// @
|
|
135
|
+
// @beta @legacy
|
|
136
136
|
export const SharedSignal: ISharedObjectKind<ISharedSignal<any>> & SharedObjectKind<ISharedSignal<any>>;
|
|
137
137
|
|
|
138
138
|
// (No @packageDocumentation comment for this package)
|
|
@@ -11,16 +11,14 @@ import type { ISharedArrayOperation } from "./sharedArrayOperations.js";
|
|
|
11
11
|
* It can be used as a generic constraint (`extends SerializableTypeForSharedArray`) but is
|
|
12
12
|
* *never* meant to be a concrete/real type on its own.
|
|
13
13
|
*
|
|
14
|
-
* @legacy
|
|
15
|
-
* @alpha
|
|
14
|
+
* @legacy @beta
|
|
16
15
|
*/
|
|
17
16
|
export type SerializableTypeForSharedArray = boolean | number | string | object | IFluidHandle;
|
|
18
17
|
/**
|
|
19
18
|
* Interface defining the events that can be emitted by the SharedArray DDS
|
|
20
19
|
* and the events that can be listened to by the SharedArray DDS
|
|
21
20
|
*
|
|
22
|
-
* @legacy
|
|
23
|
-
* @alpha
|
|
21
|
+
* @legacy @beta
|
|
24
22
|
*/
|
|
25
23
|
export interface ISharedArrayEvents extends ISharedObjectEvents {
|
|
26
24
|
/**
|
|
@@ -47,8 +45,7 @@ export interface ISharedArrayEvents extends ISharedObjectEvents {
|
|
|
47
45
|
*
|
|
48
46
|
* @typeParam T - The type of the SharedArray
|
|
49
47
|
*
|
|
50
|
-
* @legacy
|
|
51
|
-
* @alpha
|
|
48
|
+
* @legacy @beta
|
|
52
49
|
*/
|
|
53
50
|
export interface ISharedArray<T extends SerializableTypeForSharedArray> extends ISharedObject<ISharedArrayEvents> {
|
|
54
51
|
get(): readonly T[];
|
|
@@ -132,8 +129,7 @@ export interface SnapshotFormat<T> {
|
|
|
132
129
|
dataArray: T[];
|
|
133
130
|
}
|
|
134
131
|
/**
|
|
135
|
-
* @legacy
|
|
136
|
-
* @alpha
|
|
132
|
+
* @legacy @beta
|
|
137
133
|
*/
|
|
138
134
|
export interface IRevertible {
|
|
139
135
|
revert(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/array/interfaces.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,KAAK,EACX,mBAAmB,EACnB,aAAa,EACb,MAAM,6CAA6C,CAAC;AAErD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/array/interfaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/array/interfaces.ts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { IEventThisPlaceHolder, IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport type { Serializable } from \"@fluidframework/datastore-definitions/internal\";\nimport type {\n\tISharedObjectEvents,\n\tISharedObject,\n} from \"@fluidframework/shared-object-base/internal\";\n\nimport type { ISharedArrayOperation } from \"./sharedArrayOperations.js\";\n/**\n * Basic types for the SharedArray DDS\n * It can be used as a generic constraint (`extends SerializableTypeForSharedArray`) but is\n * *never* meant to be a concrete/real type on its own.\n *\n * @legacy
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/array/interfaces.ts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { IEventThisPlaceHolder, IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport type { Serializable } from \"@fluidframework/datastore-definitions/internal\";\nimport type {\n\tISharedObjectEvents,\n\tISharedObject,\n} from \"@fluidframework/shared-object-base/internal\";\n\nimport type { ISharedArrayOperation } from \"./sharedArrayOperations.js\";\n/**\n * Basic types for the SharedArray DDS\n * It can be used as a generic constraint (`extends SerializableTypeForSharedArray`) but is\n * *never* meant to be a concrete/real type on its own.\n *\n * @legacy @beta\n */\nexport type SerializableTypeForSharedArray = boolean | number | string | object | IFluidHandle;\n\n/**\n * Interface defining the events that can be emitted by the SharedArray DDS\n * and the events that can be listened to by the SharedArray DDS\n *\n * @legacy @beta\n */\nexport interface ISharedArrayEvents extends ISharedObjectEvents {\n\t/**\n\t *\n\t * @param event - The event name.\n\t * @param listener - An event listener.\n\t *\n\t * @eventProperty\n\t */\n\t(\n\t\tevent: \"valueChanged\",\n\t\tlistener: (\n\t\t\top: ISharedArrayOperation,\n\t\t\tisLocal: boolean,\n\t\t\ttarget: IEventThisPlaceHolder,\n\t\t) => void,\n\t): void;\n\n\t/**\n\t *\n\t * @param event - The event name.\n\t * @param listener - An event listener.\n\t *\n\t * @eventProperty\n\t */\n\t(event: \"revertible\", listener: (revertible: IRevertible) => void): void;\n}\n\n/**\n * Interface defining the SharedArray DDS\n * It is a generic interface that can be used to create a SharedArray of any type\n * The type of the SharedArray is defined by the type parameter T\n *\n * @typeParam T - The type of the SharedArray\n *\n * @legacy @beta\n */\nexport interface ISharedArray<T extends SerializableTypeForSharedArray>\n\textends ISharedObject<ISharedArrayEvents> {\n\tget(): readonly T[];\n\tinsert<TWrite>(index: number, value: Serializable<TWrite> & T): void;\n\tdelete(index: number): void;\n\tmove(oldIndex: number, newIndex: number): void;\n\ttoggle(entryId: string): void;\n\ttoggleMove(oldEntryId: string, newEntryId: string): void;\n\tinsertBulkAfter<TWrite>(ref: T | undefined, values: (Serializable<TWrite> & T)[]): void;\n}\n\n/**\n *\n * @internal\n */\nexport interface ISharedArrayRevertible extends ISharedObject<ISharedArrayEvents> {\n\ttoggle(entryId: string): void;\n\ttoggleMove(oldEntryId: string, newEntryId: string): void;\n}\n\n/**\n * Interface defining the in memory shared array entry of the DDS\n *\n * @internal\n */\nexport interface SharedArrayEntry<T extends SerializableTypeForSharedArray>\n\textends SharedArrayEntryCore<T> {\n\t/**\n\t * Flag that tracks whether an ack from the server has been received for a local insert.\n\t * True for local changes.\n\t */\n\tisAckPending: boolean;\n\n\t/**\n\t * Counter is shared by delete and undo/redo (of delete and insert) as undo/redo simply\n\t * operates on the isDeleted flag of the DDS. This flag will help us skip local op acks as\n\t * they have already inflicted state change. The flag helps us ignore remote ops if there is a\n\t * local pending delete as we would be getting the pending op after server stamping\n\t */\n\tisLocalPendingDelete: number;\n\n\t/**\n\t * Counter is for move and its undo/redo. This flag will be used to skip local op acks as\n\t * they have already inflicted state change. The flag helps us ignore remote ops if there is a\n\t * local pending delete as we would be getting the pending op after server stamping. Only exception\n\t * being if there is a remote delete, we will have to respect that\n\t */\n\tisLocalPendingMove: number;\n}\n\n/**\n * Interface defining the core entry attributes\n *\n * @internal\n */\nexport interface SharedArrayEntryCore<T extends SerializableTypeForSharedArray> {\n\t/**\n\t * a unique ID for this particular entry\n\t */\n\tentryId: string;\n\n\t/**\n\t * the value stored in this entry, may not be unique\n\t */\n\tvalue: T;\n\n\t/**\n\t * Flag to track whether this entry is deleted or not.\n\t */\n\tisDeleted: boolean;\n\n\t/**\n\t * Primarily used for move op and tracks the old entry id from which this entry was changed from.\n\t */\n\tprevEntryId?: string;\n\n\t/**\n\t * Primarily used for move op and tracks the new entry id to which this entry was changed to.\n\t */\n\tnextEntryId?: string;\n}\n\n/**\n * Format of the snapshot for the DDS\n *\n * @internal\n */\nexport interface SnapshotFormat<T> {\n\t/**\n\t * Array of the data entries that represent the DDS in-memory representation\n\t */\n\tdataArray: T[];\n}\n\n/**\n * @legacy @beta\n */\nexport interface IRevertible {\n\trevert(): void;\n\tdispose(): void;\n}\n"]}
|
|
@@ -27,6 +27,12 @@ export declare class SharedArrayClass<T extends SerializableTypeForSharedArray>
|
|
|
27
27
|
* handling for this data structure
|
|
28
28
|
*/
|
|
29
29
|
private readonly idToEntryMap;
|
|
30
|
+
/**
|
|
31
|
+
* Set of entry IDs that are marked for deletion by remote clients, but have local pending deletes.
|
|
32
|
+
* Used to prevent resuscitating entries while rolling back a delete operation.
|
|
33
|
+
* We should not rollback to life an entry that was deleted by remote clients.
|
|
34
|
+
*/
|
|
35
|
+
private readonly remoteDeleteWithLocalPendingDelete;
|
|
30
36
|
/**
|
|
31
37
|
* Create a new shared array
|
|
32
38
|
*
|
|
@@ -87,6 +93,7 @@ export declare class SharedArrayClass<T extends SerializableTypeForSharedArray>
|
|
|
87
93
|
* @param newEntryId - EntryId of the to be live entry
|
|
88
94
|
*/
|
|
89
95
|
toggleMove(oldEntryId: string, newEntryId: string): void;
|
|
96
|
+
rollback(op: unknown, _localOpMetadata: unknown): void;
|
|
90
97
|
/**
|
|
91
98
|
* Load share array from snapshot
|
|
92
99
|
*
|
|
@@ -174,6 +181,7 @@ export declare class SharedArrayClass<T extends SerializableTypeForSharedArray>
|
|
|
174
181
|
* existingEntry -\> deadeEntry(appended) -\> existing chain(if any).
|
|
175
182
|
*/
|
|
176
183
|
private updateDeadEntry;
|
|
184
|
+
private handleStashedInsert;
|
|
177
185
|
protected applyStashedOp(content: unknown): void;
|
|
178
186
|
}
|
|
179
187
|
//# sourceMappingURL=sharedArray.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sharedArray.d.ts","sourceRoot":"","sources":["../../src/array/sharedArray.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACX,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EACf,sBAAsB,EACtB,MAAM,gDAAgD,CAAC;AACxD,OAAO,KAAK,EACX,yBAAyB,EAEzB,MAAM,6CAA6C,CAAC;AAErD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AAE1F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,6CAA6C,CAAC;AAG3E,OAAO,KAAK,EACX,kBAAkB,EAClB,YAAY,EACZ,sBAAsB,EACtB,8BAA8B,EAI9B,MAAM,iBAAiB,CAAC;AAczB;;;;GAIG;AACH,qBAAa,gBAAgB,CAAC,CAAC,SAAS,8BAA8B,CACrE,SAAQ,YAAY,CAAC,kBAAkB,CACvC,YAAW,YAAY,CAAC,CAAC,CAAC,EAAE,sBAAsB;IAElD;;OAEG;IACH,OAAO,CAAC,WAAW,CAAwB;IAE3C;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmC;IAEhE;;;;;;OAMG;WACW,MAAM,CAAC,CAAC,SAAS,8BAA8B,EAC5D,OAAO,EAAE,sBAAsB,EAC/B,EAAE,CAAC,EAAE,MAAM,GACT,gBAAgB,CAAC,CAAC,CAAC;IAItB;;;;OAIG;WACW,UAAU,CAAC,CAAC,SAAS,8BAA8B,KAAK,eAAe;IAIrF;;;;;;;OAOG;gBAEF,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,sBAAsB,EAC/B,UAAU,EAAE,kBAAkB;IAO/B;;;OAGG;IACI,GAAG,IAAI,SAAS,CAAC,EAAE;IAI1B,SAAS,CAAC,aAAa,CAAC,UAAU,EAAE,gBAAgB,GAAG,qBAAqB;IA0CrE,eAAe,CAAC,MAAM,EAC5B,GAAG,EAAE,CAAC,GAAG,SAAS,EAClB,MAAM,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAClC,IAAI;IAsBA,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI;IAO3E,OAAO,CAAC,UAAU;IAuBX,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IA2B3B,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI;IAwB1C;;;;;OAKG;IACI,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAuBrD,OAAO,CAAC,QAAQ;IAwBhB;;;;;;OAMG;IACI,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"sharedArray.d.ts","sourceRoot":"","sources":["../../src/array/sharedArray.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,6 +48,12 @@ class SharedArrayClass extends internal_4.SharedObject {
|
|
|
48
48
|
*/
|
|
49
49
|
constructor(id, runtime, attributes) {
|
|
50
50
|
super(id, runtime, attributes, "loop_sharedArray_" /* telemetryContextPrefix */);
|
|
51
|
+
/**
|
|
52
|
+
* Set of entry IDs that are marked for deletion by remote clients, but have local pending deletes.
|
|
53
|
+
* Used to prevent resuscitating entries while rolling back a delete operation.
|
|
54
|
+
* We should not rollback to life an entry that was deleted by remote clients.
|
|
55
|
+
*/
|
|
56
|
+
this.remoteDeleteWithLocalPendingDelete = new Set();
|
|
51
57
|
this.sharedArray = [];
|
|
52
58
|
this.idToEntryMap = new Map();
|
|
53
59
|
}
|
|
@@ -280,6 +286,68 @@ class SharedArrayClass extends internal_4.SharedObject {
|
|
|
280
286
|
}
|
|
281
287
|
this.submitLocalMessage(op);
|
|
282
288
|
}
|
|
289
|
+
rollback(op, _localOpMetadata) {
|
|
290
|
+
const arrayOp = op;
|
|
291
|
+
switch (arrayOp.type) {
|
|
292
|
+
case sharedArrayOperations_js_1.OperationType.insertEntry: {
|
|
293
|
+
const liveEntry = this.getLiveEntry(arrayOp.entryId);
|
|
294
|
+
liveEntry.isDeleted = true;
|
|
295
|
+
const deleteOp = {
|
|
296
|
+
type: sharedArrayOperations_js_1.OperationType.deleteEntry,
|
|
297
|
+
entryId: arrayOp.entryId,
|
|
298
|
+
};
|
|
299
|
+
this.emitValueChangedEvent(deleteOp, true /* isLocal */);
|
|
300
|
+
break;
|
|
301
|
+
}
|
|
302
|
+
case sharedArrayOperations_js_1.OperationType.deleteEntry: {
|
|
303
|
+
if (this.remoteDeleteWithLocalPendingDelete.has(arrayOp.entryId)) {
|
|
304
|
+
// If remote already deleted the entry, we should not resurrect it.
|
|
305
|
+
// Just remove the local pending delete.
|
|
306
|
+
this.remoteDeleteWithLocalPendingDelete.delete(arrayOp.entryId);
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
const liveEntry = this.getLiveEntry(arrayOp.entryId);
|
|
310
|
+
liveEntry.isDeleted = false;
|
|
311
|
+
const insertOp = {
|
|
312
|
+
type: sharedArrayOperations_js_1.OperationType.insertEntry,
|
|
313
|
+
entryId: arrayOp.entryId,
|
|
314
|
+
value: liveEntry.value,
|
|
315
|
+
};
|
|
316
|
+
this.emitValueChangedEvent(insertOp, true /* isLocal */);
|
|
317
|
+
const entry = this.getEntryForId(arrayOp.entryId);
|
|
318
|
+
if (entry !== undefined && entry.isLocalPendingDelete > 0) {
|
|
319
|
+
entry.isLocalPendingDelete -= 1;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
break;
|
|
323
|
+
}
|
|
324
|
+
case sharedArrayOperations_js_1.OperationType.moveEntry: {
|
|
325
|
+
const { entryId: oldEntryId, changedToEntryId: newEntryId } = arrayOp;
|
|
326
|
+
if (this.getEntryForId(newEntryId).isDeleted) {
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
this.updateLiveEntry(newEntryId, oldEntryId);
|
|
330
|
+
const inputEntry = this.getEntryForId(oldEntryId);
|
|
331
|
+
inputEntry.prevEntryId = undefined;
|
|
332
|
+
inputEntry.nextEntryId = undefined;
|
|
333
|
+
inputEntry.isLocalPendingMove = 0;
|
|
334
|
+
const moveOp = {
|
|
335
|
+
type: sharedArrayOperations_js_1.OperationType.moveEntry,
|
|
336
|
+
entryId: newEntryId,
|
|
337
|
+
changedToEntryId: oldEntryId,
|
|
338
|
+
};
|
|
339
|
+
this.emitValueChangedEvent(moveOp, true /* isLocal */);
|
|
340
|
+
break;
|
|
341
|
+
}
|
|
342
|
+
case sharedArrayOperations_js_1.OperationType.toggle:
|
|
343
|
+
case sharedArrayOperations_js_1.OperationType.toggleMove: {
|
|
344
|
+
throw new Error(`Rollback not implemented for ${arrayOp.type} operations`);
|
|
345
|
+
}
|
|
346
|
+
default: {
|
|
347
|
+
(0, internal_1.unreachableCase)(arrayOp);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
283
351
|
/**
|
|
284
352
|
* Load share array from snapshot
|
|
285
353
|
*
|
|
@@ -404,10 +472,13 @@ class SharedArrayClass extends internal_4.SharedObject {
|
|
|
404
472
|
if (local) {
|
|
405
473
|
// Decrementing local pending counter as op is already applied to local state
|
|
406
474
|
opEntry.isLocalPendingDelete -= 1;
|
|
475
|
+
this.remoteDeleteWithLocalPendingDelete.delete(op.entryId);
|
|
407
476
|
}
|
|
408
477
|
else {
|
|
409
|
-
|
|
410
|
-
|
|
478
|
+
if (this.isLocalPending(op.entryId, "isLocalPendingDelete")) {
|
|
479
|
+
this.remoteDeleteWithLocalPendingDelete.add(op.entryId);
|
|
480
|
+
}
|
|
481
|
+
else {
|
|
411
482
|
// last element in skip list is the most recent and live entry, so marking it deleted
|
|
412
483
|
this.getLiveEntry(op.entryId).isDeleted = true;
|
|
413
484
|
}
|
|
@@ -659,28 +730,57 @@ class SharedArrayClass extends internal_4.SharedObject {
|
|
|
659
730
|
deadEntry.prevEntryId = existingEntryId;
|
|
660
731
|
deadEntry.isDeleted = true;
|
|
661
732
|
}
|
|
733
|
+
handleStashedInsert(entryId, insertAfterEntryId, value) {
|
|
734
|
+
let index = 0;
|
|
735
|
+
if (insertAfterEntryId !== undefined) {
|
|
736
|
+
index = this.findIndexOfEntryId(insertAfterEntryId) + 1;
|
|
737
|
+
}
|
|
738
|
+
const newEntry = this.createNewEntry(entryId, value);
|
|
739
|
+
newEntry.isAckPending = true;
|
|
740
|
+
this.addEntry(index, newEntry);
|
|
741
|
+
}
|
|
662
742
|
applyStashedOp(content) {
|
|
663
743
|
const op = content;
|
|
664
744
|
switch (op.type) {
|
|
665
745
|
case sharedArrayOperations_js_1.OperationType.insertEntry: {
|
|
666
|
-
this.
|
|
667
|
-
op.value);
|
|
746
|
+
this.handleStashedInsert(op.entryId, op.insertAfterEntryId, op.value);
|
|
668
747
|
break;
|
|
669
748
|
}
|
|
670
749
|
case sharedArrayOperations_js_1.OperationType.deleteEntry: {
|
|
671
|
-
this.
|
|
750
|
+
this.getLiveEntry(op.entryId).isDeleted = true;
|
|
751
|
+
this.getEntryForId(op.entryId).isLocalPendingDelete += 1;
|
|
672
752
|
break;
|
|
673
753
|
}
|
|
674
754
|
case sharedArrayOperations_js_1.OperationType.moveEntry: {
|
|
675
|
-
this.
|
|
755
|
+
const opEntry = this.getEntryForId(op.entryId);
|
|
756
|
+
this.handleStashedInsert(op.changedToEntryId, op.insertAfterEntryId, opEntry.value);
|
|
757
|
+
const newElementEntryId = op.changedToEntryId;
|
|
758
|
+
const newElement = this.getEntryForId(newElementEntryId);
|
|
759
|
+
if (this.isLocalPending(op.entryId, "isLocalPendingDelete") ||
|
|
760
|
+
this.isLocalPending(op.entryId, "isLocalPendingMove")) {
|
|
761
|
+
this.updateDeadEntry(op.entryId, newElementEntryId);
|
|
762
|
+
}
|
|
763
|
+
else {
|
|
764
|
+
// move the element
|
|
765
|
+
const liveEntry = this.getLiveEntry(op.entryId);
|
|
766
|
+
const isDeleted = liveEntry.isDeleted;
|
|
767
|
+
this.updateLiveEntry(liveEntry.entryId, newElementEntryId);
|
|
768
|
+
// mark newly added element as deleted if existing live element was already deleted
|
|
769
|
+
if (isDeleted) {
|
|
770
|
+
newElement.isDeleted = isDeleted;
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
newElement.isLocalPendingMove += 1;
|
|
676
774
|
break;
|
|
677
775
|
}
|
|
678
776
|
case sharedArrayOperations_js_1.OperationType.toggle: {
|
|
679
|
-
this.
|
|
777
|
+
this.getLiveEntry(op.entryId).isDeleted = op.isDeleted;
|
|
778
|
+
this.getEntryForId(op.entryId).isLocalPendingDelete += 1;
|
|
680
779
|
break;
|
|
681
780
|
}
|
|
682
781
|
case sharedArrayOperations_js_1.OperationType.toggleMove: {
|
|
683
|
-
this.
|
|
782
|
+
this.updateLiveEntry(this.getLiveEntry(op.entryId).entryId, op.entryId);
|
|
783
|
+
this.getEntryForId(op.entryId).isLocalPendingMove += 1;
|
|
684
784
|
break;
|
|
685
785
|
}
|
|
686
786
|
default: {
|