@fluidframework/container-loader 2.0.0-dev.2.3.0.115467 → 2.0.0-dev.4.1.0.148229

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 (168) hide show
  1. package/.eslintrc.js +18 -21
  2. package/.mocharc.js +2 -2
  3. package/README.md +65 -44
  4. package/api-extractor.json +2 -2
  5. package/closeAndGetPendingLocalState.md +51 -0
  6. package/dist/audience.d.ts +0 -1
  7. package/dist/audience.d.ts.map +1 -1
  8. package/dist/audience.js.map +1 -1
  9. package/dist/catchUpMonitor.d.ts.map +1 -1
  10. package/dist/catchUpMonitor.js.map +1 -1
  11. package/dist/collabWindowTracker.d.ts.map +1 -1
  12. package/dist/collabWindowTracker.js.map +1 -1
  13. package/dist/connectionManager.d.ts +5 -5
  14. package/dist/connectionManager.d.ts.map +1 -1
  15. package/dist/connectionManager.js +107 -44
  16. package/dist/connectionManager.js.map +1 -1
  17. package/dist/connectionState.d.ts.map +1 -1
  18. package/dist/connectionState.js.map +1 -1
  19. package/dist/connectionStateHandler.d.ts +7 -7
  20. package/dist/connectionStateHandler.d.ts.map +1 -1
  21. package/dist/connectionStateHandler.js +50 -21
  22. package/dist/connectionStateHandler.js.map +1 -1
  23. package/dist/container.d.ts +64 -5
  24. package/dist/container.d.ts.map +1 -1
  25. package/dist/container.js +329 -137
  26. package/dist/container.js.map +1 -1
  27. package/dist/containerContext.d.ts +19 -8
  28. package/dist/containerContext.d.ts.map +1 -1
  29. package/dist/containerContext.js +58 -14
  30. package/dist/containerContext.js.map +1 -1
  31. package/dist/containerStorageAdapter.d.ts +41 -2
  32. package/dist/containerStorageAdapter.d.ts.map +1 -1
  33. package/dist/containerStorageAdapter.js +88 -14
  34. package/dist/containerStorageAdapter.js.map +1 -1
  35. package/dist/contracts.d.ts +3 -3
  36. package/dist/contracts.d.ts.map +1 -1
  37. package/dist/contracts.js.map +1 -1
  38. package/dist/deltaManager.d.ts +21 -8
  39. package/dist/deltaManager.d.ts.map +1 -1
  40. package/dist/deltaManager.js +112 -37
  41. package/dist/deltaManager.js.map +1 -1
  42. package/dist/deltaManagerProxy.d.ts +10 -22
  43. package/dist/deltaManagerProxy.d.ts.map +1 -1
  44. package/dist/deltaManagerProxy.js +14 -50
  45. package/dist/deltaManagerProxy.js.map +1 -1
  46. package/dist/deltaQueue.d.ts.map +1 -1
  47. package/dist/deltaQueue.js +4 -2
  48. package/dist/deltaQueue.js.map +1 -1
  49. package/dist/index.d.ts +4 -3
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +1 -3
  52. package/dist/index.js.map +1 -1
  53. package/dist/loader.d.ts +13 -4
  54. package/dist/loader.d.ts.map +1 -1
  55. package/dist/loader.js +38 -24
  56. package/dist/loader.js.map +1 -1
  57. package/dist/packageVersion.d.ts +1 -1
  58. package/dist/packageVersion.js +1 -1
  59. package/dist/packageVersion.js.map +1 -1
  60. package/dist/protocol.d.ts.map +1 -1
  61. package/dist/protocol.js +2 -1
  62. package/dist/protocol.js.map +1 -1
  63. package/dist/protocolTreeDocumentStorageService.d.ts +6 -2
  64. package/dist/protocolTreeDocumentStorageService.d.ts.map +1 -1
  65. package/dist/protocolTreeDocumentStorageService.js +7 -4
  66. package/dist/protocolTreeDocumentStorageService.js.map +1 -1
  67. package/dist/quorum.d.ts.map +1 -1
  68. package/dist/quorum.js.map +1 -1
  69. package/dist/retriableDocumentStorageService.d.ts.map +1 -1
  70. package/dist/retriableDocumentStorageService.js +6 -2
  71. package/dist/retriableDocumentStorageService.js.map +1 -1
  72. package/dist/utils.d.ts.map +1 -1
  73. package/dist/utils.js +8 -5
  74. package/dist/utils.js.map +1 -1
  75. package/lib/audience.d.ts +0 -1
  76. package/lib/audience.d.ts.map +1 -1
  77. package/lib/audience.js.map +1 -1
  78. package/lib/catchUpMonitor.d.ts.map +1 -1
  79. package/lib/catchUpMonitor.js.map +1 -1
  80. package/lib/collabWindowTracker.d.ts.map +1 -1
  81. package/lib/collabWindowTracker.js.map +1 -1
  82. package/lib/connectionManager.d.ts +5 -5
  83. package/lib/connectionManager.d.ts.map +1 -1
  84. package/lib/connectionManager.js +110 -47
  85. package/lib/connectionManager.js.map +1 -1
  86. package/lib/connectionState.d.ts.map +1 -1
  87. package/lib/connectionState.js.map +1 -1
  88. package/lib/connectionStateHandler.d.ts +7 -7
  89. package/lib/connectionStateHandler.d.ts.map +1 -1
  90. package/lib/connectionStateHandler.js +50 -21
  91. package/lib/connectionStateHandler.js.map +1 -1
  92. package/lib/container.d.ts +64 -5
  93. package/lib/container.d.ts.map +1 -1
  94. package/lib/container.js +336 -144
  95. package/lib/container.js.map +1 -1
  96. package/lib/containerContext.d.ts +19 -8
  97. package/lib/containerContext.d.ts.map +1 -1
  98. package/lib/containerContext.js +59 -15
  99. package/lib/containerContext.js.map +1 -1
  100. package/lib/containerStorageAdapter.d.ts +41 -2
  101. package/lib/containerStorageAdapter.d.ts.map +1 -1
  102. package/lib/containerStorageAdapter.js +86 -14
  103. package/lib/containerStorageAdapter.js.map +1 -1
  104. package/lib/contracts.d.ts +3 -3
  105. package/lib/contracts.d.ts.map +1 -1
  106. package/lib/contracts.js.map +1 -1
  107. package/lib/deltaManager.d.ts +21 -8
  108. package/lib/deltaManager.d.ts.map +1 -1
  109. package/lib/deltaManager.js +114 -39
  110. package/lib/deltaManager.js.map +1 -1
  111. package/lib/deltaManagerProxy.d.ts +10 -22
  112. package/lib/deltaManagerProxy.d.ts.map +1 -1
  113. package/lib/deltaManagerProxy.js +14 -50
  114. package/lib/deltaManagerProxy.js.map +1 -1
  115. package/lib/deltaQueue.d.ts.map +1 -1
  116. package/lib/deltaQueue.js +4 -2
  117. package/lib/deltaQueue.js.map +1 -1
  118. package/lib/index.d.ts +4 -3
  119. package/lib/index.d.ts.map +1 -1
  120. package/lib/index.js +2 -2
  121. package/lib/index.js.map +1 -1
  122. package/lib/loader.d.ts +13 -4
  123. package/lib/loader.d.ts.map +1 -1
  124. package/lib/loader.js +37 -24
  125. package/lib/loader.js.map +1 -1
  126. package/lib/packageVersion.d.ts +1 -1
  127. package/lib/packageVersion.js +1 -1
  128. package/lib/packageVersion.js.map +1 -1
  129. package/lib/protocol.d.ts.map +1 -1
  130. package/lib/protocol.js +2 -1
  131. package/lib/protocol.js.map +1 -1
  132. package/lib/protocolTreeDocumentStorageService.d.ts +6 -2
  133. package/lib/protocolTreeDocumentStorageService.d.ts.map +1 -1
  134. package/lib/protocolTreeDocumentStorageService.js +7 -4
  135. package/lib/protocolTreeDocumentStorageService.js.map +1 -1
  136. package/lib/quorum.d.ts.map +1 -1
  137. package/lib/quorum.js.map +1 -1
  138. package/lib/retriableDocumentStorageService.d.ts.map +1 -1
  139. package/lib/retriableDocumentStorageService.js +6 -2
  140. package/lib/retriableDocumentStorageService.js.map +1 -1
  141. package/lib/utils.d.ts.map +1 -1
  142. package/lib/utils.js +8 -5
  143. package/lib/utils.js.map +1 -1
  144. package/package.json +67 -56
  145. package/prettier.config.cjs +1 -1
  146. package/src/audience.ts +51 -46
  147. package/src/catchUpMonitor.ts +39 -37
  148. package/src/collabWindowTracker.ts +75 -70
  149. package/src/connectionManager.ts +1040 -941
  150. package/src/connectionState.ts +19 -19
  151. package/src/connectionStateHandler.ts +557 -463
  152. package/src/container.ts +2147 -1784
  153. package/src/containerContext.ts +417 -345
  154. package/src/containerStorageAdapter.ts +268 -154
  155. package/src/contracts.ts +155 -153
  156. package/src/deltaManager.ts +1074 -945
  157. package/src/deltaManagerProxy.ts +88 -137
  158. package/src/deltaQueue.ts +155 -151
  159. package/src/index.ts +13 -17
  160. package/src/loader.ts +434 -427
  161. package/src/packageVersion.ts +1 -1
  162. package/src/protocol.ts +93 -87
  163. package/src/protocolTreeDocumentStorageService.ts +34 -34
  164. package/src/quorum.ts +34 -34
  165. package/src/retriableDocumentStorageService.ts +118 -102
  166. package/src/utils.ts +93 -83
  167. package/tsconfig.esnext.json +6 -6
  168. package/tsconfig.json +8 -12
