@fluidframework/datastore 2.0.0-dev-rc.2.0.0.246488 → 2.0.0-dev-rc.3.0.0.250606
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/channelContext.d.ts +3 -3
- package/dist/channelContext.d.ts.map +1 -1
- package/dist/channelContext.js +3 -3
- package/dist/channelContext.js.map +1 -1
- package/dist/channelDeltaConnection.d.ts +2 -2
- package/dist/channelDeltaConnection.d.ts.map +1 -1
- package/dist/channelDeltaConnection.js.map +1 -1
- package/dist/channelStorageService.d.ts +1 -1
- package/dist/channelStorageService.d.ts.map +1 -1
- package/dist/channelStorageService.js.map +1 -1
- package/dist/dataStoreRuntime.d.ts +6 -5
- package/dist/dataStoreRuntime.d.ts.map +1 -1
- package/dist/dataStoreRuntime.js +19 -11
- package/dist/dataStoreRuntime.js.map +1 -1
- package/dist/datastore-alpha.d.ts +1 -0
- package/dist/datastore-untrimmed.d.ts +1 -0
- package/dist/fluidHandle.d.ts +1 -1
- package/dist/fluidHandle.d.ts.map +1 -1
- package/dist/fluidHandle.js.map +1 -1
- package/dist/localChannelContext.d.ts +5 -5
- package/dist/localChannelContext.d.ts.map +1 -1
- package/dist/localChannelContext.js +3 -3
- package/dist/localChannelContext.js.map +1 -1
- package/dist/localChannelStorageService.d.ts.map +1 -1
- package/dist/localChannelStorageService.js.map +1 -1
- package/dist/remoteChannelContext.d.ts.map +1 -1
- package/dist/remoteChannelContext.js +1 -1
- package/dist/remoteChannelContext.js.map +1 -1
- package/lib/channelContext.d.ts +3 -3
- package/lib/channelContext.d.ts.map +1 -1
- package/lib/channelContext.js +3 -3
- package/lib/channelContext.js.map +1 -1
- package/lib/channelDeltaConnection.d.ts +2 -2
- package/lib/channelDeltaConnection.d.ts.map +1 -1
- package/lib/channelDeltaConnection.js.map +1 -1
- package/lib/channelStorageService.d.ts +1 -1
- package/lib/channelStorageService.d.ts.map +1 -1
- package/lib/channelStorageService.js.map +1 -1
- package/lib/dataStoreRuntime.d.ts +6 -5
- package/lib/dataStoreRuntime.d.ts.map +1 -1
- package/lib/dataStoreRuntime.js +20 -12
- package/lib/dataStoreRuntime.js.map +1 -1
- package/lib/datastore-alpha.d.ts +1 -0
- package/lib/datastore-untrimmed.d.ts +1 -0
- package/lib/fluidHandle.d.ts +1 -1
- package/lib/fluidHandle.d.ts.map +1 -1
- package/lib/fluidHandle.js.map +1 -1
- package/lib/localChannelContext.d.ts +5 -5
- package/lib/localChannelContext.d.ts.map +1 -1
- package/lib/localChannelContext.js +3 -3
- package/lib/localChannelContext.js.map +1 -1
- package/lib/localChannelStorageService.d.ts.map +1 -1
- package/lib/localChannelStorageService.js.map +1 -1
- package/lib/remoteChannelContext.d.ts.map +1 -1
- package/lib/remoteChannelContext.js +2 -2
- package/lib/remoteChannelContext.js.map +1 -1
- package/lib/test/channelStorageService.spec.js.map +1 -1
- package/lib/test/dataStoreRuntime.spec.js +1 -1
- package/lib/test/dataStoreRuntime.spec.js.map +1 -1
- package/lib/test/localChannelContext.spec.js.map +1 -1
- package/lib/test/localChannelStorageService.spec.js.map +1 -1
- package/lib/test/remoteChannelContext.spec.js.map +1 -1
- package/package.json +22 -19
- package/src/channelContext.ts +9 -9
- package/src/channelDeltaConnection.ts +2 -2
- package/src/channelStorageService.ts +1 -1
- package/src/dataStoreRuntime.ts +69 -50
- package/src/fluidHandle.ts +1 -1
- package/src/localChannelContext.ts +10 -7
- package/src/localChannelStorageService.ts +1 -1
- package/src/remoteChannelContext.ts +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localChannelStorageService.d.ts","sourceRoot":"","sources":["../src/localChannelStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"localChannelStorageService.d.ts","sourceRoot":"","sources":["../src/localChannelStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAS,KAAK,EAAa,MAAM,sCAAsC,CAAC;AAG/E,qBAAa,0BAA2B,YAAW,sBAAsB;IAC5D,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,KAAK;IAE3B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAQhD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKxC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIlD,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,oBAAoB;CAwB5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localChannelStorageService.js","sourceRoot":"","sources":["../src/localChannelStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"localChannelStorageService.js","sourceRoot":"","sources":["../src/localChannelStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAgB,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,MAAM,OAAO,0BAA0B;IACtC,YAA6B,IAAW;QAAX,SAAI,GAAJ,IAAI,CAAO;IAAG,CAAC;IAErC,KAAK,CAAC,QAAQ,CAAC,IAAY;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,IAAI,KAAK,SAAS,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;SAClC;QACD,OAAO,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,IAAY;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IACjE,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,IAAY;QAC7B,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAEO,YAAY,CAAC,IAAY;QAChC,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAEO,oBAAoB,CAAC,IAAY,EAAE,IAAW;QACrD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE;YACjC,QAAQ,KAAK,CAAC,IAAI,EAAE;gBACnB,KAAK,SAAS,CAAC,IAAI;oBAClB,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;wBACxB,OAAO,KAAK,CAAC,KAAK,CAAC;qBACnB;oBACD,MAAM;gBAEP,KAAK,SAAS,CAAC,IAAI;oBAClB,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;wBAChC,OAAO,IAAI,CAAC,oBAAoB,CAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAClC,KAAK,CAAC,KAAK,CACX,CAAC;qBACF;oBACD,MAAM;gBAEP,QAAQ;aACR;SACD;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 */\n\nimport { stringToBuffer } from \"@fluid-internal/client-utils\";\nimport { IChannelStorageService } from \"@fluidframework/datastore-definitions\";\nimport { IBlob, ITree, TreeEntry } from \"@fluidframework/protocol-definitions\";\nimport { listBlobsAtTreePath } from \"@fluidframework/runtime-utils\";\n\nexport class LocalChannelStorageService implements IChannelStorageService {\n\tconstructor(private readonly tree: ITree) {}\n\n\tpublic async readBlob(path: string): Promise<ArrayBufferLike> {\n\t\tconst blob = this.readBlobSync(path);\n\t\tif (blob === undefined) {\n\t\t\tthrow new Error(\"Blob Not Found\");\n\t\t}\n\t\treturn stringToBuffer(blob.contents, blob.encoding);\n\t}\n\n\tpublic async contains(path: string): Promise<boolean> {\n\t\tconst blob = this.readBlobSync(path);\n\t\treturn blob !== undefined ? blob.contents !== undefined : false;\n\t}\n\n\tpublic async list(path: string): Promise<string[]> {\n\t\treturn listBlobsAtTreePath(this.tree, path);\n\t}\n\n\tprivate readBlobSync(path: string): IBlob | undefined {\n\t\treturn this.readBlobSyncInternal(path, this.tree);\n\t}\n\n\tprivate readBlobSyncInternal(path: string, tree: ITree): IBlob | undefined {\n\t\tfor (const entry of tree.entries) {\n\t\t\tswitch (entry.type) {\n\t\t\t\tcase TreeEntry.Blob:\n\t\t\t\t\tif (path === entry.path) {\n\t\t\t\t\t\treturn entry.value;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TreeEntry.Tree:\n\t\t\t\t\tif (path.startsWith(entry.path)) {\n\t\t\t\t\t\treturn this.readBlobSyncInternal(\n\t\t\t\t\t\t\tpath.substr(entry.path.length + 1),\n\t\t\t\t\t\t\tentry.value,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remoteChannelContext.d.ts","sourceRoot":"","sources":["../src/remoteChannelContext.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"remoteChannelContext.d.ts","sourceRoot":"","sources":["../src/remoteChannelContext.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAChG,OAAO,EACN,2BAA2B,EAE3B,sBAAsB,EACtB,sBAAsB,EAEtB,gBAAgB,EAEhB,iBAAiB,EACjB,MAAM,qCAAqC,CAAC;AAM7C,OAAO,EAEN,eAAe,EAKf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,qBAAa,oBAAqB,YAAW,eAAe;IAkB1D,OAAO,CAAC,QAAQ,CAAC,EAAE;IAjBpB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAA+C;IAC9D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0B;IACnD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAmB;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAQ;gBAGvD,OAAO,EAAE,sBAAsB,EAC/B,gBAAgB,EAAE,sBAAsB,EACxC,cAAc,EAAE,uBAAuB,EACvC,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,KAAK,IAAI,EAC1D,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EAClC,0BAA0B,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,KAAK,IAAI,EAC1E,EAAE,EAAE,MAAM,EAC3B,YAAY,EAAE,aAAa,EAC3B,QAAQ,EAAE,qBAAqB,EAC/B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,EACpD,oBAAoB,EAAE,2BAA2B,EACjD,iBAAiB,CAAC,EAAE,MAAM;IAsFpB,UAAU,IAAI,OAAO,CAAC,QAAQ,CAAC;IAI/B,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM;IASxD,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO;IAKrC,SAAS,CACf,OAAO,EAAE,yBAAyB,EAClC,KAAK,EAAE,OAAO,EACd,eAAe,EAAE,OAAO,GACtB,IAAI;IAaA,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO;IAM/C,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO;IAMtD;;;;;OAKG;IACU,SAAS,CACrB,QAAQ,GAAE,OAAe,EACzB,UAAU,GAAE,OAAc,EAC1B,gBAAgB,CAAC,EAAE,iBAAiB,GAClC,OAAO,CAAC,gBAAgB,CAAC;YAId,iBAAiB;IAiB/B;;;;;;OAMG;IACU,SAAS,CAAC,MAAM,GAAE,OAAe,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAIhF;;;;OAIG;YACW,iBAAiB;IAKxB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE;CAS5C"}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
import { assert, LazyPromise } from "@fluidframework/core-utils";
|
|
6
|
-
import { createChildLogger, ThresholdCounter, } from "@fluidframework/telemetry-utils";
|
|
7
5
|
import { AttachState } from "@fluidframework/container-definitions";
|
|
6
|
+
import { assert, LazyPromise } from "@fluidframework/core-utils";
|
|
7
|
+
import { ThresholdCounter, createChildLogger, } from "@fluidframework/telemetry-utils";
|
|
8
8
|
import { createChannelServiceEndpoints, loadChannel, loadChannelFactoryAndAttributes, summarizeChannelAsync, } from "./channelContext.js";
|
|
9
9
|
export class RemoteChannelContext {
|
|
10
10
|
constructor(runtime, dataStoreContext, storageService, submitFn, dirtyFn, addedGCOutboundReferenceFn, id, baseSnapshot, registry, extraBlobs, createSummarizerNode, attachMessageType) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remoteChannelContext.js","sourceRoot":"","sources":["../src/remoteChannelContext.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, LazyPromise } from \"@fluidframework/core-utils\";\nimport { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport { IChannel, IFluidDataStoreRuntime } from \"@fluidframework/datastore-definitions\";\nimport { IDocumentStorageService } from \"@fluidframework/driver-definitions\";\nimport { ISequencedDocumentMessage, ISnapshotTree } from \"@fluidframework/protocol-definitions\";\nimport {\n\tCreateChildSummarizerNodeFn,\n\tIFluidDataStoreContext,\n\tIGarbageCollectionData,\n\tIExperimentalIncrementalSummaryContext,\n\tISummarizeInternalResult,\n\tISummarizeResult,\n\tISummarizerNodeWithGC,\n\tITelemetryContext,\n} from \"@fluidframework/runtime-definitions\";\nimport {\n\tcreateChildLogger,\n\tITelemetryLoggerExt,\n\tThresholdCounter,\n} from \"@fluidframework/telemetry-utils\";\nimport { AttachState } from \"@fluidframework/container-definitions\";\nimport {\n\tChannelServiceEndpoints,\n\tcreateChannelServiceEndpoints,\n\tIChannelContext,\n\tloadChannel,\n\tloadChannelFactoryAndAttributes,\n\tsummarizeChannelAsync,\n} from \"./channelContext.js\";\nimport { ISharedObjectRegistry } from \"./dataStoreRuntime.js\";\n\nexport class RemoteChannelContext implements IChannelContext {\n\tprivate isLoaded = false;\n\tprivate pending: ISequencedDocumentMessage[] | undefined = [];\n\tprivate readonly channelP: Promise<IChannel>;\n\tprivate channel: IChannel | undefined;\n\tprivate readonly services: ChannelServiceEndpoints;\n\tprivate readonly summarizerNode: ISummarizerNodeWithGC;\n\tprivate readonly subLogger: ITelemetryLoggerExt;\n\tprivate readonly thresholdOpsCounter: ThresholdCounter;\n\tprivate static readonly pendingOpsCountThreshold = 1000;\n\n\tconstructor(\n\t\truntime: IFluidDataStoreRuntime,\n\t\tdataStoreContext: IFluidDataStoreContext,\n\t\tstorageService: IDocumentStorageService,\n\t\tsubmitFn: (content: any, localOpMetadata: unknown) => void,\n\t\tdirtyFn: (address: string) => void,\n\t\taddedGCOutboundReferenceFn: (srcHandle: IFluidHandle, outboundHandle: IFluidHandle) => void,\n\t\tprivate readonly id: string,\n\t\tbaseSnapshot: ISnapshotTree,\n\t\tregistry: ISharedObjectRegistry,\n\t\textraBlobs: Map<string, ArrayBufferLike> | undefined,\n\t\tcreateSummarizerNode: CreateChildSummarizerNodeFn,\n\t\tattachMessageType?: string,\n\t) {\n\t\tassert(!this.id.includes(\"/\"), 0x310 /* Channel context ID cannot contain slashes */);\n\n\t\tthis.subLogger = createChildLogger({\n\t\t\tlogger: runtime.logger,\n\t\t\tnamespace: \"RemoteChannelContext\",\n\t\t});\n\n\t\tthis.services = createChannelServiceEndpoints(\n\t\t\tdataStoreContext.connected,\n\t\t\tsubmitFn,\n\t\t\t() => dirtyFn(this.id),\n\t\t\taddedGCOutboundReferenceFn,\n\t\t\t() => runtime.attachState !== AttachState.Detached,\n\t\t\tstorageService,\n\t\t\tthis.subLogger,\n\t\t\tbaseSnapshot,\n\t\t\textraBlobs,\n\t\t);\n\n\t\tthis.channelP = new LazyPromise<IChannel>(async () => {\n\t\t\tconst { attributes, factory } = await loadChannelFactoryAndAttributes(\n\t\t\t\tdataStoreContext,\n\t\t\t\tthis.services,\n\t\t\t\tthis.id,\n\t\t\t\tregistry,\n\t\t\t\tattachMessageType,\n\t\t\t);\n\n\t\t\tconst channel = await loadChannel(\n\t\t\t\truntime,\n\t\t\t\tattributes,\n\t\t\t\tfactory,\n\t\t\t\tthis.services,\n\t\t\t\tthis.subLogger,\n\t\t\t\tthis.id,\n\t\t\t);\n\n\t\t\t// Send all pending messages to the channel\n\t\t\tassert(this.pending !== undefined, 0x23f /* \"pending undefined\" */);\n\t\t\tfor (const message of this.pending) {\n\t\t\t\tthis.services.deltaConnection.process(\n\t\t\t\t\tmessage,\n\t\t\t\t\tfalse,\n\t\t\t\t\tundefined /* localOpMetadata */,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.thresholdOpsCounter.send(\"ProcessPendingOps\", this.pending.length);\n\n\t\t\t// Commit changes.\n\t\t\tthis.channel = channel;\n\t\t\tthis.pending = undefined;\n\t\t\tthis.isLoaded = true;\n\n\t\t\t// Because have some await between we created the service and here, the connection state might have changed\n\t\t\t// and we don't propagate the connection state when we are not loaded. So we have to set it again here.\n\t\t\tthis.services.deltaConnection.setConnectionState(dataStoreContext.connected);\n\t\t\treturn this.channel;\n\t\t});\n\n\t\tconst thisSummarizeInternal = async (\n\t\t\tfullTree: boolean,\n\t\t\ttrackState: boolean,\n\t\t\ttelemetryContext?: ITelemetryContext,\n\t\t\tincrementalSummaryContext?: IExperimentalIncrementalSummaryContext,\n\t\t) =>\n\t\t\tthis.summarizeInternal(\n\t\t\t\tfullTree,\n\t\t\t\ttrackState,\n\t\t\t\ttelemetryContext,\n\t\t\t\tincrementalSummaryContext,\n\t\t\t);\n\n\t\tthis.summarizerNode = createSummarizerNode(\n\t\t\tthisSummarizeInternal,\n\t\t\tasync (fullGC?: boolean) => this.getGCDataInternal(fullGC),\n\t\t);\n\n\t\tthis.thresholdOpsCounter = new ThresholdCounter(\n\t\t\tRemoteChannelContext.pendingOpsCountThreshold,\n\t\t\tthis.subLogger,\n\t\t);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/promise-function-async\n\tpublic getChannel(): Promise<IChannel> {\n\t\treturn this.channelP;\n\t}\n\n\tpublic setConnectionState(connected: boolean, clientId?: string) {\n\t\t// Connection events are ignored if the data store is not yet loaded\n\t\tif (!this.isLoaded) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.services.deltaConnection.setConnectionState(connected);\n\t}\n\n\tpublic applyStashedOp(content: any): unknown {\n\t\tassert(this.isLoaded, 0x194 /* \"Remote channel must be loaded when rebasing op\" */);\n\t\treturn this.services.deltaConnection.applyStashedOp(content);\n\t}\n\n\tpublic processOp(\n\t\tmessage: ISequencedDocumentMessage,\n\t\tlocal: boolean,\n\t\tlocalOpMetadata: unknown,\n\t): void {\n\t\tthis.summarizerNode.invalidate(message.sequenceNumber);\n\n\t\tif (this.isLoaded) {\n\t\t\tthis.services.deltaConnection.process(message, local, localOpMetadata);\n\t\t} else {\n\t\t\tassert(!local, 0x195 /* \"Remote channel must not be local when processing op\" */);\n\t\t\tassert(this.pending !== undefined, 0x23e /* \"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 reSubmit(content: any, localOpMetadata: unknown) {\n\t\tassert(this.isLoaded, 0x196 /* \"Remote channel must be loaded when resubmitting op\" */);\n\n\t\tthis.services.deltaConnection.reSubmit(content, localOpMetadata);\n\t}\n\n\tpublic rollback(content: any, localOpMetadata: unknown) {\n\t\tassert(this.isLoaded, 0x2f0 /* \"Remote channel must be loaded when rolling back op\" */);\n\n\t\tthis.services.deltaConnection.rollback(content, localOpMetadata);\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\tincrementalSummaryContext?: IExperimentalIncrementalSummaryContext,\n\t): Promise<ISummarizeInternalResult> {\n\t\tconst channel = await this.getChannel();\n\t\tconst summarizeResult = await summarizeChannelAsync(\n\t\t\tchannel,\n\t\t\tfullTree,\n\t\t\ttrackState,\n\t\t\ttelemetryContext,\n\t\t\tincrementalSummaryContext,\n\t\t);\n\t\treturn { ...summarizeResult, id: this.id };\n\t}\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 * Each node has a set of outbound routes to other GC nodes in the document.\n\t * If there is no new data in this context 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 the data used for garbage collection. This is called when there is new data since last summary. It\n\t * loads the context and calls into the channel 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\tconst channel = await this.getChannel();\n\t\treturn channel.getGCData(fullGC);\n\t}\n\n\tpublic updateUsedRoutes(usedRoutes: string[]) {\n\t\t/**\n\t\t * Currently, DDSes are always considered referenced and are not garbage collected. Update the summarizer node's\n\t\t * used routes to contain a route to this channel context.\n\t\t * Once we have GC at DDS level, this will be updated to use the passed usedRoutes. See -\n\t\t * https://github.com/microsoft/FluidFramework/issues/4611\n\t\t */\n\t\tthis.summarizerNode.updateUsedRoutes([\"\"]);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"remoteChannelContext.js","sourceRoot":"","sources":["../src/remoteChannelContext.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 { AttachState } from \"@fluidframework/container-definitions\";\nimport { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport { assert, LazyPromise } from \"@fluidframework/core-utils\";\nimport { IChannel, IFluidDataStoreRuntime } from \"@fluidframework/datastore-definitions\";\nimport { IDocumentStorageService } from \"@fluidframework/driver-definitions\";\nimport { ISequencedDocumentMessage, ISnapshotTree } from \"@fluidframework/protocol-definitions\";\nimport {\n\tCreateChildSummarizerNodeFn,\n\tIExperimentalIncrementalSummaryContext,\n\tIFluidDataStoreContext,\n\tIGarbageCollectionData,\n\tISummarizeInternalResult,\n\tISummarizeResult,\n\tISummarizerNodeWithGC,\n\tITelemetryContext,\n} from \"@fluidframework/runtime-definitions\";\nimport {\n\tITelemetryLoggerExt,\n\tThresholdCounter,\n\tcreateChildLogger,\n} from \"@fluidframework/telemetry-utils\";\nimport {\n\tChannelServiceEndpoints,\n\tIChannelContext,\n\tcreateChannelServiceEndpoints,\n\tloadChannel,\n\tloadChannelFactoryAndAttributes,\n\tsummarizeChannelAsync,\n} from \"./channelContext.js\";\nimport { ISharedObjectRegistry } from \"./dataStoreRuntime.js\";\n\nexport class RemoteChannelContext implements IChannelContext {\n\tprivate isLoaded = false;\n\tprivate pending: ISequencedDocumentMessage[] | undefined = [];\n\tprivate readonly channelP: Promise<IChannel>;\n\tprivate channel: IChannel | undefined;\n\tprivate readonly services: ChannelServiceEndpoints;\n\tprivate readonly summarizerNode: ISummarizerNodeWithGC;\n\tprivate readonly subLogger: ITelemetryLoggerExt;\n\tprivate readonly thresholdOpsCounter: ThresholdCounter;\n\tprivate static readonly pendingOpsCountThreshold = 1000;\n\n\tconstructor(\n\t\truntime: IFluidDataStoreRuntime,\n\t\tdataStoreContext: IFluidDataStoreContext,\n\t\tstorageService: IDocumentStorageService,\n\t\tsubmitFn: (content: any, localOpMetadata: unknown) => void,\n\t\tdirtyFn: (address: string) => void,\n\t\taddedGCOutboundReferenceFn: (srcHandle: IFluidHandle, outboundHandle: IFluidHandle) => void,\n\t\tprivate readonly id: string,\n\t\tbaseSnapshot: ISnapshotTree,\n\t\tregistry: ISharedObjectRegistry,\n\t\textraBlobs: Map<string, ArrayBufferLike> | undefined,\n\t\tcreateSummarizerNode: CreateChildSummarizerNodeFn,\n\t\tattachMessageType?: string,\n\t) {\n\t\tassert(!this.id.includes(\"/\"), 0x310 /* Channel context ID cannot contain slashes */);\n\n\t\tthis.subLogger = createChildLogger({\n\t\t\tlogger: runtime.logger,\n\t\t\tnamespace: \"RemoteChannelContext\",\n\t\t});\n\n\t\tthis.services = createChannelServiceEndpoints(\n\t\t\tdataStoreContext.connected,\n\t\t\tsubmitFn,\n\t\t\t() => dirtyFn(this.id),\n\t\t\taddedGCOutboundReferenceFn,\n\t\t\t() => runtime.attachState !== AttachState.Detached,\n\t\t\tstorageService,\n\t\t\tthis.subLogger,\n\t\t\tbaseSnapshot,\n\t\t\textraBlobs,\n\t\t);\n\n\t\tthis.channelP = new LazyPromise<IChannel>(async () => {\n\t\t\tconst { attributes, factory } = await loadChannelFactoryAndAttributes(\n\t\t\t\tdataStoreContext,\n\t\t\t\tthis.services,\n\t\t\t\tthis.id,\n\t\t\t\tregistry,\n\t\t\t\tattachMessageType,\n\t\t\t);\n\n\t\t\tconst channel = await loadChannel(\n\t\t\t\truntime,\n\t\t\t\tattributes,\n\t\t\t\tfactory,\n\t\t\t\tthis.services,\n\t\t\t\tthis.subLogger,\n\t\t\t\tthis.id,\n\t\t\t);\n\n\t\t\t// Send all pending messages to the channel\n\t\t\tassert(this.pending !== undefined, 0x23f /* \"pending undefined\" */);\n\t\t\tfor (const message of this.pending) {\n\t\t\t\tthis.services.deltaConnection.process(\n\t\t\t\t\tmessage,\n\t\t\t\t\tfalse,\n\t\t\t\t\tundefined /* localOpMetadata */,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.thresholdOpsCounter.send(\"ProcessPendingOps\", this.pending.length);\n\n\t\t\t// Commit changes.\n\t\t\tthis.channel = channel;\n\t\t\tthis.pending = undefined;\n\t\t\tthis.isLoaded = true;\n\n\t\t\t// Because have some await between we created the service and here, the connection state might have changed\n\t\t\t// and we don't propagate the connection state when we are not loaded. So we have to set it again here.\n\t\t\tthis.services.deltaConnection.setConnectionState(dataStoreContext.connected);\n\t\t\treturn this.channel;\n\t\t});\n\n\t\tconst thisSummarizeInternal = async (\n\t\t\tfullTree: boolean,\n\t\t\ttrackState: boolean,\n\t\t\ttelemetryContext?: ITelemetryContext,\n\t\t\tincrementalSummaryContext?: IExperimentalIncrementalSummaryContext,\n\t\t) =>\n\t\t\tthis.summarizeInternal(\n\t\t\t\tfullTree,\n\t\t\t\ttrackState,\n\t\t\t\ttelemetryContext,\n\t\t\t\tincrementalSummaryContext,\n\t\t\t);\n\n\t\tthis.summarizerNode = createSummarizerNode(\n\t\t\tthisSummarizeInternal,\n\t\t\tasync (fullGC?: boolean) => this.getGCDataInternal(fullGC),\n\t\t);\n\n\t\tthis.thresholdOpsCounter = new ThresholdCounter(\n\t\t\tRemoteChannelContext.pendingOpsCountThreshold,\n\t\t\tthis.subLogger,\n\t\t);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/promise-function-async\n\tpublic getChannel(): Promise<IChannel> {\n\t\treturn this.channelP;\n\t}\n\n\tpublic setConnectionState(connected: boolean, clientId?: string) {\n\t\t// Connection events are ignored if the data store is not yet loaded\n\t\tif (!this.isLoaded) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.services.deltaConnection.setConnectionState(connected);\n\t}\n\n\tpublic applyStashedOp(content: any): unknown {\n\t\tassert(this.isLoaded, 0x194 /* \"Remote channel must be loaded when rebasing op\" */);\n\t\treturn this.services.deltaConnection.applyStashedOp(content);\n\t}\n\n\tpublic processOp(\n\t\tmessage: ISequencedDocumentMessage,\n\t\tlocal: boolean,\n\t\tlocalOpMetadata: unknown,\n\t): void {\n\t\tthis.summarizerNode.invalidate(message.sequenceNumber);\n\n\t\tif (this.isLoaded) {\n\t\t\tthis.services.deltaConnection.process(message, local, localOpMetadata);\n\t\t} else {\n\t\t\tassert(!local, 0x195 /* \"Remote channel must not be local when processing op\" */);\n\t\t\tassert(this.pending !== undefined, 0x23e /* \"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 reSubmit(content: any, localOpMetadata: unknown) {\n\t\tassert(this.isLoaded, 0x196 /* \"Remote channel must be loaded when resubmitting op\" */);\n\n\t\tthis.services.deltaConnection.reSubmit(content, localOpMetadata);\n\t}\n\n\tpublic rollback(content: any, localOpMetadata: unknown) {\n\t\tassert(this.isLoaded, 0x2f0 /* \"Remote channel must be loaded when rolling back op\" */);\n\n\t\tthis.services.deltaConnection.rollback(content, localOpMetadata);\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\tincrementalSummaryContext?: IExperimentalIncrementalSummaryContext,\n\t): Promise<ISummarizeInternalResult> {\n\t\tconst channel = await this.getChannel();\n\t\tconst summarizeResult = await summarizeChannelAsync(\n\t\t\tchannel,\n\t\t\tfullTree,\n\t\t\ttrackState,\n\t\t\ttelemetryContext,\n\t\t\tincrementalSummaryContext,\n\t\t);\n\t\treturn { ...summarizeResult, id: this.id };\n\t}\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 * Each node has a set of outbound routes to other GC nodes in the document.\n\t * If there is no new data in this context 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 the data used for garbage collection. This is called when there is new data since last summary. It\n\t * loads the context and calls into the channel 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\tconst channel = await this.getChannel();\n\t\treturn channel.getGCData(fullGC);\n\t}\n\n\tpublic updateUsedRoutes(usedRoutes: string[]) {\n\t\t/**\n\t\t * Currently, DDSes are always considered referenced and are not garbage collected. Update the summarizer node's\n\t\t * used routes to contain a route to this channel context.\n\t\t * Once we have GC at DDS level, this will be updated to use the passed usedRoutes. See -\n\t\t * https://github.com/microsoft/FluidFramework/issues/4611\n\t\t */\n\t\tthis.summarizerNode.updateUsedRoutes([\"\"]);\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channelStorageService.spec.js","sourceRoot":"","sources":["../../src/test/channelStorageService.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"channelStorageService.spec.js","sourceRoot":"","sources":["../../src/test/channelStorageService.spec.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 { strict as assert } from \"assert\";\nimport { stringToBuffer } from \"@fluid-internal/client-utils\";\nimport { IDocumentStorageService } from \"@fluidframework/driver-definitions\";\nimport { ISnapshotTree } from \"@fluidframework/protocol-definitions\";\nimport { MockLogger } from \"@fluidframework/telemetry-utils\";\nimport { ChannelStorageService } from \"../channelStorageService.js\";\n\ndescribe(\"ChannelStorageService\", () => {\n\tit(\"Empty Tree\", async () => {\n\t\tconst tree: ISnapshotTree = {\n\t\t\tblobs: {},\n\t\t\ttrees: {},\n\t\t};\n\t\tconst storage: Pick<IDocumentStorageService, \"readBlob\"> = {\n\t\t\treadBlob: async (id: string) => {\n\t\t\t\tthrow new Error(\"not implemented\");\n\t\t\t},\n\t\t};\n\t\tconst logger = new MockLogger();\n\t\tconst ss = new ChannelStorageService(tree, storage, logger.toTelemetryLogger());\n\n\t\tassert.strictEqual(await ss.contains(\"/\"), false);\n\t\tassert.deepStrictEqual(await ss.list(\"\"), []);\n\t\tlogger.assertMatchNone([{ category: \"error\" }]);\n\t});\n\n\tit(\"Top Level Blob\", async () => {\n\t\tconst tree: ISnapshotTree = {\n\t\t\tblobs: {\n\t\t\t\tfoo: \"bar\",\n\t\t\t},\n\t\t\ttrees: {},\n\t\t};\n\t\tconst storage: Pick<IDocumentStorageService, \"readBlob\"> = {\n\t\t\treadBlob: async (id: string) => {\n\t\t\t\treturn stringToBuffer(id, \"utf8\");\n\t\t\t},\n\t\t};\n\t\tconst logger = new MockLogger();\n\t\tconst ss = new ChannelStorageService(tree, storage, logger.toTelemetryLogger());\n\n\t\tassert.strictEqual(await ss.contains(\"foo\"), true);\n\t\tassert.deepStrictEqual(await ss.list(\"\"), [\"foo\"]);\n\t\tassert.deepStrictEqual(await ss.readBlob(\"foo\"), stringToBuffer(\"bar\", \"utf8\"));\n\t\tlogger.assertMatchNone([{ category: \"error\" }]);\n\t});\n\n\tit(\"Nested Blob\", async () => {\n\t\tconst tree: ISnapshotTree = {\n\t\t\tblobs: {},\n\t\t\ttrees: {\n\t\t\t\tnested: {\n\t\t\t\t\tblobs: {\n\t\t\t\t\t\tfoo: \"bar\",\n\t\t\t\t\t},\n\t\t\t\t\ttrees: {},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t\tconst storage: Pick<IDocumentStorageService, \"readBlob\"> = {\n\t\t\treadBlob: async (id: string) => {\n\t\t\t\treturn stringToBuffer(id, \"utf8\");\n\t\t\t},\n\t\t};\n\t\tconst logger = new MockLogger();\n\t\tconst ss = new ChannelStorageService(tree, storage, logger.toTelemetryLogger());\n\n\t\tassert.strictEqual(await ss.contains(\"nested/foo\"), true);\n\t\tassert.deepStrictEqual(await ss.list(\"nested/\"), [\"foo\"]);\n\t\tassert.deepStrictEqual(await ss.readBlob(\"nested/foo\"), stringToBuffer(\"bar\", \"utf8\"));\n\t\tlogger.assertMatchNone([{ category: \"error\" }]);\n\t});\n});\n"]}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
import { strict as assert } from "assert";
|
|
6
|
+
import { ContainerErrorTypes } from "@fluidframework/container-definitions";
|
|
6
7
|
import { SummaryType } from "@fluidframework/protocol-definitions";
|
|
7
8
|
import { MockFluidDataStoreContext, validateAssertionError, } from "@fluidframework/test-runtime-utils";
|
|
8
|
-
import { ContainerErrorTypes } from "@fluidframework/container-definitions";
|
|
9
9
|
import { FluidDataStoreRuntime } from "../dataStoreRuntime.js";
|
|
10
10
|
describe("FluidDataStoreRuntime Tests", () => {
|
|
11
11
|
let dataStoreContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataStoreRuntime.spec.js","sourceRoot":"","sources":["../../src/test/dataStoreRuntime.spec.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 { strict as assert } from \"assert\";\nimport { SummaryType } from \"@fluidframework/protocol-definitions\";\nimport {\n\tIContainerRuntimeBase,\n\tIGarbageCollectionData,\n\tIFluidDataStoreContext,\n} from \"@fluidframework/runtime-definitions\";\nimport {\n\tMockFluidDataStoreContext,\n\tvalidateAssertionError,\n} from \"@fluidframework/test-runtime-utils\";\nimport { ContainerErrorTypes } from \"@fluidframework/container-definitions\";\nimport { IFluidDataStoreRuntime, IChannel } from \"@fluidframework/datastore-definitions\";\nimport { IErrorBase, FluidObject } from \"@fluidframework/core-interfaces\";\nimport { FluidDataStoreRuntime, ISharedObjectRegistry } from \"../dataStoreRuntime.js\";\n\ndescribe(\"FluidDataStoreRuntime Tests\", () => {\n\tlet dataStoreContext: MockFluidDataStoreContext;\n\tlet sharedObjectRegistry: ISharedObjectRegistry;\n\tfunction createRuntime(\n\t\tcontext: IFluidDataStoreContext,\n\t\tregistry: ISharedObjectRegistry,\n\t\tentrypointInitializationFn?: (rt: IFluidDataStoreRuntime) => Promise<FluidObject>,\n\t) {\n\t\tconst runtime: FluidDataStoreRuntime = new FluidDataStoreRuntime(\n\t\t\tcontext,\n\t\t\tregistry,\n\t\t\t/* existing */ false,\n\t\t\tentrypointInitializationFn ?? (async () => runtime),\n\t\t);\n\t\treturn runtime;\n\t}\n\n\tbeforeEach(() => {\n\t\tdataStoreContext = new MockFluidDataStoreContext();\n\t\t// back-compat 0.38 - DataStoreRuntime looks in container runtime for certain properties that are unavailable\n\t\t// in the data store context.\n\t\tdataStoreContext.containerRuntime = {} as unknown as IContainerRuntimeBase;\n\t\tsharedObjectRegistry = {\n\t\t\tget(type: string) {\n\t\t\t\treturn {\n\t\t\t\t\ttype,\n\t\t\t\t\tattributes: { type, snapshotFormatVersion: \"0\" },\n\t\t\t\t\tcreate: (runtime, id: string) =>\n\t\t\t\t\t\t({\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\tattributes: { type, snapshotFormatVersion: \"0\" },\n\t\t\t\t\t\t\tclientDetails: {},\n\t\t\t\t\t\t}) as any as IChannel,\n\t\t\t\t\tload: async () => Promise.resolve({} as any as IChannel),\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t});\n\n\tit(\"constructor rejects ids with forward slashes\", () => {\n\t\tconst invalidId = \"beforeSlash/afterSlash\";\n\t\tdataStoreContext = new MockFluidDataStoreContext(invalidId);\n\t\tconst codeBlock = () =>\n\t\t\tnew FluidDataStoreRuntime(\n\t\t\t\tdataStoreContext,\n\t\t\t\tsharedObjectRegistry,\n\t\t\t\tfalse,\n\t\t\t\tasync (dataStoreRuntime) => {\n\t\t\t\t\tthrow new Error(\"This shouldn't be called during the test\");\n\t\t\t\t},\n\t\t\t);\n\t\tassert.throws(codeBlock, (e: Error) =>\n\t\t\tvalidateAssertionError(\n\t\t\t\te,\n\t\t\t\t\"Id cannot contain slashes. DataStoreContext should have validated this.\",\n\t\t\t),\n\t\t);\n\t});\n\n\tit(\"can create a data store runtime\", () => {\n\t\tlet failed: boolean = false;\n\t\tlet dataStoreRuntime: FluidDataStoreRuntime | undefined;\n\t\ttry {\n\t\t\tdataStoreRuntime = createRuntime(dataStoreContext, sharedObjectRegistry);\n\t\t} catch (error) {\n\t\t\tfailed = true;\n\t\t}\n\t\tassert.strictEqual(failed, false, \"Data store runtime creation failed\");\n\t\tassert.strictEqual(\n\t\t\tdataStoreRuntime?.id,\n\t\t\tdataStoreContext.id,\n\t\t\t\"Data store runtime's id in incorrect\",\n\t\t);\n\t});\n\n\tit(\"can summarize an empty data store runtime\", async () => {\n\t\tconst dataStoreRuntime = createRuntime(dataStoreContext, sharedObjectRegistry);\n\t\tconst summarizeResult = await dataStoreRuntime.summarize(true, false);\n\t\tassert(\n\t\t\tsummarizeResult.summary.type === SummaryType.Tree,\n\t\t\t\"Data store runtime did not return a summary tree\",\n\t\t);\n\t\tassert(\n\t\t\tObject.keys(summarizeResult.summary.tree).length === 0,\n\t\t\t\"The summary should be empty\",\n\t\t);\n\t});\n\n\tit(\"can get GC data of an empty data store runtime\", async () => {\n\t\t// The GC data should have a single node for the data store runtime with empty outbound routes.\n\t\tconst expectedGCData: IGarbageCollectionData = {\n\t\t\tgcNodes: { \"/\": [] },\n\t\t};\n\t\tconst dataStoreRuntime = createRuntime(dataStoreContext, sharedObjectRegistry);\n\t\tconst gcData = await dataStoreRuntime.getGCData();\n\t\tassert.deepStrictEqual(gcData, expectedGCData, \"The GC data is incorrect\");\n\t});\n\n\tit(\"createChannel rejects ids with slashes\", async () => {\n\t\tconst dataStoreRuntime = createRuntime(dataStoreContext, sharedObjectRegistry);\n\t\tconst invalidId = \"beforeSlash/afterSlash\";\n\t\tconst codeBlock = () => dataStoreRuntime.createChannel(invalidId, \"SomeType\");\n\t\tassert.throws(\n\t\t\tcodeBlock,\n\t\t\t(e: IErrorBase) =>\n\t\t\t\te.errorType === ContainerErrorTypes.usageError &&\n\t\t\t\te.message === `Id cannot contain slashes: ${invalidId}`,\n\t\t);\n\t});\n\n\tit(\"createChannel with default guid\", async () => {\n\t\tconst dataStoreRuntime = createRuntime(dataStoreContext, sharedObjectRegistry);\n\t\tconst type = \"SomeType\";\n\t\tconst channel = dataStoreRuntime.createChannel(undefined, type);\n\t\tassert(channel !== undefined, \"channel should be created\");\n\t\tassert(type === channel.attributes.type, \"type should be as expected\");\n\t});\n\n\tit(\"createChannel and then attach to dataStore runtime\", async () => {\n\t\tconst dataStoreRuntime = createRuntime(dataStoreContext, sharedObjectRegistry);\n\t\tconst type = \"SomeType\";\n\t\tconst channel = {\n\t\t\tid: \"id\",\n\t\t\ttype,\n\t\t\tattributes: { type, snapshotFormatVersion: \"0\" },\n\t\t\tclientDetails: {},\n\t\t} as any as IChannel;\n\t\tdataStoreRuntime.addChannel(channel);\n\t\tconst channel1 = await dataStoreRuntime.getChannel(channel.id);\n\t\tassert.deepStrictEqual(channel, channel1, \"both channel should match\");\n\t});\n\n\tit(\"createChannel rejects ids with slashes when channel is created first\", async () => {\n\t\tconst dataStoreRuntime = createRuntime(dataStoreContext, sharedObjectRegistry);\n\t\tconst invalidId = \"beforeSlash/afterSlash\";\n\t\tconst type = \"SomeType\";\n\t\tconst channel = {\n\t\t\tid: invalidId,\n\t\t\ttype,\n\t\t\tattributes: { type, snapshotFormatVersion: \"0\" },\n\t\t\tclientDetails: {},\n\t\t} as any as IChannel;\n\t\tconst codeBlock = () => dataStoreRuntime.addChannel(channel);\n\t\tassert.throws(\n\t\t\tcodeBlock,\n\t\t\t(e: IErrorBase) =>\n\t\t\t\te.errorType === ContainerErrorTypes.usageError &&\n\t\t\t\te.message === `Id cannot contain slashes: ${invalidId}`,\n\t\t);\n\t});\n\n\tit(\"entryPoint is initialized correctly\", async () => {\n\t\tconst myObj: FluidObject = { fakeProp: \"fakeValue\" };\n\t\tconst dataStoreRuntime = createRuntime(\n\t\t\tdataStoreContext,\n\t\t\tsharedObjectRegistry,\n\t\t\tasync (dsRuntime) => myObj,\n\t\t);\n\t\tassert(\n\t\t\t(await dataStoreRuntime.entryPoint?.get()) === myObj,\n\t\t\t\"entryPoint was not initialized\",\n\t\t);\n\t});\n});\n"]}
|
|
1
|
+
{"version":3,"file":"dataStoreRuntime.spec.js","sourceRoot":"","sources":["../../src/test/dataStoreRuntime.spec.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 { strict as assert } from \"assert\";\nimport { ContainerErrorTypes } from \"@fluidframework/container-definitions\";\nimport { FluidObject, IErrorBase } from \"@fluidframework/core-interfaces\";\nimport { IChannel, IFluidDataStoreRuntime } from \"@fluidframework/datastore-definitions\";\nimport { SummaryType } from \"@fluidframework/protocol-definitions\";\nimport {\n\tIContainerRuntimeBase,\n\tIFluidDataStoreContext,\n\tIGarbageCollectionData,\n} from \"@fluidframework/runtime-definitions\";\nimport {\n\tMockFluidDataStoreContext,\n\tvalidateAssertionError,\n} from \"@fluidframework/test-runtime-utils\";\nimport { FluidDataStoreRuntime, ISharedObjectRegistry } from \"../dataStoreRuntime.js\";\n\ndescribe(\"FluidDataStoreRuntime Tests\", () => {\n\tlet dataStoreContext: MockFluidDataStoreContext;\n\tlet sharedObjectRegistry: ISharedObjectRegistry;\n\tfunction createRuntime(\n\t\tcontext: IFluidDataStoreContext,\n\t\tregistry: ISharedObjectRegistry,\n\t\tentrypointInitializationFn?: (rt: IFluidDataStoreRuntime) => Promise<FluidObject>,\n\t) {\n\t\tconst runtime: FluidDataStoreRuntime = new FluidDataStoreRuntime(\n\t\t\tcontext,\n\t\t\tregistry,\n\t\t\t/* existing */ false,\n\t\t\tentrypointInitializationFn ?? (async () => runtime),\n\t\t);\n\t\treturn runtime;\n\t}\n\n\tbeforeEach(() => {\n\t\tdataStoreContext = new MockFluidDataStoreContext();\n\t\t// back-compat 0.38 - DataStoreRuntime looks in container runtime for certain properties that are unavailable\n\t\t// in the data store context.\n\t\tdataStoreContext.containerRuntime = {} as unknown as IContainerRuntimeBase;\n\t\tsharedObjectRegistry = {\n\t\t\tget(type: string) {\n\t\t\t\treturn {\n\t\t\t\t\ttype,\n\t\t\t\t\tattributes: { type, snapshotFormatVersion: \"0\" },\n\t\t\t\t\tcreate: (runtime, id: string) =>\n\t\t\t\t\t\t({\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\tattributes: { type, snapshotFormatVersion: \"0\" },\n\t\t\t\t\t\t\tclientDetails: {},\n\t\t\t\t\t\t}) as any as IChannel,\n\t\t\t\t\tload: async () => Promise.resolve({} as any as IChannel),\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t});\n\n\tit(\"constructor rejects ids with forward slashes\", () => {\n\t\tconst invalidId = \"beforeSlash/afterSlash\";\n\t\tdataStoreContext = new MockFluidDataStoreContext(invalidId);\n\t\tconst codeBlock = () =>\n\t\t\tnew FluidDataStoreRuntime(\n\t\t\t\tdataStoreContext,\n\t\t\t\tsharedObjectRegistry,\n\t\t\t\tfalse,\n\t\t\t\tasync (dataStoreRuntime) => {\n\t\t\t\t\tthrow new Error(\"This shouldn't be called during the test\");\n\t\t\t\t},\n\t\t\t);\n\t\tassert.throws(codeBlock, (e: Error) =>\n\t\t\tvalidateAssertionError(\n\t\t\t\te,\n\t\t\t\t\"Id cannot contain slashes. DataStoreContext should have validated this.\",\n\t\t\t),\n\t\t);\n\t});\n\n\tit(\"can create a data store runtime\", () => {\n\t\tlet failed: boolean = false;\n\t\tlet dataStoreRuntime: FluidDataStoreRuntime | undefined;\n\t\ttry {\n\t\t\tdataStoreRuntime = createRuntime(dataStoreContext, sharedObjectRegistry);\n\t\t} catch (error) {\n\t\t\tfailed = true;\n\t\t}\n\t\tassert.strictEqual(failed, false, \"Data store runtime creation failed\");\n\t\tassert.strictEqual(\n\t\t\tdataStoreRuntime?.id,\n\t\t\tdataStoreContext.id,\n\t\t\t\"Data store runtime's id in incorrect\",\n\t\t);\n\t});\n\n\tit(\"can summarize an empty data store runtime\", async () => {\n\t\tconst dataStoreRuntime = createRuntime(dataStoreContext, sharedObjectRegistry);\n\t\tconst summarizeResult = await dataStoreRuntime.summarize(true, false);\n\t\tassert(\n\t\t\tsummarizeResult.summary.type === SummaryType.Tree,\n\t\t\t\"Data store runtime did not return a summary tree\",\n\t\t);\n\t\tassert(\n\t\t\tObject.keys(summarizeResult.summary.tree).length === 0,\n\t\t\t\"The summary should be empty\",\n\t\t);\n\t});\n\n\tit(\"can get GC data of an empty data store runtime\", async () => {\n\t\t// The GC data should have a single node for the data store runtime with empty outbound routes.\n\t\tconst expectedGCData: IGarbageCollectionData = {\n\t\t\tgcNodes: { \"/\": [] },\n\t\t};\n\t\tconst dataStoreRuntime = createRuntime(dataStoreContext, sharedObjectRegistry);\n\t\tconst gcData = await dataStoreRuntime.getGCData();\n\t\tassert.deepStrictEqual(gcData, expectedGCData, \"The GC data is incorrect\");\n\t});\n\n\tit(\"createChannel rejects ids with slashes\", async () => {\n\t\tconst dataStoreRuntime = createRuntime(dataStoreContext, sharedObjectRegistry);\n\t\tconst invalidId = \"beforeSlash/afterSlash\";\n\t\tconst codeBlock = () => dataStoreRuntime.createChannel(invalidId, \"SomeType\");\n\t\tassert.throws(\n\t\t\tcodeBlock,\n\t\t\t(e: IErrorBase) =>\n\t\t\t\te.errorType === ContainerErrorTypes.usageError &&\n\t\t\t\te.message === `Id cannot contain slashes: ${invalidId}`,\n\t\t);\n\t});\n\n\tit(\"createChannel with default guid\", async () => {\n\t\tconst dataStoreRuntime = createRuntime(dataStoreContext, sharedObjectRegistry);\n\t\tconst type = \"SomeType\";\n\t\tconst channel = dataStoreRuntime.createChannel(undefined, type);\n\t\tassert(channel !== undefined, \"channel should be created\");\n\t\tassert(type === channel.attributes.type, \"type should be as expected\");\n\t});\n\n\tit(\"createChannel and then attach to dataStore runtime\", async () => {\n\t\tconst dataStoreRuntime = createRuntime(dataStoreContext, sharedObjectRegistry);\n\t\tconst type = \"SomeType\";\n\t\tconst channel = {\n\t\t\tid: \"id\",\n\t\t\ttype,\n\t\t\tattributes: { type, snapshotFormatVersion: \"0\" },\n\t\t\tclientDetails: {},\n\t\t} as any as IChannel;\n\t\tdataStoreRuntime.addChannel(channel);\n\t\tconst channel1 = await dataStoreRuntime.getChannel(channel.id);\n\t\tassert.deepStrictEqual(channel, channel1, \"both channel should match\");\n\t});\n\n\tit(\"createChannel rejects ids with slashes when channel is created first\", async () => {\n\t\tconst dataStoreRuntime = createRuntime(dataStoreContext, sharedObjectRegistry);\n\t\tconst invalidId = \"beforeSlash/afterSlash\";\n\t\tconst type = \"SomeType\";\n\t\tconst channel = {\n\t\t\tid: invalidId,\n\t\t\ttype,\n\t\t\tattributes: { type, snapshotFormatVersion: \"0\" },\n\t\t\tclientDetails: {},\n\t\t} as any as IChannel;\n\t\tconst codeBlock = () => dataStoreRuntime.addChannel(channel);\n\t\tassert.throws(\n\t\t\tcodeBlock,\n\t\t\t(e: IErrorBase) =>\n\t\t\t\te.errorType === ContainerErrorTypes.usageError &&\n\t\t\t\te.message === `Id cannot contain slashes: ${invalidId}`,\n\t\t);\n\t});\n\n\tit(\"entryPoint is initialized correctly\", async () => {\n\t\tconst myObj: FluidObject = { fakeProp: \"fakeValue\" };\n\t\tconst dataStoreRuntime = createRuntime(\n\t\t\tdataStoreContext,\n\t\t\tsharedObjectRegistry,\n\t\t\tasync (dsRuntime) => myObj,\n\t\t);\n\t\tassert(\n\t\t\t(await dataStoreRuntime.entryPoint?.get()) === myObj,\n\t\t\t\"entryPoint was not initialized\",\n\t\t);\n\t});\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localChannelContext.spec.js","sourceRoot":"","sources":["../../src/test/localChannelContext.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"localChannelContext.spec.js","sourceRoot":"","sources":["../../src/test/localChannelContext.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,QAAQ,CAAC;AAI1C,OAAO,EACN,yBAAyB,EACzB,sBAAsB,GACtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAyB,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAE/F,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IAC1C,IAAI,gBAA2C,CAAC;IAChD,IAAI,oBAA2C,CAAC;IAChD,MAAM,WAAW,GAAG,CAAC,OAA+B,EAAE,QAA+B,EAAE,EAAE,CACxF,IAAI,qBAAqB,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC/E,MAAM,EAAE,SAAS;KACjB,CAAC,CAAC,CAAC;IAEL,UAAU,CAAC,GAAG,EAAE;QACf,gBAAgB,GAAG,IAAI,yBAAyB,EAAE,CAAC;QACnD,oBAAoB,GAAG;YACtB,GAAG,CAAC,IAAY;gBACf,OAAO;oBACN,IAAI;oBACJ,UAAU,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,GAAG,EAAE;oBAChD,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAoB;oBACrC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAqB,CAAC;iBACxD,CAAC;YACH,CAAC;SACD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC/D,MAAM,SAAS,GAAG,wBAAwB,CAAC;QAC3C,MAAM,gBAAgB,GAAG,WAAW,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,GAAG,EAAE,CACtB,IAAI,mBAAmB,CACtB,EAAE,EAAE,EAAE,SAAS,EAAqB,EACpC,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,CAAC,OAAO,EACxB,gBAAgB,CAAC,MAAM,EACvB,GAAG,EAAE,GAAE,CAAC,EACR,CAAC,CAAS,EAAE,EAAE,GAAE,CAAC,EACjB,CAAC,CAAC,EAAE,EAAE,GAAE,CAAC,CACT,CAAC;QACH,MAAM,CAAC,MAAM,CACZ,SAAS,EACT,CAAC,CAAQ,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAC,EAAE,2CAA2C,CAAC,EACpF,mCAAmC,CACnC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACzE,MAAM,SAAS,GAAG,wBAAwB,CAAC;QAC3C,MAAM,gBAAgB,GAAG,WAAW,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,GAAG,EAAE,CACtB,IAAI,6BAA6B,CAChC,SAAS,EACT,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,CAAC,OAAO,EACxB,gBAAgB,CAAC,MAAM,EACvB,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,GAAE,CAAC,EAChC,CAAC,CAAS,EAAE,EAAE,GAAE,CAAC,EACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAE,CAAC,EACZ,IAAgC,CAChC,CAAC;QACH,MAAM,CAAC,MAAM,CACZ,SAAS,EACT,CAAC,CAAQ,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAC,EAAE,2CAA2C,CAAC,EACpF,mCAAmC,CACnC,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\nimport { IChannel } from \"@fluidframework/datastore-definitions\";\nimport { ISnapshotTree } from \"@fluidframework/protocol-definitions\";\nimport { IFluidDataStoreContext } from \"@fluidframework/runtime-definitions\";\nimport {\n\tMockFluidDataStoreContext,\n\tvalidateAssertionError,\n} from \"@fluidframework/test-runtime-utils\";\nimport { FluidDataStoreRuntime, ISharedObjectRegistry } from \"../dataStoreRuntime.js\";\nimport { LocalChannelContext, RehydratedLocalChannelContext } from \"../localChannelContext.js\";\n\ndescribe(\"LocalChannelContext Tests\", () => {\n\tlet dataStoreContext: MockFluidDataStoreContext;\n\tlet sharedObjectRegistry: ISharedObjectRegistry;\n\tconst loadRuntime = (context: IFluidDataStoreContext, registry: ISharedObjectRegistry) =>\n\t\tnew FluidDataStoreRuntime(context, registry, /* existing */ false, async () => ({\n\t\t\tmyProp: \"myValue\",\n\t\t}));\n\n\tbeforeEach(() => {\n\t\tdataStoreContext = new MockFluidDataStoreContext();\n\t\tsharedObjectRegistry = {\n\t\t\tget(type: string) {\n\t\t\t\treturn {\n\t\t\t\t\ttype,\n\t\t\t\t\tattributes: { type, snapshotFormatVersion: \"0\" },\n\t\t\t\t\tcreate: () => ({}) as any as IChannel,\n\t\t\t\t\tload: async () => Promise.resolve({} as any as IChannel),\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t});\n\n\tit(\"LocalChannelContext rejects ids with forward slashes\", () => {\n\t\tconst invalidId = \"beforeSlash/afterSlash\";\n\t\tconst dataStoreRuntime = loadRuntime(dataStoreContext, sharedObjectRegistry);\n\t\tconst codeBlock = () =>\n\t\t\tnew LocalChannelContext(\n\t\t\t\t{ id: invalidId } as any as IChannel,\n\t\t\t\tdataStoreRuntime,\n\t\t\t\tdataStoreContext,\n\t\t\t\tdataStoreContext.storage,\n\t\t\t\tdataStoreContext.logger,\n\t\t\t\t() => {},\n\t\t\t\t(s: string) => {},\n\t\t\t\t(s) => {},\n\t\t\t);\n\t\tassert.throws(\n\t\t\tcodeBlock,\n\t\t\t(e: Error) => validateAssertionError(e, \"Channel context ID cannot contain slashes\"),\n\t\t\t\"Expected exception was not thrown\",\n\t\t);\n\t});\n\n\tit(\"RehydratedLocalChannelContext rejects ids with forward slashes\", () => {\n\t\tconst invalidId = \"beforeSlash/afterSlash\";\n\t\tconst dataStoreRuntime = loadRuntime(dataStoreContext, sharedObjectRegistry);\n\t\tconst codeBlock = () =>\n\t\t\tnew RehydratedLocalChannelContext(\n\t\t\t\tinvalidId,\n\t\t\t\tsharedObjectRegistry,\n\t\t\t\tdataStoreRuntime,\n\t\t\t\tdataStoreContext,\n\t\t\t\tdataStoreContext.storage,\n\t\t\t\tdataStoreContext.logger,\n\t\t\t\t(content, localOpMetadata) => {},\n\t\t\t\t(s: string) => {},\n\t\t\t\t(s, o) => {},\n\t\t\t\tnull as unknown as ISnapshotTree,\n\t\t\t);\n\t\tassert.throws(\n\t\t\tcodeBlock,\n\t\t\t(e: Error) => validateAssertionError(e, \"Channel context ID cannot contain slashes\"),\n\t\t\t\"Expected exception was not thrown\",\n\t\t);\n\t});\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localChannelStorageService.spec.js","sourceRoot":"","sources":["../../src/test/localChannelStorageService.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,
|
|
1
|
+
{"version":3,"file":"localChannelStorageService.spec.js","sourceRoot":"","sources":["../../src/test/localChannelStorageService.spec.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 { strict as assert } from \"assert\";\nimport { stringToBuffer } from \"@fluid-internal/client-utils\";\nimport { FileMode, ITree, TreeEntry } from \"@fluidframework/protocol-definitions\";\nimport { LocalChannelStorageService } from \"../localChannelStorageService.js\";\n\ndescribe(\"LocalChannelStorageService\", () => {\n\tit(\"Empty Tree\", async () => {\n\t\tconst tree: ITree = {\n\t\t\tentries: [],\n\t\t};\n\n\t\tconst ss = new LocalChannelStorageService(tree);\n\n\t\tassert.strictEqual(await ss.contains(\"/\"), false);\n\t\tassert.deepStrictEqual(await ss.list(\"\"), []);\n\t\ttry {\n\t\t\tawait ss.readBlob(\"test\");\n\t\t} catch (error: any) {\n\t\t\tassert.strictEqual(error.message, \"Blob Not Found\");\n\t\t}\n\t});\n\n\tit(\"Top Level Blob\", async () => {\n\t\tconst tree: ITree = {\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tmode: FileMode.File,\n\t\t\t\t\tpath: \"foo\",\n\t\t\t\t\ttype: TreeEntry.Blob,\n\t\t\t\t\tvalue: {\n\t\t\t\t\t\tencoding: \"utf-8\",\n\t\t\t\t\t\tcontents: \"bar\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tconst ss = new LocalChannelStorageService(tree);\n\n\t\tassert.strictEqual(await ss.contains(\"foo\"), true);\n\t\tassert.deepStrictEqual(await ss.list(\"\"), [\"foo\"]);\n\t\tassert.deepStrictEqual(await ss.readBlob(\"foo\"), stringToBuffer(\"bar\", \"utf8\"));\n\t});\n\n\tit(\"Nested Blob\", async () => {\n\t\tconst tree: ITree = {\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tmode: FileMode.File,\n\t\t\t\t\tpath: \"nested\",\n\t\t\t\t\ttype: TreeEntry.Tree,\n\t\t\t\t\tvalue: {\n\t\t\t\t\t\tentries: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmode: FileMode.File,\n\t\t\t\t\t\t\t\tpath: \"foo\",\n\t\t\t\t\t\t\t\ttype: TreeEntry.Blob,\n\t\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\t\tencoding: \"utf-8\",\n\t\t\t\t\t\t\t\t\tcontents: \"bar\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t\tconst ss = new LocalChannelStorageService(tree);\n\n\t\tassert.strictEqual(await ss.contains(\"nested/foo\"), true);\n\t\tassert.deepStrictEqual(await ss.list(\"nested/\"), [\"foo\"]);\n\t\tassert.deepStrictEqual(await ss.readBlob(\"nested/foo\"), stringToBuffer(\"bar\", \"utf8\"));\n\t});\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remoteChannelContext.spec.js","sourceRoot":"","sources":["../../src/test/remoteChannelContext.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"remoteChannelContext.spec.js","sourceRoot":"","sources":["../../src/test/remoteChannelContext.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,QAAQ,CAAC;AAO1C,OAAO,EACN,yBAAyB,EACzB,sBAAsB,GACtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAyB,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC3C,IAAI,gBAA2C,CAAC;IAChD,IAAI,oBAA2C,CAAC;IAChD,MAAM,WAAW,GAAG,CAAC,OAA+B,EAAE,QAA+B,EAAE,EAAE,CACxF,IAAI,qBAAqB,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC/E,MAAM,EAAE,SAAS;KACjB,CAAC,CAAC,CAAC;IAEL,UAAU,CAAC,GAAG,EAAE;QACf,gBAAgB,GAAG,IAAI,yBAAyB,EAAE,CAAC;QACnD,6GAA6G;QAC7G,6BAA6B;QAC7B,gBAAgB,CAAC,gBAAgB,GAAG,EAAsC,CAAC;QAC3E,oBAAoB,GAAG;YACtB,GAAG,CAAC,IAAY;gBACf,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACpC,CAAC;SACD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC3C,MAAM,SAAS,GAAG,wBAAwB,CAAC;QAC3C,MAAM,gBAAgB,GAAG,WAAW,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,GAAG,EAAE,CACtB,IAAI,oBAAoB,CACvB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,CAAC,OAAO,EACxB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,GAAE,CAAC,EACd,CAAC,CAAS,EAAE,EAAE,GAAE,CAAC,EACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAE,CAAC,EACZ,SAAS,EACT,SAAqC,EACrC,oBAAoB,EACpB,SAAS,EACT,SAAmD,EACnD,uBAAuB,CACvB,CAAC;QACH,MAAM,CAAC,MAAM,CACZ,SAAS,EACT,CAAC,CAAQ,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAC,EAAE,2CAA2C,CAAC,EACpF,mCAAmC,CACnC,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\nimport { ISnapshotTree } from \"@fluidframework/protocol-definitions\";\nimport {\n\tCreateChildSummarizerNodeFn,\n\tIContainerRuntimeBase,\n\tIFluidDataStoreContext,\n} from \"@fluidframework/runtime-definitions\";\nimport {\n\tMockFluidDataStoreContext,\n\tvalidateAssertionError,\n} from \"@fluidframework/test-runtime-utils\";\nimport { FluidDataStoreRuntime, ISharedObjectRegistry } from \"../dataStoreRuntime.js\";\nimport { RemoteChannelContext } from \"../remoteChannelContext.js\";\n\ndescribe(\"RemoteChannelContext Tests\", () => {\n\tlet dataStoreContext: MockFluidDataStoreContext;\n\tlet sharedObjectRegistry: ISharedObjectRegistry;\n\tconst loadRuntime = (context: IFluidDataStoreContext, registry: ISharedObjectRegistry) =>\n\t\tnew FluidDataStoreRuntime(context, registry, /* existing */ false, async () => ({\n\t\t\tmyProp: \"myValue\",\n\t\t}));\n\n\tbeforeEach(() => {\n\t\tdataStoreContext = new MockFluidDataStoreContext();\n\t\t// back-compat 0.38 - DataStoreRuntime looks in container runtime for certain properties that are unavailable\n\t\t// in the data store context.\n\t\tdataStoreContext.containerRuntime = {} as unknown as IContainerRuntimeBase;\n\t\tsharedObjectRegistry = {\n\t\t\tget(name: string) {\n\t\t\t\tthrow new Error(\"Not implemented\");\n\t\t\t},\n\t\t};\n\t});\n\n\tit(\"rejects ids with forward slashes\", () => {\n\t\tconst invalidId = \"beforeSlash/afterSlash\";\n\t\tconst dataStoreRuntime = loadRuntime(dataStoreContext, sharedObjectRegistry);\n\t\tconst codeBlock = () =>\n\t\t\tnew RemoteChannelContext(\n\t\t\t\tdataStoreRuntime,\n\t\t\t\tdataStoreContext,\n\t\t\t\tdataStoreContext.storage,\n\t\t\t\t(c, lom) => {},\n\t\t\t\t(s: string) => {},\n\t\t\t\t(s, o) => {},\n\t\t\t\tinvalidId,\n\t\t\t\tundefined as unknown as ISnapshotTree,\n\t\t\t\tsharedObjectRegistry,\n\t\t\t\tundefined,\n\t\t\t\tundefined as unknown as CreateChildSummarizerNodeFn,\n\t\t\t\t\"SomeAttachMessageType\",\n\t\t\t);\n\t\tassert.throws(\n\t\t\tcodeBlock,\n\t\t\t(e: Error) => validateAssertionError(e, \"Channel context ID cannot contain slashes\"),\n\t\t\t\"Expected exception was not thrown\",\n\t\t);\n\t});\n});\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluidframework/datastore",
|
|
3
|
-
"version": "2.0.0-dev-rc.
|
|
3
|
+
"version": "2.0.0-dev-rc.3.0.0.250606",
|
|
4
4
|
"description": "Fluid data store implementation",
|
|
5
5
|
"homepage": "https://fluidframework.com",
|
|
6
6
|
"repository": {
|
|
@@ -77,30 +77,31 @@
|
|
|
77
77
|
"temp-directory": "nyc/.nyc_output"
|
|
78
78
|
},
|
|
79
79
|
"dependencies": {
|
|
80
|
-
"@fluid-internal/client-utils": "2.0.0-dev-rc.
|
|
81
|
-
"@fluidframework/container-definitions": "2.0.0-dev-rc.
|
|
82
|
-
"@fluidframework/core-interfaces": "2.0.0-dev-rc.
|
|
83
|
-
"@fluidframework/core-utils": "2.0.0-dev-rc.
|
|
84
|
-
"@fluidframework/datastore-definitions": "2.0.0-dev-rc.
|
|
85
|
-
"@fluidframework/driver-definitions": "2.0.0-dev-rc.
|
|
86
|
-
"@fluidframework/driver-utils": "2.0.0-dev-rc.
|
|
87
|
-
"@fluidframework/id-compressor": "2.0.0-dev-rc.
|
|
80
|
+
"@fluid-internal/client-utils": "2.0.0-dev-rc.3.0.0.250606",
|
|
81
|
+
"@fluidframework/container-definitions": "2.0.0-dev-rc.3.0.0.250606",
|
|
82
|
+
"@fluidframework/core-interfaces": "2.0.0-dev-rc.3.0.0.250606",
|
|
83
|
+
"@fluidframework/core-utils": "2.0.0-dev-rc.3.0.0.250606",
|
|
84
|
+
"@fluidframework/datastore-definitions": "2.0.0-dev-rc.3.0.0.250606",
|
|
85
|
+
"@fluidframework/driver-definitions": "2.0.0-dev-rc.3.0.0.250606",
|
|
86
|
+
"@fluidframework/driver-utils": "2.0.0-dev-rc.3.0.0.250606",
|
|
87
|
+
"@fluidframework/id-compressor": "2.0.0-dev-rc.3.0.0.250606",
|
|
88
88
|
"@fluidframework/protocol-definitions": "^3.2.0",
|
|
89
|
-
"@fluidframework/runtime-definitions": "2.0.0-dev-rc.
|
|
90
|
-
"@fluidframework/runtime-utils": "2.0.0-dev-rc.
|
|
91
|
-
"@fluidframework/telemetry-utils": "2.0.0-dev-rc.
|
|
89
|
+
"@fluidframework/runtime-definitions": "2.0.0-dev-rc.3.0.0.250606",
|
|
90
|
+
"@fluidframework/runtime-utils": "2.0.0-dev-rc.3.0.0.250606",
|
|
91
|
+
"@fluidframework/telemetry-utils": "2.0.0-dev-rc.3.0.0.250606",
|
|
92
92
|
"lodash": "^4.17.21",
|
|
93
93
|
"uuid": "^9.0.0"
|
|
94
94
|
},
|
|
95
95
|
"devDependencies": {
|
|
96
96
|
"@arethetypeswrong/cli": "^0.13.3",
|
|
97
|
-
"@
|
|
97
|
+
"@biomejs/biome": "^1.6.2",
|
|
98
|
+
"@fluid-internal/mocha-test-setup": "2.0.0-dev-rc.3.0.0.250606",
|
|
98
99
|
"@fluid-tools/build-cli": "^0.34.0",
|
|
99
100
|
"@fluidframework/build-common": "^2.0.3",
|
|
100
101
|
"@fluidframework/build-tools": "^0.34.0",
|
|
101
102
|
"@fluidframework/datastore-previous": "npm:@fluidframework/datastore@2.0.0-internal.8.0.0",
|
|
102
103
|
"@fluidframework/eslint-config-fluid": "^5.1.0",
|
|
103
|
-
"@fluidframework/test-runtime-utils": "2.0.0-dev-rc.
|
|
104
|
+
"@fluidframework/test-runtime-utils": "2.0.0-dev-rc.3.0.0.250606",
|
|
104
105
|
"@microsoft/api-extractor": "^7.42.3",
|
|
105
106
|
"@types/lodash": "^4.14.118",
|
|
106
107
|
"@types/mocha": "^9.1.1",
|
|
@@ -150,16 +151,18 @@
|
|
|
150
151
|
"build:test:cjs": "fluid-tsc commonjs --project ./src/test/tsconfig.cjs.json",
|
|
151
152
|
"build:test:esm": "tsc --project ./src/test/tsconfig.json",
|
|
152
153
|
"check:are-the-types-wrong": "attw --pack . --entrypoints .",
|
|
154
|
+
"check:biome": "biome check .",
|
|
155
|
+
"check:prettier": "prettier --check . --cache --ignore-path ../../../.prettierignore",
|
|
153
156
|
"check:release-tags": "api-extractor run --local --config ./api-extractor-lint.json",
|
|
154
157
|
"ci:build:docs": "api-extractor run",
|
|
155
158
|
"clean": "rimraf --glob dist lib \"**/*.tsbuildinfo\" \"**/*.build.log\" _api-extractor-temp nyc",
|
|
156
159
|
"eslint": "eslint --format stylish src",
|
|
157
160
|
"eslint:fix": "eslint --format stylish src --fix --fix-type problem,suggestion,layout",
|
|
158
|
-
"format": "
|
|
159
|
-
"
|
|
160
|
-
"
|
|
161
|
-
"
|
|
162
|
-
"
|
|
161
|
+
"format": "fluid-build --task format .",
|
|
162
|
+
"format:biome": "biome check --apply .",
|
|
163
|
+
"format:prettier": "prettier --write . --cache --ignore-path ../../../.prettierignore",
|
|
164
|
+
"lint": "fluid-build . --task lint",
|
|
165
|
+
"lint:fix": "fluid-build . --task eslint:fix --task format",
|
|
163
166
|
"test": "npm run test:mocha",
|
|
164
167
|
"test:coverage": "c8 npm test",
|
|
165
168
|
"test:mocha": "npm run test:mocha:esm && echo skipping cjs to avoid overhead - npm run test:mocha:cjs",
|
package/src/channelContext.ts
CHANGED
|
@@ -3,11 +3,6 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
7
|
-
DataCorruptionError,
|
|
8
|
-
ITelemetryLoggerExt,
|
|
9
|
-
tagCodeArtifacts,
|
|
10
|
-
} from "@fluidframework/telemetry-utils";
|
|
11
6
|
import { IFluidHandle } from "@fluidframework/core-interfaces";
|
|
12
7
|
import {
|
|
13
8
|
IChannel,
|
|
@@ -16,19 +11,24 @@ import {
|
|
|
16
11
|
IFluidDataStoreRuntime,
|
|
17
12
|
} from "@fluidframework/datastore-definitions";
|
|
18
13
|
import { IDocumentStorageService } from "@fluidframework/driver-definitions";
|
|
14
|
+
import { readAndParse } from "@fluidframework/driver-utils";
|
|
19
15
|
import { ISequencedDocumentMessage, ISnapshotTree } from "@fluidframework/protocol-definitions";
|
|
20
16
|
import {
|
|
21
|
-
IGarbageCollectionData,
|
|
22
17
|
IExperimentalIncrementalSummaryContext,
|
|
18
|
+
IFluidDataStoreContext,
|
|
19
|
+
IGarbageCollectionData,
|
|
23
20
|
ISummarizeResult,
|
|
24
21
|
ISummaryTreeWithStats,
|
|
25
22
|
ITelemetryContext,
|
|
26
|
-
IFluidDataStoreContext,
|
|
27
23
|
} from "@fluidframework/runtime-definitions";
|
|
28
24
|
import { addBlobToSummary } from "@fluidframework/runtime-utils";
|
|
29
|
-
import {
|
|
30
|
-
|
|
25
|
+
import {
|
|
26
|
+
DataCorruptionError,
|
|
27
|
+
ITelemetryLoggerExt,
|
|
28
|
+
tagCodeArtifacts,
|
|
29
|
+
} from "@fluidframework/telemetry-utils";
|
|
31
30
|
import { ChannelDeltaConnection } from "./channelDeltaConnection.js";
|
|
31
|
+
import { ChannelStorageService } from "./channelStorageService.js";
|
|
32
32
|
import { ISharedObjectRegistry } from "./dataStoreRuntime.js";
|
|
33
33
|
|
|
34
34
|
export const attributesBlobKey = ".attributes";
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import { IFluidHandle } from "@fluidframework/core-interfaces";
|
|
6
7
|
import { assert } from "@fluidframework/core-utils";
|
|
7
|
-
import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
|
|
8
8
|
import { IDeltaConnection, IDeltaHandler } from "@fluidframework/datastore-definitions";
|
|
9
|
+
import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
|
|
9
10
|
import { DataProcessingError } from "@fluidframework/telemetry-utils";
|
|
10
|
-
import { IFluidHandle } from "@fluidframework/core-interfaces";
|
|
11
11
|
|
|
12
12
|
const stashedOpMetadataMark = Symbol();
|
|
13
13
|
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import { IChannelStorageService } from "@fluidframework/datastore-definitions";
|
|
6
7
|
import { IDocumentStorageService } from "@fluidframework/driver-definitions";
|
|
7
8
|
import { ISnapshotTree } from "@fluidframework/protocol-definitions";
|
|
8
|
-
import { IChannelStorageService } from "@fluidframework/datastore-definitions";
|
|
9
9
|
import { getNormalizedObjectStoragePathParts } from "@fluidframework/runtime-utils";
|
|
10
10
|
import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
|
|
11
11
|
|