@fluidframework/container-runtime 2.23.0 → 2.31.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 (317) hide show
  1. package/CHANGELOG.md +593 -537
  2. package/api-report/container-runtime.legacy.alpha.api.md +0 -246
  3. package/dist/blobManager/blobManager.d.ts +11 -9
  4. package/dist/blobManager/blobManager.d.ts.map +1 -1
  5. package/dist/blobManager/blobManager.js +38 -39
  6. package/dist/blobManager/blobManager.js.map +1 -1
  7. package/dist/blobManager/blobManagerSnapSum.d.ts +2 -4
  8. package/dist/blobManager/blobManagerSnapSum.d.ts.map +1 -1
  9. package/dist/blobManager/blobManagerSnapSum.js +6 -6
  10. package/dist/blobManager/blobManagerSnapSum.js.map +1 -1
  11. package/dist/channelCollection.d.ts +1 -7
  12. package/dist/channelCollection.d.ts.map +1 -1
  13. package/dist/channelCollection.js +2 -27
  14. package/dist/channelCollection.js.map +1 -1
  15. package/dist/connectionTelemetry.d.ts +0 -43
  16. package/dist/connectionTelemetry.d.ts.map +1 -1
  17. package/dist/connectionTelemetry.js.map +1 -1
  18. package/dist/containerRuntime.d.ts +40 -145
  19. package/dist/containerRuntime.d.ts.map +1 -1
  20. package/dist/containerRuntime.js +149 -364
  21. package/dist/containerRuntime.js.map +1 -1
  22. package/dist/dataStoreContext.d.ts +6 -14
  23. package/dist/dataStoreContext.d.ts.map +1 -1
  24. package/dist/dataStoreContext.js +14 -26
  25. package/dist/dataStoreContext.js.map +1 -1
  26. package/dist/gc/garbageCollection.d.ts.map +1 -1
  27. package/dist/gc/garbageCollection.js +2 -20
  28. package/dist/gc/garbageCollection.js.map +1 -1
  29. package/dist/gc/gcConfigs.d.ts.map +1 -1
  30. package/dist/gc/gcConfigs.js +0 -2
  31. package/dist/gc/gcConfigs.js.map +1 -1
  32. package/dist/gc/gcDefinitions.d.ts +8 -24
  33. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  34. package/dist/gc/gcDefinitions.js +1 -3
  35. package/dist/gc/gcDefinitions.js.map +1 -1
  36. package/dist/gc/gcHelpers.d.ts.map +1 -1
  37. package/dist/gc/gcHelpers.js +1 -4
  38. package/dist/gc/gcHelpers.js.map +1 -1
  39. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  40. package/dist/gc/gcSummaryStateTracker.js +0 -1
  41. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  42. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  43. package/dist/gc/gcTelemetry.js +6 -18
  44. package/dist/gc/gcTelemetry.js.map +1 -1
  45. package/dist/index.d.ts +2 -2
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +2 -2
  48. package/dist/index.js.map +1 -1
  49. package/dist/legacy.d.ts +0 -29
  50. package/dist/messageTypes.d.ts.map +1 -1
  51. package/dist/messageTypes.js.map +1 -1
  52. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  53. package/dist/opLifecycle/batchManager.js +16 -5
  54. package/dist/opLifecycle/batchManager.js.map +1 -1
  55. package/dist/opLifecycle/outbox.d.ts +12 -3
  56. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  57. package/dist/opLifecycle/outbox.js +41 -21
  58. package/dist/opLifecycle/outbox.js.map +1 -1
  59. package/dist/packageVersion.d.ts +1 -1
  60. package/dist/packageVersion.js +1 -1
  61. package/dist/packageVersion.js.map +1 -1
  62. package/dist/pendingStateManager.d.ts +1 -0
  63. package/dist/pendingStateManager.d.ts.map +1 -1
  64. package/dist/pendingStateManager.js +12 -2
  65. package/dist/pendingStateManager.js.map +1 -1
  66. package/dist/runCounter.d.ts +11 -0
  67. package/dist/runCounter.d.ts.map +1 -0
  68. package/dist/runCounter.js +43 -0
  69. package/dist/runCounter.js.map +1 -0
  70. package/dist/runtimeLayerCompatState.d.ts +51 -0
  71. package/dist/runtimeLayerCompatState.d.ts.map +1 -0
  72. package/dist/runtimeLayerCompatState.js +123 -0
  73. package/dist/runtimeLayerCompatState.js.map +1 -0
  74. package/dist/signalTelemetryProcessing.d.ts +33 -0
  75. package/dist/signalTelemetryProcessing.d.ts.map +1 -0
  76. package/dist/signalTelemetryProcessing.js +149 -0
  77. package/dist/signalTelemetryProcessing.js.map +1 -0
  78. package/dist/summary/documentSchema.d.ts +7 -31
  79. package/dist/summary/documentSchema.d.ts.map +1 -1
  80. package/dist/summary/documentSchema.js +2 -18
  81. package/dist/summary/documentSchema.js.map +1 -1
  82. package/dist/summary/index.d.ts +2 -1
  83. package/dist/summary/index.d.ts.map +1 -1
  84. package/dist/summary/index.js +7 -1
  85. package/dist/summary/index.js.map +1 -1
  86. package/dist/summary/orderedClientElection.d.ts +1 -3
  87. package/dist/summary/orderedClientElection.d.ts.map +1 -1
  88. package/dist/summary/orderedClientElection.js.map +1 -1
  89. package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -3
  90. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  91. package/dist/summary/runWhileConnectedCoordinator.js +2 -7
  92. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  93. package/dist/summary/runningSummarizer.d.ts +1 -2
  94. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  95. package/dist/summary/runningSummarizer.js +4 -23
  96. package/dist/summary/runningSummarizer.js.map +1 -1
  97. package/dist/summary/summarizer.d.ts +2 -5
  98. package/dist/summary/summarizer.d.ts.map +1 -1
  99. package/dist/summary/summarizer.js +3 -11
  100. package/dist/summary/summarizer.js.map +1 -1
  101. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  102. package/dist/summary/summarizerClientElection.js +0 -1
  103. package/dist/summary/summarizerClientElection.js.map +1 -1
  104. package/dist/summary/summarizerHeuristics.d.ts +1 -1
  105. package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
  106. package/dist/summary/summarizerHeuristics.js.map +1 -1
  107. package/dist/summary/summarizerNode/summarizerNode.d.ts +2 -2
  108. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  109. package/dist/summary/summarizerNode/summarizerNode.js +4 -4
  110. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  111. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +1 -18
  112. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  113. package/dist/summary/summarizerNode/summarizerNodeUtils.js +0 -27
  114. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  115. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -2
  116. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  117. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +1 -2
  118. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  119. package/dist/summary/summarizerTypes.d.ts +109 -22
  120. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  121. package/dist/summary/summarizerTypes.js.map +1 -1
  122. package/dist/summary/summaryFormat.d.ts +3 -9
  123. package/dist/summary/summaryFormat.d.ts.map +1 -1
  124. package/dist/summary/summaryFormat.js.map +1 -1
  125. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  126. package/dist/summary/summaryGenerator.js +3 -9
  127. package/dist/summary/summaryGenerator.js.map +1 -1
  128. package/dist/summary/summaryHelpers.d.ts +19 -0
  129. package/dist/summary/summaryHelpers.d.ts.map +1 -0
  130. package/dist/summary/summaryHelpers.js +90 -0
  131. package/dist/summary/summaryHelpers.js.map +1 -0
  132. package/dist/summary/summaryManager.d.ts.map +1 -1
  133. package/dist/summary/summaryManager.js +0 -2
  134. package/dist/summary/summaryManager.js.map +1 -1
  135. package/lib/blobManager/blobManager.d.ts +11 -9
  136. package/lib/blobManager/blobManager.d.ts.map +1 -1
  137. package/lib/blobManager/blobManager.js +37 -37
  138. package/lib/blobManager/blobManager.js.map +1 -1
  139. package/lib/blobManager/blobManagerSnapSum.d.ts +2 -4
  140. package/lib/blobManager/blobManagerSnapSum.d.ts.map +1 -1
  141. package/lib/blobManager/blobManagerSnapSum.js +6 -6
  142. package/lib/blobManager/blobManagerSnapSum.js.map +1 -1
  143. package/lib/channelCollection.d.ts +1 -7
  144. package/lib/channelCollection.d.ts.map +1 -1
  145. package/lib/channelCollection.js +3 -30
  146. package/lib/channelCollection.js.map +1 -1
  147. package/lib/connectionTelemetry.d.ts +0 -43
  148. package/lib/connectionTelemetry.d.ts.map +1 -1
  149. package/lib/connectionTelemetry.js.map +1 -1
  150. package/lib/containerRuntime.d.ts +40 -145
  151. package/lib/containerRuntime.d.ts.map +1 -1
  152. package/lib/containerRuntime.js +151 -372
  153. package/lib/containerRuntime.js.map +1 -1
  154. package/lib/dataStoreContext.d.ts +6 -14
  155. package/lib/dataStoreContext.d.ts.map +1 -1
  156. package/lib/dataStoreContext.js +14 -26
  157. package/lib/dataStoreContext.js.map +1 -1
  158. package/lib/gc/garbageCollection.d.ts.map +1 -1
  159. package/lib/gc/garbageCollection.js +3 -23
  160. package/lib/gc/garbageCollection.js.map +1 -1
  161. package/lib/gc/gcConfigs.d.ts.map +1 -1
  162. package/lib/gc/gcConfigs.js +0 -2
  163. package/lib/gc/gcConfigs.js.map +1 -1
  164. package/lib/gc/gcDefinitions.d.ts +8 -24
  165. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  166. package/lib/gc/gcDefinitions.js +1 -3
  167. package/lib/gc/gcDefinitions.js.map +1 -1
  168. package/lib/gc/gcHelpers.d.ts.map +1 -1
  169. package/lib/gc/gcHelpers.js +1 -4
  170. package/lib/gc/gcHelpers.js.map +1 -1
  171. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
  172. package/lib/gc/gcSummaryStateTracker.js +0 -1
  173. package/lib/gc/gcSummaryStateTracker.js.map +1 -1
  174. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  175. package/lib/gc/gcTelemetry.js +7 -21
  176. package/lib/gc/gcTelemetry.js.map +1 -1
  177. package/lib/index.d.ts +2 -2
  178. package/lib/index.d.ts.map +1 -1
  179. package/lib/index.js +2 -2
  180. package/lib/index.js.map +1 -1
  181. package/lib/legacy.d.ts +0 -29
  182. package/lib/messageTypes.d.ts.map +1 -1
  183. package/lib/messageTypes.js.map +1 -1
  184. package/lib/opLifecycle/batchManager.d.ts.map +1 -1
  185. package/lib/opLifecycle/batchManager.js +16 -5
  186. package/lib/opLifecycle/batchManager.js.map +1 -1
  187. package/lib/opLifecycle/outbox.d.ts +12 -3
  188. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  189. package/lib/opLifecycle/outbox.js +43 -23
  190. package/lib/opLifecycle/outbox.js.map +1 -1
  191. package/lib/packageVersion.d.ts +1 -1
  192. package/lib/packageVersion.js +1 -1
  193. package/lib/packageVersion.js.map +1 -1
  194. package/lib/pendingStateManager.d.ts +1 -0
  195. package/lib/pendingStateManager.d.ts.map +1 -1
  196. package/lib/pendingStateManager.js +12 -2
  197. package/lib/pendingStateManager.js.map +1 -1
  198. package/lib/runCounter.d.ts +11 -0
  199. package/lib/runCounter.d.ts.map +1 -0
  200. package/lib/runCounter.js +39 -0
  201. package/lib/runCounter.js.map +1 -0
  202. package/lib/runtimeLayerCompatState.d.ts +51 -0
  203. package/lib/runtimeLayerCompatState.d.ts.map +1 -0
  204. package/lib/runtimeLayerCompatState.js +118 -0
  205. package/lib/runtimeLayerCompatState.js.map +1 -0
  206. package/lib/signalTelemetryProcessing.d.ts +33 -0
  207. package/lib/signalTelemetryProcessing.d.ts.map +1 -0
  208. package/lib/signalTelemetryProcessing.js +145 -0
  209. package/lib/signalTelemetryProcessing.js.map +1 -0
  210. package/lib/summary/documentSchema.d.ts +7 -31
  211. package/lib/summary/documentSchema.d.ts.map +1 -1
  212. package/lib/summary/documentSchema.js +2 -18
  213. package/lib/summary/documentSchema.js.map +1 -1
  214. package/lib/summary/index.d.ts +2 -1
  215. package/lib/summary/index.d.ts.map +1 -1
  216. package/lib/summary/index.js +1 -0
  217. package/lib/summary/index.js.map +1 -1
  218. package/lib/summary/orderedClientElection.d.ts +1 -3
  219. package/lib/summary/orderedClientElection.d.ts.map +1 -1
  220. package/lib/summary/orderedClientElection.js.map +1 -1
  221. package/lib/summary/runWhileConnectedCoordinator.d.ts +1 -3
  222. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  223. package/lib/summary/runWhileConnectedCoordinator.js +2 -7
  224. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
  225. package/lib/summary/runningSummarizer.d.ts +1 -2
  226. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  227. package/lib/summary/runningSummarizer.js +4 -23
  228. package/lib/summary/runningSummarizer.js.map +1 -1
  229. package/lib/summary/summarizer.d.ts +2 -5
  230. package/lib/summary/summarizer.d.ts.map +1 -1
  231. package/lib/summary/summarizer.js +3 -11
  232. package/lib/summary/summarizer.js.map +1 -1
  233. package/lib/summary/summarizerClientElection.d.ts.map +1 -1
  234. package/lib/summary/summarizerClientElection.js +0 -1
  235. package/lib/summary/summarizerClientElection.js.map +1 -1
  236. package/lib/summary/summarizerHeuristics.d.ts +1 -1
  237. package/lib/summary/summarizerHeuristics.d.ts.map +1 -1
  238. package/lib/summary/summarizerHeuristics.js.map +1 -1
  239. package/lib/summary/summarizerNode/summarizerNode.d.ts +2 -2
  240. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  241. package/lib/summary/summarizerNode/summarizerNode.js +5 -5
  242. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
  243. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +1 -18
  244. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  245. package/lib/summary/summarizerNode/summarizerNodeUtils.js +1 -25
  246. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  247. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -2
  248. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  249. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +1 -2
  250. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  251. package/lib/summary/summarizerTypes.d.ts +109 -22
  252. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  253. package/lib/summary/summarizerTypes.js.map +1 -1
  254. package/lib/summary/summaryFormat.d.ts +3 -9
  255. package/lib/summary/summaryFormat.d.ts.map +1 -1
  256. package/lib/summary/summaryFormat.js.map +1 -1
  257. package/lib/summary/summaryGenerator.d.ts.map +1 -1
  258. package/lib/summary/summaryGenerator.js +3 -9
  259. package/lib/summary/summaryGenerator.js.map +1 -1
  260. package/lib/summary/summaryHelpers.d.ts +19 -0
  261. package/lib/summary/summaryHelpers.d.ts.map +1 -0
  262. package/lib/summary/summaryHelpers.js +84 -0
  263. package/lib/summary/summaryHelpers.js.map +1 -0
  264. package/lib/summary/summaryManager.d.ts.map +1 -1
  265. package/lib/summary/summaryManager.js +0 -2
  266. package/lib/summary/summaryManager.js.map +1 -1
  267. package/lib/tsdoc-metadata.json +1 -1
  268. package/package.json +20 -23
  269. package/src/blobManager/blobManager.ts +70 -62
  270. package/src/blobManager/blobManagerSnapSum.ts +7 -9
  271. package/src/channelCollection.ts +4 -32
  272. package/src/connectionTelemetry.ts +0 -51
  273. package/src/containerRuntime.ts +259 -622
  274. package/src/dataStoreContext.ts +24 -33
  275. package/src/gc/{garbageCollection.md → README.md} +17 -19
  276. package/src/gc/garbageCollection.ts +9 -26
  277. package/src/gc/gcConfigs.ts +3 -6
  278. package/src/gc/gcDefinitions.ts +10 -28
  279. package/src/gc/gcHelpers.ts +0 -5
  280. package/src/gc/gcSummaryStateTracker.ts +1 -2
  281. package/src/gc/gcTelemetry.ts +8 -15
  282. package/src/index.ts +6 -6
  283. package/src/messageTypes.ts +0 -2
  284. package/src/opLifecycle/batchManager.ts +20 -6
  285. package/src/opLifecycle/outbox.ts +64 -24
  286. package/src/packageVersion.ts +1 -1
  287. package/src/pendingStateManager.ts +18 -2
  288. package/src/runCounter.ts +25 -0
  289. package/src/runtimeLayerCompatState.ts +143 -0
  290. package/src/signalTelemetryProcessing.ts +233 -0
  291. package/src/summary/documentSchema.ts +7 -38
  292. package/src/summary/index.ts +12 -0
  293. package/src/summary/orderedClientElection.ts +1 -3
  294. package/src/summary/runWhileConnectedCoordinator.ts +3 -8
  295. package/src/summary/runningSummarizer.ts +12 -20
  296. package/src/summary/summarizer.ts +6 -18
  297. package/src/summary/summarizerClientElection.ts +0 -2
  298. package/src/summary/summarizerHeuristics.ts +1 -2
  299. package/src/summary/summarizerNode/summarizerNode.ts +6 -5
  300. package/src/summary/summarizerNode/summarizerNodeUtils.ts +1 -27
  301. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +2 -3
  302. package/src/summary/summarizerTypes.ts +119 -23
  303. package/src/summary/summaryFormat.ts +4 -13
  304. package/src/summary/summaryGenerator.ts +1 -8
  305. package/src/summary/summaryHelpers.ts +118 -0
  306. package/src/summary/summaryManager.ts +0 -2
  307. package/tsconfig.json +1 -0
  308. package/dist/layerCompatState.d.ts +0 -19
  309. package/dist/layerCompatState.d.ts.map +0 -1
  310. package/dist/layerCompatState.js +0 -64
  311. package/dist/layerCompatState.js.map +0 -1
  312. package/lib/layerCompatState.d.ts +0 -19
  313. package/lib/layerCompatState.d.ts.map +0 -1
  314. package/lib/layerCompatState.js +0 -60
  315. package/lib/layerCompatState.js.map +0 -1
  316. package/prettier.config.cjs +0 -8
  317. package/src/layerCompatState.ts +0 -75
