@fluidframework/datastore 2.41.0-338401 → 2.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.cjs +1 -4
- package/CHANGELOG.md +4 -0
- package/dist/channelContext.d.ts +7 -5
- package/dist/channelContext.d.ts.map +1 -1
- package/dist/channelContext.js +3 -1
- package/dist/channelContext.js.map +1 -1
- package/dist/channelDeltaConnection.d.ts +5 -5
- package/dist/channelDeltaConnection.d.ts.map +1 -1
- package/dist/channelDeltaConnection.js +7 -6
- package/dist/channelDeltaConnection.js.map +1 -1
- package/dist/channelStorageService.js +2 -2
- package/dist/channelStorageService.js.map +1 -1
- package/dist/dataStoreRuntime.d.ts.map +1 -1
- package/dist/dataStoreRuntime.js +65 -37
- package/dist/dataStoreRuntime.js.map +1 -1
- package/dist/fluidHandle.d.ts.map +1 -1
- package/dist/fluidHandle.js +6 -2
- package/dist/fluidHandle.js.map +1 -1
- package/dist/localChannelContext.d.ts +8 -6
- package/dist/localChannelContext.d.ts.map +1 -1
- package/dist/localChannelContext.js +8 -6
- package/dist/localChannelContext.js.map +1 -1
- package/dist/localChannelStorageService.d.ts.map +1 -1
- package/dist/localChannelStorageService.js +6 -4
- package/dist/localChannelStorageService.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/remoteChannelContext.d.ts +7 -5
- package/dist/remoteChannelContext.d.ts.map +1 -1
- package/dist/remoteChannelContext.js +5 -4
- package/dist/remoteChannelContext.js.map +1 -1
- package/lib/channelContext.d.ts +7 -5
- package/lib/channelContext.d.ts.map +1 -1
- package/lib/channelContext.js +3 -1
- package/lib/channelContext.js.map +1 -1
- package/lib/channelDeltaConnection.d.ts +5 -5
- package/lib/channelDeltaConnection.d.ts.map +1 -1
- package/lib/channelDeltaConnection.js +7 -6
- package/lib/channelDeltaConnection.js.map +1 -1
- package/lib/channelStorageService.js +2 -2
- package/lib/channelStorageService.js.map +1 -1
- package/lib/dataStoreRuntime.d.ts.map +1 -1
- package/lib/dataStoreRuntime.js +65 -37
- package/lib/dataStoreRuntime.js.map +1 -1
- package/lib/fluidHandle.d.ts.map +1 -1
- package/lib/fluidHandle.js +6 -2
- package/lib/fluidHandle.js.map +1 -1
- package/lib/localChannelContext.d.ts +8 -6
- package/lib/localChannelContext.d.ts.map +1 -1
- package/lib/localChannelContext.js +8 -6
- package/lib/localChannelContext.js.map +1 -1
- package/lib/localChannelStorageService.d.ts.map +1 -1
- package/lib/localChannelStorageService.js +6 -4
- package/lib/localChannelStorageService.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.d.ts.map +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/remoteChannelContext.d.ts +7 -5
- package/lib/remoteChannelContext.d.ts.map +1 -1
- package/lib/remoteChannelContext.js +5 -4
- package/lib/remoteChannelContext.js.map +1 -1
- package/package.json +15 -15
- package/src/channelContext.ts +7 -5
- package/src/channelDeltaConnection.ts +19 -19
- package/src/channelStorageService.ts +3 -3
- package/src/dataStoreRuntime.ts +100 -64
- package/src/fluidHandle.ts +7 -3
- package/src/localChannelContext.ts +18 -16
- package/src/localChannelStorageService.ts +6 -4
- package/src/packageVersion.ts +1 -1
- package/src/remoteChannelContext.ts +19 -19
package/.eslintrc.cjs
CHANGED
|
@@ -4,10 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
module.exports = {
|
|
7
|
-
extends: [
|
|
8
|
-
require.resolve("@fluidframework/eslint-config-fluid/minimal-deprecated"),
|
|
9
|
-
"prettier",
|
|
10
|
-
],
|
|
7
|
+
extends: [require.resolve("@fluidframework/eslint-config-fluid"), "prettier"],
|
|
11
8
|
parserOptions: {
|
|
12
9
|
project: ["./tsconfig.json", "./src/test/tsconfig.json"],
|
|
13
10
|
},
|
package/CHANGELOG.md
CHANGED
package/dist/channelContext.d.ts
CHANGED
|
@@ -19,9 +19,9 @@ export interface IChannelContext {
|
|
|
19
19
|
*/
|
|
20
20
|
processMessages(messageCollection: IRuntimeMessageCollection): void;
|
|
21
21
|
summarize(fullTree?: boolean, trackState?: boolean, telemetryContext?: ITelemetryContext): Promise<ISummarizeResult>;
|
|
22
|
-
reSubmit(content:
|
|
23
|
-
applyStashedOp(content:
|
|
24
|
-
rollback(message:
|
|
22
|
+
reSubmit(content: unknown, localOpMetadata: unknown, squash?: boolean): void;
|
|
23
|
+
applyStashedOp(content: unknown): unknown;
|
|
24
|
+
rollback(message: unknown, localOpMetadata: unknown): void;
|
|
25
25
|
/**
|
|
26
26
|
* Returns the data used for garbage collection. This includes a list of GC nodes that represent this context
|
|
27
27
|
* including any of its children. Each node has a set of outbound routes to other GC nodes in the document.
|
|
@@ -40,8 +40,10 @@ export interface ChannelServiceEndpoints {
|
|
|
40
40
|
deltaConnection: ChannelDeltaConnection;
|
|
41
41
|
objectStorage: ChannelStorageService;
|
|
42
42
|
}
|
|
43
|
-
export declare function createChannelServiceEndpoints(connected: boolean, submitFn: (content:
|
|
44
|
-
/**
|
|
43
|
+
export declare function createChannelServiceEndpoints(connected: boolean, submitFn: (content: unknown, localOpMetadata: unknown) => void, dirtyFn: () => void, isAttachedAndVisible: () => boolean, storageService: IDocumentStorageService, logger: ITelemetryLoggerExt, tree?: ISnapshotTree, extraBlobs?: Map<string, ArrayBufferLike>): ChannelServiceEndpoints;
|
|
44
|
+
/**
|
|
45
|
+
* Used to get the channel's summary for the DDS or DataStore attach op.
|
|
46
|
+
*/
|
|
45
47
|
export declare function summarizeChannel(channel: IChannel, fullTree?: boolean, trackState?: boolean, telemetryContext?: ITelemetryContext): ISummaryTreeWithStats;
|
|
46
48
|
export declare function summarizeChannelAsync(channel: IChannel, fullTree?: boolean, trackState?: boolean, telemetryContext?: ITelemetryContext, incrementalSummaryContext?: IExperimentalIncrementalSummaryContext): Promise<ISummaryTreeWithStats>;
|
|
47
49
|
export declare function loadChannelFactoryAndAttributes(dataStoreContext: IFluidDataStoreContext, services: ChannelServiceEndpoints, channelId: string, registry: ISharedObjectRegistry, attachMessageType?: string): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channelContext.d.ts","sourceRoot":"","sources":["../src/channelContext.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACN,uBAAuB,EACvB,aAAa,EACb,MAAM,6CAA6C,CAAC;AAErD,OAAO,EACN,sCAAsC,EACtC,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,KAAK,yBAAyB,EAC9B,MAAM,8CAA8C,CAAC;AAEtD,OAAO,EACN,mBAAmB,EAGnB,MAAM,0CAA0C,CAAC;AAElD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC/B,UAAU,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEhC,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,OAAE;IAE1D;;;OAGG;IACH,eAAe,CAAC,iBAAiB,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAEpE,SAAS,CACR,QAAQ,CAAC,EAAE,OAAO,EAClB,UAAU,CAAC,EAAE,OAAO,EACpB,gBAAgB,CAAC,EAAE,iBAAiB,GAClC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE7B,QAAQ,CAAC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"channelContext.d.ts","sourceRoot":"","sources":["../src/channelContext.ts"],"names":[],"mappings":"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"}
|
package/dist/channelContext.js
CHANGED
|
@@ -20,7 +20,9 @@ function createChannelServiceEndpoints(connected, submitFn, dirtyFn, isAttachedA
|
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
22
|
exports.createChannelServiceEndpoints = createChannelServiceEndpoints;
|
|
23
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* Used to get the channel's summary for the DDS or DataStore attach op.
|
|
25
|
+
*/
|
|
24
26
|
function summarizeChannel(channel, fullTree = false, trackState = false, telemetryContext) {
|
|
25
27
|
const summarizeResult = channel.getAttachSummary(fullTree, trackState, telemetryContext);
|
|
26
28
|
// Add the channel attributes to the returned result.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channelContext.js","sourceRoot":"","sources":["../src/channelContext.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\tIChannel,\n\tIChannelAttributes,\n\tIChannelFactory,\n\tIFluidDataStoreRuntime,\n} from \"@fluidframework/datastore-definitions/internal\";\nimport {\n\tIDocumentStorageService,\n\tISnapshotTree,\n} from \"@fluidframework/driver-definitions/internal\";\nimport { readAndParse } from \"@fluidframework/driver-utils/internal\";\nimport {\n\tIExperimentalIncrementalSummaryContext,\n\tISummaryTreeWithStats,\n\tITelemetryContext,\n\tIGarbageCollectionData,\n\tIFluidDataStoreContext,\n\tISummarizeResult,\n\ttype IRuntimeMessageCollection,\n} from \"@fluidframework/runtime-definitions/internal\";\nimport { addBlobToSummary } from \"@fluidframework/runtime-utils/internal\";\nimport {\n\tITelemetryLoggerExt,\n\tDataCorruptionError,\n\ttagCodeArtifacts,\n} from \"@fluidframework/telemetry-utils/internal\";\n\nimport { ChannelDeltaConnection } from \"./channelDeltaConnection.js\";\nimport { ChannelStorageService } from \"./channelStorageService.js\";\nimport { ISharedObjectRegistry } from \"./dataStoreRuntime.js\";\n\nexport const attributesBlobKey = \".attributes\";\n\nexport interface IChannelContext {\n\tgetChannel(): Promise<IChannel>;\n\n\tsetConnectionState(connected: boolean, clientId?: string);\n\n\t/**\n\t * Process messages for this channel context. The messages here are contiguous messages for this context in a batch.\n\t * @param messageCollection - The collection of messages to process.\n\t */\n\tprocessMessages(messageCollection: IRuntimeMessageCollection): void;\n\n\tsummarize(\n\t\tfullTree?: boolean,\n\t\ttrackState?: boolean,\n\t\ttelemetryContext?: ITelemetryContext,\n\t): Promise<ISummarizeResult>;\n\n\treSubmit(content: any, localOpMetadata: unknown, squash?: boolean): void;\n\n\tapplyStashedOp(content: any): unknown;\n\n\trollback(message: any, localOpMetadata: unknown): void;\n\n\t/**\n\t * Returns the data used for garbage collection. This includes a list of GC nodes that represent this context\n\t * including any of its children. Each node has a set of outbound routes to other GC nodes in the document.\n\t * @param fullGC - true to bypass optimizations and force full generation of GC data.\n\t */\n\tgetGCData(fullGC?: boolean): Promise<IGarbageCollectionData>;\n\n\t/**\n\t * After GC has run, called to notify this context of routes that are used in it. These are used for the following:\n\t * 1. To identify if this context is being referenced in the document or not.\n\t * 2. To identify if this context or any of its children's used routes changed since last summary.\n\t * 3. They are added to the summary generated by this context.\n\t */\n\tupdateUsedRoutes(usedRoutes: string[]): void;\n}\n\nexport interface ChannelServiceEndpoints {\n\tdeltaConnection: ChannelDeltaConnection;\n\tobjectStorage: ChannelStorageService;\n}\n\nexport function createChannelServiceEndpoints(\n\tconnected: boolean,\n\tsubmitFn: (content: any, localOpMetadata: unknown) => void,\n\tdirtyFn: () => void,\n\tisAttachedAndVisible: () => boolean,\n\tstorageService: IDocumentStorageService,\n\tlogger: ITelemetryLoggerExt,\n\ttree?: ISnapshotTree,\n\textraBlobs?: Map<string, ArrayBufferLike>,\n): ChannelServiceEndpoints {\n\tconst deltaConnection = new ChannelDeltaConnection(\n\t\tconnected,\n\t\t(message, localOpMetadata) => submitFn(message, localOpMetadata),\n\t\tdirtyFn,\n\t\tisAttachedAndVisible,\n\t);\n\tconst objectStorage = new ChannelStorageService(tree, storageService, logger, extraBlobs);\n\n\treturn {\n\t\tdeltaConnection,\n\t\tobjectStorage,\n\t};\n}\n\n/** Used to get the channel's summary for the DDS or DataStore attach op */\nexport function summarizeChannel(\n\tchannel: IChannel,\n\tfullTree: boolean = false,\n\ttrackState: boolean = false,\n\ttelemetryContext?: ITelemetryContext,\n): ISummaryTreeWithStats {\n\tconst summarizeResult = channel.getAttachSummary(fullTree, trackState, telemetryContext);\n\n\t// Add the channel attributes to the returned result.\n\taddBlobToSummary(summarizeResult, attributesBlobKey, JSON.stringify(channel.attributes));\n\treturn summarizeResult;\n}\n\nexport async function summarizeChannelAsync(\n\tchannel: IChannel,\n\tfullTree: boolean = false,\n\ttrackState: boolean = false,\n\ttelemetryContext?: ITelemetryContext,\n\tincrementalSummaryContext?: IExperimentalIncrementalSummaryContext,\n): Promise<ISummaryTreeWithStats> {\n\tconst summarizeResult = await channel.summarize(\n\t\tfullTree,\n\t\ttrackState,\n\t\ttelemetryContext,\n\t\tincrementalSummaryContext,\n\t);\n\n\t// Add the channel attributes to the returned result.\n\taddBlobToSummary(summarizeResult, attributesBlobKey, JSON.stringify(channel.attributes));\n\treturn summarizeResult;\n}\n\nexport async function loadChannelFactoryAndAttributes(\n\tdataStoreContext: IFluidDataStoreContext,\n\tservices: ChannelServiceEndpoints,\n\tchannelId: string,\n\tregistry: ISharedObjectRegistry,\n\tattachMessageType?: string,\n): Promise<{ factory: IChannelFactory; attributes: IChannelAttributes }> {\n\tlet attributes: IChannelAttributes | undefined;\n\tif (await services.objectStorage.contains(attributesBlobKey)) {\n\t\tattributes = await readAndParse<IChannelAttributes | undefined>(\n\t\t\tservices.objectStorage,\n\t\t\tattributesBlobKey,\n\t\t);\n\t}\n\n\t// This is a backward compatibility case where the attach message doesn't include attributes. They must\n\t// include attach message type.\n\t// Since old attach messages will not have attributes, we need to keep this as long as we support old attach\n\t// messages.\n\tconst channelFactoryType = attributes ? attributes.type : attachMessageType;\n\tif (channelFactoryType === undefined) {\n\t\tthrow new DataCorruptionError(\n\t\t\t\"channelTypeNotAvailable\",\n\t\t\ttagCodeArtifacts({\n\t\t\t\tchannelId,\n\t\t\t\tdataStoreId: dataStoreContext.id,\n\t\t\t\tdataStorePackagePath: dataStoreContext.packagePath.join(\"/\"),\n\t\t\t\tchannelFactoryType,\n\t\t\t}),\n\t\t);\n\t}\n\tconst factory = registry.get(channelFactoryType);\n\tif (factory === undefined) {\n\t\tthrow new DataCorruptionError(\n\t\t\t\"channelFactoryNotRegisteredForGivenType\",\n\t\t\ttagCodeArtifacts({\n\t\t\t\tchannelId,\n\t\t\t\tdataStoreId: dataStoreContext.id,\n\t\t\t\tdataStorePackagePath: dataStoreContext.packagePath.join(\"/\"),\n\t\t\t\tchannelFactoryType,\n\t\t\t}),\n\t\t);\n\t}\n\t// This is a backward compatibility case where the attach message doesn't include attributes. Get the attributes\n\t// from the factory.\n\tattributes = attributes ?? factory.attributes;\n\treturn { factory, attributes };\n}\n\nexport async function loadChannel(\n\tdataStoreRuntime: IFluidDataStoreRuntime,\n\tattributes: IChannelAttributes,\n\tfactory: IChannelFactory,\n\tservices: ChannelServiceEndpoints,\n\tlogger: ITelemetryLoggerExt,\n\tchannelId: string,\n): Promise<IChannel> {\n\t// Compare snapshot version to collaborative object version\n\tif (\n\t\tattributes.snapshotFormatVersion !== undefined &&\n\t\tattributes.snapshotFormatVersion !== factory.attributes.snapshotFormatVersion\n\t) {\n\t\tlogger.sendTelemetryEvent({\n\t\t\teventName: \"ChannelAttributesVersionMismatch\",\n\t\t\t...tagCodeArtifacts({\n\t\t\t\tchannelType: attributes.type,\n\t\t\t\tchannelSnapshotVersion: `${attributes.snapshotFormatVersion}@${attributes.packageVersion}`,\n\t\t\t\tchannelCodeVersion: `${factory.attributes.snapshotFormatVersion}@${factory.attributes.packageVersion}`,\n\t\t\t}),\n\t\t});\n\t}\n\n\treturn factory.load(dataStoreRuntime, channelId, services, attributes);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"channelContext.js","sourceRoot":"","sources":["../src/channelContext.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\tIChannel,\n\tIChannelAttributes,\n\tIChannelFactory,\n\tIFluidDataStoreRuntime,\n} from \"@fluidframework/datastore-definitions/internal\";\nimport {\n\tIDocumentStorageService,\n\tISnapshotTree,\n} from \"@fluidframework/driver-definitions/internal\";\nimport { readAndParse } from \"@fluidframework/driver-utils/internal\";\nimport {\n\tIExperimentalIncrementalSummaryContext,\n\tISummaryTreeWithStats,\n\tITelemetryContext,\n\tIGarbageCollectionData,\n\tIFluidDataStoreContext,\n\tISummarizeResult,\n\ttype IRuntimeMessageCollection,\n} from \"@fluidframework/runtime-definitions/internal\";\nimport { addBlobToSummary } from \"@fluidframework/runtime-utils/internal\";\nimport {\n\tITelemetryLoggerExt,\n\tDataCorruptionError,\n\ttagCodeArtifacts,\n} from \"@fluidframework/telemetry-utils/internal\";\n\nimport { ChannelDeltaConnection } from \"./channelDeltaConnection.js\";\nimport { ChannelStorageService } from \"./channelStorageService.js\";\nimport { ISharedObjectRegistry } from \"./dataStoreRuntime.js\";\n\nexport const attributesBlobKey = \".attributes\";\n\nexport interface IChannelContext {\n\tgetChannel(): Promise<IChannel>;\n\n\tsetConnectionState(connected: boolean, clientId?: string);\n\n\t/**\n\t * Process messages for this channel context. The messages here are contiguous messages for this context in a batch.\n\t * @param messageCollection - The collection of messages to process.\n\t */\n\tprocessMessages(messageCollection: IRuntimeMessageCollection): void;\n\n\tsummarize(\n\t\tfullTree?: boolean,\n\t\ttrackState?: boolean,\n\t\ttelemetryContext?: ITelemetryContext,\n\t): Promise<ISummarizeResult>;\n\n\treSubmit(content: unknown, localOpMetadata: unknown, squash?: boolean): void;\n\n\tapplyStashedOp(content: unknown): unknown;\n\n\trollback(message: unknown, localOpMetadata: unknown): void;\n\n\t/**\n\t * Returns the data used for garbage collection. This includes a list of GC nodes that represent this context\n\t * including any of its children. Each node has a set of outbound routes to other GC nodes in the document.\n\t * @param fullGC - true to bypass optimizations and force full generation of GC data.\n\t */\n\tgetGCData(fullGC?: boolean): Promise<IGarbageCollectionData>;\n\n\t/**\n\t * After GC has run, called to notify this context of routes that are used in it. These are used for the following:\n\t * 1. To identify if this context is being referenced in the document or not.\n\t * 2. To identify if this context or any of its children's used routes changed since last summary.\n\t * 3. They are added to the summary generated by this context.\n\t */\n\tupdateUsedRoutes(usedRoutes: string[]): void;\n}\n\nexport interface ChannelServiceEndpoints {\n\tdeltaConnection: ChannelDeltaConnection;\n\tobjectStorage: ChannelStorageService;\n}\n\nexport function createChannelServiceEndpoints(\n\tconnected: boolean,\n\tsubmitFn: (content: unknown, localOpMetadata: unknown) => void,\n\tdirtyFn: () => void,\n\tisAttachedAndVisible: () => boolean,\n\tstorageService: IDocumentStorageService,\n\tlogger: ITelemetryLoggerExt,\n\ttree?: ISnapshotTree,\n\textraBlobs?: Map<string, ArrayBufferLike>,\n): ChannelServiceEndpoints {\n\tconst deltaConnection = new ChannelDeltaConnection(\n\t\tconnected,\n\t\t(message, localOpMetadata) => submitFn(message, localOpMetadata),\n\t\tdirtyFn,\n\t\tisAttachedAndVisible,\n\t);\n\tconst objectStorage = new ChannelStorageService(tree, storageService, logger, extraBlobs);\n\n\treturn {\n\t\tdeltaConnection,\n\t\tobjectStorage,\n\t};\n}\n\n/**\n * Used to get the channel's summary for the DDS or DataStore attach op.\n */\nexport function summarizeChannel(\n\tchannel: IChannel,\n\tfullTree: boolean = false,\n\ttrackState: boolean = false,\n\ttelemetryContext?: ITelemetryContext,\n): ISummaryTreeWithStats {\n\tconst summarizeResult = channel.getAttachSummary(fullTree, trackState, telemetryContext);\n\n\t// Add the channel attributes to the returned result.\n\taddBlobToSummary(summarizeResult, attributesBlobKey, JSON.stringify(channel.attributes));\n\treturn summarizeResult;\n}\n\nexport async function summarizeChannelAsync(\n\tchannel: IChannel,\n\tfullTree: boolean = false,\n\ttrackState: boolean = false,\n\ttelemetryContext?: ITelemetryContext,\n\tincrementalSummaryContext?: IExperimentalIncrementalSummaryContext,\n): Promise<ISummaryTreeWithStats> {\n\tconst summarizeResult = await channel.summarize(\n\t\tfullTree,\n\t\ttrackState,\n\t\ttelemetryContext,\n\t\tincrementalSummaryContext,\n\t);\n\n\t// Add the channel attributes to the returned result.\n\taddBlobToSummary(summarizeResult, attributesBlobKey, JSON.stringify(channel.attributes));\n\treturn summarizeResult;\n}\n\nexport async function loadChannelFactoryAndAttributes(\n\tdataStoreContext: IFluidDataStoreContext,\n\tservices: ChannelServiceEndpoints,\n\tchannelId: string,\n\tregistry: ISharedObjectRegistry,\n\tattachMessageType?: string,\n): Promise<{ factory: IChannelFactory; attributes: IChannelAttributes }> {\n\tlet attributes: IChannelAttributes | undefined;\n\tif (await services.objectStorage.contains(attributesBlobKey)) {\n\t\tattributes = await readAndParse<IChannelAttributes | undefined>(\n\t\t\tservices.objectStorage,\n\t\t\tattributesBlobKey,\n\t\t);\n\t}\n\n\t// This is a backward compatibility case where the attach message doesn't include attributes. They must\n\t// include attach message type.\n\t// Since old attach messages will not have attributes, we need to keep this as long as we support old attach\n\t// messages.\n\tconst channelFactoryType = attributes ? attributes.type : attachMessageType;\n\tif (channelFactoryType === undefined) {\n\t\tthrow new DataCorruptionError(\n\t\t\t\"channelTypeNotAvailable\",\n\t\t\ttagCodeArtifacts({\n\t\t\t\tchannelId,\n\t\t\t\tdataStoreId: dataStoreContext.id,\n\t\t\t\tdataStorePackagePath: dataStoreContext.packagePath.join(\"/\"),\n\t\t\t\tchannelFactoryType,\n\t\t\t}),\n\t\t);\n\t}\n\tconst factory = registry.get(channelFactoryType);\n\tif (factory === undefined) {\n\t\tthrow new DataCorruptionError(\n\t\t\t\"channelFactoryNotRegisteredForGivenType\",\n\t\t\ttagCodeArtifacts({\n\t\t\t\tchannelId,\n\t\t\t\tdataStoreId: dataStoreContext.id,\n\t\t\t\tdataStorePackagePath: dataStoreContext.packagePath.join(\"/\"),\n\t\t\t\tchannelFactoryType,\n\t\t\t}),\n\t\t);\n\t}\n\t// This is a backward compatibility case where the attach message doesn't include attributes. Get the attributes\n\t// from the factory.\n\tattributes = attributes ?? factory.attributes;\n\treturn { factory, attributes };\n}\n\nexport async function loadChannel(\n\tdataStoreRuntime: IFluidDataStoreRuntime,\n\tattributes: IChannelAttributes,\n\tfactory: IChannelFactory,\n\tservices: ChannelServiceEndpoints,\n\tlogger: ITelemetryLoggerExt,\n\tchannelId: string,\n): Promise<IChannel> {\n\t// Compare snapshot version to collaborative object version\n\tif (\n\t\tattributes.snapshotFormatVersion !== undefined &&\n\t\tattributes.snapshotFormatVersion !== factory.attributes.snapshotFormatVersion\n\t) {\n\t\tlogger.sendTelemetryEvent({\n\t\t\teventName: \"ChannelAttributesVersionMismatch\",\n\t\t\t...tagCodeArtifacts({\n\t\t\t\tchannelType: attributes.type,\n\t\t\t\tchannelSnapshotVersion: `${attributes.snapshotFormatVersion}@${attributes.packageVersion}`,\n\t\t\t\tchannelCodeVersion: `${factory.attributes.snapshotFormatVersion}@${factory.attributes.packageVersion}`,\n\t\t\t}),\n\t\t});\n\t}\n\n\treturn factory.load(dataStoreRuntime, channelId, services, attributes);\n}\n"]}
|
|
@@ -13,13 +13,13 @@ export declare class ChannelDeltaConnection implements IDeltaConnection {
|
|
|
13
13
|
private stashedOpMd;
|
|
14
14
|
private get handler();
|
|
15
15
|
get connected(): boolean;
|
|
16
|
-
constructor(_connected: boolean, submitFn: (content:
|
|
16
|
+
constructor(_connected: boolean, submitFn: (content: unknown, localOpMetadata: unknown) => void, dirty: () => void, isAttachedAndVisible: () => boolean);
|
|
17
17
|
attach(handler: IDeltaHandler): void;
|
|
18
18
|
setConnectionState(connected: boolean): void;
|
|
19
19
|
processMessages(messageCollection: IRuntimeMessageCollection): void;
|
|
20
|
-
reSubmit(content:
|
|
21
|
-
rollback(content:
|
|
22
|
-
applyStashedOp(content:
|
|
23
|
-
submit(contents:
|
|
20
|
+
reSubmit(content: unknown, localOpMetadata: unknown, squash: boolean): void;
|
|
21
|
+
rollback(content: unknown, localOpMetadata: unknown): void;
|
|
22
|
+
applyStashedOp(content: unknown): unknown;
|
|
23
|
+
submit(contents: unknown, metadata: unknown): void;
|
|
24
24
|
}
|
|
25
25
|
//# sourceMappingURL=channelDeltaConnection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channelDeltaConnection.d.ts","sourceRoot":"","sources":["../src/channelDeltaConnection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACN,gBAAgB,EAChB,aAAa,EACb,MAAM,gDAAgD,CAAC;AACxD,OAAO,KAAK,EACX,yBAAyB,EAEzB,MAAM,8CAA8C,CAAC;AA0DtD,qBAAa,sBAAuB,YAAW,gBAAgB;IAa7D,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ;aACT,KAAK,EAAE,MAAM,IAAI;IACjC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IAftC,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,WAAW,CAAgC;IAEnD,OAAO,KAAK,OAAO,GAGlB;IACD,IAAW,SAAS,IAAI,OAAO,CAE9B;gBAGQ,UAAU,EAAE,OAAO,EACV,QAAQ,EAAE,CAAC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"channelDeltaConnection.d.ts","sourceRoot":"","sources":["../src/channelDeltaConnection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACN,gBAAgB,EAChB,aAAa,EACb,MAAM,gDAAgD,CAAC;AACxD,OAAO,KAAK,EACX,yBAAyB,EAEzB,MAAM,8CAA8C,CAAC;AA0DtD,qBAAa,sBAAuB,YAAW,gBAAgB;IAa7D,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ;aACT,KAAK,EAAE,MAAM,IAAI;IACjC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IAftC,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,WAAW,CAAgC;IAEnD,OAAO,KAAK,OAAO,GAGlB;IACD,IAAW,SAAS,IAAI,OAAO,CAE9B;gBAGQ,UAAU,EAAE,OAAO,EACV,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,KAAK,IAAI,EAC/D,KAAK,EAAE,MAAM,IAAI,EAChB,oBAAoB,EAAE,MAAM,OAAO;IAG9C,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKpC,kBAAkB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAK5C,eAAe,CAAC,iBAAiB,EAAE,yBAAyB,GAAG,IAAI;IAmBnE,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAM3E,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI;IAW1D,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAUzC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;CAOzD"}
|
|
@@ -24,7 +24,8 @@ function isStashedOpMetadata(md) {
|
|
|
24
24
|
}
|
|
25
25
|
function processWithStashedOpMetadataHandling(content, localOpMetaData, func) {
|
|
26
26
|
if (isStashedOpMetadata(localOpMetaData)) {
|
|
27
|
-
|
|
27
|
+
for (const { contents, metadata } of localOpMetaData)
|
|
28
|
+
func(contents, metadata);
|
|
28
29
|
}
|
|
29
30
|
else {
|
|
30
31
|
func(content, localOpMetaData);
|
|
@@ -34,13 +35,13 @@ function getContentsWithStashedOpHandling(messagesContent) {
|
|
|
34
35
|
const newMessageContents = [];
|
|
35
36
|
for (const messageContent of messagesContent) {
|
|
36
37
|
if (isStashedOpMetadata(messageContent.localOpMetadata)) {
|
|
37
|
-
|
|
38
|
+
for (const { contents, metadata } of messageContent.localOpMetadata) {
|
|
38
39
|
newMessageContents.push({
|
|
39
40
|
contents,
|
|
40
41
|
localOpMetadata: metadata,
|
|
41
42
|
clientSequenceNumber: messageContent.clientSequenceNumber,
|
|
42
43
|
});
|
|
43
|
-
}
|
|
44
|
+
}
|
|
44
45
|
}
|
|
45
46
|
else {
|
|
46
47
|
newMessageContents.push(messageContent);
|
|
@@ -103,11 +104,11 @@ class ChannelDeltaConnection {
|
|
|
103
104
|
}
|
|
104
105
|
}
|
|
105
106
|
submit(contents, metadata) {
|
|
106
|
-
if (this.stashedOpMd
|
|
107
|
-
this.
|
|
107
|
+
if (this.stashedOpMd === undefined) {
|
|
108
|
+
this.submitFn(contents, metadata);
|
|
108
109
|
}
|
|
109
110
|
else {
|
|
110
|
-
this.
|
|
111
|
+
this.stashedOpMd.push({ contents, metadata });
|
|
111
112
|
}
|
|
112
113
|
}
|
|
113
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channelDeltaConnection.js","sourceRoot":"","sources":["../src/channelDeltaConnection.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,kEAA6D;AAS7D,uEAA+E;AAE/E,MAAM,qBAAqB,GAAG,MAAM,EAAE,CAAC;AAKvC,SAAS,uBAAuB;IAC/B,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,qBAAqB,EAAE;QACjD,KAAK,EAAE,qBAAqB;QAC5B,QAAQ,EAAE,KAAK;QACf,UAAU,EAAE,IAAI;KAChB,CAAC,CAAC;IACH,OAAO,
|
|
1
|
+
{"version":3,"file":"channelDeltaConnection.js","sourceRoot":"","sources":["../src/channelDeltaConnection.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport {\n\tIDeltaConnection,\n\tIDeltaHandler,\n} from \"@fluidframework/datastore-definitions/internal\";\nimport type {\n\tIRuntimeMessageCollection,\n\tIRuntimeMessagesContent,\n} from \"@fluidframework/runtime-definitions/internal\";\nimport { DataProcessingError } from \"@fluidframework/telemetry-utils/internal\";\n\nconst stashedOpMetadataMark = Symbol();\n\ntype StashedOpMetadata = { contents: unknown; metadata: unknown }[] &\n\tRecord<typeof stashedOpMetadataMark, typeof stashedOpMetadataMark>;\n\nfunction createStashedOpMetadata(): StashedOpMetadata {\n\tconst arr = [];\n\tObject.defineProperty(arr, stashedOpMetadataMark, {\n\t\tvalue: stashedOpMetadataMark,\n\t\twritable: false,\n\t\tenumerable: true,\n\t});\n\treturn arr as unknown as StashedOpMetadata;\n}\n\nfunction isStashedOpMetadata(md: unknown): md is StashedOpMetadata {\n\treturn (\n\t\tArray.isArray(md) &&\n\t\tstashedOpMetadataMark in md &&\n\t\tmd[stashedOpMetadataMark] === stashedOpMetadataMark\n\t);\n}\n\nfunction processWithStashedOpMetadataHandling(\n\tcontent: unknown,\n\tlocalOpMetaData: unknown,\n\tfunc: (contents: unknown, metadata: unknown) => void,\n): void {\n\tif (isStashedOpMetadata(localOpMetaData)) {\n\t\tfor (const { contents, metadata } of localOpMetaData) func(contents, metadata);\n\t} else {\n\t\tfunc(content, localOpMetaData);\n\t}\n}\n\nfunction getContentsWithStashedOpHandling(\n\tmessagesContent: readonly IRuntimeMessagesContent[],\n): IRuntimeMessagesContent[] {\n\tconst newMessageContents: IRuntimeMessagesContent[] = [];\n\tfor (const messageContent of messagesContent) {\n\t\tif (isStashedOpMetadata(messageContent.localOpMetadata)) {\n\t\t\tfor (const { contents, metadata } of messageContent.localOpMetadata) {\n\t\t\t\tnewMessageContents.push({\n\t\t\t\t\tcontents,\n\t\t\t\t\tlocalOpMetadata: metadata,\n\t\t\t\t\tclientSequenceNumber: messageContent.clientSequenceNumber,\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tnewMessageContents.push(messageContent);\n\t\t}\n\t}\n\treturn newMessageContents;\n}\n\nexport class ChannelDeltaConnection implements IDeltaConnection {\n\tprivate _handler: IDeltaHandler | undefined;\n\tprivate stashedOpMd: StashedOpMetadata | undefined;\n\n\tprivate get handler(): IDeltaHandler {\n\t\tassert(!!this._handler, 0x177 /* \"Missing delta handler\" */);\n\t\treturn this._handler;\n\t}\n\tpublic get connected(): boolean {\n\t\treturn this._connected;\n\t}\n\n\tconstructor(\n\t\tprivate _connected: boolean,\n\t\tprivate readonly submitFn: (content: unknown, localOpMetadata: unknown) => void,\n\t\tpublic readonly dirty: () => void,\n\t\tprivate readonly isAttachedAndVisible: () => boolean,\n\t) {}\n\n\tpublic attach(handler: IDeltaHandler): void {\n\t\tassert(this._handler === undefined, 0x178 /* \"Missing delta handler on attach\" */);\n\t\tthis._handler = handler;\n\t}\n\n\tpublic setConnectionState(connected: boolean): void {\n\t\tthis._connected = connected;\n\t\tthis.handler.setConnectionState(connected);\n\t}\n\n\tpublic processMessages(messageCollection: IRuntimeMessageCollection): void {\n\t\t// catches as data processing error whether or not they come from async pending queues\n\t\ttry {\n\t\t\tconst newMessagesContent = getContentsWithStashedOpHandling(\n\t\t\t\tmessageCollection.messagesContent,\n\t\t\t);\n\t\t\tthis.handler.processMessages({\n\t\t\t\t...messageCollection,\n\t\t\t\tmessagesContent: newMessagesContent,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthrow DataProcessingError.wrapIfUnrecognized(\n\t\t\t\terror,\n\t\t\t\t\"channelDeltaConnectionFailedToProcessMessages\",\n\t\t\t\tmessageCollection.envelope,\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic reSubmit(content: unknown, localOpMetadata: unknown, squash: boolean): void {\n\t\tprocessWithStashedOpMetadataHandling(content, localOpMetadata, (contents, metadata) =>\n\t\t\tthis.handler.reSubmit(contents, metadata, squash),\n\t\t);\n\t}\n\n\tpublic rollback(content: unknown, localOpMetadata: unknown): void {\n\t\tif (this.handler.rollback === undefined) {\n\t\t\tthrow new Error(\"Handler doesn't support rollback\");\n\t\t}\n\t\tprocessWithStashedOpMetadataHandling(\n\t\t\tcontent,\n\t\t\tlocalOpMetadata,\n\t\t\tthis.handler.rollback.bind(this.handler),\n\t\t);\n\t}\n\n\tpublic applyStashedOp(content: unknown): unknown {\n\t\ttry {\n\t\t\tthis.stashedOpMd = this.isAttachedAndVisible() ? createStashedOpMetadata() : undefined;\n\t\t\tthis.handler.applyStashedOp(content);\n\t\t\treturn this.stashedOpMd;\n\t\t} finally {\n\t\t\tthis.stashedOpMd = undefined;\n\t\t}\n\t}\n\n\tpublic submit(contents: unknown, metadata: unknown): void {\n\t\tif (this.stashedOpMd === undefined) {\n\t\t\tthis.submitFn(contents, metadata);\n\t\t} else {\n\t\t\tthis.stashedOpMd.push({ contents, metadata });\n\t\t}\n\t}\n}\n"]}
|
|
@@ -33,7 +33,7 @@ class ChannelStorageService {
|
|
|
33
33
|
async readBlob(path) {
|
|
34
34
|
const id = await this.getIdForPath(path);
|
|
35
35
|
(0, internal_1.assert)(id !== undefined, 0x9d7 /* id is undefined in ChannelStorageService.readBlob() */);
|
|
36
|
-
const blob = this.extraBlobs
|
|
36
|
+
const blob = this.extraBlobs === undefined ? undefined : this.extraBlobs.get(id);
|
|
37
37
|
if (blob !== undefined) {
|
|
38
38
|
return blob;
|
|
39
39
|
}
|
|
@@ -49,7 +49,7 @@ class ChannelStorageService {
|
|
|
49
49
|
const part = pathParts.shift();
|
|
50
50
|
tree = tree.trees[part];
|
|
51
51
|
}
|
|
52
|
-
if (tree === undefined || pathParts.length
|
|
52
|
+
if (tree === undefined || pathParts.length > 0) {
|
|
53
53
|
throw new Error("path does not exist");
|
|
54
54
|
}
|
|
55
55
|
return Object.keys(tree?.blobs ?? {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channelStorageService.js","sourceRoot":"","sources":["../src/channelStorageService.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,kEAA6D;AAM7D,qEAA6F;AAG7F,MAAa,qBAAqB;IACzB,MAAM,CAAC,WAAW,CACzB,IAAY,EACZ,IAAmB,EACnB,OAAmC;QAEnC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1D,qBAAqB,CAAC,WAAW,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACxE,CAAC;QAED,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7D,OAAO,CAAC,GAAG,IAAI,GAAG,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC;QACxC,CAAC;IACF,CAAC;IAID,YACkB,IAA+B,EAC/B,OAAkD,EAClD,MAA2B,EAC3B,UAAyC;QAHzC,SAAI,GAAJ,IAAI,CAA2B;QAC/B,YAAO,GAAP,OAAO,CAA2C;QAClD,WAAM,GAAN,MAAM,CAAqB;QAC3B,eAAU,GAAV,UAAU,CAA+B;QAE1D,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,mCAAmC;QACnC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACxB,qBAAqB,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACjE,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,IAAY;QACjC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,IAAY;QACjC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACzC,IAAA,iBAAM,EAAC,EAAE,KAAK,SAAS,EAAE,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC1F,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"channelStorageService.js","sourceRoot":"","sources":["../src/channelStorageService.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport { IChannelStorageService } from \"@fluidframework/datastore-definitions/internal\";\nimport {\n\tIDocumentStorageService,\n\tISnapshotTree,\n} from \"@fluidframework/driver-definitions/internal\";\nimport { getNormalizedObjectStoragePathParts } from \"@fluidframework/runtime-utils/internal\";\nimport { ITelemetryLoggerExt } from \"@fluidframework/telemetry-utils/internal\";\n\nexport class ChannelStorageService implements IChannelStorageService {\n\tprivate static flattenTree(\n\t\tbase: string,\n\t\ttree: ISnapshotTree,\n\t\tresults: { [path: string]: string },\n\t): void {\n\t\tfor (const [path, subtree] of Object.entries(tree.trees)) {\n\t\t\tChannelStorageService.flattenTree(`${base}${path}/`, subtree, results);\n\t\t}\n\n\t\tfor (const [blobName, blobId] of Object.entries(tree.blobs)) {\n\t\t\tresults[`${base}${blobName}`] = blobId;\n\t\t}\n\t}\n\n\tprivate readonly flattenedTree: { [path: string]: string };\n\n\tconstructor(\n\t\tprivate readonly tree: ISnapshotTree | undefined,\n\t\tprivate readonly storage: Pick<IDocumentStorageService, \"readBlob\">,\n\t\tprivate readonly logger: ITelemetryLoggerExt,\n\t\tprivate readonly extraBlobs?: Map<string, ArrayBufferLike>,\n\t) {\n\t\tthis.flattenedTree = {};\n\t\t// Create a map from paths to blobs\n\t\tif (tree !== undefined) {\n\t\t\tChannelStorageService.flattenTree(\"\", tree, this.flattenedTree);\n\t\t}\n\t}\n\n\tpublic async contains(path: string): Promise<boolean> {\n\t\treturn this.flattenedTree[path] !== undefined;\n\t}\n\n\tpublic async readBlob(path: string): Promise<ArrayBufferLike> {\n\t\tconst id = await this.getIdForPath(path);\n\t\tassert(id !== undefined, 0x9d7 /* id is undefined in ChannelStorageService.readBlob() */);\n\t\tconst blob = this.extraBlobs === undefined ? undefined : this.extraBlobs.get(id);\n\n\t\tif (blob !== undefined) {\n\t\t\treturn blob;\n\t\t}\n\t\tconst blobP = this.storage.readBlob(id);\n\t\tblobP.catch((error) =>\n\t\t\tthis.logger.sendErrorEvent({ eventName: \"ChannelStorageBlobError\" }, error),\n\t\t);\n\n\t\treturn blobP;\n\t}\n\n\tpublic async list(path: string): Promise<string[]> {\n\t\tlet tree = this.tree;\n\t\tconst pathParts = getNormalizedObjectStoragePathParts(path);\n\t\twhile (tree !== undefined && pathParts.length > 0) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tconst part = pathParts.shift()!;\n\t\t\ttree = tree.trees[part];\n\t\t}\n\t\tif (tree === undefined || pathParts.length > 0) {\n\t\t\tthrow new Error(\"path does not exist\");\n\t\t}\n\n\t\treturn Object.keys(tree?.blobs ?? {});\n\t}\n\n\tprivate async getIdForPath(path: string): Promise<string | undefined> {\n\t\treturn this.flattenedTree[path];\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataStoreRuntime.d.ts","sourceRoot":"","sources":["../src/dataStoreRuntime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAA4B,MAAM,8BAA8B,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAC/E,OAAO,EACN,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAQrF,OAAO,EACN,QAAQ,EACR,eAAe,EACf,sBAAsB,EACtB,4BAA4B,EAC5B,KAAK,mBAAmB,EACxB,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACN,cAAc,EACd,cAAc,EAId,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACN,gBAAgB,EAEhB,yBAAyB,EACzB,MAAM,6CAA6C,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EACN,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EAKtB,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EAEf,qBAAqB,EACrB,KAAK,yBAAyB,EAM9B,KAAK,uBAAuB,EAC5B,MAAM,8CAA8C,CAAC;AAkBtD,OAAO,EACN,mBAAmB,EASnB,MAAM,0CAA0C,CAAC;AAkClD;;;GAGG;AACH,oBAAY,oBAAoB;IAE/B,MAAM,WAAW;IACjB,SAAS,OAAO;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IAGrC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAAC;CAC/C;AAMD;;;;GAIG;AACH,qBAAa,qBACZ,SAAQ,iBAAiB,CAAC,4BAA4B,CACtD,YAAW,sBAAsB,EAAE,sBAAsB,EAAE,mBAAmB;
|
|
1
|
+
{"version":3,"file":"dataStoreRuntime.d.ts","sourceRoot":"","sources":["../src/dataStoreRuntime.ts"],"names":[],"mappings":"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"}
|
package/dist/dataStoreRuntime.js
CHANGED
|
@@ -67,6 +67,8 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
67
67
|
get idCompressor() {
|
|
68
68
|
return this.dataStoreContext.idCompressor;
|
|
69
69
|
}
|
|
70
|
+
// TODO: the methods below should have more specific return typing, per the interfaces they are implementing.
|
|
71
|
+
// Doing so would be a breaking change.
|
|
70
72
|
get IFluidHandleContext() {
|
|
71
73
|
return this;
|
|
72
74
|
}
|
|
@@ -151,10 +153,10 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
151
153
|
const tree = dataStoreContext.baseSnapshot;
|
|
152
154
|
// Must always receive the data store type inside of the attributes
|
|
153
155
|
if (tree?.trees !== undefined) {
|
|
154
|
-
Object.entries(tree.trees)
|
|
156
|
+
for (const [path, subtree] of Object.entries(tree.trees)) {
|
|
155
157
|
// Issue #4414
|
|
156
158
|
if (path === "_search") {
|
|
157
|
-
|
|
159
|
+
continue;
|
|
158
160
|
}
|
|
159
161
|
let channelContext;
|
|
160
162
|
// If already exists on storage, then create a remote channel. However, if it is case of rehydrating a
|
|
@@ -166,11 +168,11 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
166
168
|
// data store, if the data store is loaded after the container is attached, then we missed making
|
|
167
169
|
// the channel visible. So do it now. Otherwise, add it to local channel context queue, so
|
|
168
170
|
// that it can be make it visible later with the data store.
|
|
169
|
-
if (dataStoreContext.attachState
|
|
170
|
-
|
|
171
|
+
if (dataStoreContext.attachState === container_definitions_1.AttachState.Detached) {
|
|
172
|
+
this.localChannelContextQueue.set(path, channelContext);
|
|
171
173
|
}
|
|
172
174
|
else {
|
|
173
|
-
|
|
175
|
+
channelContext.makeVisible();
|
|
174
176
|
}
|
|
175
177
|
}
|
|
176
178
|
else {
|
|
@@ -179,7 +181,7 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
179
181
|
}));
|
|
180
182
|
}
|
|
181
183
|
this.contexts.set(path, channelContext);
|
|
182
|
-
}
|
|
184
|
+
}
|
|
183
185
|
}
|
|
184
186
|
this.entryPoint = new fluidHandle_js_1.FluidObjectHandle(new internal_1.LazyPromise(async () => provideEntryPoint(this)), "", this.objectsRoutingContext);
|
|
185
187
|
this.attachListener();
|
|
@@ -321,11 +323,7 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
321
323
|
}
|
|
322
324
|
createChannel(idArg, type) {
|
|
323
325
|
let id;
|
|
324
|
-
if (idArg
|
|
325
|
-
id = idArg;
|
|
326
|
-
this.validateChannelId(id);
|
|
327
|
-
}
|
|
328
|
-
else {
|
|
326
|
+
if (idArg === undefined) {
|
|
329
327
|
/**
|
|
330
328
|
* Return uuid if short-ids are explicitly disabled via feature flags.
|
|
331
329
|
*/
|
|
@@ -339,19 +337,23 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
339
337
|
// - uuids
|
|
340
338
|
// In first two cases we will encode result as strings in more compact form, with leading underscore,
|
|
341
339
|
// to ensure no overlap with user-provided DDS names (see validateChannelId())
|
|
342
|
-
if (this.visibilityState
|
|
343
|
-
// container is detached, only one client observes content, no way to hit collisions with other clients.
|
|
344
|
-
id = (0, internal_4.encodeCompactIdToString)(2 * this.contexts.size, "_");
|
|
345
|
-
}
|
|
346
|
-
else {
|
|
340
|
+
if (this.visibilityState === internal_3.VisibilityState.GloballyVisible) {
|
|
347
341
|
// Due to back-compat, we could not depend yet on generateDocumentUniqueId() being there.
|
|
348
342
|
// We can remove the need to leverage uuid() as fall-back in couple releases.
|
|
349
343
|
const res = this.dataStoreContext.containerRuntime.generateDocumentUniqueId?.() ?? (0, uuid_1.v4)();
|
|
350
344
|
id = typeof res === "number" ? (0, internal_4.encodeCompactIdToString)(2 * res + 1, "_") : res;
|
|
351
345
|
}
|
|
346
|
+
else {
|
|
347
|
+
// container is detached, only one client observes content, no way to hit collisions with other clients.
|
|
348
|
+
id = (0, internal_4.encodeCompactIdToString)(2 * this.contexts.size, "_");
|
|
349
|
+
}
|
|
352
350
|
}
|
|
353
351
|
(0, internal_1.assert)(!id.includes("/"), 0x8fc /* slash */);
|
|
354
352
|
}
|
|
353
|
+
else {
|
|
354
|
+
id = idArg;
|
|
355
|
+
this.validateChannelId(id);
|
|
356
|
+
}
|
|
355
357
|
this.verifyNotClosed();
|
|
356
358
|
(0, internal_1.assert)(!this.contexts.has(id), 0x179 /* "createChannel() with existing ID" */);
|
|
357
359
|
(0, internal_1.assert)(type !== undefined, 0x209 /* "Factory Type should be defined" */);
|
|
@@ -415,9 +417,9 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
415
417
|
return;
|
|
416
418
|
}
|
|
417
419
|
this.visibilityState = internal_3.VisibilityState.LocallyVisible;
|
|
418
|
-
this.pendingHandlesToMakeVisible
|
|
420
|
+
for (const handle of this.pendingHandlesToMakeVisible) {
|
|
419
421
|
handle.attachGraph();
|
|
420
|
-
}
|
|
422
|
+
}
|
|
421
423
|
this.pendingHandlesToMakeVisible.clear();
|
|
422
424
|
this.dataStoreContext.makeLocallyVisible();
|
|
423
425
|
}
|
|
@@ -483,7 +485,7 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
483
485
|
*/
|
|
484
486
|
let currentAddress;
|
|
485
487
|
let currentMessagesContent = [];
|
|
486
|
-
const { messagesContent, local } = messageCollection;
|
|
488
|
+
const { messagesContent, local, envelope } = messageCollection;
|
|
487
489
|
const sendBunchedMessages = () => {
|
|
488
490
|
// Current address will be undefined for the first message in the list.
|
|
489
491
|
if (currentAddress === undefined) {
|
|
@@ -493,7 +495,7 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
493
495
|
const channelContext = this.contexts.get(currentAddress);
|
|
494
496
|
(0, internal_1.assert)(!!channelContext, 0xa6b /* Channel context not found */);
|
|
495
497
|
channelContext.processMessages({
|
|
496
|
-
envelope
|
|
498
|
+
envelope,
|
|
497
499
|
messagesContent: currentMessagesContent,
|
|
498
500
|
local,
|
|
499
501
|
});
|
|
@@ -551,12 +553,14 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
551
553
|
const { envelope, messagesContent } = messageCollection;
|
|
552
554
|
try {
|
|
553
555
|
switch (envelope.type) {
|
|
554
|
-
case DataStoreMessageType.ChannelOp:
|
|
556
|
+
case DataStoreMessageType.ChannelOp: {
|
|
555
557
|
this.processChannelMessages(messageCollection);
|
|
556
558
|
break;
|
|
557
|
-
|
|
559
|
+
}
|
|
560
|
+
case DataStoreMessageType.Attach: {
|
|
558
561
|
this.processAttachMessages(messageCollection);
|
|
559
562
|
break;
|
|
563
|
+
}
|
|
560
564
|
default:
|
|
561
565
|
}
|
|
562
566
|
}
|
|
@@ -758,7 +762,10 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
758
762
|
}
|
|
759
763
|
}
|
|
760
764
|
}
|
|
761
|
-
submitMessage(type,
|
|
765
|
+
submitMessage(type,
|
|
766
|
+
// TODO: use something other than `any` here (breaking change)
|
|
767
|
+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any
|
|
768
|
+
content, localOpMetadata) {
|
|
762
769
|
this.submit(type, content, localOpMetadata);
|
|
763
770
|
}
|
|
764
771
|
/**
|
|
@@ -769,7 +776,7 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
769
776
|
*/
|
|
770
777
|
submitSignal(type, content, targetClientId) {
|
|
771
778
|
this.verifyNotClosed();
|
|
772
|
-
|
|
779
|
+
this.dataStoreContext.submitSignal(type, content, targetClientId);
|
|
773
780
|
}
|
|
774
781
|
/**
|
|
775
782
|
* Will return when the data store is attached.
|
|
@@ -821,7 +828,10 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
821
828
|
* @param content - The content of the original message.
|
|
822
829
|
* @param localOpMetadata - The local metadata associated with the original message.
|
|
823
830
|
*/
|
|
824
|
-
reSubmit(type,
|
|
831
|
+
reSubmit(type,
|
|
832
|
+
// TODO: use something other than `any` here (breaking change)
|
|
833
|
+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any
|
|
834
|
+
content, localOpMetadata, squash) {
|
|
825
835
|
this.verifyNotClosed();
|
|
826
836
|
switch (type) {
|
|
827
837
|
case DataStoreMessageType.ChannelOp: {
|
|
@@ -832,12 +842,14 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
832
842
|
channelContext.reSubmit(envelope.contents, localOpMetadata, squash);
|
|
833
843
|
break;
|
|
834
844
|
}
|
|
835
|
-
case DataStoreMessageType.Attach:
|
|
845
|
+
case DataStoreMessageType.Attach: {
|
|
836
846
|
// For Attach messages, just submit them again.
|
|
837
847
|
this.submit(type, content, localOpMetadata);
|
|
838
848
|
break;
|
|
839
|
-
|
|
849
|
+
}
|
|
850
|
+
default: {
|
|
840
851
|
(0, internal_1.unreachableCase)(type);
|
|
852
|
+
}
|
|
841
853
|
}
|
|
842
854
|
}
|
|
843
855
|
/**
|
|
@@ -845,7 +857,10 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
845
857
|
* @param content - The content of the original message.
|
|
846
858
|
* @param localOpMetadata - The local metadata associated with the original message.
|
|
847
859
|
*/
|
|
848
|
-
rollback(type,
|
|
860
|
+
rollback(type,
|
|
861
|
+
// TODO: use something other than `any` here (breaking change)
|
|
862
|
+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any
|
|
863
|
+
content, localOpMetadata) {
|
|
849
864
|
this.verifyNotClosed();
|
|
850
865
|
switch (type) {
|
|
851
866
|
case DataStoreMessageType.ChannelOp: {
|
|
@@ -856,14 +871,19 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
856
871
|
channelContext.rollback(envelope.contents, localOpMetadata);
|
|
857
872
|
break;
|
|
858
873
|
}
|
|
859
|
-
default:
|
|
874
|
+
default: {
|
|
860
875
|
throw new internal_5.LoggingError(`Can't rollback ${type} message`);
|
|
876
|
+
}
|
|
861
877
|
}
|
|
862
878
|
}
|
|
879
|
+
// TODO: use something other than `any` here
|
|
880
|
+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any
|
|
863
881
|
async applyStashedOp(content) {
|
|
882
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
864
883
|
const type = content?.type;
|
|
865
884
|
switch (type) {
|
|
866
885
|
case DataStoreMessageType.Attach: {
|
|
886
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
867
887
|
const attachMessage = content.content;
|
|
868
888
|
const flatBlobs = new Map();
|
|
869
889
|
const snapshotTree = (0, internal_2.buildSnapshotTree)(attachMessage.snapshot.entries, flatBlobs);
|
|
@@ -880,14 +900,16 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
880
900
|
return;
|
|
881
901
|
}
|
|
882
902
|
case DataStoreMessageType.ChannelOp: {
|
|
903
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
883
904
|
const envelope = content.content;
|
|
884
905
|
const channelContext = this.contexts.get(envelope.address);
|
|
885
906
|
(0, internal_1.assert)(!!channelContext, 0x184 /* "There should be a channel context for the op" */);
|
|
886
907
|
await channelContext.getChannel();
|
|
887
908
|
return channelContext.applyStashedOp(envelope.contents);
|
|
888
909
|
}
|
|
889
|
-
default:
|
|
910
|
+
default: {
|
|
890
911
|
(0, internal_1.unreachableCase)(type);
|
|
912
|
+
}
|
|
891
913
|
}
|
|
892
914
|
}
|
|
893
915
|
setChannelDirty(address) {
|
|
@@ -898,11 +920,13 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
898
920
|
this.setMaxListeners(Number.MAX_SAFE_INTEGER);
|
|
899
921
|
// back-compat, to be removed in the future.
|
|
900
922
|
// Added in "2.0.0-rc.2.0.0" timeframe.
|
|
923
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-explicit-any
|
|
901
924
|
this.dataStoreContext.once?.("attaching", () => {
|
|
902
925
|
this.setAttachState(container_definitions_1.AttachState.Attaching);
|
|
903
926
|
});
|
|
904
927
|
// back-compat, to be removed in the future.
|
|
905
928
|
// Added in "2.0.0-rc.2.0.0" timeframe.
|
|
929
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-explicit-any
|
|
906
930
|
this.dataStoreContext.once?.("attached", () => {
|
|
907
931
|
this.setAttachState(container_definitions_1.AttachState.Attached);
|
|
908
932
|
});
|
|
@@ -938,7 +962,7 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
938
962
|
}
|
|
939
963
|
setAttachState(attachState) {
|
|
940
964
|
switch (attachState) {
|
|
941
|
-
case container_definitions_1.AttachState.Attaching:
|
|
965
|
+
case container_definitions_1.AttachState.Attaching: {
|
|
942
966
|
/**
|
|
943
967
|
* back-compat 0.59.1000 - Ideally, attachGraph() should have already been called making the data store
|
|
944
968
|
* locally visible. However, before visibility state was added, this may not have been the case and data
|
|
@@ -953,21 +977,24 @@ class FluidDataStoreRuntime extends client_utils_1.TypedEventEmitter {
|
|
|
953
977
|
(0, internal_1.assert)(this.visibilityState === internal_3.VisibilityState.LocallyVisible, 0x2d1 /* "Data store should be locally visible before it can become globally visible." */);
|
|
954
978
|
// Mark the data store globally visible and make its child channels visible as well.
|
|
955
979
|
this.visibilityState = internal_3.VisibilityState.GloballyVisible;
|
|
956
|
-
this.localChannelContextQueue
|
|
980
|
+
for (const [, channel] of this.localChannelContextQueue) {
|
|
957
981
|
channel.makeVisible();
|
|
958
|
-
}
|
|
982
|
+
}
|
|
959
983
|
this.localChannelContextQueue.clear();
|
|
960
984
|
// This promise resolution will be moved to attached event once we fix the scheduler.
|
|
961
985
|
this.deferredAttached.resolve();
|
|
962
986
|
this.emit("attaching");
|
|
963
987
|
break;
|
|
964
|
-
|
|
988
|
+
}
|
|
989
|
+
case container_definitions_1.AttachState.Attached: {
|
|
965
990
|
(0, internal_1.assert)(this.visibilityState === internal_3.VisibilityState.GloballyVisible, 0x2d2 /* "Data store should be globally visible when its attached." */);
|
|
966
991
|
this._attachState = container_definitions_1.AttachState.Attached;
|
|
967
992
|
this.emit("attached");
|
|
968
993
|
break;
|
|
969
|
-
|
|
994
|
+
}
|
|
995
|
+
default: {
|
|
970
996
|
(0, internal_1.unreachableCase)(attachState, "unreached");
|
|
997
|
+
}
|
|
971
998
|
}
|
|
972
999
|
}
|
|
973
1000
|
}
|
|
@@ -1020,6 +1047,7 @@ const mixinSummaryHandler = (handler, Base = FluidDataStoreRuntime) => class Run
|
|
|
1020
1047
|
summary.summary.tree[firstName] = blob;
|
|
1021
1048
|
}
|
|
1022
1049
|
async summarize(...args) {
|
|
1050
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
1023
1051
|
const summary = await super.summarize(...args);
|
|
1024
1052
|
try {
|
|
1025
1053
|
const content = await handler(this);
|
|
@@ -1027,9 +1055,9 @@ const mixinSummaryHandler = (handler, Base = FluidDataStoreRuntime) => class Run
|
|
|
1027
1055
|
this.addBlob(summary, content.path, content.content);
|
|
1028
1056
|
}
|
|
1029
1057
|
}
|
|
1030
|
-
catch (
|
|
1058
|
+
catch (error) {
|
|
1031
1059
|
// Any error coming from app-provided handler should be marked as DataProcessingError
|
|
1032
|
-
throw internal_5.DataProcessingError.wrapIfUnrecognized(
|
|
1060
|
+
throw internal_5.DataProcessingError.wrapIfUnrecognized(error, "mixinSummaryHandler");
|
|
1033
1061
|
}
|
|
1034
1062
|
return summary;
|
|
1035
1063
|
}
|