@fluidframework/test-utils 2.0.0-internal.2.0.2 → 2.0.0-internal.2.1.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.
@@ -10,6 +10,10 @@ import { IConfigProviderBase } from "@fluidframework/telemetry-utils";
10
10
  import { ITestObjectProvider } from "./testObjectProvider";
11
11
  export declare function createSummarizerFromFactory(provider: ITestObjectProvider, container: IContainer, dataStoreFactory: IFluidDataStoreFactory, summaryVersion?: string, containerRuntimeFactoryType?: typeof ContainerRuntimeFactoryWithDefaultDataStore, registryEntries?: NamedFluidDataStoreRegistryEntries): Promise<ISummarizer>;
12
12
  export declare function createSummarizer(provider: ITestObjectProvider, container: IContainer, summaryVersion?: string, gcOptions?: IGCRuntimeOptions, configProvider?: IConfigProviderBase): Promise<ISummarizer>;
13
+ export declare function createSummarizerWithContainer(provider: ITestObjectProvider, absoluteUrl: string | undefined, summaryVersion?: string, gcOptions?: IGCRuntimeOptions, configProvider?: IConfigProviderBase): Promise<{
14
+ container: IContainer;
15
+ summarizer: ISummarizer;
16
+ }>;
13
17
  export declare function summarizeNow(summarizer: ISummarizer, reason?: string): Promise<{
14
18
  summaryTree: import("@fluidframework/protocol-definitions").ISummaryTree;
15
19
  summaryVersion: string;
@@ -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;AAE9F,OAAO,EACH,iBAAiB,EACjB,WAAW,EAEd,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EAEH,sBAAsB,EACtB,kCAAkC,EACrC,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAwB,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AA6CjF,wBAAsB,2BAA2B,CAC7C,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,EAAE,UAAU,EACrB,gBAAgB,EAAE,sBAAsB,EACxC,cAAc,CAAC,EAAE,MAAM,EACvB,2BAA2B,qDAA8C,EACzE,eAAe,CAAC,EAAE,kCAAkC,GACrD,OAAO,CAAC,WAAW,CAAC,CAoBtB;AAED,wBAAsB,gBAAgB,CAClC,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,EAAE,UAAU,EACrB,cAAc,CAAC,EAAE,MAAM,EACvB,SAAS,CAAC,EAAE,iBAAiB,EAC7B,cAAc,GAAE,mBAA0C,GAC3D,OAAO,CAAC,WAAW,CAAC,CAWtB;AAED,wBAAsB,YAAY,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,GAAE,MAA0B;;;GAqB7F;AAED,wBAAsB,0BAA0B,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAIrF"}
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;AAE9F,OAAO,EACH,iBAAiB,EACjB,WAAW,EAEd,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EAEH,sBAAsB,EACtB,kCAAkC,EACrC,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAwB,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAgDjF,wBAAsB,2BAA2B,CAC7C,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,EAAE,UAAU,EACrB,gBAAgB,EAAE,sBAAsB,EACxC,cAAc,CAAC,EAAE,MAAM,EACvB,2BAA2B,qDAA8C,EACzE,eAAe,CAAC,EAAE,kCAAkC,GACrD,OAAO,CAAC,WAAW,CAAC,CAoBtB;AAED,wBAAsB,gBAAgB,CAClC,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,EAAE,UAAU,EACrB,cAAc,CAAC,EAAE,MAAM,EACvB,SAAS,CAAC,EAAE,iBAAiB,EAC7B,cAAc,GAAE,mBAA0C,GAC3D,OAAO,CAAC,WAAW,CAAC,CAStB;AAED,wBAAsB,6BAA6B,CAC/C,QAAQ,EAAE,mBAAmB,EAC7B,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,cAAc,CAAC,EAAE,MAAM,EACvB,SAAS,CAAC,EAAE,iBAAiB,EAC7B,cAAc,GAAE,mBAA0C,GAC3D,OAAO,CAAC;IAAE,SAAS,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,WAAW,CAAC;CAAE,CAAC,CAU9D;AAED,wBAAsB,YAAY,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,GAAE,MAA0B;;;GAqB7F;AAED,wBAAsB,0BAA0B,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAIrF"}
@@ -4,7 +4,7 @@
4
4
  * Licensed under the MIT License.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.waitForContainerConnection = exports.summarizeNow = exports.createSummarizer = exports.createSummarizerFromFactory = void 0;
7
+ exports.waitForContainerConnection = exports.summarizeNow = exports.createSummarizerWithContainer = exports.createSummarizer = exports.createSummarizerFromFactory = void 0;
8
8
  const aqueduct_1 = require("@fluidframework/aqueduct");
9
9
  const common_utils_1 = require("@fluidframework/common-utils");
10
10
  const container_definitions_1 = require("@fluidframework/container-definitions");
@@ -13,8 +13,7 @@ const driver_definitions_1 = require("@fluidframework/driver-definitions");
13
13
  const runtime_utils_1 = require("@fluidframework/runtime-utils");
14
14
  const TestConfigs_1 = require("./TestConfigs");
15
15
  const summarizerClientType = "summarizer";
16
- async function createSummarizerCore(container, loader, summaryVersion) {
17
- const absoluteUrl = await container.getAbsoluteUrl("");
16
+ async function createSummarizerCore(absoluteUrl, loader, summaryVersion) {
18
17
  if (absoluteUrl === undefined) {
19
18
  throw new Error("URL could not be resolved");
20
19
  }
@@ -37,7 +36,10 @@ async function createSummarizerCore(container, loader, summaryVersion) {
37
36
  if (fluidObject.ISummarizer === undefined) {
38
37
  throw new Error("Fluid object does not implement ISummarizer");
39
38
  }
40
- return fluidObject.ISummarizer;
39
+ return {
40
+ container: summarizerContainer,
41
+ summarizer: fluidObject.ISummarizer,
42
+ };
41
43
  }
42
44
  const defaultSummaryOptions = {
43
45
  summaryConfigOverrides: {
@@ -54,10 +56,16 @@ async function createSummarizerFromFactory(provider, container, dataStoreFactory
54
56
  [dataStoreFactory.type, Promise.resolve(dataStoreFactory)],
55
57
  ], undefined, [innerRequestHandler], { summaryOptions: defaultSummaryOptions });
56
58
  const loader = provider.createLoader([[provider.defaultCodeDetails, runtimeFactory]], { configProvider: (0, TestConfigs_1.mockConfigProvider)() });
57
- return createSummarizerCore(container, loader, summaryVersion);
59
+ const absoluteUrl = await container.getAbsoluteUrl("");
60
+ return (await createSummarizerCore(absoluteUrl, loader, summaryVersion)).summarizer;
58
61
  }
59
62
  exports.createSummarizerFromFactory = createSummarizerFromFactory;
60
63
  async function createSummarizer(provider, container, summaryVersion, gcOptions, configProvider = (0, TestConfigs_1.mockConfigProvider)()) {
64
+ const absoluteUrl = await container.getAbsoluteUrl("");
65
+ return (await createSummarizerWithContainer(provider, absoluteUrl, summaryVersion, gcOptions, configProvider)).summarizer;
66
+ }
67
+ exports.createSummarizer = createSummarizer;
68
+ async function createSummarizerWithContainer(provider, absoluteUrl, summaryVersion, gcOptions, configProvider = (0, TestConfigs_1.mockConfigProvider)()) {
61
69
  const testContainerConfig = {
62
70
  runtimeOptions: {
63
71
  summaryOptions: defaultSummaryOptions,
@@ -66,9 +74,9 @@ async function createSummarizer(provider, container, summaryVersion, gcOptions,
66
74
  loaderProps: { configProvider },
67
75
  };
68
76
  const loader = provider.makeTestLoader(testContainerConfig);
69
- return createSummarizerCore(container, loader, summaryVersion);
77
+ return createSummarizerCore(absoluteUrl, loader, summaryVersion);
70
78
  }
71
- exports.createSummarizer = createSummarizer;
79
+ exports.createSummarizerWithContainer = createSummarizerWithContainer;
72
80
  async function summarizeNow(summarizer, reason = "end-to-end test") {
73
81
  const result = summarizer.summarizeOnDemand({ reason });
74
82
  const submitResult = await result.summarySubmitted;
@@ -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/common-utils\";\nimport { IContainer, IHostLoader, LoaderHeader } from \"@fluidframework/container-definitions\";\nimport { ConnectionState } from \"@fluidframework/container-loader\";\nimport {\n IGCRuntimeOptions,\n ISummarizer,\n ISummaryRuntimeOptions,\n} from \"@fluidframework/container-runtime\";\nimport { FluidObject, IRequest } from \"@fluidframework/core-interfaces\";\nimport { DriverHeader } from \"@fluidframework/driver-definitions\";\nimport {\n IContainerRuntimeBase,\n IFluidDataStoreFactory,\n NamedFluidDataStoreRegistryEntries,\n} from \"@fluidframework/runtime-definitions\";\nimport { requestFluidObject } from \"@fluidframework/runtime-utils\";\nimport { IConfigProviderBase } from \"@fluidframework/telemetry-utils\";\nimport { ITestContainerConfig, ITestObjectProvider } from \"./testObjectProvider\";\nimport { mockConfigProvider } from \"./TestConfigs\";\n\nconst summarizerClientType = \"summarizer\";\n\nasync function createSummarizerCore(container: IContainer, loader: IHostLoader, summaryVersion?: string) {\n const absoluteUrl = await container.getAbsoluteUrl(\"\");\n if (absoluteUrl === undefined) {\n throw new Error(\"URL could not be resolved\");\n }\n\n const request: IRequest = {\n headers: {\n [LoaderHeader.cache]: false,\n [LoaderHeader.clientDetails]: {\n capabilities: { interactive: false },\n type: summarizerClientType,\n },\n [DriverHeader.summarizingClient]: true,\n [LoaderHeader.reconnect]: false,\n [LoaderHeader.version]: summaryVersion,\n },\n url: absoluteUrl,\n };\n const summarizerContainer = await loader.resolve(request);\n await waitForContainerConnection(summarizerContainer);\n\n const fluidObject =\n await requestFluidObject<FluidObject<ISummarizer>>(summarizerContainer, { url: \"_summarizer\" });\n if (fluidObject.ISummarizer === undefined) {\n throw new Error(\"Fluid object does not implement ISummarizer\");\n }\n return fluidObject.ISummarizer;\n}\n\nconst defaultSummaryOptions: ISummaryRuntimeOptions = {\n summaryConfigOverrides: {\n state: \"disableHeuristics\",\n maxAckWaitTime: 10000,\n maxOpsSinceLastSummary: 7000,\n initialSummarizerDelayMs: 0,\n summarizerClientElection: false,\n },\n};\n\nexport async function createSummarizerFromFactory(\n provider: ITestObjectProvider,\n container: IContainer,\n dataStoreFactory: IFluidDataStoreFactory,\n summaryVersion?: string,\n containerRuntimeFactoryType = ContainerRuntimeFactoryWithDefaultDataStore,\n registryEntries?: NamedFluidDataStoreRegistryEntries,\n): Promise<ISummarizer> {\n const innerRequestHandler = async (request: IRequest, runtime: IContainerRuntimeBase) =>\n runtime.IFluidHandleContext.resolveHandle(request);\n const runtimeFactory = new containerRuntimeFactoryType(\n dataStoreFactory,\n registryEntries ??\n [\n [dataStoreFactory.type, Promise.resolve(dataStoreFactory)],\n ],\n undefined,\n [innerRequestHandler],\n { summaryOptions: defaultSummaryOptions },\n );\n\n const loader = provider.createLoader(\n [[provider.defaultCodeDetails, runtimeFactory]],\n { configProvider: mockConfigProvider() },\n );\n\n return createSummarizerCore(container, loader, summaryVersion);\n}\n\nexport async function createSummarizer(\n provider: ITestObjectProvider,\n container: IContainer,\n summaryVersion?: string,\n gcOptions?: IGCRuntimeOptions,\n configProvider: IConfigProviderBase = mockConfigProvider(),\n): Promise<ISummarizer> {\n const testContainerConfig: ITestContainerConfig = {\n runtimeOptions: {\n summaryOptions: defaultSummaryOptions,\n gcOptions,\n },\n loaderProps: { configProvider },\n };\n\n const loader = provider.makeTestLoader(testContainerConfig);\n return createSummarizerCore(container, loader, summaryVersion);\n}\n\nexport async function summarizeNow(summarizer: ISummarizer, reason: string = \"end-to-end test\") {\n const result = summarizer.summarizeOnDemand({ reason });\n\n const submitResult = await result.summarySubmitted;\n assert(submitResult.success, \"on-demand summary should submit\");\n assert(submitResult.data.stage === \"submit\",\n \"on-demand summary submitted data stage should be submit\");\n assert(submitResult.data.summaryTree !== undefined, \"summary tree should exist\");\n\n const broadcastResult = await result.summaryOpBroadcasted;\n assert(broadcastResult.success, \"summary op should be broadcast\");\n\n const ackNackResult = await result.receivedSummaryAckOrNack;\n assert(ackNackResult.success, \"summary op should be acked\");\n\n await new Promise((resolve) => process.nextTick(resolve));\n\n return {\n summaryTree: submitResult.data.summaryTree,\n summaryVersion: ackNackResult.data.summaryAckOp.contents.handle,\n };\n}\n\nexport async function waitForContainerConnection(container: IContainer): Promise<void> {\n if (container.connectionState !== ConnectionState.Connected) {\n return new Promise((resolve) => container.once(\"connected\", () => resolve()));\n }\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/common-utils\";\nimport { IContainer, IHostLoader, LoaderHeader } from \"@fluidframework/container-definitions\";\nimport { ConnectionState } from \"@fluidframework/container-loader\";\nimport {\n IGCRuntimeOptions,\n ISummarizer,\n ISummaryRuntimeOptions,\n} from \"@fluidframework/container-runtime\";\nimport { FluidObject, IRequest } from \"@fluidframework/core-interfaces\";\nimport { DriverHeader } from \"@fluidframework/driver-definitions\";\nimport {\n IContainerRuntimeBase,\n IFluidDataStoreFactory,\n NamedFluidDataStoreRegistryEntries,\n} from \"@fluidframework/runtime-definitions\";\nimport { requestFluidObject } from \"@fluidframework/runtime-utils\";\nimport { IConfigProviderBase } from \"@fluidframework/telemetry-utils\";\nimport { ITestContainerConfig, ITestObjectProvider } from \"./testObjectProvider\";\nimport { mockConfigProvider } from \"./TestConfigs\";\n\nconst summarizerClientType = \"summarizer\";\n\nasync function createSummarizerCore(absoluteUrl: string | undefined, loader: IHostLoader, summaryVersion?: string) {\n if (absoluteUrl === undefined) {\n throw new Error(\"URL could not be resolved\");\n }\n\n const request: IRequest = {\n headers: {\n [LoaderHeader.cache]: false,\n [LoaderHeader.clientDetails]: {\n capabilities: { interactive: false },\n type: summarizerClientType,\n },\n [DriverHeader.summarizingClient]: true,\n [LoaderHeader.reconnect]: false,\n [LoaderHeader.version]: summaryVersion,\n },\n url: absoluteUrl,\n };\n const summarizerContainer = await loader.resolve(request);\n await waitForContainerConnection(summarizerContainer);\n\n const fluidObject =\n await requestFluidObject<FluidObject<ISummarizer>>(summarizerContainer, { url: \"_summarizer\" });\n if (fluidObject.ISummarizer === undefined) {\n throw new Error(\"Fluid object does not implement ISummarizer\");\n }\n\n return {\n container: summarizerContainer,\n summarizer: fluidObject.ISummarizer,\n };\n}\n\nconst defaultSummaryOptions: ISummaryRuntimeOptions = {\n summaryConfigOverrides: {\n state: \"disableHeuristics\",\n maxAckWaitTime: 10000,\n maxOpsSinceLastSummary: 7000,\n initialSummarizerDelayMs: 0,\n summarizerClientElection: false,\n },\n};\n\nexport async function createSummarizerFromFactory(\n provider: ITestObjectProvider,\n container: IContainer,\n dataStoreFactory: IFluidDataStoreFactory,\n summaryVersion?: string,\n containerRuntimeFactoryType = ContainerRuntimeFactoryWithDefaultDataStore,\n registryEntries?: NamedFluidDataStoreRegistryEntries,\n): Promise<ISummarizer> {\n const innerRequestHandler = async (request: IRequest, runtime: IContainerRuntimeBase) =>\n runtime.IFluidHandleContext.resolveHandle(request);\n const runtimeFactory = new containerRuntimeFactoryType(\n dataStoreFactory,\n registryEntries ??\n [\n [dataStoreFactory.type, Promise.resolve(dataStoreFactory)],\n ],\n undefined,\n [innerRequestHandler],\n { summaryOptions: defaultSummaryOptions },\n );\n\n const loader = provider.createLoader(\n [[provider.defaultCodeDetails, runtimeFactory]],\n { configProvider: mockConfigProvider() },\n );\n const absoluteUrl = await container.getAbsoluteUrl(\"\");\n return (await createSummarizerCore(absoluteUrl, loader, summaryVersion)).summarizer;\n}\n\nexport async function createSummarizer(\n provider: ITestObjectProvider,\n container: IContainer,\n summaryVersion?: string,\n gcOptions?: IGCRuntimeOptions,\n configProvider: IConfigProviderBase = mockConfigProvider(),\n): Promise<ISummarizer> {\n const absoluteUrl = await container.getAbsoluteUrl(\"\");\n return (await createSummarizerWithContainer(\n provider,\n absoluteUrl,\n summaryVersion,\n gcOptions,\n configProvider,\n )).summarizer;\n}\n\nexport async function createSummarizerWithContainer(\n provider: ITestObjectProvider,\n absoluteUrl: string | undefined,\n summaryVersion?: string,\n gcOptions?: IGCRuntimeOptions,\n configProvider: IConfigProviderBase = mockConfigProvider(),\n): Promise<{ container: IContainer; summarizer: ISummarizer; }> {\n const testContainerConfig: ITestContainerConfig = {\n runtimeOptions: {\n summaryOptions: defaultSummaryOptions,\n gcOptions,\n },\n loaderProps: { configProvider },\n };\n const loader = provider.makeTestLoader(testContainerConfig);\n return createSummarizerCore(absoluteUrl, loader, summaryVersion);\n}\n\nexport async function summarizeNow(summarizer: ISummarizer, reason: string = \"end-to-end test\") {\n const result = summarizer.summarizeOnDemand({ reason });\n\n const submitResult = await result.summarySubmitted;\n assert(submitResult.success, \"on-demand summary should submit\");\n assert(submitResult.data.stage === \"submit\",\n \"on-demand summary submitted data stage should be submit\");\n assert(submitResult.data.summaryTree !== undefined, \"summary tree should exist\");\n\n const broadcastResult = await result.summaryOpBroadcasted;\n assert(broadcastResult.success, \"summary op should be broadcast\");\n\n const ackNackResult = await result.receivedSummaryAckOrNack;\n assert(ackNackResult.success, \"summary op should be acked\");\n\n await new Promise((resolve) => process.nextTick(resolve));\n\n return {\n summaryTree: submitResult.data.summaryTree,\n summaryVersion: ackNackResult.data.summaryAckOp.contents.handle,\n };\n}\n\nexport async function waitForContainerConnection(container: IContainer): Promise<void> {\n if (container.connectionState !== ConnectionState.Connected) {\n return new Promise((resolve) => container.once(\"connected\", () => resolve()));\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -2,16 +2,16 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- export * from "./interfaces";
6
- export * from "./testObjectProvider";
7
- export * from "./loaderContainerTracker";
8
- export * from "./localLoader";
9
- export * from "./localCodeLoader";
10
- export * from "./retry";
11
- export * from "./testContainerRuntimeFactory";
12
- export * from "./testFluidObject";
13
- export * from "./timeoutUtils";
14
- export * from "./DriverWrappers";
15
- export * from "./TestSummaryUtils";
16
- export * from "./TestConfigs";
5
+ export { wrapDocumentService, wrapDocumentServiceFactory, wrapDocumentStorageService } from "./DriverWrappers";
6
+ export { IProvideTestFluidObject, ITestFluidObject } from "./interfaces";
7
+ export { LoaderContainerTracker } from "./loaderContainerTracker";
8
+ export { fluidEntryPoint, LocalCodeLoader, SupportedExportInterfaces } from "./localCodeLoader";
9
+ export { createAndAttachContainer, createLoader } from "./localLoader";
10
+ export { retryWithEventualValue } from "./retry";
11
+ export { mockConfigProvider } from "./TestConfigs";
12
+ export { createTestContainerRuntimeFactory, TestContainerRuntimeFactory } from "./testContainerRuntimeFactory";
13
+ export { ChannelFactoryRegistry, TestFluidObject, TestFluidObjectFactory } from "./testFluidObject";
14
+ export { createDocumentId, DataObjectFactoryType, EventAndErrorTrackingLogger, getUnexpectedLogErrorException, IOpProcessingController, ITestContainerConfig, ITestObjectProvider, TestObjectProvider, } from "./testObjectProvider";
15
+ export { createSummarizer, createSummarizerFromFactory, createSummarizerWithContainer, summarizeNow, waitForContainerConnection, } from "./TestSummaryUtils";
16
+ export { defaultTimeoutDurationMs, ensureContainerConnected, timeoutAwait, timeoutPromise, TimeoutWithError, TimeoutWithValue, } from "./timeoutUtils";
17
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AACxB,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC/G,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAChG,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,iCAAiC,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC/G,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACpG,OAAO,EACH,gBAAgB,EAChB,qBAAqB,EACrB,2BAA2B,EAC3B,8BAA8B,EAC9B,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACH,gBAAgB,EAChB,2BAA2B,EAC3B,6BAA6B,EAC7B,YAAY,EACZ,0BAA0B,GAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACH,wBAAwB,EACxB,wBAAwB,EACxB,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,gBAAgB,GACnB,MAAM,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -3,27 +3,44 @@
3
3
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
4
  * Licensed under the MIT License.
5
5
  */
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
6
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./interfaces"), exports);
18
- __exportStar(require("./testObjectProvider"), exports);
19
- __exportStar(require("./loaderContainerTracker"), exports);
20
- __exportStar(require("./localLoader"), exports);
21
- __exportStar(require("./localCodeLoader"), exports);
22
- __exportStar(require("./retry"), exports);
23
- __exportStar(require("./testContainerRuntimeFactory"), exports);
24
- __exportStar(require("./testFluidObject"), exports);
25
- __exportStar(require("./timeoutUtils"), exports);
26
- __exportStar(require("./DriverWrappers"), exports);
27
- __exportStar(require("./TestSummaryUtils"), exports);
28
- __exportStar(require("./TestConfigs"), exports);
7
+ exports.timeoutPromise = exports.timeoutAwait = exports.ensureContainerConnected = exports.defaultTimeoutDurationMs = exports.waitForContainerConnection = exports.summarizeNow = exports.createSummarizerWithContainer = exports.createSummarizerFromFactory = exports.createSummarizer = exports.TestObjectProvider = exports.getUnexpectedLogErrorException = exports.EventAndErrorTrackingLogger = exports.DataObjectFactoryType = exports.createDocumentId = exports.TestFluidObjectFactory = exports.TestFluidObject = exports.TestContainerRuntimeFactory = exports.createTestContainerRuntimeFactory = exports.mockConfigProvider = exports.retryWithEventualValue = exports.createLoader = exports.createAndAttachContainer = exports.LocalCodeLoader = exports.LoaderContainerTracker = exports.wrapDocumentStorageService = exports.wrapDocumentServiceFactory = exports.wrapDocumentService = void 0;
8
+ var DriverWrappers_1 = require("./DriverWrappers");
9
+ Object.defineProperty(exports, "wrapDocumentService", { enumerable: true, get: function () { return DriverWrappers_1.wrapDocumentService; } });
10
+ Object.defineProperty(exports, "wrapDocumentServiceFactory", { enumerable: true, get: function () { return DriverWrappers_1.wrapDocumentServiceFactory; } });
11
+ Object.defineProperty(exports, "wrapDocumentStorageService", { enumerable: true, get: function () { return DriverWrappers_1.wrapDocumentStorageService; } });
12
+ var loaderContainerTracker_1 = require("./loaderContainerTracker");
13
+ Object.defineProperty(exports, "LoaderContainerTracker", { enumerable: true, get: function () { return loaderContainerTracker_1.LoaderContainerTracker; } });
14
+ var localCodeLoader_1 = require("./localCodeLoader");
15
+ Object.defineProperty(exports, "LocalCodeLoader", { enumerable: true, get: function () { return localCodeLoader_1.LocalCodeLoader; } });
16
+ var localLoader_1 = require("./localLoader");
17
+ Object.defineProperty(exports, "createAndAttachContainer", { enumerable: true, get: function () { return localLoader_1.createAndAttachContainer; } });
18
+ Object.defineProperty(exports, "createLoader", { enumerable: true, get: function () { return localLoader_1.createLoader; } });
19
+ var retry_1 = require("./retry");
20
+ Object.defineProperty(exports, "retryWithEventualValue", { enumerable: true, get: function () { return retry_1.retryWithEventualValue; } });
21
+ var TestConfigs_1 = require("./TestConfigs");
22
+ Object.defineProperty(exports, "mockConfigProvider", { enumerable: true, get: function () { return TestConfigs_1.mockConfigProvider; } });
23
+ var testContainerRuntimeFactory_1 = require("./testContainerRuntimeFactory");
24
+ Object.defineProperty(exports, "createTestContainerRuntimeFactory", { enumerable: true, get: function () { return testContainerRuntimeFactory_1.createTestContainerRuntimeFactory; } });
25
+ Object.defineProperty(exports, "TestContainerRuntimeFactory", { enumerable: true, get: function () { return testContainerRuntimeFactory_1.TestContainerRuntimeFactory; } });
26
+ var testFluidObject_1 = require("./testFluidObject");
27
+ Object.defineProperty(exports, "TestFluidObject", { enumerable: true, get: function () { return testFluidObject_1.TestFluidObject; } });
28
+ Object.defineProperty(exports, "TestFluidObjectFactory", { enumerable: true, get: function () { return testFluidObject_1.TestFluidObjectFactory; } });
29
+ var testObjectProvider_1 = require("./testObjectProvider");
30
+ Object.defineProperty(exports, "createDocumentId", { enumerable: true, get: function () { return testObjectProvider_1.createDocumentId; } });
31
+ Object.defineProperty(exports, "DataObjectFactoryType", { enumerable: true, get: function () { return testObjectProvider_1.DataObjectFactoryType; } });
32
+ Object.defineProperty(exports, "EventAndErrorTrackingLogger", { enumerable: true, get: function () { return testObjectProvider_1.EventAndErrorTrackingLogger; } });
33
+ Object.defineProperty(exports, "getUnexpectedLogErrorException", { enumerable: true, get: function () { return testObjectProvider_1.getUnexpectedLogErrorException; } });
34
+ Object.defineProperty(exports, "TestObjectProvider", { enumerable: true, get: function () { return testObjectProvider_1.TestObjectProvider; } });
35
+ var TestSummaryUtils_1 = require("./TestSummaryUtils");
36
+ Object.defineProperty(exports, "createSummarizer", { enumerable: true, get: function () { return TestSummaryUtils_1.createSummarizer; } });
37
+ Object.defineProperty(exports, "createSummarizerFromFactory", { enumerable: true, get: function () { return TestSummaryUtils_1.createSummarizerFromFactory; } });
38
+ Object.defineProperty(exports, "createSummarizerWithContainer", { enumerable: true, get: function () { return TestSummaryUtils_1.createSummarizerWithContainer; } });
39
+ Object.defineProperty(exports, "summarizeNow", { enumerable: true, get: function () { return TestSummaryUtils_1.summarizeNow; } });
40
+ Object.defineProperty(exports, "waitForContainerConnection", { enumerable: true, get: function () { return TestSummaryUtils_1.waitForContainerConnection; } });
41
+ var timeoutUtils_1 = require("./timeoutUtils");
42
+ Object.defineProperty(exports, "defaultTimeoutDurationMs", { enumerable: true, get: function () { return timeoutUtils_1.defaultTimeoutDurationMs; } });
43
+ Object.defineProperty(exports, "ensureContainerConnected", { enumerable: true, get: function () { return timeoutUtils_1.ensureContainerConnected; } });
44
+ Object.defineProperty(exports, "timeoutAwait", { enumerable: true, get: function () { return timeoutUtils_1.timeoutAwait; } });
45
+ Object.defineProperty(exports, "timeoutPromise", { enumerable: true, get: function () { return timeoutUtils_1.timeoutPromise; } });
29
46
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;AAEH,+CAA6B;AAC7B,uDAAqC;AACrC,2DAAyC;AACzC,gDAA8B;AAC9B,oDAAkC;AAClC,0CAAwB;AACxB,gEAA8C;AAC9C,oDAAkC;AAClC,iDAA+B;AAC/B,mDAAiC;AACjC,qDAAmC;AACnC,gDAA8B","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport * from \"./interfaces\";\nexport * from \"./testObjectProvider\";\nexport * from \"./loaderContainerTracker\";\nexport * from \"./localLoader\";\nexport * from \"./localCodeLoader\";\nexport * from \"./retry\";\nexport * from \"./testContainerRuntimeFactory\";\nexport * from \"./testFluidObject\";\nexport * from \"./timeoutUtils\";\nexport * from \"./DriverWrappers\";\nexport * from \"./TestSummaryUtils\";\nexport * from \"./TestConfigs\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,mDAA+G;AAAtG,qHAAA,mBAAmB,OAAA;AAAE,4HAAA,0BAA0B,OAAA;AAAE,4HAAA,0BAA0B,OAAA;AAEpF,mEAAkE;AAAzD,gIAAA,sBAAsB,OAAA;AAC/B,qDAAgG;AAAtE,kHAAA,eAAe,OAAA;AACzC,6CAAuE;AAA9D,uHAAA,wBAAwB,OAAA;AAAE,2GAAA,YAAY,OAAA;AAC/C,iCAAiD;AAAxC,+GAAA,sBAAsB,OAAA;AAC/B,6CAAmD;AAA1C,iHAAA,kBAAkB,OAAA;AAC3B,6EAA+G;AAAtG,gJAAA,iCAAiC,OAAA;AAAE,0IAAA,2BAA2B,OAAA;AACvE,qDAAoG;AAAnE,kHAAA,eAAe,OAAA;AAAE,yHAAA,sBAAsB,OAAA;AACxE,2DAS8B;AAR1B,sHAAA,gBAAgB,OAAA;AAChB,2HAAA,qBAAqB,OAAA;AACrB,iIAAA,2BAA2B,OAAA;AAC3B,oIAAA,8BAA8B,OAAA;AAI9B,wHAAA,kBAAkB,OAAA;AAEtB,uDAM4B;AALxB,oHAAA,gBAAgB,OAAA;AAChB,+HAAA,2BAA2B,OAAA;AAC3B,iIAAA,6BAA6B,OAAA;AAC7B,gHAAA,YAAY,OAAA;AACZ,8HAAA,0BAA0B,OAAA;AAE9B,+CAOwB;AANpB,wHAAA,wBAAwB,OAAA;AACxB,wHAAA,wBAAwB,OAAA;AACxB,4GAAA,YAAY,OAAA;AACZ,8GAAA,cAAc,OAAA","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport { wrapDocumentService, wrapDocumentServiceFactory, wrapDocumentStorageService } from \"./DriverWrappers\";\nexport { IProvideTestFluidObject, ITestFluidObject } from \"./interfaces\";\nexport { LoaderContainerTracker } from \"./loaderContainerTracker\";\nexport { fluidEntryPoint, LocalCodeLoader, SupportedExportInterfaces } from \"./localCodeLoader\";\nexport { createAndAttachContainer, createLoader } from \"./localLoader\";\nexport { retryWithEventualValue } from \"./retry\";\nexport { mockConfigProvider } from \"./TestConfigs\";\nexport { createTestContainerRuntimeFactory, TestContainerRuntimeFactory } from \"./testContainerRuntimeFactory\";\nexport { ChannelFactoryRegistry, TestFluidObject, TestFluidObjectFactory } from \"./testFluidObject\";\nexport {\n createDocumentId,\n DataObjectFactoryType,\n EventAndErrorTrackingLogger,\n getUnexpectedLogErrorException,\n IOpProcessingController,\n ITestContainerConfig,\n ITestObjectProvider,\n TestObjectProvider,\n} from \"./testObjectProvider\";\nexport {\n createSummarizer,\n createSummarizerFromFactory,\n createSummarizerWithContainer,\n summarizeNow,\n waitForContainerConnection,\n} from \"./TestSummaryUtils\";\nexport {\n defaultTimeoutDurationMs,\n ensureContainerConnected,\n timeoutAwait,\n timeoutPromise,\n TimeoutWithError,\n TimeoutWithValue,\n} from \"./timeoutUtils\";\n"]}
@@ -5,5 +5,5 @@
5
5
  * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
6
6
  */
7
7
  export declare const pkgName = "@fluidframework/test-utils";
8
- export declare const pkgVersion = "2.0.0-internal.2.0.2";
8
+ export declare const pkgVersion = "2.0.0-internal.2.1.0";
9
9
  //# sourceMappingURL=packageVersion.d.ts.map
@@ -8,5 +8,5 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.pkgVersion = exports.pkgName = void 0;
10
10
  exports.pkgName = "@fluidframework/test-utils";
11
- exports.pkgVersion = "2.0.0-internal.2.0.2";
11
+ exports.pkgVersion = "2.0.0-internal.2.1.0";
12
12
  //# sourceMappingURL=packageVersion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,4BAA4B,CAAC;AACvC,QAAA,UAAU,GAAG,sBAAsB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/test-utils\";\nexport const pkgVersion = \"2.0.0-internal.2.0.2\";\n"]}
1
+ {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,4BAA4B,CAAC;AACvC,QAAA,UAAU,GAAG,sBAAsB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/test-utils\";\nexport const pkgVersion = \"2.0.0-internal.2.1.0\";\n"]}
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { IRequest, IResponse, IFluidHandle } from "@fluidframework/core-interfaces";
5
+ import { IRequest, IResponse, IFluidHandle, IFluidRouter } from "@fluidframework/core-interfaces";
6
6
  import { FluidDataStoreRuntime } from "@fluidframework/datastore";
7
7
  import { ISharedMap } from "@fluidframework/map";
8
8
  import { IFluidDataStoreContext, IFluidDataStoreFactory, IFluidDataStoreChannel } from "@fluidframework/runtime-definitions";
@@ -13,7 +13,7 @@ import { ITestFluidObject } from "./interfaces";
13
13
  * The shared objects can be retrieved by passing the key of the entry to getSharedObject.
14
14
  * It exposes the IFluidDataStoreContext and IFluidDataStoreRuntime.
15
15
  */
16
- export declare class TestFluidObject implements ITestFluidObject {
16
+ export declare class TestFluidObject implements ITestFluidObject, IFluidRouter {
17
17
  readonly runtime: IFluidDataStoreRuntime;
18
18
  readonly channel: IFluidDataStoreChannel;
19
19
  readonly context: IFluidDataStoreContext;
@@ -21,6 +21,7 @@ export declare class TestFluidObject implements ITestFluidObject {
21
21
  static load(runtime: IFluidDataStoreRuntime, channel: IFluidDataStoreChannel, context: IFluidDataStoreContext, factoryEntries: Map<string, IChannelFactory>, existing: boolean): Promise<TestFluidObject>;
22
22
  get ITestFluidObject(): this;
23
23
  get IFluidLoadable(): this;
24
+ get IFluidRouter(): this;
24
25
  get handle(): IFluidHandle<this>;
25
26
  root: ISharedMap;
26
27
  private readonly innerHandle;
@@ -1 +1 @@
1
- {"version":3,"file":"testFluidObject.d.ts","sourceRoot":"","sources":["../src/testFluidObject.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAqB,qBAAqB,EAAuB,MAAM,2BAA2B,CAAC;AAC1G,OAAO,EAAa,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EACH,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACzB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAChG,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;aAmChC,OAAO,EAAE,sBAAsB;aAC/B,OAAO,EAAE,sBAAsB;aAC/B,OAAO,EAAE,sBAAsB;IAC/C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;WArClB,IAAI,CACpB,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,sBAAsB,EAC/B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,EAC5C,QAAQ,EAAE,OAAO;IAQrB,IAAW,gBAAgB,SAE1B;IAED,IAAW,cAAc,SAExB;IAED,IAAW,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,CAA6B;IAE7D,IAAI,EAAG,UAAU,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IAEjD;;;;;;OAMG;gBAEiB,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,sBAAsB,EAC9B,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC;IAKpE;;;OAGG;IACU,eAAe,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAehD,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;YAI7C,UAAU;CAc3B;AAED,oBAAY,sBAAsB,GAAG,QAAQ,CAAC,CAAC,MAAM,GAAG,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;AAErF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,sBAAuB,YAAW,sBAAsB;IASrD,OAAO,CAAC,QAAQ,CAAC,cAAc;aACvB,IAAI;IATxB,IAAW,sBAAsB,SAAmB;IAEpD;;;;;OAKG;gBAC0B,cAAc,EAAE,sBAAsB,EAC/C,IAAI,SAA2B;IAEtC,oBAAoB,CAC7B,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,EAAE,OAAO,GAClB,OAAO,CAAC,qBAAqB,CAAC;CAwCpC"}
1
+ {"version":3,"file":"testFluidObject.d.ts","sourceRoot":"","sources":["../src/testFluidObject.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACH,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,YAAY,EAGf,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAqB,qBAAqB,EAAuB,MAAM,2BAA2B,CAAC;AAC1G,OAAO,EAAa,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EACH,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACzB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAEhG,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,gBAAgB,EAAE,YAAY;aAuC9C,OAAO,EAAE,sBAAsB;aAC/B,OAAO,EAAE,sBAAsB;aAC/B,OAAO,EAAE,sBAAsB;IAC/C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;WAzClB,IAAI,CACpB,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,sBAAsB,EAC/B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,EAC5C,QAAQ,EAAE,OAAO;IAQrB,IAAW,gBAAgB,SAE1B;IAED,IAAW,cAAc,SAExB;IAED,IAAW,YAAY,SAEtB;IAED,IAAW,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,CAA6B;IAE7D,IAAI,EAAG,UAAU,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IAEjD;;;;;;OAMG;gBAEiB,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,sBAAsB,EAC9B,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC;IAKpE;;;OAGG;IACU,eAAe,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAehD,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;YAI7C,UAAU;CAc3B;AAED,oBAAY,sBAAsB,GAAG,QAAQ,CAAC,CAAC,MAAM,GAAG,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;AAErF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,sBAAuB,YAAW,sBAAsB;IASrD,OAAO,CAAC,QAAQ,CAAC,cAAc;aACvB,IAAI;IATxB,IAAW,sBAAsB,SAAmB;IAEpD;;;;;OAKG;gBAC0B,cAAc,EAAE,sBAAsB,EAC/C,IAAI,SAA2B;IAEtC,oBAAoB,CAC7B,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,EAAE,OAAO,GAClB,OAAO,CAAC,qBAAqB,CAAC;CA6CpC"}
@@ -8,6 +8,7 @@ exports.TestFluidObjectFactory = exports.TestFluidObject = void 0;
8
8
  const aqueduct_1 = require("@fluidframework/aqueduct");
9
9
  const datastore_1 = require("@fluidframework/datastore");
10
10
  const map_1 = require("@fluidframework/map");
11
+ const common_utils_1 = require("@fluidframework/common-utils");
11
12
  /**
12
13
  * A test Fluid object that will create a shared object for each key-value pair in the factoryEntries passed to load.
13
14
  * The shared objects can be retrieved by passing the key of the entry to getSharedObject.
@@ -39,6 +40,9 @@ class TestFluidObject {
39
40
  get IFluidLoadable() {
40
41
  return this;
41
42
  }
43
+ get IFluidRouter() {
44
+ return this;
45
+ }
42
46
  get handle() { return this.innerHandle; }
43
47
  /**
44
48
  * Retrieves a shared object with the given id.
@@ -127,13 +131,16 @@ class TestFluidObjectFactory {
127
131
  factoryEntriesMapForObject.set(id, entry[1]);
128
132
  }
129
133
  }
130
- const runtimeClass = (0, datastore_1.mixinRequestHandler)(async (request) => {
131
- const router = await routerP;
132
- return router.request(request);
134
+ const runtimeClass = (0, datastore_1.mixinRequestHandler)(async (request, rt) => {
135
+ var _a;
136
+ const maybeRouter = await ((_a = rt.entryPoint) === null || _a === void 0 ? void 0 : _a.get());
137
+ (0, common_utils_1.assert)((maybeRouter === null || maybeRouter === void 0 ? void 0 : maybeRouter.IFluidRouter) !== undefined, "entryPoint should have been initialized by now");
138
+ return maybeRouter.IFluidRouter.request(request);
133
139
  });
134
- const runtime = new runtimeClass(context, dataTypes, existing);
135
- const routerP = TestFluidObject.load(runtime, runtime, context, factoryEntriesMapForObject, existing);
136
- return runtime;
140
+ return new runtimeClass(context, dataTypes, existing, async (dataStoreRuntime) => TestFluidObject.load(dataStoreRuntime,
141
+ // This works because 'runtime' is an instance of runtimeClass (which is a FluidDataStoreRuntime and
142
+ // thus implements IFluidDataStoreChannel) which passes itself as the parameter to this function.
143
+ dataStoreRuntime, context, factoryEntriesMapForObject, existing));
137
144
  }
138
145
  }
139
146
  exports.TestFluidObjectFactory = TestFluidObjectFactory;
@@ -1 +1 @@
1
- {"version":3,"file":"testFluidObject.js","sourceRoot":"","sources":["../src/testFluidObject.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 { defaultFluidObjectRequestHandler } from \"@fluidframework/aqueduct\";\nimport { IRequest, IResponse, IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport { FluidObjectHandle, FluidDataStoreRuntime, mixinRequestHandler } from \"@fluidframework/datastore\";\nimport { SharedMap, ISharedMap } from \"@fluidframework/map\";\nimport {\n IFluidDataStoreContext,\n IFluidDataStoreFactory,\n IFluidDataStoreChannel,\n} from \"@fluidframework/runtime-definitions\";\nimport { IFluidDataStoreRuntime, IChannelFactory } from \"@fluidframework/datastore-definitions\";\nimport { ITestFluidObject } from \"./interfaces\";\n\n/**\n * A test Fluid object that will create a shared object for each key-value pair in the factoryEntries passed to load.\n * The shared objects can be retrieved by passing the key of the entry to getSharedObject.\n * It exposes the IFluidDataStoreContext and IFluidDataStoreRuntime.\n */\nexport class TestFluidObject implements ITestFluidObject {\n public static async load(\n runtime: IFluidDataStoreRuntime,\n channel: IFluidDataStoreChannel,\n context: IFluidDataStoreContext,\n factoryEntries: Map<string, IChannelFactory>,\n existing: boolean,\n ) {\n const fluidObject = new TestFluidObject(runtime, channel, context, factoryEntries);\n await fluidObject.initialize(existing);\n\n return fluidObject;\n }\n\n public get ITestFluidObject() {\n return this;\n }\n\n public get IFluidLoadable() {\n return this;\n }\n\n public get handle(): IFluidHandle<this> { return this.innerHandle; }\n\n public root!: ISharedMap;\n private readonly innerHandle: IFluidHandle<this>;\n\n /**\n * Creates a new TestFluidObject.\n * @param runtime - The data store runtime.\n * @param context - The data store context.\n * @param factoryEntries - A list of id to IChannelFactory mapping. For each item in the list,\n * a shared object is created which can be retrieved by calling getSharedObject() with the id;\n */\n constructor(\n public readonly runtime: IFluidDataStoreRuntime,\n public readonly channel: IFluidDataStoreChannel,\n public readonly context: IFluidDataStoreContext,\n private readonly factoryEntriesMap: Map<string, IChannelFactory>,\n ) {\n this.innerHandle = new FluidObjectHandle(this, \"\", runtime.objectsRoutingContext);\n }\n\n /**\n * Retrieves a shared object with the given id.\n * @param id - The id of the shared object to retrieve.\n */\n public async getSharedObject<T = any>(id: string): Promise<T> {\n if (this.factoryEntriesMap === undefined) {\n throw new Error(\"Shared objects were not provided during creation.\");\n }\n\n for (const key of this.factoryEntriesMap.keys()) {\n if (key === id) {\n const handle = this.root.get<IFluidHandle>(id);\n return handle?.get() as unknown as T;\n }\n }\n\n throw new Error(`Shared object with id ${id} not found.`);\n }\n\n public async request(request: IRequest): Promise<IResponse> {\n return defaultFluidObjectRequestHandler(this, request);\n }\n\n private async initialize(existing: boolean) {\n if (!existing) {\n this.root = SharedMap.create(this.runtime, \"root\");\n\n this.factoryEntriesMap.forEach((sharedObjectFactory: IChannelFactory, key: string) => {\n const sharedObject = this.runtime.createChannel(key, sharedObjectFactory.type);\n this.root.set(key, sharedObject.handle);\n });\n\n this.root.bindToContext();\n }\n\n this.root = await this.runtime.getChannel(\"root\") as ISharedMap;\n }\n}\n\nexport type ChannelFactoryRegistry = Iterable<[string | undefined, IChannelFactory]>;\n\n/**\n * Creates a factory for a TestFluidObject with the given object factory entries. It creates a data store runtime\n * with the object factories in the entry list. All the entries with an id other than undefined are passed to the\n * Fluid object so that it can create a shared object for each.\n *\n * @example\n * The following will create a Fluid object that creates and loads a SharedString and SharedDirectory.\n * It will add SparseMatrix to the data store's factory so that it can be created later.\n *\n * ```typescript\n * new TestFluidObjectFactory([\n * [ \"sharedString\", SharedString.getFactory() ],\n * [ \"sharedDirectory\", SharedDirectory.getFactory() ],\n * [ undefined, SparseMatrix.getFactory() ],\n * ]);\n * ```\n *\n * The SharedString and SharedDirectory can be retrieved via getSharedObject() on the TestFluidObject as follows:\n *\n * ```typescript\n * sharedString = testFluidObject.getSharedObject<SharedString>(\"sharedString\");\n * sharedDir = testFluidObject.getSharedObject<SharedDirectory>(\"sharedDirectory\");\n * ```\n */\nexport class TestFluidObjectFactory implements IFluidDataStoreFactory {\n public get IFluidDataStoreFactory() { return this; }\n\n /**\n * Creates a new TestFluidObjectFactory.\n * @param factoryEntries - A list of id to IChannelFactory mapping. It creates a data store runtime with each\n * IChannelFactory. Entries with string ids are passed to the Fluid object so that it can create a shared object\n * for it.\n */\n constructor(private readonly factoryEntries: ChannelFactoryRegistry,\n public readonly type = \"TestFluidObjectFactory\") { }\n\n public async instantiateDataStore(\n context: IFluidDataStoreContext,\n existing: boolean,\n ): Promise<FluidDataStoreRuntime> {\n const dataTypes = new Map<string, IChannelFactory>();\n\n // Add SharedMap's factory which will be used to create the root map.\n const sharedMapFactory = SharedMap.getFactory();\n dataTypes.set(sharedMapFactory.type, sharedMapFactory);\n\n // Add the object factories to the list to be sent to data store runtime.\n for (const entry of this.factoryEntries) {\n const factory = entry[1];\n dataTypes.set(factory.type, factory);\n }\n\n // Create a map from the factory entries with entries that don't have the id as undefined. This will be\n // passed to the Fluid object.\n const factoryEntriesMapForObject = new Map<string, IChannelFactory>();\n for (const entry of this.factoryEntries) {\n const id = entry[0];\n if (id !== undefined) {\n factoryEntriesMapForObject.set(id, entry[1]);\n }\n }\n\n const runtimeClass = mixinRequestHandler(\n async (request: IRequest) => {\n const router = await routerP;\n return router.request(request);\n });\n\n const runtime = new runtimeClass(context, dataTypes, existing);\n const routerP = TestFluidObject.load(\n runtime,\n runtime,\n context,\n factoryEntriesMapForObject,\n existing,\n );\n\n return runtime;\n }\n}\n"]}
1
+ {"version":3,"file":"testFluidObject.js","sourceRoot":"","sources":["../src/testFluidObject.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 { defaultFluidObjectRequestHandler } from \"@fluidframework/aqueduct\";\nimport {\n IRequest,\n IResponse,\n IFluidHandle,\n IFluidRouter,\n FluidObject,\n IProvideFluidRouter,\n} from \"@fluidframework/core-interfaces\";\nimport { FluidObjectHandle, FluidDataStoreRuntime, mixinRequestHandler } from \"@fluidframework/datastore\";\nimport { SharedMap, ISharedMap } from \"@fluidframework/map\";\nimport {\n IFluidDataStoreContext,\n IFluidDataStoreFactory,\n IFluidDataStoreChannel,\n} from \"@fluidframework/runtime-definitions\";\nimport { IFluidDataStoreRuntime, IChannelFactory } from \"@fluidframework/datastore-definitions\";\nimport { assert } from \"@fluidframework/common-utils\";\nimport { ITestFluidObject } from \"./interfaces\";\n\n/**\n * A test Fluid object that will create a shared object for each key-value pair in the factoryEntries passed to load.\n * The shared objects can be retrieved by passing the key of the entry to getSharedObject.\n * It exposes the IFluidDataStoreContext and IFluidDataStoreRuntime.\n */\nexport class TestFluidObject implements ITestFluidObject, IFluidRouter {\n public static async load(\n runtime: IFluidDataStoreRuntime,\n channel: IFluidDataStoreChannel,\n context: IFluidDataStoreContext,\n factoryEntries: Map<string, IChannelFactory>,\n existing: boolean,\n ) {\n const fluidObject = new TestFluidObject(runtime, channel, context, factoryEntries);\n await fluidObject.initialize(existing);\n\n return fluidObject;\n }\n\n public get ITestFluidObject() {\n return this;\n }\n\n public get IFluidLoadable() {\n return this;\n }\n\n public get IFluidRouter() {\n return this;\n }\n\n public get handle(): IFluidHandle<this> { return this.innerHandle; }\n\n public root!: ISharedMap;\n private readonly innerHandle: IFluidHandle<this>;\n\n /**\n * Creates a new TestFluidObject.\n * @param runtime - The data store runtime.\n * @param context - The data store context.\n * @param factoryEntries - A list of id to IChannelFactory mapping. For each item in the list,\n * a shared object is created which can be retrieved by calling getSharedObject() with the id;\n */\n constructor(\n public readonly runtime: IFluidDataStoreRuntime,\n public readonly channel: IFluidDataStoreChannel,\n public readonly context: IFluidDataStoreContext,\n private readonly factoryEntriesMap: Map<string, IChannelFactory>,\n ) {\n this.innerHandle = new FluidObjectHandle(this, \"\", runtime.objectsRoutingContext);\n }\n\n /**\n * Retrieves a shared object with the given id.\n * @param id - The id of the shared object to retrieve.\n */\n public async getSharedObject<T = any>(id: string): Promise<T> {\n if (this.factoryEntriesMap === undefined) {\n throw new Error(\"Shared objects were not provided during creation.\");\n }\n\n for (const key of this.factoryEntriesMap.keys()) {\n if (key === id) {\n const handle = this.root.get<IFluidHandle>(id);\n return handle?.get() as unknown as T;\n }\n }\n\n throw new Error(`Shared object with id ${id} not found.`);\n }\n\n public async request(request: IRequest): Promise<IResponse> {\n return defaultFluidObjectRequestHandler(this, request);\n }\n\n private async initialize(existing: boolean) {\n if (!existing) {\n this.root = SharedMap.create(this.runtime, \"root\");\n\n this.factoryEntriesMap.forEach((sharedObjectFactory: IChannelFactory, key: string) => {\n const sharedObject = this.runtime.createChannel(key, sharedObjectFactory.type);\n this.root.set(key, sharedObject.handle);\n });\n\n this.root.bindToContext();\n }\n\n this.root = await this.runtime.getChannel(\"root\") as ISharedMap;\n }\n}\n\nexport type ChannelFactoryRegistry = Iterable<[string | undefined, IChannelFactory]>;\n\n/**\n * Creates a factory for a TestFluidObject with the given object factory entries. It creates a data store runtime\n * with the object factories in the entry list. All the entries with an id other than undefined are passed to the\n * Fluid object so that it can create a shared object for each.\n *\n * @example\n * The following will create a Fluid object that creates and loads a SharedString and SharedDirectory.\n * It will add SparseMatrix to the data store's factory so that it can be created later.\n *\n * ```typescript\n * new TestFluidObjectFactory([\n * [ \"sharedString\", SharedString.getFactory() ],\n * [ \"sharedDirectory\", SharedDirectory.getFactory() ],\n * [ undefined, SparseMatrix.getFactory() ],\n * ]);\n * ```\n *\n * The SharedString and SharedDirectory can be retrieved via getSharedObject() on the TestFluidObject as follows:\n *\n * ```typescript\n * sharedString = testFluidObject.getSharedObject<SharedString>(\"sharedString\");\n * sharedDir = testFluidObject.getSharedObject<SharedDirectory>(\"sharedDirectory\");\n * ```\n */\nexport class TestFluidObjectFactory implements IFluidDataStoreFactory {\n public get IFluidDataStoreFactory() { return this; }\n\n /**\n * Creates a new TestFluidObjectFactory.\n * @param factoryEntries - A list of id to IChannelFactory mapping. It creates a data store runtime with each\n * IChannelFactory. Entries with string ids are passed to the Fluid object so that it can create a shared object\n * for it.\n */\n constructor(private readonly factoryEntries: ChannelFactoryRegistry,\n public readonly type = \"TestFluidObjectFactory\") { }\n\n public async instantiateDataStore(\n context: IFluidDataStoreContext,\n existing: boolean,\n ): Promise<FluidDataStoreRuntime> {\n const dataTypes = new Map<string, IChannelFactory>();\n\n // Add SharedMap's factory which will be used to create the root map.\n const sharedMapFactory = SharedMap.getFactory();\n dataTypes.set(sharedMapFactory.type, sharedMapFactory);\n\n // Add the object factories to the list to be sent to data store runtime.\n for (const entry of this.factoryEntries) {\n const factory = entry[1];\n dataTypes.set(factory.type, factory);\n }\n\n // Create a map from the factory entries with entries that don't have the id as undefined. This will be\n // passed to the Fluid object.\n const factoryEntriesMapForObject = new Map<string, IChannelFactory>();\n for (const entry of this.factoryEntries) {\n const id = entry[0];\n if (id !== undefined) {\n factoryEntriesMapForObject.set(id, entry[1]);\n }\n }\n\n const runtimeClass = mixinRequestHandler(\n async (request: IRequest, rt: FluidDataStoreRuntime) => {\n const maybeRouter: FluidObject<IProvideFluidRouter> | undefined\n = await rt.entryPoint?.get();\n assert(maybeRouter?.IFluidRouter !== undefined, \"entryPoint should have been initialized by now\");\n return maybeRouter.IFluidRouter.request(request);\n });\n\n return new runtimeClass(\n context,\n dataTypes,\n existing,\n async (dataStoreRuntime: IFluidDataStoreRuntime) => TestFluidObject.load(\n dataStoreRuntime,\n // This works because 'runtime' is an instance of runtimeClass (which is a FluidDataStoreRuntime and\n // thus implements IFluidDataStoreChannel) which passes itself as the parameter to this function.\n dataStoreRuntime as FluidDataStoreRuntime,\n context,\n factoryEntriesMapForObject,\n existing,\n ));\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/test-utils",
3
- "version": "2.0.0-internal.2.0.2",
3
+ "version": "2.0.0-internal.2.1.0",
4
4
  "description": "Utilities for Fluid tests",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -30,8 +30,6 @@
30
30
  "lint": "npm run eslint",
31
31
  "lint:fix": "npm run eslint:fix",
32
32
  "tsc": "tsc",
33
- "tsfmt": "tsfmt --verify",
34
- "tsfmt:fix": "tsfmt --replace",
35
33
  "typetests:gen": "fluid-type-validator -g -d ."
36
34
  },
37
35
  "nyc": {
@@ -55,36 +53,37 @@
55
53
  "temp-directory": "nyc/.nyc_output"
56
54
  },
57
55
  "dependencies": {
58
- "@fluidframework/aqueduct": ">=2.0.0-internal.2.0.2 <2.0.0-internal.3.0.0",
56
+ "@fluidframework/aqueduct": ">=2.0.0-internal.2.1.0 <2.0.0-internal.3.0.0",
59
57
  "@fluidframework/common-definitions": "^0.20.1",
60
58
  "@fluidframework/common-utils": "^1.0.0",
61
- "@fluidframework/container-definitions": ">=2.0.0-internal.2.0.2 <2.0.0-internal.3.0.0",
62
- "@fluidframework/container-loader": ">=2.0.0-internal.2.0.2 <2.0.0-internal.3.0.0",
63
- "@fluidframework/container-runtime": ">=2.0.0-internal.2.0.2 <2.0.0-internal.3.0.0",
64
- "@fluidframework/container-runtime-definitions": ">=2.0.0-internal.2.0.2 <2.0.0-internal.3.0.0",
65
- "@fluidframework/core-interfaces": ">=2.0.0-internal.2.0.2 <2.0.0-internal.3.0.0",
66
- "@fluidframework/datastore": ">=2.0.0-internal.2.0.2 <2.0.0-internal.3.0.0",
67
- "@fluidframework/datastore-definitions": ">=2.0.0-internal.2.0.2 <2.0.0-internal.3.0.0",
68
- "@fluidframework/driver-definitions": ">=2.0.0-internal.2.0.2 <2.0.0-internal.3.0.0",
69
- "@fluidframework/driver-utils": ">=2.0.0-internal.2.0.2 <2.0.0-internal.3.0.0",
70
- "@fluidframework/local-driver": ">=2.0.0-internal.2.0.2 <2.0.0-internal.3.0.0",
71
- "@fluidframework/map": ">=2.0.0-internal.2.0.2 <2.0.0-internal.3.0.0",
59
+ "@fluidframework/container-definitions": ">=2.0.0-internal.2.1.0 <2.0.0-internal.3.0.0",
60
+ "@fluidframework/container-loader": ">=2.0.0-internal.2.1.0 <2.0.0-internal.3.0.0",
61
+ "@fluidframework/container-runtime": ">=2.0.0-internal.2.1.0 <2.0.0-internal.3.0.0",
62
+ "@fluidframework/container-runtime-definitions": ">=2.0.0-internal.2.1.0 <2.0.0-internal.3.0.0",
63
+ "@fluidframework/core-interfaces": ">=2.0.0-internal.2.1.0 <2.0.0-internal.3.0.0",
64
+ "@fluidframework/datastore": ">=2.0.0-internal.2.1.0 <2.0.0-internal.3.0.0",
65
+ "@fluidframework/datastore-definitions": ">=2.0.0-internal.2.1.0 <2.0.0-internal.3.0.0",
66
+ "@fluidframework/driver-definitions": ">=2.0.0-internal.2.1.0 <2.0.0-internal.3.0.0",
67
+ "@fluidframework/driver-utils": ">=2.0.0-internal.2.1.0 <2.0.0-internal.3.0.0",
68
+ "@fluidframework/local-driver": ">=2.0.0-internal.2.1.0 <2.0.0-internal.3.0.0",
69
+ "@fluidframework/map": ">=2.0.0-internal.2.1.0 <2.0.0-internal.3.0.0",
72
70
  "@fluidframework/protocol-definitions": "^1.1.0",
73
- "@fluidframework/request-handler": ">=2.0.0-internal.2.0.2 <2.0.0-internal.3.0.0",
74
- "@fluidframework/routerlicious-driver": ">=2.0.0-internal.2.0.2 <2.0.0-internal.3.0.0",
75
- "@fluidframework/runtime-definitions": ">=2.0.0-internal.2.0.2 <2.0.0-internal.3.0.0",
76
- "@fluidframework/runtime-utils": ">=2.0.0-internal.2.0.2 <2.0.0-internal.3.0.0",
77
- "@fluidframework/telemetry-utils": ">=2.0.0-internal.2.0.2 <2.0.0-internal.3.0.0",
78
- "@fluidframework/test-driver-definitions": ">=2.0.0-internal.2.0.2 <2.0.0-internal.3.0.0",
79
- "@fluidframework/test-runtime-utils": ">=2.0.0-internal.2.0.2 <2.0.0-internal.3.0.0",
71
+ "@fluidframework/request-handler": ">=2.0.0-internal.2.1.0 <2.0.0-internal.3.0.0",
72
+ "@fluidframework/routerlicious-driver": ">=2.0.0-internal.2.1.0 <2.0.0-internal.3.0.0",
73
+ "@fluidframework/runtime-definitions": ">=2.0.0-internal.2.1.0 <2.0.0-internal.3.0.0",
74
+ "@fluidframework/runtime-utils": ">=2.0.0-internal.2.1.0 <2.0.0-internal.3.0.0",
75
+ "@fluidframework/telemetry-utils": ">=2.0.0-internal.2.1.0 <2.0.0-internal.3.0.0",
76
+ "@fluidframework/test-driver-definitions": ">=2.0.0-internal.2.1.0 <2.0.0-internal.3.0.0",
77
+ "@fluidframework/test-runtime-utils": ">=2.0.0-internal.2.1.0 <2.0.0-internal.3.0.0",
80
78
  "best-random": "^1.0.0",
81
79
  "debug": "^4.1.1",
82
80
  "uuid": "^8.3.1"
83
81
  },
84
82
  "devDependencies": {
85
- "@fluidframework/build-common": "^1.0.0",
86
- "@fluidframework/build-tools": "^0.4.6000",
87
- "@fluidframework/eslint-config-fluid": "^1.0.0",
83
+ "@fluid-tools/build-cli": "^0.5.0",
84
+ "@fluidframework/build-common": "^1.1.0",
85
+ "@fluidframework/build-tools": "^0.5.0",
86
+ "@fluidframework/eslint-config-fluid": "^1.1.0",
88
87
  "@fluidframework/test-utils-previous": "npm:@fluidframework/test-utils@2.0.0-internal.2.0.0",
89
88
  "@microsoft/api-extractor": "^7.22.2",
90
89
  "@rushstack/eslint-config": "^2.5.1",
@@ -100,11 +99,14 @@
100
99
  "nyc": "^15.0.0",
101
100
  "random-js": "^1.0.8",
102
101
  "rimraf": "^2.6.2",
103
- "typescript": "~4.5.5",
104
- "typescript-formatter": "7.1.0"
102
+ "typescript": "~4.5.5"
105
103
  },
106
104
  "typeValidation": {
107
- "version": "2.0.0-internal.2.0.1",
108
- "broken": {}
105
+ "version": "2.0.0-internal.2.1.0",
106
+ "broken": {
107
+ "ClassDeclaration_TestFluidObject": {
108
+ "forwardCompat": false
109
+ }
110
+ }
109
111
  }
110
112
  }
@@ -26,8 +26,7 @@ import { mockConfigProvider } from "./TestConfigs";
26
26
 
27
27
  const summarizerClientType = "summarizer";
28
28
 
29
- async function createSummarizerCore(container: IContainer, loader: IHostLoader, summaryVersion?: string) {
30
- const absoluteUrl = await container.getAbsoluteUrl("");
29
+ async function createSummarizerCore(absoluteUrl: string | undefined, loader: IHostLoader, summaryVersion?: string) {
31
30
  if (absoluteUrl === undefined) {
32
31
  throw new Error("URL could not be resolved");
33
32
  }
@@ -53,7 +52,11 @@ async function createSummarizerCore(container: IContainer, loader: IHostLoader,
53
52
  if (fluidObject.ISummarizer === undefined) {
54
53
  throw new Error("Fluid object does not implement ISummarizer");
55
54
  }
56
- return fluidObject.ISummarizer;
55
+
56
+ return {
57
+ container: summarizerContainer,
58
+ summarizer: fluidObject.ISummarizer,
59
+ };
57
60
  }
58
61
 
59
62
  const defaultSummaryOptions: ISummaryRuntimeOptions = {
@@ -91,8 +94,8 @@ export async function createSummarizerFromFactory(
91
94
  [[provider.defaultCodeDetails, runtimeFactory]],
92
95
  { configProvider: mockConfigProvider() },
93
96
  );
94
-
95
- return createSummarizerCore(container, loader, summaryVersion);
97
+ const absoluteUrl = await container.getAbsoluteUrl("");
98
+ return (await createSummarizerCore(absoluteUrl, loader, summaryVersion)).summarizer;
96
99
  }
97
100
 
98
101
  export async function createSummarizer(
@@ -102,6 +105,23 @@ export async function createSummarizer(
102
105
  gcOptions?: IGCRuntimeOptions,
103
106
  configProvider: IConfigProviderBase = mockConfigProvider(),
104
107
  ): Promise<ISummarizer> {
108
+ const absoluteUrl = await container.getAbsoluteUrl("");
109
+ return (await createSummarizerWithContainer(
110
+ provider,
111
+ absoluteUrl,
112
+ summaryVersion,
113
+ gcOptions,
114
+ configProvider,
115
+ )).summarizer;
116
+ }
117
+
118
+ export async function createSummarizerWithContainer(
119
+ provider: ITestObjectProvider,
120
+ absoluteUrl: string | undefined,
121
+ summaryVersion?: string,
122
+ gcOptions?: IGCRuntimeOptions,
123
+ configProvider: IConfigProviderBase = mockConfigProvider(),
124
+ ): Promise<{ container: IContainer; summarizer: ISummarizer; }> {
105
125
  const testContainerConfig: ITestContainerConfig = {
106
126
  runtimeOptions: {
107
127
  summaryOptions: defaultSummaryOptions,
@@ -109,9 +129,8 @@ export async function createSummarizer(
109
129
  },
110
130
  loaderProps: { configProvider },
111
131
  };
112
-
113
132
  const loader = provider.makeTestLoader(testContainerConfig);
114
- return createSummarizerCore(container, loader, summaryVersion);
133
+ return createSummarizerCore(absoluteUrl, loader, summaryVersion);
115
134
  }
116
135
 
117
136
  export async function summarizeNow(summarizer: ISummarizer, reason: string = "end-to-end test") {
package/src/index.ts CHANGED
@@ -3,15 +3,37 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- export * from "./interfaces";
7
- export * from "./testObjectProvider";
8
- export * from "./loaderContainerTracker";
9
- export * from "./localLoader";
10
- export * from "./localCodeLoader";
11
- export * from "./retry";
12
- export * from "./testContainerRuntimeFactory";
13
- export * from "./testFluidObject";
14
- export * from "./timeoutUtils";
15
- export * from "./DriverWrappers";
16
- export * from "./TestSummaryUtils";
17
- export * from "./TestConfigs";
6
+ export { wrapDocumentService, wrapDocumentServiceFactory, wrapDocumentStorageService } from "./DriverWrappers";
7
+ export { IProvideTestFluidObject, ITestFluidObject } from "./interfaces";
8
+ export { LoaderContainerTracker } from "./loaderContainerTracker";
9
+ export { fluidEntryPoint, LocalCodeLoader, SupportedExportInterfaces } from "./localCodeLoader";
10
+ export { createAndAttachContainer, createLoader } from "./localLoader";
11
+ export { retryWithEventualValue } from "./retry";
12
+ export { mockConfigProvider } from "./TestConfigs";
13
+ export { createTestContainerRuntimeFactory, TestContainerRuntimeFactory } from "./testContainerRuntimeFactory";
14
+ export { ChannelFactoryRegistry, TestFluidObject, TestFluidObjectFactory } from "./testFluidObject";
15
+ export {
16
+ createDocumentId,
17
+ DataObjectFactoryType,
18
+ EventAndErrorTrackingLogger,
19
+ getUnexpectedLogErrorException,
20
+ IOpProcessingController,
21
+ ITestContainerConfig,
22
+ ITestObjectProvider,
23
+ TestObjectProvider,
24
+ } from "./testObjectProvider";
25
+ export {
26
+ createSummarizer,
27
+ createSummarizerFromFactory,
28
+ createSummarizerWithContainer,
29
+ summarizeNow,
30
+ waitForContainerConnection,
31
+ } from "./TestSummaryUtils";
32
+ export {
33
+ defaultTimeoutDurationMs,
34
+ ensureContainerConnected,
35
+ timeoutAwait,
36
+ timeoutPromise,
37
+ TimeoutWithError,
38
+ TimeoutWithValue,
39
+ } from "./timeoutUtils";
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/test-utils";
9
- export const pkgVersion = "2.0.0-internal.2.0.2";
9
+ export const pkgVersion = "2.0.0-internal.2.1.0";
@@ -4,7 +4,14 @@
4
4
  */
5
5
 
6
6
  import { defaultFluidObjectRequestHandler } from "@fluidframework/aqueduct";
7
- import { IRequest, IResponse, IFluidHandle } from "@fluidframework/core-interfaces";
7
+ import {
8
+ IRequest,
9
+ IResponse,
10
+ IFluidHandle,
11
+ IFluidRouter,
12
+ FluidObject,
13
+ IProvideFluidRouter,
14
+ } from "@fluidframework/core-interfaces";
8
15
  import { FluidObjectHandle, FluidDataStoreRuntime, mixinRequestHandler } from "@fluidframework/datastore";
9
16
  import { SharedMap, ISharedMap } from "@fluidframework/map";
10
17
  import {
@@ -13,6 +20,7 @@ import {
13
20
  IFluidDataStoreChannel,
14
21
  } from "@fluidframework/runtime-definitions";
15
22
  import { IFluidDataStoreRuntime, IChannelFactory } from "@fluidframework/datastore-definitions";
23
+ import { assert } from "@fluidframework/common-utils";
16
24
  import { ITestFluidObject } from "./interfaces";
17
25
 
18
26
  /**
@@ -20,7 +28,7 @@ import { ITestFluidObject } from "./interfaces";
20
28
  * The shared objects can be retrieved by passing the key of the entry to getSharedObject.
21
29
  * It exposes the IFluidDataStoreContext and IFluidDataStoreRuntime.
22
30
  */
23
- export class TestFluidObject implements ITestFluidObject {
31
+ export class TestFluidObject implements ITestFluidObject, IFluidRouter {
24
32
  public static async load(
25
33
  runtime: IFluidDataStoreRuntime,
26
34
  channel: IFluidDataStoreChannel,
@@ -42,6 +50,10 @@ export class TestFluidObject implements ITestFluidObject {
42
50
  return this;
43
51
  }
44
52
 
53
+ public get IFluidRouter() {
54
+ return this;
55
+ }
56
+
45
57
  public get handle(): IFluidHandle<this> { return this.innerHandle; }
46
58
 
47
59
  public root!: ISharedMap;
@@ -167,20 +179,25 @@ export class TestFluidObjectFactory implements IFluidDataStoreFactory {
167
179
  }
168
180
 
169
181
  const runtimeClass = mixinRequestHandler(
170
- async (request: IRequest) => {
171
- const router = await routerP;
172
- return router.request(request);
182
+ async (request: IRequest, rt: FluidDataStoreRuntime) => {
183
+ const maybeRouter: FluidObject<IProvideFluidRouter> | undefined
184
+ = await rt.entryPoint?.get();
185
+ assert(maybeRouter?.IFluidRouter !== undefined, "entryPoint should have been initialized by now");
186
+ return maybeRouter.IFluidRouter.request(request);
173
187
  });
174
188
 
175
- const runtime = new runtimeClass(context, dataTypes, existing);
176
- const routerP = TestFluidObject.load(
177
- runtime,
178
- runtime,
189
+ return new runtimeClass(
179
190
  context,
180
- factoryEntriesMapForObject,
191
+ dataTypes,
181
192
  existing,
182
- );
183
-
184
- return runtime;
193
+ async (dataStoreRuntime: IFluidDataStoreRuntime) => TestFluidObject.load(
194
+ dataStoreRuntime,
195
+ // This works because 'runtime' is an instance of runtimeClass (which is a FluidDataStoreRuntime and
196
+ // thus implements IFluidDataStoreChannel) which passes itself as the parameter to this function.
197
+ dataStoreRuntime as FluidDataStoreRuntime,
198
+ context,
199
+ factoryEntriesMapForObject,
200
+ existing,
201
+ ));
185
202
  }
186
203
  }