@fluidframework/container-loader 1.4.0-121020 → 2.0.0-dev-rc.1.0.0.225277

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 (335) hide show
  1. package/.eslintrc.js +18 -21
  2. package/.mocharc.js +12 -0
  3. package/CHANGELOG.md +364 -0
  4. package/README.md +152 -56
  5. package/api-extractor-esm.json +4 -0
  6. package/api-extractor-lint.json +4 -0
  7. package/api-extractor.json +2 -2
  8. package/api-report/container-loader.api.md +143 -0
  9. package/dist/{audience.js → audience.cjs} +15 -13
  10. package/dist/audience.cjs.map +1 -0
  11. package/dist/audience.d.ts +4 -6
  12. package/dist/audience.d.ts.map +1 -1
  13. package/dist/catchUpMonitor.cjs +43 -0
  14. package/dist/catchUpMonitor.cjs.map +1 -0
  15. package/dist/catchUpMonitor.d.ts +29 -0
  16. package/dist/catchUpMonitor.d.ts.map +1 -0
  17. package/dist/{connectionManager.js → connectionManager.cjs} +397 -240
  18. package/dist/connectionManager.cjs.map +1 -0
  19. package/dist/connectionManager.d.ts +23 -33
  20. package/dist/connectionManager.d.ts.map +1 -1
  21. package/dist/{connectionState.js → connectionState.cjs} +5 -7
  22. package/dist/connectionState.cjs.map +1 -0
  23. package/dist/connectionState.d.ts +3 -5
  24. package/dist/connectionState.d.ts.map +1 -1
  25. package/dist/connectionStateHandler.cjs +474 -0
  26. package/dist/connectionStateHandler.cjs.map +1 -0
  27. package/dist/connectionStateHandler.d.ts +127 -29
  28. package/dist/connectionStateHandler.d.ts.map +1 -1
  29. package/dist/container-loader-alpha.d.ts +274 -0
  30. package/dist/container-loader-beta.d.ts +75 -0
  31. package/dist/container-loader-public.d.ts +75 -0
  32. package/dist/container-loader-untrimmed.d.ts +331 -0
  33. package/dist/container.cjs +1585 -0
  34. package/dist/container.cjs.map +1 -0
  35. package/dist/container.d.ts +227 -83
  36. package/dist/container.d.ts.map +1 -1
  37. package/dist/containerContext.cjs +74 -0
  38. package/dist/containerContext.cjs.map +1 -0
  39. package/dist/containerContext.d.ts +33 -59
  40. package/dist/containerContext.d.ts.map +1 -1
  41. package/dist/containerStorageAdapter.cjs +234 -0
  42. package/dist/containerStorageAdapter.cjs.map +1 -0
  43. package/dist/containerStorageAdapter.d.ts +48 -23
  44. package/dist/containerStorageAdapter.d.ts.map +1 -1
  45. package/dist/{contracts.js → contracts.cjs} +5 -5
  46. package/dist/contracts.cjs.map +1 -0
  47. package/dist/contracts.d.ts +45 -17
  48. package/dist/contracts.d.ts.map +1 -1
  49. package/dist/debugLogger.cjs +101 -0
  50. package/dist/debugLogger.cjs.map +1 -0
  51. package/dist/debugLogger.d.ts +30 -0
  52. package/dist/debugLogger.d.ts.map +1 -0
  53. package/dist/{deltaManager.js → deltaManager.cjs} +379 -186
  54. package/dist/deltaManager.cjs.map +1 -0
  55. package/dist/deltaManager.d.ts +54 -18
  56. package/dist/deltaManager.d.ts.map +1 -1
  57. package/dist/{deltaQueue.js → deltaQueue.cjs} +29 -28
  58. package/dist/deltaQueue.cjs.map +1 -0
  59. package/dist/deltaQueue.d.ts +3 -4
  60. package/dist/deltaQueue.d.ts.map +1 -1
  61. package/dist/disposal.cjs +25 -0
  62. package/dist/disposal.cjs.map +1 -0
  63. package/dist/disposal.d.ts +13 -0
  64. package/dist/disposal.d.ts.map +1 -0
  65. package/dist/error.cjs +32 -0
  66. package/dist/error.cjs.map +1 -0
  67. package/dist/error.d.ts +23 -0
  68. package/dist/error.d.ts.map +1 -0
  69. package/dist/index.cjs +19 -0
  70. package/dist/index.cjs.map +1 -0
  71. package/dist/index.d.ts +5 -2
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/loader.cjs +148 -0
  74. package/dist/loader.cjs.map +1 -0
  75. package/dist/loader.d.ts +38 -19
  76. package/dist/loader.d.ts.map +1 -1
  77. package/dist/location-redirection-utilities/index.cjs +11 -0
  78. package/dist/location-redirection-utilities/index.cjs.map +1 -0
  79. package/dist/location-redirection-utilities/index.d.ts +6 -0
  80. package/dist/location-redirection-utilities/index.d.ts.map +1 -0
  81. package/dist/location-redirection-utilities/resolveWithLocationRedirection.cjs +53 -0
  82. package/dist/location-redirection-utilities/resolveWithLocationRedirection.cjs.map +1 -0
  83. package/dist/location-redirection-utilities/resolveWithLocationRedirection.d.ts +24 -0
  84. package/dist/location-redirection-utilities/resolveWithLocationRedirection.d.ts.map +1 -0
  85. package/dist/{collabWindowTracker.js → noopHeuristic.cjs} +37 -39
  86. package/dist/noopHeuristic.cjs.map +1 -0
  87. package/dist/noopHeuristic.d.ts +23 -0
  88. package/dist/noopHeuristic.d.ts.map +1 -0
  89. package/dist/{packageVersion.js → packageVersion.cjs} +2 -2
  90. package/dist/packageVersion.cjs.map +1 -0
  91. package/dist/packageVersion.d.ts +1 -1
  92. package/dist/packageVersion.d.ts.map +1 -1
  93. package/dist/protocol.cjs +99 -0
  94. package/dist/protocol.cjs.map +1 -0
  95. package/dist/protocol.d.ts +38 -0
  96. package/dist/protocol.d.ts.map +1 -0
  97. package/dist/{protocolTreeDocumentStorageService.js → protocolTreeDocumentStorageService.cjs} +8 -5
  98. package/dist/protocolTreeDocumentStorageService.cjs.map +1 -0
  99. package/dist/protocolTreeDocumentStorageService.d.ts +8 -4
  100. package/dist/protocolTreeDocumentStorageService.d.ts.map +1 -1
  101. package/dist/quorum.cjs +16 -0
  102. package/dist/quorum.cjs.map +1 -0
  103. package/dist/quorum.d.ts +1 -14
  104. package/dist/quorum.d.ts.map +1 -1
  105. package/dist/{retriableDocumentStorageService.js → retriableDocumentStorageService.cjs} +36 -21
  106. package/dist/retriableDocumentStorageService.cjs.map +1 -0
  107. package/dist/retriableDocumentStorageService.d.ts +7 -5
  108. package/dist/retriableDocumentStorageService.d.ts.map +1 -1
  109. package/dist/tsdoc-metadata.json +11 -0
  110. package/dist/{utils.js → utils.cjs} +52 -14
  111. package/dist/utils.cjs.map +1 -0
  112. package/dist/utils.d.ts +34 -1
  113. package/dist/utils.d.ts.map +1 -1
  114. package/lib/{audience.d.ts → audience.d.mts} +5 -11
  115. package/lib/audience.d.mts.map +1 -0
  116. package/lib/{audience.js → audience.mjs} +15 -17
  117. package/lib/audience.mjs.map +1 -0
  118. package/lib/catchUpMonitor.d.mts +29 -0
  119. package/lib/catchUpMonitor.d.mts.map +1 -0
  120. package/lib/catchUpMonitor.mjs +39 -0
  121. package/lib/catchUpMonitor.mjs.map +1 -0
  122. package/lib/{connectionManager.d.ts → connectionManager.d.mts} +24 -34
  123. package/lib/connectionManager.d.mts.map +1 -0
  124. package/lib/{connectionManager.js → connectionManager.mjs} +378 -218
  125. package/lib/connectionManager.mjs.map +1 -0
  126. package/lib/{connectionState.d.ts → connectionState.d.mts} +4 -6
  127. package/lib/connectionState.d.mts.map +1 -0
  128. package/lib/{connectionState.js → connectionState.mjs} +4 -6
  129. package/lib/connectionState.mjs.map +1 -0
  130. package/lib/connectionStateHandler.d.mts +179 -0
  131. package/lib/connectionStateHandler.d.mts.map +1 -0
  132. package/lib/connectionStateHandler.mjs +469 -0
  133. package/lib/connectionStateHandler.mjs.map +1 -0
  134. package/lib/container-loader-alpha.d.mts +274 -0
  135. package/lib/container-loader-beta.d.mts +75 -0
  136. package/lib/container-loader-public.d.mts +75 -0
  137. package/lib/container-loader-untrimmed.d.mts +331 -0
  138. package/lib/container.d.mts +382 -0
  139. package/lib/container.d.mts.map +1 -0
  140. package/lib/container.mjs +1579 -0
  141. package/lib/container.mjs.map +1 -0
  142. package/lib/containerContext.d.mts +58 -0
  143. package/lib/containerContext.d.mts.map +1 -0
  144. package/lib/containerContext.mjs +70 -0
  145. package/lib/containerContext.mjs.map +1 -0
  146. package/lib/containerStorageAdapter.d.mts +73 -0
  147. package/lib/containerStorageAdapter.d.mts.map +1 -0
  148. package/lib/containerStorageAdapter.mjs +228 -0
  149. package/lib/containerStorageAdapter.mjs.map +1 -0
  150. package/lib/{contracts.d.ts → contracts.d.mts} +46 -18
  151. package/lib/contracts.d.mts.map +1 -0
  152. package/lib/{contracts.js → contracts.mjs} +4 -4
  153. package/lib/contracts.mjs.map +1 -0
  154. package/lib/debugLogger.d.mts +30 -0
  155. package/lib/debugLogger.d.mts.map +1 -0
  156. package/lib/debugLogger.mjs +93 -0
  157. package/lib/debugLogger.mjs.map +1 -0
  158. package/lib/{deltaManager.d.ts → deltaManager.d.mts} +55 -19
  159. package/lib/deltaManager.d.mts.map +1 -0
  160. package/lib/{deltaManager.js → deltaManager.mjs} +361 -165
  161. package/lib/deltaManager.mjs.map +1 -0
  162. package/lib/{deltaQueue.d.ts → deltaQueue.d.mts} +4 -5
  163. package/lib/deltaQueue.d.mts.map +1 -0
  164. package/lib/{deltaQueue.js → deltaQueue.mjs} +25 -24
  165. package/lib/deltaQueue.mjs.map +1 -0
  166. package/lib/disposal.d.mts +13 -0
  167. package/lib/disposal.d.mts.map +1 -0
  168. package/lib/disposal.mjs +21 -0
  169. package/lib/disposal.mjs.map +1 -0
  170. package/lib/error.d.mts +23 -0
  171. package/lib/error.d.mts.map +1 -0
  172. package/lib/error.mjs +28 -0
  173. package/lib/error.mjs.map +1 -0
  174. package/lib/index.d.mts +11 -0
  175. package/lib/index.d.mts.map +1 -0
  176. package/lib/index.mjs +10 -0
  177. package/lib/index.mjs.map +1 -0
  178. package/lib/{loader.d.ts → loader.d.mts} +40 -21
  179. package/lib/loader.d.mts.map +1 -0
  180. package/lib/loader.mjs +143 -0
  181. package/lib/loader.mjs.map +1 -0
  182. package/lib/location-redirection-utilities/index.d.mts +6 -0
  183. package/lib/location-redirection-utilities/index.d.mts.map +1 -0
  184. package/lib/location-redirection-utilities/index.mjs +6 -0
  185. package/lib/location-redirection-utilities/index.mjs.map +1 -0
  186. package/lib/location-redirection-utilities/resolveWithLocationRedirection.d.mts +24 -0
  187. package/lib/location-redirection-utilities/resolveWithLocationRedirection.d.mts.map +1 -0
  188. package/lib/location-redirection-utilities/resolveWithLocationRedirection.mjs +48 -0
  189. package/lib/location-redirection-utilities/resolveWithLocationRedirection.mjs.map +1 -0
  190. package/lib/noopHeuristic.d.mts +23 -0
  191. package/lib/noopHeuristic.d.mts.map +1 -0
  192. package/lib/{collabWindowTracker.js → noopHeuristic.mjs} +33 -35
  193. package/lib/noopHeuristic.mjs.map +1 -0
  194. package/lib/{packageVersion.d.ts → packageVersion.d.mts} +2 -2
  195. package/lib/packageVersion.d.mts.map +1 -0
  196. package/lib/{packageVersion.js → packageVersion.mjs} +2 -2
  197. package/lib/packageVersion.mjs.map +1 -0
  198. package/lib/protocol.d.mts +38 -0
  199. package/lib/protocol.d.mts.map +1 -0
  200. package/lib/protocol.mjs +94 -0
  201. package/lib/protocol.mjs.map +1 -0
  202. package/lib/{protocolTreeDocumentStorageService.d.ts → protocolTreeDocumentStorageService.d.mts} +9 -5
  203. package/lib/protocolTreeDocumentStorageService.d.mts.map +1 -0
  204. package/lib/{protocolTreeDocumentStorageService.js → protocolTreeDocumentStorageService.mjs} +8 -5
  205. package/lib/protocolTreeDocumentStorageService.mjs.map +1 -0
  206. package/lib/quorum.d.mts +4 -0
  207. package/lib/quorum.d.mts.map +1 -0
  208. package/lib/quorum.mjs +12 -0
  209. package/lib/quorum.mjs.map +1 -0
  210. package/lib/{retriableDocumentStorageService.d.ts → retriableDocumentStorageService.d.mts} +8 -6
  211. package/lib/retriableDocumentStorageService.d.mts.map +1 -0
  212. package/lib/{retriableDocumentStorageService.js → retriableDocumentStorageService.mjs} +35 -20
  213. package/lib/retriableDocumentStorageService.mjs.map +1 -0
  214. package/lib/utils.d.mts +67 -0
  215. package/lib/utils.d.mts.map +1 -0
  216. package/lib/{utils.js → utils.mjs} +47 -11
  217. package/lib/utils.mjs.map +1 -0
  218. package/package.json +189 -69
  219. package/prettier.config.cjs +8 -0
  220. package/src/audience.ts +59 -49
  221. package/src/catchUpMonitor.ts +61 -0
  222. package/src/connectionManager.ts +1154 -910
  223. package/src/connectionState.ts +22 -25
  224. package/src/connectionStateHandler.ts +689 -319
  225. package/src/container.ts +2476 -1792
  226. package/src/containerContext.ts +98 -330
  227. package/src/containerStorageAdapter.ts +301 -105
  228. package/src/contracts.ts +184 -146
  229. package/src/debugLogger.ts +123 -0
  230. package/src/deltaManager.ts +1165 -900
  231. package/src/deltaQueue.ts +156 -152
  232. package/src/disposal.ts +25 -0
  233. package/src/error.ts +44 -0
  234. package/src/index.ts +14 -15
  235. package/src/loader.ts +356 -427
  236. package/src/location-redirection-utilities/index.ts +9 -0
  237. package/src/location-redirection-utilities/resolveWithLocationRedirection.ts +61 -0
  238. package/src/noopHeuristic.ts +107 -0
  239. package/src/packageVersion.ts +1 -1
  240. package/src/protocol.ts +150 -0
  241. package/src/protocolTreeDocumentStorageService.ts +35 -35
  242. package/src/quorum.ts +11 -50
  243. package/src/retriableDocumentStorageService.ts +135 -95
  244. package/src/utils.ts +159 -86
  245. package/tsc-multi.test.json +4 -0
  246. package/tsconfig.json +10 -12
  247. package/dist/audience.js.map +0 -1
  248. package/dist/collabWindowTracker.d.ts +0 -19
  249. package/dist/collabWindowTracker.d.ts.map +0 -1
  250. package/dist/collabWindowTracker.js.map +0 -1
  251. package/dist/connectionManager.js.map +0 -1
  252. package/dist/connectionState.js.map +0 -1
  253. package/dist/connectionStateHandler.js +0 -280
  254. package/dist/connectionStateHandler.js.map +0 -1
  255. package/dist/container.js +0 -1284
  256. package/dist/container.js.map +0 -1
  257. package/dist/containerContext.js +0 -217
  258. package/dist/containerContext.js.map +0 -1
  259. package/dist/containerStorageAdapter.js +0 -104
  260. package/dist/containerStorageAdapter.js.map +0 -1
  261. package/dist/contracts.js.map +0 -1
  262. package/dist/deltaManager.js.map +0 -1
  263. package/dist/deltaManagerProxy.d.ts +0 -54
  264. package/dist/deltaManagerProxy.d.ts.map +0 -1
  265. package/dist/deltaManagerProxy.js +0 -115
  266. package/dist/deltaManagerProxy.js.map +0 -1
  267. package/dist/deltaQueue.js.map +0 -1
  268. package/dist/index.js +0 -16
  269. package/dist/index.js.map +0 -1
  270. package/dist/loader.js +0 -241
  271. package/dist/loader.js.map +0 -1
  272. package/dist/packageVersion.js.map +0 -1
  273. package/dist/protocolTreeDocumentStorageService.js.map +0 -1
  274. package/dist/quorum.js +0 -44
  275. package/dist/quorum.js.map +0 -1
  276. package/dist/retriableDocumentStorageService.js.map +0 -1
  277. package/dist/utils.js.map +0 -1
  278. package/lib/audience.d.ts.map +0 -1
  279. package/lib/audience.js.map +0 -1
  280. package/lib/collabWindowTracker.d.ts +0 -19
  281. package/lib/collabWindowTracker.d.ts.map +0 -1
  282. package/lib/collabWindowTracker.js.map +0 -1
  283. package/lib/connectionManager.d.ts.map +0 -1
  284. package/lib/connectionManager.js.map +0 -1
  285. package/lib/connectionState.d.ts.map +0 -1
  286. package/lib/connectionState.js.map +0 -1
  287. package/lib/connectionStateHandler.d.ts +0 -81
  288. package/lib/connectionStateHandler.d.ts.map +0 -1
  289. package/lib/connectionStateHandler.js +0 -276
  290. package/lib/connectionStateHandler.js.map +0 -1
  291. package/lib/container.d.ts +0 -238
  292. package/lib/container.d.ts.map +0 -1
  293. package/lib/container.js +0 -1276
  294. package/lib/container.js.map +0 -1
  295. package/lib/containerContext.d.ts +0 -84
  296. package/lib/containerContext.d.ts.map +0 -1
  297. package/lib/containerContext.js +0 -213
  298. package/lib/containerContext.js.map +0 -1
  299. package/lib/containerStorageAdapter.d.ts +0 -48
  300. package/lib/containerStorageAdapter.d.ts.map +0 -1
  301. package/lib/containerStorageAdapter.js +0 -99
  302. package/lib/containerStorageAdapter.js.map +0 -1
  303. package/lib/contracts.d.ts.map +0 -1
  304. package/lib/contracts.js.map +0 -1
  305. package/lib/deltaManager.d.ts.map +0 -1
  306. package/lib/deltaManager.js.map +0 -1
  307. package/lib/deltaManagerProxy.d.ts +0 -54
  308. package/lib/deltaManagerProxy.d.ts.map +0 -1
  309. package/lib/deltaManagerProxy.js +0 -110
  310. package/lib/deltaManagerProxy.js.map +0 -1
  311. package/lib/deltaQueue.d.ts.map +0 -1
  312. package/lib/deltaQueue.js.map +0 -1
  313. package/lib/index.d.ts +0 -8
  314. package/lib/index.d.ts.map +0 -1
  315. package/lib/index.js +0 -8
  316. package/lib/index.js.map +0 -1
  317. package/lib/loader.d.ts.map +0 -1
  318. package/lib/loader.js +0 -236
  319. package/lib/loader.js.map +0 -1
  320. package/lib/packageVersion.d.ts.map +0 -1
  321. package/lib/packageVersion.js.map +0 -1
  322. package/lib/protocolTreeDocumentStorageService.d.ts.map +0 -1
  323. package/lib/protocolTreeDocumentStorageService.js.map +0 -1
  324. package/lib/quorum.d.ts +0 -21
  325. package/lib/quorum.d.ts.map +0 -1
  326. package/lib/quorum.js +0 -38
  327. package/lib/quorum.js.map +0 -1
  328. package/lib/retriableDocumentStorageService.d.ts.map +0 -1
  329. package/lib/retriableDocumentStorageService.js.map +0 -1
  330. package/lib/utils.d.ts +0 -34
  331. package/lib/utils.d.ts.map +0 -1
  332. package/lib/utils.js.map +0 -1
  333. package/src/collabWindowTracker.ts +0 -102
  334. package/src/deltaManagerProxy.ts +0 -158
  335. package/tsconfig.esnext.json +0 -7