@@ -0,0 +1,39 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
6
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
7
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
8
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
9
+ };
10
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
11
+ if (kind === "m") throw new TypeError("Private method is not writable");
12
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
13
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
14
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
15
+ };
16
+ var _RunCounter_runs;
17
+ export class RunCounter {
18
+ constructor() {
19
+ _RunCounter_runs.set(this, 0);
20
+ }
21
+ get running() {
22
+ return __classPrivateFieldGet(this, _RunCounter_runs, "f") !== 0;
23
+ }
24
+ get runs() {
25
+ return __classPrivateFieldGet(this, _RunCounter_runs, "f");
26
+ }
27
+ run(act) {
28
+ var _a, _b;
29
+ __classPrivateFieldSet(this, _RunCounter_runs, (_a = __classPrivateFieldGet(this, _RunCounter_runs, "f"), _a++, _a), "f");
30
+ try {
31
+ return act();
32
+ }
33
+ finally {
34
+ __classPrivateFieldSet(this, _RunCounter_runs, (_b = __classPrivateFieldGet(this, _RunCounter_runs, "f"), _b--, _b), "f");
35
+ }
36
+ }
37
+ }
38
+ _RunCounter_runs = new WeakMap();
39
+ //# sourceMappingURL=runCounter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runCounter.js","sourceRoot":"","sources":["../src/runCounter.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;;;;;;;AAEH,MAAM,OAAO,UAAU;IAAvB;QACC,2BAAQ,CAAC,EAAC;IAkBX,CAAC;IAhBA,IAAW,OAAO;QACjB,OAAO,uBAAA,IAAI,wBAAM,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,IAAW,IAAI;QACd,OAAO,uBAAA,IAAI,wBAAM,CAAC;IACnB,CAAC;IAEM,GAAG,CAAI,GAAY;;QACzB,+CAAA,CAAA,wDAAU,EAAV,IAAY,IAAA,CAAA,MAAA,CAAC;QACb,IAAI,CAAC;YACJ,OAAO,GAAG,EAAE,CAAC;QACd,CAAC;gBAAS,CAAC;YACV,+CAAA,CAAA,wDAAU,EAAV,IAAY,IAAA,CAAA,MAAA,CAAC;QACd,CAAC;IACF,CAAC;CACD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport class RunCounter {\n\t#runs = 0;\n\n\tpublic get running(): boolean {\n\t\treturn this.#runs !== 0;\n\t}\n\n\tpublic get runs(): number {\n\t\treturn this.#runs;\n\t}\n\n\tpublic run<T>(act: () => T): T {\n\t\tthis.#runs++;\n\t\ttry {\n\t\t\treturn act();\n\t\t} finally {\n\t\t\tthis.#runs--;\n\t\t}\n\t}\n}\n"]}
@@ -0,0 +1,51 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { type ILayerCompatDetails, type ILayerCompatSupportRequirements } from "@fluid-internal/client-utils";
6
+ import type { ICriticalContainerError } from "@fluidframework/container-definitions";
7
+ /**
8
+ * The core compatibility details of the Runtime layer that is the same across all layer boundaries.
9
+ * @internal
10
+ */
11
+ export declare const runtimeCoreCompatDetails: {
12
+ /**
13
+ * The package version of the Runtime layer.
14
+ */
15
+ pkgVersion: string;
16
+ /**
17
+ * The current generation of the Runtime layer.
18
+ */
19
+ generation: number;
20
+ };
21
+ /**
22
+ * Runtime's compatibility details that is exposed to the Loader layer.
23
+ * @internal
24
+ */
25
+ export declare const runtimeCompatDetailsForLoader: ILayerCompatDetails;
26
+ /**
27
+ * The requirements that the Loader layer must meet to be compatible with this Runtime.
28
+ * @internal
29
+ */
30
+ export declare const loaderSupportRequirements: ILayerCompatSupportRequirements;
31
+ /**
32
+ * Runtime's compatibility details that is exposed to the DataStore layer.
33
+ * @internal
34
+ */
35
+ export declare const runtimeCompatDetailsForDataStore: ILayerCompatDetails;
36
+ /**
37
+ * The requirements that the DataStore layer must meet to be compatible with this Runtime.
38
+ * @internal
39
+ */
40
+ export declare const dataStoreSupportRequirements: ILayerCompatSupportRequirements;
41
+ /**
42
+ * Validates that the Loader layer is compatible with this Runtime.
43
+ * @internal
44
+ */
45
+ export declare function validateLoaderCompatibility(maybeloaderCompatDetailsForRuntime: ILayerCompatDetails | undefined, disposeFn: (error?: ICriticalContainerError) => void): void;
46
+ /**
47
+ * Validates that the DataStore layer is compatible with this Runtime.
48
+ * @internal
49
+ */
50
+ export declare function validateDatastoreCompatibility(maybeDataStoreCompatDetails: ILayerCompatDetails | undefined, disposeFn: () => void): void;
51
+ //# sourceMappingURL=runtimeLayerCompatState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtimeLayerCompatState.d.ts","sourceRoot":"","sources":["../src/runtimeLayerCompatState.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEN,KAAK,mBAAmB,EACxB,KAAK,+BAA+B,EACpC,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAKrF;;;GAGG;AACH,eAAO,MAAM,wBAAwB;IACpC;;OAEG;;IAEH;;OAEG;;CAEH,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,6BAA6B,EAAE,mBAM3C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,+BAUvC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gCAAgC,EAAE,mBAM9C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,EAAE,+BAU1C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,2BAA2B,CAC1C,kCAAkC,EAAE,mBAAmB,GAAG,SAAS,EACnE,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,uBAAuB,KAAK,IAAI,GAClD,IAAI,CAoBN;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC7C,2BAA2B,EAAE,mBAAmB,GAAG,SAAS,EAC5D,SAAS,EAAE,MAAM,IAAI,GACnB,IAAI,CAoBN"}
@@ -0,0 +1,118 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { checkLayerCompatibility, } from "@fluid-internal/client-utils";
6
+ import { UsageError } from "@fluidframework/telemetry-utils/internal";
7
+ import { pkgVersion } from "./packageVersion.js";
8
+ /**
9
+ * The core compatibility details of the Runtime layer that is the same across all layer boundaries.
10
+ * @internal
11
+ */
12
+ export const runtimeCoreCompatDetails = {
13
+ /**
14
+ * The package version of the Runtime layer.
15
+ */
16
+ pkgVersion,
17
+ /**
18
+ * The current generation of the Runtime layer.
19
+ */
20
+ generation: 1,
21
+ };
22
+ /**
23
+ * Runtime's compatibility details that is exposed to the Loader layer.
24
+ * @internal
25
+ */
26
+ export const runtimeCompatDetailsForLoader = {
27
+ ...runtimeCoreCompatDetails,
28
+ /**
29
+ * The features supported by the Runtime layer across the Runtime / Loader boundary.
30
+ */
31
+ supportedFeatures: new Set(),
32
+ };
33
+ /**
34
+ * The requirements that the Loader layer must meet to be compatible with this Runtime.
35
+ * @internal
36
+ */
37
+ export const loaderSupportRequirements = {
38
+ /**
39
+ * Minimum generation that Loader must be at to be compatible with Runtime. Note that 0 is used here so
40
+ * that Loader layers before the introduction of the layer compatibility enforcement are compatible.
41
+ */
42
+ minSupportedGeneration: 0,
43
+ /**
44
+ * The features that the Loader must support to be compatible with Runtime.
45
+ */
46
+ requiredFeatures: [],
47
+ };
48
+ /**
49
+ * Runtime's compatibility details that is exposed to the DataStore layer.
50
+ * @internal
51
+ */
52
+ export const runtimeCompatDetailsForDataStore = {
53
+ ...runtimeCoreCompatDetails,
54
+ /**
55
+ * The features supported by the Runtime layer across the Runtime / Loader boundary.
56
+ */
57
+ supportedFeatures: new Set(),
58
+ };
59
+ /**
60
+ * The requirements that the DataStore layer must meet to be compatible with this Runtime.
61
+ * @internal
62
+ */
63
+ export const dataStoreSupportRequirements = {
64
+ /**
65
+ * Minimum generation that DataStore must be at to be compatible with Runtime. Note that 0 is used here so
66
+ * that DataStore layers before the introduction of the layer compatibility enforcement are compatible.
67
+ */
68
+ minSupportedGeneration: 0,
69
+ /**
70
+ * The features that the DataStore must support to be compatible with Runtime.
71
+ */
72
+ requiredFeatures: [],
73
+ };
74
+ /**
75
+ * Validates that the Loader layer is compatible with this Runtime.
76
+ * @internal
77
+ */
78
+ export function validateLoaderCompatibility(maybeloaderCompatDetailsForRuntime, disposeFn) {
79
+ const layerCheckResult = checkLayerCompatibility(loaderSupportRequirements, maybeloaderCompatDetailsForRuntime);
80
+ if (!layerCheckResult.isCompatible) {
81
+ const error = new UsageError("Runtime is not compatible with Loader", {
82
+ errorDetails: JSON.stringify({
83
+ runtimeVersion: runtimeCoreCompatDetails.pkgVersion,
84
+ loaderVersion: maybeloaderCompatDetailsForRuntime?.pkgVersion,
85
+ runtimeGeneration: runtimeCoreCompatDetails.generation,
86
+ loaderGeneration: maybeloaderCompatDetailsForRuntime?.generation,
87
+ minSupportedGeneration: loaderSupportRequirements.minSupportedGeneration,
88
+ isGenerationCompatible: layerCheckResult.isGenerationCompatible,
89
+ unsupportedFeatures: layerCheckResult.unsupportedFeatures,
90
+ }),
91
+ });
92
+ disposeFn(error);
93
+ throw error;
94
+ }
95
+ }
96
+ /**
97
+ * Validates that the DataStore layer is compatible with this Runtime.
98
+ * @internal
99
+ */
100
+ export function validateDatastoreCompatibility(maybeDataStoreCompatDetails, disposeFn) {
101
+ const layerCheckResult = checkLayerCompatibility(dataStoreSupportRequirements, maybeDataStoreCompatDetails);
102
+ if (!layerCheckResult.isCompatible) {
103
+ const error = new UsageError("Runtime is not compatible with DataStore", {
104
+ errorDetails: JSON.stringify({
105
+ runtimeVersion: runtimeCoreCompatDetails.pkgVersion,
106
+ dataStoreVersion: maybeDataStoreCompatDetails?.pkgVersion,
107
+ runtimeGeneration: runtimeCoreCompatDetails.generation,
108
+ dataStoreGeneration: maybeDataStoreCompatDetails?.generation,
109
+ minSupportedGeneration: dataStoreSupportRequirements.minSupportedGeneration,
110
+ isGenerationCompatible: layerCheckResult.isGenerationCompatible,
111
+ unsupportedFeatures: layerCheckResult.unsupportedFeatures,
112
+ }),
113
+ });
114
+ disposeFn();
115
+ throw error;
116
+ }
117
+ }
118
+ //# sourceMappingURL=runtimeLayerCompatState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtimeLayerCompatState.js","sourceRoot":"","sources":["../src/runtimeLayerCompatState.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,uBAAuB,GAGvB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAEtE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACvC;;OAEG;IACH,UAAU;IACV;;OAEG;IACH,UAAU,EAAE,CAAC;CACb,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAwB;IACjE,GAAG,wBAAwB;IAC3B;;OAEG;IACH,iBAAiB,EAAE,IAAI,GAAG,EAAU;CACpC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAoC;IACzE;;;OAGG;IACH,sBAAsB,EAAE,CAAC;IACzB;;OAEG;IACH,gBAAgB,EAAE,EAAE;CACpB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAwB;IACpE,GAAG,wBAAwB;IAC3B;;OAEG;IACH,iBAAiB,EAAE,IAAI,GAAG,EAAU;CACpC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAoC;IAC5E;;;OAGG;IACH,sBAAsB,EAAE,CAAC;IACzB;;OAEG;IACH,gBAAgB,EAAE,EAAE;CACpB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAC1C,kCAAmE,EACnE,SAAoD;IAEpD,MAAM,gBAAgB,GAAG,uBAAuB,CAC/C,yBAAyB,EACzB,kCAAkC,CAClC,CAAC;IACF,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,uCAAuC,EAAE;YACrE,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC5B,cAAc,EAAE,wBAAwB,CAAC,UAAU;gBACnD,aAAa,EAAE,kCAAkC,EAAE,UAAU;gBAC7D,iBAAiB,EAAE,wBAAwB,CAAC,UAAU;gBACtD,gBAAgB,EAAE,kCAAkC,EAAE,UAAU;gBAChE,sBAAsB,EAAE,yBAAyB,CAAC,sBAAsB;gBACxE,sBAAsB,EAAE,gBAAgB,CAAC,sBAAsB;gBAC/D,mBAAmB,EAAE,gBAAgB,CAAC,mBAAmB;aACzD,CAAC;SACF,CAAC,CAAC;QACH,SAAS,CAAC,KAAK,CAAC,CAAC;QACjB,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAC7C,2BAA4D,EAC5D,SAAqB;IAErB,MAAM,gBAAgB,GAAG,uBAAuB,CAC/C,4BAA4B,EAC5B,2BAA2B,CAC3B,CAAC;IACF,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,0CAA0C,EAAE;YACxE,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC5B,cAAc,EAAE,wBAAwB,CAAC,UAAU;gBACnD,gBAAgB,EAAE,2BAA2B,EAAE,UAAU;gBACzD,iBAAiB,EAAE,wBAAwB,CAAC,UAAU;gBACtD,mBAAmB,EAAE,2BAA2B,EAAE,UAAU;gBAC5D,sBAAsB,EAAE,4BAA4B,CAAC,sBAAsB;gBAC3E,sBAAsB,EAAE,gBAAgB,CAAC,sBAAsB;gBAC/D,mBAAmB,EAAE,gBAAgB,CAAC,mBAAmB;aACzD,CAAC;SACF,CAAC,CAAC;QACH,SAAS,EAAE,CAAC;QACZ,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\tcheckLayerCompatibility,\n\ttype ILayerCompatDetails,\n\ttype ILayerCompatSupportRequirements,\n} from \"@fluid-internal/client-utils\";\nimport type { ICriticalContainerError } from \"@fluidframework/container-definitions\";\nimport { UsageError } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { pkgVersion } from \"./packageVersion.js\";\n\n/**\n * The core compatibility details of the Runtime layer that is the same across all layer boundaries.\n * @internal\n */\nexport const runtimeCoreCompatDetails = {\n\t/**\n\t * The package version of the Runtime layer.\n\t */\n\tpkgVersion,\n\t/**\n\t * The current generation of the Runtime layer.\n\t */\n\tgeneration: 1,\n};\n\n/**\n * Runtime's compatibility details that is exposed to the Loader layer.\n * @internal\n */\nexport const runtimeCompatDetailsForLoader: ILayerCompatDetails = {\n\t...runtimeCoreCompatDetails,\n\t/**\n\t * The features supported by the Runtime layer across the Runtime / Loader boundary.\n\t */\n\tsupportedFeatures: new Set<string>(),\n};\n\n/**\n * The requirements that the Loader layer must meet to be compatible with this Runtime.\n * @internal\n */\nexport const loaderSupportRequirements: ILayerCompatSupportRequirements = {\n\t/**\n\t * Minimum generation that Loader must be at to be compatible with Runtime. Note that 0 is used here so\n\t * that Loader layers before the introduction of the layer compatibility enforcement are compatible.\n\t */\n\tminSupportedGeneration: 0,\n\t/**\n\t * The features that the Loader must support to be compatible with Runtime.\n\t */\n\trequiredFeatures: [],\n};\n\n/**\n * Runtime's compatibility details that is exposed to the DataStore layer.\n * @internal\n */\nexport const runtimeCompatDetailsForDataStore: ILayerCompatDetails = {\n\t...runtimeCoreCompatDetails,\n\t/**\n\t * The features supported by the Runtime layer across the Runtime / Loader boundary.\n\t */\n\tsupportedFeatures: new Set<string>(),\n};\n\n/**\n * The requirements that the DataStore layer must meet to be compatible with this Runtime.\n * @internal\n */\nexport const dataStoreSupportRequirements: ILayerCompatSupportRequirements = {\n\t/**\n\t * Minimum generation that DataStore must be at to be compatible with Runtime. Note that 0 is used here so\n\t * that DataStore layers before the introduction of the layer compatibility enforcement are compatible.\n\t */\n\tminSupportedGeneration: 0,\n\t/**\n\t * The features that the DataStore must support to be compatible with Runtime.\n\t */\n\trequiredFeatures: [],\n};\n\n/**\n * Validates that the Loader layer is compatible with this Runtime.\n * @internal\n */\nexport function validateLoaderCompatibility(\n\tmaybeloaderCompatDetailsForRuntime: ILayerCompatDetails | undefined,\n\tdisposeFn: (error?: ICriticalContainerError) => void,\n): void {\n\tconst layerCheckResult = checkLayerCompatibility(\n\t\tloaderSupportRequirements,\n\t\tmaybeloaderCompatDetailsForRuntime,\n\t);\n\tif (!layerCheckResult.isCompatible) {\n\t\tconst error = new UsageError(\"Runtime is not compatible with Loader\", {\n\t\t\terrorDetails: JSON.stringify({\n\t\t\t\truntimeVersion: runtimeCoreCompatDetails.pkgVersion,\n\t\t\t\tloaderVersion: maybeloaderCompatDetailsForRuntime?.pkgVersion,\n\t\t\t\truntimeGeneration: runtimeCoreCompatDetails.generation,\n\t\t\t\tloaderGeneration: maybeloaderCompatDetailsForRuntime?.generation,\n\t\t\t\tminSupportedGeneration: loaderSupportRequirements.minSupportedGeneration,\n\t\t\t\tisGenerationCompatible: layerCheckResult.isGenerationCompatible,\n\t\t\t\tunsupportedFeatures: layerCheckResult.unsupportedFeatures,\n\t\t\t}),\n\t\t});\n\t\tdisposeFn(error);\n\t\tthrow error;\n\t}\n}\n\n/**\n * Validates that the DataStore layer is compatible with this Runtime.\n * @internal\n */\nexport function validateDatastoreCompatibility(\n\tmaybeDataStoreCompatDetails: ILayerCompatDetails | undefined,\n\tdisposeFn: () => void,\n): void {\n\tconst layerCheckResult = checkLayerCompatibility(\n\t\tdataStoreSupportRequirements,\n\t\tmaybeDataStoreCompatDetails,\n\t);\n\tif (!layerCheckResult.isCompatible) {\n\t\tconst error = new UsageError(\"Runtime is not compatible with DataStore\", {\n\t\t\terrorDetails: JSON.stringify({\n\t\t\t\truntimeVersion: runtimeCoreCompatDetails.pkgVersion,\n\t\t\t\tdataStoreVersion: maybeDataStoreCompatDetails?.pkgVersion,\n\t\t\t\truntimeGeneration: runtimeCoreCompatDetails.generation,\n\t\t\t\tdataStoreGeneration: maybeDataStoreCompatDetails?.generation,\n\t\t\t\tminSupportedGeneration: dataStoreSupportRequirements.minSupportedGeneration,\n\t\t\t\tisGenerationCompatible: layerCheckResult.isGenerationCompatible,\n\t\t\t\tunsupportedFeatures: layerCheckResult.unsupportedFeatures,\n\t\t\t}),\n\t\t});\n\t\tdisposeFn();\n\t\tthrow error;\n\t}\n}\n"]}
@@ -0,0 +1,33 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import type { ISignalEnvelope } from "@fluidframework/core-interfaces/internal";
6
+ import type { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils/internal";
7
+ export declare class SignalTelemetryManager {
8
+ private readonly signalTracking;
9
+ /**
10
+ * Identifier to track broadcast signals being submitted in order to
11
+ * allow collection of data around the roundtrip of signal messages.
12
+ */
13
+ private broadcastSignalSequenceNumber;
14
+ /**
15
+ * Resets the signal tracking state in the {@link SignalTelemetryManager}.
16
+ */
17
+ resetTracking(): void;
18
+ /**
19
+ * Perform telemetry-related processing of incoming signals.
20
+ * @param envelope - The signal envelope to process.
21
+ * @param logger - The telemetry logger to use for emitting telemetry events.
22
+ * @param consecutiveReconnects - The number of consecutive reconnects that have occurred. Only used for logging.
23
+ */
24
+ trackReceivedSignal(envelope: ISignalEnvelope, logger: ITelemetryLoggerExt, consecutiveReconnects: number): void;
25
+ /**
26
+ * Updates tracking state for broadcast signals based on the provided signal envelope, and updates the
27
+ * envelope with additional information that the signal needs to have stamped on it.
28
+ * @remarks Do not call this for non-broadcast signals.
29
+ * @param envelope - The signal envelope to process.
30
+ */
31
+ applyTrackingToBroadcastSignalEnvelope(envelope: ISignalEnvelope): void;
32
+ }
33
+ //# sourceMappingURL=signalTelemetryProcessing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signalTelemetryProcessing.d.ts","sourceRoot":"","sources":["../src/signalTelemetryProcessing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,KAAK,EACX,mBAAmB,EAEnB,MAAM,0CAA0C,CAAC;AAsDlD,qBAAa,sBAAsB;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAS7B;IAEF;;;OAGG;IACH,OAAO,CAAC,6BAA6B,CAAa;IAElD;;OAEG;IACI,aAAa,IAAI,IAAI;IAW5B;;;;;OAKG;IACI,mBAAmB,CACzB,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,mBAAmB,EAC3B,qBAAqB,EAAE,MAAM,GAC3B,IAAI;IA2FP;;;;;OAKG;IACI,sCAAsC,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;CA8B9E"}
@@ -0,0 +1,145 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ const defaultTelemetrySignalSampleCount = 100;
6
+ export class SignalTelemetryManager {
7
+ constructor() {
8
+ this.signalTracking = {
9
+ totalSignalsSentInLatencyWindow: 0,
10
+ signalsLost: 0,
11
+ signalsOutOfOrder: 0,
12
+ signalsSentSinceLastLatencyMeasurement: 0,
13
+ signalTimestamp: 0,
14
+ roundTripSignalSequenceNumber: undefined,
15
+ trackingSignalSequenceNumber: undefined,
16
+ minimumTrackingSignalSequenceNumber: undefined,
17
+ };
18
+ /**
19
+ * Identifier to track broadcast signals being submitted in order to
20
+ * allow collection of data around the roundtrip of signal messages.
21
+ */
22
+ this.broadcastSignalSequenceNumber = 0;
23
+ }
24
+ /**
25
+ * Resets the signal tracking state in the {@link SignalTelemetryManager}.
26
+ */
27
+ resetTracking() {
28
+ this.signalTracking.signalsLost = 0;
29
+ this.signalTracking.signalsOutOfOrder = 0;
30
+ this.signalTracking.signalTimestamp = 0;
31
+ this.signalTracking.signalsSentSinceLastLatencyMeasurement = 0;
32
+ this.signalTracking.totalSignalsSentInLatencyWindow = 0;
33
+ this.signalTracking.roundTripSignalSequenceNumber = undefined;
34
+ this.signalTracking.trackingSignalSequenceNumber = undefined;
35
+ this.signalTracking.minimumTrackingSignalSequenceNumber = undefined;
36
+ }
37
+ /**
38
+ * Perform telemetry-related processing of incoming signals.
39
+ * @param envelope - The signal envelope to process.
40
+ * @param logger - The telemetry logger to use for emitting telemetry events.
41
+ * @param consecutiveReconnects - The number of consecutive reconnects that have occurred. Only used for logging.
42
+ */
43
+ trackReceivedSignal(envelope, logger, consecutiveReconnects) {
44
+ const { clientBroadcastSignalSequenceNumber, contents: envelopeContents, address: envelopeAddress, } = envelope;
45
+ if (clientBroadcastSignalSequenceNumber === undefined) {
46
+ return undefined;
47
+ }
48
+ // If no tracking window has been set, nothing to do
49
+ if (this.signalTracking.trackingSignalSequenceNumber === undefined ||
50
+ this.signalTracking.minimumTrackingSignalSequenceNumber === undefined) {
51
+ return undefined;
52
+ }
53
+ if (clientBroadcastSignalSequenceNumber >= this.signalTracking.trackingSignalSequenceNumber) {
54
+ // Calculate the number of signals lost and log the event.
55
+ const signalsLost = clientBroadcastSignalSequenceNumber - this.signalTracking.trackingSignalSequenceNumber;
56
+ if (signalsLost > 0) {
57
+ this.signalTracking.signalsLost += signalsLost;
58
+ logger.sendErrorEvent({
59
+ eventName: "SignalLost",
60
+ details: {
61
+ signalsLost, // Number of lost signals detected.
62
+ expectedSequenceNumber: this.signalTracking.trackingSignalSequenceNumber, // The next expected signal sequence number.
63
+ clientBroadcastSignalSequenceNumber, // Actual signal sequence number received.
64
+ },
65
+ });
66
+ }
67
+ // Update the tracking signal sequence number to the next expected signal in the sequence.
68
+ this.signalTracking.trackingSignalSequenceNumber =
69
+ clientBroadcastSignalSequenceNumber + 1;
70
+ }
71
+ else if (
72
+ // Check if this is a signal in range of interest.
73
+ clientBroadcastSignalSequenceNumber >=
74
+ this.signalTracking.minimumTrackingSignalSequenceNumber) {
75
+ this.signalTracking.signalsOutOfOrder++;
76
+ const details = {
77
+ expectedSequenceNumber: this.signalTracking.trackingSignalSequenceNumber, // The next expected signal sequence number.
78
+ clientBroadcastSignalSequenceNumber, // Sequence number of the out of order signal.
79
+ };
80
+ // Only log `contents.type` when address is for container to avoid chance that contents type is customer data.
81
+ if (envelopeAddress === undefined) {
82
+ details.contentsType = envelopeContents.type; // Type of signal that was received out of order.
83
+ }
84
+ logger.sendTelemetryEvent({
85
+ eventName: "SignalOutOfOrder",
86
+ details,
87
+ });
88
+ }
89
+ if (this.signalTracking.roundTripSignalSequenceNumber !== undefined &&
90
+ clientBroadcastSignalSequenceNumber >= this.signalTracking.roundTripSignalSequenceNumber) {
91
+ if (clientBroadcastSignalSequenceNumber ===
92
+ this.signalTracking.roundTripSignalSequenceNumber) {
93
+ // Latency tracked signal has been received.
94
+ // We now emit telemetry with the roundtrip duration of the tracked signal.
95
+ // The telemetry event also includes metrics for broadcast signals (sent, lost, and out of order),
96
+ // and these metrics are reset after emitting the event.
97
+ const duration = Date.now() - this.signalTracking.signalTimestamp;
98
+ logger.sendPerformanceEvent({
99
+ eventName: "SignalLatency",
100
+ details: {
101
+ duration, // Roundtrip duration of the tracked signal in milliseconds.
102
+ sent: this.signalTracking.totalSignalsSentInLatencyWindow, // Signals sent since the last logged SignalLatency event.
103
+ lost: this.signalTracking.signalsLost, // Signals lost since the last logged SignalLatency event.
104
+ outOfOrder: this.signalTracking.signalsOutOfOrder, // Out of order signals since the last logged SignalLatency event.
105
+ reconnectCount: consecutiveReconnects, // Container reconnect count.
106
+ },
107
+ });
108
+ this.signalTracking.signalsLost = 0;
109
+ this.signalTracking.signalsOutOfOrder = 0;
110
+ this.signalTracking.signalTimestamp = 0;
111
+ this.signalTracking.totalSignalsSentInLatencyWindow = 0;
112
+ }
113
+ this.signalTracking.roundTripSignalSequenceNumber = undefined;
114
+ }
115
+ }
116
+ /**
117
+ * Updates tracking state for broadcast signals based on the provided signal envelope, and updates the
118
+ * envelope with additional information that the signal needs to have stamped on it.
119
+ * @remarks Do not call this for non-broadcast signals.
120
+ * @param envelope - The signal envelope to process.
121
+ */
122
+ applyTrackingToBroadcastSignalEnvelope(envelope) {
123
+ const broadcastSignalSequenceNumber = ++this.broadcastSignalSequenceNumber;
124
+ // Stamp with the broadcast signal sequence number.
125
+ envelope.clientBroadcastSignalSequenceNumber = broadcastSignalSequenceNumber;
126
+ this.signalTracking.signalsSentSinceLastLatencyMeasurement++;
127
+ // If we don't have a signal monitoring window yet,
128
+ // initialize tracking to expect the next signal sent by the connected client.
129
+ if (this.signalTracking.minimumTrackingSignalSequenceNumber === undefined ||
130
+ this.signalTracking.trackingSignalSequenceNumber === undefined) {
131
+ this.signalTracking.minimumTrackingSignalSequenceNumber = broadcastSignalSequenceNumber;
132
+ this.signalTracking.trackingSignalSequenceNumber = broadcastSignalSequenceNumber;
133
+ }
134
+ // Start tracking roundtrip for a new signal only if we are not tracking one already (and sampling logic is met)
135
+ if (this.signalTracking.roundTripSignalSequenceNumber === undefined &&
136
+ broadcastSignalSequenceNumber % defaultTelemetrySignalSampleCount === 1) {
137
+ this.signalTracking.signalTimestamp = Date.now();
138
+ this.signalTracking.roundTripSignalSequenceNumber = broadcastSignalSequenceNumber;
139
+ this.signalTracking.totalSignalsSentInLatencyWindow +=
140
+ this.signalTracking.signalsSentSinceLastLatencyMeasurement;
141
+ this.signalTracking.signalsSentSinceLastLatencyMeasurement = 0;
142
+ }
143
+ }
144
+ }
145
+ //# sourceMappingURL=signalTelemetryProcessing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signalTelemetryProcessing.js","sourceRoot":"","sources":["../src/signalTelemetryProcessing.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 type { ISignalEnvelope } from \"@fluidframework/core-interfaces/internal\";\nimport type {\n\tITelemetryLoggerExt,\n\tTelemetryEventPropertyTypeExt,\n} from \"@fluidframework/telemetry-utils/internal\";\n\nconst defaultTelemetrySignalSampleCount = 100;\n\n/**\n * Set of stats/values used to keep track of telemetry related to signals.\n */\ninterface ISignalTelemetryTracking {\n\t/**\n\t * Accumulates the total number of broadcast signals sent during the current signal latency measurement window.\n\t * This value represents the total number of signals sent since the latency measurement began and is used\n\t * logged in telemetry when the latency measurement completes.\n\t */\n\ttotalSignalsSentInLatencyWindow: number;\n\n\t/**\n\t * Counts the number of broadcast signals sent since the last latency measurement was initiated.\n\t * This counter increments with each broadcast signal sent. When a new latency measurement starts,\n\t * this counter is added to `totalSignalsSentInLatencyWindow` and then reset to zero.\n\t */\n\tsignalsSentSinceLastLatencyMeasurement: number;\n\n\t/**\n\t * Number of signals that were expected but not received.\n\t */\n\tsignalsLost: number;\n\n\t/**\n\t * Number of signals received out of order/non-sequentially.\n\t */\n\tsignalsOutOfOrder: number;\n\n\t/**\n\t * Timestamp before submitting the signal we will trace.\n\t */\n\tsignalTimestamp: number;\n\n\t/**\n\t * Signal we will trace for roundtrip latency.\n\t */\n\troundTripSignalSequenceNumber: number | undefined;\n\n\t/**\n\t * Next expected signal sequence number to be received.\n\t */\n\ttrackingSignalSequenceNumber: number | undefined;\n\n\t/**\n\t * Inclusive lower bound of signal monitoring window.\n\t * Used by the logic that checks if signals are received out of order.\n\t */\n\tminimumTrackingSignalSequenceNumber: number | undefined;\n}\n\nexport class SignalTelemetryManager {\n\tprivate readonly signalTracking: ISignalTelemetryTracking = {\n\t\ttotalSignalsSentInLatencyWindow: 0,\n\t\tsignalsLost: 0,\n\t\tsignalsOutOfOrder: 0,\n\t\tsignalsSentSinceLastLatencyMeasurement: 0,\n\t\tsignalTimestamp: 0,\n\t\troundTripSignalSequenceNumber: undefined,\n\t\ttrackingSignalSequenceNumber: undefined,\n\t\tminimumTrackingSignalSequenceNumber: undefined,\n\t};\n\n\t/**\n\t * Identifier to track broadcast signals being submitted in order to\n\t * allow collection of data around the roundtrip of signal messages.\n\t */\n\tprivate broadcastSignalSequenceNumber: number = 0;\n\n\t/**\n\t * Resets the signal tracking state in the {@link SignalTelemetryManager}.\n\t */\n\tpublic resetTracking(): void {\n\t\tthis.signalTracking.signalsLost = 0;\n\t\tthis.signalTracking.signalsOutOfOrder = 0;\n\t\tthis.signalTracking.signalTimestamp = 0;\n\t\tthis.signalTracking.signalsSentSinceLastLatencyMeasurement = 0;\n\t\tthis.signalTracking.totalSignalsSentInLatencyWindow = 0;\n\t\tthis.signalTracking.roundTripSignalSequenceNumber = undefined;\n\t\tthis.signalTracking.trackingSignalSequenceNumber = undefined;\n\t\tthis.signalTracking.minimumTrackingSignalSequenceNumber = undefined;\n\t}\n\n\t/**\n\t * Perform telemetry-related processing of incoming signals.\n\t * @param envelope - The signal envelope to process.\n\t * @param logger - The telemetry logger to use for emitting telemetry events.\n\t * @param consecutiveReconnects - The number of consecutive reconnects that have occurred. Only used for logging.\n\t */\n\tpublic trackReceivedSignal(\n\t\tenvelope: ISignalEnvelope,\n\t\tlogger: ITelemetryLoggerExt,\n\t\tconsecutiveReconnects: number,\n\t): void {\n\t\tconst {\n\t\t\tclientBroadcastSignalSequenceNumber,\n\t\t\tcontents: envelopeContents,\n\t\t\taddress: envelopeAddress,\n\t\t} = envelope;\n\n\t\tif (clientBroadcastSignalSequenceNumber === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// If no tracking window has been set, nothing to do\n\t\tif (\n\t\t\tthis.signalTracking.trackingSignalSequenceNumber === undefined ||\n\t\t\tthis.signalTracking.minimumTrackingSignalSequenceNumber === undefined\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (\n\t\t\tclientBroadcastSignalSequenceNumber >= this.signalTracking.trackingSignalSequenceNumber\n\t\t) {\n\t\t\t// Calculate the number of signals lost and log the event.\n\t\t\tconst signalsLost =\n\t\t\t\tclientBroadcastSignalSequenceNumber - this.signalTracking.trackingSignalSequenceNumber;\n\t\t\tif (signalsLost > 0) {\n\t\t\t\tthis.signalTracking.signalsLost += signalsLost;\n\t\t\t\tlogger.sendErrorEvent({\n\t\t\t\t\teventName: \"SignalLost\",\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tsignalsLost, // Number of lost signals detected.\n\t\t\t\t\t\texpectedSequenceNumber: this.signalTracking.trackingSignalSequenceNumber, // The next expected signal sequence number.\n\t\t\t\t\t\tclientBroadcastSignalSequenceNumber, // Actual signal sequence number received.\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Update the tracking signal sequence number to the next expected signal in the sequence.\n\t\t\tthis.signalTracking.trackingSignalSequenceNumber =\n\t\t\t\tclientBroadcastSignalSequenceNumber + 1;\n\t\t} else if (\n\t\t\t// Check if this is a signal in range of interest.\n\t\t\tclientBroadcastSignalSequenceNumber >=\n\t\t\tthis.signalTracking.minimumTrackingSignalSequenceNumber\n\t\t) {\n\t\t\tthis.signalTracking.signalsOutOfOrder++;\n\t\t\tconst details: TelemetryEventPropertyTypeExt = {\n\t\t\t\texpectedSequenceNumber: this.signalTracking.trackingSignalSequenceNumber, // The next expected signal sequence number.\n\t\t\t\tclientBroadcastSignalSequenceNumber, // Sequence number of the out of order signal.\n\t\t\t};\n\t\t\t// Only log `contents.type` when address is for container to avoid chance that contents type is customer data.\n\t\t\tif (envelopeAddress === undefined) {\n\t\t\t\tdetails.contentsType = envelopeContents.type; // Type of signal that was received out of order.\n\t\t\t}\n\t\t\tlogger.sendTelemetryEvent({\n\t\t\t\teventName: \"SignalOutOfOrder\",\n\t\t\t\tdetails,\n\t\t\t});\n\t\t}\n\n\t\tif (\n\t\t\tthis.signalTracking.roundTripSignalSequenceNumber !== undefined &&\n\t\t\tclientBroadcastSignalSequenceNumber >= this.signalTracking.roundTripSignalSequenceNumber\n\t\t) {\n\t\t\tif (\n\t\t\t\tclientBroadcastSignalSequenceNumber ===\n\t\t\t\tthis.signalTracking.roundTripSignalSequenceNumber\n\t\t\t) {\n\t\t\t\t// Latency tracked signal has been received.\n\t\t\t\t// We now emit telemetry with the roundtrip duration of the tracked signal.\n\t\t\t\t// The telemetry event also includes metrics for broadcast signals (sent, lost, and out of order),\n\t\t\t\t// and these metrics are reset after emitting the event.\n\t\t\t\tconst duration = Date.now() - this.signalTracking.signalTimestamp;\n\t\t\t\tlogger.sendPerformanceEvent({\n\t\t\t\t\teventName: \"SignalLatency\",\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tduration, // Roundtrip duration of the tracked signal in milliseconds.\n\t\t\t\t\t\tsent: this.signalTracking.totalSignalsSentInLatencyWindow, // Signals sent since the last logged SignalLatency event.\n\t\t\t\t\t\tlost: this.signalTracking.signalsLost, // Signals lost since the last logged SignalLatency event.\n\t\t\t\t\t\toutOfOrder: this.signalTracking.signalsOutOfOrder, // Out of order signals since the last logged SignalLatency event.\n\t\t\t\t\t\treconnectCount: consecutiveReconnects, // Container reconnect count.\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tthis.signalTracking.signalsLost = 0;\n\t\t\t\tthis.signalTracking.signalsOutOfOrder = 0;\n\t\t\t\tthis.signalTracking.signalTimestamp = 0;\n\t\t\t\tthis.signalTracking.totalSignalsSentInLatencyWindow = 0;\n\t\t\t}\n\t\t\tthis.signalTracking.roundTripSignalSequenceNumber = undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Updates tracking state for broadcast signals based on the provided signal envelope, and updates the\n\t * envelope with additional information that the signal needs to have stamped on it.\n\t * @remarks Do not call this for non-broadcast signals.\n\t * @param envelope - The signal envelope to process.\n\t */\n\tpublic applyTrackingToBroadcastSignalEnvelope(envelope: ISignalEnvelope): void {\n\t\tconst broadcastSignalSequenceNumber = ++this.broadcastSignalSequenceNumber;\n\n\t\t// Stamp with the broadcast signal sequence number.\n\t\tenvelope.clientBroadcastSignalSequenceNumber = broadcastSignalSequenceNumber;\n\n\t\tthis.signalTracking.signalsSentSinceLastLatencyMeasurement++;\n\n\t\t// If we don't have a signal monitoring window yet,\n\t\t// initialize tracking to expect the next signal sent by the connected client.\n\t\tif (\n\t\t\tthis.signalTracking.minimumTrackingSignalSequenceNumber === undefined ||\n\t\t\tthis.signalTracking.trackingSignalSequenceNumber === undefined\n\t\t) {\n\t\t\tthis.signalTracking.minimumTrackingSignalSequenceNumber = broadcastSignalSequenceNumber;\n\t\t\tthis.signalTracking.trackingSignalSequenceNumber = broadcastSignalSequenceNumber;\n\t\t}\n\n\t\t// Start tracking roundtrip for a new signal only if we are not tracking one already (and sampling logic is met)\n\t\tif (\n\t\t\tthis.signalTracking.roundTripSignalSequenceNumber === undefined &&\n\t\t\tbroadcastSignalSequenceNumber % defaultTelemetrySignalSampleCount === 1\n\t\t) {\n\t\t\tthis.signalTracking.signalTimestamp = Date.now();\n\t\t\tthis.signalTracking.roundTripSignalSequenceNumber = broadcastSignalSequenceNumber;\n\t\t\tthis.signalTracking.totalSignalsSentInLatencyWindow +=\n\t\t\t\tthis.signalTracking.signalsSentSinceLastLatencyMeasurement;\n\t\t\tthis.signalTracking.signalsSentSinceLastLatencyMeasurement = 0;\n\t\t}\n\t}\n}\n"]}
@@ -7,9 +7,7 @@
7
7
  * Please note that for all property types we should use undefined to indicate that particular capability is off.
8
8
  * Using false, or some string value (like "off") will result in clients who do not understand that property failing, whereas
9
9
  * we want them to continue to collaborate alongside clients who support that capability, but such capability is shipping dark for now.
10
- * @legacy
11
- * @alpha
12
- * @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
10
+ * @internal
13
11
  */
14
12
  export type DocumentSchemaValueType = string | string[] | true | number | undefined;
15
13
  /**
@@ -50,9 +48,7 @@ export type IdCompressorMode = "on" | "delayed" | undefined;
50
48
  *
51
49
  * For now we are limiting it to just plain properties, and only really simple types, but that can be changed in the future.
52
50
  *
53
- * @legacy
54
- * @alpha
55
- * @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
51
+ * @internal
56
52
  */
57
53
  export interface IDocumentSchema {
58
54
  version: number;
@@ -65,9 +61,7 @@ export interface IDocumentSchema {
65
61
  * ContainerMessageType.DocumentSchemaChange messages use CAS (Compare-and-swap) semantics, and convey
66
62
  * regSeq of last known schema change (known to a client proposing schema change).
67
63
  * @see ContainerRuntimeDocumentSchemaMessage
68
- * @legacy
69
- * @alpha
70
- * @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
64
+ * @internal
71
65
  */
72
66
  export type IDocumentSchemaChangeMessage = IDocumentSchema;
73
67
  /**
@@ -76,9 +70,7 @@ export type IDocumentSchemaChangeMessage = IDocumentSchema;
76
70
  * WARNING: This type is used to infer IDocumentSchemaCurrent type!
77
71
  * Any changes here (including renaming of properties) are potentially changing document format and should be considered carefully!
78
72
  *
79
- * @legacy
80
- * @alpha
81
- * @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
73
+ * @internal
82
74
  */
83
75
  export interface IDocumentSchemaFeatures {
84
76
  explicitSchemaControl: boolean;
@@ -102,16 +94,12 @@ export interface IDocumentSchemaFeatures {
102
94
  * This must be bumped whenever the format of document schema or protocol for changing the current document schema changes.
103
95
  * Ex: adding a new configuration property (under IDocumentSchema.runtime) does not require changing this version.
104
96
  * Ex: Changing the 'document schema acceptance' mechanism from convert-and-swap to one requiring consensus does require changing this version.
105
- * @legacy
106
- * @alpha
107
- * @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
97
+ * @internal
108
98
  */
109
99
  export declare const currentDocumentVersionSchema = 1;
110
100
  /**
111
101
  * Current document schema.
112
- * @legacy
113
- * @alpha
114
- * @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
102
+ * @internal
115
103
  */
116
104
  export type IDocumentSchemaCurrent = {
117
105
  version: 1;
@@ -183,9 +171,7 @@ export type IDocumentSchemaCurrent = {
183
171
  * Clients can retry, but current implementation is simply - they will not (and will rely on next session / reload to do
184
172
  * recalc and decide if schema needs to be changed or not).
185
173
  *
186
- * @legacy
187
- * @alpha
188
- * @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
174
+ * @internal
189
175
  * @sealed
190
176
  */
191
177
  export declare class DocumentsSchemaController {
@@ -213,16 +199,6 @@ export declare class DocumentsSchemaController {
213
199
  */
214
200
  maybeSendSchemaMessage(): IDocumentSchemaChangeMessage | undefined;
215
201
  private validateSeqNumber;
216
- /**
217
- * Process document schema change message
218
- * Called by ContainerRuntime whenever it sees document schema messages.
219
- * @param content - content of the message
220
- * @param local - whether op is local
221
- * @param sequenceNumber - sequence number of the op
222
- * @returns - true if schema was accepted, otherwise false (rejected due to failed CAS)
223
- * @deprecated It has been replaced by processDocumentSchemaMessages instead.
224
- */
225
- processDocumentSchemaOp(content: IDocumentSchemaChangeMessage, local: boolean, sequenceNumber: number): boolean;
226
202
  /**
227
203
  * Process document schema change messages
228
204
  * Called by ContainerRuntime whenever it sees document schema messages.
@@ -1 +1 @@
1
- {"version":3,"file":"documentSchema.d.ts","sourceRoot":"","sources":["../../src/summary/documentSchema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;;;;;;;GAQG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;AAEpF;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,WAAW,eAAe;IAI/B,OAAO,EAAE,MAAM,CAAC;IAGhB,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACjD;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,4BAA4B,GAAG,eAAe,CAAC;AAE3D;;;;;;;;;GASG;AACH,MAAM,WAAW,uBAAuB;IAIvC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,iBAAiB,EAAE,OAAO,CAAC;IAE3B;;;;;;;;;OASG;IACH,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C;;;;;GAKG;AAEH,MAAM,MAAM,sBAAsB,GAAG;IACpC,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE;SACP,CAAC,IAAI,MAAM,uBAAuB,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,SAAS,OAAO,GAC9E,IAAI,GACJ,uBAAuB,CAAC,CAAC,CAAC;KAC7B,CAAC;CACF,CAAC;AAyOF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,qBAAa,yBAAyB;IAiCpC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAhChC,OAAO,CAAC,qBAAqB,CAAU;IACvC,OAAO,CAAC,MAAM,CAAQ;IAGtB,OAAO,CAAC,cAAc,CAAyB;IAI/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IAGvD,OAAO,CAAC,YAAY,CAAqC;IAOlD,aAAa,EAAE,sBAAsB,CAAC;IAE7C;;;;;;OAMG;gBAEF,QAAQ,EAAE,OAAO,EACjB,sBAAsB,EAAE,MAAM,EAC9B,sBAAsB,EAAE,eAAe,GAAG,SAAS,EACnD,QAAQ,EAAE,uBAAuB,EAChB,cAAc,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,IAAI;IA0EnE,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAsBlF;;;;;OAKG;IACI,sBAAsB,IAAI,4BAA4B,GAAG,SAAS;IAczE,OAAO,CAAC,iBAAiB;IAmBzB;;;;;;;;OAQG;IACI,uBAAuB,CAC7B,OAAO,EAAE,4BAA4B,EACrC,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,MAAM,GACpB,OAAO;IAIV;;;;;;;OAOG;IACI,6BAA6B,CACnC,QAAQ,EAAE,4BAA4B,EAAE,EACxC,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,MAAM,GACpB,OAAO;IAgDH,YAAY,IAAI,IAAI;CAG3B"}
1
+ {"version":3,"file":"documentSchema.d.ts","sourceRoot":"","sources":["../../src/summary/documentSchema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;;;;;GAMG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;AAEpF;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,eAAe;IAI/B,OAAO,EAAE,MAAM,CAAC;IAGhB,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACjD;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,4BAA4B,GAAG,eAAe,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,WAAW,uBAAuB;IAIvC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,iBAAiB,EAAE,OAAO,CAAC;IAE3B;;;;;;;;;OASG;IACH,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C;;;GAGG;AAEH,MAAM,MAAM,sBAAsB,GAAG;IACpC,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE;SACP,CAAC,IAAI,MAAM,uBAAuB,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,SAAS,OAAO,GAC9E,IAAI,GACJ,uBAAuB,CAAC,CAAC,CAAC;KAC7B,CAAC;CACF,CAAC;AAyOF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AACH,qBAAa,yBAAyB;IAiCpC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAhChC,OAAO,CAAC,qBAAqB,CAAU;IACvC,OAAO,CAAC,MAAM,CAAQ;IAGtB,OAAO,CAAC,cAAc,CAAyB;IAI/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IAGvD,OAAO,CAAC,YAAY,CAAqC;IAOlD,aAAa,EAAE,sBAAsB,CAAC;IAE7C;;;;;;OAMG;gBAEF,QAAQ,EAAE,OAAO,EACjB,sBAAsB,EAAE,MAAM,EAC9B,sBAAsB,EAAE,eAAe,GAAG,SAAS,EACnD,QAAQ,EAAE,uBAAuB,EAChB,cAAc,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,IAAI;IA0EnE,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAsBlF;;;;;OAKG;IACI,sBAAsB,IAAI,4BAA4B,GAAG,SAAS;IAczE,OAAO,CAAC,iBAAiB;IAmBzB;;;;;;;OAOG;IACI,6BAA6B,CACnC,QAAQ,EAAE,4BAA4B,EAAE,EACxC,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,MAAM,GACpB,OAAO;IAgDH,YAAY,IAAI,IAAI;CAG3B"}
@@ -10,9 +10,7 @@ import { pkgVersion } from "../packageVersion.js";
10
10
  * This must be bumped whenever the format of document schema or protocol for changing the current document schema changes.
11
11
  * Ex: adding a new configuration property (under IDocumentSchema.runtime) does not require changing this version.
12
12
  * Ex: Changing the 'document schema acceptance' mechanism from convert-and-swap to one requiring consensus does require changing this version.
13
- * @legacy
14
- * @alpha
15
- * @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
13
+ * @internal
16
14
  */
17
15
  export const currentDocumentVersionSchema = 1;
18
16
  class TrueOrUndefined {
@@ -245,9 +243,7 @@ function arrayToProp(arr) {
245
243
  * Clients can retry, but current implementation is simply - they will not (and will rely on next session / reload to do
246
244
  * recalc and decide if schema needs to be changed or not).
247
245
  *
248
- * @legacy
249
- * @alpha
250
- * @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
246
+ * @internal
251
247
  * @sealed
252
248
  */
253
249
  export class DocumentsSchemaController {
@@ -362,18 +358,6 @@ export class DocumentsSchemaController {
362
358
  });
363
359
  }
364
360
  }
365
- /**
366
- * Process document schema change message
367
- * Called by ContainerRuntime whenever it sees document schema messages.
368
- * @param content - content of the message
369
- * @param local - whether op is local
370
- * @param sequenceNumber - sequence number of the op
371
- * @returns - true if schema was accepted, otherwise false (rejected due to failed CAS)
372
- * @deprecated It has been replaced by processDocumentSchemaMessages instead.
373
- */
374
- processDocumentSchemaOp(content, local, sequenceNumber) {
375
- return this.processDocumentSchemaMessages([content], local, sequenceNumber);
376
- }
377
361
  /**
378
362
  * Process document schema change messages
379
363
  * Called by ContainerRuntime whenever it sees document schema messages.