@openedx/frontend-base 1.0.0-alpha.3 → 1.0.0-alpha.31

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 (806) hide show
  1. package/README.md +27 -0
  2. package/{index.ts → dist/index.d.ts} +0 -3
  3. package/dist/index.js +4 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/runtime/analytics/MockAnalyticsService.d.ts +50 -0
  6. package/dist/runtime/analytics/MockAnalyticsService.js +64 -0
  7. package/dist/runtime/analytics/MockAnalyticsService.js.map +1 -0
  8. package/dist/runtime/analytics/SegmentAnalyticsService.d.ts +64 -0
  9. package/dist/runtime/analytics/SegmentAnalyticsService.js +218 -0
  10. package/dist/runtime/analytics/SegmentAnalyticsService.js.map +1 -0
  11. package/dist/runtime/analytics/index.d.ts +3 -0
  12. package/dist/runtime/analytics/index.js +4 -0
  13. package/dist/runtime/analytics/index.js.map +1 -0
  14. package/dist/runtime/analytics/interface.d.ts +53 -0
  15. package/{runtime → dist/runtime}/analytics/interface.js +26 -38
  16. package/dist/runtime/analytics/interface.js.map +1 -0
  17. package/dist/runtime/auth/AxiosCsrfTokenService.d.ts +10 -0
  18. package/dist/runtime/auth/AxiosCsrfTokenService.js +64 -0
  19. package/dist/runtime/auth/AxiosCsrfTokenService.js.map +1 -0
  20. package/dist/runtime/auth/AxiosJwtAuthService.d.ts +182 -0
  21. package/dist/runtime/auth/AxiosJwtAuthService.js +339 -0
  22. package/dist/runtime/auth/AxiosJwtAuthService.js.map +1 -0
  23. package/dist/runtime/auth/AxiosJwtTokenService.d.ts +16 -0
  24. package/dist/runtime/auth/AxiosJwtTokenService.js +130 -0
  25. package/dist/runtime/auth/AxiosJwtTokenService.js.map +1 -0
  26. package/dist/runtime/auth/LocalForageCache.d.ts +7 -0
  27. package/dist/runtime/auth/LocalForageCache.js +78 -0
  28. package/dist/runtime/auth/LocalForageCache.js.map +1 -0
  29. package/dist/runtime/auth/MockAuthService.d.ts +209 -0
  30. package/dist/runtime/auth/MockAuthService.js +256 -0
  31. package/dist/runtime/auth/MockAuthService.js.map +1 -0
  32. package/dist/runtime/auth/index.d.ts +3 -0
  33. package/dist/runtime/auth/index.js +4 -0
  34. package/dist/runtime/auth/index.js.map +1 -0
  35. package/dist/runtime/auth/interceptors/createCsrfTokenProviderInterceptor.d.ts +2 -0
  36. package/dist/runtime/auth/interceptors/createCsrfTokenProviderInterceptor.js +42 -0
  37. package/dist/runtime/auth/interceptors/createCsrfTokenProviderInterceptor.js.map +1 -0
  38. package/dist/runtime/auth/interceptors/createJwtTokenProviderInterceptor.d.ts +2 -0
  39. package/dist/runtime/auth/interceptors/createJwtTokenProviderInterceptor.js +40 -0
  40. package/dist/runtime/auth/interceptors/createJwtTokenProviderInterceptor.js.map +1 -0
  41. package/dist/runtime/auth/interceptors/createProcessAxiosRequestErrorInterceptor.d.ts +2 -0
  42. package/dist/runtime/auth/interceptors/createProcessAxiosRequestErrorInterceptor.js +26 -0
  43. package/dist/runtime/auth/interceptors/createProcessAxiosRequestErrorInterceptor.js.map +1 -0
  44. package/dist/runtime/auth/interceptors/createRetryInterceptor.d.ts +3 -0
  45. package/dist/runtime/auth/interceptors/createRetryInterceptor.js +67 -0
  46. package/dist/runtime/auth/interceptors/createRetryInterceptor.js.map +1 -0
  47. package/dist/runtime/auth/interface.d.ts +133 -0
  48. package/{runtime → dist/runtime}/auth/interface.js +65 -72
  49. package/dist/runtime/auth/interface.js.map +1 -0
  50. package/dist/runtime/auth/utils.d.ts +13 -0
  51. package/dist/runtime/auth/utils.js +66 -0
  52. package/dist/runtime/auth/utils.js.map +1 -0
  53. package/dist/runtime/babel.config.d.ts +2 -0
  54. package/{runtime → dist/runtime}/babel.config.js +2 -1
  55. package/dist/runtime/babel.config.js.map +1 -0
  56. package/{runtime/config/index.ts → dist/runtime/config/index.d.ts} +45 -124
  57. package/dist/runtime/config/index.js +359 -0
  58. package/dist/runtime/config/index.js.map +1 -0
  59. package/dist/runtime/constants.d.ts +57 -0
  60. package/{runtime/constants.ts → dist/runtime/constants.js} +1 -11
  61. package/dist/runtime/constants.js.map +1 -0
  62. package/dist/runtime/i18n/index.d.ts +3 -0
  63. package/{runtime → dist/runtime}/i18n/index.js +4 -44
  64. package/dist/runtime/i18n/index.js.map +1 -0
  65. package/dist/runtime/i18n/injectIntlWithShim.d.ts +11 -0
  66. package/dist/runtime/i18n/injectIntlWithShim.js +45 -0
  67. package/dist/runtime/i18n/injectIntlWithShim.js.map +1 -0
  68. package/dist/runtime/i18n/lib.d.ts +113 -0
  69. package/dist/runtime/i18n/lib.js +223 -0
  70. package/dist/runtime/i18n/lib.js.map +1 -0
  71. package/dist/runtime/index.d.ts +14 -0
  72. package/dist/runtime/index.js +15 -0
  73. package/dist/runtime/index.js.map +1 -0
  74. package/dist/runtime/initialize.d.ts +87 -0
  75. package/dist/runtime/initialize.js +305 -0
  76. package/dist/runtime/initialize.js.map +1 -0
  77. package/dist/runtime/jest.config.d.ts +16 -0
  78. package/dist/runtime/jest.config.js +34 -0
  79. package/dist/runtime/jest.config.js.map +1 -0
  80. package/dist/runtime/logging/MockLoggingService.d.ts +28 -0
  81. package/dist/runtime/logging/MockLoggingService.js +31 -0
  82. package/dist/runtime/logging/MockLoggingService.js.map +1 -0
  83. package/dist/runtime/logging/NewRelicLoggingService.d.ts +67 -0
  84. package/dist/runtime/logging/NewRelicLoggingService.js +175 -0
  85. package/dist/runtime/logging/NewRelicLoggingService.js.map +1 -0
  86. package/{runtime/logging/index.ts → dist/runtime/logging/index.d.ts} +1 -7
  87. package/dist/runtime/logging/index.js +4 -0
  88. package/dist/runtime/logging/index.js.map +1 -0
  89. package/dist/runtime/logging/interface.d.ts +38 -0
  90. package/{runtime → dist/runtime}/logging/interface.js +16 -26
  91. package/dist/runtime/logging/interface.js.map +1 -0
  92. package/dist/runtime/logging/types.d.ts +4 -0
  93. package/dist/runtime/logging/types.js +2 -0
  94. package/dist/runtime/logging/types.js.map +1 -0
  95. package/dist/runtime/react/AuthenticatedPageRoute.d.ts +30 -0
  96. package/{runtime/react/AuthenticatedPageRoute.jsx → dist/runtime/react/AuthenticatedPageRoute.js} +13 -18
  97. package/dist/runtime/react/AuthenticatedPageRoute.js.map +1 -0
  98. package/dist/runtime/react/CombinedAppProvider.d.ts +6 -0
  99. package/dist/runtime/react/CombinedAppProvider.js +24 -0
  100. package/dist/runtime/react/CombinedAppProvider.js.map +1 -0
  101. package/dist/runtime/react/CurrentAppContext.d.ts +20 -0
  102. package/{runtime/react/CurrentAppContext.tsx → dist/runtime/react/CurrentAppContext.js} +3 -7
  103. package/dist/runtime/react/CurrentAppContext.js.map +1 -0
  104. package/dist/runtime/react/CurrentAppProvider.d.ts +23 -0
  105. package/dist/runtime/react/CurrentAppProvider.js +33 -0
  106. package/dist/runtime/react/CurrentAppProvider.js.map +1 -0
  107. package/dist/runtime/react/Divider.d.ts +1 -0
  108. package/dist/runtime/react/Divider.js +5 -0
  109. package/dist/runtime/react/Divider.js.map +1 -0
  110. package/dist/runtime/react/ErrorBoundary.d.ts +32 -0
  111. package/dist/runtime/react/ErrorBoundary.js +40 -0
  112. package/dist/runtime/react/ErrorBoundary.js.map +1 -0
  113. package/dist/runtime/react/ErrorPage.d.ts +17 -0
  114. package/dist/runtime/react/ErrorPage.js +29 -0
  115. package/dist/runtime/react/ErrorPage.js.map +1 -0
  116. package/dist/runtime/react/LoginRedirect.d.ts +8 -0
  117. package/{runtime/react/LoginRedirect.jsx → dist/runtime/react/LoginRedirect.js} +5 -5
  118. package/dist/runtime/react/LoginRedirect.js.map +1 -0
  119. package/dist/runtime/react/NotFoundPage.d.ts +2 -0
  120. package/dist/runtime/react/NotFoundPage.js +14 -0
  121. package/dist/runtime/react/NotFoundPage.js.map +1 -0
  122. package/dist/runtime/react/PageWrap.d.ts +8 -0
  123. package/{runtime/react/PageWrap.jsx → dist/runtime/react/PageWrap.js} +7 -10
  124. package/dist/runtime/react/PageWrap.js.map +1 -0
  125. package/dist/runtime/react/SiteContext.d.ts +24 -0
  126. package/{runtime/react/SiteContext.tsx → dist/runtime/react/SiteContext.js} +5 -11
  127. package/dist/runtime/react/SiteContext.js.map +1 -0
  128. package/dist/runtime/react/SiteProvider.d.ts +29 -0
  129. package/dist/runtime/react/SiteProvider.js +69 -0
  130. package/dist/runtime/react/SiteProvider.js.map +1 -0
  131. package/dist/runtime/react/constants.d.ts +3 -0
  132. package/dist/runtime/react/constants.js +4 -0
  133. package/dist/runtime/react/constants.js.map +1 -0
  134. package/dist/runtime/react/hooks/index.d.ts +7 -0
  135. package/dist/runtime/react/hooks/index.js +8 -0
  136. package/dist/runtime/react/hooks/index.js.map +1 -0
  137. package/dist/runtime/react/hooks/theme/index.d.ts +2 -0
  138. package/dist/runtime/react/hooks/theme/index.js +3 -0
  139. package/dist/runtime/react/hooks/theme/index.js.map +1 -0
  140. package/dist/runtime/react/hooks/theme/useTheme.d.ts +35 -0
  141. package/dist/runtime/react/hooks/theme/useTheme.js +153 -0
  142. package/dist/runtime/react/hooks/theme/useTheme.js.map +1 -0
  143. package/dist/runtime/react/hooks/theme/useThemeConfig.d.ts +16 -0
  144. package/dist/runtime/react/hooks/theme/useThemeConfig.js +29 -0
  145. package/dist/runtime/react/hooks/theme/useThemeConfig.js.map +1 -0
  146. package/dist/runtime/react/hooks/theme/useThemeCore.d.ts +10 -0
  147. package/dist/runtime/react/hooks/theme/useThemeCore.js +40 -0
  148. package/dist/runtime/react/hooks/theme/useThemeCore.js.map +1 -0
  149. package/dist/runtime/react/hooks/theme/useThemeVariants.d.ts +17 -0
  150. package/dist/runtime/react/hooks/theme/useThemeVariants.js +90 -0
  151. package/dist/runtime/react/hooks/theme/useThemeVariants.js.map +1 -0
  152. package/dist/runtime/react/hooks/theme/useTrackColorSchemeChoice.d.ts +8 -0
  153. package/dist/runtime/react/hooks/theme/useTrackColorSchemeChoice.js +30 -0
  154. package/dist/runtime/react/hooks/theme/useTrackColorSchemeChoice.js.map +1 -0
  155. package/dist/runtime/react/hooks/theme/utils.d.ts +6 -0
  156. package/dist/runtime/react/hooks/theme/utils.js +11 -0
  157. package/dist/runtime/react/hooks/theme/utils.js.map +1 -0
  158. package/dist/runtime/react/hooks/useActiveRoles.d.ts +2 -0
  159. package/dist/runtime/react/hooks/useActiveRoles.js +13 -0
  160. package/dist/runtime/react/hooks/useActiveRoles.js.map +1 -0
  161. package/dist/runtime/react/hooks/useActiveRouteRoleWatcher.d.ts +2 -0
  162. package/dist/runtime/react/hooks/useActiveRouteRoleWatcher.js +28 -0
  163. package/dist/runtime/react/hooks/useActiveRouteRoleWatcher.js.map +1 -0
  164. package/dist/runtime/react/hooks/useAppConfig.d.ts +2 -0
  165. package/dist/runtime/react/hooks/useAppConfig.js +8 -0
  166. package/dist/runtime/react/hooks/useAppConfig.js.map +1 -0
  167. package/dist/runtime/react/hooks/useAuthenticatedUser.d.ts +2 -0
  168. package/dist/runtime/react/hooks/useAuthenticatedUser.js +8 -0
  169. package/dist/runtime/react/hooks/useAuthenticatedUser.js.map +1 -0
  170. package/dist/runtime/react/hooks/useSiteConfig.d.ts +2 -0
  171. package/dist/runtime/react/hooks/useSiteConfig.js +8 -0
  172. package/dist/runtime/react/hooks/useSiteConfig.js.map +1 -0
  173. package/dist/runtime/react/hooks/useSiteEvent.d.ts +12 -0
  174. package/dist/runtime/react/hooks/useSiteEvent.js +22 -0
  175. package/dist/runtime/react/hooks/useSiteEvent.js.map +1 -0
  176. package/{runtime/react/index.ts → dist/runtime/react/index.d.ts} +1 -1
  177. package/dist/runtime/react/index.js +20 -0
  178. package/dist/runtime/react/index.js.map +1 -0
  179. package/dist/runtime/react/reducers.d.ts +11 -0
  180. package/dist/runtime/react/reducers.js +28 -0
  181. package/dist/runtime/react/reducers.js.map +1 -0
  182. package/dist/runtime/routing/authenticatedLoader.d.ts +2 -0
  183. package/dist/runtime/routing/authenticatedLoader.js +27 -0
  184. package/dist/runtime/routing/authenticatedLoader.js.map +1 -0
  185. package/dist/runtime/routing/index.d.ts +2 -0
  186. package/dist/runtime/routing/index.js +3 -0
  187. package/dist/runtime/routing/index.js.map +1 -0
  188. package/dist/runtime/routing/utils.d.ts +4 -0
  189. package/dist/runtime/routing/utils.js +43 -0
  190. package/dist/runtime/routing/utils.js.map +1 -0
  191. package/dist/runtime/scripts/index.d.ts +1 -0
  192. package/dist/runtime/scripts/index.js +14 -0
  193. package/dist/runtime/scripts/index.js.map +1 -0
  194. package/dist/runtime/setupTest.d.ts +1 -0
  195. package/dist/runtime/setupTest.js +12 -0
  196. package/dist/runtime/setupTest.js.map +1 -0
  197. package/dist/runtime/slots/Slot.d.ts +10 -0
  198. package/dist/runtime/slots/Slot.js +35 -0
  199. package/dist/runtime/slots/Slot.js.map +1 -0
  200. package/dist/runtime/slots/SlotContext.d.ts +8 -0
  201. package/dist/runtime/slots/SlotContext.js +7 -0
  202. package/dist/runtime/slots/SlotContext.js.map +1 -0
  203. package/dist/runtime/slots/hooks.d.ts +13 -0
  204. package/dist/runtime/slots/hooks.js +29 -0
  205. package/dist/runtime/slots/hooks.js.map +1 -0
  206. package/dist/runtime/slots/index.js +7 -0
  207. package/dist/runtime/slots/index.js.map +1 -0
  208. package/dist/runtime/slots/layout/DefaultSlotLayout.d.ts +1 -0
  209. package/dist/runtime/slots/layout/DefaultSlotLayout.js +7 -0
  210. package/dist/runtime/slots/layout/DefaultSlotLayout.js.map +1 -0
  211. package/dist/runtime/slots/layout/hooks.d.ts +10 -0
  212. package/dist/runtime/slots/layout/hooks.js +57 -0
  213. package/dist/runtime/slots/layout/hooks.js.map +1 -0
  214. package/dist/runtime/slots/layout/index.js +5 -0
  215. package/dist/runtime/slots/layout/index.js.map +1 -0
  216. package/{runtime/slots/layout/types.ts → dist/runtime/slots/layout/types.d.ts} +10 -25
  217. package/dist/runtime/slots/layout/types.js +12 -0
  218. package/dist/runtime/slots/layout/types.js.map +1 -0
  219. package/dist/runtime/slots/layout/utils.d.ts +5 -0
  220. package/dist/runtime/slots/layout/utils.js +11 -0
  221. package/dist/runtime/slots/layout/utils.js.map +1 -0
  222. package/{runtime/slots/types.ts → dist/runtime/slots/types.d.ts} +6 -12
  223. package/dist/runtime/slots/types.js +7 -0
  224. package/dist/runtime/slots/types.js.map +1 -0
  225. package/dist/runtime/slots/utils.d.ts +3 -0
  226. package/dist/runtime/slots/utils.js +66 -0
  227. package/dist/runtime/slots/utils.js.map +1 -0
  228. package/dist/runtime/slots/widget/WidgetContext.d.ts +6 -0
  229. package/dist/runtime/slots/widget/WidgetContext.js +8 -0
  230. package/dist/runtime/slots/widget/WidgetContext.js.map +1 -0
  231. package/dist/runtime/slots/widget/WidgetProvider.d.ts +9 -0
  232. package/dist/runtime/slots/widget/WidgetProvider.js +18 -0
  233. package/dist/runtime/slots/widget/WidgetProvider.js.map +1 -0
  234. package/dist/runtime/slots/widget/hooks.d.ts +13 -0
  235. package/dist/runtime/slots/widget/hooks.js +104 -0
  236. package/dist/runtime/slots/widget/hooks.js.map +1 -0
  237. package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.d.ts +10 -0
  238. package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.js +42 -0
  239. package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.js.map +1 -0
  240. package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.messages.d.ts +13 -0
  241. package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.messages.js +15 -0
  242. package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.messages.js.map +1 -0
  243. package/dist/runtime/slots/widget/iframe/IFrameWidget.d.ts +6 -0
  244. package/dist/runtime/slots/widget/iframe/IFrameWidget.js +32 -0
  245. package/dist/runtime/slots/widget/iframe/IFrameWidget.js.map +1 -0
  246. package/dist/runtime/slots/widget/iframe/constants.d.ts +15 -0
  247. package/{runtime/slots/widget/iframe/constants.ts → dist/runtime/slots/widget/iframe/constants.js} +2 -4
  248. package/dist/runtime/slots/widget/iframe/constants.js.map +1 -0
  249. package/dist/runtime/slots/widget/iframe/hooks.d.ts +64 -0
  250. package/dist/runtime/slots/widget/iframe/hooks.js +144 -0
  251. package/dist/runtime/slots/widget/iframe/hooks.js.map +1 -0
  252. package/{runtime/slots/widget/iframe/index.ts → dist/runtime/slots/widget/iframe/index.d.ts} +1 -4
  253. package/dist/runtime/slots/widget/iframe/index.js +3 -0
  254. package/dist/runtime/slots/widget/iframe/index.js.map +1 -0
  255. package/{runtime/slots/widget/iframe/types.ts → dist/runtime/slots/widget/iframe/types.d.ts} +2 -4
  256. package/dist/runtime/slots/widget/iframe/types.js +3 -0
  257. package/dist/runtime/slots/widget/iframe/types.js.map +1 -0
  258. package/dist/runtime/slots/widget/index.js +6 -0
  259. package/dist/runtime/slots/widget/index.js.map +1 -0
  260. package/{runtime/slots/widget/types.ts → dist/runtime/slots/widget/types.d.ts} +58 -84
  261. package/dist/runtime/slots/widget/types.js +41 -0
  262. package/dist/runtime/slots/widget/types.js.map +1 -0
  263. package/dist/runtime/slots/widget/utils.d.ts +22 -0
  264. package/dist/runtime/slots/widget/utils.js +184 -0
  265. package/dist/runtime/slots/widget/utils.js.map +1 -0
  266. package/{runtime/subscriptions.ts → dist/runtime/subscriptions.d.ts} +5 -41
  267. package/dist/runtime/subscriptions.js +48 -0
  268. package/dist/runtime/subscriptions.js.map +1 -0
  269. package/{runtime/testing/index.ts → dist/runtime/testing/index.d.ts} +0 -1
  270. package/dist/runtime/testing/index.js +9 -0
  271. package/dist/runtime/testing/index.js.map +1 -0
  272. package/dist/runtime/testing/initializeMockApp.d.ts +46 -0
  273. package/{runtime/testing/initializeMockApp.ts → dist/runtime/testing/initializeMockApp.js} +26 -36
  274. package/dist/runtime/testing/initializeMockApp.js.map +1 -0
  275. package/dist/runtime/testing/mockMessages.d.ts +22 -0
  276. package/dist/runtime/testing/mockMessages.js +23 -0
  277. package/dist/runtime/testing/mockMessages.js.map +1 -0
  278. package/dist/runtime/utils.d.ts +95 -0
  279. package/{runtime → dist/runtime}/utils.js +55 -70
  280. package/dist/runtime/utils.js.map +1 -0
  281. package/dist/shell/DefaultLayout.d.ts +1 -0
  282. package/dist/shell/DefaultLayout.js +7 -0
  283. package/dist/shell/DefaultLayout.js.map +1 -0
  284. package/dist/shell/DefaultMain.d.ts +1 -0
  285. package/dist/shell/DefaultMain.js +6 -0
  286. package/dist/shell/DefaultMain.js.map +1 -0
  287. package/dist/shell/Logo.d.ts +6 -0
  288. package/dist/shell/Logo.js +16 -0
  289. package/dist/shell/Logo.js.map +1 -0
  290. package/dist/shell/Shell.d.ts +1 -0
  291. package/dist/shell/Shell.js +10 -0
  292. package/dist/shell/Shell.js.map +1 -0
  293. package/dist/shell/Shell.messages.d.ts +58 -0
  294. package/dist/shell/Shell.messages.js +60 -0
  295. package/dist/shell/Shell.messages.js.map +1 -0
  296. package/dist/shell/app.d.ts +3 -0
  297. package/dist/shell/app.js +43 -0
  298. package/dist/shell/app.js.map +1 -0
  299. package/{shell → dist/shell}/app.scss +2 -1
  300. package/dist/shell/babel.config.d.ts +2 -0
  301. package/{shell → dist/shell}/babel.config.js +2 -1
  302. package/dist/shell/babel.config.js.map +1 -0
  303. package/dist/shell/constants.d.ts +2 -0
  304. package/dist/shell/constants.js +3 -0
  305. package/dist/shell/constants.js.map +1 -0
  306. package/dist/shell/dev/devFooter/app.d.ts +3 -0
  307. package/dist/shell/dev/devFooter/app.js +36 -0
  308. package/dist/shell/dev/devFooter/app.js.map +1 -0
  309. package/dist/shell/dev/devFooter/index.js +2 -0
  310. package/dist/shell/dev/devFooter/index.js.map +1 -0
  311. package/dist/shell/dev/devHeader/BarContext.d.ts +7 -0
  312. package/dist/shell/dev/devHeader/BarContext.js +8 -0
  313. package/dist/shell/dev/devHeader/BarContext.js.map +1 -0
  314. package/dist/shell/dev/devHeader/BarLink.d.ts +1 -0
  315. package/dist/shell/dev/devHeader/BarLink.js +10 -0
  316. package/dist/shell/dev/devHeader/BarLink.js.map +1 -0
  317. package/dist/shell/dev/devHeader/BarProvider.d.ts +6 -0
  318. package/dist/shell/dev/devHeader/BarProvider.js +16 -0
  319. package/dist/shell/dev/devHeader/BarProvider.js.map +1 -0
  320. package/dist/shell/dev/devHeader/CoursesLink.d.ts +1 -0
  321. package/dist/shell/dev/devHeader/CoursesLink.js +10 -0
  322. package/dist/shell/dev/devHeader/CoursesLink.js.map +1 -0
  323. package/dist/shell/dev/devHeader/FooContext.d.ts +7 -0
  324. package/dist/shell/dev/devHeader/FooContext.js +8 -0
  325. package/dist/shell/dev/devHeader/FooContext.js.map +1 -0
  326. package/dist/shell/dev/devHeader/FooLink.d.ts +1 -0
  327. package/dist/shell/dev/devHeader/FooLink.js +10 -0
  328. package/dist/shell/dev/devHeader/FooLink.js.map +1 -0
  329. package/dist/shell/dev/devHeader/FooProvider.d.ts +6 -0
  330. package/dist/shell/dev/devHeader/FooProvider.js +16 -0
  331. package/dist/shell/dev/devHeader/FooProvider.js.map +1 -0
  332. package/dist/shell/dev/devHeader/app.d.ts +3 -0
  333. package/dist/shell/dev/devHeader/app.js +34 -0
  334. package/dist/shell/dev/devHeader/app.js.map +1 -0
  335. package/dist/shell/dev/devHeader/index.js +2 -0
  336. package/dist/shell/dev/devHeader/index.js.map +1 -0
  337. package/dist/shell/dev/devHeader/providers.d.ts +3 -0
  338. package/dist/shell/dev/devHeader/providers.js +8 -0
  339. package/dist/shell/dev/devHeader/providers.js.map +1 -0
  340. package/dist/shell/dev/devHome/HomePage.d.ts +1 -0
  341. package/dist/shell/dev/devHome/HomePage.js +14 -0
  342. package/dist/shell/dev/devHome/HomePage.js.map +1 -0
  343. package/dist/shell/dev/devHome/app.d.ts +3 -0
  344. package/dist/shell/dev/devHome/app.js +15 -0
  345. package/dist/shell/dev/devHome/app.js.map +1 -0
  346. package/dist/shell/dev/devHome/index.js +2 -0
  347. package/dist/shell/dev/devHome/index.js.map +1 -0
  348. package/dist/shell/dev/devHome/messages.d.ts +8 -0
  349. package/dist/shell/dev/devHome/messages.js +10 -0
  350. package/dist/shell/dev/devHome/messages.js.map +1 -0
  351. package/dist/shell/dev/devUser/app.d.ts +3 -0
  352. package/dist/shell/dev/devUser/app.js +22 -0
  353. package/dist/shell/dev/devUser/app.js.map +1 -0
  354. package/dist/shell/dev/devUser/index.js +2 -0
  355. package/dist/shell/dev/devUser/index.js.map +1 -0
  356. package/dist/shell/dev/index.js +6 -0
  357. package/dist/shell/dev/index.js.map +1 -0
  358. package/dist/shell/dev/slotShowcase/HorizontalSlotLayout.d.ts +1 -0
  359. package/dist/shell/dev/slotShowcase/HorizontalSlotLayout.js +8 -0
  360. package/dist/shell/dev/slotShowcase/HorizontalSlotLayout.js.map +1 -0
  361. package/dist/shell/dev/slotShowcase/LayoutWithOptions.d.ts +1 -0
  362. package/dist/shell/dev/slotShowcase/LayoutWithOptions.js +9 -0
  363. package/dist/shell/dev/slotShowcase/LayoutWithOptions.js.map +1 -0
  364. package/dist/shell/dev/slotShowcase/SlotShowcase.scss +50 -0
  365. package/dist/shell/dev/slotShowcase/SlotShowcasePage.d.ts +2 -0
  366. package/dist/shell/dev/slotShowcase/SlotShowcasePage.js +17 -0
  367. package/dist/shell/dev/slotShowcase/SlotShowcasePage.js.map +1 -0
  368. package/dist/shell/dev/slotShowcase/ToggleByRoleLayout.d.ts +1 -0
  369. package/dist/shell/dev/slotShowcase/ToggleByRoleLayout.js +11 -0
  370. package/dist/shell/dev/slotShowcase/ToggleByRoleLayout.js.map +1 -0
  371. package/dist/shell/dev/slotShowcase/WidgetWithOptions.d.ts +1 -0
  372. package/dist/shell/dev/slotShowcase/WidgetWithOptions.js +8 -0
  373. package/dist/shell/dev/slotShowcase/WidgetWithOptions.js.map +1 -0
  374. package/dist/shell/dev/slotShowcase/app.d.ts +3 -0
  375. package/dist/shell/dev/slotShowcase/app.js +372 -0
  376. package/dist/shell/dev/slotShowcase/app.js.map +1 -0
  377. package/dist/shell/dev/slotShowcase/index.js +2 -0
  378. package/dist/shell/dev/slotShowcase/index.js.map +1 -0
  379. package/dist/shell/footer/CenterLinks.d.ts +1 -0
  380. package/dist/shell/footer/CenterLinks.js +7 -0
  381. package/dist/shell/footer/CenterLinks.js.map +1 -0
  382. package/dist/shell/footer/CopyrightNotice.d.ts +10 -0
  383. package/dist/shell/footer/CopyrightNotice.js +10 -0
  384. package/dist/shell/footer/CopyrightNotice.js.map +1 -0
  385. package/dist/shell/footer/Footer.d.ts +1 -0
  386. package/dist/shell/footer/Footer.js +12 -0
  387. package/dist/shell/footer/Footer.js.map +1 -0
  388. package/dist/shell/footer/LabeledLinkColumn.d.ts +1 -0
  389. package/dist/shell/footer/LabeledLinkColumn.js +11 -0
  390. package/dist/shell/footer/LabeledLinkColumn.js.map +1 -0
  391. package/dist/shell/footer/LanguageMenu.d.ts +1 -0
  392. package/dist/shell/footer/LanguageMenu.js +16 -0
  393. package/dist/shell/footer/LanguageMenu.js.map +1 -0
  394. package/dist/shell/footer/LanguageMenuItem.d.ts +8 -0
  395. package/dist/shell/footer/LanguageMenuItem.js +11 -0
  396. package/dist/shell/footer/LanguageMenuItem.js.map +1 -0
  397. package/dist/shell/footer/LeftLinks.d.ts +1 -0
  398. package/dist/shell/footer/LeftLinks.js +7 -0
  399. package/dist/shell/footer/LeftLinks.js.map +1 -0
  400. package/dist/shell/footer/LegalNotices.d.ts +1 -0
  401. package/dist/shell/footer/LegalNotices.js +10 -0
  402. package/dist/shell/footer/LegalNotices.js.map +1 -0
  403. package/dist/shell/footer/PoweredBy.d.ts +1 -0
  404. package/dist/shell/footer/PoweredBy.js +9 -0
  405. package/dist/shell/footer/PoweredBy.js.map +1 -0
  406. package/dist/shell/footer/RevealLinks.d.ts +1 -0
  407. package/dist/shell/footer/RevealLinks.js +16 -0
  408. package/dist/shell/footer/RevealLinks.js.map +1 -0
  409. package/dist/shell/footer/RightLinks.d.ts +1 -0
  410. package/dist/shell/footer/RightLinks.js +7 -0
  411. package/dist/shell/footer/RightLinks.js.map +1 -0
  412. package/dist/shell/footer/app.d.ts +3 -0
  413. package/dist/shell/footer/app.js +59 -0
  414. package/dist/shell/footer/app.js.map +1 -0
  415. package/dist/shell/footer/data/api.d.ts +1 -0
  416. package/dist/shell/footer/data/api.js +45 -0
  417. package/dist/shell/footer/data/api.js.map +1 -0
  418. package/dist/shell/footer/index.js +3 -0
  419. package/dist/shell/footer/index.js.map +1 -0
  420. package/dist/shell/header/AuthenticatedMenu.d.ts +5 -0
  421. package/dist/shell/header/AuthenticatedMenu.js +9 -0
  422. package/dist/shell/header/AuthenticatedMenu.js.map +1 -0
  423. package/dist/shell/header/Header.d.ts +1 -0
  424. package/dist/shell/header/Header.js +8 -0
  425. package/dist/shell/header/Header.js.map +1 -0
  426. package/dist/shell/header/anonymous-menu/AnonymousMenu.d.ts +5 -0
  427. package/dist/shell/header/anonymous-menu/AnonymousMenu.js +7 -0
  428. package/dist/shell/header/anonymous-menu/AnonymousMenu.js.map +1 -0
  429. package/dist/shell/header/anonymous-menu/LoginButton.d.ts +3 -0
  430. package/dist/shell/header/anonymous-menu/LoginButton.js +22 -0
  431. package/dist/shell/header/anonymous-menu/LoginButton.js.map +1 -0
  432. package/dist/shell/header/anonymous-menu/RegisterButton.d.ts +3 -0
  433. package/dist/shell/header/anonymous-menu/RegisterButton.js +22 -0
  434. package/dist/shell/header/anonymous-menu/RegisterButton.js.map +1 -0
  435. package/dist/shell/header/app.d.ts +4 -0
  436. package/dist/shell/header/app.js +132 -0
  437. package/dist/shell/header/app.js.map +1 -0
  438. package/dist/shell/header/app.scss +14 -0
  439. package/dist/shell/header/constants.d.ts +2 -0
  440. package/dist/shell/header/constants.js +3 -0
  441. package/dist/shell/header/constants.js.map +1 -0
  442. package/dist/shell/header/course-navigation-bar/CourseTabsNavigation.d.ts +3 -0
  443. package/dist/shell/header/course-navigation-bar/CourseTabsNavigation.js +62 -0
  444. package/dist/shell/header/course-navigation-bar/CourseTabsNavigation.js.map +1 -0
  445. package/dist/shell/header/course-navigation-bar/course-tabs-navigation.scss +7 -0
  446. package/dist/shell/header/course-navigation-bar/data/service.d.ts +9 -0
  447. package/dist/shell/header/course-navigation-bar/data/service.js +27 -0
  448. package/dist/shell/header/course-navigation-bar/data/service.js.map +1 -0
  449. package/dist/shell/header/course-navigation-bar/messages.d.ts +8 -0
  450. package/dist/shell/header/course-navigation-bar/messages.js +10 -0
  451. package/dist/shell/header/course-navigation-bar/messages.js.map +1 -0
  452. package/dist/shell/header/course-navigation-bar/utils.d.ts +2 -0
  453. package/dist/shell/header/course-navigation-bar/utils.js +27 -0
  454. package/dist/shell/header/course-navigation-bar/utils.js.map +1 -0
  455. package/dist/shell/header/desktop/DesktopLayout.d.ts +1 -0
  456. package/dist/shell/header/desktop/DesktopLayout.js +10 -0
  457. package/dist/shell/header/desktop/DesktopLayout.js.map +1 -0
  458. package/dist/shell/header/desktop/PrimaryNavLinks.d.ts +1 -0
  459. package/dist/shell/header/desktop/PrimaryNavLinks.js +7 -0
  460. package/dist/shell/header/desktop/PrimaryNavLinks.js.map +1 -0
  461. package/dist/shell/header/desktop/SecondaryNavLinks.d.ts +1 -0
  462. package/dist/shell/header/desktop/SecondaryNavLinks.js +7 -0
  463. package/dist/shell/header/desktop/SecondaryNavLinks.js.map +1 -0
  464. package/{shell/header/index.ts → dist/shell/header/index.d.ts} +1 -0
  465. package/dist/shell/header/index.js +4 -0
  466. package/dist/shell/header/index.js.map +1 -0
  467. package/dist/shell/header/mobile/MobileLayout.d.ts +1 -0
  468. package/dist/shell/header/mobile/MobileLayout.js +17 -0
  469. package/dist/shell/header/mobile/MobileLayout.js.map +1 -0
  470. package/dist/shell/header/mobile/MobileNavLinks.d.ts +1 -0
  471. package/dist/shell/header/mobile/MobileNavLinks.js +7 -0
  472. package/dist/shell/header/mobile/MobileNavLinks.js.map +1 -0
  473. package/{shell/index.ts → dist/shell/index.d.ts} +2 -1
  474. package/dist/shell/index.js +9 -0
  475. package/dist/shell/index.js.map +1 -0
  476. package/dist/shell/jest.config.d.ts +15 -0
  477. package/{tools/dist/jest → dist/shell}/jest.config.js +12 -10
  478. package/dist/shell/jest.config.js.map +1 -0
  479. package/dist/shell/menus/LinkMenuItem.d.ts +9 -0
  480. package/dist/shell/menus/LinkMenuItem.js +38 -0
  481. package/dist/shell/menus/LinkMenuItem.js.map +1 -0
  482. package/dist/shell/menus/NavDropdownMenuSlot.d.ts +7 -0
  483. package/dist/shell/menus/NavDropdownMenuSlot.js +14 -0
  484. package/dist/shell/menus/NavDropdownMenuSlot.js.map +1 -0
  485. package/dist/shell/menus/ProfileLinkMenuItem.d.ts +8 -0
  486. package/dist/shell/menus/ProfileLinkMenuItem.js +16 -0
  487. package/dist/shell/menus/ProfileLinkMenuItem.js.map +1 -0
  488. package/dist/shell/menus/data/utils.d.ts +4 -0
  489. package/dist/shell/menus/data/utils.js +13 -0
  490. package/dist/shell/menus/data/utils.js.map +1 -0
  491. package/dist/shell/router/createRouter.d.ts +1 -0
  492. package/dist/shell/router/createRouter.js +26 -0
  493. package/dist/shell/router/createRouter.js.map +1 -0
  494. package/dist/shell/router/getAppRoutes.d.ts +2 -0
  495. package/dist/shell/router/getAppRoutes.js +27 -0
  496. package/dist/shell/router/getAppRoutes.js.map +1 -0
  497. package/dist/shell/setupTest.d.ts +1 -0
  498. package/dist/shell/setupTest.js +12 -0
  499. package/dist/shell/setupTest.js.map +1 -0
  500. package/dist/shell/site.config.dev.d.ts +4 -0
  501. package/dist/shell/site.config.dev.js +43 -0
  502. package/dist/shell/site.config.dev.js.map +1 -0
  503. package/dist/shell/site.d.ts +1 -0
  504. package/dist/shell/site.js +45 -0
  505. package/dist/shell/site.js.map +1 -0
  506. package/dist/tools/babel/babel.config.d.ts +12 -0
  507. package/dist/tools/babel.config.d.ts +2 -0
  508. package/dist/tools/babel.config.js +3 -0
  509. package/dist/tools/cli/commands/serve.d.ts +1 -0
  510. package/dist/tools/cli/commands/translations.d.ts +2 -0
  511. package/dist/tools/cli/commands/translations.js +20 -0
  512. package/dist/tools/cli/openedx.d.ts +2 -0
  513. package/{tools/dist → dist/tools}/cli/openedx.js +33 -8
  514. package/dist/tools/cli/utils/ensureConfigFilenameOption.d.ts +2 -0
  515. package/dist/tools/cli/utils/formatter.d.ts +1 -0
  516. package/dist/tools/cli/utils/formatter.js +3 -0
  517. package/dist/tools/cli/utils/getResolvedConfigPath.d.ts +2 -0
  518. package/dist/tools/cli/utils/prettyPrintTitle.d.ts +1 -0
  519. package/dist/tools/cli/utils/printUsage.d.ts +1 -0
  520. package/{tools/dist → dist/tools}/cli/utils/printUsage.js +8 -0
  521. package/dist/tools/cli/utils/translations/index.d.ts +2 -0
  522. package/dist/tools/cli/utils/translations/index.js +7 -0
  523. package/dist/tools/cli/utils/translations/messagesObject.d.ts +26 -0
  524. package/dist/tools/cli/utils/translations/messagesObject.js +66 -0
  525. package/dist/tools/cli/utils/translations/prepare.d.ts +5 -0
  526. package/dist/tools/cli/utils/translations/prepare.js +98 -0
  527. package/dist/tools/cli/utils/translations/pull.d.ts +6 -0
  528. package/dist/tools/cli/utils/translations/pull.js +102 -0
  529. package/dist/tools/config-helpers/createConfig.d.ts +2 -0
  530. package/dist/tools/config-helpers/createLintConfig.d.ts +2 -0
  531. package/dist/tools/config-helpers/getBaseConfig.d.ts +2 -0
  532. package/dist/tools/defaultConfigPaths.d.ts +8 -0
  533. package/dist/tools/eslint/base.eslint.config.d.ts +3 -0
  534. package/{config → dist/tools}/eslint/base.eslint.config.js +5 -4
  535. package/dist/tools/eslint.config.d.ts +3 -0
  536. package/dist/tools/index.d.ts +3 -0
  537. package/dist/tools/jest/jest.config.d.ts +14 -0
  538. package/dist/tools/jest.config.d.ts +8 -0
  539. package/dist/tools/types.d.ts +20 -0
  540. package/{tools/dist → dist/tools}/types.js +2 -0
  541. package/{tools/dist → dist/tools}/typescript/tsconfig.json +2 -1
  542. package/dist/tools/webpack/common-config/all/getCodeRules.d.ts +2 -0
  543. package/dist/tools/webpack/common-config/all/getFileLoaderRules.d.ts +11 -0
  544. package/dist/tools/webpack/common-config/all/getImageMinimizer.d.ts +5 -0
  545. package/dist/tools/webpack/common-config/all/getStylesheetRule.d.ts +8 -0
  546. package/{config → dist/tools}/webpack/common-config/all/getStylesheetRule.js +1 -1
  547. package/dist/tools/webpack/common-config/dev/getDevServer.d.ts +2 -0
  548. package/{tools/dist → dist/tools}/webpack/common-config/dev/getDevServer.js +3 -5
  549. package/dist/tools/webpack/common-config/index.d.ts +7 -0
  550. package/{config → dist/tools}/webpack/common-config/index.js +3 -1
  551. package/dist/tools/webpack/common-config/site/getHtmlWebpackPlugin.d.ts +2 -0
  552. package/dist/tools/webpack/common-config/site/getI18nMessagesFallbackPlugin/emptyI18n.d.ts +2 -0
  553. package/{config/webpack/types.js → dist/tools/webpack/common-config/site/getI18nMessagesFallbackPlugin/emptyI18n.js} +1 -0
  554. package/dist/tools/webpack/common-config/site/getI18nMessagesFallbackPlugin/index.d.ts +2 -0
  555. package/dist/tools/webpack/common-config/site/getI18nMessagesFallbackPlugin/index.js +26 -0
  556. package/dist/tools/webpack/plugins/html-webpack-new-relic-plugin/HtmlWebpackNewRelicPlugin.d.ts +16 -0
  557. package/dist/tools/webpack/plugins/html-webpack-new-relic-plugin/index.d.ts +2 -0
  558. package/dist/tools/webpack/plugins/html-webpack-new-relic-plugin/test/fixtures/entry.d.ts +1 -0
  559. package/dist/tools/webpack/utils/getPublicPath.d.ts +1 -0
  560. package/{tools/dist → dist/tools}/webpack/utils/getPublicPath.js +1 -1
  561. package/dist/tools/webpack/utils/getResolvedSiteConfigPath.d.ts +1 -0
  562. package/dist/tools/webpack/utils/getResolvedSiteI18nPath.d.ts +1 -0
  563. package/dist/tools/webpack/utils/getResolvedSiteI18nPath.js +25 -0
  564. package/dist/tools/webpack/webpack.config.build.d.ts +3 -0
  565. package/{config → dist/tools}/webpack/webpack.config.build.js +12 -15
  566. package/dist/tools/webpack/webpack.config.dev.d.ts +3 -0
  567. package/{config → dist/tools}/webpack/webpack.config.dev.js +16 -15
  568. package/dist/tools/webpack/webpack.config.dev.shell.d.ts +3 -0
  569. package/{config → dist/tools}/webpack/webpack.config.dev.shell.js +7 -14
  570. package/dist/types.d.ts +92 -0
  571. package/dist/types.js +7 -0
  572. package/dist/types.js.map +1 -0
  573. package/package.json +37 -19
  574. package/config/tsconfig.json +0 -32
  575. package/config/types.js +0 -23
  576. package/config/webpack/common-config/all/getIgnoreWarnings.js +0 -14
  577. package/config/webpack/common-config/dev/getDevServer.js +0 -38
  578. package/config/webpack/plugins/html-webpack-new-relic-plugin/test/HtmlWebpackNewRelicPlugin.test.js +0 -66
  579. package/config/webpack/plugins/paragon-webpack-plugin/ParagonWebpackPlugin.js +0 -108
  580. package/config/webpack/plugins/paragon-webpack-plugin/index.js +0 -7
  581. package/config/webpack/plugins/paragon-webpack-plugin/utils/assetUtils.js +0 -64
  582. package/config/webpack/plugins/paragon-webpack-plugin/utils/htmlUtils.js +0 -53
  583. package/config/webpack/plugins/paragon-webpack-plugin/utils/index.js +0 -9
  584. package/config/webpack/plugins/paragon-webpack-plugin/utils/paragonStylesheetUtils.js +0 -114
  585. package/config/webpack/plugins/paragon-webpack-plugin/utils/scriptUtils.js +0 -146
  586. package/config/webpack/plugins/paragon-webpack-plugin/utils/stylesheetUtils.js +0 -126
  587. package/config/webpack/plugins/paragon-webpack-plugin/utils/tagUtils.js +0 -57
  588. package/config/webpack/utils/getLocalAliases.js +0 -65
  589. package/config/webpack/utils/getPublicPath.js +0 -6
  590. package/config/webpack/utils/paragonUtils.js +0 -138
  591. package/runtime/__mocks__/file.js +0 -1
  592. package/runtime/__mocks__/svg.js +0 -1
  593. package/runtime/__mocks__/universal-cookie.js +0 -6
  594. package/runtime/analytics/MockAnalyticsService.js +0 -71
  595. package/runtime/analytics/SegmentAnalyticsService.js +0 -243
  596. package/runtime/analytics/index.ts +0 -12
  597. package/runtime/analytics/interface.test.js +0 -242
  598. package/runtime/auth/AxiosCsrfTokenService.js +0 -60
  599. package/runtime/auth/AxiosJwtAuthService.js +0 -363
  600. package/runtime/auth/AxiosJwtAuthService.test.jsx +0 -1076
  601. package/runtime/auth/AxiosJwtTokenService.js +0 -134
  602. package/runtime/auth/LocalForageCache.js +0 -76
  603. package/runtime/auth/MockAuthService.js +0 -278
  604. package/runtime/auth/index.ts +0 -19
  605. package/runtime/auth/interceptors/createCsrfTokenProviderInterceptor.js +0 -36
  606. package/runtime/auth/interceptors/createJwtTokenProviderInterceptor.js +0 -37
  607. package/runtime/auth/interceptors/createProcessAxiosRequestErrorInterceptor.js +0 -20
  608. package/runtime/auth/interceptors/createRetryInterceptor.js +0 -74
  609. package/runtime/auth/interceptors/createRetryInterceptor.test.js +0 -23
  610. package/runtime/auth/utils.js +0 -105
  611. package/runtime/config/getExternalLinkUrl.test.js +0 -76
  612. package/runtime/i18n/injectIntlWithShim.jsx +0 -48
  613. package/runtime/i18n/lib.test.js +0 -230
  614. package/runtime/i18n/lib.ts +0 -272
  615. package/runtime/index.ts +0 -134
  616. package/runtime/initialize.async.function.config.test.js +0 -43
  617. package/runtime/initialize.const.config.test.js +0 -41
  618. package/runtime/initialize.function.config.test.js +0 -41
  619. package/runtime/initialize.js +0 -352
  620. package/runtime/initialize.test.js +0 -356
  621. package/runtime/jest.config.js +0 -32
  622. package/runtime/logging/MockLoggingService.js +0 -31
  623. package/runtime/logging/NewRelicLoggingService.js +0 -184
  624. package/runtime/logging/NewRelicLoggingService.test.js +0 -214
  625. package/runtime/logging/types.ts +0 -4
  626. package/runtime/react/AuthenticatedPageRoute.test.jsx +0 -135
  627. package/runtime/react/CombinedAppProvider.tsx +0 -46
  628. package/runtime/react/CurrentAppProvider.tsx +0 -46
  629. package/runtime/react/Divider.tsx +0 -5
  630. package/runtime/react/ErrorBoundary.jsx +0 -47
  631. package/runtime/react/ErrorBoundary.test.jsx +0 -83
  632. package/runtime/react/ErrorPage.jsx +0 -72
  633. package/runtime/react/SiteProvider.test.jsx +0 -66
  634. package/runtime/react/SiteProvider.tsx +0 -78
  635. package/runtime/react/hooks.test.jsx +0 -104
  636. package/runtime/react/hooks.ts +0 -106
  637. package/runtime/routing/index.ts +0 -1
  638. package/runtime/routing/utils.test.ts +0 -7
  639. package/runtime/routing/utils.ts +0 -34
  640. package/runtime/scripts/GoogleAnalyticsLoader.test.ts +0 -77
  641. package/runtime/scripts/GoogleAnalyticsLoader.ts +0 -59
  642. package/runtime/scripts/index.ts +0 -1
  643. package/runtime/setupTest.js +0 -49
  644. package/runtime/site.config.test.tsx +0 -33
  645. package/runtime/slots/Slot.test.tsx +0 -40
  646. package/runtime/slots/Slot.tsx +0 -32
  647. package/runtime/slots/SlotContext.tsx +0 -8
  648. package/runtime/slots/hooks.ts +0 -35
  649. package/runtime/slots/layout/DefaultSlotLayout.test.tsx +0 -31
  650. package/runtime/slots/layout/DefaultSlotLayout.tsx +0 -9
  651. package/runtime/slots/layout/hooks.test.tsx +0 -178
  652. package/runtime/slots/layout/hooks.ts +0 -65
  653. package/runtime/slots/layout/utils.test.ts +0 -67
  654. package/runtime/slots/layout/utils.ts +0 -14
  655. package/runtime/slots/utils.test.ts +0 -64
  656. package/runtime/slots/utils.ts +0 -78
  657. package/runtime/slots/widget/WidgetContext.tsx +0 -9
  658. package/runtime/slots/widget/WidgetProvider.tsx +0 -30
  659. package/runtime/slots/widget/hooks.ts +0 -105
  660. package/runtime/slots/widget/iframe/IFrameContentWrapper.messages.tsx +0 -16
  661. package/runtime/slots/widget/iframe/IFrameContentWrapper.tsx +0 -84
  662. package/runtime/slots/widget/iframe/IFrameWidget.tsx +0 -59
  663. package/runtime/slots/widget/iframe/hooks.ts +0 -179
  664. package/runtime/slots/widget/utils.tsx +0 -201
  665. package/runtime/testing/initializeMockApp.test.ts +0 -66
  666. package/runtime/testing/mockMessages.ts +0 -23
  667. package/runtime/utils.test.js +0 -116
  668. package/shell/DefaultLayout.tsx +0 -18
  669. package/shell/DefaultMain.tsx +0 -7
  670. package/shell/Logo.test.tsx +0 -32
  671. package/shell/Logo.tsx +0 -28
  672. package/shell/Shell.messages.ts +0 -61
  673. package/shell/Shell.tsx +0 -18
  674. package/shell/__mocks__/file.js +0 -1
  675. package/shell/__mocks__/svg.js +0 -1
  676. package/shell/__mocks__/universal-cookie.js +0 -6
  677. package/shell/app.ts +0 -38
  678. package/shell/dev/devFooter/app.tsx +0 -43
  679. package/shell/dev/devHeader/BarContext.tsx +0 -13
  680. package/shell/dev/devHeader/BarLink.tsx +0 -16
  681. package/shell/dev/devHeader/BarProvider.tsx +0 -25
  682. package/shell/dev/devHeader/CoursesLink.tsx +0 -16
  683. package/shell/dev/devHeader/FooContext.tsx +0 -13
  684. package/shell/dev/devHeader/FooLink.tsx +0 -16
  685. package/shell/dev/devHeader/FooProvider.tsx +0 -25
  686. package/shell/dev/devHeader/app.tsx +0 -53
  687. package/shell/dev/devHeader/providers.tsx +0 -11
  688. package/shell/dev/devHome/HomePage.tsx +0 -28
  689. package/shell/dev/devHome/app.ts +0 -18
  690. package/shell/dev/devHome/i18n/index.ts +0 -27
  691. package/shell/dev/devHome/messages.ts +0 -11
  692. package/shell/dev/devUser/app.tsx +0 -24
  693. package/shell/dev/slotShowcase/HorizontalSlotLayout.tsx +0 -11
  694. package/shell/dev/slotShowcase/LayoutWithOptions.tsx +0 -17
  695. package/shell/dev/slotShowcase/SlotShowcasePage.tsx +0 -66
  696. package/shell/dev/slotShowcase/WidgetWithOptions.tsx +0 -11
  697. package/shell/dev/slotShowcase/app.tsx +0 -373
  698. package/shell/footer/CenterLinks.tsx +0 -11
  699. package/shell/footer/CopyrightNotice.tsx +0 -36
  700. package/shell/footer/Footer.tsx +0 -34
  701. package/shell/footer/LabeledLinkColumn.tsx +0 -19
  702. package/shell/footer/LanguageMenu.tsx +0 -35
  703. package/shell/footer/LanguageMenuItem.tsx +0 -23
  704. package/shell/footer/LeftLinks.tsx +0 -11
  705. package/shell/footer/LegalNotices.tsx +0 -17
  706. package/shell/footer/PoweredBy.tsx +0 -17
  707. package/shell/footer/RevealLinks.tsx +0 -43
  708. package/shell/footer/RightLinks.tsx +0 -11
  709. package/shell/footer/app.tsx +0 -73
  710. package/shell/footer/data/api.ts +0 -48
  711. package/shell/header/AuthenticatedMenu.tsx +0 -32
  712. package/shell/header/Header.tsx +0 -17
  713. package/shell/header/anonymous-menu/AnonymousMenu.tsx +0 -14
  714. package/shell/header/anonymous-menu/LoginButton.tsx +0 -14
  715. package/shell/header/anonymous-menu/RegisterButton.tsx +0 -15
  716. package/shell/header/app.tsx +0 -142
  717. package/shell/header/desktop/DesktopLayout.tsx +0 -22
  718. package/shell/header/desktop/PrimaryNavLinks.tsx +0 -10
  719. package/shell/header/desktop/SecondaryNavLinks.tsx +0 -10
  720. package/shell/header/mobile/MobileLayout.tsx +0 -47
  721. package/shell/header/mobile/MobileNavLinks.tsx +0 -10
  722. package/shell/i18n/index.ts +0 -25
  723. package/shell/jest.config.js +0 -30
  724. package/shell/menus/LinkMenuItem.tsx +0 -64
  725. package/shell/menus/NavDropdownMenuSlot.tsx +0 -29
  726. package/shell/menus/ProfileLinkMenuItem.tsx +0 -33
  727. package/shell/menus/data/utils.ts +0 -19
  728. package/shell/public/index.html +0 -10
  729. package/shell/router/createRouter.test.tsx +0 -50
  730. package/shell/router/createRouter.ts +0 -17
  731. package/shell/router/getAppRoutes.test.tsx +0 -59
  732. package/shell/router/getAppRoutes.ts +0 -21
  733. package/shell/setupTest.js +0 -48
  734. package/shell/site.config.dev.tsx +0 -49
  735. package/shell/site.config.test.tsx +0 -16
  736. package/shell/site.tsx +0 -41
  737. package/tools/dist/babel/babel.config.js +0 -28
  738. package/tools/dist/cli/intl-imports.js +0 -233
  739. package/tools/dist/cli/intl-imports.test.js +0 -146
  740. package/tools/dist/cli/transifex-utils.js +0 -68
  741. package/tools/dist/cli/utils/formatter.js +0 -10
  742. package/tools/dist/config-helpers/createConfig.js +0 -13
  743. package/tools/dist/config-helpers/createLintConfig.js +0 -16
  744. package/tools/dist/config-helpers/getBaseConfig.js +0 -12
  745. package/tools/dist/defaultConfigPaths.js +0 -35
  746. package/tools/dist/eslint/base.eslint.config.js +0 -113
  747. package/tools/dist/index.js +0 -12
  748. package/tools/dist/webpack/common-config/all/getCodeRules.js +0 -52
  749. package/tools/dist/webpack/common-config/all/getFileLoaderRules.js +0 -26
  750. package/tools/dist/webpack/common-config/all/getIgnoreWarnings.js +0 -14
  751. package/tools/dist/webpack/common-config/all/getImageMinimizer.js +0 -25
  752. package/tools/dist/webpack/common-config/all/getStylesheetRule.js +0 -112
  753. package/tools/dist/webpack/common-config/index.js +0 -18
  754. package/tools/dist/webpack/common-config/site/getHtmlWebpackPlugin.js +0 -16
  755. package/tools/dist/webpack/plugins/html-webpack-new-relic-plugin/HtmlWebpackNewRelicPlugin.js +0 -91
  756. package/tools/dist/webpack/plugins/html-webpack-new-relic-plugin/index.js +0 -7
  757. package/tools/dist/webpack/plugins/html-webpack-new-relic-plugin/test/HtmlWebpackNewRelicPlugin.test.js +0 -66
  758. package/tools/dist/webpack/plugins/html-webpack-new-relic-plugin/test/fixtures/entry.js +0 -3
  759. package/tools/dist/webpack/plugins/paragon-webpack-plugin/ParagonWebpackPlugin.js +0 -108
  760. package/tools/dist/webpack/plugins/paragon-webpack-plugin/index.js +0 -7
  761. package/tools/dist/webpack/plugins/paragon-webpack-plugin/utils/assetUtils.js +0 -64
  762. package/tools/dist/webpack/plugins/paragon-webpack-plugin/utils/htmlUtils.js +0 -53
  763. package/tools/dist/webpack/plugins/paragon-webpack-plugin/utils/index.js +0 -9
  764. package/tools/dist/webpack/plugins/paragon-webpack-plugin/utils/paragonStylesheetUtils.js +0 -114
  765. package/tools/dist/webpack/plugins/paragon-webpack-plugin/utils/scriptUtils.js +0 -146
  766. package/tools/dist/webpack/plugins/paragon-webpack-plugin/utils/stylesheetUtils.js +0 -126
  767. package/tools/dist/webpack/plugins/paragon-webpack-plugin/utils/tagUtils.js +0 -57
  768. package/tools/dist/webpack/types.js +0 -2
  769. package/tools/dist/webpack/utils/getLocalAliases.js +0 -65
  770. package/tools/dist/webpack/utils/getResolvedSiteConfigPath.js +0 -32
  771. package/tools/dist/webpack/utils/paragonUtils.js +0 -138
  772. package/tools/dist/webpack/webpack.config.build.js +0 -80
  773. package/tools/dist/webpack/webpack.config.dev.js +0 -76
  774. package/tools/dist/webpack/webpack.config.dev.shell.js +0 -110
  775. package/types.ts +0 -99
  776. /package/{runtime/slots/index.ts → dist/runtime/slots/index.d.ts} +0 -0
  777. /package/{runtime/slots/layout/index.ts → dist/runtime/slots/layout/index.d.ts} +0 -0
  778. /package/{runtime/slots/widget/index.ts → dist/runtime/slots/widget/index.d.ts} +0 -0
  779. /package/{shell/dev/devFooter/index.ts → dist/shell/dev/devFooter/index.d.ts} +0 -0
  780. /package/{shell/dev/devHeader/index.ts → dist/shell/dev/devHeader/index.d.ts} +0 -0
  781. /package/{shell/dev/devHome/index.ts → dist/shell/dev/devHome/index.d.ts} +0 -0
  782. /package/{shell/dev/devUser/index.ts → dist/shell/dev/devUser/index.d.ts} +0 -0
  783. /package/{shell/dev/index.ts → dist/shell/dev/index.d.ts} +0 -0
  784. /package/{shell/dev/slotShowcase/index.ts → dist/shell/dev/slotShowcase/index.d.ts} +0 -0
  785. /package/{shell/footer/index.ts → dist/shell/footer/index.d.ts} +0 -0
  786. /package/{config → dist/tools}/babel/babel.config.js +0 -0
  787. /package/{tools/dist → dist/tools}/cli/commands/serve.js +0 -0
  788. /package/{tools/dist → dist/tools}/cli/utils/ensureConfigFilenameOption.js +0 -0
  789. /package/{tools/dist → dist/tools}/cli/utils/getResolvedConfigPath.js +0 -0
  790. /package/{tools/dist → dist/tools}/cli/utils/prettyPrintTitle.js +0 -0
  791. /package/{config → dist/tools}/config-helpers/createConfig.js +0 -0
  792. /package/{config → dist/tools}/config-helpers/createLintConfig.js +0 -0
  793. /package/{config → dist/tools}/config-helpers/getBaseConfig.js +0 -0
  794. /package/{config → dist/tools}/defaultConfigPaths.js +0 -0
  795. /package/{tools/dist → dist/tools}/eslint.config.js +0 -0
  796. /package/{config → dist/tools}/index.js +0 -0
  797. /package/{config → dist/tools}/jest/jest.config.js +0 -0
  798. /package/{tools/dist → dist/tools}/jest.config.js +0 -0
  799. /package/{config → dist/tools}/webpack/common-config/all/getCodeRules.js +0 -0
  800. /package/{config → dist/tools}/webpack/common-config/all/getFileLoaderRules.js +0 -0
  801. /package/{config → dist/tools}/webpack/common-config/all/getImageMinimizer.js +0 -0
  802. /package/{config → dist/tools}/webpack/common-config/site/getHtmlWebpackPlugin.js +0 -0
  803. /package/{config → dist/tools}/webpack/plugins/html-webpack-new-relic-plugin/HtmlWebpackNewRelicPlugin.js +0 -0
  804. /package/{config → dist/tools}/webpack/plugins/html-webpack-new-relic-plugin/index.js +0 -0
  805. /package/{config → dist/tools}/webpack/plugins/html-webpack-new-relic-plugin/test/fixtures/entry.js +0 -0
  806. /package/{config → dist/tools}/webpack/utils/getResolvedSiteConfigPath.js +0 -0