@@ -30,82 +30,87 @@ const defaultNoopCountFrequency = 50;
30
30
  // 2. If there are more than 50 ops received without sending any ops, send noop to keep collab window small.
31
31
  // Note that system ops (including noops themselves) are excluded, so it's 1 noop per 50 real ops.
32
32
  export class CollabWindowTracker {
33
- private opsCountSinceNoop = 0;
34
- private readonly timer: Timer | undefined;
33
+ private opsCountSinceNoop = 0;
34
+ private readonly timer: Timer | undefined;
35
35
 
36
- constructor(
37
- private readonly submit: (type: MessageType) => void,
38
- NoopTimeFrequency: number = defaultNoopTimeFrequency,
39
- private readonly NoopCountFrequency: number = defaultNoopCountFrequency,
40
- ) {
41
- if (NoopTimeFrequency !== Infinity) {
42
- this.timer = new Timer(NoopTimeFrequency, () => {
43
- // Can get here due to this.stopSequenceNumberUpdate() not resetting timer.
44
- // Also timer callback can fire even after timer cancellation if it was queued before cancellation.
45
- if (this.opsCountSinceNoop !== 0) {
46
- this.submitNoop(false /* immediate */);
47
- }
48
- });
49
- }
50
- }
36
+ constructor(
37
+ private readonly submit: (type: MessageType) => void,
38
+ NoopTimeFrequency: number = defaultNoopTimeFrequency,
39
+ private readonly NoopCountFrequency: number = defaultNoopCountFrequency,
40
+ ) {
41
+ if (NoopTimeFrequency !== Infinity) {
42
+ this.timer = new Timer(NoopTimeFrequency, () => {
43
+ // Can get here due to this.stopSequenceNumberUpdate() not resetting timer.
44
+ // Also timer callback can fire even after timer cancellation if it was queued before cancellation.
45
+ if (this.opsCountSinceNoop !== 0) {
46
+ this.submitNoop(false /* immediate */);
47
+ }
48
+ });
49
+ }
50
+ }
51
51
 
52
- /**
53
- * Schedules as ack to the server to update the reference sequence number
54
- */
55
- public scheduleSequenceNumberUpdate(message: ISequencedDocumentMessage, immediateNoOp: boolean): void {
56
- // While processing a message, an immediate no-op can be requested.
57
- // i.e. to expedite approve or commit phase of quorum.
58
- if (immediateNoOp) {
59
- this.submitNoop(true /* immediate */);
60
- return;
61
- }
52
+ /**
53
+ * Schedules as ack to the server to update the reference sequence number
54
+ */
55
+ public scheduleSequenceNumberUpdate(
56
+ message: ISequencedDocumentMessage,
57
+ immediateNoOp: boolean,
58
+ ): void {
59
+ // While processing a message, an immediate no-op can be requested.
60
+ // i.e. to expedite approve or commit phase of quorum.
61
+ if (immediateNoOp) {
62
+ this.submitNoop(true /* immediate */);
63
+ return;
64
+ }
62
65
 
63
- // We don't acknowledge no-ops to avoid acknowledgement cycles (i.e. ack the MSN
64
- // update, which updates the MSN, then ack the update, etc...).
65
- // Intent here is for runtime (and DDSes) not to keep too much tracking state / memory
66
- // due to runtime ops from other clients.
67
- if (!isRuntimeMessage(message)) {
68
- return;
69
- }
66
+ // We don't acknowledge no-ops to avoid acknowledgement cycles (i.e. ack the MSN
67
+ // update, which updates the MSN, then ack the update, etc...).
68
+ // Intent here is for runtime (and DDSes) not to keep too much tracking state / memory
69
+ // due to runtime ops from other clients.
70
+ if (!isRuntimeMessage(message)) {
71
+ return;
72
+ }
70
73
 
71
- this.opsCountSinceNoop++;
72
- if (this.opsCountSinceNoop === this.NoopCountFrequency) {
73
- // Ensure we only send noop after a batch of many ops is processed
74
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
75
- Promise.resolve().then(() => {
76
- if (this.opsCountSinceNoop >= this.NoopCountFrequency) {
77
- this.submitNoop(false /* immediate */);
78
- // reset count now that all ops are processed
79
- this.opsCountSinceNoop = 0;
80
- }
81
- return;
82
- });
83
- }
74
+ this.opsCountSinceNoop++;
75
+ if (this.opsCountSinceNoop === this.NoopCountFrequency) {
76
+ // Ensure we only send noop after a batch of many ops is processed
77
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
78
+ Promise.resolve().then(() => {
79
+ if (this.opsCountSinceNoop >= this.NoopCountFrequency) {
80
+ this.submitNoop(false /* immediate */);
81
+ // reset count now that all ops are processed
82
+ this.opsCountSinceNoop = 0;
83
+ }
84
+ return;
85
+ });
86
+ }
84
87
 
85
- if (this.timer !== undefined) {
86
- if (this.opsCountSinceNoop === 1) {
87
- this.timer.restart();
88
- }
88
+ if (this.timer !== undefined) {
89
+ if (this.opsCountSinceNoop === 1) {
90
+ this.timer.restart();
91
+ }
89
92
 
90
- assert(this.timer.hasTimer, 0x242 /* "has timer" */);
91
- }
92
- }
93
+ assert(this.timer.hasTimer, 0x242 /* "has timer" */);
94
+ }
95
+ }
93
96
 
94
- private submitNoop(immediate: boolean) {
95
- // Anything other than null is immediate noop
96
- // ADO:1385: Remove cast and use MessageType once definition changes propagate
97
- this.submit(immediate ? (MessageType2.Accept as unknown as MessageType) : MessageType.NoOp);
98
- assert(this.opsCountSinceNoop === 0,
99
- 0x243 /* "stopSequenceNumberUpdate should be called as result of sending any op!" */);
100
- }
97
+ private submitNoop(immediate: boolean) {
98
+ // Anything other than null is immediate noop
99
+ // ADO:1385: Remove cast and use MessageType once definition changes propagate
100
+ this.submit(immediate ? (MessageType2.Accept as unknown as MessageType) : MessageType.NoOp);
101
+ assert(
102
+ this.opsCountSinceNoop === 0,
103
+ 0x243 /* "stopSequenceNumberUpdate should be called as result of sending any op!" */,
104
+ );
105
+ }
101
106
 
102
- public stopSequenceNumberUpdate(): void {
103
- this.opsCountSinceNoop = 0;
104
- // Ideally, we cancel timer here. But that will result in too often set/reset cycle if this client
105
- // keeps sending ops. In most cases it's actually better to let it expire (at most - 4 times per second)
106
- // for nothing, then have a ton of set/reset cycles.
107
- // Note that Timer.restart() is smart and will not change timer expiration if we keep extending timer
108
- // expiration - it will restart the timer instead when it fires with adjusted expiration.
109
- // this.timer.clear();
110
- }
107
+ public stopSequenceNumberUpdate(): void {
108
+ this.opsCountSinceNoop = 0;
109
+ // Ideally, we cancel timer here. But that will result in too often set/reset cycle if this client
110
+ // keeps sending ops. In most cases it's actually better to let it expire (at most - 4 times per second)
111
+ // for nothing, then have a ton of set/reset cycles.
112
+ // Note that Timer.restart() is smart and will not change timer expiration if we keep extending timer
113
+ // expiration - it will restart the timer instead when it fires with adjusted expiration.
114
+ // this.timer.clear();
115
+ }
111
116
  }