@@ -3,341 +3,109 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { ITelemetryLogger } from "@fluidframework/common-definitions";
7
- import { assert, LazyPromise } from "@fluidframework/common-utils";
6
+ import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
8
7
  import {
9
- IAudience,
10
- IContainerContext,
11
- IDeltaManager,
12
- ILoader,
13
- IRuntime,
14
- ICriticalContainerError,
15
- AttachState,
16
- ILoaderOptions,
17
- IRuntimeFactory,
18
- IProvideRuntimeFactory,
19
- IFluidCodeDetails,
20
- IFluidCodeDetailsComparer,
21
- IProvideFluidCodeDetailsComparer,
22
- ICodeDetailsLoader,
23
- IFluidModuleWithDetails,
24
- ISnapshotTreeWithBlobContents,
8
+ IAudience,
9
+ IContainerContext,
10
+ IDeltaManager,
11
+ ILoader,
12
+ ICriticalContainerError,
13
+ AttachState,
14
+ ILoaderOptions,
15
+ IFluidCodeDetails,
16
+ IBatchMessage,
25
17
  } from "@fluidframework/container-definitions";
26
- import {
27
- IRequest,
28
- IResponse,
29
- FluidObject,
30
- } from "@fluidframework/core-interfaces";
18
+ import { FluidObject } from "@fluidframework/core-interfaces";
31
19
  import { IDocumentStorageService } from "@fluidframework/driver-definitions";