@@ -88,7 +88,7 @@
88
88
  *
89
89
  * https://github.com/openedx/edx-platform/blob/master/lms/djangoapps/mfe_config_api/docs/decisions/0001-mfe-config-api.rst
90
90
  *
91
- * The runtime configuration method can be enabled by supplying a mfeConfigApiUrl via one of the other
91
+ * The runtime configuration method can be enabled by supplying a runtimeConfigJsonUrl via one of the other
92
92
  * two configuration methods above.
93
93
  *
94
94
  * Runtime configuration is particularly useful if you need to supply different configurations to
@@ -99,40 +99,7 @@
99
99
  *
100
100
  * @module Config
101
101
  */
102
-
103
- import merge from 'lodash.merge';
104
- import {
105
- AppConfig,
106
- EnvironmentTypes,
107
- SiteConfig
108
- } from '../../types';
109
- import { ACTIVE_ROLES_CHANGED, CONFIG_CHANGED } from '../constants';
110
- import { publish } from '../subscriptions';
111
-
112
- let siteConfig: SiteConfig = {
113
- // Required
114
- siteId: '',
115
- baseUrl: '',
116
- siteName: '',
117
- loginUrl: '',
118
- logoutUrl: '',
119
- lmsBaseUrl: '',
120
-
121
- // Optional
122
- environment: EnvironmentTypes.PRODUCTION,
123
- apps: [],
124
- externalRoutes: [],
125
- externalLinkUrlOverrides: [],
126
- mfeConfigApiUrl: null,
127
- accessTokenCookieName: 'edx-jwt-cookie-header-payload',
128
- csrfTokenApiPath: '/csrf/api/v1/token',
129
- ignoredErrorRegex: null,
130
- languagePreferenceCookieName: 'openedx-language-preference',
131
- refreshAccessTokenApiPath: '/login_refresh',
132
- userInfoCookieName: 'edx-user-info',
133
- segmentKey: null,
134
- };
135
-
102
+ import { AppConfig, SiteConfig } from '../../types';
136
103
  /**
137
104
  * Getter for the application configuration document. This is synchronous and merely returns a
138
105
  * reference to an existing object, and is thus safe to call as often as desired.
@@ -149,10 +116,7 @@ let siteConfig: SiteConfig = {
149
116
  *
150
117
  * @returns {SiteConfig}
151
118
  */
