@fluidframework/container-loader 2.0.0-internal.4.4.0 → 2.0.0-internal.5.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 (84) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +6 -3
  3. package/dist/connectionManager.d.ts +3 -2
  4. package/dist/connectionManager.d.ts.map +1 -1
  5. package/dist/connectionManager.js.map +1 -1
  6. package/dist/connectionStateHandler.d.ts +4 -3
  7. package/dist/connectionStateHandler.d.ts.map +1 -1
  8. package/dist/connectionStateHandler.js.map +1 -1
  9. package/dist/container.d.ts +62 -36
  10. package/dist/container.d.ts.map +1 -1
  11. package/dist/container.js +63 -83
  12. package/dist/container.js.map +1 -1
  13. package/dist/containerContext.d.ts +2 -2
  14. package/dist/containerContext.d.ts.map +1 -1
  15. package/dist/containerContext.js +3 -7
  16. package/dist/containerContext.js.map +1 -1
  17. package/dist/containerStorageAdapter.d.ts +3 -3
  18. package/dist/containerStorageAdapter.d.ts.map +1 -1
  19. package/dist/containerStorageAdapter.js.map +1 -1
  20. package/dist/deltaManager.d.ts +3 -2
  21. package/dist/deltaManager.d.ts.map +1 -1
  22. package/dist/deltaManager.js +0 -1
  23. package/dist/deltaManager.js.map +1 -1
  24. package/dist/index.d.ts +1 -2
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/loader.d.ts +9 -5
  28. package/dist/loader.d.ts.map +1 -1
  29. package/dist/loader.js +28 -34
  30. package/dist/loader.js.map +1 -1
  31. package/dist/packageVersion.d.ts +1 -1
  32. package/dist/packageVersion.js +1 -1
  33. package/dist/packageVersion.js.map +1 -1
  34. package/dist/retriableDocumentStorageService.d.ts +3 -2
  35. package/dist/retriableDocumentStorageService.d.ts.map +1 -1
  36. package/dist/retriableDocumentStorageService.js.map +1 -1
  37. package/lib/connectionManager.d.ts +3 -2
  38. package/lib/connectionManager.d.ts.map +1 -1
  39. package/lib/connectionManager.js +1 -1
  40. package/lib/connectionManager.js.map +1 -1
  41. package/lib/connectionStateHandler.d.ts +4 -3
  42. package/lib/connectionStateHandler.d.ts.map +1 -1
  43. package/lib/connectionStateHandler.js +1 -1
  44. package/lib/connectionStateHandler.js.map +1 -1
  45. package/lib/container.d.ts +62 -36
  46. package/lib/container.d.ts.map +1 -1
  47. package/lib/container.js +64 -84
  48. package/lib/container.js.map +1 -1
  49. package/lib/containerContext.d.ts +2 -2
  50. package/lib/containerContext.d.ts.map +1 -1
  51. package/lib/containerContext.js +3 -7
  52. package/lib/containerContext.js.map +1 -1
  53. package/lib/containerStorageAdapter.d.ts +3 -3
  54. package/lib/containerStorageAdapter.d.ts.map +1 -1
  55. package/lib/containerStorageAdapter.js.map +1 -1
  56. package/lib/deltaManager.d.ts +3 -2
  57. package/lib/deltaManager.d.ts.map +1 -1
  58. package/lib/deltaManager.js +1 -2
  59. package/lib/deltaManager.js.map +1 -1
  60. package/lib/index.d.ts +1 -2
  61. package/lib/index.d.ts.map +1 -1
  62. package/lib/index.js +1 -1
  63. package/lib/index.js.map +1 -1
  64. package/lib/loader.d.ts +9 -5
  65. package/lib/loader.d.ts.map +1 -1
  66. package/lib/loader.js +28 -34
  67. package/lib/loader.js.map +1 -1
  68. package/lib/packageVersion.d.ts +1 -1
  69. package/lib/packageVersion.js +1 -1
  70. package/lib/packageVersion.js.map +1 -1
  71. package/lib/retriableDocumentStorageService.d.ts +3 -2
  72. package/lib/retriableDocumentStorageService.d.ts.map +1 -1
  73. package/lib/retriableDocumentStorageService.js.map +1 -1
  74. package/package.json +27 -10
  75. package/src/connectionManager.ts +7 -7
  76. package/src/connectionStateHandler.ts +7 -7
  77. package/src/container.ts +140 -125
  78. package/src/containerContext.ts +3 -9
  79. package/src/containerStorageAdapter.ts +4 -4
  80. package/src/deltaManager.ts +7 -4
  81. package/src/index.ts +1 -8
  82. package/src/loader.ts +56 -47
  83. package/src/packageVersion.ts +1 -1
  84. package/src/retriableDocumentStorageService.ts +3 -2
