@fluidframework/container-loader 1.3.0 → 2.0.0-dev.1.4.5.105745

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 (148) hide show
  1. package/.eslintrc.js +8 -21
  2. package/.mocharc.js +12 -0
  3. package/dist/audience.d.ts +2 -2
  4. package/dist/audience.d.ts.map +1 -1
  5. package/dist/audience.js.map +1 -1
  6. package/dist/catchUpMonitor.d.ts +29 -0
  7. package/dist/catchUpMonitor.d.ts.map +1 -0
  8. package/dist/catchUpMonitor.js +43 -0
  9. package/dist/catchUpMonitor.js.map +1 -0
  10. package/dist/collabWindowTracker.d.ts +1 -1
  11. package/dist/collabWindowTracker.d.ts.map +1 -1
  12. package/dist/collabWindowTracker.js +12 -4
  13. package/dist/collabWindowTracker.js.map +1 -1
  14. package/dist/connectionManager.d.ts +5 -5
  15. package/dist/connectionManager.d.ts.map +1 -1
  16. package/dist/connectionManager.js +13 -18
  17. package/dist/connectionManager.js.map +1 -1
  18. package/dist/connectionState.d.ts +0 -5
  19. package/dist/connectionState.d.ts.map +1 -1
  20. package/dist/connectionState.js +0 -5
  21. package/dist/connectionState.js.map +1 -1
  22. package/dist/connectionStateHandler.d.ts +84 -22
  23. package/dist/connectionStateHandler.d.ts.map +1 -1
  24. package/dist/connectionStateHandler.js +172 -59
  25. package/dist/connectionStateHandler.js.map +1 -1
  26. package/dist/container.d.ts +30 -17
  27. package/dist/container.d.ts.map +1 -1
  28. package/dist/container.js +173 -165
  29. package/dist/container.js.map +1 -1
  30. package/dist/containerContext.d.ts +18 -7
  31. package/dist/containerContext.d.ts.map +1 -1
  32. package/dist/containerContext.js +18 -8
  33. package/dist/containerContext.js.map +1 -1
  34. package/dist/containerStorageAdapter.d.ts +11 -25
  35. package/dist/containerStorageAdapter.d.ts.map +1 -1
  36. package/dist/containerStorageAdapter.js +51 -17
  37. package/dist/containerStorageAdapter.js.map +1 -1
  38. package/dist/contracts.d.ts +5 -5
  39. package/dist/contracts.js.map +1 -1
  40. package/dist/deltaManager.d.ts +4 -1
  41. package/dist/deltaManager.d.ts.map +1 -1
  42. package/dist/deltaManager.js +33 -6
  43. package/dist/deltaManager.js.map +1 -1
  44. package/dist/deltaQueue.js +3 -3
  45. package/dist/deltaQueue.js.map +1 -1
  46. package/dist/index.d.ts +1 -0
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js.map +1 -1
  49. package/dist/loader.d.ts +8 -1
  50. package/dist/loader.d.ts.map +1 -1
  51. package/dist/loader.js +4 -3
  52. package/dist/loader.js.map +1 -1
  53. package/dist/packageVersion.d.ts +1 -1
  54. package/dist/packageVersion.d.ts.map +1 -1
  55. package/dist/packageVersion.js +1 -1
  56. package/dist/packageVersion.js.map +1 -1
  57. package/dist/protocol.d.ts +22 -0
  58. package/dist/protocol.d.ts.map +1 -0
  59. package/dist/protocol.js +53 -0
  60. package/dist/protocol.js.map +1 -0
  61. package/dist/protocolTreeDocumentStorageService.d.ts +1 -1
  62. package/dist/protocolTreeDocumentStorageService.d.ts.map +1 -1
  63. package/dist/retriableDocumentStorageService.d.ts +2 -2
  64. package/dist/retriableDocumentStorageService.d.ts.map +1 -1
  65. package/dist/retriableDocumentStorageService.js +2 -2
  66. package/dist/retriableDocumentStorageService.js.map +1 -1
  67. package/lib/audience.d.ts +2 -2
  68. package/lib/audience.d.ts.map +1 -1
  69. package/lib/audience.js.map +1 -1
  70. package/lib/catchUpMonitor.d.ts +29 -0
  71. package/lib/catchUpMonitor.d.ts.map +1 -0
  72. package/lib/catchUpMonitor.js +39 -0
  73. package/lib/catchUpMonitor.js.map +1 -0
  74. package/lib/collabWindowTracker.d.ts +1 -1
  75. package/lib/collabWindowTracker.d.ts.map +1 -1
  76. package/lib/collabWindowTracker.js +13 -5
  77. package/lib/collabWindowTracker.js.map +1 -1
  78. package/lib/connectionManager.d.ts +5 -5
  79. package/lib/connectionManager.d.ts.map +1 -1
  80. package/lib/connectionManager.js +14 -21
  81. package/lib/connectionManager.js.map +1 -1
  82. package/lib/connectionState.d.ts +0 -5
  83. package/lib/connectionState.d.ts.map +1 -1
  84. package/lib/connectionState.js +0 -5
  85. package/lib/connectionState.js.map +1 -1
  86. package/lib/connectionStateHandler.d.ts +84 -22
  87. package/lib/connectionStateHandler.d.ts.map +1 -1
  88. package/lib/connectionStateHandler.js +171 -59
  89. package/lib/connectionStateHandler.js.map +1 -1
  90. package/lib/container.d.ts +30 -17
  91. package/lib/container.d.ts.map +1 -1
  92. package/lib/container.js +176 -168
  93. package/lib/container.js.map +1 -1
  94. package/lib/containerContext.d.ts +18 -7
  95. package/lib/containerContext.d.ts.map +1 -1
  96. package/lib/containerContext.js +19 -9
  97. package/lib/containerContext.js.map +1 -1
  98. package/lib/containerStorageAdapter.d.ts +11 -25
  99. package/lib/containerStorageAdapter.d.ts.map +1 -1
  100. package/lib/containerStorageAdapter.js +51 -16
  101. package/lib/containerStorageAdapter.js.map +1 -1
  102. package/lib/contracts.d.ts +5 -5
  103. package/lib/contracts.js.map +1 -1
  104. package/lib/deltaManager.d.ts +4 -1
  105. package/lib/deltaManager.d.ts.map +1 -1
  106. package/lib/deltaManager.js +35 -8
  107. package/lib/deltaManager.js.map +1 -1
  108. package/lib/deltaQueue.js +3 -3
  109. package/lib/deltaQueue.js.map +1 -1
  110. package/lib/index.d.ts +1 -0
  111. package/lib/index.d.ts.map +1 -1
  112. package/lib/index.js.map +1 -1
  113. package/lib/loader.d.ts +8 -1
  114. package/lib/loader.d.ts.map +1 -1
  115. package/lib/loader.js +4 -3
  116. package/lib/loader.js.map +1 -1
  117. package/lib/packageVersion.d.ts +1 -1
  118. package/lib/packageVersion.d.ts.map +1 -1
  119. package/lib/packageVersion.js +1 -1
  120. package/lib/packageVersion.js.map +1 -1
  121. package/lib/protocol.d.ts +22 -0
  122. package/lib/protocol.d.ts.map +1 -0
  123. package/lib/protocol.js +49 -0
  124. package/lib/protocol.js.map +1 -0
  125. package/lib/protocolTreeDocumentStorageService.d.ts +1 -1
  126. package/lib/protocolTreeDocumentStorageService.d.ts.map +1 -1
  127. package/lib/retriableDocumentStorageService.d.ts +2 -2
  128. package/lib/retriableDocumentStorageService.d.ts.map +1 -1
  129. package/lib/retriableDocumentStorageService.js +2 -2
  130. package/lib/retriableDocumentStorageService.js.map +1 -1
  131. package/package.json +26 -20
  132. package/src/audience.ts +2 -2
  133. package/src/catchUpMonitor.ts +59 -0
  134. package/src/collabWindowTracker.ts +15 -6
  135. package/src/connectionManager.ts +23 -27
  136. package/src/connectionState.ts +0 -6
  137. package/src/connectionStateHandler.ts +235 -70
  138. package/src/container.ts +223 -209
  139. package/src/containerContext.ts +22 -8
  140. package/src/containerStorageAdapter.ts +71 -16
  141. package/src/contracts.ts +7 -7
  142. package/src/deltaManager.ts +42 -11
  143. package/src/deltaQueue.ts +3 -3
  144. package/src/index.ts +4 -0
  145. package/src/loader.ts +14 -3
  146. package/src/packageVersion.ts +1 -1
  147. package/src/protocol.ts +97 -0
  148. package/src/retriableDocumentStorageService.ts +8 -2
