@fluidframework/test-runtime-utils 2.74.0 → 2.80.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/lib/mocks.d.ts CHANGED
@@ -32,7 +32,7 @@ export declare class MockDeltaConnection implements IDeltaConnection {
32
32
  dirty(): void;
33
33
  setConnectionState(connected: boolean): void;
34
34
  processMessages(messageCollection: IRuntimeMessageCollection): void;
35
- reSubmit(content: any, localOpMetadata: unknown, squash?: boolean): void;
35
+ reSubmit(content: any, localOpMetadata: unknown, squash: boolean): void;
36
36
  applyStashedOp(content: any): unknown;
37
37
  rollback?(message: any, localOpMetadata: unknown): void;
38
38
  }
@@ -258,6 +258,7 @@ export declare class MockAudience extends TypedEventEmitter<IAudienceEvents> imp
258
258
  /**
259
259
  * Mock implementation of IRuntime for testing that does nothing
260
260
  * @legacy @beta
261
+ * @sealed
261
262
  */
262
263
  export declare class MockFluidDataStoreRuntime extends EventEmitter implements IFluidDataStoreRuntime, IFluidDataStoreChannel, IFluidHandleContext {
263
264
  constructor(overrides?: {
@@ -350,7 +351,7 @@ export declare class MockFluidDataStoreRuntime extends EventEmitter implements I
350
351
  setAttachState(attachState: AttachState.Attaching | AttachState.Attached): void;
351
352
  waitAttached(): Promise<void>;
352
353
  requestDataStore(request: IRequest): Promise<IResponse>;
353
- reSubmit(content: any, localOpMetadata: unknown, squash?: boolean): void;
354
+ reSubmit(content: any, localOpMetadata: unknown, squash: boolean): void;
354
355
  applyStashedOp(content: any): Promise<unknown>;
355
356
  rollback?(message: any, localOpMetadata: unknown): void;
356
357
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../src/mocks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../src/mocks.ts"],"names":[],"mappings":"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"}
package/lib/mocks.js CHANGED
@@ -264,7 +264,7 @@ export class MockContainerRuntime extends TypedEventEmitter {
264
264
  this.submit(pendingMessage.content, pendingMessage.localOpMetadata);
265
265
  }
266
266
  else {
267
- this.dataStoreRuntime.reSubmit(pendingMessage.content, pendingMessage.localOpMetadata);
267
+ this.dataStoreRuntime.reSubmit(pendingMessage.content, pendingMessage.localOpMetadata, false);
268
268
  }
269
269
  });
270
270
  }
