@fluidframework/container-runtime 2.0.0-internal.7.1.1 → 2.0.0-internal.7.2.1
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-extractor.json +1 -13
- package/api-report/container-runtime.api.md +72 -9
- package/dist/blobManager.d.ts +3 -3
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +41 -49
- package/dist/blobManager.js.map +1 -1
- package/dist/containerRuntime.d.ts +65 -19
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +52 -29
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.js +2 -2
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +8 -2
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +14 -3
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreRegistry.d.ts +3 -0
- package/dist/dataStoreRegistry.d.ts.map +1 -1
- package/dist/dataStoreRegistry.js +3 -0
- package/dist/dataStoreRegistry.js.map +1 -1
- package/dist/deltaManagerProxyBase.d.ts +1 -1
- package/dist/deltaManagerProxyBase.d.ts.map +1 -1
- package/dist/deltaManagerProxyBase.js +2 -2
- package/dist/deltaManagerProxyBase.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +26 -5
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js +4 -1
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcSummaryDefinitions.d.ts +1 -1
- package/dist/gc/gcSummaryDefinitions.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +4 -4
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/id-compressor/utilities.d.ts +3 -0
- package/dist/id-compressor/utilities.d.ts.map +1 -1
- package/dist/id-compressor/utilities.js +3 -0
- package/dist/id-compressor/utilities.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/messageTypes.d.ts +4 -1
- package/dist/messageTypes.d.ts.map +1 -1
- package/dist/messageTypes.js +3 -0
- package/dist/messageTypes.js.map +1 -1
- package/dist/opLifecycle/definitions.d.ts +3 -0
- package/dist/opLifecycle/definitions.d.ts.map +1 -1
- package/dist/opLifecycle/definitions.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/summary/orderedClientElection.d.ts +4 -1
- package/dist/summary/orderedClientElection.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.d.ts +5 -0
- package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.js +1 -0
- package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/dist/summary/summarizer.d.ts +1 -0
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +1 -0
- package/dist/summary/summarizer.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +94 -10
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryCollection.d.ts +16 -0
- package/dist/summary/summaryCollection.d.ts.map +1 -1
- package/dist/summary/summaryCollection.js +1 -0
- package/dist/summary/summaryCollection.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +10 -1
- package/dist/summary/summaryFormat.d.ts.map +1 -1
- package/dist/summary/summaryFormat.js.map +1 -1
- package/lib/blobManager.d.ts +3 -3
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +42 -50
- package/lib/blobManager.js.map +1 -1
- package/lib/containerRuntime.d.ts +65 -19
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +52 -29
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStore.js +2 -2
- package/lib/dataStore.js.map +1 -1
- package/lib/dataStoreContext.d.ts +8 -2
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +14 -3
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreRegistry.d.ts +3 -0
- package/lib/dataStoreRegistry.d.ts.map +1 -1
- package/lib/dataStoreRegistry.js +3 -0
- package/lib/dataStoreRegistry.js.map +1 -1
- package/lib/deltaManagerProxyBase.d.ts +1 -1
- package/lib/deltaManagerProxyBase.d.ts.map +1 -1
- package/lib/deltaManagerProxyBase.js +2 -2
- package/lib/deltaManagerProxyBase.js.map +1 -1
- package/lib/gc/gcDefinitions.d.ts +26 -5
- package/lib/gc/gcDefinitions.d.ts.map +1 -1
- package/lib/gc/gcDefinitions.js +4 -1
- package/lib/gc/gcDefinitions.js.map +1 -1
- package/lib/gc/gcSummaryDefinitions.d.ts +1 -1
- package/lib/gc/gcSummaryDefinitions.js.map +1 -1
- package/lib/gc/gcTelemetry.d.ts.map +1 -1
- package/lib/gc/gcTelemetry.js +4 -4
- package/lib/gc/gcTelemetry.js.map +1 -1
- package/lib/id-compressor/utilities.d.ts +3 -0
- package/lib/id-compressor/utilities.d.ts.map +1 -1
- package/lib/id-compressor/utilities.js +3 -0
- package/lib/id-compressor/utilities.js.map +1 -1
- package/lib/index.d.ts +3 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/messageTypes.d.ts +4 -1
- package/lib/messageTypes.d.ts.map +1 -1
- package/lib/messageTypes.js +3 -0
- package/lib/messageTypes.js.map +1 -1
- package/lib/opLifecycle/definitions.d.ts +3 -0
- package/lib/opLifecycle/definitions.d.ts.map +1 -1
- package/lib/opLifecycle/definitions.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/summary/orderedClientElection.d.ts +4 -1
- package/lib/summary/orderedClientElection.d.ts.map +1 -1
- package/lib/summary/orderedClientElection.js.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.d.ts +5 -0
- package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js +1 -0
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/lib/summary/summarizer.d.ts +1 -0
- package/lib/summary/summarizer.d.ts.map +1 -1
- package/lib/summary/summarizer.js +1 -0
- package/lib/summary/summarizer.js.map +1 -1
- package/lib/summary/summarizerTypes.d.ts +94 -10
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/lib/summary/summaryCollection.d.ts +16 -0
- package/lib/summary/summaryCollection.d.ts.map +1 -1
- package/lib/summary/summaryCollection.js +1 -0
- package/lib/summary/summaryCollection.js.map +1 -1
- package/lib/summary/summaryFormat.d.ts +10 -1
- package/lib/summary/summaryFormat.d.ts.map +1 -1
- package/lib/summary/summaryFormat.js.map +1 -1
- package/package.json +19 -20
- package/src/blobManager.ts +58 -59
- package/src/containerRuntime.ts +79 -39
- package/src/dataStore.ts +2 -2
- package/src/dataStoreContext.ts +14 -3
- package/src/dataStoreRegistry.ts +3 -0
- package/src/deltaManagerProxyBase.ts +2 -2
- package/src/gc/gcDefinitions.ts +27 -5
- package/src/gc/gcSummaryDefinitions.ts +1 -1
- package/src/gc/gcTelemetry.ts +5 -4
- package/src/id-compressor/utilities.ts +3 -0
- package/src/index.ts +13 -1
- package/src/messageTypes.ts +4 -1
- package/src/opLifecycle/definitions.ts +3 -0
- package/src/packageVersion.ts +1 -1
- package/src/summary/orderedClientElection.ts +4 -1
- package/src/summary/runWhileConnectedCoordinator.ts +5 -1
- package/src/summary/summarizer.ts +1 -0
- package/src/summary/summarizerTypes.ts +95 -11
- package/src/summary/summaryCollection.ts +18 -1
- package/src/summary/summaryFormat.ts +11 -1
- package/dist/container-runtime-alpha.d.ts +0 -1554
- package/dist/container-runtime-beta.d.ts +0 -1554
- package/dist/container-runtime-public.d.ts +0 -1554
- package/dist/container-runtime.d.ts +0 -1611
- package/src/gc/gcEarlyAdoption.md +0 -145
package/lib/dataStore.js
CHANGED
|
@@ -103,7 +103,7 @@ class DataStore {
|
|
|
103
103
|
return "Success";
|
|
104
104
|
}
|
|
105
105
|
/**
|
|
106
|
-
* @deprecated
|
|
106
|
+
* @deprecated Will be removed in future major release. Migrate all usage of IFluidRouter to the "entryPoint" pattern. Refer to Removing-IFluidRouter.md
|
|
107
107
|
*/
|
|
108
108
|
async request(request) {
|
|
109
109
|
return this.fluidDataStoreChannel.request(request);
|
|
@@ -124,7 +124,7 @@ class DataStore {
|
|
|
124
124
|
this.pendingAliases = datastores.pendingAliases;
|
|
125
125
|
}
|
|
126
126
|
/**
|
|
127
|
-
* @deprecated
|
|
127
|
+
* @deprecated Will be removed in future major release. Migrate all usage of IFluidRouter to the "entryPoint" pattern. Refer to Removing-IFluidRouter.md
|
|
128
128
|
*/
|
|
129
129
|
get IFluidRouter() {
|
|
130
130
|
return this.fluidDataStoreChannel;
|
package/lib/dataStore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataStore.js","sourceRoot":"","sources":["../src/dataStore.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 { ITelemetryLoggerExt, TelemetryDataTag, UsageError } from \"@fluidframework/telemetry-utils\";\nimport { assert, unreachableCase } from \"@fluidframework/core-utils\";\nimport { AttachState } from \"@fluidframework/container-definitions\";\nimport { FluidObject, IFluidHandle, IRequest, IResponse } from \"@fluidframework/core-interfaces\";\nimport {\n\tAliasResult,\n\tIDataStore,\n\tIFluidDataStoreChannel,\n} from \"@fluidframework/runtime-definitions\";\nimport { ContainerRuntime } from \"./containerRuntime\";\nimport { DataStores } from \"./dataStores\";\n\n/**\n * Interface for an op to be used for assigning an\n * alias to a datastore\n */\nexport interface IDataStoreAliasMessage {\n\t/** The internal id of the datastore */\n\treadonly internalId: string;\n\t/** The alias name to be assigned to the datastore */\n\treadonly alias: string;\n}\n\n/**\n * Type guard that returns true if the given alias message is actually an instance of\n * a class which implements {@link IDataStoreAliasMessage}\n * @param maybeDataStoreAliasMessage - message object to be validated\n * @returns True if the {@link IDataStoreAliasMessage} is fully implemented, false otherwise\n */\nexport const isDataStoreAliasMessage = (\n\tmaybeDataStoreAliasMessage: any,\n): maybeDataStoreAliasMessage is IDataStoreAliasMessage => {\n\treturn (\n\t\ttypeof maybeDataStoreAliasMessage?.internalId === \"string\" &&\n\t\ttypeof maybeDataStoreAliasMessage?.alias === \"string\"\n\t);\n};\n\nexport const channelToDataStore = (\n\tfluidDataStoreChannel: IFluidDataStoreChannel,\n\tinternalId: string,\n\truntime: ContainerRuntime,\n\tdatastores: DataStores,\n\tlogger: ITelemetryLoggerExt,\n): IDataStore => new DataStore(fluidDataStoreChannel, internalId, runtime, datastores, logger);\n\nenum AliasState {\n\tAliased = \"Aliased\",\n\tAliasing = \"Aliasing\",\n\tNone = \"None\",\n}\n\nclass DataStore implements IDataStore {\n\tprivate aliasState: AliasState = AliasState.None;\n\tprivate alias: string | undefined;\n\tprivate readonly pendingAliases: Map<string, Promise<AliasResult>>;\n\tprivate aliasResult: Promise<AliasResult> | undefined;\n\n\t/**\n\t * {@inheritDoc @fluidframework/runtime-definitions#IDataStore.trySetAlias}\n\t */\n\tasync trySetAlias(alias: string): Promise<AliasResult> {\n\t\tif (alias.includes(\"/\")) {\n\t\t\tthrow new UsageError(`The alias cannot contain slashes: '${alias}'`);\n\t\t}\n\n\t\tswitch (this.aliasState) {\n\t\t\t// If we're already aliasing, check if it's for the same value and return\n\t\t\t// the stored promise, otherwise return 'AlreadyAliased'\n\t\t\tcase AliasState.Aliasing:\n\t\t\t\tassert(\n\t\t\t\t\tthis.aliasResult !== undefined,\n\t\t\t\t\t0x316 /* There should be a cached promise of in-progress aliasing */,\n\t\t\t\t);\n\t\t\t\tawait this.aliasResult;\n\t\t\t\treturn this.alias === alias ? \"Success\" : \"AlreadyAliased\";\n\n\t\t\t// If this datastore is already aliased, return true only if this\n\t\t\t// is a repeated call for the same alias\n\t\t\tcase AliasState.Aliased:\n\t\t\t\treturn this.alias === alias ? \"Success\" : \"AlreadyAliased\";\n\n\t\t\tcase AliasState.None: {\n\t\t\t\tconst existingAlias = this.pendingAliases.get(alias);\n\t\t\t\tif (existingAlias !== undefined) {\n\t\t\t\t\t// There is already another datastore which will be aliased\n\t\t\t\t\t// to the same name\n\t\t\t\t\treturn \"Conflict\";\n\t\t\t\t}\n\n\t\t\t\t// There is no current or past alias operation for this datastore,\n\t\t\t\t// or for this alias, so it is safe to continue execution\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tunreachableCase(this.aliasState);\n\t\t}\n\n\t\tthis.aliasState = AliasState.Aliasing;\n\t\tthis.aliasResult = this.trySetAliasInternal(alias);\n\t\tthis.pendingAliases.set(alias, this.aliasResult);\n\t\treturn this.aliasResult;\n\t}\n\n\tasync trySetAliasInternal(alias: string): Promise<AliasResult> {\n\t\tconst message: IDataStoreAliasMessage = {\n\t\t\tinternalId: this.internalId,\n\t\t\talias,\n\t\t};\n\n\t\tthis.fluidDataStoreChannel.makeVisibleAndAttachGraph();\n\n\t\tif (this.runtime.attachState === AttachState.Detached) {\n\t\t\tconst localResult = this.datastores.processAliasMessageCore(message);\n\t\t\t// Explicitly lock-out future attempts of aliasing,\n\t\t\t// regardless of result\n\t\t\tthis.aliasState = AliasState.Aliased;\n\t\t\treturn localResult ? \"Success\" : \"Conflict\";\n\t\t}\n\n\t\tconst aliased = await this.ackBasedPromise<boolean>((resolve) => {\n\t\t\tthis.runtime.submitDataStoreAliasOp(message, resolve);\n\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tthis.logger.sendErrorEvent(\n\t\t\t\t\t{\n\t\t\t\t\t\teventName: \"AliasingException\",\n\t\t\t\t\t\talias: {\n\t\t\t\t\t\t\tvalue: alias,\n\t\t\t\t\t\t\ttag: TelemetryDataTag.UserData,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinternalId: {\n\t\t\t\t\t\t\tvalue: this.internalId,\n\t\t\t\t\t\t\ttag: TelemetryDataTag.CodeArtifact,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\terror,\n\t\t\t\t);\n\n\t\t\t\treturn false;\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis.pendingAliases.delete(alias);\n\t\t\t});\n\n\t\tif (!aliased) {\n\t\t\tthis.aliasState = AliasState.None;\n\t\t\tthis.aliasResult = undefined;\n\t\t\treturn \"Conflict\";\n\t\t}\n\n\t\tthis.alias = alias;\n\t\tthis.aliasState = AliasState.Aliased;\n\t\treturn \"Success\";\n\t}\n\n\t/**\n\t * @deprecated - Will be removed in future major release. Migrate all usage of IFluidRouter to the \"entryPoint\" pattern. Refer to Removing-IFluidRouter.md\n\t */\n\tpublic async request(request: IRequest): Promise<IResponse> {\n\t\treturn this.fluidDataStoreChannel.request(request);\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/runtime-definitions#IDataStore.entryPoint}\n\t */\n\tget entryPoint(): IFluidHandle<FluidObject> {\n\t\treturn this.fluidDataStoreChannel.entryPoint;\n\t}\n\n\tconstructor(\n\t\tprivate readonly fluidDataStoreChannel: IFluidDataStoreChannel,\n\t\tprivate readonly internalId: string,\n\t\tprivate readonly runtime: ContainerRuntime,\n\t\tprivate readonly datastores: DataStores,\n\t\tprivate readonly logger: ITelemetryLoggerExt,\n\t) {\n\t\tthis.pendingAliases = datastores.pendingAliases;\n\t}\n\n\t/**\n\t * @deprecated - Will be removed in future major release. Migrate all usage of IFluidRouter to the \"entryPoint\" pattern. Refer to Removing-IFluidRouter.md\n\t */\n\tpublic get IFluidRouter() {\n\t\treturn this.fluidDataStoreChannel;\n\t}\n\n\tprivate async ackBasedPromise<T>(\n\t\texecutor: (\n\t\t\tresolve: (value: T | PromiseLike<T>) => void,\n\t\t\treject: (reason?: any) => void,\n\t\t) => void,\n\t): Promise<T> {\n\t\tlet rejectBecauseDispose: () => void;\n\t\treturn new Promise<T>((resolve, reject) => {\n\t\t\trejectBecauseDispose = () =>\n\t\t\t\treject(\n\t\t\t\t\tnew Error(\"ContainerRuntime disposed while this ack-based Promise was pending\"),\n\t\t\t\t);\n\n\t\t\tif (this.runtime.disposed) {\n\t\t\t\trejectBecauseDispose();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.runtime.on(\"dispose\", rejectBecauseDispose);\n\t\t\texecutor(resolve, reject);\n\t\t}).finally(() => {\n\t\t\tthis.runtime.off(\"dispose\", rejectBecauseDispose);\n\t\t});\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dataStore.js","sourceRoot":"","sources":["../src/dataStore.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 { ITelemetryLoggerExt, TelemetryDataTag, UsageError } from \"@fluidframework/telemetry-utils\";\nimport { assert, unreachableCase } from \"@fluidframework/core-utils\";\nimport { AttachState } from \"@fluidframework/container-definitions\";\nimport { FluidObject, IFluidHandle, IRequest, IResponse } from \"@fluidframework/core-interfaces\";\nimport {\n\tAliasResult,\n\tIDataStore,\n\tIFluidDataStoreChannel,\n} from \"@fluidframework/runtime-definitions\";\nimport { ContainerRuntime } from \"./containerRuntime\";\nimport { DataStores } from \"./dataStores\";\n\n/**\n * Interface for an op to be used for assigning an\n * alias to a datastore\n */\nexport interface IDataStoreAliasMessage {\n\t/** The internal id of the datastore */\n\treadonly internalId: string;\n\t/** The alias name to be assigned to the datastore */\n\treadonly alias: string;\n}\n\n/**\n * Type guard that returns true if the given alias message is actually an instance of\n * a class which implements {@link IDataStoreAliasMessage}\n * @param maybeDataStoreAliasMessage - message object to be validated\n * @returns True if the {@link IDataStoreAliasMessage} is fully implemented, false otherwise\n */\nexport const isDataStoreAliasMessage = (\n\tmaybeDataStoreAliasMessage: any,\n): maybeDataStoreAliasMessage is IDataStoreAliasMessage => {\n\treturn (\n\t\ttypeof maybeDataStoreAliasMessage?.internalId === \"string\" &&\n\t\ttypeof maybeDataStoreAliasMessage?.alias === \"string\"\n\t);\n};\n\nexport const channelToDataStore = (\n\tfluidDataStoreChannel: IFluidDataStoreChannel,\n\tinternalId: string,\n\truntime: ContainerRuntime,\n\tdatastores: DataStores,\n\tlogger: ITelemetryLoggerExt,\n): IDataStore => new DataStore(fluidDataStoreChannel, internalId, runtime, datastores, logger);\n\nenum AliasState {\n\tAliased = \"Aliased\",\n\tAliasing = \"Aliasing\",\n\tNone = \"None\",\n}\n\nclass DataStore implements IDataStore {\n\tprivate aliasState: AliasState = AliasState.None;\n\tprivate alias: string | undefined;\n\tprivate readonly pendingAliases: Map<string, Promise<AliasResult>>;\n\tprivate aliasResult: Promise<AliasResult> | undefined;\n\n\t/**\n\t * {@inheritDoc @fluidframework/runtime-definitions#IDataStore.trySetAlias}\n\t */\n\tasync trySetAlias(alias: string): Promise<AliasResult> {\n\t\tif (alias.includes(\"/\")) {\n\t\t\tthrow new UsageError(`The alias cannot contain slashes: '${alias}'`);\n\t\t}\n\n\t\tswitch (this.aliasState) {\n\t\t\t// If we're already aliasing, check if it's for the same value and return\n\t\t\t// the stored promise, otherwise return 'AlreadyAliased'\n\t\t\tcase AliasState.Aliasing:\n\t\t\t\tassert(\n\t\t\t\t\tthis.aliasResult !== undefined,\n\t\t\t\t\t0x316 /* There should be a cached promise of in-progress aliasing */,\n\t\t\t\t);\n\t\t\t\tawait this.aliasResult;\n\t\t\t\treturn this.alias === alias ? \"Success\" : \"AlreadyAliased\";\n\n\t\t\t// If this datastore is already aliased, return true only if this\n\t\t\t// is a repeated call for the same alias\n\t\t\tcase AliasState.Aliased:\n\t\t\t\treturn this.alias === alias ? \"Success\" : \"AlreadyAliased\";\n\n\t\t\tcase AliasState.None: {\n\t\t\t\tconst existingAlias = this.pendingAliases.get(alias);\n\t\t\t\tif (existingAlias !== undefined) {\n\t\t\t\t\t// There is already another datastore which will be aliased\n\t\t\t\t\t// to the same name\n\t\t\t\t\treturn \"Conflict\";\n\t\t\t\t}\n\n\t\t\t\t// There is no current or past alias operation for this datastore,\n\t\t\t\t// or for this alias, so it is safe to continue execution\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tunreachableCase(this.aliasState);\n\t\t}\n\n\t\tthis.aliasState = AliasState.Aliasing;\n\t\tthis.aliasResult = this.trySetAliasInternal(alias);\n\t\tthis.pendingAliases.set(alias, this.aliasResult);\n\t\treturn this.aliasResult;\n\t}\n\n\tasync trySetAliasInternal(alias: string): Promise<AliasResult> {\n\t\tconst message: IDataStoreAliasMessage = {\n\t\t\tinternalId: this.internalId,\n\t\t\talias,\n\t\t};\n\n\t\tthis.fluidDataStoreChannel.makeVisibleAndAttachGraph();\n\n\t\tif (this.runtime.attachState === AttachState.Detached) {\n\t\t\tconst localResult = this.datastores.processAliasMessageCore(message);\n\t\t\t// Explicitly lock-out future attempts of aliasing,\n\t\t\t// regardless of result\n\t\t\tthis.aliasState = AliasState.Aliased;\n\t\t\treturn localResult ? \"Success\" : \"Conflict\";\n\t\t}\n\n\t\tconst aliased = await this.ackBasedPromise<boolean>((resolve) => {\n\t\t\tthis.runtime.submitDataStoreAliasOp(message, resolve);\n\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tthis.logger.sendErrorEvent(\n\t\t\t\t\t{\n\t\t\t\t\t\teventName: \"AliasingException\",\n\t\t\t\t\t\talias: {\n\t\t\t\t\t\t\tvalue: alias,\n\t\t\t\t\t\t\ttag: TelemetryDataTag.UserData,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinternalId: {\n\t\t\t\t\t\t\tvalue: this.internalId,\n\t\t\t\t\t\t\ttag: TelemetryDataTag.CodeArtifact,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\terror,\n\t\t\t\t);\n\n\t\t\t\treturn false;\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis.pendingAliases.delete(alias);\n\t\t\t});\n\n\t\tif (!aliased) {\n\t\t\tthis.aliasState = AliasState.None;\n\t\t\tthis.aliasResult = undefined;\n\t\t\treturn \"Conflict\";\n\t\t}\n\n\t\tthis.alias = alias;\n\t\tthis.aliasState = AliasState.Aliased;\n\t\treturn \"Success\";\n\t}\n\n\t/**\n\t * @deprecated Will be removed in future major release. Migrate all usage of IFluidRouter to the \"entryPoint\" pattern. Refer to Removing-IFluidRouter.md\n\t */\n\tpublic async request(request: IRequest): Promise<IResponse> {\n\t\treturn this.fluidDataStoreChannel.request(request);\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/runtime-definitions#IDataStore.entryPoint}\n\t */\n\tget entryPoint(): IFluidHandle<FluidObject> {\n\t\treturn this.fluidDataStoreChannel.entryPoint;\n\t}\n\n\tconstructor(\n\t\tprivate readonly fluidDataStoreChannel: IFluidDataStoreChannel,\n\t\tprivate readonly internalId: string,\n\t\tprivate readonly runtime: ContainerRuntime,\n\t\tprivate readonly datastores: DataStores,\n\t\tprivate readonly logger: ITelemetryLoggerExt,\n\t) {\n\t\tthis.pendingAliases = datastores.pendingAliases;\n\t}\n\n\t/**\n\t * @deprecated Will be removed in future major release. Migrate all usage of IFluidRouter to the \"entryPoint\" pattern. Refer to Removing-IFluidRouter.md\n\t */\n\tpublic get IFluidRouter() {\n\t\treturn this.fluidDataStoreChannel;\n\t}\n\n\tprivate async ackBasedPromise<T>(\n\t\texecutor: (\n\t\t\tresolve: (value: T | PromiseLike<T>) => void,\n\t\t\treject: (reason?: any) => void,\n\t\t) => void,\n\t): Promise<T> {\n\t\tlet rejectBecauseDispose: () => void;\n\t\treturn new Promise<T>((resolve, reject) => {\n\t\t\trejectBecauseDispose = () =>\n\t\t\t\treject(\n\t\t\t\t\tnew Error(\"ContainerRuntime disposed while this ack-based Promise was pending\"),\n\t\t\t\t);\n\n\t\t\tif (this.runtime.disposed) {\n\t\t\t\trejectBecauseDispose();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.runtime.on(\"dispose\", rejectBecauseDispose);\n\t\t\texecutor(resolve, reject);\n\t\t}).finally(() => {\n\t\t\tthis.runtime.off(\"dispose\", rejectBecauseDispose);\n\t\t});\n\t}\n}\n"]}
|
|
@@ -212,7 +212,13 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
|
|
|
212
212
|
*
|
|
213
213
|
*/
|
|
214
214
|
setChannelDirty(address: string): void;
|
|
215
|
-
|
|
215
|
+
/**
|
|
216
|
+
* Submits the signal to be sent to other clients.
|
|
217
|
+
* @param type - Type of the signal.
|
|
218
|
+
* @param content - Content of the signal.
|
|
219
|
+
* @param targetClientId - When specified, the signal is only sent to the provided client id.
|
|
220
|
+
*/
|
|
221
|
+
submitSignal(type: string, content: any, targetClientId?: string): void;
|
|
216
222
|
/**
|
|
217
223
|
* This is called by the data store channel when it becomes locally visible indicating that it is ready to become
|
|
218
224
|
* globally visible now.
|
|
@@ -229,7 +235,7 @@ export declare abstract class FluidDataStoreContext extends TypedEventEmitter<IF
|
|
|
229
235
|
*/
|
|
230
236
|
setInMemoryRoot(): void;
|
|
231
237
|
/**
|
|
232
|
-
* @deprecated
|
|
238
|
+
* @deprecated The functionality to get base GC details has been moved to summarizer node.
|
|
233
239
|
*/
|
|
234
240
|
getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase>;
|
|
235
241
|
reSubmit(contents: any, localOpMetadata: unknown): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataStoreContext.d.ts","sourceRoot":"","sources":["../src/dataStoreContext.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,WAAW,EACX,WAAW,EACX,QAAQ,EACR,SAAS,EACT,YAAY,EAEZ,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACN,SAAS,EACT,aAAa,EACb,WAAW,EACX,cAAc,EACd,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAU,QAAQ,EAAe,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,OAAO,EACN,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,yBAAyB,EACzB,aAAa,EACb,UAAU,EACV,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAEN,2BAA2B,EAC3B,8BAA8B,EAE9B,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,8BAA8B,EAC9B,4BAA4B,EAC5B,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,qBAAqB,EACrB,6BAA6B,EAE7B,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EAEjB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAMN,mBAAmB,EAEnB,iBAAiB,EAGjB,MAAM,iCAAiC,CAAC;AAWzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AActD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,EAAE,eAAe,EAAE,OAAO,GAAG,UAAU,CAGjG;AAED,UAAU,gBAAgB;IACzB,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,aAAa,CAAC;CACzB;AAOD,gEAAgE;AAChE,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,sBAAsB,EAAE,2BAA2B,CAAC;IAC7D,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;CAClC;AAED,sEAAsE;AACtE,MAAM,WAAW,gCAAiC,SAAQ,2BAA2B;IACpF,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,YAAY,EAAE,aAAa,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,eAAe,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,IAAI,CAAC;IAC1C;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC;CAC3B;AAED,uEAAuE;AACvE,MAAM,WAAW,iCAAkC,SAAQ,2BAA2B;IACrF,QAAQ,CAAC,YAAY,EAAE,aAAa,GAAG,SAAS,CAAC;CACjD;AAED;;GAEG;AACH,8BAAsB,qBACrB,SAAQ,iBAAiB,CAAC,4BAA4B,CACtD,YAAW,sBAAsB,EAAE,WAAW;IAyI7C,OAAO,CAAC,QAAQ,CAAC,QAAQ;aACT,gBAAgB,EAAE,OAAO;IACzC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IAzItC,IAAW,WAAW,IAAI,SAAS,MAAM,EAAE,CAG1C;IAED,IAAW,OAAO,IAAI,cAAc,CAEnC;IAED,IAAW,QAAQ,IAAI,MAAM,GAAG,SAAS,CAExC;IAED,IAAW,aAAa,IAAI,cAAc,CAEzC;IAED,IAAW,MAAM,IAAI,mBAAmB,CAEvC;IAED,IAAW,YAAY,IAAI,aAAa,CAAC,yBAAyB,EAAE,gBAAgB,CAAC,CAEpF;IAED,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED,IAAW,mBAAmB,kEAE7B;IAED,IAAW,gBAAgB,IAAI,iBAAiB,CAE/C;IAEM,wBAAwB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC;IAIxD,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,IAAW,YAAY,IAAI,aAAa,GAAG,SAAS,CAEnD;IAED,IAAW,YAAY,IAAI,CAAC,iBAAiB,GAAG,aAAa,CAAC,GAAG,SAAS,CAEzE;IAED,OAAO,CAAC,SAAS,CAAS;IAC1B,IAAW,QAAQ,YAElB;IAED;;;OAGG;IACH,OAAO,CAAC,WAAW,CAAS;IAC5B,IAAW,UAAU,YAEpB;IACD,mEAAmE;IACnE,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAU;IAEhD,2GAA2G;IAC3G,OAAO,CAAC,OAAO,CAAkB;IAEjC,IAAW,WAAW,IAAI,WAAW,CAEpC;IAED,IAAW,uBAAuB,IAAI,uBAAuB,GAAG,SAAS,CAExE;IAED;;;;;OAKG;IACU,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAIvC;;;;;;OAMG;IACH,SAAS,CAAC,cAAc,IAAI,OAAO;IAInC,SAAS,CAAC,QAAQ,EAAE,uBAAuB,GAAG,SAAS,CAAC;IAExD,SAAS,CAAC,uBAAuB,UAAS;IAC1C,SAAS,CAAC,OAAO,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACtD,OAAO,CAAC,MAAM,CAAS;IACvB,SAAS,CAAC,OAAO,EAAE,yBAAyB,EAAE,GAAG,SAAS,CAAM;IAChE,SAAS,CAAC,eAAe,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAAG,SAAS,CAAC;IACxE,OAAO,CAAC,aAAa,CAA4B;IACjD,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,OAAO,CAAC,eAAe,CAAkB;IACzC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;IACzD,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAC;IACzC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAmB;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAQ;IAExD;;;;OAIG;IACH,OAAO,CAAC,0BAA0B,CAAS;IAI3C,OAAO,CAAC,cAAc,CAAuB;IAE7C,SAAgB,EAAE,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IACrD,SAAgB,OAAO,EAAE,uBAAuB,CAAC;IACjD,SAAgB,KAAK,EAAE,WAAW,CAAC;IACnC,SAAS,CAAC,GAAG,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;gBAGjC,KAAK,EAAE,2BAA2B,EACjB,QAAQ,EAAE,OAAO,EAClB,gBAAgB,EAAE,OAAO,EACxB,oBAAoB,EAAE,MAAM,IAAI;IAsD3C,OAAO,IAAI,IAAI;IAiBtB;;;;OAIG;IACI,MAAM;IAIN,YAAY,CAAC,SAAS,EAAE,OAAO;IAQtC,OAAO,CAAC,qBAAqB;IAchB,OAAO,IAAI,OAAO,CAAC,sBAAsB,CAAC;cAsBvC,sBAAsB,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE;;;;YAiCrD,WAAW;
|
|
1
|
+
{"version":3,"file":"dataStoreContext.d.ts","sourceRoot":"","sources":["../src/dataStoreContext.ts"],"names":[],"mappings":"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"}
|
package/lib/dataStoreContext.js
CHANGED
|
@@ -236,6 +236,11 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
236
236
|
const channel = await factory.instantiateDataStore(this, existing);
|
|
237
237
|
assert(channel !== undefined, 0x140 /* "undefined channel on datastore context" */);
|
|
238
238
|
this.bindRuntime(channel);
|
|
239
|
+
// This data store may have been disposed before the channel is created during realization. If so,
|
|
240
|
+
// dispose the channel now.
|
|
241
|
+
if (this.disposed) {
|
|
242
|
+
channel.dispose();
|
|
243
|
+
}
|
|
239
244
|
}
|
|
240
245
|
/**
|
|
241
246
|
* Notifies this object about changes in the connection state.
|
|
@@ -443,10 +448,16 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
443
448
|
channelSummarizerNode.invalidate(latestSequenceNumber); // TODO: lazy load problem?
|
|
444
449
|
}
|
|
445
450
|
}
|
|
446
|
-
|
|
451
|
+
/**
|
|
452
|
+
* Submits the signal to be sent to other clients.
|
|
453
|
+
* @param type - Type of the signal.
|
|
454
|
+
* @param content - Content of the signal.
|
|
455
|
+
* @param targetClientId - When specified, the signal is only sent to the provided client id.
|
|
456
|
+
*/
|
|
457
|
+
submitSignal(type, content, targetClientId) {
|
|
447
458
|
this.verifyNotClosed("submitSignal");
|
|
448
459
|
assert(!!this.channel, 0x147 /* "Channel must exist on submitting signal" */);
|
|
449
|
-
return this._containerRuntime.submitDataStoreSignal(this.id, type, content);
|
|
460
|
+
return this._containerRuntime.submitDataStoreSignal(this.id, type, content, targetClientId);
|
|
450
461
|
}
|
|
451
462
|
/**
|
|
452
463
|
* This is called by the data store channel when it becomes locally visible indicating that it is ready to become
|
|
@@ -512,7 +523,7 @@ export class FluidDataStoreContext extends TypedEventEmitter {
|
|
|
512
523
|
this._isInMemoryRoot = true;
|
|
513
524
|
}
|
|
514
525
|
/**
|
|
515
|
-
* @deprecated
|
|
526
|
+
* @deprecated The functionality to get base GC details has been moved to summarizer node.
|
|
516
527
|
*/
|
|
517
528
|
async getBaseGCDetails() {
|
|
518
529
|
return {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataStoreContext.js","sourceRoot":"","sources":["../src/dataStoreContext.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 {\n\tIDisposable,\n\tFluidObject,\n\tIRequest,\n\tIResponse,\n\tIFluidHandle,\n\tITelemetryProperties,\n} from \"@fluidframework/core-interfaces\";\nimport {\n\tIAudience,\n\tIDeltaManager,\n\tAttachState,\n\tILoaderOptions,\n} from \"@fluidframework/container-definitions\";\nimport { TypedEventEmitter } from \"@fluid-internal/client-utils\";\nimport { assert, Deferred, LazyPromise } from \"@fluidframework/core-utils\";\nimport { IDocumentStorageService } from \"@fluidframework/driver-definitions\";\nimport { BlobTreeEntry, readAndParse } from \"@fluidframework/driver-utils\";\nimport {\n\tIClientDetails,\n\tIDocumentMessage,\n\tIQuorumClients,\n\tISequencedDocumentMessage,\n\tISnapshotTree,\n\tITreeEntry,\n} from \"@fluidframework/protocol-definitions\";\nimport { IContainerRuntime } from \"@fluidframework/container-runtime-definitions\";\nimport {\n\tchannelsTreeName,\n\tCreateChildSummarizerNodeFn,\n\tCreateChildSummarizerNodeParam,\n\tFluidDataStoreRegistryEntry,\n\tIAttachMessage,\n\tIFluidDataStoreChannel,\n\tIFluidDataStoreContext,\n\tIFluidDataStoreContextDetached,\n\tIFluidDataStoreContextEvents,\n\tIFluidDataStoreRegistry,\n\tIGarbageCollectionData,\n\tIGarbageCollectionDetailsBase,\n\tIInboundSignalMessage,\n\tIProvideFluidDataStoreFactory,\n\tISummarizeInternalResult,\n\tISummarizeResult,\n\tISummarizerNodeWithGC,\n\tSummarizeInternalFn,\n\tITelemetryContext,\n\tIIdCompressor,\n\tIIdCompressorCore,\n\tVisibilityState,\n} from \"@fluidframework/runtime-definitions\";\nimport { addBlobToSummary, convertSummaryTreeToITree } from \"@fluidframework/runtime-utils\";\nimport {\n\tcreateChildMonitoringContext,\n\tDataCorruptionError,\n\tDataProcessingError,\n\textractSafePropertiesFromMessage,\n\tgenerateStack,\n\tITelemetryLoggerExt,\n\tLoggingError,\n\tMonitoringContext,\n\ttagCodeArtifacts,\n\tThresholdCounter,\n} from \"@fluidframework/telemetry-utils\";\nimport {\n\tdataStoreAttributesBlobName,\n\thasIsolatedChannels,\n\twrapSummaryInChannelsTree,\n\tReadFluidDataStoreAttributes,\n\tWriteFluidDataStoreAttributes,\n\tgetAttributesFormatVersion,\n\tgetFluidDataStoreAttributes,\n\tsummarizerClientType,\n} from \"./summary\";\nimport { ContainerRuntime } from \"./containerRuntime\";\nimport { sendGCUnexpectedUsageEvent } from \"./gc\";\n\nfunction createAttributes(\n\tpkg: readonly string[],\n\tisRootDataStore: boolean,\n): WriteFluidDataStoreAttributes {\n\tconst stringifiedPkg = JSON.stringify(pkg);\n\treturn {\n\t\tpkg: stringifiedPkg,\n\t\tsummaryFormatVersion: 2,\n\t\tisRootDataStore,\n\t};\n}\nexport function createAttributesBlob(pkg: readonly string[], isRootDataStore: boolean): ITreeEntry {\n\tconst attributes = createAttributes(pkg, isRootDataStore);\n\treturn new BlobTreeEntry(dataStoreAttributesBlobName, JSON.stringify(attributes));\n}\n\ninterface ISnapshotDetails {\n\tpkg: readonly string[];\n\tisRootDataStore: boolean;\n\tsnapshot?: ISnapshotTree;\n}\n\ninterface FluidDataStoreMessage {\n\tcontent: any;\n\ttype: string;\n}\n\n/** Properties necessary for creating a FluidDataStoreContext */\nexport interface IFluidDataStoreContextProps {\n\treadonly id: string;\n\treadonly runtime: ContainerRuntime;\n\treadonly storage: IDocumentStorageService;\n\treadonly scope: FluidObject;\n\treadonly createSummarizerNodeFn: CreateChildSummarizerNodeFn;\n\treadonly pkg?: Readonly<string[]>;\n}\n\n/** Properties necessary for creating a local FluidDataStoreContext */\nexport interface ILocalFluidDataStoreContextProps extends IFluidDataStoreContextProps {\n\treadonly pkg: Readonly<string[]> | undefined;\n\treadonly snapshotTree: ISnapshotTree | undefined;\n\treadonly isRootDataStore: boolean | undefined;\n\treadonly makeLocallyVisibleFn: () => void;\n\t/**\n\t * @deprecated 0.16 Issue #1635, #3631\n\t */\n\treadonly createProps?: any;\n}\n\n/** Properties necessary for creating a remote FluidDataStoreContext */\nexport interface IRemoteFluidDataStoreContextProps extends IFluidDataStoreContextProps {\n\treadonly snapshotTree: ISnapshotTree | undefined;\n}\n\n/**\n * Represents the context for the store. This context is passed to the store runtime.\n */\nexport abstract class FluidDataStoreContext\n\textends TypedEventEmitter<IFluidDataStoreContextEvents>\n\timplements IFluidDataStoreContext, IDisposable\n{\n\tpublic get packagePath(): readonly string[] {\n\t\tassert(this.pkg !== undefined, 0x139 /* \"Undefined package path\" */);\n\t\treturn this.pkg;\n\t}\n\n\tpublic get options(): ILoaderOptions {\n\t\treturn this._containerRuntime.options;\n\t}\n\n\tpublic get clientId(): string | undefined {\n\t\treturn this._containerRuntime.clientId;\n\t}\n\n\tpublic get clientDetails(): IClientDetails {\n\t\treturn this._containerRuntime.clientDetails;\n\t}\n\n\tpublic get logger(): ITelemetryLoggerExt {\n\t\treturn this._containerRuntime.logger;\n\t}\n\n\tpublic get deltaManager(): IDeltaManager<ISequencedDocumentMessage, IDocumentMessage> {\n\t\treturn this._containerRuntime.deltaManager;\n\t}\n\n\tpublic get connected(): boolean {\n\t\treturn this._containerRuntime.connected;\n\t}\n\n\tpublic get IFluidHandleContext() {\n\t\treturn this._containerRuntime.IFluidHandleContext;\n\t}\n\n\tpublic get containerRuntime(): IContainerRuntime {\n\t\treturn this._containerRuntime;\n\t}\n\n\tpublic ensureNoDataModelChanges<T>(callback: () => T): T {\n\t\treturn this._containerRuntime.ensureNoDataModelChanges(callback);\n\t}\n\n\tpublic get isLoaded(): boolean {\n\t\treturn this.loaded;\n\t}\n\n\tpublic get baseSnapshot(): ISnapshotTree | undefined {\n\t\treturn this._baseSnapshot;\n\t}\n\n\tpublic get idCompressor(): (IIdCompressorCore & IIdCompressor) | undefined {\n\t\treturn this._containerRuntime.idCompressor;\n\t}\n\n\tprivate _disposed = false;\n\tpublic get disposed() {\n\t\treturn this._disposed;\n\t}\n\n\t/**\n\t * Tombstone is a temporary feature that prevents a data store from sending / receiving ops, signals and from\n\t * loading.\n\t */\n\tprivate _tombstoned = false;\n\tpublic get tombstoned() {\n\t\treturn this._tombstoned;\n\t}\n\t/** If true, throw an error when a tombstone data store is used. */\n\tprivate readonly throwOnTombstoneUsage: boolean;\n\n\t/** If true, this means that this data store context and its children have been removed from the runtime */\n\tprivate deleted: boolean = false;\n\n\tpublic get attachState(): AttachState {\n\t\treturn this._attachState;\n\t}\n\n\tpublic get IFluidDataStoreRegistry(): IFluidDataStoreRegistry | undefined {\n\t\treturn this.registry;\n\t}\n\n\t/**\n\t * A datastore is considered as root if it\n\t * 1. is root in memory - see isInMemoryRoot\n\t * 2. is root as part of the base snapshot that the datastore loaded from\n\t * @returns whether a datastore is root\n\t */\n\tpublic async isRoot(): Promise<boolean> {\n\t\treturn this.isInMemoryRoot() || (await this.getInitialSnapshotDetails()).isRootDataStore;\n\t}\n\n\t/**\n\t * There are 3 states where isInMemoryRoot needs to be true\n\t * 1. when a datastore becomes aliased. This can happen for both remote and local datastores\n\t * 2. when a datastore is created locally as root\n\t * 3. when a datastore is created locally as root and is rehydrated\n\t * @returns whether a datastore is root in memory\n\t */\n\tprotected isInMemoryRoot(): boolean {\n\t\treturn this._isInMemoryRoot;\n\t}\n\n\tprotected registry: IFluidDataStoreRegistry | undefined;\n\n\tprotected detachedRuntimeCreation = false;\n\tprotected channel: IFluidDataStoreChannel | undefined;\n\tprivate loaded = false;\n\tprotected pending: ISequencedDocumentMessage[] | undefined = [];\n\tprotected channelDeferred: Deferred<IFluidDataStoreChannel> | undefined;\n\tprivate _baseSnapshot: ISnapshotTree | undefined;\n\tprotected _attachState: AttachState;\n\tprivate _isInMemoryRoot: boolean = false;\n\tprotected readonly summarizerNode: ISummarizerNodeWithGC;\n\tprotected readonly mc: MonitoringContext;\n\tprivate readonly thresholdOpsCounter: ThresholdCounter;\n\tprivate static readonly pendingOpsCountThreshold = 1000;\n\n\t/**\n\t * If the summarizer makes local changes, a telemetry event is logged. This has the potential to be very noisy.\n\t * So, adding a count of how many telemetry events are logged per data store context. This can be\n\t * controlled via feature flags.\n\t */\n\tprivate localChangesTelemetryCount: number;\n\n\t// The used routes of this node as per the last GC run. This is used to update the used routes of the channel\n\t// if it realizes after GC is run.\n\tprivate lastUsedRoutes: string[] | undefined;\n\n\tpublic readonly id: string;\n\tprivate readonly _containerRuntime: ContainerRuntime;\n\tpublic readonly storage: IDocumentStorageService;\n\tpublic readonly scope: FluidObject;\n\tprotected pkg?: readonly string[];\n\n\tconstructor(\n\t\tprops: IFluidDataStoreContextProps,\n\t\tprivate readonly existing: boolean,\n\t\tpublic readonly isLocalDataStore: boolean,\n\t\tprivate readonly makeLocallyVisibleFn: () => void,\n\t) {\n\t\tsuper();\n\n\t\tthis._containerRuntime = props.runtime;\n\t\tthis.id = props.id;\n\t\tthis.storage = props.storage;\n\t\tthis.scope = props.scope;\n\t\tthis.pkg = props.pkg;\n\n\t\t// URIs use slashes as delimiters. Handles use URIs.\n\t\t// Thus having slashes in types almost guarantees trouble down the road!\n\t\tassert(!this.id.includes(\"/\"), 0x13a /* Data store ID contains slash */);\n\n\t\tthis._attachState =\n\t\t\tthis.containerRuntime.attachState !== AttachState.Detached && this.existing\n\t\t\t\t? this.containerRuntime.attachState\n\t\t\t\t: AttachState.Detached;\n\n\t\tconst thisSummarizeInternal = async (\n\t\t\tfullTree: boolean,\n\t\t\ttrackState: boolean,\n\t\t\ttelemetryContext?: ITelemetryContext,\n\t\t) => this.summarizeInternal(fullTree, trackState, telemetryContext);\n\n\t\tthis.summarizerNode = props.createSummarizerNodeFn(\n\t\t\tthisSummarizeInternal,\n\t\t\tasync (fullGC?: boolean) => this.getGCDataInternal(fullGC),\n\t\t);\n\n\t\tthis.mc = createChildMonitoringContext({\n\t\t\tlogger: this.logger,\n\t\t\tnamespace: \"FluidDataStoreContext\",\n\t\t\tproperties: {\n\t\t\t\tall: tagCodeArtifacts({\n\t\t\t\t\tfluidDataStoreId: this.id,\n\t\t\t\t\t// The package name is a getter because `this.pkg` may not be initialized during construction.\n\t\t\t\t\t// For data stores loaded from summary, it is initialized during data store realization.\n\t\t\t\t\tfullPackageName: () => this.pkg?.join(\"/\"),\n\t\t\t\t}),\n\t\t\t},\n\t\t});\n\t\tthis.thresholdOpsCounter = new ThresholdCounter(\n\t\t\tFluidDataStoreContext.pendingOpsCountThreshold,\n\t\t\tthis.mc.logger,\n\t\t);\n\n\t\tthis.throwOnTombstoneUsage = this._containerRuntime.gcThrowOnTombstoneUsage;\n\n\t\t// By default, a data store can log maximum 10 local changes telemetry in summarizer.\n\t\tthis.localChangesTelemetryCount =\n\t\t\tthis.mc.config.getNumber(\"Fluid.Telemetry.LocalChangesTelemetryCount\") ?? 10;\n\t}\n\n\tpublic dispose(): void {\n\t\tif (this._disposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis._disposed = true;\n\n\t\t// Dispose any pending runtime after it gets fulfilled\n\t\t// Errors are logged where this.channelDeferred is consumed/generated (realizeCore(), bindRuntime())\n\t\tif (this.channelDeferred) {\n\t\t\tthis.channelDeferred.promise\n\t\t\t\t.then((runtime) => {\n\t\t\t\t\truntime.dispose();\n\t\t\t\t})\n\t\t\t\t.catch((error) => {});\n\t\t}\n\t}\n\n\t/**\n\t * When delete is called, that means that the data store is permanently removed from the runtime, and will not show up in future summaries\n\t * This function is called to prevent ops from being generated from this data store once it has been deleted. Furthermore, this data store\n\t * should not receive any ops/signals.\n\t */\n\tpublic delete() {\n\t\tthis.deleted = true;\n\t}\n\n\tpublic setTombstone(tombstone: boolean) {\n\t\tif (this.tombstoned === tombstone) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._tombstoned = tombstone;\n\t}\n\n\tprivate rejectDeferredRealize(\n\t\treason: string,\n\t\tfailedPkgPath?: string,\n\t\tfullPackageName?: readonly string[],\n\t): never {\n\t\tthrow new LoggingError(\n\t\t\treason,\n\t\t\ttagCodeArtifacts({\n\t\t\t\tfailedPkgPath,\n\t\t\t\tpackagePath: fullPackageName?.join(\"/\"),\n\t\t\t}),\n\t\t);\n\t}\n\n\tpublic async realize(): Promise<IFluidDataStoreChannel> {\n\t\tassert(!this.detachedRuntimeCreation, 0x13d /* \"Detached runtime creation on realize()\" */);\n\t\tif (!this.channelDeferred) {\n\t\t\tthis.channelDeferred = new Deferred<IFluidDataStoreChannel>();\n\t\t\tthis.realizeCore(this.existing).catch((error) => {\n\t\t\t\tconst errorWrapped = DataProcessingError.wrapIfUnrecognized(\n\t\t\t\t\terror,\n\t\t\t\t\t\"realizeFluidDataStoreContext\",\n\t\t\t\t);\n\t\t\t\terrorWrapped.addTelemetryProperties(\n\t\t\t\t\ttagCodeArtifacts({\n\t\t\t\t\t\tfullPackageName: this.pkg?.join(\"/\"),\n\t\t\t\t\t\tfluidDataStoreId: this.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tthis.channelDeferred?.reject(errorWrapped);\n\t\t\t\tthis.mc.logger.sendErrorEvent({ eventName: \"RealizeError\" }, errorWrapped);\n\t\t\t});\n\t\t}\n\t\treturn this.channelDeferred.promise;\n\t}\n\n\tprotected async factoryFromPackagePath(packages?: readonly string[]) {\n\t\tassert(this.pkg === packages, 0x13e /* \"Unexpected package path\" */);\n\t\tif (packages === undefined) {\n\t\t\tthis.rejectDeferredRealize(\"packages is undefined\");\n\t\t}\n\n\t\tlet entry: FluidDataStoreRegistryEntry | undefined;\n\t\tlet registry: IFluidDataStoreRegistry | undefined =\n\t\t\tthis._containerRuntime.IFluidDataStoreRegistry;\n\t\tlet lastPkg: string | undefined;\n\t\tfor (const pkg of packages) {\n\t\t\tif (!registry) {\n\t\t\t\tthis.rejectDeferredRealize(\"No registry for package\", lastPkg, packages);\n\t\t\t}\n\t\t\tlastPkg = pkg;\n\t\t\tentry = await registry.get(pkg);\n\t\t\tif (!entry) {\n\t\t\t\tthis.rejectDeferredRealize(\n\t\t\t\t\t\"Registry does not contain entry for the package\",\n\t\t\t\t\tpkg,\n\t\t\t\t\tpackages,\n\t\t\t\t);\n\t\t\t}\n\t\t\tregistry = entry.IFluidDataStoreRegistry;\n\t\t}\n\t\tconst factory = entry?.IFluidDataStoreFactory;\n\t\tif (factory === undefined) {\n\t\t\tthis.rejectDeferredRealize(\"Can't find factory for package\", lastPkg, packages);\n\t\t}\n\n\t\treturn { factory, registry };\n\t}\n\n\tprivate async realizeCore(existing: boolean): Promise<void> {\n\t\tconst details = await this.getInitialSnapshotDetails();\n\t\t// Base snapshot is the baseline where pending ops are applied to.\n\t\t// It is important that this be in sync with the pending ops, and also\n\t\t// that it is set here, before bindRuntime is called.\n\t\tthis._baseSnapshot = details.snapshot;\n\t\tconst packages = details.pkg;\n\n\t\tconst { factory, registry } = await this.factoryFromPackagePath(packages);\n\n\t\tassert(\n\t\t\tthis.registry === undefined,\n\t\t\t0x13f /* \"datastore context registry is already set\" */,\n\t\t);\n\t\tthis.registry = registry;\n\n\t\tconst channel = await factory.instantiateDataStore(this, existing);\n\t\tassert(channel !== undefined, 0x140 /* \"undefined channel on datastore context\" */);\n\t\tthis.bindRuntime(channel);\n\t}\n\n\t/**\n\t * Notifies this object about changes in the connection state.\n\t * @param value - New connection state.\n\t * @param clientId - ID of the client. Its old ID when in disconnected state and\n\t * its new client ID when we are connecting or connected.\n\t */\n\tpublic setConnectionState(connected: boolean, clientId?: string) {\n\t\t// ConnectionState should not fail in tombstone mode as this is internally run\n\t\tthis.verifyNotClosed(\"setConnectionState\", false /* checkTombstone */);\n\n\t\t// Connection events are ignored if the store is not yet loaded\n\t\tif (!this.loaded) {\n\t\t\treturn;\n\t\t}\n\n\t\tassert(this.connected === connected, 0x141 /* \"Unexpected connected state\" */);\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tthis.channel!.setConnectionState(connected, clientId);\n\t}\n\n\tpublic process(\n\t\tmessageArg: ISequencedDocumentMessage,\n\t\tlocal: boolean,\n\t\tlocalOpMetadata: unknown,\n\t): void {\n\t\tconst safeTelemetryProps = extractSafePropertiesFromMessage(messageArg);\n\t\t// On op process, tombstone error is logged in garbage collector. So, set \"checkTombstone\" to false when calling\n\t\t// \"verifyNotClosed\" which logs tombstone errors. Throw error if tombstoned and throwing on load is configured.\n\t\tthis.verifyNotClosed(\"process\", false /* checkTombstone */, safeTelemetryProps);\n\t\tif (this.tombstoned && this.throwOnTombstoneUsage) {\n\t\t\tthrow new DataCorruptionError(\n\t\t\t\t\"Context is tombstoned! Call site [process]\",\n\t\t\t\tsafeTelemetryProps,\n\t\t\t);\n\t\t}\n\n\t\tconst innerContents = messageArg.contents as FluidDataStoreMessage;\n\t\tconst message = {\n\t\t\t...messageArg,\n\t\t\ttype: innerContents.type,\n\t\t\tcontents: innerContents.content,\n\t\t};\n\n\t\tthis.summarizerNode.recordChange(message);\n\n\t\tif (this.loaded) {\n\t\t\treturn this.channel?.process(message, local, localOpMetadata);\n\t\t} else {\n\t\t\tassert(!local, 0x142 /* \"local store channel is not loaded\" */);\n\t\t\tassert(this.pending !== undefined, 0x23d /* \"pending is undefined\" */);\n\t\t\tthis.pending.push(message);\n\t\t\tthis.thresholdOpsCounter.sendIfMultiple(\"StorePendingOps\", this.pending.length);\n\t\t}\n\t}\n\n\tpublic processSignal(message: IInboundSignalMessage, local: boolean): void {\n\t\tthis.verifyNotClosed(\"processSignal\");\n\n\t\t// Signals are ignored if the store is not yet loaded\n\t\tif (!this.loaded) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.channel?.processSignal(message, local);\n\t}\n\n\tpublic getQuorum(): IQuorumClients {\n\t\treturn this._containerRuntime.getQuorum();\n\t}\n\n\tpublic getAudience(): IAudience {\n\t\treturn this._containerRuntime.getAudience();\n\t}\n\n\t/**\n\t * Returns a summary at the current sequence number.\n\t * @param fullTree - true to bypass optimizations and force a full summary tree\n\t * @param trackState - This tells whether we should track state from this summary.\n\t * @param telemetryContext - summary data passed through the layers for telemetry purposes\n\t */\n\tpublic async summarize(\n\t\tfullTree: boolean = false,\n\t\ttrackState: boolean = true,\n\t\ttelemetryContext?: ITelemetryContext,\n\t): Promise<ISummarizeResult> {\n\t\treturn this.summarizerNode.summarize(fullTree, trackState, telemetryContext);\n\t}\n\n\tprivate async summarizeInternal(\n\t\tfullTree: boolean,\n\t\ttrackState: boolean,\n\t\ttelemetryContext?: ITelemetryContext,\n\t): Promise<ISummarizeInternalResult> {\n\t\tawait this.realize();\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tconst summarizeResult = await this.channel!.summarize(\n\t\t\tfullTree,\n\t\t\ttrackState,\n\t\t\ttelemetryContext,\n\t\t);\n\n\t\t// Wrap dds summaries in .channels subtree.\n\t\twrapSummaryInChannelsTree(summarizeResult);\n\t\tconst pathPartsForChildren = [channelsTreeName];\n\n\t\t// Add data store's attributes to the summary.\n\t\tconst { pkg } = await this.getInitialSnapshotDetails();\n\t\tconst isRoot = await this.isRoot();\n\t\tconst attributes = createAttributes(pkg, isRoot);\n\t\taddBlobToSummary(summarizeResult, dataStoreAttributesBlobName, JSON.stringify(attributes));\n\n\t\t// If we are not referenced, mark the summary tree as unreferenced. Also, update unreferenced blob\n\t\t// size in the summary stats with the blobs size of this data store.\n\t\tif (!this.summarizerNode.isReferenced()) {\n\t\t\tsummarizeResult.summary.unreferenced = true;\n\t\t\tsummarizeResult.stats.unreferencedBlobSize = summarizeResult.stats.totalBlobSize;\n\t\t}\n\n\t\treturn {\n\t\t\t...summarizeResult,\n\t\t\tid: this.id,\n\t\t\tpathPartsForChildren,\n\t\t};\n\t}\n\n\t/**\n\t * Returns the data used for garbage collection. This includes a list of GC nodes that represent this data store\n\t * including any of its child channel contexts. Each node has a set of outbound routes to other GC nodes in the\n\t * document.\n\t * If there is no new data in this data store since the last summary, previous GC data is used.\n\t * If there is new data, the GC data is generated again (by calling getGCDataInternal).\n\t * @param fullGC - true to bypass optimizations and force full generation of GC data.\n\t */\n\tpublic async getGCData(fullGC: boolean = false): Promise<IGarbageCollectionData> {\n\t\treturn this.summarizerNode.getGCData(fullGC);\n\t}\n\n\t/**\n\t * Generates data used for garbage collection. This is called when there is new data since last summary. It\n\t * realizes the data store and calls into each channel context to get its GC data.\n\t * @param fullGC - true to bypass optimizations and force full generation of GC data.\n\t */\n\tprivate async getGCDataInternal(fullGC: boolean = false): Promise<IGarbageCollectionData> {\n\t\tawait this.realize();\n\t\tassert(\n\t\t\tthis.channel !== undefined,\n\t\t\t0x143 /* \"Channel should not be undefined when running GC\" */,\n\t\t);\n\n\t\treturn this.channel.getGCData(fullGC);\n\t}\n\n\t/**\n\t * After GC has run, called to notify the data store of routes used in it. These are used for the following:\n\t *\n\t * 1. To identify if this data store is being referenced in the document or not.\n\t *\n\t * 2. To determine if it needs to re-summarize in case used routes changed since last summary.\n\t *\n\t * 3. These are added to the summary generated by the data store.\n\t *\n\t * 4. To notify child contexts of their used routes. This is done immediately if the data store is loaded.\n\t * Else, it is done when realizing the data store.\n\t *\n\t * 5. To update the timestamp when this data store or any children are marked as unreferenced.\n\t *\n\t * @param usedRoutes - The routes that are used in this data store.\n\t */\n\tpublic updateUsedRoutes(usedRoutes: string[]) {\n\t\t// Update the used routes in this data store's summarizer node.\n\t\tthis.summarizerNode.updateUsedRoutes(usedRoutes);\n\n\t\t/**\n\t\t * Store the used routes to update the channel if the data store is not loaded yet. If the used routes changed\n\t\t * since the previous run, the data store will be loaded during summarize since the used state changed. So, it's\n\t\t * safe to only store the last used routes.\n\t\t */\n\t\tthis.lastUsedRoutes = usedRoutes;\n\n\t\t// If we are loaded, call the channel so it can update the used routes of the child contexts.\n\t\t// If we are not loaded, we will update this when we are realized.\n\t\tif (this.loaded) {\n\t\t\tthis.updateChannelUsedRoutes();\n\t\t}\n\t}\n\n\t/**\n\t * Called when a new outbound reference is added to another node. This is used by garbage collection to identify\n\t * all references added in the system.\n\t * @param srcHandle - The handle of the node that added the reference.\n\t * @param outboundHandle - The handle of the outbound node that is referenced.\n\t */\n\tpublic addedGCOutboundReference(srcHandle: IFluidHandle, outboundHandle: IFluidHandle) {\n\t\tthis._containerRuntime.addedGCOutboundReference(srcHandle, outboundHandle);\n\t}\n\n\t/**\n\t * Updates the used routes of the channel and its child contexts. The channel must be loaded before calling this.\n\t * It is called in these two scenarios:\n\t * 1. When the used routes of the data store is updated and the data store is loaded.\n\t * 2. When the data store is realized. This updates the channel's used routes as per last GC run.\n\t */\n\tprivate updateChannelUsedRoutes() {\n\t\tassert(this.loaded, 0x144 /* \"Channel should be loaded when updating used routes\" */);\n\t\tassert(\n\t\t\tthis.channel !== undefined,\n\t\t\t0x145 /* \"Channel should be present when data store is loaded\" */,\n\t\t);\n\n\t\t// If there is no lastUsedRoutes, GC has not run up until this point.\n\t\tif (this.lastUsedRoutes === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove the route to this data store, if it exists.\n\t\tconst usedChannelRoutes = this.lastUsedRoutes.filter((id: string) => {\n\t\t\treturn id !== \"/\" && id !== \"\";\n\t\t});\n\t\tthis.channel.updateUsedRoutes(usedChannelRoutes);\n\t}\n\n\t/**\n\t * @deprecated 0.18.Should call request on the runtime directly\n\t */\n\tpublic async request(request: IRequest): Promise<IResponse> {\n\t\tconst runtime = await this.realize();\n\t\treturn runtime.request(request);\n\t}\n\n\tpublic submitMessage(type: string, content: any, localOpMetadata: unknown): void {\n\t\tthis.verifyNotClosed(\"submitMessage\");\n\t\tassert(!!this.channel, 0x146 /* \"Channel must exist when submitting message\" */);\n\t\tconst fluidDataStoreContent: FluidDataStoreMessage = {\n\t\t\tcontent,\n\t\t\ttype,\n\t\t};\n\n\t\t// Summarizer clients should not submit messages.\n\t\tthis.identifyLocalChangeInSummarizer(\"DataStoreMessageSubmittedInSummarizer\", type);\n\n\t\tthis._containerRuntime.submitDataStoreOp(this.id, fluidDataStoreContent, localOpMetadata);\n\t}\n\n\t/**\n\t * This is called from a SharedSummaryBlock that does not generate ops but only wants to be part of the summary.\n\t * It indicates that there is data in the object that needs to be summarized.\n\t * We will update the latestSequenceNumber of the summary tracker of this\n\t * store and of the object's channel.\n\t *\n\t * @param address - The address of the channel that is dirty.\n\t *\n\t */\n\tpublic setChannelDirty(address: string): void {\n\t\tthis.verifyNotClosed(\"setChannelDirty\");\n\n\t\t// Get the latest sequence number.\n\t\tconst latestSequenceNumber = this.deltaManager.lastSequenceNumber;\n\n\t\tthis.summarizerNode.invalidate(latestSequenceNumber);\n\n\t\tconst channelSummarizerNode = this.summarizerNode.getChild(address);\n\n\t\tif (channelSummarizerNode) {\n\t\t\tchannelSummarizerNode.invalidate(latestSequenceNumber); // TODO: lazy load problem?\n\t\t}\n\t}\n\n\tpublic submitSignal(type: string, content: any) {\n\t\tthis.verifyNotClosed(\"submitSignal\");\n\n\t\tassert(!!this.channel, 0x147 /* \"Channel must exist on submitting signal\" */);\n\t\treturn this._containerRuntime.submitDataStoreSignal(this.id, type, content);\n\t}\n\n\t/**\n\t * This is called by the data store channel when it becomes locally visible indicating that it is ready to become\n\t * globally visible now.\n\t */\n\tpublic makeLocallyVisible() {\n\t\tassert(this.channel !== undefined, 0x2cf /* \"undefined channel on datastore context\" */);\n\t\tassert(\n\t\t\tthis.channel.visibilityState === VisibilityState.LocallyVisible,\n\t\t\t0x590 /* Channel must be locally visible */,\n\t\t);\n\t\tthis.makeLocallyVisibleFn();\n\t}\n\n\tprotected bindRuntime(channel: IFluidDataStoreChannel) {\n\t\tif (this.channel) {\n\t\t\tthrow new Error(\"Runtime already bound\");\n\t\t}\n\n\t\ttry {\n\t\t\tassert(\n\t\t\t\t!this.detachedRuntimeCreation,\n\t\t\t\t0x148 /* \"Detached runtime creation on runtime bind\" */,\n\t\t\t);\n\t\t\tassert(this.channelDeferred !== undefined, 0x149 /* \"Undefined channel deferral\" */);\n\t\t\tassert(this.pkg !== undefined, 0x14a /* \"Undefined package path\" */);\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tconst pending = this.pending!;\n\n\t\t\t// Apply all pending ops\n\t\t\tfor (const op of pending) {\n\t\t\t\tchannel.process(op, false, undefined /* localOpMetadata */);\n\t\t\t}\n\n\t\t\tthis.thresholdOpsCounter.send(\"ProcessPendingOps\", pending.length);\n\t\t\tthis.pending = undefined;\n\n\t\t\t// And now mark the runtime active\n\t\t\tthis.loaded = true;\n\t\t\tthis.channel = channel;\n\n\t\t\t// Freeze the package path to ensure that someone doesn't modify it when it is\n\t\t\t// returned in packagePath().\n\t\t\tObject.freeze(this.pkg);\n\n\t\t\t/**\n\t\t\t * Update the used routes of the channel. If GC has run before this data store was realized, we will have\n\t\t\t * the used routes saved. So, this will ensure that all the child contexts have up-to-date used routes as\n\t\t\t * per the last time GC was run.\n\t\t\t * Also, this data store may have been realized during summarize. In that case, the child contexts need to\n\t\t\t * have their used routes updated to determine if its needs to summarize again and to add it to the summary.\n\t\t\t */\n\t\t\tthis.updateChannelUsedRoutes();\n\n\t\t\t// And notify the pending promise it is now available\n\t\t\tthis.channelDeferred.resolve(this.channel);\n\t\t} catch (error) {\n\t\t\tthis.channelDeferred?.reject(error);\n\t\t\tthis.mc.logger.sendErrorEvent(\n\t\t\t\t{\n\t\t\t\t\teventName: \"BindRuntimeError\",\n\t\t\t\t},\n\t\t\t\terror,\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic async getAbsoluteUrl(relativeUrl: string): Promise<string | undefined> {\n\t\tif (this.attachState !== AttachState.Attached) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this._containerRuntime.getAbsoluteUrl(relativeUrl);\n\t}\n\n\tpublic abstract generateAttachMessage(): IAttachMessage;\n\n\tpublic abstract getInitialSnapshotDetails(): Promise<ISnapshotDetails>;\n\n\t/**\n\t * @deprecated Sets the datastore as root, for aliasing purposes: #7948\n\t * This method should not be used outside of the aliasing context.\n\t * It will be removed, as the source of truth for this flag will be the aliasing blob.\n\t */\n\tpublic setInMemoryRoot(): void {\n\t\tthis._isInMemoryRoot = true;\n\t}\n\n\t/**\n\t * @deprecated - The functionality to get base GC details has been moved to summarizer node.\n\t */\n\tpublic async getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase> {\n\t\treturn {};\n\t}\n\n\tpublic reSubmit(contents: any, localOpMetadata: unknown) {\n\t\tassert(!!this.channel, 0x14b /* \"Channel must exist when resubmitting ops\" */);\n\t\tconst innerContents = contents as FluidDataStoreMessage;\n\t\tthis.channel.reSubmit(innerContents.type, innerContents.content, localOpMetadata);\n\t}\n\n\tpublic rollback(contents: any, localOpMetadata: unknown) {\n\t\tif (!this.channel) {\n\t\t\tthrow new Error(\"Channel must exist when rolling back ops\");\n\t\t}\n\t\tif (!this.channel.rollback) {\n\t\t\tthrow new Error(\"Channel doesn't support rollback\");\n\t\t}\n\t\tconst innerContents = contents as FluidDataStoreMessage;\n\t\tthis.channel.rollback(innerContents.type, innerContents.content, localOpMetadata);\n\t}\n\n\tpublic async applyStashedOp(contents: any): Promise<unknown> {\n\t\tif (!this.channel) {\n\t\t\tawait this.realize();\n\t\t}\n\t\tassert(!!this.channel, 0x14c /* \"Channel must exist when rebasing ops\" */);\n\t\treturn this.channel.applyStashedOp(contents);\n\t}\n\n\tprivate verifyNotClosed(\n\t\tcallSite: string,\n\t\tcheckTombstone = true,\n\t\tsafeTelemetryProps: ITelemetryProperties = {},\n\t) {\n\t\tif (this.deleted) {\n\t\t\tconst messageString = `Context is deleted! Call site [${callSite}]`;\n\t\t\tconst error = new DataCorruptionError(messageString, safeTelemetryProps);\n\t\t\tthis.mc.logger.sendErrorEvent(\n\t\t\t\t{\n\t\t\t\t\teventName: \"GC_Deleted_DataStore_Changed\",\n\t\t\t\t\tcallSite,\n\t\t\t\t},\n\t\t\t\terror,\n\t\t\t);\n\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (this._disposed) {\n\t\t\tthrow new Error(`Context is closed! Call site [${callSite}]`);\n\t\t}\n\n\t\tif (checkTombstone && this.tombstoned) {\n\t\t\tconst messageString = `Context is tombstoned! Call site [${callSite}]`;\n\t\t\tconst error = new DataCorruptionError(messageString, safeTelemetryProps);\n\n\t\t\tsendGCUnexpectedUsageEvent(\n\t\t\t\tthis.mc,\n\t\t\t\t{\n\t\t\t\t\teventName: \"GC_Tombstone_DataStore_Changed\",\n\t\t\t\t\tcategory: this.throwOnTombstoneUsage ? \"error\" : \"generic\",\n\t\t\t\t\tgcTombstoneEnforcementAllowed:\n\t\t\t\t\t\tthis._containerRuntime.gcTombstoneEnforcementAllowed,\n\t\t\t\t\tcallSite,\n\t\t\t\t},\n\t\t\t\tthis.pkg,\n\t\t\t\terror,\n\t\t\t);\n\t\t\tif (this.throwOnTombstoneUsage) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Summarizer client should not have local changes. These changes can become part of the summary and can break\n\t * eventual consistency. For example, the next summary (say at ref seq# 100) may contain these changes whereas\n\t * other clients that are up-to-date till seq# 100 may not have them yet.\n\t */\n\tprotected identifyLocalChangeInSummarizer(eventName: string, type?: string) {\n\t\tif (\n\t\t\tthis.clientDetails.type !== summarizerClientType ||\n\t\t\tthis.localChangesTelemetryCount <= 0\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Log a telemetry if there are local changes in the summarizer. This will give us data on how often\n\t\t// this is happening and which data stores do this. The eventual goal is to disallow local changes\n\t\t// in the summarizer and the data will help us plan this.\n\t\tthis.mc.logger.sendTelemetryEvent({\n\t\t\teventName,\n\t\t\ttype,\n\t\t\tisSummaryInProgress: this.summarizerNode.isSummaryInProgress?.(),\n\t\t\tstack: generateStack(),\n\t\t});\n\t\tthis.localChangesTelemetryCount--;\n\t}\n\n\tpublic getCreateChildSummarizerNodeFn(id: string, createParam: CreateChildSummarizerNodeParam) {\n\t\treturn (\n\t\t\tsummarizeInternal: SummarizeInternalFn,\n\t\t\tgetGCDataFn: (fullGC?: boolean) => Promise<IGarbageCollectionData>,\n\t\t) =>\n\t\t\tthis.summarizerNode.createChild(\n\t\t\t\tsummarizeInternal,\n\t\t\t\tid,\n\t\t\t\tcreateParam,\n\t\t\t\t// DDS will not create failure summaries\n\t\t\t\t{ throwOnFailure: true },\n\t\t\t\tgetGCDataFn,\n\t\t\t);\n\t}\n\n\tpublic async uploadBlob(\n\t\tblob: ArrayBufferLike,\n\t\tsignal?: AbortSignal,\n\t): Promise<IFluidHandle<ArrayBufferLike>> {\n\t\treturn this.containerRuntime.uploadBlob(blob, signal);\n\t}\n}\n\nexport class RemoteFluidDataStoreContext extends FluidDataStoreContext {\n\tprivate readonly initSnapshotValue: ISnapshotTree | undefined;\n\n\tconstructor(props: IRemoteFluidDataStoreContextProps) {\n\t\tsuper(props, true /* existing */, false /* isLocalDataStore */, () => {\n\t\t\tthrow new Error(\"Already attached\");\n\t\t});\n\n\t\tthis.initSnapshotValue = props.snapshotTree;\n\n\t\tif (props.snapshotTree !== undefined) {\n\t\t\tthis.summarizerNode.updateBaseSummaryState(props.snapshotTree);\n\t\t}\n\t}\n\n\tprivate readonly initialSnapshotDetailsP = new LazyPromise<ISnapshotDetails>(async () => {\n\t\tlet tree = this.initSnapshotValue;\n\t\tlet isRootDataStore = true;\n\n\t\tif (!!tree && tree.blobs[dataStoreAttributesBlobName] !== undefined) {\n\t\t\t// Need to get through snapshot and use that to populate extraBlobs\n\t\t\tconst attributes = await readAndParse<ReadFluidDataStoreAttributes>(\n\t\t\t\tthis.storage,\n\t\t\t\ttree.blobs[dataStoreAttributesBlobName],\n\t\t\t);\n\n\t\t\tlet pkgFromSnapshot: string[];\n\t\t\t// Use the snapshotFormatVersion to determine how the pkg is encoded in the snapshot.\n\t\t\t// For snapshotFormatVersion = \"0.1\" (1) or above, pkg is jsonified, otherwise it is just a string.\n\t\t\tconst formatVersion = getAttributesFormatVersion(attributes);\n\t\t\tif (formatVersion < 1) {\n\t\t\t\tpkgFromSnapshot =\n\t\t\t\t\tattributes.pkg.startsWith('[\"') && attributes.pkg.endsWith('\"]')\n\t\t\t\t\t\t? (JSON.parse(attributes.pkg) as string[])\n\t\t\t\t\t\t: [attributes.pkg];\n\t\t\t} else {\n\t\t\t\tpkgFromSnapshot = JSON.parse(attributes.pkg) as string[];\n\t\t\t}\n\t\t\tthis.pkg = pkgFromSnapshot;\n\n\t\t\t/**\n\t\t\t * If there is no isRootDataStore in the attributes blob, set it to true. This will ensure that\n\t\t\t * data stores in older documents are not garbage collected incorrectly. This may lead to additional\n\t\t\t * roots in the document but they won't break.\n\t\t\t */\n\t\t\tisRootDataStore = attributes.isRootDataStore ?? true;\n\n\t\t\tif (hasIsolatedChannels(attributes)) {\n\t\t\t\ttree = tree.trees[channelsTreeName];\n\t\t\t\tassert(\n\t\t\t\t\ttree !== undefined,\n\t\t\t\t\t0x1fe /* \"isolated channels subtree should exist in remote datastore snapshot\" */,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tpkg: this.pkg!,\n\t\t\tisRootDataStore,\n\t\t\tsnapshot: tree,\n\t\t};\n\t});\n\n\tpublic async getInitialSnapshotDetails(): Promise<ISnapshotDetails> {\n\t\treturn this.initialSnapshotDetailsP;\n\t}\n\n\tpublic generateAttachMessage(): IAttachMessage {\n\t\tthrow new Error(\"Cannot attach remote store\");\n\t}\n}\n\n/**\n * Base class for detached & attached context classes\n */\nexport class LocalFluidDataStoreContextBase extends FluidDataStoreContext {\n\tprivate readonly snapshotTree: ISnapshotTree | undefined;\n\t/**\n\t * @deprecated 0.16 Issue #1635, #3631\n\t */\n\tpublic readonly createProps?: any;\n\n\tconstructor(props: ILocalFluidDataStoreContextProps) {\n\t\tsuper(\n\t\t\tprops,\n\t\t\tprops.snapshotTree !== undefined ? true : false /* existing */,\n\t\t\ttrue /* isLocalDataStore */,\n\t\t\tprops.makeLocallyVisibleFn,\n\t\t);\n\n\t\t// Summarizer client should not create local data stores.\n\t\tthis.identifyLocalChangeInSummarizer(\"DataStoreCreatedInSummarizer\");\n\n\t\tthis.snapshotTree = props.snapshotTree;\n\t\tif (props.isRootDataStore === true) {\n\t\t\tthis.setInMemoryRoot();\n\t\t}\n\t\tthis.createProps = props.createProps;\n\t\tthis.attachListeners();\n\t}\n\n\tprivate attachListeners(): void {\n\t\tthis.once(\"attaching\", () => {\n\t\t\tassert(\n\t\t\t\tthis.attachState === AttachState.Detached,\n\t\t\t\t0x14d /* \"Should move from detached to attaching\" */,\n\t\t\t);\n\t\t\tthis._attachState = AttachState.Attaching;\n\t\t});\n\t\tthis.once(\"attached\", () => {\n\t\t\tassert(\n\t\t\t\tthis.attachState === AttachState.Attaching,\n\t\t\t\t0x14e /* \"Should move from attaching to attached\" */,\n\t\t\t);\n\t\t\tthis._attachState = AttachState.Attached;\n\t\t});\n\t}\n\n\tpublic generateAttachMessage(): IAttachMessage {\n\t\tassert(\n\t\t\tthis.channel !== undefined,\n\t\t\t0x14f /* \"There should be a channel when generating attach message\" */,\n\t\t);\n\t\tassert(\n\t\t\tthis.pkg !== undefined,\n\t\t\t0x150 /* \"pkg should be available in local data store context\" */,\n\t\t);\n\n\t\tconst summarizeResult = this.channel.getAttachSummary();\n\n\t\t// Wrap dds summaries in .channels subtree.\n\t\twrapSummaryInChannelsTree(summarizeResult);\n\n\t\t// Add data store's attributes to the summary.\n\t\tconst attributes = createAttributes(this.pkg, this.isInMemoryRoot());\n\t\taddBlobToSummary(summarizeResult, dataStoreAttributesBlobName, JSON.stringify(attributes));\n\n\t\t// Attach message needs the summary in ITree format. Convert the ISummaryTree into an ITree.\n\t\tconst snapshot = convertSummaryTreeToITree(summarizeResult.summary);\n\n\t\tconst message: IAttachMessage = {\n\t\t\tid: this.id,\n\t\t\tsnapshot,\n\t\t\ttype: this.pkg[this.pkg.length - 1],\n\t\t};\n\n\t\treturn message;\n\t}\n\n\tprivate readonly initialSnapshotDetailsP = new LazyPromise<ISnapshotDetails>(async () => {\n\t\tlet snapshot = this.snapshotTree;\n\t\tlet attributes: ReadFluidDataStoreAttributes;\n\t\tlet isRootDataStore = false;\n\t\tif (snapshot !== undefined) {\n\t\t\t// Get the dataStore attributes.\n\t\t\t// Note: storage can be undefined in special case while detached.\n\t\t\tattributes = await getFluidDataStoreAttributes(this.storage, snapshot);\n\t\t\tif (hasIsolatedChannels(attributes)) {\n\t\t\t\tsnapshot = snapshot.trees[channelsTreeName];\n\t\t\t\tassert(\n\t\t\t\t\tsnapshot !== undefined,\n\t\t\t\t\t0x1ff /* \"isolated channels subtree should exist in local datastore snapshot\" */,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (this.pkg === undefined) {\n\t\t\t\tthis.pkg = JSON.parse(attributes.pkg) as string[];\n\t\t\t\t// If there is no isRootDataStore in the attributes blob, set it to true. This ensures that data\n\t\t\t\t// stores in older documents are not garbage collected incorrectly. This may lead to additional\n\t\t\t\t// roots in the document but they won't break.\n\t\t\t\tif (attributes.isRootDataStore ?? true) {\n\t\t\t\t\tisRootDataStore = true;\n\t\t\t\t\tthis.setInMemoryRoot();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tassert(this.pkg !== undefined, 0x152 /* \"pkg should be available in local data store\" */);\n\n\t\treturn {\n\t\t\tpkg: this.pkg,\n\t\t\tisRootDataStore,\n\t\t\tsnapshot,\n\t\t};\n\t});\n\n\tpublic async getInitialSnapshotDetails(): Promise<ISnapshotDetails> {\n\t\treturn this.initialSnapshotDetailsP;\n\t}\n\n\t/**\n\t * A context should only be marked as deleted when its a remote context.\n\t * Session Expiry at the runtime level should have closed the container creating the local data store context\n\t * before delete is even possible. Session Expiry is at 30 days, and sweep is done 36+ days later from the time\n\t * it was unreferenced. Thus the sweeping container should have loaded from a snapshot and thus creating a remote\n\t * context.\n\t */\n\tpublic delete() {\n\t\t// TODO: GC:Validation - potentially prevent this from happening or asserting. Maybe throw here.\n\t\tsendGCUnexpectedUsageEvent(\n\t\t\tthis.mc,\n\t\t\t{\n\t\t\t\teventName: \"GC_Deleted_DataStore_Unexpected_Delete\",\n\t\t\t\tmessage: \"Unexpected deletion of a local data store context\",\n\t\t\t\tcategory: \"error\",\n\t\t\t\tgcTombstoneEnforcementAllowed: undefined,\n\t\t\t},\n\t\t\tthis.pkg,\n\t\t);\n\t\tsuper.delete();\n\t}\n}\n\n/**\n * context implementation for \"attached\" data store runtime.\n * Various workflows (snapshot creation, requests) result in .realize() being called\n * on context, resulting in instantiation and attachment of runtime.\n * Runtime is created using data store factory that is associated with this context.\n */\nexport class LocalFluidDataStoreContext extends LocalFluidDataStoreContextBase {\n\tconstructor(props: ILocalFluidDataStoreContextProps) {\n\t\tsuper(props);\n\t}\n}\n\n/**\n * Detached context. Data Store runtime will be attached to it by attachRuntime() call\n * Before attachment happens, this context is not associated with particular type of runtime\n * or factory, i.e. it's package path is undefined.\n * Attachment process provides all missing parts - package path, data store runtime, and data store factory\n */\nexport class LocalDetachedFluidDataStoreContext\n\textends LocalFluidDataStoreContextBase\n\timplements IFluidDataStoreContextDetached\n{\n\tconstructor(props: ILocalFluidDataStoreContextProps) {\n\t\tsuper(props);\n\t\tthis.detachedRuntimeCreation = true;\n\t}\n\n\tpublic async attachRuntime(\n\t\tregistry: IProvideFluidDataStoreFactory,\n\t\tdataStoreChannel: IFluidDataStoreChannel,\n\t) {\n\t\tassert(this.detachedRuntimeCreation, 0x154 /* \"runtime creation is already attached\" */);\n\t\tthis.detachedRuntimeCreation = false;\n\n\t\tassert(this.channelDeferred === undefined, 0x155 /* \"channel deferral is already set\" */);\n\t\tthis.channelDeferred = new Deferred<IFluidDataStoreChannel>();\n\n\t\tconst factory = registry.IFluidDataStoreFactory;\n\n\t\tconst entry = await this.factoryFromPackagePath(this.pkg);\n\t\tassert(entry.factory === factory, 0x156 /* \"Unexpected factory for package path\" */);\n\n\t\tassert(this.registry === undefined, 0x157 /* \"datastore registry already attached\" */);\n\t\tthis.registry = entry.registry;\n\n\t\tsuper.bindRuntime(dataStoreChannel);\n\n\t\t// Load the handle to the data store's entryPoint to make sure that for a detached data store, the entryPoint\n\t\t// initialization function is called before the data store gets attached and potentially connected to the\n\t\t// delta stream, so it gets a chance to do things while the data store is still \"purely local\".\n\t\t// This preserves the behavior from before we introduced entryPoints, where the instantiateDataStore method\n\t\t// of data store factories tends to construct the data object (at least kick off an async method that returns\n\t\t// it); that code moved to the entryPoint initialization function, so we want to ensure it still executes\n\t\t// before the data store is attached.\n\t\tawait dataStoreChannel.entryPoint.get();\n\n\t\tif (await this.isRoot()) {\n\t\t\tdataStoreChannel.makeVisibleAndAttachGraph();\n\t\t}\n\t}\n\n\tpublic async getInitialSnapshotDetails(): Promise<ISnapshotDetails> {\n\t\tif (this.detachedRuntimeCreation) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Detached Fluid Data Store context can't be realized! Please attach runtime first!\",\n\t\t\t);\n\t\t}\n\t\treturn super.getInitialSnapshotDetails();\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dataStoreContext.js","sourceRoot":"","sources":["../src/dataStoreContext.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 {\n\tIDisposable,\n\tFluidObject,\n\tIRequest,\n\tIResponse,\n\tIFluidHandle,\n\tITelemetryProperties,\n} from \"@fluidframework/core-interfaces\";\nimport {\n\tIAudience,\n\tIDeltaManager,\n\tAttachState,\n\tILoaderOptions,\n} from \"@fluidframework/container-definitions\";\nimport { TypedEventEmitter } from \"@fluid-internal/client-utils\";\nimport { assert, Deferred, LazyPromise } from \"@fluidframework/core-utils\";\nimport { IDocumentStorageService } from \"@fluidframework/driver-definitions\";\nimport { BlobTreeEntry, readAndParse } from \"@fluidframework/driver-utils\";\nimport {\n\tIClientDetails,\n\tIDocumentMessage,\n\tIQuorumClients,\n\tISequencedDocumentMessage,\n\tISnapshotTree,\n\tITreeEntry,\n} from \"@fluidframework/protocol-definitions\";\nimport { IContainerRuntime } from \"@fluidframework/container-runtime-definitions\";\nimport {\n\tchannelsTreeName,\n\tCreateChildSummarizerNodeFn,\n\tCreateChildSummarizerNodeParam,\n\tFluidDataStoreRegistryEntry,\n\tIAttachMessage,\n\tIFluidDataStoreChannel,\n\tIFluidDataStoreContext,\n\tIFluidDataStoreContextDetached,\n\tIFluidDataStoreContextEvents,\n\tIFluidDataStoreRegistry,\n\tIGarbageCollectionData,\n\tIGarbageCollectionDetailsBase,\n\tIInboundSignalMessage,\n\tIProvideFluidDataStoreFactory,\n\tISummarizeInternalResult,\n\tISummarizeResult,\n\tISummarizerNodeWithGC,\n\tSummarizeInternalFn,\n\tITelemetryContext,\n\tIIdCompressor,\n\tIIdCompressorCore,\n\tVisibilityState,\n} from \"@fluidframework/runtime-definitions\";\nimport { addBlobToSummary, convertSummaryTreeToITree } from \"@fluidframework/runtime-utils\";\nimport {\n\tcreateChildMonitoringContext,\n\tDataCorruptionError,\n\tDataProcessingError,\n\textractSafePropertiesFromMessage,\n\tgenerateStack,\n\tITelemetryLoggerExt,\n\tLoggingError,\n\tMonitoringContext,\n\ttagCodeArtifacts,\n\tThresholdCounter,\n} from \"@fluidframework/telemetry-utils\";\nimport {\n\tdataStoreAttributesBlobName,\n\thasIsolatedChannels,\n\twrapSummaryInChannelsTree,\n\tReadFluidDataStoreAttributes,\n\tWriteFluidDataStoreAttributes,\n\tgetAttributesFormatVersion,\n\tgetFluidDataStoreAttributes,\n\tsummarizerClientType,\n} from \"./summary\";\nimport { ContainerRuntime } from \"./containerRuntime\";\nimport { sendGCUnexpectedUsageEvent } from \"./gc\";\n\nfunction createAttributes(\n\tpkg: readonly string[],\n\tisRootDataStore: boolean,\n): WriteFluidDataStoreAttributes {\n\tconst stringifiedPkg = JSON.stringify(pkg);\n\treturn {\n\t\tpkg: stringifiedPkg,\n\t\tsummaryFormatVersion: 2,\n\t\tisRootDataStore,\n\t};\n}\nexport function createAttributesBlob(pkg: readonly string[], isRootDataStore: boolean): ITreeEntry {\n\tconst attributes = createAttributes(pkg, isRootDataStore);\n\treturn new BlobTreeEntry(dataStoreAttributesBlobName, JSON.stringify(attributes));\n}\n\ninterface ISnapshotDetails {\n\tpkg: readonly string[];\n\tisRootDataStore: boolean;\n\tsnapshot?: ISnapshotTree;\n}\n\ninterface FluidDataStoreMessage {\n\tcontent: any;\n\ttype: string;\n}\n\n/** Properties necessary for creating a FluidDataStoreContext */\nexport interface IFluidDataStoreContextProps {\n\treadonly id: string;\n\treadonly runtime: ContainerRuntime;\n\treadonly storage: IDocumentStorageService;\n\treadonly scope: FluidObject;\n\treadonly createSummarizerNodeFn: CreateChildSummarizerNodeFn;\n\treadonly pkg?: Readonly<string[]>;\n}\n\n/** Properties necessary for creating a local FluidDataStoreContext */\nexport interface ILocalFluidDataStoreContextProps extends IFluidDataStoreContextProps {\n\treadonly pkg: Readonly<string[]> | undefined;\n\treadonly snapshotTree: ISnapshotTree | undefined;\n\treadonly isRootDataStore: boolean | undefined;\n\treadonly makeLocallyVisibleFn: () => void;\n\t/**\n\t * @deprecated 0.16 Issue #1635, #3631\n\t */\n\treadonly createProps?: any;\n}\n\n/** Properties necessary for creating a remote FluidDataStoreContext */\nexport interface IRemoteFluidDataStoreContextProps extends IFluidDataStoreContextProps {\n\treadonly snapshotTree: ISnapshotTree | undefined;\n}\n\n/**\n * Represents the context for the store. This context is passed to the store runtime.\n */\nexport abstract class FluidDataStoreContext\n\textends TypedEventEmitter<IFluidDataStoreContextEvents>\n\timplements IFluidDataStoreContext, IDisposable\n{\n\tpublic get packagePath(): readonly string[] {\n\t\tassert(this.pkg !== undefined, 0x139 /* \"Undefined package path\" */);\n\t\treturn this.pkg;\n\t}\n\n\tpublic get options(): ILoaderOptions {\n\t\treturn this._containerRuntime.options;\n\t}\n\n\tpublic get clientId(): string | undefined {\n\t\treturn this._containerRuntime.clientId;\n\t}\n\n\tpublic get clientDetails(): IClientDetails {\n\t\treturn this._containerRuntime.clientDetails;\n\t}\n\n\tpublic get logger(): ITelemetryLoggerExt {\n\t\treturn this._containerRuntime.logger;\n\t}\n\n\tpublic get deltaManager(): IDeltaManager<ISequencedDocumentMessage, IDocumentMessage> {\n\t\treturn this._containerRuntime.deltaManager;\n\t}\n\n\tpublic get connected(): boolean {\n\t\treturn this._containerRuntime.connected;\n\t}\n\n\tpublic get IFluidHandleContext() {\n\t\treturn this._containerRuntime.IFluidHandleContext;\n\t}\n\n\tpublic get containerRuntime(): IContainerRuntime {\n\t\treturn this._containerRuntime;\n\t}\n\n\tpublic ensureNoDataModelChanges<T>(callback: () => T): T {\n\t\treturn this._containerRuntime.ensureNoDataModelChanges(callback);\n\t}\n\n\tpublic get isLoaded(): boolean {\n\t\treturn this.loaded;\n\t}\n\n\tpublic get baseSnapshot(): ISnapshotTree | undefined {\n\t\treturn this._baseSnapshot;\n\t}\n\n\tpublic get idCompressor(): (IIdCompressorCore & IIdCompressor) | undefined {\n\t\treturn this._containerRuntime.idCompressor;\n\t}\n\n\tprivate _disposed = false;\n\tpublic get disposed() {\n\t\treturn this._disposed;\n\t}\n\n\t/**\n\t * Tombstone is a temporary feature that prevents a data store from sending / receiving ops, signals and from\n\t * loading.\n\t */\n\tprivate _tombstoned = false;\n\tpublic get tombstoned() {\n\t\treturn this._tombstoned;\n\t}\n\t/** If true, throw an error when a tombstone data store is used. */\n\tprivate readonly throwOnTombstoneUsage: boolean;\n\n\t/** If true, this means that this data store context and its children have been removed from the runtime */\n\tprivate deleted: boolean = false;\n\n\tpublic get attachState(): AttachState {\n\t\treturn this._attachState;\n\t}\n\n\tpublic get IFluidDataStoreRegistry(): IFluidDataStoreRegistry | undefined {\n\t\treturn this.registry;\n\t}\n\n\t/**\n\t * A datastore is considered as root if it\n\t * 1. is root in memory - see isInMemoryRoot\n\t * 2. is root as part of the base snapshot that the datastore loaded from\n\t * @returns whether a datastore is root\n\t */\n\tpublic async isRoot(): Promise<boolean> {\n\t\treturn this.isInMemoryRoot() || (await this.getInitialSnapshotDetails()).isRootDataStore;\n\t}\n\n\t/**\n\t * There are 3 states where isInMemoryRoot needs to be true\n\t * 1. when a datastore becomes aliased. This can happen for both remote and local datastores\n\t * 2. when a datastore is created locally as root\n\t * 3. when a datastore is created locally as root and is rehydrated\n\t * @returns whether a datastore is root in memory\n\t */\n\tprotected isInMemoryRoot(): boolean {\n\t\treturn this._isInMemoryRoot;\n\t}\n\n\tprotected registry: IFluidDataStoreRegistry | undefined;\n\n\tprotected detachedRuntimeCreation = false;\n\tprotected channel: IFluidDataStoreChannel | undefined;\n\tprivate loaded = false;\n\tprotected pending: ISequencedDocumentMessage[] | undefined = [];\n\tprotected channelDeferred: Deferred<IFluidDataStoreChannel> | undefined;\n\tprivate _baseSnapshot: ISnapshotTree | undefined;\n\tprotected _attachState: AttachState;\n\tprivate _isInMemoryRoot: boolean = false;\n\tprotected readonly summarizerNode: ISummarizerNodeWithGC;\n\tprotected readonly mc: MonitoringContext;\n\tprivate readonly thresholdOpsCounter: ThresholdCounter;\n\tprivate static readonly pendingOpsCountThreshold = 1000;\n\n\t/**\n\t * If the summarizer makes local changes, a telemetry event is logged. This has the potential to be very noisy.\n\t * So, adding a count of how many telemetry events are logged per data store context. This can be\n\t * controlled via feature flags.\n\t */\n\tprivate localChangesTelemetryCount: number;\n\n\t// The used routes of this node as per the last GC run. This is used to update the used routes of the channel\n\t// if it realizes after GC is run.\n\tprivate lastUsedRoutes: string[] | undefined;\n\n\tpublic readonly id: string;\n\tprivate readonly _containerRuntime: ContainerRuntime;\n\tpublic readonly storage: IDocumentStorageService;\n\tpublic readonly scope: FluidObject;\n\tprotected pkg?: readonly string[];\n\n\tconstructor(\n\t\tprops: IFluidDataStoreContextProps,\n\t\tprivate readonly existing: boolean,\n\t\tpublic readonly isLocalDataStore: boolean,\n\t\tprivate readonly makeLocallyVisibleFn: () => void,\n\t) {\n\t\tsuper();\n\n\t\tthis._containerRuntime = props.runtime;\n\t\tthis.id = props.id;\n\t\tthis.storage = props.storage;\n\t\tthis.scope = props.scope;\n\t\tthis.pkg = props.pkg;\n\n\t\t// URIs use slashes as delimiters. Handles use URIs.\n\t\t// Thus having slashes in types almost guarantees trouble down the road!\n\t\tassert(!this.id.includes(\"/\"), 0x13a /* Data store ID contains slash */);\n\n\t\tthis._attachState =\n\t\t\tthis.containerRuntime.attachState !== AttachState.Detached && this.existing\n\t\t\t\t? this.containerRuntime.attachState\n\t\t\t\t: AttachState.Detached;\n\n\t\tconst thisSummarizeInternal = async (\n\t\t\tfullTree: boolean,\n\t\t\ttrackState: boolean,\n\t\t\ttelemetryContext?: ITelemetryContext,\n\t\t) => this.summarizeInternal(fullTree, trackState, telemetryContext);\n\n\t\tthis.summarizerNode = props.createSummarizerNodeFn(\n\t\t\tthisSummarizeInternal,\n\t\t\tasync (fullGC?: boolean) => this.getGCDataInternal(fullGC),\n\t\t);\n\n\t\tthis.mc = createChildMonitoringContext({\n\t\t\tlogger: this.logger,\n\t\t\tnamespace: \"FluidDataStoreContext\",\n\t\t\tproperties: {\n\t\t\t\tall: tagCodeArtifacts({\n\t\t\t\t\tfluidDataStoreId: this.id,\n\t\t\t\t\t// The package name is a getter because `this.pkg` may not be initialized during construction.\n\t\t\t\t\t// For data stores loaded from summary, it is initialized during data store realization.\n\t\t\t\t\tfullPackageName: () => this.pkg?.join(\"/\"),\n\t\t\t\t}),\n\t\t\t},\n\t\t});\n\t\tthis.thresholdOpsCounter = new ThresholdCounter(\n\t\t\tFluidDataStoreContext.pendingOpsCountThreshold,\n\t\t\tthis.mc.logger,\n\t\t);\n\n\t\tthis.throwOnTombstoneUsage = this._containerRuntime.gcThrowOnTombstoneUsage;\n\n\t\t// By default, a data store can log maximum 10 local changes telemetry in summarizer.\n\t\tthis.localChangesTelemetryCount =\n\t\t\tthis.mc.config.getNumber(\"Fluid.Telemetry.LocalChangesTelemetryCount\") ?? 10;\n\t}\n\n\tpublic dispose(): void {\n\t\tif (this._disposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis._disposed = true;\n\n\t\t// Dispose any pending runtime after it gets fulfilled\n\t\t// Errors are logged where this.channelDeferred is consumed/generated (realizeCore(), bindRuntime())\n\t\tif (this.channelDeferred) {\n\t\t\tthis.channelDeferred.promise\n\t\t\t\t.then((runtime) => {\n\t\t\t\t\truntime.dispose();\n\t\t\t\t})\n\t\t\t\t.catch((error) => {});\n\t\t}\n\t}\n\n\t/**\n\t * When delete is called, that means that the data store is permanently removed from the runtime, and will not show up in future summaries\n\t * This function is called to prevent ops from being generated from this data store once it has been deleted. Furthermore, this data store\n\t * should not receive any ops/signals.\n\t */\n\tpublic delete() {\n\t\tthis.deleted = true;\n\t}\n\n\tpublic setTombstone(tombstone: boolean) {\n\t\tif (this.tombstoned === tombstone) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._tombstoned = tombstone;\n\t}\n\n\tprivate rejectDeferredRealize(\n\t\treason: string,\n\t\tfailedPkgPath?: string,\n\t\tfullPackageName?: readonly string[],\n\t): never {\n\t\tthrow new LoggingError(\n\t\t\treason,\n\t\t\ttagCodeArtifacts({\n\t\t\t\tfailedPkgPath,\n\t\t\t\tpackagePath: fullPackageName?.join(\"/\"),\n\t\t\t}),\n\t\t);\n\t}\n\n\tpublic async realize(): Promise<IFluidDataStoreChannel> {\n\t\tassert(!this.detachedRuntimeCreation, 0x13d /* \"Detached runtime creation on realize()\" */);\n\t\tif (!this.channelDeferred) {\n\t\t\tthis.channelDeferred = new Deferred<IFluidDataStoreChannel>();\n\t\t\tthis.realizeCore(this.existing).catch((error) => {\n\t\t\t\tconst errorWrapped = DataProcessingError.wrapIfUnrecognized(\n\t\t\t\t\terror,\n\t\t\t\t\t\"realizeFluidDataStoreContext\",\n\t\t\t\t);\n\t\t\t\terrorWrapped.addTelemetryProperties(\n\t\t\t\t\ttagCodeArtifacts({\n\t\t\t\t\t\tfullPackageName: this.pkg?.join(\"/\"),\n\t\t\t\t\t\tfluidDataStoreId: this.id,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tthis.channelDeferred?.reject(errorWrapped);\n\t\t\t\tthis.mc.logger.sendErrorEvent({ eventName: \"RealizeError\" }, errorWrapped);\n\t\t\t});\n\t\t}\n\t\treturn this.channelDeferred.promise;\n\t}\n\n\tprotected async factoryFromPackagePath(packages?: readonly string[]) {\n\t\tassert(this.pkg === packages, 0x13e /* \"Unexpected package path\" */);\n\t\tif (packages === undefined) {\n\t\t\tthis.rejectDeferredRealize(\"packages is undefined\");\n\t\t}\n\n\t\tlet entry: FluidDataStoreRegistryEntry | undefined;\n\t\tlet registry: IFluidDataStoreRegistry | undefined =\n\t\t\tthis._containerRuntime.IFluidDataStoreRegistry;\n\t\tlet lastPkg: string | undefined;\n\t\tfor (const pkg of packages) {\n\t\t\tif (!registry) {\n\t\t\t\tthis.rejectDeferredRealize(\"No registry for package\", lastPkg, packages);\n\t\t\t}\n\t\t\tlastPkg = pkg;\n\t\t\tentry = await registry.get(pkg);\n\t\t\tif (!entry) {\n\t\t\t\tthis.rejectDeferredRealize(\n\t\t\t\t\t\"Registry does not contain entry for the package\",\n\t\t\t\t\tpkg,\n\t\t\t\t\tpackages,\n\t\t\t\t);\n\t\t\t}\n\t\t\tregistry = entry.IFluidDataStoreRegistry;\n\t\t}\n\t\tconst factory = entry?.IFluidDataStoreFactory;\n\t\tif (factory === undefined) {\n\t\t\tthis.rejectDeferredRealize(\"Can't find factory for package\", lastPkg, packages);\n\t\t}\n\n\t\treturn { factory, registry };\n\t}\n\n\tprivate async realizeCore(existing: boolean): Promise<void> {\n\t\tconst details = await this.getInitialSnapshotDetails();\n\t\t// Base snapshot is the baseline where pending ops are applied to.\n\t\t// It is important that this be in sync with the pending ops, and also\n\t\t// that it is set here, before bindRuntime is called.\n\t\tthis._baseSnapshot = details.snapshot;\n\t\tconst packages = details.pkg;\n\n\t\tconst { factory, registry } = await this.factoryFromPackagePath(packages);\n\n\t\tassert(\n\t\t\tthis.registry === undefined,\n\t\t\t0x13f /* \"datastore context registry is already set\" */,\n\t\t);\n\t\tthis.registry = registry;\n\n\t\tconst channel = await factory.instantiateDataStore(this, existing);\n\t\tassert(channel !== undefined, 0x140 /* \"undefined channel on datastore context\" */);\n\t\tthis.bindRuntime(channel);\n\t\t// This data store may have been disposed before the channel is created during realization. If so,\n\t\t// dispose the channel now.\n\t\tif (this.disposed) {\n\t\t\tchannel.dispose();\n\t\t}\n\t}\n\n\t/**\n\t * Notifies this object about changes in the connection state.\n\t * @param value - New connection state.\n\t * @param clientId - ID of the client. Its old ID when in disconnected state and\n\t * its new client ID when we are connecting or connected.\n\t */\n\tpublic setConnectionState(connected: boolean, clientId?: string) {\n\t\t// ConnectionState should not fail in tombstone mode as this is internally run\n\t\tthis.verifyNotClosed(\"setConnectionState\", false /* checkTombstone */);\n\n\t\t// Connection events are ignored if the store is not yet loaded\n\t\tif (!this.loaded) {\n\t\t\treturn;\n\t\t}\n\n\t\tassert(this.connected === connected, 0x141 /* \"Unexpected connected state\" */);\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tthis.channel!.setConnectionState(connected, clientId);\n\t}\n\n\tpublic process(\n\t\tmessageArg: ISequencedDocumentMessage,\n\t\tlocal: boolean,\n\t\tlocalOpMetadata: unknown,\n\t): void {\n\t\tconst safeTelemetryProps = extractSafePropertiesFromMessage(messageArg);\n\t\t// On op process, tombstone error is logged in garbage collector. So, set \"checkTombstone\" to false when calling\n\t\t// \"verifyNotClosed\" which logs tombstone errors. Throw error if tombstoned and throwing on load is configured.\n\t\tthis.verifyNotClosed(\"process\", false /* checkTombstone */, safeTelemetryProps);\n\t\tif (this.tombstoned && this.throwOnTombstoneUsage) {\n\t\t\tthrow new DataCorruptionError(\n\t\t\t\t\"Context is tombstoned! Call site [process]\",\n\t\t\t\tsafeTelemetryProps,\n\t\t\t);\n\t\t}\n\n\t\tconst innerContents = messageArg.contents as FluidDataStoreMessage;\n\t\tconst message = {\n\t\t\t...messageArg,\n\t\t\ttype: innerContents.type,\n\t\t\tcontents: innerContents.content,\n\t\t};\n\n\t\tthis.summarizerNode.recordChange(message);\n\n\t\tif (this.loaded) {\n\t\t\treturn this.channel?.process(message, local, localOpMetadata);\n\t\t} else {\n\t\t\tassert(!local, 0x142 /* \"local store channel is not loaded\" */);\n\t\t\tassert(this.pending !== undefined, 0x23d /* \"pending is undefined\" */);\n\t\t\tthis.pending.push(message);\n\t\t\tthis.thresholdOpsCounter.sendIfMultiple(\"StorePendingOps\", this.pending.length);\n\t\t}\n\t}\n\n\tpublic processSignal(message: IInboundSignalMessage, local: boolean): void {\n\t\tthis.verifyNotClosed(\"processSignal\");\n\n\t\t// Signals are ignored if the store is not yet loaded\n\t\tif (!this.loaded) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.channel?.processSignal(message, local);\n\t}\n\n\tpublic getQuorum(): IQuorumClients {\n\t\treturn this._containerRuntime.getQuorum();\n\t}\n\n\tpublic getAudience(): IAudience {\n\t\treturn this._containerRuntime.getAudience();\n\t}\n\n\t/**\n\t * Returns a summary at the current sequence number.\n\t * @param fullTree - true to bypass optimizations and force a full summary tree\n\t * @param trackState - This tells whether we should track state from this summary.\n\t * @param telemetryContext - summary data passed through the layers for telemetry purposes\n\t */\n\tpublic async summarize(\n\t\tfullTree: boolean = false,\n\t\ttrackState: boolean = true,\n\t\ttelemetryContext?: ITelemetryContext,\n\t): Promise<ISummarizeResult> {\n\t\treturn this.summarizerNode.summarize(fullTree, trackState, telemetryContext);\n\t}\n\n\tprivate async summarizeInternal(\n\t\tfullTree: boolean,\n\t\ttrackState: boolean,\n\t\ttelemetryContext?: ITelemetryContext,\n\t): Promise<ISummarizeInternalResult> {\n\t\tawait this.realize();\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tconst summarizeResult = await this.channel!.summarize(\n\t\t\tfullTree,\n\t\t\ttrackState,\n\t\t\ttelemetryContext,\n\t\t);\n\n\t\t// Wrap dds summaries in .channels subtree.\n\t\twrapSummaryInChannelsTree(summarizeResult);\n\t\tconst pathPartsForChildren = [channelsTreeName];\n\n\t\t// Add data store's attributes to the summary.\n\t\tconst { pkg } = await this.getInitialSnapshotDetails();\n\t\tconst isRoot = await this.isRoot();\n\t\tconst attributes = createAttributes(pkg, isRoot);\n\t\taddBlobToSummary(summarizeResult, dataStoreAttributesBlobName, JSON.stringify(attributes));\n\n\t\t// If we are not referenced, mark the summary tree as unreferenced. Also, update unreferenced blob\n\t\t// size in the summary stats with the blobs size of this data store.\n\t\tif (!this.summarizerNode.isReferenced()) {\n\t\t\tsummarizeResult.summary.unreferenced = true;\n\t\t\tsummarizeResult.stats.unreferencedBlobSize = summarizeResult.stats.totalBlobSize;\n\t\t}\n\n\t\treturn {\n\t\t\t...summarizeResult,\n\t\t\tid: this.id,\n\t\t\tpathPartsForChildren,\n\t\t};\n\t}\n\n\t/**\n\t * Returns the data used for garbage collection. This includes a list of GC nodes that represent this data store\n\t * including any of its child channel contexts. Each node has a set of outbound routes to other GC nodes in the\n\t * document.\n\t * If there is no new data in this data store since the last summary, previous GC data is used.\n\t * If there is new data, the GC data is generated again (by calling getGCDataInternal).\n\t * @param fullGC - true to bypass optimizations and force full generation of GC data.\n\t */\n\tpublic async getGCData(fullGC: boolean = false): Promise<IGarbageCollectionData> {\n\t\treturn this.summarizerNode.getGCData(fullGC);\n\t}\n\n\t/**\n\t * Generates data used for garbage collection. This is called when there is new data since last summary. It\n\t * realizes the data store and calls into each channel context to get its GC data.\n\t * @param fullGC - true to bypass optimizations and force full generation of GC data.\n\t */\n\tprivate async getGCDataInternal(fullGC: boolean = false): Promise<IGarbageCollectionData> {\n\t\tawait this.realize();\n\t\tassert(\n\t\t\tthis.channel !== undefined,\n\t\t\t0x143 /* \"Channel should not be undefined when running GC\" */,\n\t\t);\n\n\t\treturn this.channel.getGCData(fullGC);\n\t}\n\n\t/**\n\t * After GC has run, called to notify the data store of routes used in it. These are used for the following:\n\t *\n\t * 1. To identify if this data store is being referenced in the document or not.\n\t *\n\t * 2. To determine if it needs to re-summarize in case used routes changed since last summary.\n\t *\n\t * 3. These are added to the summary generated by the data store.\n\t *\n\t * 4. To notify child contexts of their used routes. This is done immediately if the data store is loaded.\n\t * Else, it is done when realizing the data store.\n\t *\n\t * 5. To update the timestamp when this data store or any children are marked as unreferenced.\n\t *\n\t * @param usedRoutes - The routes that are used in this data store.\n\t */\n\tpublic updateUsedRoutes(usedRoutes: string[]) {\n\t\t// Update the used routes in this data store's summarizer node.\n\t\tthis.summarizerNode.updateUsedRoutes(usedRoutes);\n\n\t\t/**\n\t\t * Store the used routes to update the channel if the data store is not loaded yet. If the used routes changed\n\t\t * since the previous run, the data store will be loaded during summarize since the used state changed. So, it's\n\t\t * safe to only store the last used routes.\n\t\t */\n\t\tthis.lastUsedRoutes = usedRoutes;\n\n\t\t// If we are loaded, call the channel so it can update the used routes of the child contexts.\n\t\t// If we are not loaded, we will update this when we are realized.\n\t\tif (this.loaded) {\n\t\t\tthis.updateChannelUsedRoutes();\n\t\t}\n\t}\n\n\t/**\n\t * Called when a new outbound reference is added to another node. This is used by garbage collection to identify\n\t * all references added in the system.\n\t * @param srcHandle - The handle of the node that added the reference.\n\t * @param outboundHandle - The handle of the outbound node that is referenced.\n\t */\n\tpublic addedGCOutboundReference(srcHandle: IFluidHandle, outboundHandle: IFluidHandle) {\n\t\tthis._containerRuntime.addedGCOutboundReference(srcHandle, outboundHandle);\n\t}\n\n\t/**\n\t * Updates the used routes of the channel and its child contexts. The channel must be loaded before calling this.\n\t * It is called in these two scenarios:\n\t * 1. When the used routes of the data store is updated and the data store is loaded.\n\t * 2. When the data store is realized. This updates the channel's used routes as per last GC run.\n\t */\n\tprivate updateChannelUsedRoutes() {\n\t\tassert(this.loaded, 0x144 /* \"Channel should be loaded when updating used routes\" */);\n\t\tassert(\n\t\t\tthis.channel !== undefined,\n\t\t\t0x145 /* \"Channel should be present when data store is loaded\" */,\n\t\t);\n\n\t\t// If there is no lastUsedRoutes, GC has not run up until this point.\n\t\tif (this.lastUsedRoutes === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove the route to this data store, if it exists.\n\t\tconst usedChannelRoutes = this.lastUsedRoutes.filter((id: string) => {\n\t\t\treturn id !== \"/\" && id !== \"\";\n\t\t});\n\t\tthis.channel.updateUsedRoutes(usedChannelRoutes);\n\t}\n\n\t/**\n\t * @deprecated 0.18.Should call request on the runtime directly\n\t */\n\tpublic async request(request: IRequest): Promise<IResponse> {\n\t\tconst runtime = await this.realize();\n\t\treturn runtime.request(request);\n\t}\n\n\tpublic submitMessage(type: string, content: any, localOpMetadata: unknown): void {\n\t\tthis.verifyNotClosed(\"submitMessage\");\n\t\tassert(!!this.channel, 0x146 /* \"Channel must exist when submitting message\" */);\n\t\tconst fluidDataStoreContent: FluidDataStoreMessage = {\n\t\t\tcontent,\n\t\t\ttype,\n\t\t};\n\n\t\t// Summarizer clients should not submit messages.\n\t\tthis.identifyLocalChangeInSummarizer(\"DataStoreMessageSubmittedInSummarizer\", type);\n\n\t\tthis._containerRuntime.submitDataStoreOp(this.id, fluidDataStoreContent, localOpMetadata);\n\t}\n\n\t/**\n\t * This is called from a SharedSummaryBlock that does not generate ops but only wants to be part of the summary.\n\t * It indicates that there is data in the object that needs to be summarized.\n\t * We will update the latestSequenceNumber of the summary tracker of this\n\t * store and of the object's channel.\n\t *\n\t * @param address - The address of the channel that is dirty.\n\t *\n\t */\n\tpublic setChannelDirty(address: string): void {\n\t\tthis.verifyNotClosed(\"setChannelDirty\");\n\n\t\t// Get the latest sequence number.\n\t\tconst latestSequenceNumber = this.deltaManager.lastSequenceNumber;\n\n\t\tthis.summarizerNode.invalidate(latestSequenceNumber);\n\n\t\tconst channelSummarizerNode = this.summarizerNode.getChild(address);\n\n\t\tif (channelSummarizerNode) {\n\t\t\tchannelSummarizerNode.invalidate(latestSequenceNumber); // TODO: lazy load problem?\n\t\t}\n\t}\n\n\t/**\n\t * Submits the signal to be sent to other clients.\n\t * @param type - Type of the signal.\n\t * @param content - Content of the signal.\n\t * @param targetClientId - When specified, the signal is only sent to the provided client id.\n\t */\n\tpublic submitSignal(type: string, content: any, targetClientId?: string) {\n\t\tthis.verifyNotClosed(\"submitSignal\");\n\n\t\tassert(!!this.channel, 0x147 /* \"Channel must exist on submitting signal\" */);\n\t\treturn this._containerRuntime.submitDataStoreSignal(this.id, type, content, targetClientId);\n\t}\n\n\t/**\n\t * This is called by the data store channel when it becomes locally visible indicating that it is ready to become\n\t * globally visible now.\n\t */\n\tpublic makeLocallyVisible() {\n\t\tassert(this.channel !== undefined, 0x2cf /* \"undefined channel on datastore context\" */);\n\t\tassert(\n\t\t\tthis.channel.visibilityState === VisibilityState.LocallyVisible,\n\t\t\t0x590 /* Channel must be locally visible */,\n\t\t);\n\t\tthis.makeLocallyVisibleFn();\n\t}\n\n\tprotected bindRuntime(channel: IFluidDataStoreChannel) {\n\t\tif (this.channel) {\n\t\t\tthrow new Error(\"Runtime already bound\");\n\t\t}\n\n\t\ttry {\n\t\t\tassert(\n\t\t\t\t!this.detachedRuntimeCreation,\n\t\t\t\t0x148 /* \"Detached runtime creation on runtime bind\" */,\n\t\t\t);\n\t\t\tassert(this.channelDeferred !== undefined, 0x149 /* \"Undefined channel deferral\" */);\n\t\t\tassert(this.pkg !== undefined, 0x14a /* \"Undefined package path\" */);\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tconst pending = this.pending!;\n\n\t\t\t// Apply all pending ops\n\t\t\tfor (const op of pending) {\n\t\t\t\tchannel.process(op, false, undefined /* localOpMetadata */);\n\t\t\t}\n\n\t\t\tthis.thresholdOpsCounter.send(\"ProcessPendingOps\", pending.length);\n\t\t\tthis.pending = undefined;\n\n\t\t\t// And now mark the runtime active\n\t\t\tthis.loaded = true;\n\t\t\tthis.channel = channel;\n\n\t\t\t// Freeze the package path to ensure that someone doesn't modify it when it is\n\t\t\t// returned in packagePath().\n\t\t\tObject.freeze(this.pkg);\n\n\t\t\t/**\n\t\t\t * Update the used routes of the channel. If GC has run before this data store was realized, we will have\n\t\t\t * the used routes saved. So, this will ensure that all the child contexts have up-to-date used routes as\n\t\t\t * per the last time GC was run.\n\t\t\t * Also, this data store may have been realized during summarize. In that case, the child contexts need to\n\t\t\t * have their used routes updated to determine if its needs to summarize again and to add it to the summary.\n\t\t\t */\n\t\t\tthis.updateChannelUsedRoutes();\n\n\t\t\t// And notify the pending promise it is now available\n\t\t\tthis.channelDeferred.resolve(this.channel);\n\t\t} catch (error) {\n\t\t\tthis.channelDeferred?.reject(error);\n\t\t\tthis.mc.logger.sendErrorEvent(\n\t\t\t\t{\n\t\t\t\t\teventName: \"BindRuntimeError\",\n\t\t\t\t},\n\t\t\t\terror,\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic async getAbsoluteUrl(relativeUrl: string): Promise<string | undefined> {\n\t\tif (this.attachState !== AttachState.Attached) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this._containerRuntime.getAbsoluteUrl(relativeUrl);\n\t}\n\n\tpublic abstract generateAttachMessage(): IAttachMessage;\n\n\tpublic abstract getInitialSnapshotDetails(): Promise<ISnapshotDetails>;\n\n\t/**\n\t * @deprecated Sets the datastore as root, for aliasing purposes: #7948\n\t * This method should not be used outside of the aliasing context.\n\t * It will be removed, as the source of truth for this flag will be the aliasing blob.\n\t */\n\tpublic setInMemoryRoot(): void {\n\t\tthis._isInMemoryRoot = true;\n\t}\n\n\t/**\n\t * @deprecated The functionality to get base GC details has been moved to summarizer node.\n\t */\n\tpublic async getBaseGCDetails(): Promise<IGarbageCollectionDetailsBase> {\n\t\treturn {};\n\t}\n\n\tpublic reSubmit(contents: any, localOpMetadata: unknown) {\n\t\tassert(!!this.channel, 0x14b /* \"Channel must exist when resubmitting ops\" */);\n\t\tconst innerContents = contents as FluidDataStoreMessage;\n\t\tthis.channel.reSubmit(innerContents.type, innerContents.content, localOpMetadata);\n\t}\n\n\tpublic rollback(contents: any, localOpMetadata: unknown) {\n\t\tif (!this.channel) {\n\t\t\tthrow new Error(\"Channel must exist when rolling back ops\");\n\t\t}\n\t\tif (!this.channel.rollback) {\n\t\t\tthrow new Error(\"Channel doesn't support rollback\");\n\t\t}\n\t\tconst innerContents = contents as FluidDataStoreMessage;\n\t\tthis.channel.rollback(innerContents.type, innerContents.content, localOpMetadata);\n\t}\n\n\tpublic async applyStashedOp(contents: any): Promise<unknown> {\n\t\tif (!this.channel) {\n\t\t\tawait this.realize();\n\t\t}\n\t\tassert(!!this.channel, 0x14c /* \"Channel must exist when rebasing ops\" */);\n\t\treturn this.channel.applyStashedOp(contents);\n\t}\n\n\tprivate verifyNotClosed(\n\t\tcallSite: string,\n\t\tcheckTombstone = true,\n\t\tsafeTelemetryProps: ITelemetryProperties = {},\n\t) {\n\t\tif (this.deleted) {\n\t\t\tconst messageString = `Context is deleted! Call site [${callSite}]`;\n\t\t\tconst error = new DataCorruptionError(messageString, safeTelemetryProps);\n\t\t\tthis.mc.logger.sendErrorEvent(\n\t\t\t\t{\n\t\t\t\t\teventName: \"GC_Deleted_DataStore_Changed\",\n\t\t\t\t\tcallSite,\n\t\t\t\t},\n\t\t\t\terror,\n\t\t\t);\n\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (this._disposed) {\n\t\t\tthrow new Error(`Context is closed! Call site [${callSite}]`);\n\t\t}\n\n\t\tif (checkTombstone && this.tombstoned) {\n\t\t\tconst messageString = `Context is tombstoned! Call site [${callSite}]`;\n\t\t\tconst error = new DataCorruptionError(messageString, safeTelemetryProps);\n\n\t\t\tsendGCUnexpectedUsageEvent(\n\t\t\t\tthis.mc,\n\t\t\t\t{\n\t\t\t\t\teventName: \"GC_Tombstone_DataStore_Changed\",\n\t\t\t\t\tcategory: this.throwOnTombstoneUsage ? \"error\" : \"generic\",\n\t\t\t\t\tgcTombstoneEnforcementAllowed:\n\t\t\t\t\t\tthis._containerRuntime.gcTombstoneEnforcementAllowed,\n\t\t\t\t\tcallSite,\n\t\t\t\t},\n\t\t\t\tthis.pkg,\n\t\t\t\terror,\n\t\t\t);\n\t\t\tif (this.throwOnTombstoneUsage) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Summarizer client should not have local changes. These changes can become part of the summary and can break\n\t * eventual consistency. For example, the next summary (say at ref seq# 100) may contain these changes whereas\n\t * other clients that are up-to-date till seq# 100 may not have them yet.\n\t */\n\tprotected identifyLocalChangeInSummarizer(eventName: string, type?: string) {\n\t\tif (\n\t\t\tthis.clientDetails.type !== summarizerClientType ||\n\t\t\tthis.localChangesTelemetryCount <= 0\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Log a telemetry if there are local changes in the summarizer. This will give us data on how often\n\t\t// this is happening and which data stores do this. The eventual goal is to disallow local changes\n\t\t// in the summarizer and the data will help us plan this.\n\t\tthis.mc.logger.sendTelemetryEvent({\n\t\t\teventName,\n\t\t\ttype,\n\t\t\tisSummaryInProgress: this.summarizerNode.isSummaryInProgress?.(),\n\t\t\tstack: generateStack(),\n\t\t});\n\t\tthis.localChangesTelemetryCount--;\n\t}\n\n\tpublic getCreateChildSummarizerNodeFn(id: string, createParam: CreateChildSummarizerNodeParam) {\n\t\treturn (\n\t\t\tsummarizeInternal: SummarizeInternalFn,\n\t\t\tgetGCDataFn: (fullGC?: boolean) => Promise<IGarbageCollectionData>,\n\t\t) =>\n\t\t\tthis.summarizerNode.createChild(\n\t\t\t\tsummarizeInternal,\n\t\t\t\tid,\n\t\t\t\tcreateParam,\n\t\t\t\t// DDS will not create failure summaries\n\t\t\t\t{ throwOnFailure: true },\n\t\t\t\tgetGCDataFn,\n\t\t\t);\n\t}\n\n\tpublic async uploadBlob(\n\t\tblob: ArrayBufferLike,\n\t\tsignal?: AbortSignal,\n\t): Promise<IFluidHandle<ArrayBufferLike>> {\n\t\treturn this.containerRuntime.uploadBlob(blob, signal);\n\t}\n}\n\nexport class RemoteFluidDataStoreContext extends FluidDataStoreContext {\n\tprivate readonly initSnapshotValue: ISnapshotTree | undefined;\n\n\tconstructor(props: IRemoteFluidDataStoreContextProps) {\n\t\tsuper(props, true /* existing */, false /* isLocalDataStore */, () => {\n\t\t\tthrow new Error(\"Already attached\");\n\t\t});\n\n\t\tthis.initSnapshotValue = props.snapshotTree;\n\n\t\tif (props.snapshotTree !== undefined) {\n\t\t\tthis.summarizerNode.updateBaseSummaryState(props.snapshotTree);\n\t\t}\n\t}\n\n\tprivate readonly initialSnapshotDetailsP = new LazyPromise<ISnapshotDetails>(async () => {\n\t\tlet tree = this.initSnapshotValue;\n\t\tlet isRootDataStore = true;\n\n\t\tif (!!tree && tree.blobs[dataStoreAttributesBlobName] !== undefined) {\n\t\t\t// Need to get through snapshot and use that to populate extraBlobs\n\t\t\tconst attributes = await readAndParse<ReadFluidDataStoreAttributes>(\n\t\t\t\tthis.storage,\n\t\t\t\ttree.blobs[dataStoreAttributesBlobName],\n\t\t\t);\n\n\t\t\tlet pkgFromSnapshot: string[];\n\t\t\t// Use the snapshotFormatVersion to determine how the pkg is encoded in the snapshot.\n\t\t\t// For snapshotFormatVersion = \"0.1\" (1) or above, pkg is jsonified, otherwise it is just a string.\n\t\t\tconst formatVersion = getAttributesFormatVersion(attributes);\n\t\t\tif (formatVersion < 1) {\n\t\t\t\tpkgFromSnapshot =\n\t\t\t\t\tattributes.pkg.startsWith('[\"') && attributes.pkg.endsWith('\"]')\n\t\t\t\t\t\t? (JSON.parse(attributes.pkg) as string[])\n\t\t\t\t\t\t: [attributes.pkg];\n\t\t\t} else {\n\t\t\t\tpkgFromSnapshot = JSON.parse(attributes.pkg) as string[];\n\t\t\t}\n\t\t\tthis.pkg = pkgFromSnapshot;\n\n\t\t\t/**\n\t\t\t * If there is no isRootDataStore in the attributes blob, set it to true. This will ensure that\n\t\t\t * data stores in older documents are not garbage collected incorrectly. This may lead to additional\n\t\t\t * roots in the document but they won't break.\n\t\t\t */\n\t\t\tisRootDataStore = attributes.isRootDataStore ?? true;\n\n\t\t\tif (hasIsolatedChannels(attributes)) {\n\t\t\t\ttree = tree.trees[channelsTreeName];\n\t\t\t\tassert(\n\t\t\t\t\ttree !== undefined,\n\t\t\t\t\t0x1fe /* \"isolated channels subtree should exist in remote datastore snapshot\" */,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tpkg: this.pkg!,\n\t\t\tisRootDataStore,\n\t\t\tsnapshot: tree,\n\t\t};\n\t});\n\n\tpublic async getInitialSnapshotDetails(): Promise<ISnapshotDetails> {\n\t\treturn this.initialSnapshotDetailsP;\n\t}\n\n\tpublic generateAttachMessage(): IAttachMessage {\n\t\tthrow new Error(\"Cannot attach remote store\");\n\t}\n}\n\n/**\n * Base class for detached & attached context classes\n */\nexport class LocalFluidDataStoreContextBase extends FluidDataStoreContext {\n\tprivate readonly snapshotTree: ISnapshotTree | undefined;\n\t/**\n\t * @deprecated 0.16 Issue #1635, #3631\n\t */\n\tpublic readonly createProps?: any;\n\n\tconstructor(props: ILocalFluidDataStoreContextProps) {\n\t\tsuper(\n\t\t\tprops,\n\t\t\tprops.snapshotTree !== undefined ? true : false /* existing */,\n\t\t\ttrue /* isLocalDataStore */,\n\t\t\tprops.makeLocallyVisibleFn,\n\t\t);\n\n\t\t// Summarizer client should not create local data stores.\n\t\tthis.identifyLocalChangeInSummarizer(\"DataStoreCreatedInSummarizer\");\n\n\t\tthis.snapshotTree = props.snapshotTree;\n\t\tif (props.isRootDataStore === true) {\n\t\t\tthis.setInMemoryRoot();\n\t\t}\n\t\tthis.createProps = props.createProps;\n\t\tthis.attachListeners();\n\t}\n\n\tprivate attachListeners(): void {\n\t\tthis.once(\"attaching\", () => {\n\t\t\tassert(\n\t\t\t\tthis.attachState === AttachState.Detached,\n\t\t\t\t0x14d /* \"Should move from detached to attaching\" */,\n\t\t\t);\n\t\t\tthis._attachState = AttachState.Attaching;\n\t\t});\n\t\tthis.once(\"attached\", () => {\n\t\t\tassert(\n\t\t\t\tthis.attachState === AttachState.Attaching,\n\t\t\t\t0x14e /* \"Should move from attaching to attached\" */,\n\t\t\t);\n\t\t\tthis._attachState = AttachState.Attached;\n\t\t});\n\t}\n\n\tpublic generateAttachMessage(): IAttachMessage {\n\t\tassert(\n\t\t\tthis.channel !== undefined,\n\t\t\t0x14f /* \"There should be a channel when generating attach message\" */,\n\t\t);\n\t\tassert(\n\t\t\tthis.pkg !== undefined,\n\t\t\t0x150 /* \"pkg should be available in local data store context\" */,\n\t\t);\n\n\t\tconst summarizeResult = this.channel.getAttachSummary();\n\n\t\t// Wrap dds summaries in .channels subtree.\n\t\twrapSummaryInChannelsTree(summarizeResult);\n\n\t\t// Add data store's attributes to the summary.\n\t\tconst attributes = createAttributes(this.pkg, this.isInMemoryRoot());\n\t\taddBlobToSummary(summarizeResult, dataStoreAttributesBlobName, JSON.stringify(attributes));\n\n\t\t// Attach message needs the summary in ITree format. Convert the ISummaryTree into an ITree.\n\t\tconst snapshot = convertSummaryTreeToITree(summarizeResult.summary);\n\n\t\tconst message: IAttachMessage = {\n\t\t\tid: this.id,\n\t\t\tsnapshot,\n\t\t\ttype: this.pkg[this.pkg.length - 1],\n\t\t};\n\n\t\treturn message;\n\t}\n\n\tprivate readonly initialSnapshotDetailsP = new LazyPromise<ISnapshotDetails>(async () => {\n\t\tlet snapshot = this.snapshotTree;\n\t\tlet attributes: ReadFluidDataStoreAttributes;\n\t\tlet isRootDataStore = false;\n\t\tif (snapshot !== undefined) {\n\t\t\t// Get the dataStore attributes.\n\t\t\t// Note: storage can be undefined in special case while detached.\n\t\t\tattributes = await getFluidDataStoreAttributes(this.storage, snapshot);\n\t\t\tif (hasIsolatedChannels(attributes)) {\n\t\t\t\tsnapshot = snapshot.trees[channelsTreeName];\n\t\t\t\tassert(\n\t\t\t\t\tsnapshot !== undefined,\n\t\t\t\t\t0x1ff /* \"isolated channels subtree should exist in local datastore snapshot\" */,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (this.pkg === undefined) {\n\t\t\t\tthis.pkg = JSON.parse(attributes.pkg) as string[];\n\t\t\t\t// If there is no isRootDataStore in the attributes blob, set it to true. This ensures that data\n\t\t\t\t// stores in older documents are not garbage collected incorrectly. This may lead to additional\n\t\t\t\t// roots in the document but they won't break.\n\t\t\t\tif (attributes.isRootDataStore ?? true) {\n\t\t\t\t\tisRootDataStore = true;\n\t\t\t\t\tthis.setInMemoryRoot();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tassert(this.pkg !== undefined, 0x152 /* \"pkg should be available in local data store\" */);\n\n\t\treturn {\n\t\t\tpkg: this.pkg,\n\t\t\tisRootDataStore,\n\t\t\tsnapshot,\n\t\t};\n\t});\n\n\tpublic async getInitialSnapshotDetails(): Promise<ISnapshotDetails> {\n\t\treturn this.initialSnapshotDetailsP;\n\t}\n\n\t/**\n\t * A context should only be marked as deleted when its a remote context.\n\t * Session Expiry at the runtime level should have closed the container creating the local data store context\n\t * before delete is even possible. Session Expiry is at 30 days, and sweep is done 36+ days later from the time\n\t * it was unreferenced. Thus the sweeping container should have loaded from a snapshot and thus creating a remote\n\t * context.\n\t */\n\tpublic delete() {\n\t\t// TODO: GC:Validation - potentially prevent this from happening or asserting. Maybe throw here.\n\t\tsendGCUnexpectedUsageEvent(\n\t\t\tthis.mc,\n\t\t\t{\n\t\t\t\teventName: \"GC_Deleted_DataStore_Unexpected_Delete\",\n\t\t\t\tmessage: \"Unexpected deletion of a local data store context\",\n\t\t\t\tcategory: \"error\",\n\t\t\t\tgcTombstoneEnforcementAllowed: undefined,\n\t\t\t},\n\t\t\tthis.pkg,\n\t\t);\n\t\tsuper.delete();\n\t}\n}\n\n/**\n * context implementation for \"attached\" data store runtime.\n * Various workflows (snapshot creation, requests) result in .realize() being called\n * on context, resulting in instantiation and attachment of runtime.\n * Runtime is created using data store factory that is associated with this context.\n */\nexport class LocalFluidDataStoreContext extends LocalFluidDataStoreContextBase {\n\tconstructor(props: ILocalFluidDataStoreContextProps) {\n\t\tsuper(props);\n\t}\n}\n\n/**\n * Detached context. Data Store runtime will be attached to it by attachRuntime() call\n * Before attachment happens, this context is not associated with particular type of runtime\n * or factory, i.e. it's package path is undefined.\n * Attachment process provides all missing parts - package path, data store runtime, and data store factory\n */\nexport class LocalDetachedFluidDataStoreContext\n\textends LocalFluidDataStoreContextBase\n\timplements IFluidDataStoreContextDetached\n{\n\tconstructor(props: ILocalFluidDataStoreContextProps) {\n\t\tsuper(props);\n\t\tthis.detachedRuntimeCreation = true;\n\t}\n\n\tpublic async attachRuntime(\n\t\tregistry: IProvideFluidDataStoreFactory,\n\t\tdataStoreChannel: IFluidDataStoreChannel,\n\t) {\n\t\tassert(this.detachedRuntimeCreation, 0x154 /* \"runtime creation is already attached\" */);\n\t\tthis.detachedRuntimeCreation = false;\n\n\t\tassert(this.channelDeferred === undefined, 0x155 /* \"channel deferral is already set\" */);\n\t\tthis.channelDeferred = new Deferred<IFluidDataStoreChannel>();\n\n\t\tconst factory = registry.IFluidDataStoreFactory;\n\n\t\tconst entry = await this.factoryFromPackagePath(this.pkg);\n\t\tassert(entry.factory === factory, 0x156 /* \"Unexpected factory for package path\" */);\n\n\t\tassert(this.registry === undefined, 0x157 /* \"datastore registry already attached\" */);\n\t\tthis.registry = entry.registry;\n\n\t\tsuper.bindRuntime(dataStoreChannel);\n\n\t\t// Load the handle to the data store's entryPoint to make sure that for a detached data store, the entryPoint\n\t\t// initialization function is called before the data store gets attached and potentially connected to the\n\t\t// delta stream, so it gets a chance to do things while the data store is still \"purely local\".\n\t\t// This preserves the behavior from before we introduced entryPoints, where the instantiateDataStore method\n\t\t// of data store factories tends to construct the data object (at least kick off an async method that returns\n\t\t// it); that code moved to the entryPoint initialization function, so we want to ensure it still executes\n\t\t// before the data store is attached.\n\t\tawait dataStoreChannel.entryPoint.get();\n\n\t\tif (await this.isRoot()) {\n\t\t\tdataStoreChannel.makeVisibleAndAttachGraph();\n\t\t}\n\t}\n\n\tpublic async getInitialSnapshotDetails(): Promise<ISnapshotDetails> {\n\t\tif (this.detachedRuntimeCreation) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Detached Fluid Data Store context can't be realized! Please attach runtime first!\",\n\t\t\t);\n\t\t}\n\t\treturn super.getInitialSnapshotDetails();\n\t}\n}\n"]}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { FluidDataStoreRegistryEntry, IFluidDataStoreRegistry, NamedFluidDataStoreRegistryEntries } from "@fluidframework/runtime-definitions";
|
|
2
|
+
/**
|
|
3
|
+
* @public
|
|
4
|
+
*/
|
|
2
5
|
export declare class FluidDataStoreRegistry implements IFluidDataStoreRegistry {
|
|
3
6
|
private readonly map;
|
|
4
7
|
get IFluidDataStoreRegistry(): this;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataStoreRegistry.d.ts","sourceRoot":"","sources":["../src/dataStoreRegistry.ts"],"names":[],"mappings":"AAKA,OAAO,EACN,2BAA2B,EAC3B,uBAAuB,EACvB,kCAAkC,EAClC,MAAM,qCAAqC,CAAC;AAE7C,qBAAa,sBAAuB,YAAW,uBAAuB;IACrE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAGlB;IAEF,IAAW,uBAAuB,SAEjC;gBAEW,YAAY,EAAE,kCAAkC;IAU/C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC;CAOhF"}
|
|
1
|
+
{"version":3,"file":"dataStoreRegistry.d.ts","sourceRoot":"","sources":["../src/dataStoreRegistry.ts"],"names":[],"mappings":"AAKA,OAAO,EACN,2BAA2B,EAC3B,uBAAuB,EACvB,kCAAkC,EAClC,MAAM,qCAAqC,CAAC;AAE7C;;GAEG;AACH,qBAAa,sBAAuB,YAAW,uBAAuB;IACrE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAGlB;IAEF,IAAW,uBAAuB,SAEjC;gBAEW,YAAY,EAAE,kCAAkC;IAU/C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC;CAOhF"}
|
package/lib/dataStoreRegistry.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataStoreRegistry.js","sourceRoot":"","sources":["../src/dataStoreRegistry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAO7D,MAAM,OAAO,sBAAsB;IAMlC,IAAW,uBAAuB;QACjC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,YAAY,YAAgD;QAC3D,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;QACrB,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE;YACjC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC3B,MAAM,IAAI,UAAU,CAAC,6BAA6B,CAAC,CAAC;aACpD;YACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SACjC;IACF,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,IAAY;QAC5B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACvB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAC1B;QAED,OAAO,SAAS,CAAC;IAClB,CAAC;CACD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\nimport { UsageError } from \"@fluidframework/telemetry-utils\";\nimport {\n\tFluidDataStoreRegistryEntry,\n\tIFluidDataStoreRegistry,\n\tNamedFluidDataStoreRegistryEntries,\n} from \"@fluidframework/runtime-definitions\";\n\nexport class FluidDataStoreRegistry implements IFluidDataStoreRegistry {\n\tprivate readonly map: Map<\n\t\tstring,\n\t\tFluidDataStoreRegistryEntry | Promise<FluidDataStoreRegistryEntry>\n\t>;\n\n\tpublic get IFluidDataStoreRegistry() {\n\t\treturn this;\n\t}\n\n\tconstructor(namedEntries: NamedFluidDataStoreRegistryEntries) {\n\t\tthis.map = new Map();\n\t\tfor (const entry of namedEntries) {\n\t\t\tif (this.map.has(entry[0])) {\n\t\t\t\tthrow new UsageError(\"Duplicate entry names exist\");\n\t\t\t}\n\t\t\tthis.map.set(entry[0], entry[1]);\n\t\t}\n\t}\n\n\tpublic async get(name: string): Promise<FluidDataStoreRegistryEntry | undefined> {\n\t\tif (this.map.has(name)) {\n\t\t\treturn this.map.get(name);\n\t\t}\n\n\t\treturn undefined;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dataStoreRegistry.js","sourceRoot":"","sources":["../src/dataStoreRegistry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAO7D;;GAEG;AACH,MAAM,OAAO,sBAAsB;IAMlC,IAAW,uBAAuB;QACjC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,YAAY,YAAgD;QAC3D,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;QACrB,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE;YACjC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC3B,MAAM,IAAI,UAAU,CAAC,6BAA6B,CAAC,CAAC;aACpD;YACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SACjC;IACF,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,IAAY;QAC5B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACvB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAC1B;QAED,OAAO,SAAS,CAAC;IAClB,CAAC;CACD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\nimport { UsageError } from \"@fluidframework/telemetry-utils\";\nimport {\n\tFluidDataStoreRegistryEntry,\n\tIFluidDataStoreRegistry,\n\tNamedFluidDataStoreRegistryEntries,\n} from \"@fluidframework/runtime-definitions\";\n\n/**\n * @public\n */\nexport class FluidDataStoreRegistry implements IFluidDataStoreRegistry {\n\tprivate readonly map: Map<\n\t\tstring,\n\t\tFluidDataStoreRegistryEntry | Promise<FluidDataStoreRegistryEntry>\n\t>;\n\n\tpublic get IFluidDataStoreRegistry() {\n\t\treturn this;\n\t}\n\n\tconstructor(namedEntries: NamedFluidDataStoreRegistryEntries) {\n\t\tthis.map = new Map();\n\t\tfor (const entry of namedEntries) {\n\t\t\tif (this.map.has(entry[0])) {\n\t\t\t\tthrow new UsageError(\"Duplicate entry names exist\");\n\t\t\t}\n\t\t\tthis.map.set(entry[0], entry[1]);\n\t\t}\n\t}\n\n\tpublic async get(name: string): Promise<FluidDataStoreRegistryEntry | undefined> {\n\t\tif (this.map.has(name)) {\n\t\t\treturn this.map.get(name);\n\t\t}\n\n\t\treturn undefined;\n\t}\n}\n"]}
|
|
@@ -29,7 +29,7 @@ export declare class DeltaManagerProxyBase extends EventForwarder<IDeltaManagerE
|
|
|
29
29
|
get readOnlyInfo(): ReadOnlyInfo;
|
|
30
30
|
constructor(deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>);
|
|
31
31
|
dispose(): void;
|
|
32
|
-
submitSignal(content: any): void;
|
|
32
|
+
submitSignal(content: any, targetClientId?: string): void;
|
|
33
33
|
flush(): void;
|
|
34
34
|
}
|
|
35
35
|
//# sourceMappingURL=deltaManagerProxyBase.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deltaManagerProxyBase.d.ts","sourceRoot":"","sources":["../src/deltaManagerProxyBase.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EACN,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACN,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,yBAAyB,EACzB,cAAc,EACd,MAAM,sCAAsC,CAAC;AAE9C;;;GAGG;AACH,qBAAa,qBACZ,SAAQ,cAAc,CAAC,mBAAmB,CAC1C,YAAW,aAAa,CAAC,yBAAyB,EAAE,gBAAgB,CAAC;IAmEpE,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,yBAAyB,EAAE,gBAAgB,CAAC;IAjE5F,IAAW,YAAY,IAAI,YAAY,CAEtC;IAED,IAAW,OAAO,IAAI,WAAW,CAAC,yBAAyB,CAAC,CAE3D;IAED,IAAW,QAAQ,IAAI,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAErD;IAED,IAAW,aAAa,IAAI,WAAW,CAAC,cAAc,CAAC,CAEtD;IAED,IAAW,qBAAqB,IAAI,MAAM,CAEzC;IAED,IAAW,kBAAkB,IAAI,MAAM,CAEtC;IAED,IAAW,WAAW,0CAErB;IAED,IAAW,kBAAkB,WAE5B;IAED,IAAW,qBAAqB,IAAI,MAAM,CAEzC;IAED,IAAW,2BAA2B,YAErC;IAED,IAAW,aAAa,IAAI,cAAc,CAEzC;IAED,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,IAAW,cAAc,IAAI,MAAM,CAElC;IAED,IAAW,oBAAoB,IAAI,oBAAoB,GAAG,SAAS,CAElE;IAED,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED,IAAW,YAAY,IAAI,YAAY,CAEtC;gBAGmB,YAAY,EAAE,aAAa,CAAC,yBAAyB,EAAE,gBAAgB,CAAC;IAKrF,OAAO,IAAI,IAAI;IAIf,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"deltaManagerProxyBase.d.ts","sourceRoot":"","sources":["../src/deltaManagerProxyBase.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EACN,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACN,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,yBAAyB,EACzB,cAAc,EACd,MAAM,sCAAsC,CAAC;AAE9C;;;GAGG;AACH,qBAAa,qBACZ,SAAQ,cAAc,CAAC,mBAAmB,CAC1C,YAAW,aAAa,CAAC,yBAAyB,EAAE,gBAAgB,CAAC;IAmEpE,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,yBAAyB,EAAE,gBAAgB,CAAC;IAjE5F,IAAW,YAAY,IAAI,YAAY,CAEtC;IAED,IAAW,OAAO,IAAI,WAAW,CAAC,yBAAyB,CAAC,CAE3D;IAED,IAAW,QAAQ,IAAI,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAErD;IAED,IAAW,aAAa,IAAI,WAAW,CAAC,cAAc,CAAC,CAEtD;IAED,IAAW,qBAAqB,IAAI,MAAM,CAEzC;IAED,IAAW,kBAAkB,IAAI,MAAM,CAEtC;IAED,IAAW,WAAW,0CAErB;IAED,IAAW,kBAAkB,WAE5B;IAED,IAAW,qBAAqB,IAAI,MAAM,CAEzC;IAED,IAAW,2BAA2B,YAErC;IAED,IAAW,aAAa,IAAI,cAAc,CAEzC;IAED,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,IAAW,cAAc,IAAI,MAAM,CAElC;IAED,IAAW,oBAAoB,IAAI,oBAAoB,GAAG,SAAS,CAElE;IAED,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED,IAAW,YAAY,IAAI,YAAY,CAEtC;gBAGmB,YAAY,EAAE,aAAa,CAAC,yBAAyB,EAAE,gBAAgB,CAAC;IAKrF,OAAO,IAAI,IAAI;IAIf,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;IAIzD,KAAK,IAAI,IAAI;CAGpB"}
|
|
@@ -63,8 +63,8 @@ export class DeltaManagerProxyBase extends EventForwarder {
|
|
|
63
63
|
dispose() {
|
|
64
64
|
super.dispose();
|
|
65
65
|
}
|
|
66
|
-
submitSignal(content) {
|
|
67
|
-
return this.deltaManager.submitSignal(content);
|
|
66
|
+
submitSignal(content, targetClientId) {
|
|
67
|
+
return this.deltaManager.submitSignal(content, targetClientId);
|
|
68
68
|
}
|
|
69
69
|
flush() {
|
|
70
70
|
return this.deltaManager.flush();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deltaManagerProxyBase.js","sourceRoot":"","sources":["../src/deltaManagerProxyBase.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAgB9D;;;GAGG;AACH,MAAM,OAAO,qBACZ,SAAQ,cAAmC;IAG3C,IAAW,YAAY;QACtB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAW,OAAO;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IAClC,CAAC;IAED,IAAW,QAAQ;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED,IAAW,aAAa;QACvB,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;IACxC,CAAC;IAED,IAAW,qBAAqB;QAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC;IAChD,CAAC;IAED,IAAW,kBAAkB;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC;IAC7C,CAAC;IAED,IAAW,WAAW;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;IACtC,CAAC;IAED,IAAW,kBAAkB;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC;IAC7C,CAAC;IAED,IAAW,qBAAqB;QAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC;IAChD,CAAC;IAED,IAAW,2BAA2B;QACrC,OAAO,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAAC;IACtD,CAAC;IAED,IAAW,aAAa;QACvB,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;IACxC,CAAC;IAED,IAAW,OAAO;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IAClC,CAAC;IAED,IAAW,cAAc;QACxB,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;IACzC,CAAC;IAED,IAAW,oBAAoB;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC;IAC/C,CAAC;IAED,IAAW,MAAM;QAChB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IACjC,CAAC;IAED,IAAW,YAAY;QACtB,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;IACvC,CAAC;IAED,YACoB,YAAwE;QAE3F,KAAK,CAAC,YAAY,CAAC,CAAC;QAFD,iBAAY,GAAZ,YAAY,CAA4D;IAG5F,CAAC;IAEM,OAAO;QACb,KAAK,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAEM,YAAY,CAAC,OAAY;
|
|
1
|
+
{"version":3,"file":"deltaManagerProxyBase.js","sourceRoot":"","sources":["../src/deltaManagerProxyBase.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAgB9D;;;GAGG;AACH,MAAM,OAAO,qBACZ,SAAQ,cAAmC;IAG3C,IAAW,YAAY;QACtB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAW,OAAO;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IAClC,CAAC;IAED,IAAW,QAAQ;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED,IAAW,aAAa;QACvB,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;IACxC,CAAC;IAED,IAAW,qBAAqB;QAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC;IAChD,CAAC;IAED,IAAW,kBAAkB;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC;IAC7C,CAAC;IAED,IAAW,WAAW;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;IACtC,CAAC;IAED,IAAW,kBAAkB;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC;IAC7C,CAAC;IAED,IAAW,qBAAqB;QAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC;IAChD,CAAC;IAED,IAAW,2BAA2B;QACrC,OAAO,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAAC;IACtD,CAAC;IAED,IAAW,aAAa;QACvB,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;IACxC,CAAC;IAED,IAAW,OAAO;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IAClC,CAAC;IAED,IAAW,cAAc;QACxB,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;IACzC,CAAC;IAED,IAAW,oBAAoB;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC;IAC/C,CAAC;IAED,IAAW,MAAM;QAChB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IACjC,CAAC;IAED,IAAW,YAAY;QACtB,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;IACvC,CAAC;IAED,YACoB,YAAwE;QAE3F,KAAK,CAAC,YAAY,CAAC,CAAC;QAFD,iBAAY,GAAZ,YAAY,CAA4D;IAG5F,CAAC;IAEM,OAAO;QACb,KAAK,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAEM,YAAY,CAAC,OAAY,EAAE,cAAuB;QACxD,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAChE,CAAC;IAEM,KAAK;QACX,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;CACD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { EventForwarder } from \"@fluid-internal/client-utils\";\nimport {\n\tIDeltaManager,\n\tIDeltaManagerEvents,\n\tIDeltaQueue,\n\tIDeltaSender,\n\tReadOnlyInfo,\n} from \"@fluidframework/container-definitions\";\nimport {\n\tIClientConfiguration,\n\tIClientDetails,\n\tIDocumentMessage,\n\tISequencedDocumentMessage,\n\tISignalMessage,\n} from \"@fluidframework/protocol-definitions\";\n\n/**\n * Base class for creating proxy to the real delta manager. It implements all required methods on IDeltaManager and\n * proxy implementations can override specific methods.\n */\nexport class DeltaManagerProxyBase\n\textends EventForwarder<IDeltaManagerEvents>\n\timplements IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>\n{\n\tpublic get IDeltaSender(): IDeltaSender {\n\t\treturn this;\n\t}\n\n\tpublic get inbound(): IDeltaQueue<ISequencedDocumentMessage> {\n\t\treturn this.deltaManager.inbound;\n\t}\n\n\tpublic get outbound(): IDeltaQueue<IDocumentMessage[]> {\n\t\treturn this.deltaManager.outbound;\n\t}\n\n\tpublic get inboundSignal(): IDeltaQueue<ISignalMessage> {\n\t\treturn this.deltaManager.inboundSignal;\n\t}\n\n\tpublic get minimumSequenceNumber(): number {\n\t\treturn this.deltaManager.minimumSequenceNumber;\n\t}\n\n\tpublic get lastSequenceNumber(): number {\n\t\treturn this.deltaManager.lastSequenceNumber;\n\t}\n\n\tpublic get lastMessage() {\n\t\treturn this.deltaManager.lastMessage;\n\t}\n\n\tpublic get lastKnownSeqNumber() {\n\t\treturn this.deltaManager.lastKnownSeqNumber;\n\t}\n\n\tpublic get initialSequenceNumber(): number {\n\t\treturn this.deltaManager.initialSequenceNumber;\n\t}\n\n\tpublic get hasCheckpointSequenceNumber() {\n\t\treturn this.deltaManager.hasCheckpointSequenceNumber;\n\t}\n\n\tpublic get clientDetails(): IClientDetails {\n\t\treturn this.deltaManager.clientDetails;\n\t}\n\n\tpublic get version(): string {\n\t\treturn this.deltaManager.version;\n\t}\n\n\tpublic get maxMessageSize(): number {\n\t\treturn this.deltaManager.maxMessageSize;\n\t}\n\n\tpublic get serviceConfiguration(): IClientConfiguration | undefined {\n\t\treturn this.deltaManager.serviceConfiguration;\n\t}\n\n\tpublic get active(): boolean {\n\t\treturn this.deltaManager.active;\n\t}\n\n\tpublic get readOnlyInfo(): ReadOnlyInfo {\n\t\treturn this.deltaManager.readOnlyInfo;\n\t}\n\n\tconstructor(\n\t\tprotected readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,\n\t) {\n\t\tsuper(deltaManager);\n\t}\n\n\tpublic dispose(): void {\n\t\tsuper.dispose();\n\t}\n\n\tpublic submitSignal(content: any, targetClientId?: string): void {\n\t\treturn this.deltaManager.submitSignal(content, targetClientId);\n\t}\n\n\tpublic flush(): void {\n\t\treturn this.deltaManager.flush();\n\t}\n}\n"]}
|