@@ -31,7 +31,7 @@ import {
31
31
  waitForConnectedState,
32
32
  DeltaStreamConnectionForbiddenError,
33
33
  logNetworkFailure,
34
- // isRuntimeMessage,
34
+ isRuntimeMessage,
35
35
  } from "@fluidframework/driver-utils";
36
36
  import {
37
37
  ConnectionMode,
@@ -97,7 +97,6 @@ class NoDeltaStream
97
97
  serviceConfiguration: IClientConfiguration = {
98
98
  maxMessageSize: 0,
99
99
  blockSize: 0,
100
- summary: undefined as any,
101
100
  };
102
101
  checkpointSequenceNumber?: number | undefined = undefined;
103
102
  submit(messages: IDocumentMessage[]): void {
@@ -137,8 +136,8 @@ interface IPendingConnection {
137
136
 
138
137
  /**
139
138
  * Implementation of IConnectionManager, used by Container class
140
- * Implements constant connectivity to relay service, by reconnecting in case of loast connection or error.
141
- * Exposes various controls to influecen this process, including manual reconnects, forced read-only mode, etc.
139
+ * Implements constant connectivity to relay service, by reconnecting in case of lost connection or error.
140
+ * Exposes various controls to influence this process, including manual reconnects, forced read-only mode, etc.
142
141
  */
143
142
  export class ConnectionManager implements IConnectionManager {
144
143
  /** Connection mode used when reconnecting on error or disconnect. */
@@ -169,7 +168,7 @@ export class ConnectionManager implements IConnectionManager {
169
168
  private clientSequenceNumber = 0;
170
169
  private clientSequenceNumberObserved = 0;
171
170
  /** Counts the number of noops sent by the client which may not be acked. */
172
- private trailingNoopCount = 0;
171
+ private localOpsToIgnore = 0;
173
172
 
174
173
  /** track clientId used last time when we sent any ops */
175
174
  private lastSubmittedClientId: string | undefined;
@@ -202,7 +201,7 @@ export class ConnectionManager implements IConnectionManager {
202
201
  * Automatic reconnecting enabled or disabled.
203
202
  * If set to Never, then reconnecting will never be allowed.
204
203
  */
205
- public get reconnectMode(): ReconnectMode {
204
+ public get reconnectMode(): ReconnectMode {
206
205
  return this._reconnectMode;
207
206
  }
208
207
 
@@ -234,21 +233,19 @@ export class ConnectionManager implements IConnectionManager {
234
233
  * Returns set of props that can be logged in telemetry that provide some insights / statistics
235
234
  * about current or last connection (if there is no connection at the moment)
236
235
  */
237
- public get connectionProps(): ITelemetryProperties {
238
- if (this.connection !== undefined) {
239
- return this._connectionProps;
240
- } else {
241
- return {
236
+ public get connectionProps(): ITelemetryProperties {
237
+ return this.connection !== undefined
238
+ ? this._connectionProps
239
+ : {
242
240
  ...this._connectionProps,
243
241
  // Report how many ops this client sent in last disconnected session
244
242
  sentOps: this.clientSequenceNumber,
245
243
  };
246
- }
247
244
  }
248
245
 
249
246
  public shouldJoinWrite(): boolean {
250
247
  // We don't have to wait for ack for topmost NoOps. So subtract those.
251
- return this.clientSequenceNumberObserved < (this.clientSequenceNumber - this.trailingNoopCount);
248
+ return this.clientSequenceNumberObserved < (this.clientSequenceNumber - this.localOpsToIgnore);
252
249
  }
253
250
 
254
251
  /**
@@ -379,7 +376,7 @@ export class ConnectionManager implements IConnectionManager {
379
376
  *
380
377
  * @param readonly - set or clear force readonly.
381
378
  */
382
- public forceReadonly(readonly: boolean) {
379
+ public forceReadonly(readonly: boolean) {
383
380
  if (readonly !== this._forceReadonly) {
384
381
  this.logger.sendTelemetryEvent({
385
382
  eventName: "ForceReadOnly",
@@ -568,11 +565,11 @@ export class ConnectionManager implements IConnectionManager {
568
565
  }
569
566
 
570
567
  /**
571
- * Start the connection. Any error should result in container being close.
572
- * And report the error if it excape for any reason.
568
+ * Start the connection. Any error should result in container being closed.
569
+ * And report the error if it escapes for any reason.
573
570
  * @param args - The connection arguments
574
571
  */
575
- private triggerConnect(connectionMode: ConnectionMode) {
572
+ private triggerConnect(connectionMode: ConnectionMode) {
576
573
  assert(this.connection === undefined, 0x239 /* "called only in disconnected state" */);
577
574
  if (this.reconnectMode !== ReconnectMode.Enabled) {
578
575
  return;
@@ -585,7 +582,7 @@ export class ConnectionManager implements IConnectionManager {
585
582
  * @param reason - Text description of disconnect reason to emit with disconnect event
586
583
  * @returns A boolean that indicates if there was an existing connection (or pending connection) to disconnect
587
584
  */
588
- private disconnectFromDeltaStream(reason: string): boolean {
585
+ private disconnectFromDeltaStream(reason: string): boolean {
589
586
  this.pendingReconnect = false;
590
587
 
591
588
  if (this.connection === undefined) {
@@ -638,7 +635,7 @@ export class ConnectionManager implements IConnectionManager {
638
635
  * initial messages.
639
636
  * @param connection - The newly established connection
640
637
  */
641
- private setupNewSuccessfulConnection(connection: IDocumentDeltaConnection, requestedMode: ConnectionMode) {
638
+ private setupNewSuccessfulConnection(connection: IDocumentDeltaConnection, requestedMode: ConnectionMode) {
642
639
  // Old connection should have been cleaned up before establishing a new one
643
640
  assert(this.connection === undefined, 0x0e6 /* "old connection exists on new connection setup" */);
644
641
  assert(!connection.disposed, 0x28a /* "can't be disposed - Callers need to ensure that!" */);
@@ -736,7 +733,7 @@ export class ConnectionManager implements IConnectionManager {
736
733
  * @param error - Error reconnect information including whether or not to reconnect
737
734
  * @returns A promise that resolves when the connection is reestablished or we stop trying
738
735
  */
739
- private reconnectOnError(
736
+ private reconnectOnError(
740
737
  requestedMode: ConnectionMode,
741
738
  error: IAnyDriverError,
742
739
  ) {
@@ -744,7 +741,7 @@ export class ConnectionManager implements IConnectionManager {
744
741
  requestedMode,
745
742
  error.message,
746
743
  error)
747
- .catch(this.props.closeHandler);
744
+ .catch(this.props.closeHandler);
748
745
  }
749
746
 
750
747
  /**
@@ -773,7 +770,7 @@ export class ConnectionManager implements IConnectionManager {
773
770
  this.logger.sendTelemetryEvent({
774
771
  eventName: "reconnectingDespiteFatalError",
775
772
  reconnectMode: this.reconnectMode,
776
- }, error);
773
+ }, error);
777
774
  }
778
775
 
779
776
  if (this.reconnectMode === ReconnectMode.Never) {
@@ -820,10 +817,10 @@ export class ConnectionManager implements IConnectionManager {
820
817
  this.clientSequenceNumberObserved = 0;
821
818
  }
822
819
 
823
- if (message.type === MessageType.NoOp) {
824
- this.trailingNoopCount++;
820
+ if (!isRuntimeMessage(message)) {
821
+ this.localOpsToIgnore++;
825
822
  } else {
826
- this.trailingNoopCount = 0;
823
+ this.localOpsToIgnore = 0;
827
824
  }
828
825
 
829
826
  return {
@@ -858,8 +855,7 @@ export class ConnectionManager implements IConnectionManager {
858
855
  "Switch to write", // message
859
856
  );
860
857
  }
861
- })
862
- .catch(() => {});
858
+ }).catch(() => { });
863
859
  }
864
860
  return;
865
861
  }
@@ -17,12 +17,6 @@ export enum ConnectionState {
17
17
  */
18
18
  EstablishingConnection = 3,
19
19
 
20
- /**
21
- * See {@link ConnectionState.CatchingUp}, which is the new name for this state.
22
- * @deprecated - This state itself is not gone, just being renamed. Please use {@link ConnectionState.CatchingUp}.
23
- */
24
- Connecting = 1,
25
-
26
20
  /**
27
21
  * The container has an inbound connection only, and is catching up to the latest known state from the service.
28
22
  */