@@ -605,6 +605,7 @@ const attachStatesToComparableNumbers = {
605
605
  /**
606
606
  * Mock implementation of IRuntime for testing that does nothing
607
607
  * @legacy @beta
608
+ * @sealed
608
609
  */
609
610
  export class MockFluidDataStoreRuntime extends EventEmitter {
610
611
  constructor(overrides) {
package/lib/mocks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mocks.js","sourceRoot":"","sources":["../src/mocks.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 { EventEmitter, TypedEventEmitter, stringToBuffer } from \"@fluid-internal/client-utils\";\nimport {\n\tAttachState,\n\tIAudience,\n\tIAudienceEvents,\n\tISelf,\n} from \"@fluidframework/container-definitions\";\nimport { ILoader, IAudienceOwner } from \"@fluidframework/container-definitions/internal\";\nimport type { IContainerRuntimeEvents } from \"@fluidframework/container-runtime-definitions/internal\";\nimport {\n\tFluidObject,\n\tIFluidHandle,\n\tIRequest,\n\tIResponse,\n\ttype ITelemetryBaseLogger,\n} from \"@fluidframework/core-interfaces\";\nimport {\n\tIFluidHandleContext,\n\ttype IFluidHandleInternal,\n} from \"@fluidframework/core-interfaces/internal\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport {\n\tIChannelServices,\n\tIChannelStorageService,\n\tIDeltaConnection,\n\tIDeltaHandler,\n\tIChannel,\n\tIFluidDataStoreRuntime,\n\tIChannelFactory,\n\ttype IDeltaManagerErased,\n} from \"@fluidframework/datastore-definitions/internal\";\nimport type { IClient } from \"@fluidframework/driver-definitions\";\nimport {\n\tIQuorumClients,\n\tISequencedClient,\n\tISummaryTree,\n\tSummaryType,\n} from \"@fluidframework/driver-definitions\";\nimport {\n\tITreeEntry,\n\tMessageType,\n\tISequencedDocumentMessage,\n\ttype ISnapshotTree,\n} from \"@fluidframework/driver-definitions/internal\";\nimport type { IIdCompressor } from \"@fluidframework/id-compressor\";\nimport type {\n\tIIdCompressorCore,\n\tIdCreationRange,\n} from \"@fluidframework/id-compressor/internal\";\nimport {\n\tISummaryTreeWithStats,\n\tIGarbageCollectionData,\n\tFlushMode,\n\tIFluidDataStoreChannel,\n\tVisibilityState,\n\ttype ITelemetryContext,\n\ttype IRuntimeMessageCollection,\n\ttype IRuntimeMessagesContent,\n\ttype MinimumVersionForCollab,\n} from \"@fluidframework/runtime-definitions/internal\";\nimport {\n\tgetNormalizedObjectStoragePathParts,\n\tmergeStats,\n\ttoDeltaManagerErased,\n\ttoFluidHandleInternal,\n} from \"@fluidframework/runtime-utils/internal\";\nimport { createChildLogger } from \"@fluidframework/telemetry-utils/internal\";\nimport { v4 as uuid } from \"uuid\";\n\nimport { deepFreeze } from \"./deepFreeze.js\";\nimport { MockDeltaManager } from \"./mockDeltas.js\";\nimport { MockHandle } from \"./mockHandle.js\";\n\n/**\n * Mock implementation of IDeltaConnection for testing\n * @legacy @beta\n */\nexport class MockDeltaConnection implements IDeltaConnection {\n\tpublic get connected(): boolean {\n\t\treturn this._connected;\n\t}\n\n\tprivate _connected = true;\n\tpublic handler: IDeltaHandler | undefined;\n\n\tconstructor(\n\t\tprivate readonly submitFn: (messageContent: any, localOpMetadata: unknown) => number,\n\t\tprivate readonly dirtyFn: () => void,\n\t) {}\n\n\tpublic attach(handler: IDeltaHandler): void {\n\t\tthis.handler = handler;\n\t\thandler.setConnectionState(this.connected);\n\t}\n\n\tpublic submit(messageContent: any, localOpMetadata: unknown): number {\n\t\treturn this.submitFn(messageContent, localOpMetadata);\n\t}\n\n\tpublic dirty(): void {\n\t\tthis.dirtyFn();\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\tthis.handler?.processMessages?.(messageCollection);\n\t}\n\n\tpublic reSubmit(content: any, localOpMetadata: unknown, squash?: boolean): void {\n\t\tthis.handler?.reSubmit(content, localOpMetadata, squash);\n\t}\n\n\tpublic applyStashedOp(content: any): unknown {\n\t\treturn this.handler?.applyStashedOp(content);\n\t}\n\n\tpublic rollback?(message: any, localOpMetadata: unknown): void {\n\t\tthis.handler?.rollback?.(message, localOpMetadata);\n\t}\n}\n\n// Represents the structure of a pending message stored by the MockContainerRuntime.\n/**\n * @legacy @beta\n */\nexport interface IMockContainerRuntimePendingMessage {\n\tcontent: any;\n\treferenceSequenceNumber: number;\n\tclientSequenceNumber: number;\n\tlocalOpMetadata: unknown;\n}\n\nexport interface IMockContainerRuntimeIdAllocationMessage {\n\ttype: \"idAllocation\";\n\tcontents: IdCreationRange;\n}\n\n/**\n * Options for the container runtime mock.\n * @legacy @beta\n */\nexport interface IMockContainerRuntimeOptions {\n\t/**\n\t * Configures the flush mode for the runtime. In Immediate flush mode the runtime will immediately\n\t * send all operations to the driver layer, while in TurnBased the operations will be buffered\n\t * and then sent them as a single batch when `flush()` is called on the runtime.\n\t *\n\t * By default, flush mode is Immediate.\n\t */\n\treadonly flushMode?: FlushMode;\n\t/**\n\t * If configured, it will simulate group batching by forcing all ops within a batch to have\n\t * the same sequence number.\n\t *\n\t * By default, the value is `false`\n\t */\n\treadonly enableGroupedBatching?: boolean;\n}\n\nconst defaultMockContainerRuntimeOptions: Required<IMockContainerRuntimeOptions> = {\n\tflushMode: FlushMode.Immediate,\n\tenableGroupedBatching: false,\n};\n\nconst makeContainerRuntimeOptions = (\n\tmockContainerRuntimeOptions: IMockContainerRuntimeOptions,\n): Required<IMockContainerRuntimeOptions> => ({\n\t...defaultMockContainerRuntimeOptions,\n\t...mockContainerRuntimeOptions,\n});\n\n/**\n * @legacy @beta\n */\nexport interface IInternalMockRuntimeMessage {\n\tcontent: any;\n\tlocalOpMetadata?: unknown;\n\treferenceSequenceNumber?: number;\n}\n\n/**\n * Mock implementation of IContainerRuntime for testing basic submitting and processing of messages.\n * If test specific logic is required, extend this class and add the logic there. For an example, take a look\n * at MockContainerRuntimeForReconnection.\n * @legacy @beta\n */\nexport class MockContainerRuntime extends TypedEventEmitter<IContainerRuntimeEvents> {\n\tpublic clientId: string;\n\tpublic readonly deltaManager: MockDeltaManager;\n\t/**\n\t * @deprecated use the associated datastore to create the delta connection\n\t */\n\tprotected readonly deltaConnections: MockDeltaConnection[] = [];\n\tprotected readonly pendingMessages: IMockContainerRuntimePendingMessage[] = [];\n\tprotected readonly outbox: IInternalMockRuntimeMessage[] = [];\n\tprivate readonly idAllocationOutbox: IInternalMockRuntimeMessage[] = [];\n\t/**\n\t * The runtime options this instance is using. See {@link IMockContainerRuntimeOptions}.\n\t */\n\tprotected readonly runtimeOptions: Required<IMockContainerRuntimeOptions>;\n\n\tconstructor(\n\t\tprotected readonly dataStoreRuntime: MockFluidDataStoreRuntime,\n\t\tprotected readonly factory: MockContainerRuntimeFactory,\n\t\tmockContainerRuntimeOptions: IMockContainerRuntimeOptions = defaultMockContainerRuntimeOptions,\n\t\tprotected readonly overrides?: { minimumSequenceNumber?: number | undefined },\n\t) {\n\t\tsuper();\n\t\tthis.deltaManager = new MockDeltaManager(() => this.clientId);\n\t\tthis.deltaManager.inbound.on(\"push\", (message: ISequencedDocumentMessage) => {\n\t\t\tthis.factory.pushMessage(message);\n\t\t});\n\n\t\tconst msn = overrides?.minimumSequenceNumber;\n\t\tif (msn !== undefined) {\n\t\t\tthis.deltaManager.lastSequenceNumber = msn;\n\t\t\tthis.deltaManager.minimumSequenceNumber = msn;\n\t\t}\n\t\t// Set FluidDataStoreRuntime's deltaManager to ours so that they are in sync.\n\t\tthis.dataStoreRuntime.deltaManagerInternal = this.deltaManager;\n\t\tthis.dataStoreRuntime.quorum = factory.quorum;\n\t\tthis.dataStoreRuntime.containerRuntime = this;\n\t\t// FluidDataStoreRuntime already creates a clientId, reuse that so they are in sync.\n\t\tthis.clientId = this.dataStoreRuntime.clientId ?? uuid();\n\t\tfactory.quorum.addMember(this.clientId, {});\n\t\tthis.runtimeOptions = makeContainerRuntimeOptions(mockContainerRuntimeOptions);\n\t\tassert(\n\t\t\tthis.runtimeOptions.flushMode !== FlushMode.Immediate ||\n\t\t\t\t!this.runtimeOptions.enableGroupedBatching,\n\t\t\t\"Grouped batching is not compatible with FlushMode.Immediate\",\n\t\t);\n\t}\n\n\t/**\n\t * @deprecated use the associated datastore to create the delta connection\n\t */\n\tpublic createDeltaConnection(): MockDeltaConnection {\n\t\tconst deltaConnection = this.dataStoreRuntime.createDeltaConnection();\n\t\tthis.deltaConnections.push(deltaConnection);\n\t\treturn deltaConnection;\n\t}\n\n\tpublic finalizeIdRange(range: IdCreationRange): void {\n\t\tassert(\n\t\t\tthis.dataStoreRuntime.idCompressor !== undefined,\n\t\t\t\"Shouldn't try to finalize IdRanges without an IdCompressor\",\n\t\t);\n\t\tthis.dataStoreRuntime.idCompressor.finalizeCreationRange(range);\n\t}\n\n\t// This enables manual control over flush mode, allowing operations like rollback to be executed in a controlled environment.\n\t#manualFlushCalls: number = 0;\n\n\tpublic async runWithManualFlush(act: () => void | Promise<void>): Promise<void> {\n\t\tthis.#manualFlushCalls++;\n\t\ttry {\n\t\t\tawait act();\n\t\t} finally {\n\t\t\tthis.#manualFlushCalls--;\n\t\t}\n\t}\n\n\tpublic submit(messageContent: any, localOpMetadata?: unknown): number {\n\t\tconst clientSequenceNumber = ++this.deltaManager.clientSequenceNumber;\n\t\tconst message: IInternalMockRuntimeMessage = {\n\t\t\tcontent: messageContent,\n\t\t\tlocalOpMetadata,\n\t\t\treferenceSequenceNumber: this.deltaManager.lastSequenceNumber,\n\t\t};\n\n\t\tconst isAllocationMessage = this.isAllocationMessage(message.content);\n\n\t\tconst currentFlushMode =\n\t\t\tthis.#manualFlushCalls > 0 ? FlushMode.TurnBased : this.runtimeOptions.flushMode;\n\n\t\tswitch (currentFlushMode) {\n\t\t\tcase FlushMode.Immediate: {\n\t\t\t\tif (!isAllocationMessage) {\n\t\t\t\t\tconst idAllocationOp = this.generateIdAllocationOp();\n\t\t\t\t\tif (idAllocationOp !== undefined) {\n\t\t\t\t\t\tthis.submitInternal(idAllocationOp, clientSequenceNumber);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.submitInternal(message, clientSequenceNumber);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase FlushMode.TurnBased: {\n\t\t\t\t// Id allocation messages are directly submitted during the resubmit path\n\t\t\t\tif (isAllocationMessage) {\n\t\t\t\t\tthis.idAllocationOutbox.push(message);\n\t\t\t\t} else {\n\t\t\t\t\tthis.outbox.push(message);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported FlushMode ${this.runtimeOptions.flushMode}`);\n\t\t}\n\n\t\treturn clientSequenceNumber;\n\t}\n\n\t/**\n\t * If the message is an idAllocation message, it will finalize the id range and return true.\n\t * Otherwise, it will return false.\n\t */\n\tprotected maybeProcessIdAllocationMessage(message: ISequencedDocumentMessage): boolean {\n\t\tif (this.isAllocationMessage(message.contents)) {\n\t\t\tthis.finalizeIdRange(message.contents.contents);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate isAllocationMessage(\n\t\tmessage: any,\n\t): message is IMockContainerRuntimeIdAllocationMessage {\n\t\treturn (\n\t\t\tmessage !== undefined &&\n\t\t\t(message as IMockContainerRuntimeIdAllocationMessage).type === \"idAllocation\"\n\t\t);\n\t}\n\n\tpublic dirty(): void {}\n\tpublic get isDirty(): boolean {\n\t\treturn this.pendingMessages.length > 0;\n\t}\n\n\t/**\n\t * If flush mode is set to FlushMode.TurnBased, it will send all messages queued since the last time\n\t * this method (or `flushSomeMessages`) was called. Otherwise, calling the method does nothing.\n\t */\n\tpublic flush(): void {\n\t\tthis.flushSomeMessages(this.outbox.length);\n\t}\n\n\t/**\n\t * If flush mode is set to FlushMode.TurnBased, it will send the specified number of messages from the outbox\n\t * queued since the last time this (or `flush`) was called. Otherwise, calling the method does nothing.\n\t * This can be useful when simulating staging mode, and we only want to flush certain messages.\n\t */\n\tpublic flushSomeMessages(numMessages: number): void {\n\t\tif (!Number.isInteger(numMessages) || numMessages < 0) {\n\t\t\tthrow new Error(\"flushSomeMessages: numMessages must be a non-negative integer\");\n\t\t}\n\t\tif (this.runtimeOptions.flushMode !== FlushMode.TurnBased) {\n\t\t\treturn;\n\t\t}\n\n\t\t// This mimics the runtime behavior of the IdCompressor by generating an IdAllocationOp\n\t\t// and sticking it in front of any op that might rely on that id. It differs slightly in that\n\t\t// in the actual runtime it would get put in its own separate batch\n\t\tconst idAllocationOp = this.generateIdAllocationOp();\n\t\tif (idAllocationOp !== undefined) {\n\t\t\tthis.idAllocationOutbox.push(idAllocationOp);\n\t\t}\n\n\t\tconst actualMessagesToSubmit = this.outbox.splice(0, numMessages);\n\n\t\t// As with the runtime behavior, we need to send the idAllocationOps first\n\t\tconst messagesToSubmit = this.idAllocationOutbox.concat(actualMessagesToSubmit);\n\t\tthis.idAllocationOutbox.length = 0;\n\n\t\tlet fakeClientSequenceNumber = 1;\n\t\tmessagesToSubmit.forEach((message) => {\n\t\t\tthis.submitInternal(\n\t\t\t\tmessage,\n\t\t\t\t// When grouped batching is used, the ops within the same grouped batch will have\n\t\t\t\t// fake sequence numbers when they're ungrouped. The submit function will still\n\t\t\t\t// return the clientSequenceNumber but this will ensure that the readers will always\n\t\t\t\t// read the fake client sequence numbers.\n\t\t\t\tthis.runtimeOptions.enableGroupedBatching\n\t\t\t\t\t? fakeClientSequenceNumber++\n\t\t\t\t\t: this.deltaManager.clientSequenceNumber,\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * If flush mode is set to FlushMode.TurnBased, it will rebase the current batch by resubmitting them\n\t * to the data stores. Otherwise, calling the method does nothing.\n\t *\n\t * The method requires `runtimeOptions.enableGroupedBatching` to be enabled.\n\t */\n\tpublic rebase(): void {\n\t\tif (this.runtimeOptions.flushMode !== FlushMode.TurnBased) {\n\t\t\treturn;\n\t\t}\n\n\t\tassert(\n\t\t\tthis.runtimeOptions.enableGroupedBatching,\n\t\t\t\"Rebasing is not supported when group batching is disabled\",\n\t\t);\n\n\t\t// Only outbox needs to be rebased. The idAllocationOutbox is not rebased, as that\n\t\t// is a no-op (though resubmitting the other ops may generate new IDs)\n\t\tconst messagesToRebase = this.outbox.slice();\n\t\tthis.outbox.length = 0;\n\n\t\tthis.reSubmitMessages(messagesToRebase);\n\t}\n\n\tprotected reSubmitMessages(\n\t\tmessagesToResubmit: { content: any; localOpMetadata?: unknown }[],\n\t): void {\n\t\t// Sort the messages so that idAllocation messages are submitted first\n\t\t// When resubmitting non-idAllocation messages, they may generate new IDs.\n\t\t// This sort ensures that all ID ranges are finalized before they are\n\t\t// needed (i.e. before the messages that rely on them are processed)\n\t\t// and in the order they were allocated\n\t\tconst orderedMessages = messagesToResubmit\n\t\t\t.filter((message) => message.content.type === \"idAllocation\")\n\t\t\t.concat(messagesToResubmit.filter((message) => message.content.type !== \"idAllocation\"));\n\t\torderedMessages.forEach((pendingMessage) => {\n\t\t\tif (pendingMessage.content.type === \"idAllocation\") {\n\t\t\t\tthis.submit(pendingMessage.content, pendingMessage.localOpMetadata);\n\t\t\t} else {\n\t\t\t\tthis.dataStoreRuntime.reSubmit(pendingMessage.content, pendingMessage.localOpMetadata);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Rolls back all pending messages.\n\t * @remarks\n\t * This only works when the FlushMode is not immediate as immediate\n\t * flush mode send the ops to the mock runtime factory for processing/sequencing, and so those\n\t * ops are no longer local, so not available for rollback.\n\t */\n\tpublic rollback?(): void {\n\t\tconst messagesToRollback = this.outbox.slice().reverse();\n\t\tthis.outbox.length = 0;\n\t\tmessagesToRollback.forEach((pm) => {\n\t\t\tthis.dataStoreRuntime.rollback?.(pm.content, pm.localOpMetadata);\n\t\t});\n\t}\n\n\tprivate generateIdAllocationOp(): IInternalMockRuntimeMessage | undefined {\n\t\tconst idRange = this.dataStoreRuntime.idCompressor?.takeNextCreationRange();\n\t\tif (idRange?.ids !== undefined) {\n\t\t\tconst allocationOp: IMockContainerRuntimeIdAllocationMessage = {\n\t\t\t\ttype: \"idAllocation\",\n\t\t\t\tcontents: idRange,\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tcontent: allocationOp,\n\t\t\t\treferenceSequenceNumber: this.deltaManager.lastSequenceNumber,\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate submitInternal(\n\t\tmessage: IInternalMockRuntimeMessage,\n\t\tclientSequenceNumber: number,\n\t): void {\n\t\t// Here, we should instead push to the DeltaManager. And the DeltaManager will push things into the factory's messages\n\t\tthis.deltaManager.outbound.push([\n\t\t\t{\n\t\t\t\tclientSequenceNumber,\n\t\t\t\tcontents: message.content,\n\t\t\t\treferenceSequenceNumber:\n\t\t\t\t\tmessage.referenceSequenceNumber ?? this.deltaManager.lastSequenceNumber,\n\t\t\t\ttype: MessageType.Operation,\n\t\t\t},\n\t\t]);\n\t\tthis.addPendingMessage(message.content, message.localOpMetadata, clientSequenceNumber);\n\t}\n\n\tpublic process(message: ISequencedDocumentMessage): void {\n\t\tthis.deltaManager.process(message);\n\t\tconst [local, localOpMetadata] = this.processInternal(message);\n\n\t\tif (this.isAllocationMessage(message.contents)) {\n\t\t\tthis.finalizeIdRange(message.contents.contents);\n\t\t} else {\n\t\t\tconst messagesContent: IRuntimeMessagesContent[] = [\n\t\t\t\t{\n\t\t\t\t\tcontents: message.contents,\n\t\t\t\t\tclientSequenceNumber: message.clientSequenceNumber,\n\t\t\t\t\tlocalOpMetadata,\n\t\t\t\t},\n\t\t\t];\n\t\t\tthis.dataStoreRuntime.processMessages({ envelope: message, local, messagesContent });\n\t\t}\n\t}\n\n\tprotected addPendingMessage(\n\t\tcontent: any,\n\t\tlocalOpMetadata: unknown,\n\t\tclientSequenceNumber: number,\n\t): void {\n\t\tconst pendingMessage: IMockContainerRuntimePendingMessage = {\n\t\t\treferenceSequenceNumber: this.deltaManager.lastSequenceNumber,\n\t\t\tcontent,\n\t\t\tclientSequenceNumber,\n\t\t\tlocalOpMetadata,\n\t\t};\n\t\tthis.pendingMessages.push(pendingMessage);\n\t}\n\n\tprotected processInternal(message: ISequencedDocumentMessage): [boolean, unknown] {\n\t\tlet localOpMetadata: unknown;\n\t\tconst local = this.clientId === message.clientId;\n\t\tif (local) {\n\t\t\tconst pendingMessage = this.pendingMessages.shift();\n\t\t\tassert(\n\t\t\t\tpendingMessage?.clientSequenceNumber === message.clientSequenceNumber,\n\t\t\t\t\"Unexpected message\",\n\t\t\t);\n\t\t\tlocalOpMetadata = pendingMessage.localOpMetadata;\n\t\t}\n\t\treturn [local, localOpMetadata];\n\t}\n\n\tpublic async resolveHandle(handle: IFluidHandle): Promise<IResponse> {\n\t\treturn this.dataStoreRuntime.resolveHandle({\n\t\t\turl: toFluidHandleInternal(handle).absolutePath,\n\t\t});\n\t}\n}\n\n/**\n * Factory to create MockContainerRuntime for testing basic submitting and processing of messages.\n * This also acts as a very basic server that stores the messages from all the MockContainerRuntimes and\n * processes them when asked.\n * If test specific logic is required, extend this class and add the logic there. For an example, take a look\n * at MockContainerRuntimeFactoryForReconnection.\n * @legacy @beta\n */\nexport class MockContainerRuntimeFactory {\n\tpublic sequenceNumber = 0;\n\tpublic minSeq = new Map<string, number>();\n\tpublic readonly quorum = new MockQuorumClients();\n\t/**\n\t * The MockContainerRuntimes we produce will push messages into this queue as they are submitted.\n\t * This is playing the role of the orderer, establishing a single universal order for the messages generated.\n\t * They are held in this queue until we explicitly choose to process them, at which time they are \"broadcast\" to\n\t * each of the runtimes.\n\t */\n\tprotected messages: ISequencedDocumentMessage[] = [];\n\tprotected readonly runtimes: Set<MockContainerRuntime> = new Set();\n\n\t/**\n\t * The container runtime options which will be provided to the all runtimes\n\t * created by this factory and also drive the way the ops are processed.\n\t *\n\t * See {@link IMockContainerRuntimeOptions}\n\t */\n\tprotected readonly runtimeOptions: Required<IMockContainerRuntimeOptions>;\n\n\tconstructor(\n\t\tmockContainerRuntimeOptions: IMockContainerRuntimeOptions = defaultMockContainerRuntimeOptions,\n\t) {\n\t\tthis.runtimeOptions = makeContainerRuntimeOptions(mockContainerRuntimeOptions);\n\t}\n\n\tpublic get outstandingMessageCount(): number {\n\t\treturn this.messages.length;\n\t}\n\n\t/**\n\t * @returns a minimum sequence number for all connected clients.\n\t */\n\tpublic getMinSeq(): number {\n\t\tlet minimumSequenceNumber: number | undefined;\n\t\tfor (const [client, clientSequenceNumber] of this.minSeq) {\n\t\t\t// We have to make sure, a client is part of the quorum, when\n\t\t\t// we compute the msn. We assume that the quorum accurately\n\t\t\t// represents the currently connected clients. In some tests\n\t\t\t// for reconnects, we will remove clients from the quorum\n\t\t\t// to indicate they are currently not connected. In that case,\n\t\t\t// they must no longer contribute to the msn computation.\n\t\t\tif (this.quorum.getMember(client) !== undefined) {\n\t\t\t\tminimumSequenceNumber =\n\t\t\t\t\tminimumSequenceNumber === undefined\n\t\t\t\t\t\t? clientSequenceNumber\n\t\t\t\t\t\t: Math.min(minimumSequenceNumber, clientSequenceNumber);\n\t\t\t}\n\t\t}\n\t\treturn minimumSequenceNumber ?? 0;\n\t}\n\n\tpublic createContainerRuntime(\n\t\tdataStoreRuntime: MockFluidDataStoreRuntime,\n\t): MockContainerRuntime {\n\t\tconst containerRuntime = new MockContainerRuntime(\n\t\t\tdataStoreRuntime,\n\t\t\tthis,\n\t\t\tthis.runtimeOptions,\n\t\t);\n\t\tthis.runtimes.add(containerRuntime);\n\t\treturn containerRuntime;\n\t}\n\n\tpublic removeContainerRuntime(containerRuntime: MockContainerRuntime): void {\n\t\tthis.runtimes.delete(containerRuntime);\n\t}\n\n\tpublic pushMessage(msg: Partial<ISequencedDocumentMessage>): void {\n\t\tdeepFreeze(msg);\n\t\tif (\n\t\t\tmsg.clientId &&\n\t\t\tmsg.referenceSequenceNumber !== undefined &&\n\t\t\t!this.minSeq.has(msg.clientId)\n\t\t) {\n\t\t\tthis.minSeq.set(msg.clientId, msg.referenceSequenceNumber);\n\t\t}\n\t\tthis.messages.push(msg as ISequencedDocumentMessage);\n\t}\n\n\tprotected lastProcessedMessage: ISequencedDocumentMessage | undefined;\n\tprotected getFirstMessageToProcess(): ISequencedDocumentMessage {\n\t\tassert(this.messages.length > 0, \"The message queue should not be empty\");\n\n\t\t// Explicitly JSON clone the value to match the behavior of going thru the wire.\n\t\tconst message = JSON.parse(\n\t\t\tJSON.stringify(this.messages.shift()),\n\t\t) as ISequencedDocumentMessage;\n\n\t\t// TODO: Determine if this needs to be adapted for handling server-generated messages (which have null clientId and referenceSequenceNumber of -1).\n\t\tthis.minSeq.set(message.clientId as string, message.referenceSequenceNumber);\n\t\tif (\n\t\t\tthis.runtimeOptions.flushMode === FlushMode.Immediate ||\n\t\t\tthis.lastProcessedMessage?.clientId !== message.clientId\n\t\t) {\n\t\t\tthis.sequenceNumber++;\n\t\t}\n\t\tmessage.sequenceNumber = this.sequenceNumber;\n\t\tmessage.minimumSequenceNumber = this.getMinSeq();\n\t\tthis.lastProcessedMessage = message;\n\t\treturn message;\n\t}\n\n\tprivate processFirstMessage(): void {\n\t\tconst message = this.getFirstMessageToProcess();\n\t\tfor (const runtime of this.runtimes) {\n\t\t\truntime.process(message);\n\t\t}\n\t}\n\n\t/**\n\t * Process one of the queued messages. Throws if no messages are queued.\n\t */\n\tpublic processOneMessage(): void {\n\t\tif (this.messages.length === 0) {\n\t\t\tthrow new Error(\"Tried to process a message that did not exist\");\n\t\t}\n\t\tthis.lastProcessedMessage = undefined;\n\n\t\tthis.processFirstMessage();\n\t}\n\n\t/**\n\t * Process a given number of queued messages. Throws if there are fewer messages queued than requested.\n\t * @param count - the number of messages to process\n\t */\n\tpublic processSomeMessages(count: number): void {\n\t\tif (count > this.messages.length) {\n\t\t\tthrow new Error(\"Tried to process more messages than exist\");\n\t\t}\n\n\t\tthis.lastProcessedMessage = undefined;\n\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tthis.processFirstMessage();\n\t\t}\n\t}\n\n\t/**\n\t * Process all remaining messages in the queue.\n\t */\n\tpublic processAllMessages(): void {\n\t\tthis.lastProcessedMessage = undefined;\n\t\twhile (this.messages.length > 0) {\n\t\t\tthis.processFirstMessage();\n\t\t}\n\t}\n}\n\n/**\n * @legacy @beta\n */\nexport class MockQuorumClients implements IQuorumClients, EventEmitter {\n\tprivate readonly members: Map<string, ISequencedClient>;\n\tprivate readonly eventEmitter = new EventEmitter();\n\n\tconstructor(...members: [string, Partial<ISequencedClient>][]) {\n\t\tthis.members = new Map((members as [string, ISequencedClient][]) ?? []);\n\t}\n\n\taddMember(id: string, client: Partial<ISequencedClient>): void {\n\t\tthis.members.set(id, client as ISequencedClient);\n\t\tthis.eventEmitter.emit(\"addMember\", id, client);\n\t}\n\n\tremoveMember(id: string): void {\n\t\tif (this.members.delete(id)) {\n\t\t\tthis.eventEmitter.emit(\"removeMember\", id);\n\t\t}\n\t}\n\n\tgetMembers(): Map<string, ISequencedClient> {\n\t\t// Implementation always generates a new Map.\n\t\t// Mock should as well in case any callers rely on being able to modify\n\t\t// the returned Map.\n\t\treturn new Map(this.members);\n\t}\n\tgetMember(clientId: string): ISequencedClient | undefined {\n\t\treturn this.getMembers().get(clientId);\n\t}\n\tdisposed: boolean = false;\n\n\tdispose(): void {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\n\taddListener(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\ton(event: string | number, listener: (...args: any[]) => void): this {\n\t\tswitch (event) {\n\t\t\tcase \"afterOn\":\n\t\t\t\tthis.eventEmitter.on(event, listener);\n\t\t\t\treturn this;\n\n\t\t\tcase \"addMember\":\n\t\t\tcase \"removeMember\":\n\t\t\t\tthis.eventEmitter.on(event, listener);\n\t\t\t\tthis.eventEmitter.emit(\"afterOn\", event);\n\t\t\t\treturn this;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Method not implemented.\");\n\t\t}\n\t}\n\tonce(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tprependListener(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tprependOnceListener(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tremoveListener(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthis.eventEmitter.removeListener(event, listener);\n\t\treturn this;\n\t}\n\toff(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthis.eventEmitter.off(event, listener);\n\t\treturn this;\n\t}\n\tremoveAllListeners(event?: string | number | undefined): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tsetMaxListeners(n: number): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tgetMaxListeners(): number {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tlisteners(event: string | number): ReturnType<EventEmitter[\"listeners\"]> {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\trawListeners(event: string | number): ReturnType<EventEmitter[\"rawListeners\"]> {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\temit(event: string | number, ...args: any[]): boolean {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\teventNames(): (string | number)[] {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tlistenerCount(type: string | number): number {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n}\n\n/**\n * @legacy @beta\n */\nexport class MockAudience\n\textends TypedEventEmitter<IAudienceEvents>\n\timplements IAudienceOwner\n{\n\tprivate readonly audienceMembers: Map<string, IClient>;\n\tprivate _currentClientId: string | undefined;\n\n\tpublic constructor() {\n\t\tsuper();\n\t\tthis.audienceMembers = new Map<string, IClient>();\n\t}\n\n\tpublic addMember(clientId: string, member: IClient): void {\n\t\tthis.audienceMembers.set(clientId, member);\n\t\tthis.emit(\"addMember\", clientId, member);\n\t}\n\n\tpublic removeMember(clientId: string): boolean {\n\t\tconst member = this.audienceMembers.get(clientId);\n\t\tconst deleteResult = this.audienceMembers.delete(clientId);\n\t\tthis.emit(\"removeMember\", clientId, member);\n\t\treturn deleteResult;\n\t}\n\n\tpublic getMembers(): Map<string, IClient> {\n\t\treturn new Map<string, IClient>(this.audienceMembers.entries());\n\t}\n\tpublic getMember(clientId: string): IClient | undefined {\n\t\treturn this.audienceMembers.get(clientId);\n\t}\n\n\tpublic getSelf(): ISelf | undefined {\n\t\treturn this._currentClientId === undefined\n\t\t\t? undefined\n\t\t\t: {\n\t\t\t\t\tclientId: this._currentClientId,\n\t\t\t\t};\n\t}\n\n\tpublic setCurrentClientId(clientId: string): void {\n\t\tif (this._currentClientId !== clientId) {\n\t\t\tconst oldId = this._currentClientId;\n\t\t\tthis._currentClientId = clientId;\n\t\t\tthis.emit(\n\t\t\t\t\"selfChanged\",\n\t\t\t\toldId === undefined ? undefined : ({ clientId: oldId } satisfies ISelf),\n\t\t\t\t{ clientId } satisfies ISelf,\n\t\t\t);\n\t\t}\n\t}\n}\n\nconst attachStatesToComparableNumbers = {\n\t[AttachState.Detached]: 0,\n\t[AttachState.Attaching]: 1,\n\t[AttachState.Attached]: 2,\n} as const;\n\n/**\n * Mock implementation of IRuntime for testing that does nothing\n * @legacy @beta\n */\nexport class MockFluidDataStoreRuntime\n\textends EventEmitter\n\timplements IFluidDataStoreRuntime, IFluidDataStoreChannel, IFluidHandleContext\n{\n\tconstructor(overrides?: {\n\t\tclientId?: string;\n\t\tentryPoint?: IFluidHandle<FluidObject>;\n\t\tid?: string;\n\t\tlogger?: ITelemetryBaseLogger;\n\t\tidCompressor?: IIdCompressor & IIdCompressorCore;\n\t\tattachState?: AttachState;\n\t\tregistry?: readonly IChannelFactory[];\n\t\tminVersionForCollab?: MinimumVersionForCollab;\n\t}) {\n\t\tsuper();\n\t\tthis.clientId = overrides?.clientId ?? uuid();\n\t\tthis.entryPoint = toFluidHandleInternal(\n\t\t\toverrides?.entryPoint ?? new MockHandle(null as unknown as FluidObject, \"\", \"\"),\n\t\t);\n\t\tthis.id = overrides?.id ?? uuid();\n\t\tconst childLoggerProps: Parameters<typeof createChildLogger>[0] = {\n\t\t\tnamespace: \"fluid:MockFluidDataStoreRuntime\",\n\t\t};\n\t\tconst logger = overrides?.logger;\n\t\tif (logger !== undefined) {\n\t\t\tchildLoggerProps.logger = logger;\n\t\t}\n\t\tthis.logger = createChildLogger(childLoggerProps);\n\t\tthis.idCompressor = overrides?.idCompressor;\n\t\tthis._attachState = overrides?.attachState ?? AttachState.Attached;\n\n\t\tconst registry = overrides?.registry;\n\t\tif (registry) {\n\t\t\tthis.registry = new Map(registry.map((factory) => [factory.type, factory]));\n\t\t}\n\n\t\tthis.minVersionForCollab = overrides?.minVersionForCollab;\n\t}\n\n\tprivate readonly: boolean = false;\n\tpublic readonly isReadOnly = (): boolean => this.readonly;\n\n\tpublic readonly entryPoint: IFluidHandleInternal<FluidObject>;\n\n\t/**\n\t * @see IFluidDataStoreRuntimeInternalConfig.minVersionForCollab\n\t */\n\tpublic readonly minVersionForCollab: MinimumVersionForCollab | undefined;\n\n\tpublic get IFluidHandleContext(): IFluidHandleContext {\n\t\treturn this;\n\t}\n\tpublic get rootRoutingContext(): IFluidHandleContext {\n\t\treturn this;\n\t}\n\tpublic get channelsRoutingContext(): IFluidHandleContext {\n\t\treturn this;\n\t}\n\tpublic get objectsRoutingContext(): IFluidHandleContext {\n\t\treturn this;\n\t}\n\n\tpublic readonly documentId: string = undefined as any;\n\tpublic readonly id: string;\n\tpublic readonly existing: boolean = undefined as any;\n\tpublic options: Record<string | number, any> = {};\n\tpublic clientId: string;\n\tpublic readonly path = \"\";\n\tpublic readonly connected = true;\n\tpublic deltaManagerInternal = new MockDeltaManager();\n\tpublic get deltaManager(): IDeltaManagerErased {\n\t\treturn toDeltaManagerErased(this.deltaManagerInternal);\n\t}\n\tpublic readonly loader: ILoader = undefined as any;\n\tpublic readonly logger: ITelemetryBaseLogger;\n\tpublic quorum = new MockQuorumClients();\n\tprivate readonly audience = new MockAudience();\n\tpublic containerRuntime?: MockContainerRuntime;\n\tpublic idCompressor: (IIdCompressor & IIdCompressorCore) | undefined;\n\tprivate readonly deltaConnections: MockDeltaConnection[] = [];\n\tprivate readonly registry?: ReadonlyMap<string, IChannelFactory>;\n\n\tpublic createDeltaConnection(): MockDeltaConnection {\n\t\tconst deltaConnection = new MockDeltaConnection(\n\t\t\t(messageContent: any, localOpMetadata: unknown): number =>\n\t\t\t\tthis.submitMessageInternal(messageContent, localOpMetadata),\n\t\t\t(): void => this.setChannelDirty(),\n\t\t);\n\t\tthis.deltaConnections.push(deltaConnection);\n\t\treturn deltaConnection;\n\t}\n\n\tpublic get absolutePath(): string {\n\t\treturn `/${this.id}`;\n\t}\n\n\t/**\n\t * @deprecated Use `attachState` instead\n\t *\n\t * @privateRemarks Also remove the setter when this is removed. setters don't get their own doc tags.\n\t */\n\tpublic get local(): boolean {\n\t\treturn !this.isAttached;\n\t}\n\tpublic set local(local: boolean) {\n\t\t// this does not validate attach state orders, or fire events to maintain\n\t\t// the existing behavior. due to this, this method is deprecated and will\n\t\t// be removed\n\t\tthis._attachState = local ? AttachState.Detached : AttachState.Attached;\n\t}\n\n\tprivate _disposed = false;\n\n\tpublic get disposed(): boolean {\n\t\treturn this._disposed;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._disposed = true;\n\t}\n\n\tpublic async getChannel(id: string): Promise<IChannel> {\n\t\treturn null as any as IChannel;\n\t}\n\tpublic createChannel(id: string | undefined, type: string): IChannel {\n\t\tif (this.registry === undefined) {\n\t\t\t// This preserves the behavior of this mock from before registry support was added.\n\t\t\treturn null as any as IChannel;\n\t\t}\n\n\t\tconst factory = this.registry.get(type);\n\t\tassert(factory !== undefined, \"type missing from registry\");\n\t\treturn factory.create(this, id ?? uuid());\n\t}\n\n\t/**\n\t * @remarks This is for internal use only.\n\t */\n\tpublic ILayerCompatDetails?: unknown;\n\n\tpublic addChannel(channel: IChannel): void {}\n\n\tpublic get isAttached(): boolean {\n\t\treturn this.attachState !== AttachState.Detached;\n\t}\n\n\tprivate _attachState: AttachState;\n\tpublic get attachState(): AttachState {\n\t\treturn this._attachState;\n\t}\n\n\tpublic get visibilityState(): VisibilityState {\n\t\treturn this.isAttached ? VisibilityState.GloballyVisible : VisibilityState.NotVisible;\n\t}\n\n\tpublic bindChannel(channel: IChannel): void {\n\t\treturn;\n\t}\n\n\tpublic attachGraph(): void {\n\t\treturn;\n\t}\n\n\tpublic makeVisibleAndAttachGraph(): void {\n\t\treturn;\n\t}\n\n\tpublic bind(handle: IFluidHandle): void {\n\t\treturn;\n\t}\n\n\tpublic getQuorum(): IQuorumClients {\n\t\treturn this.quorum;\n\t}\n\n\tpublic getAudience(): IAudience {\n\t\treturn this.audience;\n\t}\n\n\tpublic save(message: string): void {\n\t\treturn;\n\t}\n\n\tpublic async close(): Promise<void> {\n\t\treturn;\n\t}\n\n\tpublic async uploadBlob(blob: ArrayBufferLike): Promise<IFluidHandle<ArrayBufferLike>> {\n\t\treturn null as any as IFluidHandle<ArrayBufferLike>;\n\t}\n\n\tpublic async getBlob(blobId: string): Promise<any> {\n\t\treturn null;\n\t}\n\n\tprivate submitMessageInternal(messageContent: any, localOpMetadata: unknown): number {\n\t\tassert(\n\t\t\tthis.containerRuntime !== undefined,\n\t\t\t\"The container runtime has not been initialized\",\n\t\t);\n\t\treturn this.containerRuntime.submit(messageContent, localOpMetadata);\n\t}\n\n\tprivate setChannelDirty(): void {\n\t\tassert(\n\t\t\tthis.containerRuntime !== undefined,\n\t\t\t\"The container runtime has not been initialized\",\n\t\t);\n\t\treturn this.containerRuntime.dirty();\n\t}\n\n\tpublic submitSignal: IFluidDataStoreRuntime[\"submitSignal\"] = () => null;\n\n\tpublic processMessages(messageCollection: IRuntimeMessageCollection): void {\n\t\tif (this.disposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.deltaConnections.forEach((dc) => {\n\t\t\tdc.processMessages(messageCollection);\n\t\t});\n\t}\n\n\tpublic processSignal(message: any, local: boolean): void {\n\t\treturn;\n\t}\n\n\tpublic updateMinSequenceNumber(value: number): void {\n\t\treturn;\n\t}\n\n\tpublic setConnectionState(connected: boolean, clientId?: string): void {\n\t\tif (connected && clientId !== undefined) {\n\t\t\tthis.clientId = clientId;\n\t\t}\n\t\tthis.deltaConnections.forEach((dc) => dc.setConnectionState(connected));\n\t\treturn;\n\t}\n\n\tpublic notifyReadOnlyState(readonly: boolean): void {\n\t\tthis.readonly = readonly;\n\t}\n\n\tpublic async resolveHandle(request: IRequest): Promise<IResponse> {\n\t\tif (request.url !== undefined) {\n\t\t\treturn {\n\t\t\t\tstatus: 200,\n\t\t\t\tmimeType: \"fluid/object\",\n\t\t\t\tvalue: request.url,\n\t\t\t};\n\t\t}\n\t\treturn this.request(request);\n\t}\n\n\tpublic async request(request: IRequest): Promise<IResponse> {\n\t\treturn null as any as IResponse;\n\t}\n\n\tpublic async summarize(\n\t\tfullTree?: boolean,\n\t\ttrackState?: boolean,\n\t): Promise<ISummaryTreeWithStats> {\n\t\tconst stats = mergeStats();\n\t\tstats.treeNodeCount++;\n\t\treturn {\n\t\t\tsummary: {\n\t\t\t\ttype: SummaryType.Tree,\n\t\t\t\ttree: {},\n\t\t\t},\n\t\t\tstats,\n\t\t};\n\t}\n\n\tpublic async getGCData(): Promise<IGarbageCollectionData> {\n\t\treturn {\n\t\t\tgcNodes: {},\n\t\t};\n\t}\n\n\tpublic updateUsedRoutes(usedRoutes: string[]): void {}\n\n\tpublic getAttachSnapshot(): ITreeEntry[] {\n\t\treturn [];\n\t}\n\n\tpublic getAttachSummary(): ISummaryTreeWithStats {\n\t\tconst stats = mergeStats();\n\t\tstats.treeNodeCount++;\n\t\treturn {\n\t\t\tsummary: {\n\t\t\t\ttype: SummaryType.Tree,\n\t\t\t\ttree: {},\n\t\t\t},\n\t\t\tstats,\n\t\t};\n\t}\n\n\tpublic getAttachGCData(\n\t\ttelemetryContext?: ITelemetryContext | undefined,\n\t): IGarbageCollectionData {\n\t\treturn {\n\t\t\tgcNodes: {},\n\t\t};\n\t}\n\n\tpublic setAttachState(attachState: AttachState.Attaching | AttachState.Attached): void {\n\t\tif (attachState === this._attachState) {\n\t\t\treturn;\n\t\t}\n\t\tconst proposedState = attachStatesToComparableNumbers[attachState];\n\t\tconst startingState = attachStatesToComparableNumbers[this._attachState];\n\t\tif (proposedState < startingState) {\n\t\t\tthrow new Error(`cannot transition back to ${attachState} from ${this.attachState}`);\n\t\t}\n\n\t\tif (\n\t\t\tstartingState < attachStatesToComparableNumbers[AttachState.Attaching] &&\n\t\t\tproposedState >= attachStatesToComparableNumbers[AttachState.Attaching]\n\t\t) {\n\t\t\tthis._attachState = AttachState.Attaching;\n\t\t\tthis.emit(\"attaching\");\n\t\t}\n\n\t\tif (\n\t\t\tstartingState < attachStatesToComparableNumbers[AttachState.Attached] &&\n\t\t\tproposedState >= attachStatesToComparableNumbers[AttachState.Attached]\n\t\t) {\n\t\t\tthis._attachState = AttachState.Attached;\n\t\t\tthis.emit(\"attached\");\n\t\t}\n\t}\n\n\tpublic async waitAttached(): Promise<void> {\n\t\treturn;\n\t}\n\n\tpublic async requestDataStore(request: IRequest): Promise<IResponse> {\n\t\treturn null as any as IResponse;\n\t}\n\n\tpublic reSubmit(content: any, localOpMetadata: unknown, squash?: boolean): void {\n\t\tthis.deltaConnections.forEach((dc) => {\n\t\t\tdc.reSubmit(content, localOpMetadata, squash);\n\t\t});\n\t}\n\n\tpublic async applyStashedOp(content: any): Promise<unknown> {\n\t\treturn this.deltaConnections.map((dc) => dc.applyStashedOp(content))[0];\n\t}\n\n\tpublic rollback?(message: any, localOpMetadata: unknown): void {\n\t\tthis.deltaConnections.forEach((dc) => {\n\t\t\tdc.rollback?.(message, localOpMetadata);\n\t\t});\n\t}\n}\n\n/**\n * Mock implementation of IDeltaConnection\n * @internal\n */\nexport class MockEmptyDeltaConnection implements IDeltaConnection {\n\tpublic connected = false;\n\n\tpublic attach(handler): void {}\n\n\tpublic submit(messageContent: any): number {\n\t\tassert(false, \"Throw submit error on mock empty delta connection\");\n\t}\n\n\tpublic dirty(): void {}\n}\n\n/**\n * Mock implementation of IChannelStorageService\n * @legacy @beta\n */\nexport class MockObjectStorageService implements IChannelStorageService {\n\tprivate readonly snapshotTree: ISnapshotTree;\n\n\t/**\n\t * @param contents - Key value pairs that represent a snapshot.\n\t * The keys are the path to the contents of a blob in the snapshot tree. The corresponding values are its contents.\n\t *\n\t * @remarks\n\t * The snapshot contents must not change after it has been passed here as the changes will not be reflected\n\t * in the snapshot tree retrieved via `getSnapshotTree`.\n\t */\n\tpublic constructor(private readonly contents: { [key: string]: string }) {\n\t\tthis.snapshotTree = createSnapshotTreeFromContents(contents);\n\t}\n\n\tpublic async readBlob(path: string): Promise<ArrayBufferLike> {\n\t\treturn stringToBuffer(this.contents[path], \"utf8\");\n\t}\n\tpublic async contains(path: string): Promise<boolean> {\n\t\treturn this.contents[path] !== undefined;\n\t}\n\tpublic async list(path: string): Promise<string[]> {\n\t\tconst pathPartsLength = getNormalizedObjectStoragePathParts(path).length;\n\t\treturn Object.keys(this.contents).filter(\n\t\t\t(key) => key.startsWith(path) && key.split(\"/\").length === pathPartsLength + 1,\n\t\t);\n\t}\n\n\tpublic getSnapshotTree(): ISnapshotTree {\n\t\treturn this.snapshotTree;\n\t}\n}\n\n/**\n * Mock implementation of IChannelServices\n * @legacy @beta\n */\nexport class MockSharedObjectServices implements IChannelServices {\n\tpublic static createFromSummary(summaryTree: ISummaryTree): MockSharedObjectServices {\n\t\tconst contents: { [key: string]: string } = {};\n\t\tsetContentsFromSummaryTree(summaryTree, \"\", contents);\n\t\treturn new MockSharedObjectServices(contents);\n\t}\n\n\tpublic deltaConnection: IDeltaConnection = new MockEmptyDeltaConnection();\n\tpublic objectStorage: MockObjectStorageService;\n\n\tpublic constructor(contents: { [key: string]: string }) {\n\t\tthis.objectStorage = new MockObjectStorageService(contents);\n\t}\n}\n\n/**\n * Populate the given `contents` object with all paths/values in a summary tree\n */\nfunction setContentsFromSummaryTree(\n\t{ tree }: ISummaryTree,\n\tpath: string,\n\tcontents: { [key: string]: string },\n): void {\n\tfor (const [key, value] of Object.entries(tree)) {\n\t\tswitch (value.type) {\n\t\t\tcase SummaryType.Blob:\n\t\t\t\tassert(\n\t\t\t\t\ttypeof value.content === \"string\",\n\t\t\t\t\t\"Unexpected blob value on mock createFromSummary\",\n\t\t\t\t);\n\t\t\t\tcontents[`${path}${key}`] = value.content;\n\t\t\t\tbreak;\n\t\t\tcase SummaryType.Tree:\n\t\t\t\tsetContentsFromSummaryTree(value, `${path}${key}/`, contents);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tassert(false, \"Unexpected summary type on mock createFromSummary\");\n\t\t}\n\t}\n}\n\n/**\n * Create an ISnapshotTree from contents object (reverse of setContentsFromSummaryTree)\n * @param contents - Object with path/value pairs\n * @returns ISnapshotTree representing the hierarchical structure\n */\nexport function createSnapshotTreeFromContents(contents: {\n\t[key: string]: string;\n}): ISnapshotTree {\n\tconst tree: ISnapshotTree = {\n\t\ttrees: {},\n\t\tblobs: {},\n\t};\n\n\tfor (const [path, content] of Object.entries(contents)) {\n\t\t// Remove empty strings to handle leading, trailing, or consecutive slashes in the path.\n\t\tconst pathParts = path.split(\"/\").filter((part) => part !== \"\");\n\t\tlet currentTree = tree;\n\n\t\t// Navigate/create the tree structure for all but the last part\n\t\tfor (let i = 0; i < pathParts.length - 1; i++) {\n\t\t\tconst part = pathParts[i];\n\t\t\tif (!currentTree.trees[part]) {\n\t\t\t\tcurrentTree.trees[part] = {\n\t\t\t\t\ttrees: {},\n\t\t\t\t\tblobs: {},\n\t\t\t\t};\n\t\t\t}\n\t\t\tcurrentTree = currentTree.trees[part];\n\t\t}\n\n\t\t// Add the blob at the final location\n\t\tconst blobName = pathParts[pathParts.length - 1];\n\t\tif (blobName !== undefined) {\n\t\t\tcurrentTree.blobs[blobName] = content;\n\t\t}\n\t}\n\n\treturn tree;\n}\n"]}
1
+ {"version":3,"file":"mocks.js","sourceRoot":"","sources":["../src/mocks.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 { EventEmitter, TypedEventEmitter, stringToBuffer } from \"@fluid-internal/client-utils\";\nimport {\n\tAttachState,\n\tIAudience,\n\tIAudienceEvents,\n\tISelf,\n} from \"@fluidframework/container-definitions\";\nimport { ILoader, IAudienceOwner } from \"@fluidframework/container-definitions/internal\";\nimport type { IContainerRuntimeEvents } from \"@fluidframework/container-runtime-definitions/internal\";\nimport {\n\tFluidObject,\n\tIFluidHandle,\n\tIRequest,\n\tIResponse,\n\ttype ITelemetryBaseLogger,\n} from \"@fluidframework/core-interfaces\";\nimport {\n\tIFluidHandleContext,\n\ttype IFluidHandleInternal,\n} from \"@fluidframework/core-interfaces/internal\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport {\n\tIChannelServices,\n\tIChannelStorageService,\n\tIDeltaConnection,\n\tIDeltaHandler,\n\tIChannel,\n\tIFluidDataStoreRuntime,\n\tIChannelFactory,\n\ttype IDeltaManagerErased,\n} from \"@fluidframework/datastore-definitions/internal\";\nimport type { IClient } from \"@fluidframework/driver-definitions\";\nimport {\n\tIQuorumClients,\n\tISequencedClient,\n\tISummaryTree,\n\tSummaryType,\n} from \"@fluidframework/driver-definitions\";\nimport {\n\tITreeEntry,\n\tMessageType,\n\tISequencedDocumentMessage,\n\ttype ISnapshotTree,\n} from \"@fluidframework/driver-definitions/internal\";\nimport type { IIdCompressor } from \"@fluidframework/id-compressor\";\nimport type {\n\tIIdCompressorCore,\n\tIdCreationRange,\n} from \"@fluidframework/id-compressor/internal\";\nimport {\n\tISummaryTreeWithStats,\n\tIGarbageCollectionData,\n\tFlushMode,\n\tIFluidDataStoreChannel,\n\tVisibilityState,\n\ttype ITelemetryContext,\n\ttype IRuntimeMessageCollection,\n\ttype IRuntimeMessagesContent,\n\ttype MinimumVersionForCollab,\n} from \"@fluidframework/runtime-definitions/internal\";\nimport {\n\tgetNormalizedObjectStoragePathParts,\n\tmergeStats,\n\ttoDeltaManagerErased,\n\ttoFluidHandleInternal,\n} from \"@fluidframework/runtime-utils/internal\";\nimport { createChildLogger } from \"@fluidframework/telemetry-utils/internal\";\nimport { v4 as uuid } from \"uuid\";\n\nimport { deepFreeze } from \"./deepFreeze.js\";\nimport { MockDeltaManager } from \"./mockDeltas.js\";\nimport { MockHandle } from \"./mockHandle.js\";\n\n/**\n * Mock implementation of IDeltaConnection for testing\n * @legacy @beta\n */\nexport class MockDeltaConnection implements IDeltaConnection {\n\tpublic get connected(): boolean {\n\t\treturn this._connected;\n\t}\n\n\tprivate _connected = true;\n\tpublic handler: IDeltaHandler | undefined;\n\n\tconstructor(\n\t\tprivate readonly submitFn: (messageContent: any, localOpMetadata: unknown) => number,\n\t\tprivate readonly dirtyFn: () => void,\n\t) {}\n\n\tpublic attach(handler: IDeltaHandler): void {\n\t\tthis.handler = handler;\n\t\thandler.setConnectionState(this.connected);\n\t}\n\n\tpublic submit(messageContent: any, localOpMetadata: unknown): number {\n\t\treturn this.submitFn(messageContent, localOpMetadata);\n\t}\n\n\tpublic dirty(): void {\n\t\tthis.dirtyFn();\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\tthis.handler?.processMessages?.(messageCollection);\n\t}\n\n\tpublic reSubmit(content: any, localOpMetadata: unknown, squash: boolean): void {\n\t\tthis.handler?.reSubmit(content, localOpMetadata, squash);\n\t}\n\n\tpublic applyStashedOp(content: any): unknown {\n\t\treturn this.handler?.applyStashedOp(content);\n\t}\n\n\tpublic rollback?(message: any, localOpMetadata: unknown): void {\n\t\tthis.handler?.rollback?.(message, localOpMetadata);\n\t}\n}\n\n// Represents the structure of a pending message stored by the MockContainerRuntime.\n/**\n * @legacy @beta\n */\nexport interface IMockContainerRuntimePendingMessage {\n\tcontent: any;\n\treferenceSequenceNumber: number;\n\tclientSequenceNumber: number;\n\tlocalOpMetadata: unknown;\n}\n\nexport interface IMockContainerRuntimeIdAllocationMessage {\n\ttype: \"idAllocation\";\n\tcontents: IdCreationRange;\n}\n\n/**\n * Options for the container runtime mock.\n * @legacy @beta\n */\nexport interface IMockContainerRuntimeOptions {\n\t/**\n\t * Configures the flush mode for the runtime. In Immediate flush mode the runtime will immediately\n\t * send all operations to the driver layer, while in TurnBased the operations will be buffered\n\t * and then sent them as a single batch when `flush()` is called on the runtime.\n\t *\n\t * By default, flush mode is Immediate.\n\t */\n\treadonly flushMode?: FlushMode;\n\t/**\n\t * If configured, it will simulate group batching by forcing all ops within a batch to have\n\t * the same sequence number.\n\t *\n\t * By default, the value is `false`\n\t */\n\treadonly enableGroupedBatching?: boolean;\n}\n\nconst defaultMockContainerRuntimeOptions: Required<IMockContainerRuntimeOptions> = {\n\tflushMode: FlushMode.Immediate,\n\tenableGroupedBatching: false,\n};\n\nconst makeContainerRuntimeOptions = (\n\tmockContainerRuntimeOptions: IMockContainerRuntimeOptions,\n): Required<IMockContainerRuntimeOptions> => ({\n\t...defaultMockContainerRuntimeOptions,\n\t...mockContainerRuntimeOptions,\n});\n\n/**\n * @legacy @beta\n */\nexport interface IInternalMockRuntimeMessage {\n\tcontent: any;\n\tlocalOpMetadata?: unknown;\n\treferenceSequenceNumber?: number;\n}\n\n/**\n * Mock implementation of IContainerRuntime for testing basic submitting and processing of messages.\n * If test specific logic is required, extend this class and add the logic there. For an example, take a look\n * at MockContainerRuntimeForReconnection.\n * @legacy @beta\n */\nexport class MockContainerRuntime extends TypedEventEmitter<IContainerRuntimeEvents> {\n\tpublic clientId: string;\n\tpublic readonly deltaManager: MockDeltaManager;\n\t/**\n\t * @deprecated use the associated datastore to create the delta connection\n\t */\n\tprotected readonly deltaConnections: MockDeltaConnection[] = [];\n\tprotected readonly pendingMessages: IMockContainerRuntimePendingMessage[] = [];\n\tprotected readonly outbox: IInternalMockRuntimeMessage[] = [];\n\tprivate readonly idAllocationOutbox: IInternalMockRuntimeMessage[] = [];\n\t/**\n\t * The runtime options this instance is using. See {@link IMockContainerRuntimeOptions}.\n\t */\n\tprotected readonly runtimeOptions: Required<IMockContainerRuntimeOptions>;\n\n\tconstructor(\n\t\tprotected readonly dataStoreRuntime: MockFluidDataStoreRuntime,\n\t\tprotected readonly factory: MockContainerRuntimeFactory,\n\t\tmockContainerRuntimeOptions: IMockContainerRuntimeOptions = defaultMockContainerRuntimeOptions,\n\t\tprotected readonly overrides?: { minimumSequenceNumber?: number | undefined },\n\t) {\n\t\tsuper();\n\t\tthis.deltaManager = new MockDeltaManager(() => this.clientId);\n\t\tthis.deltaManager.inbound.on(\"push\", (message: ISequencedDocumentMessage) => {\n\t\t\tthis.factory.pushMessage(message);\n\t\t});\n\n\t\tconst msn = overrides?.minimumSequenceNumber;\n\t\tif (msn !== undefined) {\n\t\t\tthis.deltaManager.lastSequenceNumber = msn;\n\t\t\tthis.deltaManager.minimumSequenceNumber = msn;\n\t\t}\n\t\t// Set FluidDataStoreRuntime's deltaManager to ours so that they are in sync.\n\t\tthis.dataStoreRuntime.deltaManagerInternal = this.deltaManager;\n\t\tthis.dataStoreRuntime.quorum = factory.quorum;\n\t\tthis.dataStoreRuntime.containerRuntime = this;\n\t\t// FluidDataStoreRuntime already creates a clientId, reuse that so they are in sync.\n\t\tthis.clientId = this.dataStoreRuntime.clientId ?? uuid();\n\t\tfactory.quorum.addMember(this.clientId, {});\n\t\tthis.runtimeOptions = makeContainerRuntimeOptions(mockContainerRuntimeOptions);\n\t\tassert(\n\t\t\tthis.runtimeOptions.flushMode !== FlushMode.Immediate ||\n\t\t\t\t!this.runtimeOptions.enableGroupedBatching,\n\t\t\t\"Grouped batching is not compatible with FlushMode.Immediate\",\n\t\t);\n\t}\n\n\t/**\n\t * @deprecated use the associated datastore to create the delta connection\n\t */\n\tpublic createDeltaConnection(): MockDeltaConnection {\n\t\tconst deltaConnection = this.dataStoreRuntime.createDeltaConnection();\n\t\tthis.deltaConnections.push(deltaConnection);\n\t\treturn deltaConnection;\n\t}\n\n\tpublic finalizeIdRange(range: IdCreationRange): void {\n\t\tassert(\n\t\t\tthis.dataStoreRuntime.idCompressor !== undefined,\n\t\t\t\"Shouldn't try to finalize IdRanges without an IdCompressor\",\n\t\t);\n\t\tthis.dataStoreRuntime.idCompressor.finalizeCreationRange(range);\n\t}\n\n\t// This enables manual control over flush mode, allowing operations like rollback to be executed in a controlled environment.\n\t#manualFlushCalls: number = 0;\n\n\tpublic async runWithManualFlush(act: () => void | Promise<void>): Promise<void> {\n\t\tthis.#manualFlushCalls++;\n\t\ttry {\n\t\t\tawait act();\n\t\t} finally {\n\t\t\tthis.#manualFlushCalls--;\n\t\t}\n\t}\n\n\tpublic submit(messageContent: any, localOpMetadata?: unknown): number {\n\t\tconst clientSequenceNumber = ++this.deltaManager.clientSequenceNumber;\n\t\tconst message: IInternalMockRuntimeMessage = {\n\t\t\tcontent: messageContent,\n\t\t\tlocalOpMetadata,\n\t\t\treferenceSequenceNumber: this.deltaManager.lastSequenceNumber,\n\t\t};\n\n\t\tconst isAllocationMessage = this.isAllocationMessage(message.content);\n\n\t\tconst currentFlushMode =\n\t\t\tthis.#manualFlushCalls > 0 ? FlushMode.TurnBased : this.runtimeOptions.flushMode;\n\n\t\tswitch (currentFlushMode) {\n\t\t\tcase FlushMode.Immediate: {\n\t\t\t\tif (!isAllocationMessage) {\n\t\t\t\t\tconst idAllocationOp = this.generateIdAllocationOp();\n\t\t\t\t\tif (idAllocationOp !== undefined) {\n\t\t\t\t\t\tthis.submitInternal(idAllocationOp, clientSequenceNumber);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.submitInternal(message, clientSequenceNumber);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase FlushMode.TurnBased: {\n\t\t\t\t// Id allocation messages are directly submitted during the resubmit path\n\t\t\t\tif (isAllocationMessage) {\n\t\t\t\t\tthis.idAllocationOutbox.push(message);\n\t\t\t\t} else {\n\t\t\t\t\tthis.outbox.push(message);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported FlushMode ${this.runtimeOptions.flushMode}`);\n\t\t}\n\n\t\treturn clientSequenceNumber;\n\t}\n\n\t/**\n\t * If the message is an idAllocation message, it will finalize the id range and return true.\n\t * Otherwise, it will return false.\n\t */\n\tprotected maybeProcessIdAllocationMessage(message: ISequencedDocumentMessage): boolean {\n\t\tif (this.isAllocationMessage(message.contents)) {\n\t\t\tthis.finalizeIdRange(message.contents.contents);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate isAllocationMessage(\n\t\tmessage: any,\n\t): message is IMockContainerRuntimeIdAllocationMessage {\n\t\treturn (\n\t\t\tmessage !== undefined &&\n\t\t\t(message as IMockContainerRuntimeIdAllocationMessage).type === \"idAllocation\"\n\t\t);\n\t}\n\n\tpublic dirty(): void {}\n\tpublic get isDirty(): boolean {\n\t\treturn this.pendingMessages.length > 0;\n\t}\n\n\t/**\n\t * If flush mode is set to FlushMode.TurnBased, it will send all messages queued since the last time\n\t * this method (or `flushSomeMessages`) was called. Otherwise, calling the method does nothing.\n\t */\n\tpublic flush(): void {\n\t\tthis.flushSomeMessages(this.outbox.length);\n\t}\n\n\t/**\n\t * If flush mode is set to FlushMode.TurnBased, it will send the specified number of messages from the outbox\n\t * queued since the last time this (or `flush`) was called. Otherwise, calling the method does nothing.\n\t * This can be useful when simulating staging mode, and we only want to flush certain messages.\n\t */\n\tpublic flushSomeMessages(numMessages: number): void {\n\t\tif (!Number.isInteger(numMessages) || numMessages < 0) {\n\t\t\tthrow new Error(\"flushSomeMessages: numMessages must be a non-negative integer\");\n\t\t}\n\t\tif (this.runtimeOptions.flushMode !== FlushMode.TurnBased) {\n\t\t\treturn;\n\t\t}\n\n\t\t// This mimics the runtime behavior of the IdCompressor by generating an IdAllocationOp\n\t\t// and sticking it in front of any op that might rely on that id. It differs slightly in that\n\t\t// in the actual runtime it would get put in its own separate batch\n\t\tconst idAllocationOp = this.generateIdAllocationOp();\n\t\tif (idAllocationOp !== undefined) {\n\t\t\tthis.idAllocationOutbox.push(idAllocationOp);\n\t\t}\n\n\t\tconst actualMessagesToSubmit = this.outbox.splice(0, numMessages);\n\n\t\t// As with the runtime behavior, we need to send the idAllocationOps first\n\t\tconst messagesToSubmit = this.idAllocationOutbox.concat(actualMessagesToSubmit);\n\t\tthis.idAllocationOutbox.length = 0;\n\n\t\tlet fakeClientSequenceNumber = 1;\n\t\tmessagesToSubmit.forEach((message) => {\n\t\t\tthis.submitInternal(\n\t\t\t\tmessage,\n\t\t\t\t// When grouped batching is used, the ops within the same grouped batch will have\n\t\t\t\t// fake sequence numbers when they're ungrouped. The submit function will still\n\t\t\t\t// return the clientSequenceNumber but this will ensure that the readers will always\n\t\t\t\t// read the fake client sequence numbers.\n\t\t\t\tthis.runtimeOptions.enableGroupedBatching\n\t\t\t\t\t? fakeClientSequenceNumber++\n\t\t\t\t\t: this.deltaManager.clientSequenceNumber,\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * If flush mode is set to FlushMode.TurnBased, it will rebase the current batch by resubmitting them\n\t * to the data stores. Otherwise, calling the method does nothing.\n\t *\n\t * The method requires `runtimeOptions.enableGroupedBatching` to be enabled.\n\t */\n\tpublic rebase(): void {\n\t\tif (this.runtimeOptions.flushMode !== FlushMode.TurnBased) {\n\t\t\treturn;\n\t\t}\n\n\t\tassert(\n\t\t\tthis.runtimeOptions.enableGroupedBatching,\n\t\t\t\"Rebasing is not supported when group batching is disabled\",\n\t\t);\n\n\t\t// Only outbox needs to be rebased. The idAllocationOutbox is not rebased, as that\n\t\t// is a no-op (though resubmitting the other ops may generate new IDs)\n\t\tconst messagesToRebase = this.outbox.slice();\n\t\tthis.outbox.length = 0;\n\n\t\tthis.reSubmitMessages(messagesToRebase);\n\t}\n\n\tprotected reSubmitMessages(\n\t\tmessagesToResubmit: { content: any; localOpMetadata?: unknown }[],\n\t): void {\n\t\t// Sort the messages so that idAllocation messages are submitted first\n\t\t// When resubmitting non-idAllocation messages, they may generate new IDs.\n\t\t// This sort ensures that all ID ranges are finalized before they are\n\t\t// needed (i.e. before the messages that rely on them are processed)\n\t\t// and in the order they were allocated\n\t\tconst orderedMessages = messagesToResubmit\n\t\t\t.filter((message) => message.content.type === \"idAllocation\")\n\t\t\t.concat(messagesToResubmit.filter((message) => message.content.type !== \"idAllocation\"));\n\t\torderedMessages.forEach((pendingMessage) => {\n\t\t\tif (pendingMessage.content.type === \"idAllocation\") {\n\t\t\t\tthis.submit(pendingMessage.content, pendingMessage.localOpMetadata);\n\t\t\t} else {\n\t\t\t\tthis.dataStoreRuntime.reSubmit(\n\t\t\t\t\tpendingMessage.content,\n\t\t\t\t\tpendingMessage.localOpMetadata,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Rolls back all pending messages.\n\t * @remarks\n\t * This only works when the FlushMode is not immediate as immediate\n\t * flush mode send the ops to the mock runtime factory for processing/sequencing, and so those\n\t * ops are no longer local, so not available for rollback.\n\t */\n\tpublic rollback?(): void {\n\t\tconst messagesToRollback = this.outbox.slice().reverse();\n\t\tthis.outbox.length = 0;\n\t\tmessagesToRollback.forEach((pm) => {\n\t\t\tthis.dataStoreRuntime.rollback?.(pm.content, pm.localOpMetadata);\n\t\t});\n\t}\n\n\tprivate generateIdAllocationOp(): IInternalMockRuntimeMessage | undefined {\n\t\tconst idRange = this.dataStoreRuntime.idCompressor?.takeNextCreationRange();\n\t\tif (idRange?.ids !== undefined) {\n\t\t\tconst allocationOp: IMockContainerRuntimeIdAllocationMessage = {\n\t\t\t\ttype: \"idAllocation\",\n\t\t\t\tcontents: idRange,\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tcontent: allocationOp,\n\t\t\t\treferenceSequenceNumber: this.deltaManager.lastSequenceNumber,\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate submitInternal(\n\t\tmessage: IInternalMockRuntimeMessage,\n\t\tclientSequenceNumber: number,\n\t): void {\n\t\t// Here, we should instead push to the DeltaManager. And the DeltaManager will push things into the factory's messages\n\t\tthis.deltaManager.outbound.push([\n\t\t\t{\n\t\t\t\tclientSequenceNumber,\n\t\t\t\tcontents: message.content,\n\t\t\t\treferenceSequenceNumber:\n\t\t\t\t\tmessage.referenceSequenceNumber ?? this.deltaManager.lastSequenceNumber,\n\t\t\t\ttype: MessageType.Operation,\n\t\t\t},\n\t\t]);\n\t\tthis.addPendingMessage(message.content, message.localOpMetadata, clientSequenceNumber);\n\t}\n\n\tpublic process(message: ISequencedDocumentMessage): void {\n\t\tthis.deltaManager.process(message);\n\t\tconst [local, localOpMetadata] = this.processInternal(message);\n\n\t\tif (this.isAllocationMessage(message.contents)) {\n\t\t\tthis.finalizeIdRange(message.contents.contents);\n\t\t} else {\n\t\t\tconst messagesContent: IRuntimeMessagesContent[] = [\n\t\t\t\t{\n\t\t\t\t\tcontents: message.contents,\n\t\t\t\t\tclientSequenceNumber: message.clientSequenceNumber,\n\t\t\t\t\tlocalOpMetadata,\n\t\t\t\t},\n\t\t\t];\n\t\t\tthis.dataStoreRuntime.processMessages({ envelope: message, local, messagesContent });\n\t\t}\n\t}\n\n\tprotected addPendingMessage(\n\t\tcontent: any,\n\t\tlocalOpMetadata: unknown,\n\t\tclientSequenceNumber: number,\n\t): void {\n\t\tconst pendingMessage: IMockContainerRuntimePendingMessage = {\n\t\t\treferenceSequenceNumber: this.deltaManager.lastSequenceNumber,\n\t\t\tcontent,\n\t\t\tclientSequenceNumber,\n\t\t\tlocalOpMetadata,\n\t\t};\n\t\tthis.pendingMessages.push(pendingMessage);\n\t}\n\n\tprotected processInternal(message: ISequencedDocumentMessage): [boolean, unknown] {\n\t\tlet localOpMetadata: unknown;\n\t\tconst local = this.clientId === message.clientId;\n\t\tif (local) {\n\t\t\tconst pendingMessage = this.pendingMessages.shift();\n\t\t\tassert(\n\t\t\t\tpendingMessage?.clientSequenceNumber === message.clientSequenceNumber,\n\t\t\t\t\"Unexpected message\",\n\t\t\t);\n\t\t\tlocalOpMetadata = pendingMessage.localOpMetadata;\n\t\t}\n\t\treturn [local, localOpMetadata];\n\t}\n\n\tpublic async resolveHandle(handle: IFluidHandle): Promise<IResponse> {\n\t\treturn this.dataStoreRuntime.resolveHandle({\n\t\t\turl: toFluidHandleInternal(handle).absolutePath,\n\t\t});\n\t}\n}\n\n/**\n * Factory to create MockContainerRuntime for testing basic submitting and processing of messages.\n * This also acts as a very basic server that stores the messages from all the MockContainerRuntimes and\n * processes them when asked.\n * If test specific logic is required, extend this class and add the logic there. For an example, take a look\n * at MockContainerRuntimeFactoryForReconnection.\n * @legacy @beta\n */\nexport class MockContainerRuntimeFactory {\n\tpublic sequenceNumber = 0;\n\tpublic minSeq = new Map<string, number>();\n\tpublic readonly quorum = new MockQuorumClients();\n\t/**\n\t * The MockContainerRuntimes we produce will push messages into this queue as they are submitted.\n\t * This is playing the role of the orderer, establishing a single universal order for the messages generated.\n\t * They are held in this queue until we explicitly choose to process them, at which time they are \"broadcast\" to\n\t * each of the runtimes.\n\t */\n\tprotected messages: ISequencedDocumentMessage[] = [];\n\tprotected readonly runtimes: Set<MockContainerRuntime> = new Set();\n\n\t/**\n\t * The container runtime options which will be provided to the all runtimes\n\t * created by this factory and also drive the way the ops are processed.\n\t *\n\t * See {@link IMockContainerRuntimeOptions}\n\t */\n\tprotected readonly runtimeOptions: Required<IMockContainerRuntimeOptions>;\n\n\tconstructor(\n\t\tmockContainerRuntimeOptions: IMockContainerRuntimeOptions = defaultMockContainerRuntimeOptions,\n\t) {\n\t\tthis.runtimeOptions = makeContainerRuntimeOptions(mockContainerRuntimeOptions);\n\t}\n\n\tpublic get outstandingMessageCount(): number {\n\t\treturn this.messages.length;\n\t}\n\n\t/**\n\t * @returns a minimum sequence number for all connected clients.\n\t */\n\tpublic getMinSeq(): number {\n\t\tlet minimumSequenceNumber: number | undefined;\n\t\tfor (const [client, clientSequenceNumber] of this.minSeq) {\n\t\t\t// We have to make sure, a client is part of the quorum, when\n\t\t\t// we compute the msn. We assume that the quorum accurately\n\t\t\t// represents the currently connected clients. In some tests\n\t\t\t// for reconnects, we will remove clients from the quorum\n\t\t\t// to indicate they are currently not connected. In that case,\n\t\t\t// they must no longer contribute to the msn computation.\n\t\t\tif (this.quorum.getMember(client) !== undefined) {\n\t\t\t\tminimumSequenceNumber =\n\t\t\t\t\tminimumSequenceNumber === undefined\n\t\t\t\t\t\t? clientSequenceNumber\n\t\t\t\t\t\t: Math.min(minimumSequenceNumber, clientSequenceNumber);\n\t\t\t}\n\t\t}\n\t\treturn minimumSequenceNumber ?? 0;\n\t}\n\n\tpublic createContainerRuntime(\n\t\tdataStoreRuntime: MockFluidDataStoreRuntime,\n\t): MockContainerRuntime {\n\t\tconst containerRuntime = new MockContainerRuntime(\n\t\t\tdataStoreRuntime,\n\t\t\tthis,\n\t\t\tthis.runtimeOptions,\n\t\t);\n\t\tthis.runtimes.add(containerRuntime);\n\t\treturn containerRuntime;\n\t}\n\n\tpublic removeContainerRuntime(containerRuntime: MockContainerRuntime): void {\n\t\tthis.runtimes.delete(containerRuntime);\n\t}\n\n\tpublic pushMessage(msg: Partial<ISequencedDocumentMessage>): void {\n\t\tdeepFreeze(msg);\n\t\tif (\n\t\t\tmsg.clientId &&\n\t\t\tmsg.referenceSequenceNumber !== undefined &&\n\t\t\t!this.minSeq.has(msg.clientId)\n\t\t) {\n\t\t\tthis.minSeq.set(msg.clientId, msg.referenceSequenceNumber);\n\t\t}\n\t\tthis.messages.push(msg as ISequencedDocumentMessage);\n\t}\n\n\tprotected lastProcessedMessage: ISequencedDocumentMessage | undefined;\n\tprotected getFirstMessageToProcess(): ISequencedDocumentMessage {\n\t\tassert(this.messages.length > 0, \"The message queue should not be empty\");\n\n\t\t// Explicitly JSON clone the value to match the behavior of going thru the wire.\n\t\tconst message = JSON.parse(\n\t\t\tJSON.stringify(this.messages.shift()),\n\t\t) as ISequencedDocumentMessage;\n\n\t\t// TODO: Determine if this needs to be adapted for handling server-generated messages (which have null clientId and referenceSequenceNumber of -1).\n\t\tthis.minSeq.set(message.clientId as string, message.referenceSequenceNumber);\n\t\tif (\n\t\t\tthis.runtimeOptions.flushMode === FlushMode.Immediate ||\n\t\t\tthis.lastProcessedMessage?.clientId !== message.clientId\n\t\t) {\n\t\t\tthis.sequenceNumber++;\n\t\t}\n\t\tmessage.sequenceNumber = this.sequenceNumber;\n\t\tmessage.minimumSequenceNumber = this.getMinSeq();\n\t\tthis.lastProcessedMessage = message;\n\t\treturn message;\n\t}\n\n\tprivate processFirstMessage(): void {\n\t\tconst message = this.getFirstMessageToProcess();\n\t\tfor (const runtime of this.runtimes) {\n\t\t\truntime.process(message);\n\t\t}\n\t}\n\n\t/**\n\t * Process one of the queued messages. Throws if no messages are queued.\n\t */\n\tpublic processOneMessage(): void {\n\t\tif (this.messages.length === 0) {\n\t\t\tthrow new Error(\"Tried to process a message that did not exist\");\n\t\t}\n\t\tthis.lastProcessedMessage = undefined;\n\n\t\tthis.processFirstMessage();\n\t}\n\n\t/**\n\t * Process a given number of queued messages. Throws if there are fewer messages queued than requested.\n\t * @param count - the number of messages to process\n\t */\n\tpublic processSomeMessages(count: number): void {\n\t\tif (count > this.messages.length) {\n\t\t\tthrow new Error(\"Tried to process more messages than exist\");\n\t\t}\n\n\t\tthis.lastProcessedMessage = undefined;\n\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tthis.processFirstMessage();\n\t\t}\n\t}\n\n\t/**\n\t * Process all remaining messages in the queue.\n\t */\n\tpublic processAllMessages(): void {\n\t\tthis.lastProcessedMessage = undefined;\n\t\twhile (this.messages.length > 0) {\n\t\t\tthis.processFirstMessage();\n\t\t}\n\t}\n}\n\n/**\n * @legacy @beta\n */\nexport class MockQuorumClients implements IQuorumClients, EventEmitter {\n\tprivate readonly members: Map<string, ISequencedClient>;\n\tprivate readonly eventEmitter = new EventEmitter();\n\n\tconstructor(...members: [string, Partial<ISequencedClient>][]) {\n\t\tthis.members = new Map((members as [string, ISequencedClient][]) ?? []);\n\t}\n\n\taddMember(id: string, client: Partial<ISequencedClient>): void {\n\t\tthis.members.set(id, client as ISequencedClient);\n\t\tthis.eventEmitter.emit(\"addMember\", id, client);\n\t}\n\n\tremoveMember(id: string): void {\n\t\tif (this.members.delete(id)) {\n\t\t\tthis.eventEmitter.emit(\"removeMember\", id);\n\t\t}\n\t}\n\n\tgetMembers(): Map<string, ISequencedClient> {\n\t\t// Implementation always generates a new Map.\n\t\t// Mock should as well in case any callers rely on being able to modify\n\t\t// the returned Map.\n\t\treturn new Map(this.members);\n\t}\n\tgetMember(clientId: string): ISequencedClient | undefined {\n\t\treturn this.getMembers().get(clientId);\n\t}\n\tdisposed: boolean = false;\n\n\tdispose(): void {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\n\taddListener(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\ton(event: string | number, listener: (...args: any[]) => void): this {\n\t\tswitch (event) {\n\t\t\tcase \"afterOn\":\n\t\t\t\tthis.eventEmitter.on(event, listener);\n\t\t\t\treturn this;\n\n\t\t\tcase \"addMember\":\n\t\t\tcase \"removeMember\":\n\t\t\t\tthis.eventEmitter.on(event, listener);\n\t\t\t\tthis.eventEmitter.emit(\"afterOn\", event);\n\t\t\t\treturn this;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Method not implemented.\");\n\t\t}\n\t}\n\tonce(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tprependListener(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tprependOnceListener(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tremoveListener(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthis.eventEmitter.removeListener(event, listener);\n\t\treturn this;\n\t}\n\toff(event: string | number, listener: (...args: any[]) => void): this {\n\t\tthis.eventEmitter.off(event, listener);\n\t\treturn this;\n\t}\n\tremoveAllListeners(event?: string | number | undefined): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tsetMaxListeners(n: number): this {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tgetMaxListeners(): number {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tlisteners(event: string | number): ReturnType<EventEmitter[\"listeners\"]> {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\trawListeners(event: string | number): ReturnType<EventEmitter[\"rawListeners\"]> {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\temit(event: string | number, ...args: any[]): boolean {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\teventNames(): (string | number)[] {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n\tlistenerCount(type: string | number): number {\n\t\tthrow new Error(\"Method not implemented.\");\n\t}\n}\n\n/**\n * @legacy @beta\n */\nexport class MockAudience\n\textends TypedEventEmitter<IAudienceEvents>\n\timplements IAudienceOwner\n{\n\tprivate readonly audienceMembers: Map<string, IClient>;\n\tprivate _currentClientId: string | undefined;\n\n\tpublic constructor() {\n\t\tsuper();\n\t\tthis.audienceMembers = new Map<string, IClient>();\n\t}\n\n\tpublic addMember(clientId: string, member: IClient): void {\n\t\tthis.audienceMembers.set(clientId, member);\n\t\tthis.emit(\"addMember\", clientId, member);\n\t}\n\n\tpublic removeMember(clientId: string): boolean {\n\t\tconst member = this.audienceMembers.get(clientId);\n\t\tconst deleteResult = this.audienceMembers.delete(clientId);\n\t\tthis.emit(\"removeMember\", clientId, member);\n\t\treturn deleteResult;\n\t}\n\n\tpublic getMembers(): Map<string, IClient> {\n\t\treturn new Map<string, IClient>(this.audienceMembers.entries());\n\t}\n\tpublic getMember(clientId: string): IClient | undefined {\n\t\treturn this.audienceMembers.get(clientId);\n\t}\n\n\tpublic getSelf(): ISelf | undefined {\n\t\treturn this._currentClientId === undefined\n\t\t\t? undefined\n\t\t\t: {\n\t\t\t\t\tclientId: this._currentClientId,\n\t\t\t\t};\n\t}\n\n\tpublic setCurrentClientId(clientId: string): void {\n\t\tif (this._currentClientId !== clientId) {\n\t\t\tconst oldId = this._currentClientId;\n\t\t\tthis._currentClientId = clientId;\n\t\t\tthis.emit(\n\t\t\t\t\"selfChanged\",\n\t\t\t\toldId === undefined ? undefined : ({ clientId: oldId } satisfies ISelf),\n\t\t\t\t{ clientId } satisfies ISelf,\n\t\t\t);\n\t\t}\n\t}\n}\n\nconst attachStatesToComparableNumbers = {\n\t[AttachState.Detached]: 0,\n\t[AttachState.Attaching]: 1,\n\t[AttachState.Attached]: 2,\n} as const;\n\n/**\n * Mock implementation of IRuntime for testing that does nothing\n * @legacy @beta\n * @sealed\n */\nexport class MockFluidDataStoreRuntime\n\textends EventEmitter\n\timplements IFluidDataStoreRuntime, IFluidDataStoreChannel, IFluidHandleContext\n{\n\tconstructor(overrides?: {\n\t\tclientId?: string;\n\t\tentryPoint?: IFluidHandle<FluidObject>;\n\t\tid?: string;\n\t\tlogger?: ITelemetryBaseLogger;\n\t\tidCompressor?: IIdCompressor & IIdCompressorCore;\n\t\tattachState?: AttachState;\n\t\tregistry?: readonly IChannelFactory[];\n\t\tminVersionForCollab?: MinimumVersionForCollab;\n\t}) {\n\t\tsuper();\n\t\tthis.clientId = overrides?.clientId ?? uuid();\n\t\tthis.entryPoint = toFluidHandleInternal(\n\t\t\toverrides?.entryPoint ?? new MockHandle(null as unknown as FluidObject, \"\", \"\"),\n\t\t);\n\t\tthis.id = overrides?.id ?? uuid();\n\t\tconst childLoggerProps: Parameters<typeof createChildLogger>[0] = {\n\t\t\tnamespace: \"fluid:MockFluidDataStoreRuntime\",\n\t\t};\n\t\tconst logger = overrides?.logger;\n\t\tif (logger !== undefined) {\n\t\t\tchildLoggerProps.logger = logger;\n\t\t}\n\t\tthis.logger = createChildLogger(childLoggerProps);\n\t\tthis.idCompressor = overrides?.idCompressor;\n\t\tthis._attachState = overrides?.attachState ?? AttachState.Attached;\n\n\t\tconst registry = overrides?.registry;\n\t\tif (registry) {\n\t\t\tthis.registry = new Map(registry.map((factory) => [factory.type, factory]));\n\t\t}\n\n\t\tthis.minVersionForCollab = overrides?.minVersionForCollab;\n\t}\n\n\tprivate readonly: boolean = false;\n\tpublic readonly isReadOnly = (): boolean => this.readonly;\n\n\tpublic readonly entryPoint: IFluidHandleInternal<FluidObject>;\n\n\t/**\n\t * @see IFluidDataStoreRuntimeInternalConfig.minVersionForCollab\n\t */\n\tpublic readonly minVersionForCollab: MinimumVersionForCollab | undefined;\n\n\tpublic get IFluidHandleContext(): IFluidHandleContext {\n\t\treturn this;\n\t}\n\tpublic get rootRoutingContext(): IFluidHandleContext {\n\t\treturn this;\n\t}\n\tpublic get channelsRoutingContext(): IFluidHandleContext {\n\t\treturn this;\n\t}\n\tpublic get objectsRoutingContext(): IFluidHandleContext {\n\t\treturn this;\n\t}\n\n\tpublic readonly documentId: string = undefined as any;\n\tpublic readonly id: string;\n\tpublic readonly existing: boolean = undefined as any;\n\tpublic options: Record<string | number, any> = {};\n\tpublic clientId: string;\n\tpublic readonly path = \"\";\n\tpublic readonly connected = true;\n\tpublic deltaManagerInternal = new MockDeltaManager();\n\tpublic get deltaManager(): IDeltaManagerErased {\n\t\treturn toDeltaManagerErased(this.deltaManagerInternal);\n\t}\n\tpublic readonly loader: ILoader = undefined as any;\n\tpublic readonly logger: ITelemetryBaseLogger;\n\tpublic quorum = new MockQuorumClients();\n\tprivate readonly audience = new MockAudience();\n\tpublic containerRuntime?: MockContainerRuntime;\n\tpublic idCompressor: (IIdCompressor & IIdCompressorCore) | undefined;\n\tprivate readonly deltaConnections: MockDeltaConnection[] = [];\n\tprivate readonly registry?: ReadonlyMap<string, IChannelFactory>;\n\n\tpublic createDeltaConnection(): MockDeltaConnection {\n\t\tconst deltaConnection = new MockDeltaConnection(\n\t\t\t(messageContent: any, localOpMetadata: unknown): number =>\n\t\t\t\tthis.submitMessageInternal(messageContent, localOpMetadata),\n\t\t\t(): void => this.setChannelDirty(),\n\t\t);\n\t\tthis.deltaConnections.push(deltaConnection);\n\t\treturn deltaConnection;\n\t}\n\n\tpublic get absolutePath(): string {\n\t\treturn `/${this.id}`;\n\t}\n\n\t/**\n\t * @deprecated Use `attachState` instead\n\t *\n\t * @privateRemarks Also remove the setter when this is removed. setters don't get their own doc tags.\n\t */\n\tpublic get local(): boolean {\n\t\treturn !this.isAttached;\n\t}\n\tpublic set local(local: boolean) {\n\t\t// this does not validate attach state orders, or fire events to maintain\n\t\t// the existing behavior. due to this, this method is deprecated and will\n\t\t// be removed\n\t\tthis._attachState = local ? AttachState.Detached : AttachState.Attached;\n\t}\n\n\tprivate _disposed = false;\n\n\tpublic get disposed(): boolean {\n\t\treturn this._disposed;\n\t}\n\n\tpublic dispose(): void {\n\t\tthis._disposed = true;\n\t}\n\n\tpublic async getChannel(id: string): Promise<IChannel> {\n\t\treturn null as any as IChannel;\n\t}\n\tpublic createChannel(id: string | undefined, type: string): IChannel {\n\t\tif (this.registry === undefined) {\n\t\t\t// This preserves the behavior of this mock from before registry support was added.\n\t\t\treturn null as any as IChannel;\n\t\t}\n\n\t\tconst factory = this.registry.get(type);\n\t\tassert(factory !== undefined, \"type missing from registry\");\n\t\treturn factory.create(this, id ?? uuid());\n\t}\n\n\t/**\n\t * @remarks This is for internal use only.\n\t */\n\tpublic ILayerCompatDetails?: unknown;\n\n\tpublic addChannel(channel: IChannel): void {}\n\n\tpublic get isAttached(): boolean {\n\t\treturn this.attachState !== AttachState.Detached;\n\t}\n\n\tprivate _attachState: AttachState;\n\tpublic get attachState(): AttachState {\n\t\treturn this._attachState;\n\t}\n\n\tpublic get visibilityState(): VisibilityState {\n\t\treturn this.isAttached ? VisibilityState.GloballyVisible : VisibilityState.NotVisible;\n\t}\n\n\tpublic bindChannel(channel: IChannel): void {\n\t\treturn;\n\t}\n\n\tpublic attachGraph(): void {\n\t\treturn;\n\t}\n\n\tpublic makeVisibleAndAttachGraph(): void {\n\t\treturn;\n\t}\n\n\tpublic bind(handle: IFluidHandle): void {\n\t\treturn;\n\t}\n\n\tpublic getQuorum(): IQuorumClients {\n\t\treturn this.quorum;\n\t}\n\n\tpublic getAudience(): IAudience {\n\t\treturn this.audience;\n\t}\n\n\tpublic save(message: string): void {\n\t\treturn;\n\t}\n\n\tpublic async close(): Promise<void> {\n\t\treturn;\n\t}\n\n\tpublic async uploadBlob(blob: ArrayBufferLike): Promise<IFluidHandle<ArrayBufferLike>> {\n\t\treturn null as any as IFluidHandle<ArrayBufferLike>;\n\t}\n\n\tpublic async getBlob(blobId: string): Promise<any> {\n\t\treturn null;\n\t}\n\n\tprivate submitMessageInternal(messageContent: any, localOpMetadata: unknown): number {\n\t\tassert(\n\t\t\tthis.containerRuntime !== undefined,\n\t\t\t\"The container runtime has not been initialized\",\n\t\t);\n\t\treturn this.containerRuntime.submit(messageContent, localOpMetadata);\n\t}\n\n\tprivate setChannelDirty(): void {\n\t\tassert(\n\t\t\tthis.containerRuntime !== undefined,\n\t\t\t\"The container runtime has not been initialized\",\n\t\t);\n\t\treturn this.containerRuntime.dirty();\n\t}\n\n\tpublic submitSignal: IFluidDataStoreRuntime[\"submitSignal\"] = () => null;\n\n\tpublic processMessages(messageCollection: IRuntimeMessageCollection): void {\n\t\tif (this.disposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.deltaConnections.forEach((dc) => {\n\t\t\tdc.processMessages(messageCollection);\n\t\t});\n\t}\n\n\tpublic processSignal(message: any, local: boolean): void {\n\t\treturn;\n\t}\n\n\tpublic updateMinSequenceNumber(value: number): void {\n\t\treturn;\n\t}\n\n\tpublic setConnectionState(connected: boolean, clientId?: string): void {\n\t\tif (connected && clientId !== undefined) {\n\t\t\tthis.clientId = clientId;\n\t\t}\n\t\tthis.deltaConnections.forEach((dc) => dc.setConnectionState(connected));\n\t\treturn;\n\t}\n\n\tpublic notifyReadOnlyState(readonly: boolean): void {\n\t\tthis.readonly = readonly;\n\t}\n\n\tpublic async resolveHandle(request: IRequest): Promise<IResponse> {\n\t\tif (request.url !== undefined) {\n\t\t\treturn {\n\t\t\t\tstatus: 200,\n\t\t\t\tmimeType: \"fluid/object\",\n\t\t\t\tvalue: request.url,\n\t\t\t};\n\t\t}\n\t\treturn this.request(request);\n\t}\n\n\tpublic async request(request: IRequest): Promise<IResponse> {\n\t\treturn null as any as IResponse;\n\t}\n\n\tpublic async summarize(\n\t\tfullTree?: boolean,\n\t\ttrackState?: boolean,\n\t): Promise<ISummaryTreeWithStats> {\n\t\tconst stats = mergeStats();\n\t\tstats.treeNodeCount++;\n\t\treturn {\n\t\t\tsummary: {\n\t\t\t\ttype: SummaryType.Tree,\n\t\t\t\ttree: {},\n\t\t\t},\n\t\t\tstats,\n\t\t};\n\t}\n\n\tpublic async getGCData(): Promise<IGarbageCollectionData> {\n\t\treturn {\n\t\t\tgcNodes: {},\n\t\t};\n\t}\n\n\tpublic updateUsedRoutes(usedRoutes: string[]): void {}\n\n\tpublic getAttachSnapshot(): ITreeEntry[] {\n\t\treturn [];\n\t}\n\n\tpublic getAttachSummary(): ISummaryTreeWithStats {\n\t\tconst stats = mergeStats();\n\t\tstats.treeNodeCount++;\n\t\treturn {\n\t\t\tsummary: {\n\t\t\t\ttype: SummaryType.Tree,\n\t\t\t\ttree: {},\n\t\t\t},\n\t\t\tstats,\n\t\t};\n\t}\n\n\tpublic getAttachGCData(\n\t\ttelemetryContext?: ITelemetryContext | undefined,\n\t): IGarbageCollectionData {\n\t\treturn {\n\t\t\tgcNodes: {},\n\t\t};\n\t}\n\n\tpublic setAttachState(attachState: AttachState.Attaching | AttachState.Attached): void {\n\t\tif (attachState === this._attachState) {\n\t\t\treturn;\n\t\t}\n\t\tconst proposedState = attachStatesToComparableNumbers[attachState];\n\t\tconst startingState = attachStatesToComparableNumbers[this._attachState];\n\t\tif (proposedState < startingState) {\n\t\t\tthrow new Error(`cannot transition back to ${attachState} from ${this.attachState}`);\n\t\t}\n\n\t\tif (\n\t\t\tstartingState < attachStatesToComparableNumbers[AttachState.Attaching] &&\n\t\t\tproposedState >= attachStatesToComparableNumbers[AttachState.Attaching]\n\t\t) {\n\t\t\tthis._attachState = AttachState.Attaching;\n\t\t\tthis.emit(\"attaching\");\n\t\t}\n\n\t\tif (\n\t\t\tstartingState < attachStatesToComparableNumbers[AttachState.Attached] &&\n\t\t\tproposedState >= attachStatesToComparableNumbers[AttachState.Attached]\n\t\t) {\n\t\t\tthis._attachState = AttachState.Attached;\n\t\t\tthis.emit(\"attached\");\n\t\t}\n\t}\n\n\tpublic async waitAttached(): Promise<void> {\n\t\treturn;\n\t}\n\n\tpublic async requestDataStore(request: IRequest): Promise<IResponse> {\n\t\treturn null as any as IResponse;\n\t}\n\n\tpublic reSubmit(content: any, localOpMetadata: unknown, squash: boolean): void {\n\t\tthis.deltaConnections.forEach((dc) => {\n\t\t\tdc.reSubmit(content, localOpMetadata, squash);\n\t\t});\n\t}\n\n\tpublic async applyStashedOp(content: any): Promise<unknown> {\n\t\treturn this.deltaConnections.map((dc) => dc.applyStashedOp(content))[0];\n\t}\n\n\tpublic rollback?(message: any, localOpMetadata: unknown): void {\n\t\tthis.deltaConnections.forEach((dc) => {\n\t\t\tdc.rollback?.(message, localOpMetadata);\n\t\t});\n\t}\n}\n\n/**\n * Mock implementation of IDeltaConnection\n * @internal\n */\nexport class MockEmptyDeltaConnection implements IDeltaConnection {\n\tpublic connected = false;\n\n\tpublic attach(handler): void {}\n\n\tpublic submit(messageContent: any): number {\n\t\tassert(false, \"Throw submit error on mock empty delta connection\");\n\t}\n\n\tpublic dirty(): void {}\n}\n\n/**\n * Mock implementation of IChannelStorageService\n * @legacy @beta\n */\nexport class MockObjectStorageService implements IChannelStorageService {\n\tprivate readonly snapshotTree: ISnapshotTree;\n\n\t/**\n\t * @param contents - Key value pairs that represent a snapshot.\n\t * The keys are the path to the contents of a blob in the snapshot tree. The corresponding values are its contents.\n\t *\n\t * @remarks\n\t * The snapshot contents must not change after it has been passed here as the changes will not be reflected\n\t * in the snapshot tree retrieved via `getSnapshotTree`.\n\t */\n\tpublic constructor(private readonly contents: { [key: string]: string }) {\n\t\tthis.snapshotTree = createSnapshotTreeFromContents(contents);\n\t}\n\n\tpublic async readBlob(path: string): Promise<ArrayBufferLike> {\n\t\treturn stringToBuffer(this.contents[path], \"utf8\");\n\t}\n\tpublic async contains(path: string): Promise<boolean> {\n\t\treturn this.contents[path] !== undefined;\n\t}\n\tpublic async list(path: string): Promise<string[]> {\n\t\tconst pathPartsLength = getNormalizedObjectStoragePathParts(path).length;\n\t\treturn Object.keys(this.contents).filter(\n\t\t\t(key) => key.startsWith(path) && key.split(\"/\").length === pathPartsLength + 1,\n\t\t);\n\t}\n\n\tpublic getSnapshotTree(): ISnapshotTree {\n\t\treturn this.snapshotTree;\n\t}\n}\n\n/**\n * Mock implementation of IChannelServices\n * @legacy @beta\n */\nexport class MockSharedObjectServices implements IChannelServices {\n\tpublic static createFromSummary(summaryTree: ISummaryTree): MockSharedObjectServices {\n\t\tconst contents: { [key: string]: string } = {};\n\t\tsetContentsFromSummaryTree(summaryTree, \"\", contents);\n\t\treturn new MockSharedObjectServices(contents);\n\t}\n\n\tpublic deltaConnection: IDeltaConnection = new MockEmptyDeltaConnection();\n\tpublic objectStorage: MockObjectStorageService;\n\n\tpublic constructor(contents: { [key: string]: string }) {\n\t\tthis.objectStorage = new MockObjectStorageService(contents);\n\t}\n}\n\n/**\n * Populate the given `contents` object with all paths/values in a summary tree\n */\nfunction setContentsFromSummaryTree(\n\t{ tree }: ISummaryTree,\n\tpath: string,\n\tcontents: { [key: string]: string },\n): void {\n\tfor (const [key, value] of Object.entries(tree)) {\n\t\tswitch (value.type) {\n\t\t\tcase SummaryType.Blob:\n\t\t\t\tassert(\n\t\t\t\t\ttypeof value.content === \"string\",\n\t\t\t\t\t\"Unexpected blob value on mock createFromSummary\",\n\t\t\t\t);\n\t\t\t\tcontents[`${path}${key}`] = value.content;\n\t\t\t\tbreak;\n\t\t\tcase SummaryType.Tree:\n\t\t\t\tsetContentsFromSummaryTree(value, `${path}${key}/`, contents);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tassert(false, \"Unexpected summary type on mock createFromSummary\");\n\t\t}\n\t}\n}\n\n/**\n * Create an ISnapshotTree from contents object (reverse of setContentsFromSummaryTree)\n * @param contents - Object with path/value pairs\n * @returns ISnapshotTree representing the hierarchical structure\n */\nexport function createSnapshotTreeFromContents(contents: {\n\t[key: string]: string;\n}): ISnapshotTree {\n\tconst tree: ISnapshotTree = {\n\t\ttrees: {},\n\t\tblobs: {},\n\t};\n\n\tfor (const [path, content] of Object.entries(contents)) {\n\t\t// Remove empty strings to handle leading, trailing, or consecutive slashes in the path.\n\t\tconst pathParts = path.split(\"/\").filter((part) => part !== \"\");\n\t\tlet currentTree = tree;\n\n\t\t// Navigate/create the tree structure for all but the last part\n\t\tfor (let i = 0; i < pathParts.length - 1; i++) {\n\t\t\tconst part = pathParts[i];\n\t\t\tif (!currentTree.trees[part]) {\n\t\t\t\tcurrentTree.trees[part] = {\n\t\t\t\t\ttrees: {},\n\t\t\t\t\tblobs: {},\n\t\t\t\t};\n\t\t\t}\n\t\t\tcurrentTree = currentTree.trees[part];\n\t\t}\n\n\t\t// Add the blob at the final location\n\t\tconst blobName = pathParts[pathParts.length - 1];\n\t\tif (blobName !== undefined) {\n\t\t\tcurrentTree.blobs[blobName] = content;\n\t\t}\n\t}\n\n\treturn tree;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"validateAssertionError.d.ts","sourceRoot":"","sources":["../src/validateAssertionError.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACrC,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAC/B,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAmBxB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAE5F;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAE3F;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC5B,gBAAgB,EAAE,MAAM,GAAG,MAAM,EACjC,SAAS,GAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,KAAa,GAC9C,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAaxB"}
1
+ {"version":3,"file":"validateAssertionError.d.ts","sourceRoot":"","sources":["../src/validateAssertionError.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACrC,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAC/B,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAmBxB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAE5F;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAE3F;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC5B,gBAAgB,EAAE,MAAM,GAAG,MAAM,EACjC,SAAS,GAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,KAAa,GAC9C,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAaxB"}
@@ -2,8 +2,8 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { UsageError } from "@fluidframework/telemetry-utils/internal";
6
5
  import { assert } from "@fluidframework/core-utils/internal";
6
+ import { UsageError } from "@fluidframework/telemetry-utils/internal";
7
7
  import { shortCodeMap } from "./assertionShortCodesMap.js";
8
8
  /**
9
9
  * Validates that an error thrown by our `assert()` function has the expected message, or a
@@ -1 +1 @@
1
- {"version":3,"file":"validateAssertionError.js","sourceRoot":"","sources":["../src/validateAssertionError.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,sBAAsB,CACrC,gBAAiC;IAEjC,OAAO,CAAC,KAAY,EAAE,EAAE;QACvB,iHAAiH;QACjH,oIAAoI;QACpI,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,iBAAiB,IAAI,YAAY,EAAE,CAAC;YACvC,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnC,IAAI,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,CAAC,EAAE,CAAC;YACnD,6GAA6G;YAC7G,oGAAoG;YACpG,MAAM,OAAO,GAAG,wCAAwC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,MAAM,SAAS,KAAK,eAAe,gBAAgB,EAAE,CAAC;YAC5K,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,gBAAiC;IACnE,OAAO,aAAa,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,gBAAiC;IAClE,OAAO,aAAa,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC5B,gBAAiC,EACjC,YAA2C,KAAK;IAEhD,OAAO,CAAC,KAAY,EAAE,EAAE;QACvB,MAAM,CACL,KAAK,YAAY,SAAS,EAC1B,8BAA8B,SAAS,CAAC,IAAI,eAAe,KAAK,GAAG,CACnE,CAAC;QACF,IAAI,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CACd,cAAc,SAAS,CAAC,IAAI,oBAAoB,KAAK,CAAC,OAAO,eAAe,gBAAgB,EAAE,CAC9F,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,aAAqB,EAAE,gBAAiC;IACjF,OAAO,OAAO,gBAAgB,KAAK,QAAQ;QAC1C,CAAC,CAAC,aAAa,KAAK,gBAAgB;QACpC,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC1C,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { UsageError } from \"@fluidframework/telemetry-utils/internal\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport { shortCodeMap } from \"./assertionShortCodesMap.js\";\n\n/**\n * Validates that an error thrown by our `assert()` function has the expected message, or a\n * short code that corresponds to that message.\n *\n * @remarks\n * The main use case for this is so tests that expect specific assert() calls to fail can\n * always do comparisons based on the original string message, and work whether they run\n * before the policy-check tool replaces those strings with short codes, or after. Note that\n * it either returns true or throws an error (the behavior expected by NodeJS' `assert.throws()`).\n *\n * @param expectedErrorMessage - The message that the error object should match (either explicitly,\n * or because it contains a short code which maps to that message).\n * @returns an error validation function suitable for use with NodeJS's `assert.throws()`.\n * @internal\n */\nexport function validateAssertionError(\n\texpectedErrorMsg: string | RegExp,\n): (error: Error) => true {\n\treturn (error: Error) => {\n\t\t// Asserts with custom debugMessageBuilder put extra content on the second line of the message, even when tagged.\n\t\t// Thus extract the first line, which will be the assert tag if there is one, and replace it with the message from the shortCodeMap.\n\t\tconst split = error.message.split(\"\\n\");\n\t\tconst possibleShortCode = split[0].trim();\n\t\tif (possibleShortCode in shortCodeMap) {\n\t\t\tsplit[0] = shortCodeMap[possibleShortCode];\n\t\t}\n\t\tconst mappedMsg = split.join(\"\\n\");\n\n\t\tif (testErrorMessage(mappedMsg, expectedErrorMsg)) {\n\t\t\t// This throws an Error instead of an AssertionError because AssertionError would require a dependency on the\n\t\t\t// node assert library, which we don't want to do for this library because it's used in the browser.\n\t\t\tconst message = `Unexpected assertion thrown\\nActual: ${error.message === mappedMsg ? error.message : `${error.message} ('${mappedMsg}')}`}\\nExpected: ${expectedErrorMsg}`;\n\t\t\tthrow new Error(message);\n\t\t}\n\t\treturn true;\n\t};\n}\n\n/**\n * {@link validateError} for `UsageError`.\n * @internal\n */\nexport function validateUsageError(expectedErrorMsg: string | RegExp): (error: Error) => true {\n\treturn validateError(expectedErrorMsg, UsageError);\n}\n\n/**\n * {@link validateError} for `TypeError`.\n * @internal\n */\nexport function validateTypeError(expectedErrorMsg: string | RegExp): (error: Error) => true {\n\treturn validateError(expectedErrorMsg, TypeError);\n}\n\n/**\n * Validates that a specific kind of error was thrown with the expected message.\n * @remarks\n * Intended for use with NodeJS's `assert.throws`.\n * @see {@link validateAssertionError}, {@link validateUsageError}, {@link validateTypeError} for more specialized versions.\n * @returns an error validation function suitable for use with NodeJS's `assert.throws()`.\n * @internal\n */\nexport function validateError(\n\texpectedErrorMsg: string | RegExp,\n\terrorType: new (...args: any[]) => Error = Error,\n): (error: Error) => true {\n\treturn (error: Error) => {\n\t\tassert(\n\t\t\terror instanceof errorType,\n\t\t\t`Expected an error of type \"${errorType.name}\", but got \"${error}\"`,\n\t\t);\n\t\tif (testErrorMessage(error.message, expectedErrorMsg)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unexpected ${errorType.name} thrown\\nActual: ${error.message}\\nExpected: ${expectedErrorMsg}`,\n\t\t\t);\n\t\t}\n\t\treturn true;\n\t};\n}\n\nfunction testErrorMessage(actualMessage: string, expectedErrorMsg: string | RegExp): boolean {\n\treturn typeof expectedErrorMsg === \"string\"\n\t\t? actualMessage !== expectedErrorMsg\n\t\t: !expectedErrorMsg.test(actualMessage);\n}\n"]}
1
+ {"version":3,"file":"validateAssertionError.js","sourceRoot":"","sources":["../src/validateAssertionError.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,sBAAsB,CACrC,gBAAiC;IAEjC,OAAO,CAAC,KAAY,EAAE,EAAE;QACvB,iHAAiH;QACjH,oIAAoI;QACpI,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,iBAAiB,IAAI,YAAY,EAAE,CAAC;YACvC,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnC,IAAI,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,CAAC,EAAE,CAAC;YACnD,6GAA6G;YAC7G,oGAAoG;YACpG,MAAM,OAAO,GAAG,wCAAwC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,MAAM,SAAS,KAAK,eAAe,gBAAgB,EAAE,CAAC;YAC5K,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,gBAAiC;IACnE,OAAO,aAAa,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,gBAAiC;IAClE,OAAO,aAAa,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC5B,gBAAiC,EACjC,YAA2C,KAAK;IAEhD,OAAO,CAAC,KAAY,EAAE,EAAE;QACvB,MAAM,CACL,KAAK,YAAY,SAAS,EAC1B,8BAA8B,SAAS,CAAC,IAAI,eAAe,KAAK,GAAG,CACnE,CAAC;QACF,IAAI,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CACd,cAAc,SAAS,CAAC,IAAI,oBAAoB,KAAK,CAAC,OAAO,eAAe,gBAAgB,EAAE,CAC9F,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,aAAqB,EAAE,gBAAiC;IACjF,OAAO,OAAO,gBAAgB,KAAK,QAAQ;QAC1C,CAAC,CAAC,aAAa,KAAK,gBAAgB;QACpC,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC1C,CAAC","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 { UsageError } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { shortCodeMap } from \"./assertionShortCodesMap.js\";\n\n/**\n * Validates that an error thrown by our `assert()` function has the expected message, or a\n * short code that corresponds to that message.\n *\n * @remarks\n * The main use case for this is so tests that expect specific assert() calls to fail can\n * always do comparisons based on the original string message, and work whether they run\n * before the policy-check tool replaces those strings with short codes, or after. Note that\n * it either returns true or throws an error (the behavior expected by NodeJS' `assert.throws()`).\n *\n * @param expectedErrorMessage - The message that the error object should match (either explicitly,\n * or because it contains a short code which maps to that message).\n * @returns an error validation function suitable for use with NodeJS's `assert.throws()`.\n * @internal\n */\nexport function validateAssertionError(\n\texpectedErrorMsg: string | RegExp,\n): (error: Error) => true {\n\treturn (error: Error) => {\n\t\t// Asserts with custom debugMessageBuilder put extra content on the second line of the message, even when tagged.\n\t\t// Thus extract the first line, which will be the assert tag if there is one, and replace it with the message from the shortCodeMap.\n\t\tconst split = error.message.split(\"\\n\");\n\t\tconst possibleShortCode = split[0].trim();\n\t\tif (possibleShortCode in shortCodeMap) {\n\t\t\tsplit[0] = shortCodeMap[possibleShortCode];\n\t\t}\n\t\tconst mappedMsg = split.join(\"\\n\");\n\n\t\tif (testErrorMessage(mappedMsg, expectedErrorMsg)) {\n\t\t\t// This throws an Error instead of an AssertionError because AssertionError would require a dependency on the\n\t\t\t// node assert library, which we don't want to do for this library because it's used in the browser.\n\t\t\tconst message = `Unexpected assertion thrown\\nActual: ${error.message === mappedMsg ? error.message : `${error.message} ('${mappedMsg}')}`}\\nExpected: ${expectedErrorMsg}`;\n\t\t\tthrow new Error(message);\n\t\t}\n\t\treturn true;\n\t};\n}\n\n/**\n * {@link validateError} for `UsageError`.\n * @internal\n */\nexport function validateUsageError(expectedErrorMsg: string | RegExp): (error: Error) => true {\n\treturn validateError(expectedErrorMsg, UsageError);\n}\n\n/**\n * {@link validateError} for `TypeError`.\n * @internal\n */\nexport function validateTypeError(expectedErrorMsg: string | RegExp): (error: Error) => true {\n\treturn validateError(expectedErrorMsg, TypeError);\n}\n\n/**\n * Validates that a specific kind of error was thrown with the expected message.\n * @remarks\n * Intended for use with NodeJS's `assert.throws`.\n * @see {@link validateAssertionError}, {@link validateUsageError}, {@link validateTypeError} for more specialized versions.\n * @returns an error validation function suitable for use with NodeJS's `assert.throws()`.\n * @internal\n */\nexport function validateError(\n\texpectedErrorMsg: string | RegExp,\n\terrorType: new (...args: any[]) => Error = Error,\n): (error: Error) => true {\n\treturn (error: Error) => {\n\t\tassert(\n\t\t\terror instanceof errorType,\n\t\t\t`Expected an error of type \"${errorType.name}\", but got \"${error}\"`,\n\t\t);\n\t\tif (testErrorMessage(error.message, expectedErrorMsg)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unexpected ${errorType.name} thrown\\nActual: ${error.message}\\nExpected: ${expectedErrorMsg}`,\n\t\t\t);\n\t\t}\n\t\treturn true;\n\t};\n}\n\nfunction testErrorMessage(actualMessage: string, expectedErrorMsg: string | RegExp): boolean {\n\treturn typeof expectedErrorMsg === \"string\"\n\t\t? actualMessage !== expectedErrorMsg\n\t\t: !expectedErrorMsg.test(actualMessage);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/test-runtime-utils",
3
- "version": "2.74.0",
3
+ "version": "2.80.0",
4
4
  "description": "Fluid runtime test utilities",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -69,44 +69,44 @@
69
69
  "temp-directory": "nyc/.nyc_output"
70
70
  },
71
71
  "dependencies": {
72
- "@fluid-internal/client-utils": "~2.74.0",
73
- "@fluidframework/container-definitions": "~2.74.0",
74
- "@fluidframework/container-runtime-definitions": "~2.74.0",
75
- "@fluidframework/core-interfaces": "~2.74.0",
76
- "@fluidframework/core-utils": "~2.74.0",
77
- "@fluidframework/datastore-definitions": "~2.74.0",
78
- "@fluidframework/driver-definitions": "~2.74.0",
79
- "@fluidframework/driver-utils": "~2.74.0",
80
- "@fluidframework/id-compressor": "~2.74.0",
81
- "@fluidframework/routerlicious-driver": "~2.74.0",
82
- "@fluidframework/runtime-definitions": "~2.74.0",
83
- "@fluidframework/runtime-utils": "~2.74.0",
84
- "@fluidframework/telemetry-utils": "~2.74.0",
72
+ "@fluid-internal/client-utils": "~2.80.0",
73
+ "@fluidframework/container-definitions": "~2.80.0",
74
+ "@fluidframework/container-runtime-definitions": "~2.80.0",
75
+ "@fluidframework/core-interfaces": "~2.80.0",
76
+ "@fluidframework/core-utils": "~2.80.0",
77
+ "@fluidframework/datastore-definitions": "~2.80.0",
78
+ "@fluidframework/driver-definitions": "~2.80.0",
79
+ "@fluidframework/driver-utils": "~2.80.0",
80
+ "@fluidframework/id-compressor": "~2.80.0",
81
+ "@fluidframework/routerlicious-driver": "~2.80.0",
82
+ "@fluidframework/runtime-definitions": "~2.80.0",
83
+ "@fluidframework/runtime-utils": "~2.80.0",
84
+ "@fluidframework/telemetry-utils": "~2.80.0",
85
85
  "jsrsasign": "^11.0.0",
86
86
  "uuid": "^11.1.0"
87
87
  },
88
88
  "devDependencies": {
89
- "@arethetypeswrong/cli": "^0.17.1",
89
+ "@arethetypeswrong/cli": "^0.18.2",
90
90
  "@biomejs/biome": "~1.9.3",
91
- "@fluid-internal/mocha-test-setup": "~2.74.0",
92
- "@fluid-tools/build-cli": "^0.61.0",
91
+ "@fluid-internal/mocha-test-setup": "~2.80.0",
92
+ "@fluid-tools/build-cli": "^0.62.0",
93
93
  "@fluidframework/build-common": "^2.0.3",
94
- "@fluidframework/build-tools": "^0.61.0",
95
- "@fluidframework/eslint-config-fluid": "~2.74.0",
96
- "@fluidframework/test-runtime-utils-previous": "npm:@fluidframework/test-runtime-utils@2.73.0",
94
+ "@fluidframework/build-tools": "^0.62.0",
95
+ "@fluidframework/eslint-config-fluid": "~2.80.0",
96
+ "@fluidframework/test-runtime-utils-previous": "npm:@fluidframework/test-runtime-utils@2.74.0",
97
97
  "@microsoft/api-extractor": "7.52.11",
98
98
  "@types/jsrsasign": "^10.5.12",
99
99
  "@types/mocha": "^10.0.10",
100
100
  "@types/node": "^18.19.0",
101
101
  "c8": "^10.1.3",
102
- "concurrently": "^8.2.1",
102
+ "concurrently": "^9.2.1",
103
103
  "copyfiles": "^2.4.1",
104
- "cross-env": "^7.0.3",
105
- "eslint": "~8.57.1",
104
+ "cross-env": "^10.1.0",
105
+ "eslint": "~9.39.1",
106
106
  "jiti": "^2.6.1",
107
107
  "mocha": "^10.8.2",
108
108
  "mocha-multi-reporters": "^1.5.1",
109
- "rimraf": "^4.4.0",
109
+ "rimraf": "^6.1.2",
110
110
  "typescript": "~5.4.5"
111
111
  },
112
112
  "typeValidation": {
@@ -1009,7 +1009,6 @@ export const shortCodeMap = {
1009
1009
  "0x7a2": "Must be in a field in order to attach",
1010
1010
  "0x7a5": "Must be in a field in order to detach",
1011
1011
  "0x7a8": "should be in fields",
1012
- "0x7a9": "Collision during index update",
1013
1012
  "0x7aa": "Unknown removed node ID",
1014
1013
  "0x7af": "Destination must be a new empty detached field",
1015
1014
  "0x7b6": "Attach source field must be different from current field",
@@ -1287,14 +1286,10 @@ export const shortCodeMap = {
1287
1286
  "0x9aa": "identifier must be type string",
1288
1287
  "0x9ab": "childId is undefined in unpackChildNodesUsedRoutes",
1289
1288
  "0x9ad": "previous ordinal should not be empty",
1290
- "0x9af": "A view cannot be rebased while it has a pending transaction",
1291
- "0x9b0": "Views cannot be merged into a view while it has a pending transaction",
1292
1289
  "0x9b1": "Expected tree node to have kernel",
1293
1290
  "0x9b4": "Unexpected flex node implementation",
1294
1291
  "0x9b5": "Inheritance should work",
1295
1292
  "0x9b6": "No error to clear",
1296
- "0x9b8": "Inconsistent data: missing detached node entry",
1297
- "0x9b9": "Inconsistent data: missing node entry in latestRelevantRevision",
1298
1293
  "0x9ba": "Unable to delete unknown entry",
1299
1294
  "0x9bb": "Unable to delete unknown entry",
1300
1295
  "0x9bc": "detached node id does not exist in the detached field index",
@@ -1440,7 +1435,6 @@ export const shortCodeMap = {
1440
1435
  "0xa94": "invalid forbidden field",
1441
1436
  "0xa95": "Invalid map schema",
1442
1437
  "0xa97": "Not in transaction",
1443
- "0xa98": "Expected transaction branch",
1444
1438
  "0xa99": "must have a parent",
1445
1439
  "0xa9a": "must have a parent",
1446
1440
  "0xa9b": "attach should happen in a node",
@@ -1895,5 +1889,9 @@ export const shortCodeMap = {
1895
1889
  "0xca8": "missing schema",
1896
1890
  "0xca9": "missing schema",
1897
1891
  "0xcaa": "Reachable schema missing from input TreeSchema",
1898
- "0xcab": "missing kind"
1892
+ "0xcab": "missing kind",
1893
+ "0xcac": "Unexpected branch implementation",
1894
+ "0xcad": "Unexpected branch implementation",
1895
+ "0xcae": "The outer transaction should be ending",
1896
+ "0xcaf": "Unexpected commit in transaction"
1899
1897
  };