32
- import { isFluidResolvedUrl } from "@fluidframework/driver-utils";
33
20
  import {
34
- IClientConfiguration,
35
- IClientDetails,
36
- IDocumentMessage,
37
- IQuorum,
38
- IQuorumClients,
39
- ISequencedDocumentMessage,
40
- ISignalMessage,
41
- ISnapshotTree,
42
- ISummaryTree,
43
- IVersion,
44
- MessageType,
21
+ IClientDetails,
22
+ IDocumentMessage,
23
+ IQuorumClients,
24
+ ISequencedDocumentMessage,
25
+ ISnapshotTree,
26
+ IVersion,
27
+ MessageType,
28
+ ISummaryContent,
45
29
  } from "@fluidframework/protocol-definitions";
46
- import { PerformanceEvent } from "@fluidframework/telemetry-utils";
47
- import { Container } from "./container";
48
-
49
- const PackageNotFactoryError = "Code package does not implement IRuntimeFactory";
50
30
 
31
+ /**
32
+ * {@inheritDoc @fluidframework/container-definitions#IContainerContext}
33
+ */
51
34
  export class ContainerContext implements IContainerContext {
52
- public static async createOrLoad(
53
- container: Container,
54
- scope: FluidObject,
55
- codeLoader: ICodeDetailsLoader,
56
- codeDetails: IFluidCodeDetails,
57
- baseSnapshot: ISnapshotTree | undefined,
58
- deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
59
- quorum: IQuorum,
60
- loader: ILoader,
61
- submitFn: (type: MessageType, contents: any, batch: boolean, appData: any) => number,
62
- submitSignalFn: (contents: any) => void,
63
- closeFn: (error?: ICriticalContainerError) => void,
64
- version: string,
65
- updateDirtyContainerState: (dirty: boolean) => void,
66
- existing: boolean,
67
- pendingLocalState?: unknown,
68
- ): Promise<ContainerContext> {
69
- const context = new ContainerContext(
70
- container,
71
- scope,
72
- codeLoader,
73
- codeDetails,
74
- baseSnapshot,
75
- deltaManager,
76
- quorum,
77
- loader,
78
- submitFn,
79
- submitSignalFn,
80
- closeFn,
81
- version,
82
- updateDirtyContainerState,
83
- existing,
84
- pendingLocalState);
85
- await context.instantiateRuntime(existing);
86
- return context;
87
- }
88
-
89
- public readonly taggedLogger: ITelemetryLogger;
90
-
91
- public get clientId(): string | undefined {
92
- return this.container.clientId;
93
- }
94
-
95
- /**
96
- * DISCLAIMER: this id is only for telemetry purposes. Not suitable for any other usages.
97
- */
98
- public get id(): string {
99
- const resolvedUrl = this.container.resolvedUrl;
100
- if (isFluidResolvedUrl(resolvedUrl)) {
101
- return resolvedUrl.id;
102
- }
103
- return "";
104
- }
105
-
106
- public get clientDetails(): IClientDetails {
107
- return this.container.clientDetails;
108
- }
109
-
110
- public get connected(): boolean {
111
- return this.container.connected;
112
- }
113
-
114
- public get canSummarize(): boolean {
115
- return "summarize" in this.runtime;
116
- }
117
-
118
- public get serviceConfiguration(): IClientConfiguration | undefined {
119
- return this.container.serviceConfiguration;
120
- }
121
-
122
- public get audience(): IAudience {
123
- return this.container.audience;
124
- }
125
-
126
- public get options(): ILoaderOptions {
127
- return this.container.options;
128
- }
129
-
130
- public get baseSnapshot() {
131
- return this._baseSnapshot;
132
- }
133
-
134
- public get storage(): IDocumentStorageService {
135
- return this.container.storage;
136
- }
137
-
138
- private _runtime: IRuntime | undefined;
139
- private get runtime() {
140
- if (this._runtime === undefined) {
141
- throw new Error("Attempted to access runtime before it was defined");
142
- }
143
- return this._runtime;
144
- }
145
-
146
- private _disposed = false;
147
-
148
- public get disposed() {
149
- return this._disposed;
150
- }
151
-
152
- public get codeDetails() { return this._codeDetails; }
153
-
154
- private readonly _quorum: IQuorum;
155
- public get quorum(): IQuorumClients { return this._quorum; }
156
-
157
- private readonly _fluidModuleP: Promise<IFluidModuleWithDetails>;
158
-
159
- constructor(
160
- private readonly container: Container,
161
- public readonly scope: FluidObject,
162
- private readonly codeLoader: ICodeDetailsLoader,
163
- private readonly _codeDetails: IFluidCodeDetails,
164
- private _baseSnapshot: ISnapshotTree | undefined,
165
- public readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
166
- quorum: IQuorum,
167
- public readonly loader: ILoader,
168
- public readonly submitFn: (type: MessageType, contents: any, batch: boolean, appData: any) => number,
169
- public readonly submitSignalFn: (contents: any) => void,
170
- public readonly closeFn: (error?: ICriticalContainerError) => void,
171
- public readonly version: string,
172
- public readonly updateDirtyContainerState: (dirty: boolean) => void,
173
- public readonly existing: boolean,
174
- public readonly pendingLocalState?: unknown,
175
-
176
- ) {
177
- this._quorum = quorum;
178
- this.taggedLogger = container.subLogger;
179
- this._fluidModuleP = new LazyPromise<IFluidModuleWithDetails>(
180
- async () => this.loadCodeModule(_codeDetails),
181
- );
182
- this.attachListener();
183
- }
184
-
185
- /**
186
- * @deprecated - Temporary migratory API, to be removed when customers no longer need it. When removed,
187
- * ContainerContext should only take an IQuorumClients rather than an IQuorum. See IContainerContext for more
188
- * details.
189
- */
190
- public getSpecifiedCodeDetails(): IFluidCodeDetails | undefined {
191
- return (this._quorum.get("code") ?? this._quorum.get("code2")) as IFluidCodeDetails | undefined;
192
- }
193
-
194
- public dispose(error?: Error): void {
195
- if (this._disposed) {
196
- return;
197
- }
198
- this._disposed = true;
199
-
200
- this.runtime.dispose(error);
201
- this._quorum.dispose();
202
- this.deltaManager.dispose();
203
- }
204
-
205
- public getLoadedFromVersion(): IVersion | undefined {
206
- return this.container.loadedFromVersion;
207
- }
208
-
209
- public get attachState(): AttachState {
210
- return this.container.attachState;
211
- }
212
-
213
- /**
214
- * Create a summary. Used when attaching or serializing a detached container.
215
- *
216
- * @param blobRedirectTable - A table passed during the attach process. While detached, blob upload is supported
217
- * using IDs generated locally. After attach, these IDs cannot be used, so this table maps the old local IDs to the
218
- * new storage IDs so requests can be redirected.
219
- */
220
- public createSummary(blobRedirectTable?: Map<string, string>): ISummaryTree {
221
- return this.runtime.createSummary(blobRedirectTable);
222
- }
223
-
224
- public setConnectionState(connected: boolean, clientId?: string) {
225
- const runtime = this.runtime;
226
-
227
- assert(connected === this.connected, 0x0de /* "Mismatch in connection state while setting" */);
228
-
229
- runtime.setConnectionState(connected, clientId);
230
- }
231
-
232
- public process(message: ISequencedDocumentMessage, local: boolean, context: any) {
233
- this.runtime.process(message, local, context);
234
- }
235
-
236
- public processSignal(message: ISignalMessage, local: boolean) {
237
- this.runtime.processSignal(message, local);
238
- }
239
-
240
- public async request(path: IRequest): Promise<IResponse> {
241
- return this.runtime.request(path);
242
- }
243
-
244
- public async getAbsoluteUrl(relativeUrl: string): Promise<string | undefined> {
245
- return this.container.getAbsoluteUrl(relativeUrl);
246
- }
247
-
248
- public getPendingLocalState(): unknown {
249
- return this.runtime.getPendingLocalState();
250
- }
251
-
252
- /**
253
- * Determines if the current code details of the context
254
- * satisfy the incoming constraint code details
255
- */
256
- public async satisfies(constraintCodeDetails: IFluidCodeDetails) {
257
- const comparers: IFluidCodeDetailsComparer[] = [];
258
-
259
- const maybeCompareCodeLoader = this.codeLoader;
260
- if (maybeCompareCodeLoader.IFluidCodeDetailsComparer !== undefined) {
261
- comparers.push(maybeCompareCodeLoader.IFluidCodeDetailsComparer);
262
- }
263
-
264
- const moduleWithDetails = await this._fluidModuleP;
265
- const maybeCompareExport: Partial<IProvideFluidCodeDetailsComparer> | undefined =
266
- moduleWithDetails.module?.fluidExport;
267
- if (maybeCompareExport?.IFluidCodeDetailsComparer !== undefined) {
268
- comparers.push(maybeCompareExport.IFluidCodeDetailsComparer);
269
- }
270
-
271
- // if there are not comparers it is not possible to know
272
- // if the current satisfy the incoming, so return false,
273
- // as assuming they do not satisfy is safer .e.g we will
274
- // reload, rather than potentially running with
275
- // incompatible code
276
- if (comparers.length === 0) {
277
- return false;
278
- }
279
-
280
- for (const comparer of comparers) {
281
- const satisfies = await comparer.satisfies(
282
- moduleWithDetails.details,
283
- constraintCodeDetails,
284
- );
285
- if (satisfies === false) {
286
- return false;
287
- }
288
- }
289
- return true;
290
- }
291
-
292
- public notifyAttaching(snapshot: ISnapshotTreeWithBlobContents) {
293
- this._baseSnapshot = snapshot;
294
- this.runtime.notifyAttaching?.(snapshot);
295
- this.runtime.setAttachState(AttachState.Attaching);
296
- }
297
-
298
- // #region private
299
-
300
- private async getRuntimeFactory(): Promise<IRuntimeFactory> {
301
- const fluidExport: FluidObject<IProvideRuntimeFactory> | undefined =
302
- (await this._fluidModuleP).module?.fluidExport;
303
- const runtimeFactory = fluidExport?.IRuntimeFactory;
304
- if (runtimeFactory === undefined) {
305
- throw new Error(PackageNotFactoryError);
306
- }
307
-
308
- return runtimeFactory;
309
- }
310
-
311
- private async instantiateRuntime(existing: boolean) {
312
- const runtimeFactory = await this.getRuntimeFactory();
313
- this._runtime = await runtimeFactory.instantiateRuntime(this, existing);
314
- }
315
-
316
- private attachListener() {
317
- this.container.once("attached", () => {
318
- this.runtime.setAttachState(AttachState.Attached);
319
- });
320
- }
321
-
322
- private async loadCodeModule(codeDetails: IFluidCodeDetails): Promise<IFluidModuleWithDetails> {
323
- const loadCodeResult = await PerformanceEvent.timedExecAsync(
324
- this.taggedLogger,
325
- { eventName: "CodeLoad" },
326
- async () => this.codeLoader.load(codeDetails),
327
- );
328
-
329
- if ("module" in loadCodeResult) {
330
- const { module, details } = loadCodeResult;
331
- return {
332
- module,
333
- details: details ?? codeDetails,
334
- };
335
- } else {
336
- // If "module" is not in the result, we are using a legacy ICodeLoader. Fix the result up with details.
337
- // Once usage drops to 0 we can remove this compat path.
338
- this.taggedLogger.sendTelemetryEvent({ eventName: "LegacyCodeLoader" });
339
- return loadCodeResult;
340
- }
341
- }
342
- // #endregion
35
+ public readonly supportedFeatures: ReadonlyMap<string, unknown> = new Map([
36
+ /**
37
+ * This version of the loader accepts `referenceSequenceNumber`, provided by the container runtime,
38
+ * as a parameter to the `submitBatchFn` and `submitSummaryFn` functions.
39
+ * This is then used to set the reference sequence numbers of the submitted ops in the DeltaManager.
40
+ */
41
+ ["referenceSequenceNumbers", true],
42
+ ]);
43
+
44
+ public get clientId(): string | undefined {
45
+ return this._getClientId();
46
+ }
47
+
48
+ /**
49
+ * DISCLAIMER: this id is only for telemetry purposes. Not suitable for any other usages.
50
+ */
51
+ public get id(): string {
52
+ return this._getContainerDiagnosticId() ?? "";
53
+ }
54
+
55
+ /**
56
+ * When true, ops are free to flow
57
+ * When false, ops should be kept as pending or rejected
58
+ */
59
+ public get connected(): boolean {
60
+ return this._getConnected();
61
+ }
62
+
63
+ constructor(
64
+ public readonly options: ILoaderOptions,
65
+ public readonly scope: FluidObject,
66
+ public readonly baseSnapshot: ISnapshotTree | undefined,
67
+ private readonly _version: IVersion | undefined,
68
+ public readonly deltaManager: IDeltaManager<ISequencedDocumentMessage, IDocumentMessage>,
69
+ public readonly storage: IDocumentStorageService,
70
+ public readonly quorum: IQuorumClients,
71
+ public readonly audience: IAudience,
72
+ public readonly loader: ILoader,
73
+ public readonly submitFn: (
74
+ type: MessageType,
75
+ contents: any,
76
+ batch: boolean,
77
+ appData: any,
78
+ ) => number,
79
+ public readonly submitSummaryFn: (
80
+ summaryOp: ISummaryContent,
81
+ referenceSequenceNumber?: number,
82
+ ) => number,
83
+ /** @returns clientSequenceNumber of last message in a batch */
84
+ public readonly submitBatchFn: (
85
+ batch: IBatchMessage[],
86
+ referenceSequenceNumber?: number,
87
+ ) => number,
88
+ public readonly submitSignalFn: (content: any, targetClientId?: string) => void,
89
+ public readonly disposeFn: (error?: ICriticalContainerError) => void,
90
+ public readonly closeFn: (error?: ICriticalContainerError) => void,
91
+ public readonly updateDirtyContainerState: (dirty: boolean) => void,
92
+ public readonly getAbsoluteUrl: (relativeUrl: string) => Promise<string | undefined>,
93
+ private readonly _getContainerDiagnosticId: () => string | undefined,
94
+ private readonly _getClientId: () => string | undefined,
95
+ private readonly _getAttachState: () => AttachState,
96
+ private readonly _getConnected: () => boolean,
97
+ public readonly getSpecifiedCodeDetails: () => IFluidCodeDetails | undefined,
98
+ public readonly clientDetails: IClientDetails,
99
+ public readonly existing: boolean,
100
+ public readonly taggedLogger: ITelemetryLoggerExt,
101
+ public readonly pendingLocalState?: unknown,
102
+ ) {}
103
+
104
+ public getLoadedFromVersion(): IVersion | undefined {
105
+ return this._version;
106
+ }
107
+
108
+ public get attachState(): AttachState {
109
+ return this._getAttachState();
110
+ }
343
111
  }