@fluidframework/map 2.70.0-361248 → 2.70.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/dist/directory.d.ts +16 -15
- package/dist/directory.d.ts.map +1 -1
- package/dist/directory.js +47 -40
- package/dist/directory.js.map +1 -1
- package/dist/map.d.ts +4 -4
- package/dist/map.d.ts.map +1 -1
- package/dist/map.js +10 -4
- package/dist/map.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 +16 -15
- package/lib/directory.d.ts.map +1 -1
- package/lib/directory.js +48 -41
- package/lib/directory.js.map +1 -1
- package/lib/map.d.ts +4 -4
- package/lib/map.d.ts.map +1 -1
- package/lib/map.js +11 -5
- package/lib/map.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 +16 -16
- package/src/directory.ts +97 -49
- package/src/map.ts +18 -11
- package/src/packageVersion.ts +1 -1
package/dist/map.d.ts
CHANGED
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
import type { IChannelAttributes, IFluidDataStoreRuntime, IChannelStorageService } from "@fluidframework/datastore-definitions/internal";
|
|
6
|
-
import {
|
|
7
|
-
import type { ISummaryTreeWithStats, ITelemetryContext } from "@fluidframework/runtime-definitions/internal";
|
|
6
|
+
import type { ISummaryTreeWithStats, ITelemetryContext, IRuntimeMessageCollection } from "@fluidframework/runtime-definitions/internal";
|
|
8
7
|
import type { IFluidSerializer } from "@fluidframework/shared-object-base/internal";
|
|
9
8
|
import { SharedObject } from "@fluidframework/shared-object-base/internal";
|
|
10
9
|
import type { ISharedMap, ISharedMapEvents } from "./interfaces.js";
|
|
@@ -102,9 +101,10 @@ export declare class SharedMap extends SharedObject<ISharedMapEvents> implements
|
|
|
102
101
|
*/
|
|
103
102
|
protected applyStashedOp(content: unknown): void;
|
|
104
103
|
/**
|
|
105
|
-
* {@inheritDoc @fluidframework/shared-object-base#SharedObject.
|
|
104
|
+
* {@inheritDoc @fluidframework/shared-object-base#SharedObject.processMessagesCore}
|
|
106
105
|
*/
|
|
107
|
-
protected
|
|
106
|
+
protected processMessagesCore(messagesCollection: IRuntimeMessageCollection): void;
|
|
107
|
+
private processMessage;
|
|
108
108
|
/**
|
|
109
109
|
* {@inheritDoc @fluidframework/shared-object-base#SharedObject.rollback}
|
|
110
110
|
*/
|
package/dist/map.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../src/map.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACX,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,MAAM,gDAAgD,CAAC;
|
|
1
|
+
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../src/map.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACX,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,MAAM,gDAAgD,CAAC;AAGxD,OAAO,KAAK,EACX,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EAGzB,MAAM,8CAA8C,CAAC;AAEtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,6CAA6C,CAAC;AAE3E,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAcpE;;GAEG;AACH,qBAAa,SAAU,SAAQ,YAAY,CAAC,gBAAgB,CAAE,YAAW,UAAU;IAClF;;OAEG;IACH,SAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAe;IAE3D;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IAEnC;;;;;;OAMG;gBAEF,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,sBAAsB,EAC/B,UAAU,EAAE,kBAAkB;IAY/B;;;OAGG;IACI,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC;IAIvC;;;OAGG;IAGI,OAAO,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAIjD;;;OAGG;IAGI,MAAM,IAAI,gBAAgB,CAAC,GAAG,CAAC;IAItC;;;OAGG;IAGI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAI3D;;OAEG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;;OAGG;IAGI,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI;IAK1F;;OAEG;IAGI,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI/C;;;;OAIG;IACI,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIhC;;OAEG;IACI,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAK7C;;;;OAIG;IACI,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAInC;;OAEG;IACI,KAAK,IAAI,IAAI;IAIpB;;OAEG;IACH,SAAS,CAAC,aAAa,CACtB,UAAU,EAAE,gBAAgB,EAC5B,gBAAgB,CAAC,EAAE,iBAAiB,GAClC,qBAAqB;IAqExB;;OAEG;cACa,QAAQ,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBxE;;OAEG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IAE9B;;OAEG;cACgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI;IAIjF;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIhD;;OAEG;cACgB,mBAAmB,CAAC,kBAAkB,EAAE,yBAAyB,GAAG,IAAI;IAO3F,OAAO,CAAC,cAAc;IAkBtB;;OAEG;cACgB,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI;CAG7E"}
|
package/dist/map.js
CHANGED
|
@@ -217,12 +217,18 @@ class SharedMap extends internal_5.SharedObject {
|
|
|
217
217
|
this.kernel.tryApplyStashedOp(content);
|
|
218
218
|
}
|
|
219
219
|
/**
|
|
220
|
-
* {@inheritDoc @fluidframework/shared-object-base#SharedObject.
|
|
220
|
+
* {@inheritDoc @fluidframework/shared-object-base#SharedObject.processMessagesCore}
|
|
221
221
|
*/
|
|
222
|
-
|
|
222
|
+
processMessagesCore(messagesCollection) {
|
|
223
|
+
const { envelope, local, messagesContent } = messagesCollection;
|
|
224
|
+
for (const messageContent of messagesContent) {
|
|
225
|
+
this.processMessage(envelope, messageContent, local);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
processMessage(messageEnvelope, messageContent, local) {
|
|
223
229
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
224
|
-
if (
|
|
225
|
-
(0, internal_1.assert)(this.kernel.tryProcessMessage(
|
|
230
|
+
if (messageEnvelope.type === internal_2.MessageType.Operation) {
|
|
231
|
+
(0, internal_1.assert)(this.kernel.tryProcessMessage(messageContent.contents, local, messageContent.localOpMetadata), 0xab2 /* Map received an unrecognized op, possibly from a newer version */);
|
|
226
232
|
}
|
|
227
233
|
}
|
|
228
234
|
/**
|
package/dist/map.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.js","sourceRoot":"","sources":["../src/map.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport type {\n\tIChannelAttributes,\n\tIFluidDataStoreRuntime,\n\tIChannelStorageService,\n} from \"@fluidframework/datastore-definitions/internal\";\nimport {\n\tMessageType,\n\ttype ISequencedDocumentMessage,\n} from \"@fluidframework/driver-definitions/internal\";\nimport { readAndParse } from \"@fluidframework/driver-utils/internal\";\nimport type {\n\tISummaryTreeWithStats,\n\tITelemetryContext,\n} from \"@fluidframework/runtime-definitions/internal\";\nimport { SummaryTreeBuilder } from \"@fluidframework/runtime-utils/internal\";\nimport type { IFluidSerializer } from \"@fluidframework/shared-object-base/internal\";\nimport { SharedObject } from \"@fluidframework/shared-object-base/internal\";\n\nimport type { ISharedMap, ISharedMapEvents } from \"./interfaces.js\";\nimport {\n\ttype IMapDataObjectSerializable,\n\ttype IMapOperation,\n\tMapKernel,\n} from \"./mapKernel.js\";\n\ninterface IMapSerializationFormat {\n\tblobs?: string[];\n\tcontent: IMapDataObjectSerializable;\n}\n\nconst snapshotFileName = \"header\";\n\n/**\n * {@inheritDoc ISharedMap}\n */\nexport class SharedMap extends SharedObject<ISharedMapEvents> implements ISharedMap {\n\t/**\n\t * String representation for the class.\n\t */\n\tpublic readonly [Symbol.toStringTag]: string = \"SharedMap\";\n\n\t/**\n\t * MapKernel which manages actual map operations.\n\t */\n\tprivate readonly kernel: MapKernel;\n\n\t/**\n\t * Do not call the constructor. Instead, you should use the {@link SharedMap.create | create method}.\n\t *\n\t * @param id - String identifier.\n\t * @param runtime - Data store runtime.\n\t * @param attributes - The attributes for the map.\n\t */\n\tpublic constructor(\n\t\tid: string,\n\t\truntime: IFluidDataStoreRuntime,\n\t\tattributes: IChannelAttributes,\n\t) {\n\t\tsuper(id, runtime, attributes, \"fluid_map_\");\n\t\tthis.kernel = new MapKernel(\n\t\t\tthis.serializer,\n\t\t\tthis.handle,\n\t\t\t(op, localOpMetadata) => this.submitLocalMessage(op, localOpMetadata),\n\t\t\t() => this.isAttached(),\n\t\t\tthis,\n\t\t);\n\t}\n\n\t/**\n\t * Get an iterator over the keys in this map.\n\t * @returns The iterator\n\t */\n\tpublic keys(): IterableIterator<string> {\n\t\treturn this.kernel.keys();\n\t}\n\n\t/**\n\t * Get an iterator over the entries in this map.\n\t * @returns The iterator\n\t */\n\t// TODO: Use `unknown` instead (breaking change).\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tpublic entries(): IterableIterator<[string, any]> {\n\t\treturn this.kernel.entries();\n\t}\n\n\t/**\n\t * Get an iterator over the values in this map.\n\t * @returns The iterator\n\t */\n\t// TODO: Use `unknown` instead (breaking change).\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tpublic values(): IterableIterator<any> {\n\t\treturn this.kernel.values();\n\t}\n\n\t/**\n\t * Get an iterator over the entries in this map.\n\t * @returns The iterator\n\t */\n\t// TODO: Use `unknown` instead (breaking change).\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tpublic [Symbol.iterator](): IterableIterator<[string, any]> {\n\t\treturn this.kernel.entries();\n\t}\n\n\t/**\n\t * The number of key/value pairs stored in the map.\n\t */\n\tpublic get size(): number {\n\t\treturn this.kernel.size;\n\t}\n\n\t/**\n\t * Executes the given callback on each entry in the map.\n\t * @param callbackFn - Callback function\n\t */\n\t// TODO: Use `unknown` instead (breaking change).\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tpublic forEach(callbackFn: (value: any, key: string, map: Map<string, any>) => void): void {\n\t\t// eslint-disable-next-line unicorn/no-array-for-each, unicorn/no-array-callback-reference\n\t\tthis.kernel.forEach(callbackFn);\n\t}\n\n\t/**\n\t * {@inheritDoc ISharedMap.get}\n\t */\n\t// TODO: Use `unknown` instead (breaking change).\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tpublic get<T = any>(key: string): T | undefined {\n\t\treturn this.kernel.get<T>(key);\n\t}\n\n\t/**\n\t * Check if a key exists in the map.\n\t * @param key - The key to check\n\t * @returns True if the key exists, false otherwise\n\t */\n\tpublic has(key: string): boolean {\n\t\treturn this.kernel.has(key);\n\t}\n\n\t/**\n\t * {@inheritDoc ISharedMap.set}\n\t */\n\tpublic set(key: string, value: unknown): this {\n\t\tthis.kernel.set(key, value);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Delete a key from the map.\n\t * @param key - Key to delete\n\t * @returns True if the key existed and was deleted, false if it did not exist\n\t */\n\tpublic delete(key: string): boolean {\n\t\treturn this.kernel.delete(key);\n\t}\n\n\t/**\n\t * Clear all data from the map.\n\t */\n\tpublic clear(): void {\n\t\tthis.kernel.clear();\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.summarizeCore}\n\t */\n\tprotected summarizeCore(\n\t\tserializer: IFluidSerializer,\n\t\ttelemetryContext?: ITelemetryContext,\n\t): ISummaryTreeWithStats {\n\t\tlet currentSize = 0;\n\t\tlet counter = 0;\n\t\tlet headerBlob: IMapDataObjectSerializable = {};\n\t\tconst blobs: string[] = [];\n\n\t\tconst builder = new SummaryTreeBuilder();\n\n\t\tconst data = this.kernel.getSerializedStorage(serializer);\n\n\t\t// If single property exceeds this size, it goes into its own blob\n\t\tconst MinValueSizeSeparateSnapshotBlob = 8 * 1024;\n\n\t\t// Maximum blob size for multiple map properties\n\t\t// Should be bigger than MinValueSizeSeparateSnapshotBlob\n\t\tconst MaxSnapshotBlobSize = 16 * 1024;\n\n\t\t// Partitioning algorithm:\n\t\t// 1) Split large (over MinValueSizeSeparateSnapshotBlob = 8K) properties into their own blobs.\n\t\t// Naming (across snapshots) of such blob does not have to be stable across snapshots,\n\t\t// As de-duping process (in driver) should not care about paths, only content.\n\t\t// 2) Split remaining properties into blobs of MaxSnapshotBlobSize (16K) size.\n\t\t// This process does not produce stable partitioning. This means\n\t\t// modification (including addition / deletion) of property can shift properties across blobs\n\t\t// and result in non-incremental snapshot.\n\t\t// This can be improved in the future, without being format breaking change, as loading sequence\n\t\t// loads all blobs at once and partitioning schema has no impact on that process.\n\t\tfor (const [key, value] of Object.entries(data)) {\n\t\t\tif (value.value && value.value.length >= MinValueSizeSeparateSnapshotBlob) {\n\t\t\t\tconst blobName = `blob${counter}`;\n\t\t\t\tcounter++;\n\t\t\t\tblobs.push(blobName);\n\t\t\t\tconst content: IMapDataObjectSerializable = {\n\t\t\t\t\t[key]: {\n\t\t\t\t\t\ttype: value.type,\n\t\t\t\t\t\tvalue: JSON.parse(value.value) as unknown,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tbuilder.addBlob(blobName, JSON.stringify(content));\n\t\t\t} else {\n\t\t\t\tcurrentSize += value.type.length + 21; // Approximation cost of property header\n\t\t\t\tif (value.value) {\n\t\t\t\t\tcurrentSize += value.value.length;\n\t\t\t\t}\n\n\t\t\t\tif (currentSize > MaxSnapshotBlobSize) {\n\t\t\t\t\tconst blobName = `blob${counter}`;\n\t\t\t\t\tcounter++;\n\t\t\t\t\tblobs.push(blobName);\n\t\t\t\t\tbuilder.addBlob(blobName, JSON.stringify(headerBlob));\n\t\t\t\t\theaderBlob = {};\n\t\t\t\t\tcurrentSize = 0;\n\t\t\t\t}\n\t\t\t\theaderBlob[key] = {\n\t\t\t\t\ttype: value.type,\n\t\t\t\t\tvalue: value.value === undefined ? undefined : (JSON.parse(value.value) as unknown),\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tconst header: IMapSerializationFormat = {\n\t\t\tblobs,\n\t\t\tcontent: headerBlob,\n\t\t};\n\t\tbuilder.addBlob(snapshotFileName, JSON.stringify(header));\n\n\t\treturn builder.getSummaryTree();\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.loadCore}\n\t */\n\tprotected async loadCore(storage: IChannelStorageService): Promise<void> {\n\t\tconst json = await readAndParse<object>(storage, snapshotFileName);\n\t\tconst newFormat = json as IMapSerializationFormat;\n\t\tif (Array.isArray(newFormat.blobs)) {\n\t\t\tthis.kernel.populateFromSerializable(newFormat.content);\n\t\t\tconst blobContents = await Promise.all(\n\t\t\t\tnewFormat.blobs.map(async (blobName) =>\n\t\t\t\t\treadAndParse<IMapDataObjectSerializable>(storage, blobName),\n\t\t\t\t),\n\t\t\t);\n\t\t\tfor (const blobContent of blobContents) {\n\t\t\t\tthis.kernel.populateFromSerializable(blobContent);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.kernel.populateFromSerializable(json as IMapDataObjectSerializable);\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.onDisconnect}\n\t */\n\tprotected onDisconnect(): void {}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.reSubmitCore}\n\t */\n\tprotected override reSubmitCore(content: unknown, localOpMetadata: unknown): void {\n\t\tthis.kernel.tryResubmitMessage(content as IMapOperation, localOpMetadata);\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObjectCore.applyStashedOp}\n\t */\n\tprotected applyStashedOp(content: unknown): void {\n\t\tthis.kernel.tryApplyStashedOp(content as IMapOperation);\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.processCore}\n\t */\n\tprotected processCore(\n\t\tmessage: ISequencedDocumentMessage,\n\t\tlocal: boolean,\n\t\tlocalOpMetadata: unknown,\n\t): void {\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n\t\tif (message.type === MessageType.Operation) {\n\t\t\tassert(\n\t\t\t\tthis.kernel.tryProcessMessage(\n\t\t\t\t\tmessage.contents as IMapOperation,\n\t\t\t\t\tlocal,\n\t\t\t\t\tlocalOpMetadata,\n\t\t\t\t),\n\t\t\t\t0xab2 /* Map received an unrecognized op, possibly from a newer version */,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.rollback}\n\t */\n\tprotected override rollback(content: unknown, localOpMetadata: unknown): void {\n\t\tthis.kernel.rollback(content, localOpMetadata);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"map.js","sourceRoot":"","sources":["../src/map.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport type {\n\tIChannelAttributes,\n\tIFluidDataStoreRuntime,\n\tIChannelStorageService,\n} from \"@fluidframework/datastore-definitions/internal\";\nimport { MessageType } from \"@fluidframework/driver-definitions/internal\";\nimport { readAndParse } from \"@fluidframework/driver-utils/internal\";\nimport type {\n\tISummaryTreeWithStats,\n\tITelemetryContext,\n\tIRuntimeMessageCollection,\n\tIRuntimeMessagesContent,\n\tISequencedMessageEnvelope,\n} from \"@fluidframework/runtime-definitions/internal\";\nimport { SummaryTreeBuilder } from \"@fluidframework/runtime-utils/internal\";\nimport type { IFluidSerializer } from \"@fluidframework/shared-object-base/internal\";\nimport { SharedObject } from \"@fluidframework/shared-object-base/internal\";\n\nimport type { ISharedMap, ISharedMapEvents } from \"./interfaces.js\";\nimport {\n\ttype IMapDataObjectSerializable,\n\ttype IMapOperation,\n\tMapKernel,\n} from \"./mapKernel.js\";\n\ninterface IMapSerializationFormat {\n\tblobs?: string[];\n\tcontent: IMapDataObjectSerializable;\n}\n\nconst snapshotFileName = \"header\";\n\n/**\n * {@inheritDoc ISharedMap}\n */\nexport class SharedMap extends SharedObject<ISharedMapEvents> implements ISharedMap {\n\t/**\n\t * String representation for the class.\n\t */\n\tpublic readonly [Symbol.toStringTag]: string = \"SharedMap\";\n\n\t/**\n\t * MapKernel which manages actual map operations.\n\t */\n\tprivate readonly kernel: MapKernel;\n\n\t/**\n\t * Do not call the constructor. Instead, you should use the {@link SharedMap.create | create method}.\n\t *\n\t * @param id - String identifier.\n\t * @param runtime - Data store runtime.\n\t * @param attributes - The attributes for the map.\n\t */\n\tpublic constructor(\n\t\tid: string,\n\t\truntime: IFluidDataStoreRuntime,\n\t\tattributes: IChannelAttributes,\n\t) {\n\t\tsuper(id, runtime, attributes, \"fluid_map_\");\n\t\tthis.kernel = new MapKernel(\n\t\t\tthis.serializer,\n\t\t\tthis.handle,\n\t\t\t(op, localOpMetadata) => this.submitLocalMessage(op, localOpMetadata),\n\t\t\t() => this.isAttached(),\n\t\t\tthis,\n\t\t);\n\t}\n\n\t/**\n\t * Get an iterator over the keys in this map.\n\t * @returns The iterator\n\t */\n\tpublic keys(): IterableIterator<string> {\n\t\treturn this.kernel.keys();\n\t}\n\n\t/**\n\t * Get an iterator over the entries in this map.\n\t * @returns The iterator\n\t */\n\t// TODO: Use `unknown` instead (breaking change).\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tpublic entries(): IterableIterator<[string, any]> {\n\t\treturn this.kernel.entries();\n\t}\n\n\t/**\n\t * Get an iterator over the values in this map.\n\t * @returns The iterator\n\t */\n\t// TODO: Use `unknown` instead (breaking change).\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tpublic values(): IterableIterator<any> {\n\t\treturn this.kernel.values();\n\t}\n\n\t/**\n\t * Get an iterator over the entries in this map.\n\t * @returns The iterator\n\t */\n\t// TODO: Use `unknown` instead (breaking change).\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tpublic [Symbol.iterator](): IterableIterator<[string, any]> {\n\t\treturn this.kernel.entries();\n\t}\n\n\t/**\n\t * The number of key/value pairs stored in the map.\n\t */\n\tpublic get size(): number {\n\t\treturn this.kernel.size;\n\t}\n\n\t/**\n\t * Executes the given callback on each entry in the map.\n\t * @param callbackFn - Callback function\n\t */\n\t// TODO: Use `unknown` instead (breaking change).\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tpublic forEach(callbackFn: (value: any, key: string, map: Map<string, any>) => void): void {\n\t\t// eslint-disable-next-line unicorn/no-array-for-each, unicorn/no-array-callback-reference\n\t\tthis.kernel.forEach(callbackFn);\n\t}\n\n\t/**\n\t * {@inheritDoc ISharedMap.get}\n\t */\n\t// TODO: Use `unknown` instead (breaking change).\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tpublic get<T = any>(key: string): T | undefined {\n\t\treturn this.kernel.get<T>(key);\n\t}\n\n\t/**\n\t * Check if a key exists in the map.\n\t * @param key - The key to check\n\t * @returns True if the key exists, false otherwise\n\t */\n\tpublic has(key: string): boolean {\n\t\treturn this.kernel.has(key);\n\t}\n\n\t/**\n\t * {@inheritDoc ISharedMap.set}\n\t */\n\tpublic set(key: string, value: unknown): this {\n\t\tthis.kernel.set(key, value);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Delete a key from the map.\n\t * @param key - Key to delete\n\t * @returns True if the key existed and was deleted, false if it did not exist\n\t */\n\tpublic delete(key: string): boolean {\n\t\treturn this.kernel.delete(key);\n\t}\n\n\t/**\n\t * Clear all data from the map.\n\t */\n\tpublic clear(): void {\n\t\tthis.kernel.clear();\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.summarizeCore}\n\t */\n\tprotected summarizeCore(\n\t\tserializer: IFluidSerializer,\n\t\ttelemetryContext?: ITelemetryContext,\n\t): ISummaryTreeWithStats {\n\t\tlet currentSize = 0;\n\t\tlet counter = 0;\n\t\tlet headerBlob: IMapDataObjectSerializable = {};\n\t\tconst blobs: string[] = [];\n\n\t\tconst builder = new SummaryTreeBuilder();\n\n\t\tconst data = this.kernel.getSerializedStorage(serializer);\n\n\t\t// If single property exceeds this size, it goes into its own blob\n\t\tconst MinValueSizeSeparateSnapshotBlob = 8 * 1024;\n\n\t\t// Maximum blob size for multiple map properties\n\t\t// Should be bigger than MinValueSizeSeparateSnapshotBlob\n\t\tconst MaxSnapshotBlobSize = 16 * 1024;\n\n\t\t// Partitioning algorithm:\n\t\t// 1) Split large (over MinValueSizeSeparateSnapshotBlob = 8K) properties into their own blobs.\n\t\t// Naming (across snapshots) of such blob does not have to be stable across snapshots,\n\t\t// As de-duping process (in driver) should not care about paths, only content.\n\t\t// 2) Split remaining properties into blobs of MaxSnapshotBlobSize (16K) size.\n\t\t// This process does not produce stable partitioning. This means\n\t\t// modification (including addition / deletion) of property can shift properties across blobs\n\t\t// and result in non-incremental snapshot.\n\t\t// This can be improved in the future, without being format breaking change, as loading sequence\n\t\t// loads all blobs at once and partitioning schema has no impact on that process.\n\t\tfor (const [key, value] of Object.entries(data)) {\n\t\t\tif (value.value && value.value.length >= MinValueSizeSeparateSnapshotBlob) {\n\t\t\t\tconst blobName = `blob${counter}`;\n\t\t\t\tcounter++;\n\t\t\t\tblobs.push(blobName);\n\t\t\t\tconst content: IMapDataObjectSerializable = {\n\t\t\t\t\t[key]: {\n\t\t\t\t\t\ttype: value.type,\n\t\t\t\t\t\tvalue: JSON.parse(value.value) as unknown,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tbuilder.addBlob(blobName, JSON.stringify(content));\n\t\t\t} else {\n\t\t\t\tcurrentSize += value.type.length + 21; // Approximation cost of property header\n\t\t\t\tif (value.value) {\n\t\t\t\t\tcurrentSize += value.value.length;\n\t\t\t\t}\n\n\t\t\t\tif (currentSize > MaxSnapshotBlobSize) {\n\t\t\t\t\tconst blobName = `blob${counter}`;\n\t\t\t\t\tcounter++;\n\t\t\t\t\tblobs.push(blobName);\n\t\t\t\t\tbuilder.addBlob(blobName, JSON.stringify(headerBlob));\n\t\t\t\t\theaderBlob = {};\n\t\t\t\t\tcurrentSize = 0;\n\t\t\t\t}\n\t\t\t\theaderBlob[key] = {\n\t\t\t\t\ttype: value.type,\n\t\t\t\t\tvalue: value.value === undefined ? undefined : (JSON.parse(value.value) as unknown),\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tconst header: IMapSerializationFormat = {\n\t\t\tblobs,\n\t\t\tcontent: headerBlob,\n\t\t};\n\t\tbuilder.addBlob(snapshotFileName, JSON.stringify(header));\n\n\t\treturn builder.getSummaryTree();\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.loadCore}\n\t */\n\tprotected async loadCore(storage: IChannelStorageService): Promise<void> {\n\t\tconst json = await readAndParse<object>(storage, snapshotFileName);\n\t\tconst newFormat = json as IMapSerializationFormat;\n\t\tif (Array.isArray(newFormat.blobs)) {\n\t\t\tthis.kernel.populateFromSerializable(newFormat.content);\n\t\t\tconst blobContents = await Promise.all(\n\t\t\t\tnewFormat.blobs.map(async (blobName) =>\n\t\t\t\t\treadAndParse<IMapDataObjectSerializable>(storage, blobName),\n\t\t\t\t),\n\t\t\t);\n\t\t\tfor (const blobContent of blobContents) {\n\t\t\t\tthis.kernel.populateFromSerializable(blobContent);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.kernel.populateFromSerializable(json as IMapDataObjectSerializable);\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.onDisconnect}\n\t */\n\tprotected onDisconnect(): void {}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.reSubmitCore}\n\t */\n\tprotected override reSubmitCore(content: unknown, localOpMetadata: unknown): void {\n\t\tthis.kernel.tryResubmitMessage(content as IMapOperation, localOpMetadata);\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObjectCore.applyStashedOp}\n\t */\n\tprotected applyStashedOp(content: unknown): void {\n\t\tthis.kernel.tryApplyStashedOp(content as IMapOperation);\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.processMessagesCore}\n\t */\n\tprotected override processMessagesCore(messagesCollection: IRuntimeMessageCollection): void {\n\t\tconst { envelope, local, messagesContent } = messagesCollection;\n\t\tfor (const messageContent of messagesContent) {\n\t\t\tthis.processMessage(envelope, messageContent, local);\n\t\t}\n\t}\n\n\tprivate processMessage(\n\t\tmessageEnvelope: ISequencedMessageEnvelope,\n\t\tmessageContent: IRuntimeMessagesContent,\n\t\tlocal: boolean,\n\t): void {\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n\t\tif (messageEnvelope.type === MessageType.Operation) {\n\t\t\tassert(\n\t\t\t\tthis.kernel.tryProcessMessage(\n\t\t\t\t\tmessageContent.contents as IMapOperation,\n\t\t\t\t\tlocal,\n\t\t\t\t\tmessageContent.localOpMetadata,\n\t\t\t\t),\n\t\t\t\t0xab2 /* Map received an unrecognized op, possibly from a newer version */,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/shared-object-base#SharedObject.rollback}\n\t */\n\tprotected override rollback(content: unknown, localOpMetadata: unknown): void {\n\t\tthis.kernel.rollback(content, localOpMetadata);\n\t}\n}\n"]}
|
package/dist/packageVersion.d.ts
CHANGED
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
|
|
6
6
|
*/
|
|
7
7
|
export declare const pkgName = "@fluidframework/map";
|
|
8
|
-
export declare const pkgVersion = "2.70.0
|
|
8
|
+
export declare const pkgVersion = "2.70.0";
|
|
9
9
|
//# sourceMappingURL=packageVersion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,wBAAwB,CAAC;AAC7C,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,wBAAwB,CAAC;AAC7C,eAAO,MAAM,UAAU,WAAW,CAAC"}
|
package/dist/packageVersion.js
CHANGED
|
@@ -8,5 +8,5 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.pkgVersion = exports.pkgName = void 0;
|
|
10
10
|
exports.pkgName = "@fluidframework/map";
|
|
11
|
-
exports.pkgVersion = "2.70.0
|
|
11
|
+
exports.pkgVersion = "2.70.0";
|
|
12
12
|
//# sourceMappingURL=packageVersion.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,qBAAqB,CAAC;AAChC,QAAA,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,qBAAqB,CAAC;AAChC,QAAA,UAAU,GAAG,QAAQ,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/map\";\nexport const pkgVersion = \"2.70.0\";\n"]}
|
package/lib/directory.d.ts
CHANGED
|
@@ -4,8 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { TypedEventEmitter } from "@fluid-internal/client-utils";
|
|
6
6
|
import type { IChannelAttributes, IFluidDataStoreRuntime, IChannelStorageService } from "@fluidframework/datastore-definitions/internal";
|
|
7
|
-
import {
|
|
8
|
-
import type { ISummaryTreeWithStats, ITelemetryContext } from "@fluidframework/runtime-definitions/internal";
|
|
7
|
+
import type { ISummaryTreeWithStats, ITelemetryContext, IRuntimeMessageCollection, ISequencedMessageEnvelope } from "@fluidframework/runtime-definitions/internal";
|
|
9
8
|
import type { IFluidSerializer } from "@fluidframework/shared-object-base/internal";
|
|
10
9
|
import { SharedObject } from "@fluidframework/shared-object-base/internal";
|
|
11
10
|
import { type ITelemetryLoggerExt } from "@fluidframework/telemetry-utils/internal";
|
|
@@ -355,9 +354,10 @@ export declare class SharedDirectory extends SharedObject<ISharedDirectoryEvents
|
|
|
355
354
|
*/
|
|
356
355
|
protected populate(data: IDirectoryDataObject): void;
|
|
357
356
|
/**
|
|
358
|
-
* {@inheritDoc @fluidframework/shared-object-base#SharedObject.
|
|
357
|
+
* {@inheritDoc @fluidframework/shared-object-base#SharedObject.processMessagesCore}
|
|
359
358
|
*/
|
|
360
|
-
protected
|
|
359
|
+
protected processMessagesCore(messagesCollection: IRuntimeMessageCollection): void;
|
|
360
|
+
private processMessage;
|
|
361
361
|
/**
|
|
362
362
|
* {@inheritDoc @fluidframework/shared-object-base#SharedObject.rollback}
|
|
363
363
|
*/
|
|
@@ -582,49 +582,50 @@ declare class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implement
|
|
|
582
582
|
get sequencedSubdirectories(): ReadonlyMap<string, SubDirectory>;
|
|
583
583
|
/**
|
|
584
584
|
* Process a clear operation.
|
|
585
|
-
* @param
|
|
585
|
+
* @param msgEnvelope - The envelope of the message from the server to apply.
|
|
586
586
|
* @param op - The op to process
|
|
587
587
|
* @param local - Whether the message originated from the local client
|
|
588
588
|
* @param localOpMetadata - For local client messages, this is the metadata that was submitted with the message.
|
|
589
589
|
* For messages from a remote client, this will be undefined.
|
|
590
590
|
*/
|
|
591
|
-
processClearMessage(
|
|
591
|
+
processClearMessage(msgEnvelope: ISequencedMessageEnvelope, op: IDirectoryClearOperation, local: boolean, localOpMetadata: ClearLocalOpMetadata | undefined): void;
|
|
592
592
|
/**
|
|
593
593
|
* Process a delete operation.
|
|
594
|
-
* @param
|
|
594
|
+
* @param msgEnvelope - The envelope of the message from the server to apply.
|
|
595
595
|
* @param op - The op to process
|
|
596
596
|
* @param local - Whether the message originated from the local client
|
|
597
597
|
* @param localOpMetadata - For local client messages, this is the metadata that was submitted with the message.
|
|
598
598
|
* For messages from a remote client, this will be undefined.
|
|
599
599
|
*/
|
|
600
|
-
processDeleteMessage(
|
|
600
|
+
processDeleteMessage(msgEnvelope: ISequencedMessageEnvelope, op: IDirectoryDeleteOperation, local: boolean, localOpMetadata: EditLocalOpMetadata | undefined): void;
|
|
601
601
|
/**
|
|
602
602
|
* Process a set operation.
|
|
603
|
-
* @param
|
|
603
|
+
* @param msgEnvelope - The envelope of the message from the server to apply.
|
|
604
604
|
* @param op - The op to process
|
|
605
605
|
* @param local - Whether the message originated from the local client
|
|
606
606
|
* @param localOpMetadata - For local client messages, this is the metadata that was submitted with the message.
|
|
607
607
|
* For messages from a remote client, this will be undefined.
|
|
608
608
|
*/
|
|
609
|
-
processSetMessage(
|
|
609
|
+
processSetMessage(msgEnvelope: ISequencedMessageEnvelope, op: IDirectorySetOperation, value: unknown, local: boolean, localOpMetadata: EditLocalOpMetadata | undefined): void;
|
|
610
610
|
/**
|
|
611
611
|
* Process a create subdirectory operation.
|
|
612
|
-
* @param
|
|
612
|
+
* @param msgEnvelope - The envelope of the message from the server to apply.
|
|
613
613
|
* @param op - The op to process
|
|
614
614
|
* @param local - Whether the message originated from the local client
|
|
615
615
|
* @param localOpMetadata - For local client messages, this is the metadata that was submitted with the message.
|
|
616
616
|
* For messages from a remote client, this will be undefined.
|
|
617
|
+
* @param clientSequenceNumber - The client sequence number of the message.
|
|
617
618
|
*/
|
|
618
|
-
processCreateSubDirectoryMessage(
|
|
619
|
+
processCreateSubDirectoryMessage(msgEnvelope: ISequencedMessageEnvelope, op: IDirectoryCreateSubDirectoryOperation, local: boolean, localOpMetadata: SubDirLocalOpMetadata | undefined, clientSequenceNumber: number): void;
|
|
619
620
|
/**
|
|
620
621
|
* Process a delete subdirectory operation.
|
|
621
|
-
* @param
|
|
622
|
+
* @param msgEnvelope - The envelope of the message from the server to apply.
|
|
622
623
|
* @param op - The op to process
|
|
623
624
|
* @param local - Whether the message originated from the local client
|
|
624
625
|
* @param localOpMetadata - For local client messages, this is the metadata that was submitted with the message.
|
|
625
626
|
* For messages from a remote client, this will be undefined.
|
|
626
627
|
*/
|
|
627
|
-
processDeleteSubDirectoryMessage(
|
|
628
|
+
processDeleteSubDirectoryMessage(msgEnvelope: ISequencedMessageEnvelope, op: IDirectoryDeleteSubDirectoryOperation, local: boolean, localOpMetadata: SubDirLocalOpMetadata | undefined): void;
|
|
628
629
|
/**
|
|
629
630
|
* Submit a clear operation.
|
|
630
631
|
* @param op - The operation
|
|
@@ -699,7 +700,7 @@ declare class SubDirectory extends TypedEventEmitter<IDirectoryEvents> implement
|
|
|
699
700
|
/**
|
|
700
701
|
* This return true if the message is for the current instance of this sub directory. As the sub directory
|
|
701
702
|
* can be deleted and created again, then this finds if the message is for current instance of directory or not.
|
|
702
|
-
* @param
|
|
703
|
+
* @param msgEnvelope - message envelope for the directory
|
|
703
704
|
* @param targetSubdir - subdirectory instance we are targeting from local op metadata (if a local op)
|
|
704
705
|
*/
|
|
705
706
|
private isMessageForCurrentInstanceOfSubDirectory;
|
package/lib/directory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory.d.ts","sourceRoot":"","sources":["../src/directory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,KAAK,EACX,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,MAAM,gDAAgD,CAAC;
|
|
1
|
+
{"version":3,"file":"directory.d.ts","sourceRoot":"","sources":["../src/directory.ts"],"names":[],"mappings":"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"}
|
package/lib/directory.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
var _a, _b;
|
|
6
6
|
import { TypedEventEmitter } from "@fluid-internal/client-utils";
|
|
7
7
|
import { assert, unreachableCase } from "@fluidframework/core-utils/internal";
|
|
8
|
-
import { MessageType
|
|
8
|
+
import { MessageType } from "@fluidframework/driver-definitions/internal";
|
|
9
9
|
import { readAndParse } from "@fluidframework/driver-utils/internal";
|
|
10
10
|
import { SummaryTreeBuilder } from "@fluidframework/runtime-utils/internal";
|
|
11
11
|
import { SharedObject, ValueType, bindHandles, parseHandles, } from "@fluidframework/shared-object-base/internal";
|
|
@@ -385,15 +385,21 @@ export class SharedDirectory extends SharedObject {
|
|
|
385
385
|
}
|
|
386
386
|
}
|
|
387
387
|
/**
|
|
388
|
-
* {@inheritDoc @fluidframework/shared-object-base#SharedObject.
|
|
388
|
+
* {@inheritDoc @fluidframework/shared-object-base#SharedObject.processMessagesCore}
|
|
389
389
|
*/
|
|
390
|
-
|
|
390
|
+
processMessagesCore(messagesCollection) {
|
|
391
|
+
const { envelope, local, messagesContent } = messagesCollection;
|
|
392
|
+
for (const messageContent of messagesContent) {
|
|
393
|
+
this.processMessage(envelope, messageContent, local);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
processMessage(messageEnvelope, messageContent, local) {
|
|
391
397
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
392
|
-
if (
|
|
393
|
-
const op =
|
|
398
|
+
if (messageEnvelope.type === MessageType.Operation) {
|
|
399
|
+
const op = messageContent.contents;
|
|
394
400
|
const handler = this.messageHandlers.get(op.type);
|
|
395
401
|
assert(handler !== undefined, 0x00e /* "Missing message handler for message type: op may be from a newer version */);
|
|
396
|
-
handler.process(
|
|
402
|
+
handler.process(messageEnvelope, op, local, messageContent.localOpMetadata, messageContent.clientSequenceNumber);
|
|
397
403
|
}
|
|
398
404
|
}
|
|
399
405
|
/**
|
|
@@ -424,10 +430,10 @@ export class SharedDirectory extends SharedObject {
|
|
|
424
430
|
// `resubmit`: When resubmitting ops, we use `localOpMetadata` to get a reference to the subdirectory that
|
|
425
431
|
// the op was originally targeting.
|
|
426
432
|
this.messageHandlers.set("clear", {
|
|
427
|
-
process: (
|
|
433
|
+
process: (msgEnvelope, op, local, localOpMetadata, clientSequenceNumber) => {
|
|
428
434
|
const subdir = this.getSequencedWorkingDirectory(op.path);
|
|
429
435
|
if (subdir !== undefined && !subdir?.disposed) {
|
|
430
|
-
subdir.processClearMessage(
|
|
436
|
+
subdir.processClearMessage(msgEnvelope, op, local, localOpMetadata);
|
|
431
437
|
}
|
|
432
438
|
},
|
|
433
439
|
resubmit: (op, localOpMetadata) => {
|
|
@@ -438,10 +444,10 @@ export class SharedDirectory extends SharedObject {
|
|
|
438
444
|
},
|
|
439
445
|
});
|
|
440
446
|
this.messageHandlers.set("delete", {
|
|
441
|
-
process: (
|
|
447
|
+
process: (msgEnvelope, op, local, localOpMetadata, clientSequenceNumber) => {
|
|
442
448
|
const subdir = this.getSequencedWorkingDirectory(op.path);
|
|
443
449
|
if (subdir !== undefined && !subdir?.disposed) {
|
|
444
|
-
subdir.processDeleteMessage(
|
|
450
|
+
subdir.processDeleteMessage(msgEnvelope, op, local, localOpMetadata);
|
|
445
451
|
}
|
|
446
452
|
},
|
|
447
453
|
resubmit: (op, localOpMetadata) => {
|
|
@@ -452,12 +458,12 @@ export class SharedDirectory extends SharedObject {
|
|
|
452
458
|
},
|
|
453
459
|
});
|
|
454
460
|
this.messageHandlers.set("set", {
|
|
455
|
-
process: (
|
|
461
|
+
process: (msgEnvelope, op, local, localOpMetadata, clientSequenceNumber) => {
|
|
456
462
|
const subdir = this.getSequencedWorkingDirectory(op.path);
|
|
457
463
|
if (subdir !== undefined && !subdir?.disposed) {
|
|
458
464
|
migrateIfSharedSerializable(op.value, this.serializer, this.handle);
|
|
459
465
|
const localValue = local ? undefined : op.value.value;
|
|
460
|
-
subdir.processSetMessage(
|
|
466
|
+
subdir.processSetMessage(msgEnvelope, op, localValue, local, localOpMetadata);
|
|
461
467
|
}
|
|
462
468
|
},
|
|
463
469
|
resubmit: (op, localOpMetadata) => {
|
|
@@ -468,10 +474,10 @@ export class SharedDirectory extends SharedObject {
|
|
|
468
474
|
},
|
|
469
475
|
});
|
|
470
476
|
this.messageHandlers.set("createSubDirectory", {
|
|
471
|
-
process: (
|
|
477
|
+
process: (msgEnvelope, op, local, localOpMetadata, clientSequenceNumber) => {
|
|
472
478
|
const parentSubdir = this.getSequencedWorkingDirectory(op.path);
|
|
473
479
|
if (parentSubdir !== undefined && !parentSubdir?.disposed) {
|
|
474
|
-
parentSubdir.processCreateSubDirectoryMessage(
|
|
480
|
+
parentSubdir.processCreateSubDirectoryMessage(msgEnvelope, op, local, localOpMetadata, clientSequenceNumber);
|
|
475
481
|
}
|
|
476
482
|
},
|
|
477
483
|
resubmit: (op, localOpMetadata) => {
|
|
@@ -483,10 +489,10 @@ export class SharedDirectory extends SharedObject {
|
|
|
483
489
|
},
|
|
484
490
|
});
|
|
485
491
|
this.messageHandlers.set("deleteSubDirectory", {
|
|
486
|
-
process: (
|
|
492
|
+
process: (msgEnvelope, op, local, localOpMetadata) => {
|
|
487
493
|
const parentSubdir = this.getSequencedWorkingDirectory(op.path);
|
|
488
494
|
if (parentSubdir !== undefined && !parentSubdir?.disposed) {
|
|
489
|
-
parentSubdir.processDeleteSubDirectoryMessage(
|
|
495
|
+
parentSubdir.processDeleteSubDirectoryMessage(msgEnvelope, op, local, localOpMetadata);
|
|
490
496
|
}
|
|
491
497
|
},
|
|
492
498
|
resubmit: (op, localOpMetadata) => {
|
|
@@ -1242,15 +1248,15 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
1242
1248
|
}
|
|
1243
1249
|
/**
|
|
1244
1250
|
* Process a clear operation.
|
|
1245
|
-
* @param
|
|
1251
|
+
* @param msgEnvelope - The envelope of the message from the server to apply.
|
|
1246
1252
|
* @param op - The op to process
|
|
1247
1253
|
* @param local - Whether the message originated from the local client
|
|
1248
1254
|
* @param localOpMetadata - For local client messages, this is the metadata that was submitted with the message.
|
|
1249
1255
|
* For messages from a remote client, this will be undefined.
|
|
1250
1256
|
*/
|
|
1251
|
-
processClearMessage(
|
|
1257
|
+
processClearMessage(msgEnvelope, op, local, localOpMetadata) {
|
|
1252
1258
|
this.throwIfDisposed();
|
|
1253
|
-
if (!this.isMessageForCurrentInstanceOfSubDirectory(
|
|
1259
|
+
if (!this.isMessageForCurrentInstanceOfSubDirectory(msgEnvelope, localOpMetadata?.subdir)) {
|
|
1254
1260
|
return;
|
|
1255
1261
|
}
|
|
1256
1262
|
if (local) {
|
|
@@ -1286,15 +1292,15 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
1286
1292
|
}
|
|
1287
1293
|
/**
|
|
1288
1294
|
* Process a delete operation.
|
|
1289
|
-
* @param
|
|
1295
|
+
* @param msgEnvelope - The envelope of the message from the server to apply.
|
|
1290
1296
|
* @param op - The op to process
|
|
1291
1297
|
* @param local - Whether the message originated from the local client
|
|
1292
1298
|
* @param localOpMetadata - For local client messages, this is the metadata that was submitted with the message.
|
|
1293
1299
|
* For messages from a remote client, this will be undefined.
|
|
1294
1300
|
*/
|
|
1295
|
-
processDeleteMessage(
|
|
1301
|
+
processDeleteMessage(msgEnvelope, op, local, localOpMetadata) {
|
|
1296
1302
|
this.throwIfDisposed();
|
|
1297
|
-
if (!this.isMessageForCurrentInstanceOfSubDirectory(
|
|
1303
|
+
if (!this.isMessageForCurrentInstanceOfSubDirectory(msgEnvelope, localOpMetadata?.subdir)) {
|
|
1298
1304
|
return;
|
|
1299
1305
|
}
|
|
1300
1306
|
if (local) {
|
|
@@ -1324,15 +1330,15 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
1324
1330
|
}
|
|
1325
1331
|
/**
|
|
1326
1332
|
* Process a set operation.
|
|
1327
|
-
* @param
|
|
1333
|
+
* @param msgEnvelope - The envelope of the message from the server to apply.
|
|
1328
1334
|
* @param op - The op to process
|
|
1329
1335
|
* @param local - Whether the message originated from the local client
|
|
1330
1336
|
* @param localOpMetadata - For local client messages, this is the metadata that was submitted with the message.
|
|
1331
1337
|
* For messages from a remote client, this will be undefined.
|
|
1332
1338
|
*/
|
|
1333
|
-
processSetMessage(
|
|
1339
|
+
processSetMessage(msgEnvelope, op, value, local, localOpMetadata) {
|
|
1334
1340
|
this.throwIfDisposed();
|
|
1335
|
-
if (!this.isMessageForCurrentInstanceOfSubDirectory(
|
|
1341
|
+
if (!this.isMessageForCurrentInstanceOfSubDirectory(msgEnvelope, localOpMetadata?.subdir)) {
|
|
1336
1342
|
return;
|
|
1337
1343
|
}
|
|
1338
1344
|
const { key } = op;
|
|
@@ -1362,18 +1368,19 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
1362
1368
|
}
|
|
1363
1369
|
/**
|
|
1364
1370
|
* Process a create subdirectory operation.
|
|
1365
|
-
* @param
|
|
1371
|
+
* @param msgEnvelope - The envelope of the message from the server to apply.
|
|
1366
1372
|
* @param op - The op to process
|
|
1367
1373
|
* @param local - Whether the message originated from the local client
|
|
1368
1374
|
* @param localOpMetadata - For local client messages, this is the metadata that was submitted with the message.
|
|
1369
1375
|
* For messages from a remote client, this will be undefined.
|
|
1376
|
+
* @param clientSequenceNumber - The client sequence number of the message.
|
|
1370
1377
|
*/
|
|
1371
|
-
processCreateSubDirectoryMessage(
|
|
1378
|
+
processCreateSubDirectoryMessage(msgEnvelope, op, local, localOpMetadata, clientSequenceNumber) {
|
|
1372
1379
|
this.throwIfDisposed();
|
|
1373
|
-
if (!this.isMessageForCurrentInstanceOfSubDirectory(
|
|
1380
|
+
if (!this.isMessageForCurrentInstanceOfSubDirectory(msgEnvelope, localOpMetadata?.parentSubdir)) {
|
|
1374
1381
|
return;
|
|
1375
1382
|
}
|
|
1376
|
-
assertNonNullClientId(
|
|
1383
|
+
assertNonNullClientId(msgEnvelope.clientId);
|
|
1377
1384
|
let subDir;
|
|
1378
1385
|
if (local) {
|
|
1379
1386
|
const pendingEntryIndex = this.pendingSubDirectoryData.findIndex((entry) => entry.subdirName === op.subdirName);
|
|
@@ -1397,7 +1404,7 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
1397
1404
|
subDir = this.getOptimisticSubDirectory(op.subdirName, true);
|
|
1398
1405
|
if (subDir === undefined) {
|
|
1399
1406
|
const absolutePath = posix.join(this.absolutePath, op.subdirName);
|
|
1400
|
-
subDir = new SubDirectory({ seq:
|
|
1407
|
+
subDir = new SubDirectory({ seq: msgEnvelope.sequenceNumber, clientSeq: clientSequenceNumber }, new Set([msgEnvelope.clientId]), this.directory, this.runtime, this.serializer, absolutePath, this.mc.logger);
|
|
1401
1408
|
}
|
|
1402
1409
|
else {
|
|
1403
1410
|
// If the subdirectory already optimistically exists, we don't need to create it again.
|
|
@@ -1405,7 +1412,7 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
1405
1412
|
if (subDir.disposed) {
|
|
1406
1413
|
this.undisposeSubdirectoryTree(subDir);
|
|
1407
1414
|
}
|
|
1408
|
-
subDir.clientIds.add(
|
|
1415
|
+
subDir.clientIds.add(msgEnvelope.clientId);
|
|
1409
1416
|
}
|
|
1410
1417
|
this.registerEventsOnSubDirectory(subDir, op.subdirName);
|
|
1411
1418
|
this._sequencedSubdirectories.set(op.subdirName, subDir);
|
|
@@ -1417,23 +1424,23 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
1417
1424
|
// Ensure correct seqData. This can be necessary if in scenarios where a subdir was created, deleted, and
|
|
1418
1425
|
// then later recreated.
|
|
1419
1426
|
if (this.seqData.seq !== -1 &&
|
|
1420
|
-
this.seqData.seq <=
|
|
1427
|
+
this.seqData.seq <= msgEnvelope.sequenceNumber &&
|
|
1421
1428
|
subDir.seqData.seq === -1) {
|
|
1422
|
-
subDir.seqData.seq =
|
|
1423
|
-
subDir.seqData.clientSeq =
|
|
1429
|
+
subDir.seqData.seq = msgEnvelope.sequenceNumber;
|
|
1430
|
+
subDir.seqData.clientSeq = clientSequenceNumber;
|
|
1424
1431
|
}
|
|
1425
1432
|
}
|
|
1426
1433
|
/**
|
|
1427
1434
|
* Process a delete subdirectory operation.
|
|
1428
|
-
* @param
|
|
1435
|
+
* @param msgEnvelope - The envelope of the message from the server to apply.
|
|
1429
1436
|
* @param op - The op to process
|
|
1430
1437
|
* @param local - Whether the message originated from the local client
|
|
1431
1438
|
* @param localOpMetadata - For local client messages, this is the metadata that was submitted with the message.
|
|
1432
1439
|
* For messages from a remote client, this will be undefined.
|
|
1433
1440
|
*/
|
|
1434
|
-
processDeleteSubDirectoryMessage(
|
|
1441
|
+
processDeleteSubDirectoryMessage(msgEnvelope, op, local, localOpMetadata) {
|
|
1435
1442
|
this.throwIfDisposed();
|
|
1436
|
-
if (!this.isMessageForCurrentInstanceOfSubDirectory(
|
|
1443
|
+
if (!this.isMessageForCurrentInstanceOfSubDirectory(msgEnvelope, localOpMetadata?.parentSubdir)) {
|
|
1437
1444
|
return;
|
|
1438
1445
|
}
|
|
1439
1446
|
const previousValue = this._sequencedSubdirectories.get(op.subdirName);
|
|
@@ -1754,18 +1761,18 @@ class SubDirectory extends TypedEventEmitter {
|
|
|
1754
1761
|
/**
|
|
1755
1762
|
* This return true if the message is for the current instance of this sub directory. As the sub directory
|
|
1756
1763
|
* can be deleted and created again, then this finds if the message is for current instance of directory or not.
|
|
1757
|
-
* @param
|
|
1764
|
+
* @param msgEnvelope - message envelope for the directory
|
|
1758
1765
|
* @param targetSubdir - subdirectory instance we are targeting from local op metadata (if a local op)
|
|
1759
1766
|
*/
|
|
1760
|
-
isMessageForCurrentInstanceOfSubDirectory(
|
|
1767
|
+
isMessageForCurrentInstanceOfSubDirectory(msgEnvelope, targetSubdir) {
|
|
1761
1768
|
// The message must be from this instance of the directory (if a local op) AND one of the following must be true:
|
|
1762
1769
|
// 1. The message was from the creator of this directory
|
|
1763
1770
|
// 2. This directory was created while detached
|
|
1764
1771
|
// 3. This directory was already live (known to other clients) and the op was created after the directory was created.
|
|
1765
1772
|
return ((targetSubdir === undefined || targetSubdir === this) &&
|
|
1766
|
-
((
|
|
1773
|
+
((msgEnvelope.clientId !== null && this.clientIds.has(msgEnvelope.clientId)) ||
|
|
1767
1774
|
this.clientIds.has("detached") ||
|
|
1768
|
-
(this.seqData.seq !== -1 && this.seqData.seq <=
|
|
1775
|
+
(this.seqData.seq !== -1 && this.seqData.seq <= msgEnvelope.referenceSequenceNumber)));
|
|
1769
1776
|
}
|
|
1770
1777
|
registerEventsOnSubDirectory(subDirectory, subDirName) {
|
|
1771
1778
|
subDirectory.on("subDirectoryCreated", (relativePath, local) => {
|