@fluidframework/test-utils 2.0.0-rc.1.0.3 → 2.0.0-rc.2.0.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.
Files changed (151) hide show
  1. package/{.eslintrc.js → .eslintrc.cjs} +4 -1
  2. package/{.mocharc.js → .mocharc.cjs} +1 -1
  3. package/CHANGELOG.md +34 -0
  4. package/README.md +1 -1
  5. package/api-extractor-cjs.json +8 -0
  6. package/api-extractor-lint.json +1 -1
  7. package/api-extractor.json +1 -1
  8. package/api-report/test-utils.api.md +27 -9
  9. package/dist/DriverWrappers.d.ts +3 -0
  10. package/dist/DriverWrappers.d.ts.map +1 -1
  11. package/dist/DriverWrappers.js +3 -0
  12. package/dist/DriverWrappers.js.map +1 -1
  13. package/dist/TestConfigs.d.ts +14 -1
  14. package/dist/TestConfigs.d.ts.map +1 -1
  15. package/dist/TestConfigs.js +14 -3
  16. package/dist/TestConfigs.js.map +1 -1
  17. package/dist/TestSummaryUtils.d.ts +7 -2
  18. package/dist/TestSummaryUtils.d.ts.map +1 -1
  19. package/dist/TestSummaryUtils.js +39 -14
  20. package/dist/TestSummaryUtils.js.map +1 -1
  21. package/dist/containerUtils.d.ts +1 -1
  22. package/dist/containerUtils.d.ts.map +1 -1
  23. package/dist/containerUtils.js +2 -2
  24. package/dist/containerUtils.js.map +1 -1
  25. package/dist/debug.js +2 -2
  26. package/dist/debug.js.map +1 -1
  27. package/dist/index.d.ts +14 -14
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +44 -43
  30. package/dist/index.js.map +1 -1
  31. package/dist/loaderContainerTracker.d.ts +1 -1
  32. package/dist/loaderContainerTracker.d.ts.map +1 -1
  33. package/dist/loaderContainerTracker.js +11 -11
  34. package/dist/loaderContainerTracker.js.map +1 -1
  35. package/dist/localLoader.d.ts +1 -1
  36. package/dist/localLoader.d.ts.map +1 -1
  37. package/dist/localLoader.js +2 -2
  38. package/dist/localLoader.js.map +1 -1
  39. package/dist/package.json +3 -0
  40. package/dist/packageVersion.d.ts +1 -1
  41. package/dist/packageVersion.js +1 -1
  42. package/dist/packageVersion.js.map +1 -1
  43. package/dist/test-utils-alpha.d.ts +7 -3
  44. package/dist/test-utils-beta.d.ts +9 -3
  45. package/dist/test-utils-public.d.ts +9 -3
  46. package/dist/test-utils-untrimmed.d.ts +59 -14
  47. package/dist/testContainerRuntimeFactory.d.ts.map +1 -1
  48. package/dist/testContainerRuntimeFactory.js +9 -2
  49. package/dist/testContainerRuntimeFactory.js.map +1 -1
  50. package/dist/testFluidObject.d.ts +1 -1
  51. package/dist/testFluidObject.d.ts.map +1 -1
  52. package/dist/testFluidObject.js.map +1 -1
  53. package/dist/testObjectProvider.d.ts +34 -11
  54. package/dist/testObjectProvider.d.ts.map +1 -1
  55. package/dist/testObjectProvider.js +71 -38
  56. package/dist/testObjectProvider.js.map +1 -1
  57. package/dist/timeoutUtils.d.ts.map +1 -1
  58. package/dist/timeoutUtils.js.map +1 -1
  59. package/dist/tsdoc-metadata.json +1 -1
  60. package/lib/DriverWrappers.d.ts +35 -0
  61. package/lib/DriverWrappers.d.ts.map +1 -0
  62. package/lib/DriverWrappers.js +54 -0
  63. package/lib/DriverWrappers.js.map +1 -0
  64. package/lib/TestConfigs.d.ts +23 -0
  65. package/lib/TestConfigs.d.ts.map +1 -0
  66. package/lib/TestConfigs.js +24 -0
  67. package/lib/TestConfigs.js.map +1 -0
  68. package/lib/TestSummaryUtils.d.ts +66 -0
  69. package/lib/TestSummaryUtils.d.ts.map +1 -0
  70. package/lib/TestSummaryUtils.js +153 -0
  71. package/lib/TestSummaryUtils.js.map +1 -0
  72. package/lib/containerUtils.d.ts +46 -0
  73. package/lib/containerUtils.d.ts.map +1 -0
  74. package/lib/containerUtils.js +79 -0
  75. package/lib/containerUtils.js.map +1 -0
  76. package/lib/debug.d.ts +7 -0
  77. package/lib/debug.d.ts.map +1 -0
  78. package/lib/debug.js +9 -0
  79. package/lib/debug.js.map +1 -0
  80. package/lib/index.d.ts +19 -0
  81. package/lib/index.d.ts.map +1 -0
  82. package/lib/index.js +18 -0
  83. package/lib/index.js.map +1 -0
  84. package/lib/interfaces.d.ts +25 -0
  85. package/lib/interfaces.d.ts.map +1 -0
  86. package/lib/interfaces.js +6 -0
  87. package/lib/interfaces.js.map +1 -0
  88. package/lib/loaderContainerTracker.d.ts +144 -0
  89. package/lib/loaderContainerTracker.d.ts.map +1 -0
  90. package/lib/loaderContainerTracker.js +631 -0
  91. package/lib/loaderContainerTracker.js.map +1 -0
  92. package/lib/localCodeLoader.d.ts +31 -0
  93. package/lib/localCodeLoader.d.ts.map +1 -0
  94. package/lib/localCodeLoader.js +73 -0
  95. package/lib/localCodeLoader.js.map +1 -0
  96. package/lib/localLoader.d.ts +26 -0
  97. package/lib/localLoader.d.ts.map +1 -0
  98. package/lib/localLoader.js +37 -0
  99. package/lib/localLoader.js.map +1 -0
  100. package/lib/packageVersion.d.ts +9 -0
  101. package/lib/packageVersion.d.ts.map +1 -0
  102. package/lib/packageVersion.js +9 -0
  103. package/lib/packageVersion.js.map +1 -0
  104. package/lib/retry.d.ts +18 -0
  105. package/lib/retry.d.ts.map +1 -0
  106. package/lib/retry.js +37 -0
  107. package/lib/retry.js.map +1 -0
  108. package/lib/test/timeoutUtils.spec.js +165 -0
  109. package/lib/test/timeoutUtils.spec.js.map +1 -0
  110. package/lib/test/types/validateTestUtilsPrevious.generated.js +90 -0
  111. package/lib/test/types/validateTestUtilsPrevious.generated.js.map +1 -0
  112. package/lib/test-utils-alpha.d.ts +309 -0
  113. package/lib/test-utils-beta.d.ts +208 -0
  114. package/lib/test-utils-public.d.ts +208 -0
  115. package/lib/test-utils-untrimmed.d.ts +1046 -0
  116. package/lib/testContainerRuntimeFactory.d.ts +46 -0
  117. package/lib/testContainerRuntimeFactory.d.ts.map +1 -0
  118. package/lib/testContainerRuntimeFactory.js +113 -0
  119. package/lib/testContainerRuntimeFactory.js.map +1 -0
  120. package/lib/testContainerRuntimeFactoryWithDefaultDataStore.d.ts +23 -0
  121. package/lib/testContainerRuntimeFactoryWithDefaultDataStore.d.ts.map +1 -0
  122. package/lib/testContainerRuntimeFactoryWithDefaultDataStore.js +28 -0
  123. package/lib/testContainerRuntimeFactoryWithDefaultDataStore.js.map +1 -0
  124. package/lib/testFluidObject.d.ts +92 -0
  125. package/lib/testFluidObject.d.ts.map +1 -0
  126. package/lib/testFluidObject.js +159 -0
  127. package/lib/testFluidObject.js.map +1 -0
  128. package/lib/testObjectProvider.d.ts +435 -0
  129. package/lib/testObjectProvider.d.ts.map +1 -0
  130. package/lib/testObjectProvider.js +636 -0
  131. package/lib/testObjectProvider.js.map +1 -0
  132. package/lib/timeoutUtils.d.ts +60 -0
  133. package/lib/timeoutUtils.d.ts.map +1 -0
  134. package/lib/timeoutUtils.js +164 -0
  135. package/lib/timeoutUtils.js.map +1 -0
  136. package/package.json +105 -38
  137. package/src/DriverWrappers.ts +3 -0
  138. package/src/TestConfigs.ts +25 -3
  139. package/src/TestSummaryUtils.ts +36 -12
  140. package/src/containerUtils.ts +1 -1
  141. package/src/debug.ts +1 -1
  142. package/src/index.ts +19 -14
  143. package/src/loaderContainerTracker.ts +5 -5
  144. package/src/localLoader.ts +1 -1
  145. package/src/packageVersion.ts +1 -1
  146. package/src/testContainerRuntimeFactory.ts +12 -2
  147. package/src/testFluidObject.ts +1 -1
  148. package/src/testObjectProvider.ts +99 -34
  149. package/src/timeoutUtils.ts +1 -0
  150. package/tsconfig.cjs.json +7 -0
  151. package/tsconfig.json +3 -4
@@ -4,7 +4,10 @@
4
4
  */
5
5
 