152
- export function getSiteConfig() {
153
- return siteConfig;
154
- }
155
-
119
+ export declare function getSiteConfig(): SiteConfig;
156
120
  /**
157
121
  * Replaces the existing SiteConfig. This is not commonly used, but can be helpful for tests.
158
122
  *
@@ -168,11 +132,10 @@ export function getSiteConfig() {
168
132
  *
169
133
  * @param newConfig A replacement SiteConfig which will completely override the current SiteConfig.
170
134
  */
171
- export function setSiteConfig(newSiteConfig: SiteConfig) {
172
- siteConfig = newSiteConfig;
173
- publish(CONFIG_CHANGED);
135
+ export declare function setSiteConfig(newSiteConfig: SiteConfig): void;
136
+ interface MergeSiteConfigOptions {
137
+ limitAppMergeToConfig?: boolean;
174
138
  }
175
-
176
139
  /**
177
140
  * Merges additional configuration values into the site config returned by `getSiteConfig`. Will
178
141
  * override any values that exist with the same keys.
@@ -187,85 +150,50 @@ export function setSiteConfig(newSiteConfig: SiteConfig) {
187
150
  * which means they will be merged recursively. See https://lodash.com/docs/latest#merge for
188
151
  * documentation on the exact behavior.
189
152
  *
153
+ * Apps are merged by appId rather than array index. By default, apps in the incoming config
154
+ * that don't exist in the current config will be added.
155
+ *
156
+ * When `limitAppMergeToConfig` is true:
157
+ * - All non-app parts of the config are still merged normally
158
+ * - Only the `config` property of each existing app is merged
159
+ * - Apps in the incoming config that don't exist in the current config are ignored
160
+ *
190
161
  * @param {Object} newSiteConfig
162
+ * @param {Object} options
163
+ * @param {boolean} options.limitAppMergeToConfig - Limit app merging to only the config property of existing apps
191
164
  */
192
- export function mergeSiteConfig(newSiteConfig: Partial<SiteConfig>) {
193
- siteConfig = merge(siteConfig, newSiteConfig);
194
- publish(CONFIG_CHANGED);
195
- }
196
-
197
- const appConfigs: Record<string, AppConfig> = {};
198
-
165
+ export declare function mergeSiteConfig(newSiteConfig: Partial<SiteConfig>, options?: MergeSiteConfigOptions): void;
199
166
  /**
200
167
  * addAppConfigs finds any AppConfig objects in the apps in SiteConfig and makes their config
201
168
  * available to be used by Apps via getAppConfig(appId) or useAppConfig() functions. This is
202
169
  * used at initialization time to process any AppConfigs bundled with the site.
203
170
  */
204
- export function addAppConfigs() {
205
- const { apps } = getSiteConfig();
206
- if (!apps) return;
207
-
208
- for (const app of apps) {
209
- const { appId, config } = app;
210
- if (config !== undefined) {
211
- appConfigs[appId] = config;
212
- }
213
- }
214
-
215
- publish(CONFIG_CHANGED);
216
- }
217
-
218
- export function getAppConfig(id: string) {
219
- return appConfigs[id];
220
- }
221
-
222
- export function mergeAppConfig(id: string, newAppConfig: AppConfig) {
223
- appConfigs[id] = merge(appConfigs[id], newAppConfig);
224
- publish(CONFIG_CHANGED);
225
- }
226
-
227
- let activeRouteRoles: string[] = [];
228
-
229
- export function setActiveRouteRoles(roles: string[]) {
230
- activeRouteRoles = roles;
231
- publish(ACTIVE_ROLES_CHANGED);
232
- }
233
-
234
- export function getActiveRouteRoles() {
235
- return activeRouteRoles;
236
- }
237
-
238
- const activeWidgetRoles: Record<string, number> = {};
239
-
240
- export function addActiveWidgetRole(role: string) {
241
- if (activeWidgetRoles[role] === undefined) {
242
- activeWidgetRoles[role] = 0;
243
- }
244
- activeWidgetRoles[role] += 1;
245
- publish(ACTIVE_ROLES_CHANGED);
246
- }
247
-
248
- export function removeActiveWidgetRole(role: string) {
249
- if (activeWidgetRoles[role] !== undefined) {
250
- activeWidgetRoles[role] -= 1;
251
- }
252
- if (activeWidgetRoles[role] < 1) {
253
- delete activeWidgetRoles[role];
254
- }
255
- publish(ACTIVE_ROLES_CHANGED);
256
- }
257
-
258
- export function getActiveWidgetRoles() {
259
- return Object.entries(activeWidgetRoles)
260
- .filter(([, count]: [role: string, count: number]) => count !== undefined && count > 0)
261
- .map(([role]: [role: string, count: number]) => role);
262
- }
263
-
264
- // Gets all active roles from the route roles and widget roles.
265
- export function getActiveRoles() {
266
- return [...getActiveRouteRoles(), ...getActiveWidgetRoles()];
267
- }
268
-
171
+ export declare function addAppConfigs(): void;
172
+ export declare function getAppConfig(id: string): AppConfig;
173
+ export declare function mergeAppConfig(id: string, newAppConfig: AppConfig): void;
174
+ export declare function setActiveRouteRoles(roles: string[]): void;
175
+ export declare function getActiveRouteRoles(): string[];
176
+ export declare function addActiveWidgetRole(role: string): void;
177
+ export declare function removeActiveWidgetRole(role: string): void;
178
+ export declare function getActiveWidgetRoles(): string[];
179
+ export declare function getActiveRoles(): string[];
180
+ /**
181
+ * Collects all `provides` entries from registered apps that match the given identifier.
182
+ * This enables inter-app data sharing without frontend-base needing to understand the data shape.
183
+ *
184
+ * @param id - The namespaced provides identifier.
185
+ * @returns An array of provided data from all apps that declared data for this identifier.
186
+ */
187
+ export declare function getProvides(id: string): unknown[];
188
+ /**
189
+ * Collects and flattens all `provides` entries for the given identifier
190
+ * as strings. Each entry can be a single string or a string array; entries
191
+ * of other types are silently skipped.
192
+ *
193
+ * @param id - The namespaced provides identifier.
194
+ * @returns A flat array of strings from all apps that declared data for this identifier.
195
+ */
196
+ export declare function getProvidesAsStrings(id: string): string[];
269
197
  /**
270
198
  * Get an external link URL based on the URL provided. If the passed in URL is overridden in the
271
199
  * `externalLinkUrlOverrides` object, it will return the overridden URL. Otherwise, it will return
@@ -284,12 +212,5 @@ export function getActiveRoles() {
284
212
  * target="_blank"
285
213
  * >
286
214
  */
287
- export function getExternalLinkUrl(url: string): string {
288
- // Guard against whitespace-only strings
289
- if (typeof url !== 'string' || !url.trim()) {
290
- return '#';
291
- }
292
-
293
- const overriddenLinkUrls = getSiteConfig().externalLinkUrlOverrides ?? {};
294
- return overriddenLinkUrls[url] ?? url;
295
- }
215
+ export declare function getExternalLinkUrl(url: string): string;
216
+ export {};
@@ -0,0 +1,359 @@
1
+ /**
2
+ * #### Import members from **@edx/frontend-base**
3
+ *
4
+ * The configuration module provides utilities for working with an application's configuration
5
+ * document (SiteConfig). Configuration variables can be supplied to the
6
+ * application in three different ways. They are applied in the following order:
7
+ *
8
+ * - Site Configuration File (site.config.tsx)
9
+ * - Initialization Config Handler
10
+ * - Runtime Configuration
11
+ *
12
+ * Last one in wins, and are deep merged together. Variables with the same name defined via the
13
+ * later methods will override any defined using an earlier method. i.e., if a variable is defined
14
+ * in Runtime Configuration, that will override the same variable defined in either of the earlier
15
+ * methods. Configuration defined in a JS file will override any default values below.
16
+ *
17
+ * ##### Site Configuration File
18
+ *
19
+ * Configuration variables can be supplied in a file named site.config.tsx. This file must
20
+ * export either an Object containing configuration variables or a function. The function must
21
+ * return an Object containing configuration variables or, alternately, a promise which resolves to
22
+ * an Object.
23
+ *
24
+ * Using a function or async function allows the configuration to be resolved at runtime (because
25
+ * the function will be executed at runtime). This is not common, and the capability is included
26
+ * for the sake of flexibility.
27
+ *
28
+ * The Site Configuration File is well-suited to extensibility use cases or component overrides,
29
+ * in that the configuration file can depend on any installed JavaScript module. It is also the
30
+ * preferred way of doing build-time configuration if runtime configuration isn't used by your
31
+ * deployment of the platform.
32
+ *
33
+ * Exporting a config object:
34
+ * ```
35
+ * const siteConfig = {
36
+ * lmsBaseUrl: 'http://localhost:18000'
37
+ * };
38
+ *
39
+ * export default siteConfig;
40
+ * ```
41
+ *
42
+ * Exporting a function that returns an object:
43
+ * ```
44
+ * function getSiteConfig() {
45
+ * return {
46
+ * lmsBaseUrl: 'http://localhost:18000'
47
+ * };
48
+ * }
49
+ * ```
50
+ *
51
+ * Exporting a function that returns a promise that resolves to an object:
52
+ * ```
53
+ * function getAsyncSiteConfig() {
54
+ * return new Promise((resolve, reject) => {
55
+ * resolve({
56
+ * lmsBaseUrl: 'http://localhost:18000'
57
+ * });
58
+ * });
59
+ * }
60
+ *
61
+ * export default getAsyncSiteConfig;
62
+ * ```
63
+ *
64
+ * ##### Initialization Config Handler
65
+ *
66
+ * The configuration document can be extended by
67
+ * applications at run-time using a `config` initialization handler. Please see the Initialization
68
+ * documentation for more information on handlers and initialization phases.
69
+ *
70
+ * ```
71
+ * initialize({
72
+ * handlers: {
73
+ * config: () => {
74
+ * mergeSiteConfig({
75
+ * CUSTOM_VARIABLE: 'custom value',
76
+ * lmsBaseUrl: 'http://localhost:18001' // You can override variables, but this is uncommon.
77
+ * }, 'App config override handler');
78
+ * },
79
+ * },
80
+ * });
81
+ * ```
82
+ *
83
+ * ##### Runtime Configuration
84
+ *
85
+ * Configuration variables can also be supplied using the "runtime configuration" method, taking
86
+ * advantage of the Micro-frontend Config API in edx-platform. More information on this API can be
87
+ * found in the ADR which introduced it:
88
+ *
89
+ * https://github.com/openedx/edx-platform/blob/master/lms/djangoapps/mfe_config_api/docs/decisions/0001-mfe-config-api.rst
90
+ *
91
+ * The runtime configuration method can be enabled by supplying a runtimeConfigJsonUrl via one of the other
92
+ * two configuration methods above.
93
+ *
94
+ * Runtime configuration is particularly useful if you need to supply different configurations to
95
+ * a single deployment of a micro-frontend, for instance. It is also a perfectly valid alternative
96
+ * to build-time configuration, though it introduces an additional API call to edx-platform on MFE
97
+ * initialization.
98
+ *
99
+ *
100
+ * @module Config
101
+ */
102
+ var __rest = (this && this.__rest) || function (s, e) {
103
+ var t = {};
104
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
105
+ t[p] = s[p];
106
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
107
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
108
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
109
+ t[p[i]] = s[p[i]];
110
+ }
111
+ return t;
112
+ };
113
+ import keyBy from 'lodash.keyby';
114
+ import merge from 'lodash.merge';
115
+ import { EnvironmentTypes } from '../../types';
116
+ import { ACTIVE_ROLES_CHANGED, CONFIG_CHANGED } from '../constants';
117
+ import { publish } from '../subscriptions';
118
+ let siteConfig = {
119
+ // Required
120
+ siteId: '',
121
+ baseUrl: '',
122
+ siteName: '',
123
+ loginUrl: '',
124
+ logoutUrl: '',
125
+ lmsBaseUrl: '',
126
+ // Optional
127
+ environment: EnvironmentTypes.PRODUCTION,
128
+ apps: [],
129
+ externalRoutes: [],
130
+ externalLinkUrlOverrides: [],
131
+ runtimeConfigJsonUrl: null,
132
+ theme: {},
133
+ accessTokenCookieName: 'edx-jwt-cookie-header-payload',
134
+ csrfTokenApiPath: '/csrf/api/v1/token',
135
+ ignoredErrorRegex: null,
136
+ languagePreferenceCookieName: 'openedx-language-preference',
137
+ refreshAccessTokenApiPath: '/login_refresh',
138
+ userInfoCookieName: 'edx-user-info',
139
+ segmentKey: null,
140
+ };
141
+ /**
142
+ * Getter for the application configuration document. This is synchronous and merely returns a
143
+ * reference to an existing object, and is thus safe to call as often as desired.
144
+ *
145
+ * Example:
146
+ *
147
+ * ```
148
+ * import { getSiteConfig } from '@openedx/frontend-base';
149
+ *
150
+ * const {
151
+ * lmsBaseUrl,
152
+ * } = getSiteConfig();
153
+ * ```
154
+ *
155
+ * @returns {SiteConfig}
156
+ */
157
+ export function getSiteConfig() {
158
+ return siteConfig;
159
+ }
160
+ /**
161
+ * Replaces the existing SiteConfig. This is not commonly used, but can be helpful for tests.
162
+ *
163
+ * Example:
164
+ *
165
+ * ```
166
+ * import { setSiteConfig } from '@openedx/frontend-base';
167
+ *
168
+ * setSiteConfig({
169
+ * lmsBaseUrl, // This is overriding the ENTIRE document - this is not merged in!
170
+ * });
171
+ * ```
172
+ *
173
+ * @param newConfig A replacement SiteConfig which will completely override the current SiteConfig.
174
+ */
175
+ export function setSiteConfig(newSiteConfig) {
176
+ siteConfig = newSiteConfig;
177
+ publish(CONFIG_CHANGED);
178
+ }
179
+ /**
180
+ * Merges additional configuration values into the site config returned by `getSiteConfig`. Will
181
+ * override any values that exist with the same keys.
182
+ *
183
+ * ```
184
+ * mergeSiteConfig({
185
+ * NEW_KEY: 'new value',
186
+ * OTHER_NEW_KEY: 'other new value',
187
+ * });
188
+ *
189
+ * This function uses lodash.merge internally to merge configuration objects
190
+ * which means they will be merged recursively. See https://lodash.com/docs/latest#merge for
191
+ * documentation on the exact behavior.
192
+ *
193
+ * Apps are merged by appId rather than array index. By default, apps in the incoming config
194
+ * that don't exist in the current config will be added.
195
+ *
196
+ * When `limitAppMergeToConfig` is true:
197
+ * - All non-app parts of the config are still merged normally
198
+ * - Only the `config` property of each existing app is merged
199
+ * - Apps in the incoming config that don't exist in the current config are ignored
200
+ *
201
+ * @param {Object} newSiteConfig
202
+ * @param {Object} options
203
+ * @param {boolean} options.limitAppMergeToConfig - Limit app merging to only the config property of existing apps
204
+ */
205
+ export function mergeSiteConfig(newSiteConfig, options = {}) {
206
+ var _a;
207
+ const { limitAppMergeToConfig = false } = options;
208
+ const { apps: newApps } = newSiteConfig, restOfNewConfig = __rest(newSiteConfig, ["apps"]);
209
+ // lodash merge the top-level (non-app) part
210
+ siteConfig = merge(siteConfig, restOfNewConfig);
211
+ // if we don't have new apps, we're done
212
+ if (!(newApps === null || newApps === void 0 ? void 0 : newApps.length)) {
213
+ publish(CONFIG_CHANGED);
214
+ return;
215
+ }
216
+ // if we're doing a full merge, merge the objects
217
+ if (!limitAppMergeToConfig) {
218
+ siteConfig.apps = Object.values(merge(keyBy(siteConfig.apps || [], 'appId'), keyBy(newApps, 'appId')));
219
+ publish(CONFIG_CHANGED);
220
+ return;
221
+ }
222
+ // we're doing a config-only merge, if we don't
223
+ // have apps already, we can't update their configs
224
+ if (!((_a = siteConfig.apps) === null || _a === void 0 ? void 0 : _a.length)) {
225
+ publish(CONFIG_CHANGED);
226
+ return;
227
+ }
228
+ // handle config-only merging
229
+ const newAppsById = keyBy(newApps, 'appId');
230
+ for (const app of siteConfig.apps) {
231
+ const newApp = newAppsById[app.appId];
232
+ if (newApp === null || newApp === void 0 ? void 0 : newApp.config) {
233
+ app.config = merge(app.config, newApp.config);
234
+ }
235
+ }
236
+ publish(CONFIG_CHANGED);
237
+ }
238
+ const appConfigs = {};
239
+ /**
240
+ * addAppConfigs finds any AppConfig objects in the apps in SiteConfig and makes their config
241
+ * available to be used by Apps via getAppConfig(appId) or useAppConfig() functions. This is
242
+ * used at initialization time to process any AppConfigs bundled with the site.
243
+ */
244
+ export function addAppConfigs() {
245
+ const { apps } = getSiteConfig();
246
+ if (!apps)
247
+ return;
248
+ for (const app of apps) {
249
+ const { appId, config } = app;
250
+ if (config !== undefined) {
251
+ appConfigs[appId] = config;
252
+ }
253
+ }
254
+ publish(CONFIG_CHANGED);
255
+ }
256
+ export function getAppConfig(id) {
257
+ const { commonAppConfig } = getSiteConfig();
258
+ if (commonAppConfig === undefined) {
259
+ return appConfigs[id];
260
+ }
261
+ return merge({}, commonAppConfig, appConfigs[id]);
262
+ }
263
+ export function mergeAppConfig(id, newAppConfig) {
264
+ appConfigs[id] = merge(appConfigs[id], newAppConfig);
265
+ publish(CONFIG_CHANGED);
266
+ }
267
+ let activeRouteRoles = [];
268
+ export function setActiveRouteRoles(roles) {
269
+ activeRouteRoles = roles;
270
+ publish(ACTIVE_ROLES_CHANGED);
271
+ }
272
+ export function getActiveRouteRoles() {
273
+ return activeRouteRoles;
274
+ }
275
+ const activeWidgetRoles = {};
276
+ export function addActiveWidgetRole(role) {
277
+ var _a;
278
+ (_a = activeWidgetRoles[role]) !== null && _a !== void 0 ? _a : (activeWidgetRoles[role] = 0);
279
+ activeWidgetRoles[role] += 1;
280
+ publish(ACTIVE_ROLES_CHANGED);
281
+ }
282
+ export function removeActiveWidgetRole(role) {
283
+ if (activeWidgetRoles[role] !== undefined) {
284
+ activeWidgetRoles[role] -= 1;
285
+ }
286
+ if (activeWidgetRoles[role] < 1) {
287
+ delete activeWidgetRoles[role];
288
+ }
289
+ publish(ACTIVE_ROLES_CHANGED);
290
+ }
291
+ export function getActiveWidgetRoles() {
292
+ return Object.entries(activeWidgetRoles)
293
+ .filter(([, count]) => count !== undefined && count > 0)
294
+ .map(([role]) => role);
295
+ }
296
+ // Gets all active roles from the route roles and widget roles.
297
+ export function getActiveRoles() {
298
+ return [...getActiveRouteRoles(), ...getActiveWidgetRoles()];
299
+ }
300
+ /**
301
+ * Collects all `provides` entries from registered apps that match the given identifier.
302
+ * This enables inter-app data sharing without frontend-base needing to understand the data shape.
303
+ *
304
+ * @param id - The namespaced provides identifier.
305
+ * @returns An array of provided data from all apps that declared data for this identifier.
306
+ */
307
+ export function getProvides(id) {
308
+ const { apps } = getSiteConfig();
309
+ if (!apps)
310
+ return [];
311
+ const results = [];
312
+ for (const app of apps) {
313
+ if (app.provides && app.provides[id] !== undefined) {
314
+ results.push(app.provides[id]);
315
+ }
316
+ }
317
+ return results;
318
+ }
319
+ /**
320
+ * Collects and flattens all `provides` entries for the given identifier
321
+ * as strings. Each entry can be a single string or a string array; entries
322
+ * of other types are silently skipped.
323
+ *
324
+ * @param id - The namespaced provides identifier.
325
+ * @returns A flat array of strings from all apps that declared data for this identifier.
326
+ */
327
+ export function getProvidesAsStrings(id) {
328
+ return getProvides(id)
329
+ .filter((data) => typeof data === 'string' || Array.isArray(data))
330
+ .flat();
331
+ }
332
+ /**
333
+ * Get an external link URL based on the URL provided. If the passed in URL is overridden in the
334
+ * `externalLinkUrlOverrides` object, it will return the overridden URL. Otherwise, it will return
335
+ * the provided URL.
336
+ *
337
+ *
338
+ * @param {string} url - The default URL.
339
+ * @returns {string} - The external link URL. Defaults to the input URL if not found in the
340
+ * `externalLinkUrlOverrides` object. If the input URL is invalid, '#' is returned.
341
+ *
342
+ * @example
343
+ * import { getExternalLinkUrl } from '@openedx/frontend-base';
344
+ *
345
+ * <Hyperlink
346
+ * destination={getExternalLinkUrl(data.helpLink)}
347
+ * target="_blank"
348
+ * >
349
+ */
350
+ export function getExternalLinkUrl(url) {
351
+ var _a, _b;
352
+ // Guard against whitespace-only strings
353
+ if (typeof url !== 'string' || !url.trim()) {
354
+ return '#';
355
+ }
356
+ const overriddenLinkUrls = (_a = getSiteConfig().externalLinkUrlOverrides) !== null && _a !== void 0 ? _a : {};
357
+ return (_b = overriddenLinkUrls[url]) !== null && _b !== void 0 ? _b : url;
358
+ }
359
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../runtime/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoGG;;;;;;;;;;;;AAEH,OAAO,KAAK,MAAM,cAAc,CAAC;AACjC,OAAO,KAAK,MAAM,cAAc,CAAC;AACjC,OAAO,EAEL,gBAAgB,EAEjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,IAAI,UAAU,GAAe;IAC3B,WAAW;IACX,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,EAAE;IAEd,WAAW;IACX,WAAW,EAAE,gBAAgB,CAAC,UAAU;IACxC,IAAI,EAAE,EAAE;IACR,cAAc,EAAE,EAAE;IAClB,wBAAwB,EAAE,EAAE;IAC5B,oBAAoB,EAAE,IAAI;IAC1B,KAAK,EAAE,EAAE;IACT,qBAAqB,EAAE,+BAA+B;IACtD,gBAAgB,EAAE,oBAAoB;IACtC,iBAAiB,EAAE,IAAI;IACvB,4BAA4B,EAAE,6BAA6B;IAC3D,yBAAyB,EAAE,gBAAgB;IAC3C,kBAAkB,EAAE,eAAe;IACnC,UAAU,EAAE,IAAI;CACjB,CAAC;AAEF;;;;;;;;;;;;;;;IAeI;AACJ,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,aAAa,CAAC,aAAyB;IACrD,UAAU,GAAG,aAAa,CAAC;IAC3B,OAAO,CAAC,cAAc,CAAC,CAAC;AAC1B,CAAC;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,eAAe,CAC7B,aAAkC,EAClC,UAAkC,EAAE;;IAEpC,MAAM,EAAE,qBAAqB,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAClD,MAAM,EAAE,IAAI,EAAE,OAAO,KAAyB,aAAa,EAAjC,eAAe,UAAK,aAAa,EAArD,QAAqC,CAAgB,CAAC;IAE5D,4CAA4C;IAC5C,UAAU,GAAG,KAAK,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAEhD,wCAAwC;IACxC,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAA,EAAE,CAAC;QACrB,OAAO,CAAC,cAAc,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IAED,iDAAiD;IACjD,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CACnC,KAAK,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,EACrC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CACxB,CAAC,CAAC;QACH,OAAO,CAAC,cAAc,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IAED,+CAA+C;IAC/C,mDAAmD;IACnD,IAAI,CAAC,CAAA,MAAA,UAAU,CAAC,IAAI,0CAAE,MAAM,CAAA,EAAE,CAAC;QAC7B,OAAO,CAAC,cAAc,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IAED,6BAA6B;IAC7B,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,EAAE,CAAC;YACnB,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO,CAAC,cAAc,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,GAA8B,EAAE,CAAC;AAEjD;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,EAAE,CAAC;IACjC,IAAI,CAAC,IAAI;QAAE,OAAO;IAElB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;QAC9B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,UAAU,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,cAAc,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,MAAM,EAAE,eAAe,EAAE,GAAG,aAAa,EAAE,CAAC;IAC5C,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,UAAU,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,KAAK,CAAC,EAAE,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAU,EAAE,YAAuB;IAChE,UAAU,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;IACrD,OAAO,CAAC,cAAc,CAAC,CAAC;AAC1B,CAAC;AAED,IAAI,gBAAgB,GAAa,EAAE,CAAC;AAEpC,MAAM,UAAU,mBAAmB,CAAC,KAAe;IACjD,gBAAgB,GAAG,KAAK,CAAC;IACzB,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,MAAM,iBAAiB,GAA2B,EAAE,CAAC;AAErD,MAAM,UAAU,mBAAmB,CAAC,IAAY;;IAC9C,MAAA,iBAAiB,CAAC,IAAI,qCAAtB,iBAAiB,CAAC,IAAI,IAAM,CAAC,EAAC;IAC9B,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QAC1C,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC;SACrC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAgC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,CAAC;SACtF,GAAG,CAAC,CAAC,CAAC,IAAI,CAAgC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAC1D,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,GAAG,mBAAmB,EAAE,EAAE,GAAG,oBAAoB,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,EAAU;IACpC,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,EAAE,CAAC;IACjC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,MAAM,OAAO,GAAc,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAU;IAC7C,OAAO,WAAW,CAAC,EAAE,CAAC;SACnB,MAAM,CAAC,CAAC,IAAI,EAA6B,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC5F,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;;IAC5C,wCAAwC;IACxC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QAC3C,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,kBAAkB,GAAG,MAAA,aAAa,EAAE,CAAC,wBAAwB,mCAAI,EAAE,CAAC;IAC1E,OAAO,MAAA,kBAAkB,CAAC,GAAG,CAAC,mCAAI,GAAG,CAAC;AACxC,CAAC","sourcesContent":["/**\n * #### Import members from **@edx/frontend-base**\n *\n * The configuration module provides utilities for working with an application's configuration\n * document (SiteConfig). Configuration variables can be supplied to the\n * application in three different ways. They are applied in the following order:\n *\n * - Site Configuration File (site.config.tsx)\n * - Initialization Config Handler\n * - Runtime Configuration\n *\n * Last one in wins, and are deep merged together. Variables with the same name defined via the\n * later methods will override any defined using an earlier method. i.e., if a variable is defined\n * in Runtime Configuration, that will override the same variable defined in either of the earlier\n * methods. Configuration defined in a JS file will override any default values below.\n *\n * ##### Site Configuration File\n *\n * Configuration variables can be supplied in a file named site.config.tsx. This file must\n * export either an Object containing configuration variables or a function. The function must\n * return an Object containing configuration variables or, alternately, a promise which resolves to\n * an Object.\n *\n * Using a function or async function allows the configuration to be resolved at runtime (because\n * the function will be executed at runtime). This is not common, and the capability is included\n * for the sake of flexibility.\n *\n * The Site Configuration File is well-suited to extensibility use cases or component overrides,\n * in that the configuration file can depend on any installed JavaScript module. It is also the\n * preferred way of doing build-time configuration if runtime configuration isn't used by your\n * deployment of the platform.\n *\n * Exporting a config object:\n * ```\n * const siteConfig = {\n * lmsBaseUrl: 'http://localhost:18000'\n * };\n *\n * export default siteConfig;\n * ```\n *\n * Exporting a function that returns an object:\n * ```\n * function getSiteConfig() {\n * return {\n * lmsBaseUrl: 'http://localhost:18000'\n * };\n * }\n * ```\n *\n * Exporting a function that returns a promise that resolves to an object:\n * ```\n * function getAsyncSiteConfig() {\n * return new Promise((resolve, reject) => {\n * resolve({\n * lmsBaseUrl: 'http://localhost:18000'\n * });\n * });\n * }\n *\n * export default getAsyncSiteConfig;\n * ```\n *\n * ##### Initialization Config Handler\n *\n * The configuration document can be extended by\n * applications at run-time using a `config` initialization handler. Please see the Initialization\n * documentation for more information on handlers and initialization phases.\n *\n * ```\n * initialize({\n * handlers: {\n * config: () => {\n * mergeSiteConfig({\n * CUSTOM_VARIABLE: 'custom value',\n * lmsBaseUrl: 'http://localhost:18001' // You can override variables, but this is uncommon.\n * }, 'App config override handler');\n * },\n * },\n * });\n * ```\n *\n * ##### Runtime Configuration\n *\n * Configuration variables can also be supplied using the \"runtime configuration\" method, taking\n * advantage of the Micro-frontend Config API in edx-platform. More information on this API can be\n * found in the ADR which introduced it:\n *\n * https://github.com/openedx/edx-platform/blob/master/lms/djangoapps/mfe_config_api/docs/decisions/0001-mfe-config-api.rst\n *\n * The runtime configuration method can be enabled by supplying a runtimeConfigJsonUrl via one of the other\n * two configuration methods above.\n *\n * Runtime configuration is particularly useful if you need to supply different configurations to\n * a single deployment of a micro-frontend, for instance. It is also a perfectly valid alternative\n * to build-time configuration, though it introduces an additional API call to edx-platform on MFE\n * initialization.\n *\n *\n * @module Config\n */\n\nimport keyBy from 'lodash.keyby';\nimport merge from 'lodash.merge';\nimport {\n AppConfig,\n EnvironmentTypes,\n SiteConfig\n} from '../../types';\nimport { ACTIVE_ROLES_CHANGED, CONFIG_CHANGED } from '../constants';\nimport { publish } from '../subscriptions';\n\nlet siteConfig: SiteConfig = {\n // Required\n siteId: '',\n baseUrl: '',\n siteName: '',\n loginUrl: '',\n logoutUrl: '',\n lmsBaseUrl: '',\n\n // Optional\n environment: EnvironmentTypes.PRODUCTION,\n apps: [],\n externalRoutes: [],\n externalLinkUrlOverrides: [],\n runtimeConfigJsonUrl: null,\n theme: {},\n accessTokenCookieName: 'edx-jwt-cookie-header-payload',\n csrfTokenApiPath: '/csrf/api/v1/token',\n ignoredErrorRegex: null,\n languagePreferenceCookieName: 'openedx-language-preference',\n refreshAccessTokenApiPath: '/login_refresh',\n userInfoCookieName: 'edx-user-info',\n segmentKey: null,\n};\n\n/**\n * Getter for the application configuration document. This is synchronous and merely returns a\n * reference to an existing object, and is thus safe to call as often as desired.\n *\n * Example:\n *\n * ```\n * import { getSiteConfig } from '@openedx/frontend-base';\n *\n * const {\n * lmsBaseUrl,\n * } = getSiteConfig();\n * ```\n *\n * @returns {SiteConfig}\n */\nexport function getSiteConfig() {\n return siteConfig;\n}\n\n/**\n * Replaces the existing SiteConfig. This is not commonly used, but can be helpful for tests.\n *\n * Example:\n *\n * ```\n * import { setSiteConfig } from '@openedx/frontend-base';\n *\n * setSiteConfig({\n * lmsBaseUrl, // This is overriding the ENTIRE document - this is not merged in!\n * });\n * ```\n *\n * @param newConfig A replacement SiteConfig which will completely override the current SiteConfig.\n */\nexport function setSiteConfig(newSiteConfig: SiteConfig) {\n siteConfig = newSiteConfig;\n publish(CONFIG_CHANGED);\n}\n\ninterface MergeSiteConfigOptions {\n limitAppMergeToConfig?: boolean,\n}\n\n/**\n * Merges additional configuration values into the site config returned by `getSiteConfig`. Will\n * override any values that exist with the same keys.\n *\n * ```\n * mergeSiteConfig({\n * NEW_KEY: 'new value',\n * OTHER_NEW_KEY: 'other new value',\n * });\n *\n * This function uses lodash.merge internally to merge configuration objects\n * which means they will be merged recursively. See https://lodash.com/docs/latest#merge for\n * documentation on the exact behavior.\n *\n * Apps are merged by appId rather than array index. By default, apps in the incoming config\n * that don't exist in the current config will be added.\n *\n * When `limitAppMergeToConfig` is true:\n * - All non-app parts of the config are still merged normally\n * - Only the `config` property of each existing app is merged\n * - Apps in the incoming config that don't exist in the current config are ignored\n *\n * @param {Object} newSiteConfig\n * @param {Object} options\n * @param {boolean} options.limitAppMergeToConfig - Limit app merging to only the config property of existing apps\n */\nexport function mergeSiteConfig(\n newSiteConfig: Partial<SiteConfig>,\n options: MergeSiteConfigOptions = {}\n) {\n const { limitAppMergeToConfig = false } = options;\n const { apps: newApps, ...restOfNewConfig } = newSiteConfig;\n\n // lodash merge the top-level (non-app) part\n siteConfig = merge(siteConfig, restOfNewConfig);\n\n // if we don't have new apps, we're done\n if (!newApps?.length) {\n publish(CONFIG_CHANGED);\n return;\n }\n\n // if we're doing a full merge, merge the objects\n if (!limitAppMergeToConfig) {\n siteConfig.apps = Object.values(merge(\n keyBy(siteConfig.apps || [], 'appId'),\n keyBy(newApps, 'appId')\n ));\n publish(CONFIG_CHANGED);\n return;\n }\n\n // we're doing a config-only merge, if we don't\n // have apps already, we can't update their configs\n if (!siteConfig.apps?.length) {\n publish(CONFIG_CHANGED);\n return;\n }\n\n // handle config-only merging\n const newAppsById = keyBy(newApps, 'appId');\n for (const app of siteConfig.apps) {\n const newApp = newAppsById[app.appId];\n if (newApp?.config) {\n app.config = merge(app.config, newApp.config);\n }\n }\n\n publish(CONFIG_CHANGED);\n}\n\nconst appConfigs: Record<string, AppConfig> = {};\n\n/**\n * addAppConfigs finds any AppConfig objects in the apps in SiteConfig and makes their config\n * available to be used by Apps via getAppConfig(appId) or useAppConfig() functions. This is\n * used at initialization time to process any AppConfigs bundled with the site.\n */\nexport function addAppConfigs() {\n const { apps } = getSiteConfig();\n if (!apps) return;\n\n for (const app of apps) {\n const { appId, config } = app;\n if (config !== undefined) {\n appConfigs[appId] = config;\n }\n }\n\n publish(CONFIG_CHANGED);\n}\n\nexport function getAppConfig(id: string) {\n const { commonAppConfig } = getSiteConfig();\n if (commonAppConfig === undefined) {\n return appConfigs[id];\n }\n return merge({}, commonAppConfig, appConfigs[id]);\n}\n\nexport function mergeAppConfig(id: string, newAppConfig: AppConfig) {\n appConfigs[id] = merge(appConfigs[id], newAppConfig);\n publish(CONFIG_CHANGED);\n}\n\nlet activeRouteRoles: string[] = [];\n\nexport function setActiveRouteRoles(roles: string[]) {\n activeRouteRoles = roles;\n publish(ACTIVE_ROLES_CHANGED);\n}\n\nexport function getActiveRouteRoles() {\n return activeRouteRoles;\n}\n\nconst activeWidgetRoles: Record<string, number> = {};\n\nexport function addActiveWidgetRole(role: string) {\n activeWidgetRoles[role] ??= 0;\n activeWidgetRoles[role] += 1;\n publish(ACTIVE_ROLES_CHANGED);\n}\n\nexport function removeActiveWidgetRole(role: string) {\n if (activeWidgetRoles[role] !== undefined) {\n activeWidgetRoles[role] -= 1;\n }\n if (activeWidgetRoles[role] < 1) {\n delete activeWidgetRoles[role];\n }\n publish(ACTIVE_ROLES_CHANGED);\n}\n\nexport function getActiveWidgetRoles() {\n return Object.entries(activeWidgetRoles)\n .filter(([, count]: [role: string, count: number]) => count !== undefined && count > 0)\n .map(([role]: [role: string, count: number]) => role);\n}\n\n// Gets all active roles from the route roles and widget roles.\nexport function getActiveRoles() {\n return [...getActiveRouteRoles(), ...getActiveWidgetRoles()];\n}\n\n/**\n * Collects all `provides` entries from registered apps that match the given identifier.\n * This enables inter-app data sharing without frontend-base needing to understand the data shape.\n *\n * @param id - The namespaced provides identifier.\n * @returns An array of provided data from all apps that declared data for this identifier.\n */\nexport function getProvides(id: string): unknown[] {\n const { apps } = getSiteConfig();\n if (!apps) return [];\n\n const results: unknown[] = [];\n for (const app of apps) {\n if (app.provides && app.provides[id] !== undefined) {\n results.push(app.provides[id]);\n }\n }\n return results;\n}\n\n/**\n * Collects and flattens all `provides` entries for the given identifier\n * as strings. Each entry can be a single string or a string array; entries\n * of other types are silently skipped.\n *\n * @param id - The namespaced provides identifier.\n * @returns A flat array of strings from all apps that declared data for this identifier.\n */\nexport function getProvidesAsStrings(id: string): string[] {\n return getProvides(id)\n .filter((data): data is string | string[] => typeof data === 'string' || Array.isArray(data))\n .flat();\n}\n\n/**\n * Get an external link URL based on the URL provided. If the passed in URL is overridden in the\n * `externalLinkUrlOverrides` object, it will return the overridden URL. Otherwise, it will return\n * the provided URL.\n *\n *\n * @param {string} url - The default URL.\n * @returns {string} - The external link URL. Defaults to the input URL if not found in the\n * `externalLinkUrlOverrides` object. If the input URL is invalid, '#' is returned.\n *\n * @example\n * import { getExternalLinkUrl } from '@openedx/frontend-base';\n *\n * <Hyperlink\n * destination={getExternalLinkUrl(data.helpLink)}\n * target=\"_blank\"\n * >\n */\nexport function getExternalLinkUrl(url: string): string {\n // Guard against whitespace-only strings\n if (typeof url !== 'string' || !url.trim()) {\n return '#';\n }\n\n const overriddenLinkUrls = getSiteConfig().externalLinkUrlOverrides ?? {};\n return overriddenLinkUrls[url] ?? url;\n}\n"]}
@@ -0,0 +1,57 @@
1
+ /** @constant */
2
+ export declare const SITE_TOPIC = "APP";
3
+ export declare const SITE_PUBSUB_INITIALIZED = "APP.PUBSUB_INITIALIZED";
4
+ /**
5
+ * Event published when the application initialization sequence has finished loading any dynamic
6
+ * configuration setup in a custom config handler.
7
+ *
8
+ * @event
9
+ */
10
+ export declare const SITE_CONFIG_INITIALIZED = "APP.CONFIG_INITIALIZED";
11
+ /**
12
+ * Event published when the application initialization sequence has finished determining the user's
13
+ * authentication state, creating an authenticated API client, and executing auth handlers.
14
+ *
15
+ * @event
16
+ */
17
+ export declare const SITE_AUTH_INITIALIZED = "APP.AUTH_INITIALIZED";
18
+ /**
19
+ * Event published when the application initialization sequence has finished initializing
20
+ * internationalization and executing any i18n handlers.
21
+ *
22
+ * @event
23
+ */
24
+ export declare const SITE_I18N_INITIALIZED = "APP.I18N_INITIALIZED";
25
+ /**
26
+ * Event published when the application initialization sequence has finished initializing the
27
+ * logging service and executing any logging handlers.
28
+ *
29
+ * @event
30
+ */
31
+ export declare const SITE_LOGGING_INITIALIZED = "APP.LOGGING_INITIALIZED";
32
+ /**
33
+ * Event published when the application initialization sequence has finished initializing the
34
+ * analytics service and executing any analytics handlers.
35
+ *
36
+ * @event
37
+ */
38
+ export declare const SITE_ANALYTICS_INITIALIZED = "APP.ANALYTICS_INITIALIZED";
39
+ /**
40
+ * Event published when the application initialization sequence has finished. Applications should
41
+ * subscribe to this event and start rendering the UI when it has fired.
42
+ *
43
+ * @event
44
+ */
45
+ export declare const SITE_READY = "APP.READY";
46
+ /**
47
+ * Event published when the application initialization sequence has aborted. This is frequently
48
+ * used to show an error page when an initialization error has occurred.
49
+ *
50
+ * @see {@link module:React~ErrorPage}
51
+ * @event
52
+ */
53
+ export declare const SITE_INIT_ERROR = "APP.INIT_ERROR";
54
+ /** @constant */
55
+ export declare const CONFIG_TOPIC = "CONFIG";
56
+ export declare const CONFIG_CHANGED = "CONFIG.CHANGED";
57
+ export declare const ACTIVE_ROLES_CHANGED = "ACTIVE_ROLES_CHANGED";