@@ -3,7 +3,8 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { IDisposable, ITelemetryLogger } from "@fluidframework/common-definitions";
6
+ import { IDisposable } from "@fluidframework/common-definitions";
7
+ import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
7
8
  import { assert, bufferToString, stringToBuffer } from "@fluidframework/common-utils";
8
9
  import { ISnapshotTreeWithBlobContents } from "@fluidframework/container-definitions";
9
10
  import {
@@ -27,7 +28,6 @@ import { RetriableDocumentStorageService } from "./retriableDocumentStorageServi
27
28
 
28
29
  /**
29
30
  * Stringified blobs from a summary/snapshot tree.
30
- * @deprecated this is an internal interface and will not longer be exported in future versions
31
31
  * @internal
32
32
  */
33
33
  export interface ISerializableBlobContents {
@@ -60,7 +60,7 @@ export class ContainerStorageAdapter implements IDocumentStorageService, IDispos
60
60
  */
61
61
  public constructor(
62
62
  detachedBlobStorage: IDetachedBlobStorage | undefined,
63
- private readonly logger: ITelemetryLogger,
63
+ private readonly logger: ITelemetryLoggerExt,
64
64
  /**
65
65
  * ArrayBufferLikes or utf8 encoded strings, containing blobs from a snapshot
66
66
  */
@@ -183,7 +183,7 @@ export class ContainerStorageAdapter implements IDocumentStorageService, IDispos
183
183
  class BlobOnlyStorage implements IDocumentStorageService {
184
184
  constructor(
185
185
  private readonly detachedStorage: IDetachedBlobStorage | undefined,
186
- private readonly logger: ITelemetryLogger,
186
+ private readonly logger: ITelemetryLoggerExt,
187
187
  ) {}
188
188
 
189
189
  public async createBlob(content: ArrayBufferLike): Promise<ICreateBlobResponse> {
@@ -6,7 +6,6 @@
6
6
  import { default as AbortController } from "abort-controller";
7
7
  import { v4 as uuid } from "uuid";
8
8
  import {
9
- ITelemetryLogger,
10
9
  IEventProvider,
11
10
  ITelemetryProperties,
12
11
  ITelemetryErrorEvent,
@@ -21,7 +20,12 @@ import {
21
20
  IConnectionDetailsInternal,
22
21
  } from "@fluidframework/container-definitions";
23
22
  import { assert, TypedEventEmitter } from "@fluidframework/common-utils";
24
- import { normalizeError, logIfFalse, safeRaiseEvent } from "@fluidframework/telemetry-utils";
23
+ import {
24
+ normalizeError,
25
+ logIfFalse,
26
+ safeRaiseEvent,
27
+ ITelemetryLoggerExt,
28
+ } from "@fluidframework/telemetry-utils";
25
29
  import {
26
30
  IDocumentDeltaStorageService,
27
31
  IDocumentService,
@@ -340,7 +344,7 @@ export class DeltaManager<TConnectionManager extends IConnectionManager>
340
344
 
341
345
  constructor(
342
346
  private readonly serviceProvider: () => IDocumentService | undefined,
343
- private readonly logger: ITelemetryLogger,
347
+ private readonly logger: ITelemetryLoggerExt,
344
348
  private readonly _active: () => boolean,
345
349
  createConnectionManager: (props: IConnectionManagerFactoryArgs) => TConnectionManager,
346
350
  ) {
@@ -678,7 +682,6 @@ export class DeltaManager<TConnectionManager extends IConnectionManager>
678
682
  this.disposeInternal(error);
679
683
  } else {
680
684
  this.emit("closed", error);
681
- this.disposeInternal(error); // ! TODO: remove this call when Container close no longer disposes
682
685
  }
683
686
  }
684
687
 
package/src/index.ts CHANGED
@@ -4,14 +4,7 @@
4
4
  */
5
5
 
6
6
  export { ConnectionState } from "./connectionState";
7
- export {
8
- IContainerConfig,
9
- IContainerExperimental,
10
- IContainerLoadOptions,
11
- IPendingContainerState,
12
- waitContainerToCatchUp,
13
- } from "./container";
14
- export { ISerializableBlobContents } from "./containerStorageAdapter";
7
+ export { IContainerExperimental, waitContainerToCatchUp } from "./container";
15
8
  export {
16
9
  ICodeDetailsLoader,
17
10
  IDetachedBlobStorage,
package/src/loader.ts CHANGED
@@ -4,7 +4,18 @@
4
4
  */
5
5
 
6
6
  import { v4 as uuid } from "uuid";
7
- import { ITelemetryBaseLogger, ITelemetryLogger } from "@fluidframework/common-definitions";
7
+ import { ITelemetryBaseLogger } from "@fluidframework/common-definitions";
8
+ import {
9
+ ITelemetryLoggerExt,
10
+ ChildLogger,
11
+ DebugLogger,
12
+ IConfigProviderBase,
13
+ loggerToMonitoringContext,
14
+ mixinMonitoringContext,
15
+ MonitoringContext,
16
+ PerformanceEvent,
17
+ sessionStorageConfigProvider,
18
+ } from "@fluidframework/telemetry-utils";
8
19
  import {
9
20
  FluidObject,
10
21
  IFluidRouter,
@@ -22,24 +33,13 @@ import {
22
33
  IProvideFluidCodeDetailsComparer,
23
34
  IFluidCodeDetails,
24
35
  } from "@fluidframework/container-definitions";
25
- import {
26
- ChildLogger,
27
- DebugLogger,
28
- IConfigProviderBase,
29
- loggerToMonitoringContext,
30
- mixinMonitoringContext,
31
- MonitoringContext,
32
- PerformanceEvent,
33
- sessionStorageConfigProvider,
34
- } from "@fluidframework/telemetry-utils";
35
36
  import {
36
37
  IDocumentServiceFactory,
37
38
  IDocumentStorageService,
38
- IFluidResolvedUrl,
39
+ IResolvedUrl,
39
40
  IUrlResolver,
40
41
  } from "@fluidframework/driver-definitions";
41
42
  import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
42
- import { ensureFluidResolvedUrl } from "@fluidframework/driver-utils";
43
43
  import { Container, IPendingContainerState } from "./container";
44
44
  import { IParsedUrl, parseUrl } from "./utils";
45
45
  import { pkgVersion } from "./packageVersion";
@@ -53,8 +53,15 @@ function canUseCache(request: IRequest): boolean {
53
53
  return request.headers[LoaderHeader.cache] !== false;
54
54
  }
55
55
 
56
+ function ensureResolvedUrlDefined(
57
+ resolved: IResolvedUrl | undefined,
58
+ ): asserts resolved is IResolvedUrl {
59
+ if (resolved === undefined) {
60
+ throw new Error(`Object is not a IResolveUrl.`);
61
+ }
62
+ }
56
63
  /**
57
- * @deprecated - In the next release RelativeLoader will no longer be exported. It is an internal class that should not be used directly.
64
+ * @internal
58
65
  */
59
66
  export class RelativeLoader implements ILoader {
60
67
  constructor(
@@ -71,15 +78,19 @@ export class RelativeLoader implements ILoader {
71
78
  if (canUseCache(request)) {
72
79
  return this.container;
73
80
  } else {
74
- const resolvedUrl = this.container.resolvedUrl;
75
- ensureFluidResolvedUrl(resolvedUrl);
76
- const container = await Container.load(this.loader as Loader, {
77
- canReconnect: request.headers?.[LoaderHeader.reconnect],
78
- clientDetailsOverride: request.headers?.[LoaderHeader.clientDetails],
79
- resolvedUrl: { ...resolvedUrl },
80
- version: request.headers?.[LoaderHeader.version] ?? undefined,
81
- loadMode: request.headers?.[LoaderHeader.loadMode],
82
- });
81
+ ensureResolvedUrlDefined(this.container.resolvedUrl);
82
+ const container = await Container.clone(
83
+ this.container,
84
+ {
85
+ resolvedUrl: { ...this.container.resolvedUrl },
86
+ version: request.headers?.[LoaderHeader.version] ?? undefined,
87
+ loadMode: request.headers?.[LoaderHeader.loadMode],
88
+ },
89
+ {
90
+ canReconnect: request.headers?.[LoaderHeader.reconnect],
91
+ clientDetailsOverride: request.headers?.[LoaderHeader.clientDetails],
92
+ },
93
+ );
83
94
  return container;
84
95
  }
85
96
  }
@@ -237,12 +248,18 @@ export interface ILoaderServices {
237
248
  /**
238
249
  * The logger downstream consumers should construct their loggers from
239
250
  */
240
- readonly subLogger: ITelemetryLogger;
251
+ readonly subLogger: ITelemetryLoggerExt;
241
252
 
242
253
  /**
243
254
  * Blobs storage for detached containers.
244
255
  */
245
256
  readonly detachedBlobStorage?: IDetachedBlobStorage;
257
+
258
+ /**
259
+ * Optional property for allowing the container to use a custom
260
+ * protocol implementation for handling the quorum and/or the audience.
261
+ */
262
+ readonly protocolHandlerBuilder?: ProtocolHandlerBuilder;
246
263
  }
247
264
 
248
265
  /**
@@ -266,7 +283,7 @@ export async function requestResolvedObjectFromContainer(
266
283
  container: IContainer,
267
284
  headers?: IRequestHeader,
268
285
  ): Promise<IResponse> {
269
- ensureFluidResolvedUrl(container.resolvedUrl);
286
+ ensureResolvedUrlDefined(container.resolvedUrl);
270
287
  const parsedUrl = parseUrl(container.resolvedUrl.url);
271
288
 
272
289
  if (parsedUrl === undefined) {
@@ -289,7 +306,6 @@ export class Loader implements IHostLoader {
289
306
  private readonly containers = new Map<string, Promise<Container>>();
290
307
  public readonly services: ILoaderServices;
291
308
  private readonly mc: MonitoringContext;
292
- private readonly protocolHandlerBuilder: ProtocolHandlerBuilder | undefined;
293
309
 
294
310
  constructor(loaderProps: ILoaderProps) {
295
311
  const scope: FluidObject<ILoader> = { ...loaderProps.scope };
@@ -310,16 +326,12 @@ export class Loader implements IHostLoader {
310
326
  );
311
327
 
312
328
  this.services = {
313
- urlResolver: loaderProps.urlResolver,
314
- documentServiceFactory: loaderProps.documentServiceFactory,
315
- codeLoader: loaderProps.codeLoader,
316
- options: loaderProps.options ?? {},
329
+ ...loaderProps,
317
330
  scope,
318
331
  subLogger: subMc.logger,
319
- detachedBlobStorage: loaderProps.detachedBlobStorage,
332
+ options: loaderProps.options ?? {},
320
333
  };
321
334
  this.mc = loggerToMonitoringContext(ChildLogger.create(this.services.subLogger, "Loader"));
322
- this.protocolHandlerBuilder = loaderProps.protocolHandlerBuilder;
323
335
  }
324
336
 
325
337
  public get IFluidRouter(): IFluidRouter {
@@ -327,15 +339,11 @@ export class Loader implements IHostLoader {
327
339
  }
328
340
 
329
341
  public async createDetachedContainer(codeDetails: IFluidCodeDetails): Promise<IContainer> {
330
- const container = await Container.createDetached(
331
- this,
332
- codeDetails,
333
- this.protocolHandlerBuilder,
334
- );
342
+ const container = await Container.createDetached(this.services, codeDetails);
335
343
 
336
344
  if (this.cachingEnabled) {
337
345
  container.once("attached", () => {
338
- ensureFluidResolvedUrl(container.resolvedUrl);
346
+ ensureResolvedUrlDefined(container.resolvedUrl);
339
347
  const parsedUrl = parseUrl(container.resolvedUrl.url);
340
348
  if (parsedUrl !== undefined) {
341
349
  this.addToContainerCache(parsedUrl.id, Promise.resolve(container));
@@ -347,7 +355,7 @@ export class Loader implements IHostLoader {
347
355
  }
348
356
 
349
357
  public async rehydrateDetachedContainerFromSnapshot(snapshot: string): Promise<IContainer> {
350
- return Container.rehydrateDetachedFromSnapshot(this, snapshot, this.protocolHandlerBuilder);
358
+ return Container.rehydrateDetachedFromSnapshot(this.services, snapshot);
351
359
  }
352
360
 
353
361
  public async resolve(request: IRequest, pendingLocalState?: string): Promise<IContainer> {
@@ -404,7 +412,7 @@ export class Loader implements IHostLoader {
404
412
  pendingLocalState?: IPendingContainerState,
405
413
  ): Promise<{ container: Container; parsed: IParsedUrl }> {
406
414
  const resolvedAsFluid = await this.services.urlResolver.resolve(request);
407
- ensureFluidResolvedUrl(resolvedAsFluid);
415
+ ensureResolvedUrlDefined(resolvedAsFluid);
408
416
 
409
417
  // Parse URL into data stores
410
418
  const parsed = parseUrl(resolvedAsFluid.url);
@@ -489,20 +497,21 @@ export class Loader implements IHostLoader {
489
497
 
490
498
  private async loadContainer(
491
499
  request: IRequest,
492
- resolved: IFluidResolvedUrl,
500
+ resolvedUrl: IResolvedUrl,
493
501
  pendingLocalState?: IPendingContainerState,
494
502
  ): Promise<Container> {
495
503
  return Container.load(
496
- this,
497
504
  {
498
- canReconnect: request.headers?.[LoaderHeader.reconnect],
499
- clientDetailsOverride: request.headers?.[LoaderHeader.clientDetails],
500
- resolvedUrl: resolved,
505
+ resolvedUrl,
501
506
  version: request.headers?.[LoaderHeader.version] ?? undefined,
502
507
  loadMode: request.headers?.[LoaderHeader.loadMode],
508
+ pendingLocalState,
509
+ },
510
+ {
511
+ canReconnect: request.headers?.[LoaderHeader.reconnect],
512
+ clientDetailsOverride: request.headers?.[LoaderHeader.clientDetails],
513
+ ...this.services,
503
514
  },
504
- pendingLocalState,
505
- this.protocolHandlerBuilder,
506
515
  );
507
516
  }
508
517
  }
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/container-loader";
9
- export const pkgVersion = "2.0.0-internal.4.4.0";
9
+ export const pkgVersion = "2.0.0-internal.5.0.0";
@@ -18,14 +18,15 @@ import {
18
18
  ISummaryTree,
19
19
  IVersion,
20
20
  } from "@fluidframework/protocol-definitions";
21
- import { IDisposable, ITelemetryLogger } from "@fluidframework/common-definitions";
21
+ import { IDisposable } from "@fluidframework/common-definitions";
22
+ import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
22
23
  import { runWithRetry } from "@fluidframework/driver-utils";
23
24
 
24
25
  export class RetriableDocumentStorageService implements IDocumentStorageService, IDisposable {
25
26
  private _disposed = false;
26
27
  constructor(
27
28
  private readonly internalStorageService: IDocumentStorageService,
28
- private readonly logger: ITelemetryLogger,
29
+ private readonly logger: ITelemetryLoggerExt,
29
30
  ) {}
30
31
 
31
32
  public get policies(): IDocumentStorageServicePolicies | undefined {