6
6
  module.exports = {
7
- extends: [require.resolve("@fluidframework/eslint-config-fluid/minimal"), "prettier"],
7
+ extends: [
8
+ require.resolve("@fluidframework/eslint-config-fluid/minimal-deprecated"),
9
+ "prettier",
10
+ ],
8
11
  parserOptions: {
9
12
  project: ["./tsconfig.json", "./src/test/tsconfig.json"],
10
13
  },
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const getFluidTestMochaConfig = require("@fluidframework/mocha-test-setup/mocharc-common");
8
+ const getFluidTestMochaConfig = require("@fluid-internal/mocha-test-setup/mocharc-common");
9
9
 
10
10
  const packageDir = __dirname;
11
11
  const config = getFluidTestMochaConfig(packageDir);
package/CHANGELOG.md CHANGED
@@ -1,5 +1,39 @@
1
1
  # @fluidframework/test-utils
2
2
 
3
+ ## 2.0.0-rc.2.0.0
4
+
5
+ ### Minor Changes
6
+
7
+ - container-runtime: New feature: ID compression for DataStores & DDSs ([#19859](https://github.com/microsoft/FluidFramework/issues/19859)) [51f0d3db73](https://github.com/microsoft/FluidFramework/commits/51f0d3db737800e1c30ea5e3952d38ff30ffc7da)
8
+
9
+ ### Key changes
10
+
11
+ 1. A new API IContainerRuntimeBase.generateDocumentUniqueId() is exposed. This API will opportunistically generate IDs in short format (non-negative numbers). If it can't achieve that, it will return UUID strings. UUIDs generated will have low entropy in groups and will compress well. It can be leveraged anywhere in container where container unique IDs are required. I.e. any place that uses uuid() and stores data in container is likely candidate to start leveraging this API.
12
+ 2. Data store internal IDs (IDs that are auto generated by FF system) will opportunistically be generated in shorter form. Data stores created in detached container will always have short IDs, data stores created in attached container will opportunistically be short (by using newly added IContainerRuntimeBase.generateDocumentUniqueId() capability)
13
+ 3. Similar DDS names will be opportunistically short (same considerations for detached DDS vs. attached DDS)
14
+
15
+ ### Implementation details
16
+
17
+ 1. Container level ID Compressor can now be enabled with delay. With such setting, only new IContainerRuntimeBase.generateDocumentUniqueId() is exposed (ID Compressor is not exposed in such case, as leveraging any of its other capabilities requires future container sessions to load ID Compressor on container load, for correctness reasons). Once Container establishes connection and any changes are made in container, newly added API will start generating more compact IDs (in most cases).
18
+
19
+ ### Breaking changes
20
+
21
+ 1. DDS names can no longer start with "\_" symbol - this is reserved for FF needs. I've validated that's not an issue for AzureClient (it only creates root object by name, everything else is referred by handle). Our main internal partners almost never use named DDSs (I can find only 4 instances in Loop).
22
+
23
+ ### Backward compatibility considerations
24
+
25
+ 1. Data store internal IDs could collide with earlier used names data stores. Earlier versions of FF framework (before DataStore aliasing feature was added) allowed customers to supply IDs for data stores. And thus, files created with earlier versions of framework could have data store IDs that will be similar to names FF will use for newly created data stores ("A", ... "Z", "a"..."z", "AA", etc.). While such collision is possible, it's very unlikely (almost impossible) if user-provided names were at least 4-5 characters long.
26
+ 2. If application runs to these problems, or wants to reduce risks, consider disabling ID compressor via IContainerRuntimeOptions.enableRuntimeIdCompressor = "off".
27
+
28
+ ### Minor changes
29
+
30
+ 1. IContainerRuntime.createDetachedRootDataStore() is removed. Please use IContainerRuntime.createDetachedDataStore and IDataStore.trySetAlias() instead
31
+ 2. IContainerRuntimeOptions.enableRuntimeIdCompressor has been changes from boolean to tri-state.
32
+
33
+ - Resolved URLs no longer use non-standard protocols ([#19840](https://github.com/microsoft/FluidFramework/issues/19840)) [9d3d185183](https://github.com/microsoft/FluidFramework/commits/9d3d1851830d953792a6dfad60dde6f1c59480de)
34
+
35
+ Previously, `IResolvedUrl.url` could use a non-standard protocol like `fluid://`, `fluid-odsp://`, or `fluid-test://`. These have been replaced with `https://` to permit standards-compliant URL parsing.
36
+
3
37
  ## 2.0.0-rc.1.0.0
4
38
 
5
39
  ### Minor Changes
package/README.md CHANGED
@@ -156,7 +156,7 @@ The typical usage for testing a Fluid object is as follows:
156
156
 
157
157
  7. To truly test collaboration, create a second `Loader`, `Container`, `fluid object` and `DDS` which will serve as a remote client:
158
158
  ```typescript
159
- const documentUrl = `fluid-test://localhost/${documentId}`;
159
+ const documentUrl = `https://localhost/${documentId}`;
160
160
  const loader2: ILoader = createLocalLoader(
161
161
  [[codeDetails, entryPoint]],
162
162
  deltaConnectionServer,
@@ -0,0 +1,8 @@
1
+ {
2
+ "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
3
+ "extends": "../../../common/build/build-common/api-extractor-base.cjs.primary.json",
4
+ // CJS is actually secondary; so, no report.
5
+ "apiReport": {
6
+ "enabled": false
7
+ }
8
+ }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
3
- "extends": "../../../common/build/build-common/api-extractor-lint.json"
3
+ "extends": "../../../common/build/build-common/api-extractor-lint.esm.primary.json"
4
4
  }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
3
- "extends": "../../../common/build/build-common/api-extractor-base.json"
3
+ "extends": "../../../common/build/build-common/api-extractor-base.esm.primary.json"
4
4
  }
@@ -48,7 +48,7 @@ import { ISummaryContext } from '@fluidframework/driver-definitions';
48
48
  import { ISummaryTree } from '@fluidframework/protocol-definitions';
49
49
  import { ITelemetryBaseEvent } from '@fluidframework/core-interfaces';
50
50
  import { ITelemetryBaseLogger } from '@fluidframework/core-interfaces';
51
- import { ITelemetryGenericEvent } from '@fluidframework/core-interfaces';
51
+ import { ITelemetryGenericEventExt } from '@fluidframework/telemetry-utils';
52
52
  import { ITestDriver } from '@fluidframework/test-driver-definitions';
53
53
  import { IUrlResolver } from '@fluidframework/driver-definitions';
54
54
  import { Loader } from '@fluidframework/container-loader';
@@ -83,12 +83,21 @@ export function createSummarizer(provider: ITestObjectProvider, container: ICont
83
83
  summarizer: ISummarizer;
84
84
  }>;
85
85
 
86
+ // @internal (undocumented)
87
+ export function createSummarizerCore(container: IContainer, loader: IHostLoader, summaryVersion?: string): Promise<{
88
+ container: IContainer;
89
+ summarizer: ISummarizer;
90
+ }>;
91
+
86
92
  // @internal
87
93
  export function createSummarizerFromFactory(provider: ITestObjectProvider, container: IContainer, dataStoreFactory: IFluidDataStoreFactory, summaryVersion?: string, containerRuntimeFactoryType?: typeof ContainerRuntimeFactoryWithDefaultDataStore, registryEntries?: NamedFluidDataStoreRegistryEntries, logger?: ITelemetryBaseLogger, configProvider?: IConfigProviderBase): Promise<{
88
94
  container: IContainer;
89
95
  summarizer: ISummarizer;
90
96
  }>;
91
97
 
98
+ // @internal
99
+ export const createTestConfigProvider: () => ITestConfigProvider;
100
+
92
101
  // @internal
93
102
  export const createTestContainerRuntimeFactory: (containerRuntimeCtor: typeof ContainerRuntime) => {
94
103
  new (type: string, dataStoreFactory: IFluidDataStoreFactory, runtimeOptions?: IContainerRuntimeOptions, requestHandlers?: RuntimeRequestHandler[]): {
@@ -120,12 +129,12 @@ export const defaultTimeoutDurationMs = 250;
120
129
  export class EventAndErrorTrackingLogger implements ITelemetryBaseLogger {
121
130
  constructor(baseLogger: ITelemetryBaseLogger);
122
131
  // (undocumented)
123
- registerExpectedEvent(...orderedExpectedEvents: ITelemetryGenericEvent[]): void;
132
+ registerExpectedEvent(...orderedExpectedEvents: ITelemetryGenericEventExt[]): void;
124
133
  // (undocumented)
125
134
  reportAndClearTrackedEvents(): {
126
135
  expectedNotFound: ({
127
136
  index: number;
128
- event: ITelemetryGenericEvent | undefined;
137
+ event: ITelemetryGenericEventExt | undefined;
129
138
  } | undefined)[];
130
139
  unexpectedErrors: ITelemetryBaseEvent[];
131
140
  };
@@ -170,6 +179,12 @@ export interface IProvideTestFluidObject {
170
179
  readonly ITestFluidObject: ITestFluidObject;
171
180
  }
172
181
 
182
+ // @internal
183
+ export interface ITestConfigProvider extends IConfigProviderBase {
184
+ clear: () => void;
185
+ set: (key: string, value: ConfigTypes) => void;
186
+ }
187
+
173
188
  // @internal (undocumented)
174
189
  export interface ITestContainerConfig {
175
190
  enableAttribution?: boolean;
@@ -195,7 +210,9 @@ export interface ITestFluidObject extends IProvideTestFluidObject, IFluidLoadabl
195
210
 
196
211
  // @internal (undocumented)
197
212
  export interface ITestObjectProvider {
213
+ attachDetachedContainer(container: IContainer): Promise<void>;
198
214
  createContainer(entryPoint: fluidEntryPoint, loaderProps?: Partial<ILoaderProps>): Promise<IContainer>;
215
+ createDetachedContainer(entryPoint: fluidEntryPoint, loaderProps?: Partial<ILoaderProps>): Promise<IContainer>;
199
216
  createFluidEntryPoint: (testContainerConfig?: ITestContainerConfig) => fluidEntryPoint;
200
217
  createLoader(packageEntries: Iterable<[IFluidCodeDetails, fluidEntryPoint]>, loaderProps?: Partial<ILoaderProps>): IHostLoader;
201
218
  defaultCodeDetails: IFluidCodeDetails;
@@ -234,9 +251,6 @@ export class LocalCodeLoader implements ICodeDetailsLoader {
234
251
  load(source: IFluidCodeDetails): Promise<IFluidModuleWithDetails>;
235
252
  }
236
253
 
237
- // @internal (undocumented)
238
- export const mockConfigProvider: (settings?: Record<string, ConfigTypes>) => IConfigProviderBase;
239
-
240
254
  // @internal
241
255
  export const retryWithEventualValue: <T>(callback: () => Promise<T>, check: (value: T) => boolean, defaultValue: T, maxTries?: number, backOffMs?: number) => Promise<T>;
242
256
 
@@ -309,7 +323,9 @@ export class TestObjectProvider implements ITestObjectProvider {
309
323
  constructor(LoaderConstructor: typeof Loader,
310
324
  driver: ITestDriver,
311
325
  createFluidEntryPoint: (testContainerConfig?: ITestContainerConfig) => fluidEntryPoint);
326
+ attachDetachedContainer(container: IContainer): Promise<void>;
312
327
  createContainer(entryPoint: fluidEntryPoint, loaderProps?: Partial<ILoaderProps>): Promise<IContainer>;
328
+ createDetachedContainer(entryPoint: fluidEntryPoint, loaderProps?: Partial<ILoaderProps> | undefined): Promise<IContainer>;
313
329
  readonly createFluidEntryPoint: (testContainerConfig?: ITestContainerConfig) => fluidEntryPoint;
314
330
  createLoader(packageEntries: Iterable<[IFluidCodeDetails, fluidEntryPoint]>, loaderProps?: Partial<ILoaderProps>): Loader;
315
331
  get defaultCodeDetails(): IFluidCodeDetails;
@@ -333,7 +349,9 @@ export class TestObjectProvider implements ITestObjectProvider {
333
349
  // @internal
334
350
  export class TestObjectProviderWithVersionedLoad implements ITestObjectProvider {
335
351
  constructor(LoaderConstructorForCreating: typeof Loader, LoaderConstructorForLoading: typeof Loader, driverForCreating: ITestDriver, driverForLoading: ITestDriver, createFluidEntryPointForCreating: (testContainerConfig?: ITestContainerConfig) => fluidEntryPoint, createFluidEntryPointForLoading: (testContainerConfig?: ITestContainerConfig) => fluidEntryPoint);
352
+ attachDetachedContainer(container: IContainer): Promise<void>;
336
353
  createContainer(entryPoint: fluidEntryPoint, loaderProps?: Partial<ILoaderProps>): Promise<IContainer>;
354
+ createDetachedContainer(entryPoint: fluidEntryPoint, loaderProps?: Partial<ILoaderProps> | undefined): Promise<IContainer>;
337
355
  get createFluidEntryPoint(): (testContainerConfig?: ITestContainerConfig) => fluidEntryPoint;
338
356
  createLoader(packageEntries: Iterable<[IFluidCodeDetails, fluidEntryPoint]>, loaderProps?: Partial<ILoaderProps>): Loader;
339
357
  get defaultCodeDetails(): IFluidCodeDetails;
@@ -381,13 +399,13 @@ export interface TimeoutWithValue<T = void> {
381
399
  // @internal
382
400
  export function waitForContainerConnection(container: IContainer, failOnContainerClose?: boolean, timeoutOptions?: TimeoutWithError): Promise<void>;
383
401
 
384
- // @internal
402
+ // @internal @deprecated (undocumented)
385
403
  export function wrapDocumentService(innerDocService: IDocumentService, uploadSummaryCb: (summaryTree: ISummaryTree, context: ISummaryContext) => ISummaryContext): IDocumentService;
386
404
 
387
- // @internal
405
+ // @internal @deprecated (undocumented)
388
406
  export function wrapDocumentServiceFactory(innerDocServiceFactory: IDocumentServiceFactory, uploadSummaryCb: (summaryTree: ISummaryTree, context: ISummaryContext) => ISummaryContext): IDocumentServiceFactory;
389
407
 
390
- // @internal
408
+ // @internal @deprecated (undocumented)
391
409
  export function wrapDocumentStorageService(innerDocStorageService: IDocumentStorageService, uploadSummaryCb: (summaryTree: ISummaryTree, context: ISummaryContext) => ISummaryContext): IDocumentStorageService;
392
410
 
393
411
  // (No @packageDocumentation comment for this package)
@@ -5,6 +5,7 @@
5
5
  import { IDocumentService, IDocumentServiceFactory, IDocumentStorageService, ISummaryContext } from "@fluidframework/driver-definitions";
6
6
  import { ISummaryTree } from "@fluidframework/protocol-definitions";
7
7
  /**
8
+ * @deprecated - unused
8
9
  * Wraps the given IDocumentStorageService to override the `uploadSummaryWithContext` method. It calls the
9
10
  * `uploadSummaryCb` whenever a summary is uploaded by the client. The summary context can be updated in the
10
11
  * callback before it is uploaded to the server.
@@ -12,6 +13,7 @@ import { ISummaryTree } from "@fluidframework/protocol-definitions";
12
13
  */
13
14
  export declare function wrapDocumentStorageService(innerDocStorageService: IDocumentStorageService, uploadSummaryCb: (summaryTree: ISummaryTree, context: ISummaryContext) => ISummaryContext): IDocumentStorageService;
14
15
  /**
16
+ * @deprecated - unused
15
17
  * Wraps the given IDocumentService to override the `connectToStorage` method. The intent is to plumb the
16
18
  * `uploadSummaryCb` to the IDocumentStorageService so that it is called whenever a summary is uploaded by
17
19
  * the client.
@@ -21,6 +23,7 @@ export declare function wrapDocumentStorageService(innerDocStorageService: IDocu
21
23
  */
22
24
  export declare function wrapDocumentService(innerDocService: IDocumentService, uploadSummaryCb: (summaryTree: ISummaryTree, context: ISummaryContext) => ISummaryContext): IDocumentService;
23
25
  /**
26
+ * @deprecated - unused
24
27
  * Wraps the given IDocumentServiceFactory to override the `createDocumentService` method. The intent is to plumb
25
28
  * the `uploadSummaryCb` all the way to the IDocumentStorageService so that it is called whenever a summary is
26
29
  * uploaded by the client.
@@ -1 +1 @@
1
- {"version":3,"file":"DriverWrappers.d.ts","sourceRoot":"","sources":["../src/DriverWrappers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACN,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EAEvB,eAAe,EACf,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEpE;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACzC,sBAAsB,EAAE,uBAAuB,EAC/C,eAAe,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,KAAK,eAAe,2BAWzF;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAClC,eAAe,EAAE,gBAAgB,EACjC,eAAe,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,KAAK,eAAe,oBAQzF;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACzC,sBAAsB,EAAE,uBAAuB,EAC/C,eAAe,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,KAAK,eAAe,2BAgBzF"}
1
+ {"version":3,"file":"DriverWrappers.d.ts","sourceRoot":"","sources":["../src/DriverWrappers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACN,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EAEvB,eAAe,EACf,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEpE;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACzC,sBAAsB,EAAE,uBAAuB,EAC/C,eAAe,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,KAAK,eAAe,2BAWzF;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAClC,eAAe,EAAE,gBAAgB,EACjC,eAAe,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,KAAK,eAAe,oBAQzF;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CACzC,sBAAsB,EAAE,uBAAuB,EAC/C,eAAe,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,KAAK,eAAe,2BAgBzF"}
@@ -6,6 +6,7 @@
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.wrapDocumentServiceFactory = exports.wrapDocumentService = exports.wrapDocumentStorageService = void 0;
8
8
  /**
9
+ * @deprecated - unused
9
10
  * Wraps the given IDocumentStorageService to override the `uploadSummaryWithContext` method. It calls the
10
11
  * `uploadSummaryCb` whenever a summary is uploaded by the client. The summary context can be updated in the
11
12
  * callback before it is uploaded to the server.
@@ -21,6 +22,7 @@ function wrapDocumentStorageService(innerDocStorageService, uploadSummaryCb) {
21
22
  }
22
23
  exports.wrapDocumentStorageService = wrapDocumentStorageService;
23
24
  /**
25
+ * @deprecated - unused
24
26
  * Wraps the given IDocumentService to override the `connectToStorage` method. The intent is to plumb the
25
27
  * `uploadSummaryCb` to the IDocumentStorageService so that it is called whenever a summary is uploaded by
26
28
  * the client.
@@ -38,6 +40,7 @@ function wrapDocumentService(innerDocService, uploadSummaryCb) {
38
40
  }
39
41
  exports.wrapDocumentService = wrapDocumentService;
40
42
  /**
43
+ * @deprecated - unused
41
44
  * Wraps the given IDocumentServiceFactory to override the `createDocumentService` method. The intent is to plumb
42
45
  * the `uploadSummaryCb` all the way to the IDocumentStorageService so that it is called whenever a summary is
43
46
  * uploaded by the client.
@@ -1 +1 @@
1
- {"version":3,"file":"DriverWrappers.js","sourceRoot":"","sources":["../src/DriverWrappers.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAYH;;;;;GAKG;AACH,SAAgB,0BAA0B,CACzC,sBAA+C,EAC/C,eAAyF;IAEzF,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAA4B,CAAC;IAChG,sBAAsB,CAAC,wBAAwB,GAAG,KAAK,EACtD,OAAqB,EACrB,OAAwB,EACN,EAAE;QACpB,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,sBAAsB,CAAC,wBAAwB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC7E,CAAC,CAAC;IACF,OAAO,sBAAsB,CAAC;AAC/B,CAAC;AAbD,gEAaC;AAED;;;;;;;GAOG;AACH,SAAgB,mBAAmB,CAClC,eAAiC,EACjC,eAAyF;IAEzF,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAqB,CAAC;IAC3E,eAAe,CAAC,gBAAgB,GAAG,KAAK,IAAsC,EAAE;QAC/E,MAAM,cAAc,GAAG,MAAM,eAAe,CAAC,gBAAgB,EAAE,CAAC;QAChE,OAAO,0BAA0B,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;IACpE,CAAC,CAAC;IACF,OAAO,eAAe,CAAC;AACxB,CAAC;AAVD,kDAUC;AAED;;;;;;;GAOG;AACH,SAAgB,0BAA0B,CACzC,sBAA+C,EAC/C,eAAyF;IAEzF,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAA4B,CAAC;IAChG,sBAAsB,CAAC,qBAAqB,GAAG,KAAK,EACnD,WAAyB,EACzB,MAA6B,EAC7B,kBAA4B,EACA,EAAE;QAC9B,MAAM,eAAe,GAAG,MAAM,sBAAsB,CAAC,qBAAqB,CACzE,WAAW,EACX,MAAM,EACN,kBAAkB,CAClB,CAAC;QACF,OAAO,mBAAmB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAC9D,CAAC,CAAC;IACF,OAAO,sBAAsB,CAAC;AAC/B,CAAC;AAlBD,gEAkBC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ITelemetryBaseLogger } from \"@fluidframework/core-interfaces\";\nimport {\n\tIDocumentService,\n\tIDocumentServiceFactory,\n\tIDocumentStorageService,\n\tIResolvedUrl,\n\tISummaryContext,\n} from \"@fluidframework/driver-definitions\";\nimport { ISummaryTree } from \"@fluidframework/protocol-definitions\";\n\n/**\n * Wraps the given IDocumentStorageService to override the `uploadSummaryWithContext` method. It calls the\n * `uploadSummaryCb` whenever a summary is uploaded by the client. The summary context can be updated in the\n * callback before it is uploaded to the server.\n * @internal\n */\nexport function wrapDocumentStorageService(\n\tinnerDocStorageService: IDocumentStorageService,\n\tuploadSummaryCb: (summaryTree: ISummaryTree, context: ISummaryContext) => ISummaryContext,\n) {\n\tconst outerDocStorageService = Object.create(innerDocStorageService) as IDocumentStorageService;\n\touterDocStorageService.uploadSummaryWithContext = async (\n\t\tsummary: ISummaryTree,\n\t\tcontext: ISummaryContext,\n\t): Promise<string> => {\n\t\tconst newContext = uploadSummaryCb(summary, context);\n\t\treturn innerDocStorageService.uploadSummaryWithContext(summary, newContext);\n\t};\n\treturn outerDocStorageService;\n}\n\n/**\n * Wraps the given IDocumentService to override the `connectToStorage` method. The intent is to plumb the\n * `uploadSummaryCb` to the IDocumentStorageService so that it is called whenever a summary is uploaded by\n * the client.\n * The document storage service that is created in `connectToStorage` is wrapped by calling `wrapDocumentStorageService`\n * to pass in the `uploadSummaryCb`.\n * @internal\n */\nexport function wrapDocumentService(\n\tinnerDocService: IDocumentService,\n\tuploadSummaryCb: (summaryTree: ISummaryTree, context: ISummaryContext) => ISummaryContext,\n) {\n\tconst outerDocService = Object.create(innerDocService) as IDocumentService;\n\touterDocService.connectToStorage = async (): Promise<IDocumentStorageService> => {\n\t\tconst storageService = await innerDocService.connectToStorage();\n\t\treturn wrapDocumentStorageService(storageService, uploadSummaryCb);\n\t};\n\treturn outerDocService;\n}\n\n/**\n * Wraps the given IDocumentServiceFactory to override the `createDocumentService` method. The intent is to plumb\n * the `uploadSummaryCb` all the way to the IDocumentStorageService so that it is called whenever a summary is\n * uploaded by the client.\n * The document service that is created in `createDocumentService` is wrapped by calling `wrapDocumentService` to\n * pass in the `uploadSummaryCb`.\n * @internal\n */\nexport function wrapDocumentServiceFactory(\n\tinnerDocServiceFactory: IDocumentServiceFactory,\n\tuploadSummaryCb: (summaryTree: ISummaryTree, context: ISummaryContext) => ISummaryContext,\n) {\n\tconst outerDocServiceFactory = Object.create(innerDocServiceFactory) as IDocumentServiceFactory;\n\touterDocServiceFactory.createDocumentService = async (\n\t\tresolvedUrl: IResolvedUrl,\n\t\tlogger?: ITelemetryBaseLogger,\n\t\tclientIsSummarizer?: boolean,\n\t): Promise<IDocumentService> => {\n\t\tconst documentService = await innerDocServiceFactory.createDocumentService(\n\t\t\tresolvedUrl,\n\t\t\tlogger,\n\t\t\tclientIsSummarizer,\n\t\t);\n\t\treturn wrapDocumentService(documentService, uploadSummaryCb);\n\t};\n\treturn outerDocServiceFactory;\n}\n"]}
1
+ {"version":3,"file":"DriverWrappers.js","sourceRoot":"","sources":["../src/DriverWrappers.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAYH;;;;;;GAMG;AACH,SAAgB,0BAA0B,CACzC,sBAA+C,EAC/C,eAAyF;IAEzF,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAA4B,CAAC;IAChG,sBAAsB,CAAC,wBAAwB,GAAG,KAAK,EACtD,OAAqB,EACrB,OAAwB,EACN,EAAE;QACpB,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,sBAAsB,CAAC,wBAAwB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC7E,CAAC,CAAC;IACF,OAAO,sBAAsB,CAAC;AAC/B,CAAC;AAbD,gEAaC;AAED;;;;;;;;GAQG;AACH,SAAgB,mBAAmB,CAClC,eAAiC,EACjC,eAAyF;IAEzF,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAqB,CAAC;IAC3E,eAAe,CAAC,gBAAgB,GAAG,KAAK,IAAsC,EAAE;QAC/E,MAAM,cAAc,GAAG,MAAM,eAAe,CAAC,gBAAgB,EAAE,CAAC;QAChE,OAAO,0BAA0B,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;IACpE,CAAC,CAAC;IACF,OAAO,eAAe,CAAC;AACxB,CAAC;AAVD,kDAUC;AAED;;;;;;;;GAQG;AACH,SAAgB,0BAA0B,CACzC,sBAA+C,EAC/C,eAAyF;IAEzF,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAA4B,CAAC;IAChG,sBAAsB,CAAC,qBAAqB,GAAG,KAAK,EACnD,WAAyB,EACzB,MAA6B,EAC7B,kBAA4B,EACA,EAAE;QAC9B,MAAM,eAAe,GAAG,MAAM,sBAAsB,CAAC,qBAAqB,CACzE,WAAW,EACX,MAAM,EACN,kBAAkB,CAClB,CAAC;QACF,OAAO,mBAAmB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAC9D,CAAC,CAAC;IACF,OAAO,sBAAsB,CAAC;AAC/B,CAAC;AAlBD,gEAkBC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ITelemetryBaseLogger } from \"@fluidframework/core-interfaces\";\nimport {\n\tIDocumentService,\n\tIDocumentServiceFactory,\n\tIDocumentStorageService,\n\tIResolvedUrl,\n\tISummaryContext,\n} from \"@fluidframework/driver-definitions\";\nimport { ISummaryTree } from \"@fluidframework/protocol-definitions\";\n\n/**\n * @deprecated - unused\n * Wraps the given IDocumentStorageService to override the `uploadSummaryWithContext` method. It calls the\n * `uploadSummaryCb` whenever a summary is uploaded by the client. The summary context can be updated in the\n * callback before it is uploaded to the server.\n * @internal\n */\nexport function wrapDocumentStorageService(\n\tinnerDocStorageService: IDocumentStorageService,\n\tuploadSummaryCb: (summaryTree: ISummaryTree, context: ISummaryContext) => ISummaryContext,\n) {\n\tconst outerDocStorageService = Object.create(innerDocStorageService) as IDocumentStorageService;\n\touterDocStorageService.uploadSummaryWithContext = async (\n\t\tsummary: ISummaryTree,\n\t\tcontext: ISummaryContext,\n\t): Promise<string> => {\n\t\tconst newContext = uploadSummaryCb(summary, context);\n\t\treturn innerDocStorageService.uploadSummaryWithContext(summary, newContext);\n\t};\n\treturn outerDocStorageService;\n}\n\n/**\n * @deprecated - unused\n * Wraps the given IDocumentService to override the `connectToStorage` method. The intent is to plumb the\n * `uploadSummaryCb` to the IDocumentStorageService so that it is called whenever a summary is uploaded by\n * the client.\n * The document storage service that is created in `connectToStorage` is wrapped by calling `wrapDocumentStorageService`\n * to pass in the `uploadSummaryCb`.\n * @internal\n */\nexport function wrapDocumentService(\n\tinnerDocService: IDocumentService,\n\tuploadSummaryCb: (summaryTree: ISummaryTree, context: ISummaryContext) => ISummaryContext,\n) {\n\tconst outerDocService = Object.create(innerDocService) as IDocumentService;\n\touterDocService.connectToStorage = async (): Promise<IDocumentStorageService> => {\n\t\tconst storageService = await innerDocService.connectToStorage();\n\t\treturn wrapDocumentStorageService(storageService, uploadSummaryCb);\n\t};\n\treturn outerDocService;\n}\n\n/**\n * @deprecated - unused\n * Wraps the given IDocumentServiceFactory to override the `createDocumentService` method. The intent is to plumb\n * the `uploadSummaryCb` all the way to the IDocumentStorageService so that it is called whenever a summary is\n * uploaded by the client.\n * The document service that is created in `createDocumentService` is wrapped by calling `wrapDocumentService` to\n * pass in the `uploadSummaryCb`.\n * @internal\n */\nexport function wrapDocumentServiceFactory(\n\tinnerDocServiceFactory: IDocumentServiceFactory,\n\tuploadSummaryCb: (summaryTree: ISummaryTree, context: ISummaryContext) => ISummaryContext,\n) {\n\tconst outerDocServiceFactory = Object.create(innerDocServiceFactory) as IDocumentServiceFactory;\n\touterDocServiceFactory.createDocumentService = async (\n\t\tresolvedUrl: IResolvedUrl,\n\t\tlogger?: ITelemetryBaseLogger,\n\t\tclientIsSummarizer?: boolean,\n\t): Promise<IDocumentService> => {\n\t\tconst documentService = await innerDocServiceFactory.createDocumentService(\n\t\t\tresolvedUrl,\n\t\t\tlogger,\n\t\t\tclientIsSummarizer,\n\t\t);\n\t\treturn wrapDocumentService(documentService, uploadSummaryCb);\n\t};\n\treturn outerDocServiceFactory;\n}\n"]}
@@ -4,7 +4,20 @@
4
4
  */
5
5
  import { ConfigTypes, IConfigProviderBase } from "@fluidframework/core-interfaces";
6
6
  /**
7
+ * Extension of IConfigProviderBase that supports setting a config value and clearing all
8
+ * config values for testing.
9
+ *
7
10
  * @internal
8
11
  */
9
- export declare const mockConfigProvider: (settings?: Record<string, ConfigTypes>) => IConfigProviderBase;
12
+ export interface ITestConfigProvider extends IConfigProviderBase {
13
+ /** Set a config value */
14
+ set: (key: string, value: ConfigTypes) => void;
15
+ /** Clear all config values */
16
+ clear: () => void;
17
+ }
18
+ /**
19
+ * Creates a test config provider with the ability to set configs values and clear all config values.
20
+ * @internal
21
+ */
22
+ export declare const createTestConfigProvider: () => ITestConfigProvider;
10
23
  //# sourceMappingURL=TestConfigs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TestConfigs.d.ts","sourceRoot":"","sources":["../src/TestConfigs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEnF;;GAEG;AACH,eAAO,MAAM,kBAAkB,cACpB,OAAO,MAAM,EAAE,WAAW,CAAC,KACnC,mBAIF,CAAC"}
1
+ {"version":3,"file":"TestConfigs.d.ts","sourceRoot":"","sources":["../src/TestConfigs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEnF;;;;;GAKG;AACH,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC/D,yBAAyB;IACzB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC/C,8BAA8B;IAC9B,KAAK,EAAE,MAAM,IAAI,CAAC;CAClB;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,QAAO,mBAc3C,CAAC"}
@@ -4,14 +4,25 @@
4
4
  * Licensed under the MIT License.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.mockConfigProvider = void 0;
7
+ exports.createTestConfigProvider = void 0;
8
8
  /**
9
+ * Creates a test config provider with the ability to set configs values and clear all config values.
9
10
  * @internal
10
11
  */
11
- const mockConfigProvider = (settings = {}) => {
12
+ const createTestConfigProvider = () => {
13
+ const settings = {};
12
14
  return {
13
15
  getRawConfig: (name) => settings[name],
16
+ set: (key, value) => {
17
+ settings[key] = value;
18
+ },
19
+ clear: () => {
20
+ Object.keys(settings).forEach((key) => {
21
+ // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
22
+ delete settings[key];
23
+ });
24
+ },
14
25
  };
15
26
  };
16
- exports.mockConfigProvider = mockConfigProvider;
27
+ exports.createTestConfigProvider = createTestConfigProvider;
17
28
  //# sourceMappingURL=TestConfigs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TestConfigs.js","sourceRoot":"","sources":["../src/TestConfigs.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAIH;;GAEG;AACI,MAAM,kBAAkB,GAAG,CACjC,WAAwC,EAAE,EACpB,EAAE;IACxB,OAAO;QACN,YAAY,EAAE,CAAC,IAAY,EAAe,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;KAC3D,CAAC;AACH,CAAC,CAAC;AANW,QAAA,kBAAkB,sBAM7B","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ConfigTypes, IConfigProviderBase } from \"@fluidframework/core-interfaces\";\n\n/**\n * @internal\n */\nexport const mockConfigProvider = (\n\tsettings: Record<string, ConfigTypes> = {},\n): IConfigProviderBase => {\n\treturn {\n\t\tgetRawConfig: (name: string): ConfigTypes => settings[name],\n\t};\n};\n"]}
1
+ {"version":3,"file":"TestConfigs.js","sourceRoot":"","sources":["../src/TestConfigs.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAiBH;;;GAGG;AACI,MAAM,wBAAwB,GAAG,GAAwB,EAAE;IACjE,MAAM,QAAQ,GAAgC,EAAE,CAAC;IACjD,OAAO;QACN,YAAY,EAAE,CAAC,IAAY,EAAe,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC3D,GAAG,EAAE,CAAC,GAAW,EAAE,KAAkB,EAAE,EAAE;YACxC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACvB,CAAC;QACD,KAAK,EAAE,GAAG,EAAE;YACX,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBACrC,gEAAgE;gBAChE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;QACJ,CAAC;KACD,CAAC;AACH,CAAC,CAAC;AAdW,QAAA,wBAAwB,4BAcnC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ConfigTypes, IConfigProviderBase } from \"@fluidframework/core-interfaces\";\n\n/**\n * Extension of IConfigProviderBase that supports setting a config value and clearing all\n * config values for testing.\n *\n * @internal\n */\nexport interface ITestConfigProvider extends IConfigProviderBase {\n\t/** Set a config value */\n\tset: (key: string, value: ConfigTypes) => void;\n\t/** Clear all config values */\n\tclear: () => void;\n}\n\n/**\n * Creates a test config provider with the ability to set configs values and clear all config values.\n * @internal\n */\nexport const createTestConfigProvider = (): ITestConfigProvider => {\n\tconst settings: Record<string, ConfigTypes> = {};\n\treturn {\n\t\tgetRawConfig: (name: string): ConfigTypes => settings[name],\n\t\tset: (key: string, value: ConfigTypes) => {\n\t\t\tsettings[key] = value;\n\t\t},\n\t\tclear: () => {\n\t\t\tObject.keys(settings).forEach((key) => {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\t\t\tdelete settings[key];\n\t\t\t});\n\t\t},\n\t};\n};\n"]}
@@ -3,12 +3,17 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { ContainerRuntimeFactoryWithDefaultDataStore } from "@fluidframework/aqueduct";
6
- import { IContainer } from "@fluidframework/container-definitions";
6
+ import { IContainer, IHostLoader } from "@fluidframework/container-definitions";
7
7
  import { IOnDemandSummarizeOptions, ISummarizer } from "@fluidframework/container-runtime";
8
8
  import { ITelemetryBaseLogger, IConfigProviderBase } from "@fluidframework/core-interfaces";
9
9
  import { IFluidDataStoreFactory, NamedFluidDataStoreRegistryEntries } from "@fluidframework/runtime-definitions";
10
10
  import { ISummaryTree } from "@fluidframework/protocol-definitions";
11
- import { ITestContainerConfig, ITestObjectProvider } from "./testObjectProvider";
11
+ import { ITestContainerConfig, ITestObjectProvider } from "./testObjectProvider.js";
12
+ /** @internal */
13
+ export declare function createSummarizerCore(container: IContainer, loader: IHostLoader, summaryVersion?: string): Promise<{
14
+ container: IContainer;
15
+ summarizer: ISummarizer;
16
+ }>;
12
17
  /**
13
18
  * Creates a summarizer client from the given container and data store factory, and returns the summarizer client's
14
19
  * IContainer and ISummarizer.
@@ -1 +1 @@
1
- {"version":3,"file":"TestSummaryUtils.d.ts","sourceRoot":"","sources":["../src/TestSummaryUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,2CAA2C,EAAE,MAAM,0BAA0B,CAAC;AAEvF,OAAO,EAAE,UAAU,EAA6B,MAAM,uCAAuC,CAAC;AAC9F,OAAO,EACN,yBAAyB,EACzB,WAAW,EAEX,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACN,oBAAoB,EAGpB,mBAAmB,EACnB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACN,sBAAsB,EACtB,kCAAkC,EAClC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAsDjF;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAChD,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,EAAE,UAAU,EACrB,gBAAgB,EAAE,sBAAsB,EACxC,cAAc,CAAC,EAAE,MAAM,EACvB,2BAA2B,qDAA8C,EACzE,eAAe,CAAC,EAAE,kCAAkC,EACpD,MAAM,CAAC,EAAE,oBAAoB,EAC7B,cAAc,GAAE,mBAA0C,GACxD,OAAO,CAAC;IAAE,SAAS,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,WAAW,CAAA;CAAE,CAAC,CAiB7D;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACrC,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,EAAE,UAAU,EACrB,MAAM,CAAC,EAAE,oBAAoB,EAC7B,cAAc,CAAC,EAAE,MAAM,EACvB,MAAM,CAAC,EAAE,oBAAoB,GAC3B,OAAO,CAAC;IAAE,SAAS,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,WAAW,CAAA;CAAE,CAAC,CAe7D;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CACjC,UAAU,EAAE,WAAW,EACvB,MAAM,GAAE,MAAM,GAAG,yBAA6C,GAC5D,OAAO,CAAC,WAAW,CAAC,CAmCtB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC3B;;OAEG;IACH,WAAW,EAAE,YAAY,CAAC;IAC1B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"TestSummaryUtils.d.ts","sourceRoot":"","sources":["../src/TestSummaryUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,2CAA2C,EAAE,MAAM,0BAA0B,CAAC;AAEvF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAgB,MAAM,uCAAuC,CAAC;AAC9F,OAAO,EACN,yBAAyB,EACzB,WAAW,EAEX,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACN,oBAAoB,EAEpB,mBAAmB,EAEnB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACN,sBAAsB,EACtB,kCAAkC,EAClC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AA8BpF,gBAAgB;AAChB,wBAAsB,oBAAoB,CACzC,SAAS,EAAE,UAAU,EACrB,MAAM,EAAE,WAAW,EACnB,cAAc,CAAC,EAAE,MAAM;;;GAiCvB;AAWD;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAChD,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,EAAE,UAAU,EACrB,gBAAgB,EAAE,sBAAsB,EACxC,cAAc,CAAC,EAAE,MAAM,EACvB,2BAA2B,qDAA8C,EACzE,eAAe,CAAC,EAAE,kCAAkC,EACpD,MAAM,CAAC,EAAE,oBAAoB,EAC7B,cAAc,GAAE,mBAAgD,GAC9D,OAAO,CAAC;IAAE,SAAS,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,WAAW,CAAA;CAAE,CAAC,CAiB7D;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACrC,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,EAAE,UAAU,EACrB,MAAM,CAAC,EAAE,oBAAoB,EAC7B,cAAc,CAAC,EAAE,MAAM,EACvB,MAAM,CAAC,EAAE,oBAAoB,GAC3B,OAAO,CAAC;IAAE,SAAS,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,WAAW,CAAA;CAAE,CAAC,CAe7D;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CACjC,UAAU,EAAE,WAAW,EACvB,MAAM,GAAE,MAAM,GAAG,yBAA6C,GAC5D,OAAO,CAAC,WAAW,CAAC,CAmCtB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC3B;;OAEG;IACH,WAAW,EAAE,YAAY,CAAC;IAC1B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;CACtB"}
@@ -4,16 +4,38 @@
4
4
  * Licensed under the MIT License.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.summarizeNow = exports.createSummarizer = exports.createSummarizerFromFactory = void 0;
7
+ exports.summarizeNow = exports.createSummarizer = exports.createSummarizerFromFactory = exports.createSummarizerCore = void 0;
8
8
  const aqueduct_1 = require("@fluidframework/aqueduct");
9
9
  const core_utils_1 = require("@fluidframework/core-utils");
10
10
  const container_definitions_1 = require("@fluidframework/container-definitions");
11
11
  const driver_definitions_1 = require("@fluidframework/driver-definitions");
12
- const TestConfigs_1 = require("./TestConfigs");
13
- const containerUtils_1 = require("./containerUtils");
14
- const timeoutUtils_1 = require("./timeoutUtils");
15
- const testContainerRuntimeFactoryWithDefaultDataStore_1 = require("./testContainerRuntimeFactoryWithDefaultDataStore");
12
+ const TestConfigs_js_1 = require("./TestConfigs.js");
13
+ const containerUtils_js_1 = require("./containerUtils.js");
14
+ const timeoutUtils_js_1 = require("./timeoutUtils.js");
15
+ const testContainerRuntimeFactoryWithDefaultDataStore_js_1 = require("./testContainerRuntimeFactoryWithDefaultDataStore.js");
16
16
  const summarizerClientType = "summarizer";
17
+ /**
18
+ * This function should ONLY be used for back compat purposes
19
+ * LTS versions of the Loader/Container will not have the "getEntryPoint" method, so we need to fallback to "request"
20
+ * This function can be removed once LTS version of Loader moves to 2.0.0-internal.7.0.0
21
+ * @internal
22
+ */
23
+ async function getSummarizerBackCompat(container) {
24
+ if (container.getEntryPoint !== undefined) {
25
+ const entryPoint = await container.getEntryPoint();
26
+ // Note: We need to also check if the result of `getEntryPoint()` is defined. This is because when running
27
+ // cross version compat testing scenarios, if we create with 1.X container and load with 2.X then the
28
+ // function container.getEntryPoint will be defined for the 2.X container. However, it will not return undefined
29
+ // since the container's runtime will be on version 1.X, which does not have an entry point defined.
30
+ if (entryPoint !== undefined) {
31
+ return entryPoint;
32
+ }
33
+ }
34
+ const response = await container.request({ url: "_summarizer" });
35
+ (0, core_utils_1.assert)(response.status === 200, "requesting '/' should return default data object");
36
+ return response.value;
37
+ }
38
+ /** @internal */
17
39
  async function createSummarizerCore(container, loader, summaryVersion) {
18
40
  const absoluteUrl = await container.getAbsoluteUrl("");
19
41
  if (absoluteUrl === undefined) {
@@ -32,9 +54,11 @@ async function createSummarizerCore(container, loader, summaryVersion) {
32
54
  url: absoluteUrl,
33
55
  };
34
56
  const summarizerContainer = await loader.resolve(request);
35
- await (0, containerUtils_1.waitForContainerConnection)(summarizerContainer);
36
- const fluidObject = await summarizerContainer.getEntryPoint();
37
- if (fluidObject?.ISummarizer === undefined) {
57
+ await (0, containerUtils_js_1.waitForContainerConnection)(summarizerContainer);
58
+ // Old loaders will not have getEntryPoint API on the container. So, use getSummarizerBackCompat which
59
+ // will use request pattern to get the summarizer in these old loaders.
60
+ const fluidObject = await getSummarizerBackCompat(summarizerContainer);
61
+ if (fluidObject.ISummarizer === undefined) {
38
62
  throw new Error("Fluid object does not implement ISummarizer");
39
63
  }
40
64
  return {
@@ -42,6 +66,7 @@ async function createSummarizerCore(container, loader, summaryVersion) {
42
66
  summarizer: fluidObject.ISummarizer,
43
67
  };
44
68
  }
69
+ exports.createSummarizerCore = createSummarizerCore;
45
70
  const defaultSummaryOptions = {
46
71
  summaryConfigOverrides: {
47
72
  state: "disableHeuristics",
@@ -56,8 +81,8 @@ const defaultSummaryOptions = {
56
81
  * The ISummarizer can be used to generate on-demand summaries. The IContainer can be used to fetch data stores, etc.
57
82
  * @internal
58
83
  */
59
- async function createSummarizerFromFactory(provider, container, dataStoreFactory, summaryVersion, containerRuntimeFactoryType = aqueduct_1.ContainerRuntimeFactoryWithDefaultDataStore, registryEntries, logger, configProvider = (0, TestConfigs_1.mockConfigProvider)()) {
60
- const runtimeFactory = (0, testContainerRuntimeFactoryWithDefaultDataStore_1.createContainerRuntimeFactoryWithDefaultDataStore)(containerRuntimeFactoryType, {
84
+ async function createSummarizerFromFactory(provider, container, dataStoreFactory, summaryVersion, containerRuntimeFactoryType = aqueduct_1.ContainerRuntimeFactoryWithDefaultDataStore, registryEntries, logger, configProvider = (0, TestConfigs_js_1.createTestConfigProvider)()) {
85
+ const runtimeFactory = (0, testContainerRuntimeFactoryWithDefaultDataStore_js_1.createContainerRuntimeFactoryWithDefaultDataStore)(containerRuntimeFactoryType, {
61
86
  defaultFactory: dataStoreFactory,
62
87
  registryEntries: registryEntries ?? [
63
88
  [dataStoreFactory.type, Promise.resolve(dataStoreFactory)],
@@ -87,7 +112,7 @@ async function createSummarizer(provider, container, config, summaryVersion, log
87
112
  },
88
113
  loaderProps: {
89
114
  ...config?.loaderProps,
90
- configProvider: config?.loaderProps?.configProvider ?? (0, TestConfigs_1.mockConfigProvider)(),
115
+ configProvider: config?.loaderProps?.configProvider ?? (0, TestConfigs_js_1.createTestConfigProvider)(),
91
116
  logger,
92
117
  },
93
118
  };
@@ -107,7 +132,7 @@ exports.createSummarizer = createSummarizer;
107
132
  async function summarizeNow(summarizer, inputs = "end-to-end test") {
108
133
  const options = typeof inputs === "string" ? { reason: inputs } : inputs;
109
134
  const result = summarizer.summarizeOnDemand(options);
110
- const submitResult = await (0, timeoutUtils_1.timeoutAwait)(result.summarySubmitted);
135
+ const submitResult = await (0, timeoutUtils_js_1.timeoutAwait)(result.summarySubmitted);
111
136
  if (!submitResult.success) {
112
137
  if (typeof submitResult.error !== "string") {
113
138
  submitResult.error.data = submitResult.data;
@@ -116,11 +141,11 @@ async function summarizeNow(summarizer, inputs = "end-to-end test") {
116
141
  }
117
142
  (0, core_utils_1.assert)(submitResult.data.stage === "submit", "on-demand summary submitted data stage should be submit");
118
143
  (0, core_utils_1.assert)(submitResult.data.summaryTree !== undefined, "summary tree should exist");
119
- const broadcastResult = await (0, timeoutUtils_1.timeoutAwait)(result.summaryOpBroadcasted);
144
+ const broadcastResult = await (0, timeoutUtils_js_1.timeoutAwait)(result.summaryOpBroadcasted);
120
145
  if (!broadcastResult.success) {
121
146
  throw broadcastResult.error;
122
147
  }
123
- const ackNackResult = await (0, timeoutUtils_1.timeoutAwait)(result.receivedSummaryAckOrNack);
148
+ const ackNackResult = await (0, timeoutUtils_js_1.timeoutAwait)(result.receivedSummaryAckOrNack);
124
149
  if (!ackNackResult.success) {
125
150
  throw ackNackResult.error;
126
151
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TestSummaryUtils.js","sourceRoot":"","sources":["../src/TestSummaryUtils.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 { ContainerRuntimeFactoryWithDefaultDataStore } from \"@fluidframework/aqueduct\";\nimport { assert } from \"@fluidframework/core-utils\";\nimport { IContainer, IHostLoader, LoaderHeader } from \"@fluidframework/container-definitions\";\nimport {\n\tIOnDemandSummarizeOptions,\n\tISummarizer,\n\tISummaryRuntimeOptions,\n} from \"@fluidframework/container-runtime\";\nimport {\n\tITelemetryBaseLogger,\n\tFluidObject,\n\tIRequest,\n\tIConfigProviderBase,\n} from \"@fluidframework/core-interfaces\";\nimport { DriverHeader } from \"@fluidframework/driver-definitions\";\nimport {\n\tIFluidDataStoreFactory,\n\tNamedFluidDataStoreRegistryEntries,\n} from \"@fluidframework/runtime-definitions\";\nimport { ISummaryTree } from \"@fluidframework/protocol-definitions\";\nimport { ITestContainerConfig, ITestObjectProvider } from \"./testObjectProvider\";\nimport { mockConfigProvider } from \"./TestConfigs\";\nimport { waitForContainerConnection } from \"./containerUtils\";\nimport { timeoutAwait } from \"./timeoutUtils\";\nimport { createContainerRuntimeFactoryWithDefaultDataStore } from \"./testContainerRuntimeFactoryWithDefaultDataStore\";\n\nconst summarizerClientType = \"summarizer\";\n\nasync function createSummarizerCore(\n\tcontainer: IContainer,\n\tloader: IHostLoader,\n\tsummaryVersion?: string,\n) {\n\tconst absoluteUrl = await container.getAbsoluteUrl(\"\");\n\tif (absoluteUrl === undefined) {\n\t\tthrow new Error(\"URL could not be resolved\");\n\t}\n\n\tconst request: IRequest = {\n\t\theaders: {\n\t\t\t[LoaderHeader.cache]: false,\n\t\t\t[LoaderHeader.clientDetails]: {\n\t\t\t\tcapabilities: { interactive: false },\n\t\t\t\ttype: summarizerClientType,\n\t\t\t},\n\t\t\t[DriverHeader.summarizingClient]: true,\n\t\t\t[LoaderHeader.version]: summaryVersion,\n\t\t},\n\t\turl: absoluteUrl,\n\t};\n\tconst summarizerContainer = await loader.resolve(request);\n\tawait waitForContainerConnection(summarizerContainer);\n\n\tconst fluidObject: FluidObject<ISummarizer> | undefined =\n\t\tawait summarizerContainer.getEntryPoint();\n\tif (fluidObject?.ISummarizer === undefined) {\n\t\tthrow new Error(\"Fluid object does not implement ISummarizer\");\n\t}\n\n\treturn {\n\t\tcontainer: summarizerContainer,\n\t\tsummarizer: fluidObject.ISummarizer,\n\t};\n}\n\nconst defaultSummaryOptions: ISummaryRuntimeOptions = {\n\tsummaryConfigOverrides: {\n\t\tstate: \"disableHeuristics\",\n\t\tmaxAckWaitTime: 20000, // Some of the AFR tests take a long time to ack.\n\t\tmaxOpsSinceLastSummary: 7000,\n\t\tinitialSummarizerDelayMs: 0,\n\t},\n};\n\n/**\n * Creates a summarizer client from the given container and data store factory, and returns the summarizer client's\n * IContainer and ISummarizer.\n * The ISummarizer can be used to generate on-demand summaries. The IContainer can be used to fetch data stores, etc.\n * @internal\n */\nexport async function createSummarizerFromFactory(\n\tprovider: ITestObjectProvider,\n\tcontainer: IContainer,\n\tdataStoreFactory: IFluidDataStoreFactory,\n\tsummaryVersion?: string,\n\tcontainerRuntimeFactoryType = ContainerRuntimeFactoryWithDefaultDataStore,\n\tregistryEntries?: NamedFluidDataStoreRegistryEntries,\n\tlogger?: ITelemetryBaseLogger,\n\tconfigProvider: IConfigProviderBase = mockConfigProvider(),\n): Promise<{ container: IContainer; summarizer: ISummarizer }> {\n\tconst runtimeFactory = createContainerRuntimeFactoryWithDefaultDataStore(\n\t\tcontainerRuntimeFactoryType,\n\t\t{\n\t\t\tdefaultFactory: dataStoreFactory,\n\t\t\tregistryEntries: registryEntries ?? [\n\t\t\t\t[dataStoreFactory.type, Promise.resolve(dataStoreFactory)],\n\t\t\t],\n\t\t\truntimeOptions: { summaryOptions: defaultSummaryOptions },\n\t\t},\n\t);\n\n\tconst loader = provider.createLoader([[provider.defaultCodeDetails, runtimeFactory]], {\n\t\tconfigProvider,\n\t\tlogger,\n\t});\n\treturn createSummarizerCore(container, loader, summaryVersion);\n}\n\n/**\n * Creates a summarizer client from the given container and returns the summarizer client's IContainer and ISummarizer.\n * The ISummarizer can be used to generate on-demand summaries. The IContainer can be used to fetch data stores, etc.\n *\n * Can pass in a test config provider to enable/disable features.\n * @internal\n */\nexport async function createSummarizer(\n\tprovider: ITestObjectProvider,\n\tcontainer: IContainer,\n\tconfig?: ITestContainerConfig,\n\tsummaryVersion?: string,\n\tlogger?: ITelemetryBaseLogger,\n): Promise<{ container: IContainer; summarizer: ISummarizer }> {\n\tconst testContainerConfig: ITestContainerConfig = {\n\t\t...config,\n\t\truntimeOptions: {\n\t\t\t...config?.runtimeOptions,\n\t\t\tsummaryOptions: config?.runtimeOptions?.summaryOptions ?? defaultSummaryOptions,\n\t\t},\n\t\tloaderProps: {\n\t\t\t...config?.loaderProps,\n\t\t\tconfigProvider: config?.loaderProps?.configProvider ?? mockConfigProvider(),\n\t\t\tlogger,\n\t\t},\n\t};\n\tconst loader = provider.makeTestLoader(testContainerConfig);\n\treturn createSummarizerCore(container, loader, summaryVersion);\n}\n\n/**\n * Summarizes on demand and returns the summary tree, the version number and the reference sequence number of the\n * submitted summary.\n *\n * @param summarizer - The ISummarizer to use to summarize on demand\n * @param inputs - Either the reason string or the full IOnDemandSummarizeOptions.\n * Defaults to the reason \"end-to-end test\".\n * @internal\n */\nexport async function summarizeNow(\n\tsummarizer: ISummarizer,\n\tinputs: string | IOnDemandSummarizeOptions = \"end-to-end test\",\n): Promise<SummaryInfo> {\n\tconst options: IOnDemandSummarizeOptions =\n\t\ttypeof inputs === \"string\" ? { reason: inputs } : inputs;\n\tconst result = summarizer.summarizeOnDemand(options);\n\n\tconst submitResult = await timeoutAwait(result.summarySubmitted);\n\tif (!submitResult.success) {\n\t\tif (typeof submitResult.error !== \"string\") {\n\t\t\tsubmitResult.error.data = submitResult.data;\n\t\t}\n\t\tthrow submitResult.error;\n\t}\n\tassert(\n\t\tsubmitResult.data.stage === \"submit\",\n\t\t\"on-demand summary submitted data stage should be submit\",\n\t);\n\tassert(submitResult.data.summaryTree !== undefined, \"summary tree should exist\");\n\n\tconst broadcastResult = await timeoutAwait(result.summaryOpBroadcasted);\n\tif (!broadcastResult.success) {\n\t\tthrow broadcastResult.error;\n\t}\n\n\tconst ackNackResult = await timeoutAwait(result.receivedSummaryAckOrNack);\n\tif (!ackNackResult.success) {\n\t\tthrow ackNackResult.error;\n\t}\n\n\tawait new Promise((resolve) => process.nextTick(resolve));\n\n\treturn {\n\t\tsummaryTree: submitResult.data.summaryTree,\n\t\tsummaryVersion: ackNackResult.data.summaryAckOp.contents.handle,\n\t\tsummaryRefSeq: submitResult.data.referenceSequenceNumber,\n\t};\n}\n\n/**\n * Summary information containing the summary tree, summary version, and summary sequence number.\n * @internal\n */\nexport interface SummaryInfo {\n\t/**\n\t * The summary tree generated\n\t */\n\tsummaryTree: ISummaryTree;\n\t/**\n\t * Handle of the completed summary\n\t */\n\tsummaryVersion: string;\n\t/**\n\t * Reference sequence number of the current summary generation\n\t */\n\tsummaryRefSeq: number;\n}\n"]}
1
+ {"version":3,"file":"TestSummaryUtils.js","sourceRoot":"","sources":["../src/TestSummaryUtils.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 { ContainerRuntimeFactoryWithDefaultDataStore } from \"@fluidframework/aqueduct\";\nimport { assert } from \"@fluidframework/core-utils\";\nimport { IContainer, IHostLoader, LoaderHeader } from \"@fluidframework/container-definitions\";\nimport {\n\tIOnDemandSummarizeOptions,\n\tISummarizer,\n\tISummaryRuntimeOptions,\n} from \"@fluidframework/container-runtime\";\nimport {\n\tITelemetryBaseLogger,\n\tIRequest,\n\tIConfigProviderBase,\n\tIResponse,\n} from \"@fluidframework/core-interfaces\";\nimport { DriverHeader } from \"@fluidframework/driver-definitions\";\nimport {\n\tIFluidDataStoreFactory,\n\tNamedFluidDataStoreRegistryEntries,\n} from \"@fluidframework/runtime-definitions\";\nimport { ISummaryTree } from \"@fluidframework/protocol-definitions\";\nimport { ITestContainerConfig, ITestObjectProvider } from \"./testObjectProvider.js\";\nimport { createTestConfigProvider } from \"./TestConfigs.js\";\nimport { waitForContainerConnection } from \"./containerUtils.js\";\nimport { timeoutAwait } from \"./timeoutUtils.js\";\nimport { createContainerRuntimeFactoryWithDefaultDataStore } from \"./testContainerRuntimeFactoryWithDefaultDataStore.js\";\n\nconst summarizerClientType = \"summarizer\";\n\n/**\n * This function should ONLY be used for back compat purposes\n * LTS versions of the Loader/Container will not have the \"getEntryPoint\" method, so we need to fallback to \"request\"\n * This function can be removed once LTS version of Loader moves to 2.0.0-internal.7.0.0\n * @internal\n */\nasync function getSummarizerBackCompat(container: IContainer): Promise<ISummarizer> {\n\tif (container.getEntryPoint !== undefined) {\n\t\tconst entryPoint = await container.getEntryPoint();\n\t\t// Note: We need to also check if the result of `getEntryPoint()` is defined. This is because when running\n\t\t// cross version compat testing scenarios, if we create with 1.X container and load with 2.X then the\n\t\t// function container.getEntryPoint will be defined for the 2.X container. However, it will not return undefined\n\t\t// since the container's runtime will be on version 1.X, which does not have an entry point defined.\n\t\tif (entryPoint !== undefined) {\n\t\t\treturn entryPoint as ISummarizer;\n\t\t}\n\t}\n\tconst response: IResponse = await (container as any).request({ url: \"_summarizer\" });\n\tassert(response.status === 200, \"requesting '/' should return default data object\");\n\treturn response.value as ISummarizer;\n}\n\n/** @internal */\nexport async function createSummarizerCore(\n\tcontainer: IContainer,\n\tloader: IHostLoader,\n\tsummaryVersion?: string,\n) {\n\tconst absoluteUrl = await container.getAbsoluteUrl(\"\");\n\tif (absoluteUrl === undefined) {\n\t\tthrow new Error(\"URL could not be resolved\");\n\t}\n\n\tconst request: IRequest = {\n\t\theaders: {\n\t\t\t[LoaderHeader.cache]: false,\n\t\t\t[LoaderHeader.clientDetails]: {\n\t\t\t\tcapabilities: { interactive: false },\n\t\t\t\ttype: summarizerClientType,\n\t\t\t},\n\t\t\t[DriverHeader.summarizingClient]: true,\n\t\t\t[LoaderHeader.version]: summaryVersion,\n\t\t},\n\t\turl: absoluteUrl,\n\t};\n\tconst summarizerContainer = await loader.resolve(request);\n\tawait waitForContainerConnection(summarizerContainer);\n\n\t// Old loaders will not have getEntryPoint API on the container. So, use getSummarizerBackCompat which\n\t// will use request pattern to get the summarizer in these old loaders.\n\tconst fluidObject = await getSummarizerBackCompat(summarizerContainer);\n\tif (fluidObject.ISummarizer === undefined) {\n\t\tthrow new Error(\"Fluid object does not implement ISummarizer\");\n\t}\n\n\treturn {\n\t\tcontainer: summarizerContainer,\n\t\tsummarizer: fluidObject.ISummarizer,\n\t};\n}\n\nconst defaultSummaryOptions: ISummaryRuntimeOptions = {\n\tsummaryConfigOverrides: {\n\t\tstate: \"disableHeuristics\",\n\t\tmaxAckWaitTime: 20000, // Some of the AFR tests take a long time to ack.\n\t\tmaxOpsSinceLastSummary: 7000,\n\t\tinitialSummarizerDelayMs: 0,\n\t},\n};\n\n/**\n * Creates a summarizer client from the given container and data store factory, and returns the summarizer client's\n * IContainer and ISummarizer.\n * The ISummarizer can be used to generate on-demand summaries. The IContainer can be used to fetch data stores, etc.\n * @internal\n */\nexport async function createSummarizerFromFactory(\n\tprovider: ITestObjectProvider,\n\tcontainer: IContainer,\n\tdataStoreFactory: IFluidDataStoreFactory,\n\tsummaryVersion?: string,\n\tcontainerRuntimeFactoryType = ContainerRuntimeFactoryWithDefaultDataStore,\n\tregistryEntries?: NamedFluidDataStoreRegistryEntries,\n\tlogger?: ITelemetryBaseLogger,\n\tconfigProvider: IConfigProviderBase = createTestConfigProvider(),\n): Promise<{ container: IContainer; summarizer: ISummarizer }> {\n\tconst runtimeFactory = createContainerRuntimeFactoryWithDefaultDataStore(\n\t\tcontainerRuntimeFactoryType,\n\t\t{\n\t\t\tdefaultFactory: dataStoreFactory,\n\t\t\tregistryEntries: registryEntries ?? [\n\t\t\t\t[dataStoreFactory.type, Promise.resolve(dataStoreFactory)],\n\t\t\t],\n\t\t\truntimeOptions: { summaryOptions: defaultSummaryOptions },\n\t\t},\n\t);\n\n\tconst loader = provider.createLoader([[provider.defaultCodeDetails, runtimeFactory]], {\n\t\tconfigProvider,\n\t\tlogger,\n\t});\n\treturn createSummarizerCore(container, loader, summaryVersion);\n}\n\n/**\n * Creates a summarizer client from the given container and returns the summarizer client's IContainer and ISummarizer.\n * The ISummarizer can be used to generate on-demand summaries. The IContainer can be used to fetch data stores, etc.\n *\n * Can pass in a test config provider to enable/disable features.\n * @internal\n */\nexport async function createSummarizer(\n\tprovider: ITestObjectProvider,\n\tcontainer: IContainer,\n\tconfig?: ITestContainerConfig,\n\tsummaryVersion?: string,\n\tlogger?: ITelemetryBaseLogger,\n): Promise<{ container: IContainer; summarizer: ISummarizer }> {\n\tconst testContainerConfig: ITestContainerConfig = {\n\t\t...config,\n\t\truntimeOptions: {\n\t\t\t...config?.runtimeOptions,\n\t\t\tsummaryOptions: config?.runtimeOptions?.summaryOptions ?? defaultSummaryOptions,\n\t\t},\n\t\tloaderProps: {\n\t\t\t...config?.loaderProps,\n\t\t\tconfigProvider: config?.loaderProps?.configProvider ?? createTestConfigProvider(),\n\t\t\tlogger,\n\t\t},\n\t};\n\tconst loader = provider.makeTestLoader(testContainerConfig);\n\treturn createSummarizerCore(container, loader, summaryVersion);\n}\n\n/**\n * Summarizes on demand and returns the summary tree, the version number and the reference sequence number of the\n * submitted summary.\n *\n * @param summarizer - The ISummarizer to use to summarize on demand\n * @param inputs - Either the reason string or the full IOnDemandSummarizeOptions.\n * Defaults to the reason \"end-to-end test\".\n * @internal\n */\nexport async function summarizeNow(\n\tsummarizer: ISummarizer,\n\tinputs: string | IOnDemandSummarizeOptions = \"end-to-end test\",\n): Promise<SummaryInfo> {\n\tconst options: IOnDemandSummarizeOptions =\n\t\ttypeof inputs === \"string\" ? { reason: inputs } : inputs;\n\tconst result = summarizer.summarizeOnDemand(options);\n\n\tconst submitResult = await timeoutAwait(result.summarySubmitted);\n\tif (!submitResult.success) {\n\t\tif (typeof submitResult.error !== \"string\") {\n\t\t\tsubmitResult.error.data = submitResult.data;\n\t\t}\n\t\tthrow submitResult.error;\n\t}\n\tassert(\n\t\tsubmitResult.data.stage === \"submit\",\n\t\t\"on-demand summary submitted data stage should be submit\",\n\t);\n\tassert(submitResult.data.summaryTree !== undefined, \"summary tree should exist\");\n\n\tconst broadcastResult = await timeoutAwait(result.summaryOpBroadcasted);\n\tif (!broadcastResult.success) {\n\t\tthrow broadcastResult.error;\n\t}\n\n\tconst ackNackResult = await timeoutAwait(result.receivedSummaryAckOrNack);\n\tif (!ackNackResult.success) {\n\t\tthrow ackNackResult.error;\n\t}\n\n\tawait new Promise((resolve) => process.nextTick(resolve));\n\n\treturn {\n\t\tsummaryTree: submitResult.data.summaryTree,\n\t\tsummaryVersion: ackNackResult.data.summaryAckOp.contents.handle,\n\t\tsummaryRefSeq: submitResult.data.referenceSequenceNumber,\n\t};\n}\n\n/**\n * Summary information containing the summary tree, summary version, and summary sequence number.\n * @internal\n */\nexport interface SummaryInfo {\n\t/**\n\t * The summary tree generated\n\t */\n\tsummaryTree: ISummaryTree;\n\t/**\n\t * Handle of the completed summary\n\t */\n\tsummaryVersion: string;\n\t/**\n\t * Reference sequence number of the current summary generation\n\t */\n\tsummaryRefSeq: number;\n}\n"]}
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import { IContainer } from "@fluidframework/container-definitions";
6
6
  import { IDataStore } from "@fluidframework/runtime-definitions";
7
- import { TimeoutWithError } from "./timeoutUtils";
7
+ import { TimeoutWithError } from "./timeoutUtils.js";
8
8
  /**
9
9
  * Utility function to wait for the specified Container to be in Connected state.
10
10
  * If the Container is already connected, the Promise returns immediately; otherwise it resolves when the Container emits
@@ -1 +1 @@
1
- {"version":3,"file":"containerUtils.d.ts","sourceRoot":"","sources":["../src/containerUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAInE,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,EAAmC,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEnF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,0BAA0B,CAC/C,SAAS,EAAE,UAAU,EACrB,oBAAoB,GAAE,OAAc,EACpC,cAAc,CAAC,EAAE,gBAAgB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;;GAKG;AACH,wBAAsB,gCAAgC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAc3F;AAED;;;;;;GAMG;AACH,wBAAsB,gCAAgC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAO3F"}
1
+ {"version":3,"file":"containerUtils.d.ts","sourceRoot":"","sources":["../src/containerUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAInE,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,EAAmC,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEtF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,0BAA0B,CAC/C,SAAS,EAAE,UAAU,EACrB,oBAAoB,GAAE,OAAc,EACpC,cAAc,CAAC,EAAE,gBAAgB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;;GAKG;AACH,wBAAsB,gCAAgC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAc3F;AAED;;;;;;GAMG;AACH,wBAAsB,gCAAgC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAO3F"}
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.getDataStoreEntryPointBackCompat = exports.getContainerEntryPointBackCompat = exports.waitForContainerConnection = void 0;
8
8
  const container_loader_1 = require("@fluidframework/container-loader");
9
9
  const core_utils_1 = require("@fluidframework/core-utils");
10
- const timeoutUtils_1 = require("./timeoutUtils");
10
+ const timeoutUtils_js_1 = require("./timeoutUtils.js");
11
11
  /**
12
12
  * Utility function to wait for the specified Container to be in Connected state.
13
13
  * If the Container is already connected, the Promise returns immediately; otherwise it resolves when the Container emits
@@ -40,7 +40,7 @@ async function waitForContainerConnection(container, failOnContainerClose = true
40
40
  };
41
41
  return timeoutOptions === undefined
42
42
  ? new Promise(executor)
43
- : (0, timeoutUtils_1.timeoutPromise)(executor, timeoutOptions);
43
+ : (0, timeoutUtils_js_1.timeoutPromise)(executor, timeoutOptions);
44
44
  }
45
45
  }
46
46
  exports.waitForContainerConnection = waitForContainerConnection;