@fluidframework/test-runtime-utils 2.81.0 → 2.82.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
@@ -108,6 +108,8 @@ export declare class MockContainerRuntime extends TypedEventEmitter<IContainerRu
108
108
  minimumSequenceNumber?: number | undefined;
109
109
  } | undefined);
110
110
  /**
111
+ * Creates a {@link MockDeltaConnection} for this container runtime.
112
+ *
111
113
  * @deprecated use the associated datastore to create the delta connection
112
114
  */
113
115
  createDeltaConnection(): MockDeltaConnection;
@@ -189,7 +191,7 @@ export declare class MockContainerRuntimeFactory {
189
191
  constructor(mockContainerRuntimeOptions?: IMockContainerRuntimeOptions);
190
192
  get outstandingMessageCount(): number;
191
193
  /**
192
- * @returns a minimum sequence number for all connected clients.
194
+ * Gets the minimum sequence number for all connected clients.
193
195
  */
194
196
  getMinSeq(): number;
195
197
  createContainerRuntime(dataStoreRuntime: MockFluidDataStoreRuntime): MockContainerRuntime;
@@ -302,6 +304,8 @@ export declare class MockFluidDataStoreRuntime extends EventEmitter implements I
302
304
  createDeltaConnection(): MockDeltaConnection;
303
305
  get absolutePath(): string;
304
306
  /**
307
+ * Whether the data store is local (not attached).
308
+ *
305
309
  * @deprecated Use `attachState` instead
306
310
  *
307
311
  * @privateRemarks Also remove the setter when this is removed. setters don't get their own doc tags.
@@ -1 +1 @@
1
- {"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../src/mocks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAkB,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EACN,WAAW,EACX,SAAS,EACT,eAAe,EACf,KAAK,EACL,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wDAAwD,CAAC;AACtG,OAAO,EACN,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,KAAK,oBAAoB,EACzB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACN,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,MAAM,0CAA0C,CAAC;AAElD,OAAO,EACN,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,EACb,QAAQ,EACR,sBAAsB,EACtB,eAAe,EACf,KAAK,mBAAmB,EACxB,MAAM,gDAAgD,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EACN,cAAc,EACd,gBAAgB,EAChB,YAAY,EAEZ,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACN,UAAU,EAEV,yBAAyB,EACzB,KAAK,aAAa,EAClB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EACX,iBAAiB,EACjB,eAAe,EACf,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACN,qBAAqB,EACrB,sBAAsB,EACtB,SAAS,EACT,sBAAsB,EACtB,eAAe,EACf,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAE9B,KAAK,uBAAuB,EAC5B,MAAM,8CAA8C,CAAC;AAWtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGnD;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,gBAAgB;IAS1D,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IATzB,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED,OAAO,CAAC,UAAU,CAAQ;IACnB,OAAO,EAAE,aAAa,GAAG,SAAS,CAAC;gBAGxB,QAAQ,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,KAAK,MAAM,EACnE,OAAO,EAAE,MAAM,IAAI;IAG9B,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKpC,MAAM,CAAC,cAAc,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,GAAG,MAAM;IAI7D,KAAK,IAAI,IAAI;IAIb,kBAAkB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAK5C,eAAe,CAAC,iBAAiB,EAAE,yBAAyB,GAAG,IAAI;IAInE,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAIvE,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO;IAIrC,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI;CAG9D;AAGD;;GAEG;AACH,MAAM,WAAW,mCAAmC;IACnD,OAAO,EAAE,GAAG,CAAC;IACb,uBAAuB,EAAE,MAAM,CAAC;IAChC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,wCAAwC;IACxD,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,eAAe,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IAC5C;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACzC;AAcD;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC3C,OAAO,EAAE,GAAG,CAAC;IACb,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;;;GAKG;AACH,qBAAa,oBAAqB,SAAQ,iBAAiB,CAAC,uBAAuB,CAAC;;IAgBlF,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,yBAAyB;IAC9D,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,2BAA2B;IAEvD,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;gCAA4B,MAAM,GAAG,SAAS;;IAlBrE,QAAQ,EAAE,MAAM,CAAC;IACxB,SAAgB,YAAY,EAAE,gBAAgB,CAAC;IAC/C;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,CAAM;IAChE,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,mCAAmC,EAAE,CAAM;IAC/E,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,2BAA2B,EAAE,CAAM;IAC9D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqC;IACxE;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,4BAA4B,CAAC,CAAC;gBAGtD,gBAAgB,EAAE,yBAAyB,EAC3C,OAAO,EAAE,2BAA2B,EACvD,2BAA2B,GAAE,4BAAiE,EAC3E,SAAS,CAAC;gCAA4B,MAAM,GAAG,SAAS;iBAAE;IA4B9E;;OAEG;IACI,qBAAqB,IAAI,mBAAmB;IAM5C,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAWvC,kBAAkB,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IASxE,MAAM,CAAC,cAAc,EAAE,GAAG,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM;IA0CrE;;;OAGG;IACH,SAAS,CAAC,+BAA+B,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO;IAQtF,OAAO,CAAC,mBAAmB;IASpB,KAAK,IAAI,IAAI;IACpB,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED;;;OAGG;IACI,KAAK,IAAI,IAAI;IAIpB;;;;OAIG;IACI,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAqCnD;;;;;OAKG;IACI,MAAM,IAAI,IAAI;IAkBrB,SAAS,CAAC,gBAAgB,CACzB,kBAAkB,EAAE;QAAE,OAAO,EAAE,GAAG,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,GAC/D,IAAI;IAsBP;;;;;;OAMG;IACI,QAAQ,CAAC,IAAI,IAAI;IAQxB,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,cAAc;IAiBf,OAAO,CAAC,OAAO,EAAE,yBAAyB,GAAG,IAAI;IAkBxD,SAAS,CAAC,iBAAiB,CAC1B,OAAO,EAAE,GAAG,EACZ,eAAe,EAAE,OAAO,EACxB,oBAAoB,EAAE,MAAM,GAC1B,IAAI;IAUP,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,yBAAyB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;IAcpE,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;CAKpE;AAED;;;;;;;GAOG;AACH,qBAAa,2BAA2B;IAChC,cAAc,SAAK;IACnB,MAAM,sBAA6B;IAC1C,SAAgB,MAAM,oBAA2B;IACjD;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,EAAE,yBAAyB,EAAE,CAAM;IACrD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAa;IAEnE;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,4BAA4B,CAAC,CAAC;gBAGzE,2BAA2B,GAAE,4BAAiE;IAK/F,IAAW,uBAAuB,IAAI,MAAM,CAE3C;IAED;;OAEG;IACI,SAAS,IAAI,MAAM;IAmBnB,sBAAsB,CAC5B,gBAAgB,EAAE,yBAAyB,GACzC,oBAAoB;IAUhB,sBAAsB,CAAC,gBAAgB,EAAE,oBAAoB,GAAG,IAAI;IAIpE,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG,IAAI;IAYjE,SAAS,CAAC,oBAAoB,EAAE,yBAAyB,GAAG,SAAS,CAAC;IACtE,SAAS,CAAC,wBAAwB,IAAI,yBAAyB;IAsB/D,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAShC;;;OAGG;IACI,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAY/C;;OAEG;IACI,kBAAkB,IAAI,IAAI;CAMjC;AAED;;GAEG;AACH,qBAAa,iBAAkB,YAAW,cAAc,EAAE,YAAY;IACrE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;gBAEvC,GAAG,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,EAAE;IAI7D,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAK9D,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAM9B,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAM3C,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAGzD,QAAQ,EAAE,OAAO,CAAS;IAE1B,OAAO,IAAI,IAAI;IAIf,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAG7E,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAepE,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAGtE,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAGjF,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAGrF,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAIhF,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAIrE,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI;IAG7D,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAGhC,eAAe,IAAI,MAAM;IAGzB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IAGxE,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;IAG9E,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO;IAGrD,UAAU,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE;IAGjC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;CAG5C;AAED;;GAEG;AACH,qBAAa,YACZ,SAAQ,iBAAiB,CAAC,eAAe,CACzC,YAAW,cAAc;IAEzB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAuB;IACvD,OAAO,CAAC,gBAAgB,CAAqB;;IAOtC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAKlD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAOvC,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAGlC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAIhD,OAAO,IAAI,KAAK,GAAG,SAAS;IAQ5B,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;CAWjD;AAQD;;;;GAIG;AACH,qBAAa,yBACZ,SAAQ,YACR,YAAW,sBAAsB,EAAE,sBAAsB,EAAE,mBAAmB;gBAElE,SAAS,CAAC,EAAE;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;QACvC,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE,oBAAoB,CAAC;QAC9B,YAAY,CAAC,EAAE,aAAa,GAAG,iBAAiB,CAAC;QACjD,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,QAAQ,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;QACtC,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;KAC9C;IA0BD,OAAO,CAAC,QAAQ,CAAkB;IAClC,SAAgB,UAAU,QAAO,OAAO,CAAkB;IAE1D,SAAgB,UAAU,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAE9D;;OAEG;IACH,SAAgB,mBAAmB,EAAE,uBAAuB,GAAG,SAAS,CAAC;IAEzE,IAAW,mBAAmB,IAAI,mBAAmB,CAEpD;IACD,IAAW,kBAAkB,IAAI,mBAAmB,CAEnD;IACD,IAAW,sBAAsB,IAAI,mBAAmB,CAEvD;IACD,IAAW,qBAAqB,IAAI,mBAAmB,CAEtD;IAED,SAAgB,UAAU,EAAE,MAAM,CAAoB;IACtD,SAAgB,EAAE,EAAE,MAAM,CAAC;IAC3B,SAAgB,QAAQ,EAAE,OAAO,CAAoB;IAC9C,OAAO,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAM;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACxB,SAAgB,IAAI,MAAM;IAC1B,SAAgB,SAAS,QAAQ;IAC1B,oBAAoB,mBAA0B;IACrD,IAAW,YAAY,IAAI,mBAAmB,CAE7C;IACD,SAAgB,MAAM,EAAE,OAAO,CAAoB;IACnD,SAAgB,MAAM,EAAE,oBAAoB,CAAC;IACtC,MAAM,oBAA2B;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IACxC,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC,YAAY,EAAE,CAAC,aAAa,GAAG,iBAAiB,CAAC,GAAG,SAAS,CAAC;IACrE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAC9D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAuC;IAE1D,qBAAqB,IAAI,mBAAmB;IAUnD,IAAW,YAAY,IAAI,MAAM,CAEhC;IAED;;;;OAIG;IACH,IAAW,KAAK,IAAI,OAAO,CAE1B;IACD,IAAW,KAAK,CAAC,KAAK,EAAE,OAAO,EAK9B;IAED,OAAO,CAAC,SAAS,CAAS;IAE1B,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAEM,OAAO,IAAI,IAAI;IAIT,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAG/C,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ;IAWpE;;OAEG;IACI,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,UAAU,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI;IAE1C,IAAW,UAAU,IAAI,OAAO,CAE/B;IAED,OAAO,CAAC,YAAY,CAAc;IAClC,IAAW,WAAW,IAAI,WAAW,CAEpC;IAED,IAAW,eAAe,IAAI,eAAe,CAE5C;IAEM,WAAW,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI;IAIpC,WAAW,IAAI,IAAI;IAInB,yBAAyB,IAAI,IAAI;IAIjC,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAIhC,SAAS,IAAI,cAAc;IAI3B,WAAW,IAAI,SAAS;IAIxB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;IAIzE,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAIlD,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,eAAe;IAQhB,YAAY,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAAc;IAElE,eAAe,CAAC,iBAAiB,EAAE,yBAAyB,GAAG,IAAI;IASnE,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAIjD,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI5C,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ/D,mBAAmB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAItC,aAAa,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;IAWpD,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;IAI9C,SAAS,CACrB,QAAQ,CAAC,EAAE,OAAO,EAClB,UAAU,CAAC,EAAE,OAAO,GAClB,OAAO,CAAC,qBAAqB,CAAC;IAYpB,SAAS,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAMlD,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI;IAE5C,iBAAiB,IAAI,UAAU,EAAE;IAIjC,gBAAgB,IAAI,qBAAqB;IAYzC,eAAe,CACrB,gBAAgB,CAAC,EAAE,iBAAiB,GAAG,SAAS,GAC9C,sBAAsB;IAMlB,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC,QAAQ,GAAG,IAAI;IA2BzE,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,gBAAgB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;IAI7D,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAMjE,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpD,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI;CAK9D;AAED;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,gBAAgB;IACzD,SAAS,UAAS;IAElB,MAAM,CAAC,OAAO,KAAA,GAAG,IAAI;IAErB,MAAM,CAAC,cAAc,EAAE,GAAG,GAAG,MAAM;IAInC,KAAK,IAAI,IAAI;CACpB;AAED;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,sBAAsB;IAWnD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAV5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;IAE7C;;;;;;;OAOG;gBACiC,QAAQ,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;IAI1D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAGhD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAGxC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAO3C,eAAe,IAAI,aAAa;CAGvC;AAED;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,gBAAgB;WAClD,iBAAiB,CAAC,WAAW,EAAE,YAAY,GAAG,wBAAwB;IAM7E,eAAe,EAAE,gBAAgB,CAAkC;IACnE,aAAa,EAAE,wBAAwB,CAAC;gBAE5B,QAAQ,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;CAGtD;AA4BD;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE;IACxD,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACtB,GAAG,aAAa,CA+BhB"}
1
+ {"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../src/mocks.ts"],"names":[],"mappings":"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"}
package/lib/mocks.js CHANGED
@@ -116,6 +116,8 @@ export class MockContainerRuntime extends TypedEventEmitter {
116
116
  !this.runtimeOptions.enableGroupedBatching, "Grouped batching is not compatible with FlushMode.Immediate");
117
117
  }
118
118
  /**
119
+ * Creates a {@link MockDeltaConnection} for this container runtime.
120
+ *
119
121
  * @deprecated use the associated datastore to create the delta connection
120
122
  */
121
123
  createDeltaConnection() {
@@ -378,7 +380,7 @@ export class MockContainerRuntimeFactory {
378
380
  return this.messages.length;
379
381
  }
380
382
  /**
381
- * @returns a minimum sequence number for all connected clients.
383
+ * Gets the minimum sequence number for all connected clients.
382
384
  */
383
385
  getMinSeq() {
384
386
  let minimumSequenceNumber;
@@ -667,6 +669,8 @@ export class MockFluidDataStoreRuntime extends EventEmitter {
667
669
  return `/${this.id}`;
668
670
  }
669
671
  /**
672
+ * Whether the data store is local (not attached).
673
+ *
670
674
  * @deprecated Use `attachState` instead
671
675
  *
672
676
  * @privateRemarks Also remove the setter when this is removed. setters don't get their own doc tags.
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(\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
+ {"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 * Creates a {@link MockDeltaConnection} for this container runtime.\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 * Gets the 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 * Whether the data store is local (not attached).\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/test-runtime-utils",
3
- "version": "2.81.0",
3
+ "version": "2.82.0",
4
4
  "description": "Fluid runtime test utilities",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -69,35 +69,35 @@
69
69
  "temp-directory": "nyc/.nyc_output"
70
70
  },
71
71
  "dependencies": {
72
- "@fluid-internal/client-utils": "~2.81.0",
73
- "@fluidframework/container-definitions": "~2.81.0",
74
- "@fluidframework/container-runtime-definitions": "~2.81.0",
75
- "@fluidframework/core-interfaces": "~2.81.0",
76
- "@fluidframework/core-utils": "~2.81.0",
77
- "@fluidframework/datastore-definitions": "~2.81.0",
78
- "@fluidframework/driver-definitions": "~2.81.0",
79
- "@fluidframework/driver-utils": "~2.81.0",
80
- "@fluidframework/id-compressor": "~2.81.0",
81
- "@fluidframework/routerlicious-driver": "~2.81.0",
82
- "@fluidframework/runtime-definitions": "~2.81.0",
83
- "@fluidframework/runtime-utils": "~2.81.0",
84
- "@fluidframework/telemetry-utils": "~2.81.0",
72
+ "@fluid-internal/client-utils": "~2.82.0",
73
+ "@fluidframework/container-definitions": "~2.82.0",
74
+ "@fluidframework/container-runtime-definitions": "~2.82.0",
75
+ "@fluidframework/core-interfaces": "~2.82.0",
76
+ "@fluidframework/core-utils": "~2.82.0",
77
+ "@fluidframework/datastore-definitions": "~2.82.0",
78
+ "@fluidframework/driver-definitions": "~2.82.0",
79
+ "@fluidframework/driver-utils": "~2.82.0",
80
+ "@fluidframework/id-compressor": "~2.82.0",
81
+ "@fluidframework/routerlicious-driver": "~2.82.0",
82
+ "@fluidframework/runtime-definitions": "~2.82.0",
83
+ "@fluidframework/runtime-utils": "~2.82.0",
84
+ "@fluidframework/telemetry-utils": "~2.82.0",
85
85
  "jsrsasign": "^11.0.0",
86
86
  "uuid": "^11.1.0"
87
87
  },
88
88
  "devDependencies": {
89
89
  "@arethetypeswrong/cli": "^0.18.2",
90
90
  "@biomejs/biome": "~1.9.3",
91
- "@fluid-internal/mocha-test-setup": "~2.81.0",
91
+ "@fluid-internal/mocha-test-setup": "~2.82.0",
92
92
  "@fluid-tools/build-cli": "^0.63.0",
93
93
  "@fluidframework/build-common": "^2.0.3",
94
94
  "@fluidframework/build-tools": "^0.63.0",
95
- "@fluidframework/eslint-config-fluid": "~2.81.0",
96
- "@fluidframework/test-runtime-utils-previous": "npm:@fluidframework/test-runtime-utils@2.80.0",
95
+ "@fluidframework/eslint-config-fluid": "~2.82.0",
96
+ "@fluidframework/test-runtime-utils-previous": "npm:@fluidframework/test-runtime-utils@2.81.0",
97
97
  "@microsoft/api-extractor": "7.52.11",
98
98
  "@types/jsrsasign": "^10.5.12",
99
99
  "@types/mocha": "^10.0.10",
100
- "@types/node": "^18.19.0",
100
+ "@types/node": "~20.19.30",
101
101
  "c8": "^10.1.3",
102
102
  "concurrently": "^9.2.1",
103
103
  "copyfiles": "^2.4.1",
@@ -1161,7 +1161,7 @@ export const shortCodeMap = {
1161
1161
  "0x8dc": "Unexpected collision of new node changes",
1162
1162
  "0x8dd": "No tree found for the given groupIds",
1163
1163
  "0x8de": "loadingGroupIds should not be empty",
1164
- "0x8e0": "time should be positive",
1164
+ "0x8e0": "time should be a positive number",
1165
1165
  "0x8e1": "Should have retrieved aliased handle",
1166
1166
  "0x8e2": "must be attaching by this point",
1167
1167
  "0x8e3": "should not be a promise",
@@ -1919,5 +1919,14 @@ export const shortCodeMap = {
1919
1919
  "0xcc4": "Missing enriched commit.",
1920
1920
  "0xcc5": "Unsupported modular change codec version",
1921
1921
  "0xcc6": "updatableError should only be called in test mode",
1922
- "0xcc7": "expected compatibility errors for missing min collab version snapshot"
1922
+ "0xcc7": "expected compatibility errors for missing min collab version snapshot",
1923
+ "0xcc8": "Object.entries returned a non-string key.",
1924
+ "0xcc9": "Count must be at least 1",
1925
+ "0xcca": "TODO: Handle non-contiguous ranges",
1926
+ "0xccb": "TODO: Handle non-contiguous ranges",
1927
+ "0xccc": "Only write ops should be stashed",
1928
+ "0xccd": "Transaction did not complete",
1929
+ "0xcce": "branches must be related",
1930
+ "0xccf": "Expected transaction revision in the presence of transaction steps",
1931
+ "0xcd0": "The transaction commit should be rebased to the tip"
1923
1932
  };
package/src/mocks.ts CHANGED
@@ -241,6 +241,8 @@ export class MockContainerRuntime extends TypedEventEmitter<IContainerRuntimeEve
241
241
  }
242
242
 
243
243
  /**
244
+ * Creates a {@link MockDeltaConnection} for this container runtime.
245
+ *
244
246
  * @deprecated use the associated datastore to create the delta connection
245
247
  */
246
248
  public createDeltaConnection(): MockDeltaConnection {
@@ -575,7 +577,7 @@ export class MockContainerRuntimeFactory {
575
577
  }
576
578
 
577
579
  /**
578
- * @returns a minimum sequence number for all connected clients.
580
+ * Gets the minimum sequence number for all connected clients.
579
581
  */
580
582
  public getMinSeq(): number {
581
583
  let minimumSequenceNumber: number | undefined;
@@ -954,6 +956,8 @@ export class MockFluidDataStoreRuntime
954
956
  }
955
957
 
956
958
  /**
959
+ * Whether the data store is local (not attached).
960
+ *
957
961
  * @deprecated Use `attachState` instead
958
962
  *
959
963
  * @privateRemarks Also remove the setter when this is removed. setters don't get their own doc tags.
package/biome.jsonc DELETED
@@ -1,4 +0,0 @@
1
- {
2
- "$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
3
- "extends": ["../../../biome.jsonc"]
4
- }