@openedx/frontend-base 1.0.0-alpha.4 → 1.0.0-alpha.41

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 (813) 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 +370 -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 +20 -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 +16 -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 +22 -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 +11 -0
  198. package/dist/runtime/slots/Slot.js +37 -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 +11 -0
  204. package/dist/runtime/slots/hooks.js +19 -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 +9 -0
  212. package/dist/runtime/slots/layout/hooks.js +52 -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 +65 -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 +12 -0
  235. package/dist/runtime/slots/widget/hooks.js +84 -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 +181 -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 +57 -72
  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/dist/shell/babel.config.d.ts +2 -0
  300. package/{shell → dist/shell}/babel.config.js +2 -1
  301. package/dist/shell/babel.config.js.map +1 -0
  302. package/dist/shell/constants.d.ts +2 -0
  303. package/dist/shell/constants.js +3 -0
  304. package/dist/shell/constants.js.map +1 -0
  305. package/dist/shell/dev/devFooter/app.d.ts +3 -0
  306. package/dist/shell/dev/devFooter/app.js +36 -0
  307. package/dist/shell/dev/devFooter/app.js.map +1 -0
  308. package/dist/shell/dev/devFooter/index.js +2 -0
  309. package/dist/shell/dev/devFooter/index.js.map +1 -0
  310. package/dist/shell/dev/devHeader/BarContext.d.ts +7 -0
  311. package/dist/shell/dev/devHeader/BarContext.js +8 -0
  312. package/dist/shell/dev/devHeader/BarContext.js.map +1 -0
  313. package/dist/shell/dev/devHeader/BarLink.d.ts +1 -0
  314. package/dist/shell/dev/devHeader/BarLink.js +10 -0
  315. package/dist/shell/dev/devHeader/BarLink.js.map +1 -0
  316. package/dist/shell/dev/devHeader/BarProvider.d.ts +6 -0
  317. package/dist/shell/dev/devHeader/BarProvider.js +16 -0
  318. package/dist/shell/dev/devHeader/BarProvider.js.map +1 -0
  319. package/dist/shell/dev/devHeader/CoursesLink.d.ts +1 -0
  320. package/dist/shell/dev/devHeader/CoursesLink.js +10 -0
  321. package/dist/shell/dev/devHeader/CoursesLink.js.map +1 -0
  322. package/dist/shell/dev/devHeader/FooContext.d.ts +7 -0
  323. package/dist/shell/dev/devHeader/FooContext.js +8 -0
  324. package/dist/shell/dev/devHeader/FooContext.js.map +1 -0
  325. package/dist/shell/dev/devHeader/FooLink.d.ts +1 -0
  326. package/dist/shell/dev/devHeader/FooLink.js +10 -0
  327. package/dist/shell/dev/devHeader/FooLink.js.map +1 -0
  328. package/dist/shell/dev/devHeader/FooProvider.d.ts +6 -0
  329. package/dist/shell/dev/devHeader/FooProvider.js +16 -0
  330. package/dist/shell/dev/devHeader/FooProvider.js.map +1 -0
  331. package/dist/shell/dev/devHeader/app.d.ts +3 -0
  332. package/dist/shell/dev/devHeader/app.js +34 -0
  333. package/dist/shell/dev/devHeader/app.js.map +1 -0
  334. package/dist/shell/dev/devHeader/index.js +2 -0
  335. package/dist/shell/dev/devHeader/index.js.map +1 -0
  336. package/dist/shell/dev/devHeader/providers.d.ts +3 -0
  337. package/dist/shell/dev/devHeader/providers.js +8 -0
  338. package/dist/shell/dev/devHeader/providers.js.map +1 -0
  339. package/dist/shell/dev/devHome/HomePage.d.ts +1 -0
  340. package/dist/shell/dev/devHome/HomePage.js +14 -0
  341. package/dist/shell/dev/devHome/HomePage.js.map +1 -0
  342. package/dist/shell/dev/devHome/app.d.ts +3 -0
  343. package/dist/shell/dev/devHome/app.js +15 -0
  344. package/dist/shell/dev/devHome/app.js.map +1 -0
  345. package/dist/shell/dev/devHome/index.js +2 -0
  346. package/dist/shell/dev/devHome/index.js.map +1 -0
  347. package/dist/shell/dev/devHome/messages.d.ts +8 -0
  348. package/dist/shell/dev/devHome/messages.js +10 -0
  349. package/dist/shell/dev/devHome/messages.js.map +1 -0
  350. package/dist/shell/dev/devUser/app.d.ts +3 -0
  351. package/dist/shell/dev/devUser/app.js +22 -0
  352. package/dist/shell/dev/devUser/app.js.map +1 -0
  353. package/dist/shell/dev/devUser/index.js +2 -0
  354. package/dist/shell/dev/devUser/index.js.map +1 -0
  355. package/dist/shell/dev/index.js +6 -0
  356. package/dist/shell/dev/index.js.map +1 -0
  357. package/dist/shell/dev/slotShowcase/HorizontalSlotLayout.d.ts +1 -0
  358. package/dist/shell/dev/slotShowcase/HorizontalSlotLayout.js +8 -0
  359. package/dist/shell/dev/slotShowcase/HorizontalSlotLayout.js.map +1 -0
  360. package/dist/shell/dev/slotShowcase/LayoutWithOptions.d.ts +1 -0
  361. package/dist/shell/dev/slotShowcase/LayoutWithOptions.js +9 -0
  362. package/dist/shell/dev/slotShowcase/LayoutWithOptions.js.map +1 -0
  363. package/dist/shell/dev/slotShowcase/SlotShowcase.scss +50 -0
  364. package/dist/shell/dev/slotShowcase/SlotShowcasePage.d.ts +2 -0
  365. package/dist/shell/dev/slotShowcase/SlotShowcasePage.js +17 -0
  366. package/dist/shell/dev/slotShowcase/SlotShowcasePage.js.map +1 -0
  367. package/dist/shell/dev/slotShowcase/ToggleByRoleLayout.d.ts +1 -0
  368. package/dist/shell/dev/slotShowcase/ToggleByRoleLayout.js +11 -0
  369. package/dist/shell/dev/slotShowcase/ToggleByRoleLayout.js.map +1 -0
  370. package/dist/shell/dev/slotShowcase/WidgetWithOptions.d.ts +1 -0
  371. package/dist/shell/dev/slotShowcase/WidgetWithOptions.js +8 -0
  372. package/dist/shell/dev/slotShowcase/WidgetWithOptions.js.map +1 -0
  373. package/dist/shell/dev/slotShowcase/app.d.ts +3 -0
  374. package/dist/shell/dev/slotShowcase/app.js +372 -0
  375. package/dist/shell/dev/slotShowcase/app.js.map +1 -0
  376. package/dist/shell/dev/slotShowcase/index.js +2 -0
  377. package/dist/shell/dev/slotShowcase/index.js.map +1 -0
  378. package/dist/shell/footer/CenterLinks.d.ts +1 -0
  379. package/dist/shell/footer/CenterLinks.js +7 -0
  380. package/dist/shell/footer/CenterLinks.js.map +1 -0
  381. package/dist/shell/footer/CopyrightNotice.d.ts +10 -0
  382. package/dist/shell/footer/CopyrightNotice.js +10 -0
  383. package/dist/shell/footer/CopyrightNotice.js.map +1 -0
  384. package/dist/shell/footer/Footer.d.ts +1 -0
  385. package/dist/shell/footer/Footer.js +12 -0
  386. package/dist/shell/footer/Footer.js.map +1 -0
  387. package/dist/shell/footer/LabeledLinkColumn.d.ts +1 -0
  388. package/dist/shell/footer/LabeledLinkColumn.js +11 -0
  389. package/dist/shell/footer/LabeledLinkColumn.js.map +1 -0
  390. package/dist/shell/footer/LanguageMenu.d.ts +1 -0
  391. package/dist/shell/footer/LanguageMenu.js +16 -0
  392. package/dist/shell/footer/LanguageMenu.js.map +1 -0
  393. package/dist/shell/footer/LanguageMenuItem.d.ts +8 -0
  394. package/dist/shell/footer/LanguageMenuItem.js +11 -0
  395. package/dist/shell/footer/LanguageMenuItem.js.map +1 -0
  396. package/dist/shell/footer/LeftLinks.d.ts +1 -0
  397. package/dist/shell/footer/LeftLinks.js +7 -0
  398. package/dist/shell/footer/LeftLinks.js.map +1 -0
  399. package/dist/shell/footer/LegalNotices.d.ts +1 -0
  400. package/dist/shell/footer/LegalNotices.js +10 -0
  401. package/dist/shell/footer/LegalNotices.js.map +1 -0
  402. package/dist/shell/footer/PoweredBy.d.ts +1 -0
  403. package/dist/shell/footer/PoweredBy.js +9 -0
  404. package/dist/shell/footer/PoweredBy.js.map +1 -0
  405. package/dist/shell/footer/RevealLinks.d.ts +1 -0
  406. package/dist/shell/footer/RevealLinks.js +16 -0
  407. package/dist/shell/footer/RevealLinks.js.map +1 -0
  408. package/dist/shell/footer/RightLinks.d.ts +1 -0
  409. package/dist/shell/footer/RightLinks.js +7 -0
  410. package/dist/shell/footer/RightLinks.js.map +1 -0
  411. package/dist/shell/footer/app.d.ts +3 -0
  412. package/dist/shell/footer/app.js +59 -0
  413. package/dist/shell/footer/app.js.map +1 -0
  414. package/dist/shell/footer/data/api.d.ts +1 -0
  415. package/dist/shell/footer/data/api.js +45 -0
  416. package/dist/shell/footer/data/api.js.map +1 -0
  417. package/dist/shell/footer/index.js +3 -0
  418. package/dist/shell/footer/index.js.map +1 -0
  419. package/dist/shell/header/AuthenticatedMenu.d.ts +5 -0
  420. package/dist/shell/header/AuthenticatedMenu.js +9 -0
  421. package/dist/shell/header/AuthenticatedMenu.js.map +1 -0
  422. package/dist/shell/header/Header.d.ts +1 -0
  423. package/dist/shell/header/Header.js +8 -0
  424. package/dist/shell/header/Header.js.map +1 -0
  425. package/dist/shell/header/anonymous-menu/AnonymousMenu.d.ts +5 -0
  426. package/dist/shell/header/anonymous-menu/AnonymousMenu.js +7 -0
  427. package/dist/shell/header/anonymous-menu/AnonymousMenu.js.map +1 -0
  428. package/dist/shell/header/anonymous-menu/LoginButton.d.ts +3 -0
  429. package/dist/shell/header/anonymous-menu/LoginButton.js +22 -0
  430. package/dist/shell/header/anonymous-menu/LoginButton.js.map +1 -0
  431. package/dist/shell/header/anonymous-menu/RegisterButton.d.ts +3 -0
  432. package/dist/shell/header/anonymous-menu/RegisterButton.js +22 -0
  433. package/dist/shell/header/anonymous-menu/RegisterButton.js.map +1 -0
  434. package/dist/shell/header/app.d.ts +4 -0
  435. package/dist/shell/header/app.js +132 -0
  436. package/dist/shell/header/app.js.map +1 -0
  437. package/dist/shell/header/app.scss +14 -0
  438. package/dist/shell/header/constants.d.ts +2 -0
  439. package/dist/shell/header/constants.js +3 -0
  440. package/dist/shell/header/constants.js.map +1 -0
  441. package/dist/shell/header/course-navigation-bar/CourseTabsNavigation.d.ts +3 -0
  442. package/dist/shell/header/course-navigation-bar/CourseTabsNavigation.js +62 -0
  443. package/dist/shell/header/course-navigation-bar/CourseTabsNavigation.js.map +1 -0
  444. package/dist/shell/header/course-navigation-bar/course-tabs-navigation.scss +7 -0
  445. package/dist/shell/header/course-navigation-bar/data/service.d.ts +9 -0
  446. package/dist/shell/header/course-navigation-bar/data/service.js +27 -0
  447. package/dist/shell/header/course-navigation-bar/data/service.js.map +1 -0
  448. package/dist/shell/header/course-navigation-bar/messages.d.ts +8 -0
  449. package/dist/shell/header/course-navigation-bar/messages.js +10 -0
  450. package/dist/shell/header/course-navigation-bar/messages.js.map +1 -0
  451. package/dist/shell/header/course-navigation-bar/utils.d.ts +2 -0
  452. package/dist/shell/header/course-navigation-bar/utils.js +27 -0
  453. package/dist/shell/header/course-navigation-bar/utils.js.map +1 -0
  454. package/dist/shell/header/desktop/DesktopLayout.d.ts +1 -0
  455. package/dist/shell/header/desktop/DesktopLayout.js +10 -0
  456. package/dist/shell/header/desktop/DesktopLayout.js.map +1 -0
  457. package/dist/shell/header/desktop/PrimaryNavLinks.d.ts +1 -0
  458. package/dist/shell/header/desktop/PrimaryNavLinks.js +7 -0
  459. package/dist/shell/header/desktop/PrimaryNavLinks.js.map +1 -0
  460. package/dist/shell/header/desktop/SecondaryNavLinks.d.ts +1 -0
  461. package/dist/shell/header/desktop/SecondaryNavLinks.js +7 -0
  462. package/dist/shell/header/desktop/SecondaryNavLinks.js.map +1 -0
  463. package/{shell/header/index.ts → dist/shell/header/index.d.ts} +1 -0
  464. package/dist/shell/header/index.js +4 -0
  465. package/dist/shell/header/index.js.map +1 -0
  466. package/dist/shell/header/mobile/MobileLayout.d.ts +1 -0
  467. package/dist/shell/header/mobile/MobileLayout.js +17 -0
  468. package/dist/shell/header/mobile/MobileLayout.js.map +1 -0
  469. package/dist/shell/header/mobile/MobileNavLinks.d.ts +1 -0
  470. package/dist/shell/header/mobile/MobileNavLinks.js +7 -0
  471. package/dist/shell/header/mobile/MobileNavLinks.js.map +1 -0
  472. package/{shell/index.ts → dist/shell/index.d.ts} +2 -1
  473. package/dist/shell/index.js +9 -0
  474. package/dist/shell/index.js.map +1 -0
  475. package/dist/shell/jest.config.d.ts +15 -0
  476. package/{tools/dist/jest → dist/shell}/jest.config.js +12 -10
  477. package/dist/shell/jest.config.js.map +1 -0
  478. package/dist/shell/layer-order.scss +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/shell/style.d.ts +3 -0
  507. package/dist/shell/style.js +10 -0
  508. package/dist/shell/style.js.map +1 -0
  509. package/{shell/app.scss → dist/shell/style.scss} +0 -2
  510. package/dist/tools/babel/babel.config.d.ts +12 -0
  511. package/dist/tools/babel.config.d.ts +2 -0
  512. package/dist/tools/babel.config.js +3 -0
  513. package/dist/tools/cli/commands/serve.d.ts +1 -0
  514. package/dist/tools/cli/commands/translations.d.ts +2 -0
  515. package/dist/tools/cli/commands/translations.js +20 -0
  516. package/dist/tools/cli/openedx.d.ts +2 -0
  517. package/{tools/dist → dist/tools}/cli/openedx.js +33 -8
  518. package/dist/tools/cli/utils/ensureConfigFilenameOption.d.ts +2 -0
  519. package/dist/tools/cli/utils/formatter.d.ts +1 -0
  520. package/dist/tools/cli/utils/formatter.js +3 -0
  521. package/dist/tools/cli/utils/getResolvedConfigPath.d.ts +2 -0
  522. package/dist/tools/cli/utils/prettyPrintTitle.d.ts +1 -0
  523. package/dist/tools/cli/utils/printUsage.d.ts +1 -0
  524. package/{tools/dist → dist/tools}/cli/utils/printUsage.js +8 -0
  525. package/dist/tools/cli/utils/translations/index.d.ts +2 -0
  526. package/dist/tools/cli/utils/translations/index.js +7 -0
  527. package/dist/tools/cli/utils/translations/messagesObject.d.ts +26 -0
  528. package/dist/tools/cli/utils/translations/messagesObject.js +66 -0
  529. package/dist/tools/cli/utils/translations/prepare.d.ts +5 -0
  530. package/dist/tools/cli/utils/translations/prepare.js +98 -0
  531. package/dist/tools/cli/utils/translations/pull.d.ts +6 -0
  532. package/dist/tools/cli/utils/translations/pull.js +102 -0
  533. package/dist/tools/config-helpers/createConfig.d.ts +2 -0
  534. package/dist/tools/config-helpers/createLintConfig.d.ts +2 -0
  535. package/dist/tools/config-helpers/getBaseConfig.d.ts +2 -0
  536. package/dist/tools/defaultConfigPaths.d.ts +8 -0
  537. package/dist/tools/eslint/base.eslint.config.d.ts +3 -0
  538. package/{config → dist/tools}/eslint/base.eslint.config.js +5 -4
  539. package/dist/tools/eslint.config.d.ts +3 -0
  540. package/dist/tools/index.d.ts +3 -0
  541. package/dist/tools/jest/jest.config.d.ts +14 -0
  542. package/dist/tools/jest.config.d.ts +8 -0
  543. package/dist/tools/types.d.ts +20 -0
  544. package/{tools/dist → dist/tools}/types.js +2 -0
  545. package/{tools/dist → dist/tools}/typescript/tsconfig.json +2 -1
  546. package/dist/tools/webpack/common-config/all/getCodeRules.d.ts +2 -0
  547. package/dist/tools/webpack/common-config/all/getFileLoaderRules.d.ts +11 -0
  548. package/dist/tools/webpack/common-config/all/getImageMinimizer.d.ts +5 -0
  549. package/dist/tools/webpack/common-config/all/getStylesheetRule.d.ts +12 -0
  550. package/dist/tools/webpack/common-config/all/getStylesheetRule.js +150 -0
  551. package/dist/tools/webpack/common-config/all/postcssWrapLayer.d.ts +4 -0
  552. package/dist/tools/webpack/common-config/all/postcssWrapLayer.js +32 -0
  553. package/dist/tools/webpack/common-config/dev/getDevServer.d.ts +2 -0
  554. package/{tools/dist → dist/tools}/webpack/common-config/dev/getDevServer.js +3 -5
  555. package/dist/tools/webpack/common-config/index.d.ts +7 -0
  556. package/{config → dist/tools}/webpack/common-config/index.js +3 -1
  557. package/dist/tools/webpack/common-config/site/getHtmlWebpackPlugin.d.ts +2 -0
  558. package/{config → dist/tools}/webpack/common-config/site/getHtmlWebpackPlugin.js +11 -3
  559. package/dist/tools/webpack/common-config/site/getI18nMessagesFallbackPlugin/emptyI18n.d.ts +2 -0
  560. package/{config/webpack/types.js → dist/tools/webpack/common-config/site/getI18nMessagesFallbackPlugin/emptyI18n.js} +1 -0
  561. package/dist/tools/webpack/common-config/site/getI18nMessagesFallbackPlugin/index.d.ts +2 -0
  562. package/dist/tools/webpack/common-config/site/getI18nMessagesFallbackPlugin/index.js +26 -0
  563. package/dist/tools/webpack/plugins/html-webpack-new-relic-plugin/HtmlWebpackNewRelicPlugin.d.ts +16 -0
  564. package/dist/tools/webpack/plugins/html-webpack-new-relic-plugin/index.d.ts +2 -0
  565. package/dist/tools/webpack/plugins/html-webpack-new-relic-plugin/test/fixtures/entry.d.ts +1 -0
  566. package/dist/tools/webpack/utils/getPublicPath.d.ts +1 -0
  567. package/{tools/dist → dist/tools}/webpack/utils/getPublicPath.js +1 -1
  568. package/dist/tools/webpack/utils/getResolvedSiteConfigPath.d.ts +1 -0
  569. package/dist/tools/webpack/utils/getResolvedSiteI18nPath.d.ts +1 -0
  570. package/dist/tools/webpack/utils/getResolvedSiteI18nPath.js +25 -0
  571. package/dist/tools/webpack/webpack.config.build.d.ts +3 -0
  572. package/{config → dist/tools}/webpack/webpack.config.build.js +13 -15
  573. package/dist/tools/webpack/webpack.config.dev.d.ts +3 -0
  574. package/{config → dist/tools}/webpack/webpack.config.dev.js +17 -15
  575. package/dist/tools/webpack/webpack.config.dev.shell.d.ts +3 -0
  576. package/{config → dist/tools}/webpack/webpack.config.dev.shell.js +11 -16
  577. package/dist/types.d.ts +92 -0
  578. package/dist/types.js +7 -0
  579. package/dist/types.js.map +1 -0
  580. package/package.json +46 -32
  581. package/config/tsconfig.json +0 -32
  582. package/config/types.js +0 -23
  583. package/config/webpack/common-config/all/getIgnoreWarnings.js +0 -14
  584. package/config/webpack/common-config/all/getStylesheetRule.js +0 -112
  585. package/config/webpack/common-config/dev/getDevServer.js +0 -38
  586. package/config/webpack/plugins/html-webpack-new-relic-plugin/test/HtmlWebpackNewRelicPlugin.test.js +0 -66
  587. package/config/webpack/plugins/paragon-webpack-plugin/ParagonWebpackPlugin.js +0 -108
  588. package/config/webpack/plugins/paragon-webpack-plugin/index.js +0 -7
  589. package/config/webpack/plugins/paragon-webpack-plugin/utils/assetUtils.js +0 -64
  590. package/config/webpack/plugins/paragon-webpack-plugin/utils/htmlUtils.js +0 -53
  591. package/config/webpack/plugins/paragon-webpack-plugin/utils/index.js +0 -9
  592. package/config/webpack/plugins/paragon-webpack-plugin/utils/paragonStylesheetUtils.js +0 -114
  593. package/config/webpack/plugins/paragon-webpack-plugin/utils/scriptUtils.js +0 -146
  594. package/config/webpack/plugins/paragon-webpack-plugin/utils/stylesheetUtils.js +0 -126
  595. package/config/webpack/plugins/paragon-webpack-plugin/utils/tagUtils.js +0 -57
  596. package/config/webpack/utils/getLocalAliases.js +0 -65
  597. package/config/webpack/utils/getPublicPath.js +0 -6
  598. package/config/webpack/utils/paragonUtils.js +0 -138
  599. package/runtime/__mocks__/file.js +0 -1
  600. package/runtime/__mocks__/svg.js +0 -1
  601. package/runtime/__mocks__/universal-cookie.js +0 -6
  602. package/runtime/analytics/MockAnalyticsService.js +0 -71
  603. package/runtime/analytics/SegmentAnalyticsService.js +0 -243
  604. package/runtime/analytics/index.ts +0 -12
  605. package/runtime/analytics/interface.test.js +0 -242
  606. package/runtime/auth/AxiosCsrfTokenService.js +0 -60
  607. package/runtime/auth/AxiosJwtAuthService.js +0 -363
  608. package/runtime/auth/AxiosJwtAuthService.test.jsx +0 -1076
  609. package/runtime/auth/AxiosJwtTokenService.js +0 -134
  610. package/runtime/auth/LocalForageCache.js +0 -76
  611. package/runtime/auth/MockAuthService.js +0 -278
  612. package/runtime/auth/index.ts +0 -19
  613. package/runtime/auth/interceptors/createCsrfTokenProviderInterceptor.js +0 -36
  614. package/runtime/auth/interceptors/createJwtTokenProviderInterceptor.js +0 -37
  615. package/runtime/auth/interceptors/createProcessAxiosRequestErrorInterceptor.js +0 -20
  616. package/runtime/auth/interceptors/createRetryInterceptor.js +0 -74
  617. package/runtime/auth/interceptors/createRetryInterceptor.test.js +0 -23
  618. package/runtime/auth/utils.js +0 -105
  619. package/runtime/config/getExternalLinkUrl.test.js +0 -76
  620. package/runtime/i18n/injectIntlWithShim.jsx +0 -48
  621. package/runtime/i18n/lib.test.js +0 -230
  622. package/runtime/i18n/lib.ts +0 -272
  623. package/runtime/index.ts +0 -139
  624. package/runtime/initialize.async.function.config.test.js +0 -43
  625. package/runtime/initialize.const.config.test.js +0 -41
  626. package/runtime/initialize.function.config.test.js +0 -41
  627. package/runtime/initialize.js +0 -352
  628. package/runtime/initialize.test.js +0 -356
  629. package/runtime/jest.config.js +0 -32
  630. package/runtime/logging/MockLoggingService.js +0 -31
  631. package/runtime/logging/NewRelicLoggingService.js +0 -184
  632. package/runtime/logging/NewRelicLoggingService.test.js +0 -214
  633. package/runtime/logging/types.ts +0 -4
  634. package/runtime/react/AuthenticatedPageRoute.test.jsx +0 -135
  635. package/runtime/react/CombinedAppProvider.tsx +0 -46
  636. package/runtime/react/CurrentAppProvider.tsx +0 -46
  637. package/runtime/react/Divider.tsx +0 -5
  638. package/runtime/react/ErrorBoundary.jsx +0 -47
  639. package/runtime/react/ErrorBoundary.test.jsx +0 -83
  640. package/runtime/react/ErrorPage.jsx +0 -72
  641. package/runtime/react/SiteProvider.test.jsx +0 -66
  642. package/runtime/react/SiteProvider.tsx +0 -78
  643. package/runtime/react/hooks.test.jsx +0 -104
  644. package/runtime/react/hooks.ts +0 -106
  645. package/runtime/routing/index.ts +0 -1
  646. package/runtime/routing/utils.test.ts +0 -7
  647. package/runtime/routing/utils.ts +0 -34
  648. package/runtime/scripts/GoogleAnalyticsLoader.test.ts +0 -77
  649. package/runtime/scripts/GoogleAnalyticsLoader.ts +0 -59
  650. package/runtime/scripts/index.ts +0 -1
  651. package/runtime/setupTest.js +0 -49
  652. package/runtime/site.config.test.tsx +0 -33
  653. package/runtime/slots/Slot.test.tsx +0 -40
  654. package/runtime/slots/Slot.tsx +0 -32
  655. package/runtime/slots/SlotContext.tsx +0 -8
  656. package/runtime/slots/hooks.ts +0 -35
  657. package/runtime/slots/layout/DefaultSlotLayout.test.tsx +0 -31
  658. package/runtime/slots/layout/DefaultSlotLayout.tsx +0 -9
  659. package/runtime/slots/layout/hooks.test.tsx +0 -178
  660. package/runtime/slots/layout/hooks.ts +0 -65
  661. package/runtime/slots/layout/utils.test.ts +0 -67
  662. package/runtime/slots/layout/utils.ts +0 -14
  663. package/runtime/slots/utils.test.ts +0 -64
  664. package/runtime/slots/utils.ts +0 -78
  665. package/runtime/slots/widget/WidgetContext.tsx +0 -9
  666. package/runtime/slots/widget/WidgetProvider.tsx +0 -30
  667. package/runtime/slots/widget/hooks.ts +0 -105
  668. package/runtime/slots/widget/iframe/IFrameContentWrapper.messages.tsx +0 -16
  669. package/runtime/slots/widget/iframe/IFrameContentWrapper.tsx +0 -84
  670. package/runtime/slots/widget/iframe/IFrameWidget.tsx +0 -59
  671. package/runtime/slots/widget/iframe/hooks.ts +0 -179
  672. package/runtime/slots/widget/utils.tsx +0 -201
  673. package/runtime/testing/initializeMockApp.test.ts +0 -66
  674. package/runtime/testing/mockMessages.ts +0 -23
  675. package/runtime/utils.test.js +0 -116
  676. package/shell/DefaultLayout.tsx +0 -18
  677. package/shell/DefaultMain.tsx +0 -7
  678. package/shell/Logo.test.tsx +0 -32
  679. package/shell/Logo.tsx +0 -28
  680. package/shell/Shell.messages.ts +0 -61
  681. package/shell/Shell.tsx +0 -18
  682. package/shell/__mocks__/file.js +0 -1
  683. package/shell/__mocks__/svg.js +0 -1
  684. package/shell/__mocks__/universal-cookie.js +0 -6
  685. package/shell/app.ts +0 -38
  686. package/shell/dev/devFooter/app.tsx +0 -43
  687. package/shell/dev/devHeader/BarContext.tsx +0 -13
  688. package/shell/dev/devHeader/BarLink.tsx +0 -16
  689. package/shell/dev/devHeader/BarProvider.tsx +0 -25
  690. package/shell/dev/devHeader/CoursesLink.tsx +0 -16
  691. package/shell/dev/devHeader/FooContext.tsx +0 -13
  692. package/shell/dev/devHeader/FooLink.tsx +0 -16
  693. package/shell/dev/devHeader/FooProvider.tsx +0 -25
  694. package/shell/dev/devHeader/app.tsx +0 -53
  695. package/shell/dev/devHeader/providers.tsx +0 -11
  696. package/shell/dev/devHome/HomePage.tsx +0 -28
  697. package/shell/dev/devHome/app.ts +0 -18
  698. package/shell/dev/devHome/i18n/index.ts +0 -27
  699. package/shell/dev/devHome/messages.ts +0 -11
  700. package/shell/dev/devUser/app.tsx +0 -24
  701. package/shell/dev/slotShowcase/HorizontalSlotLayout.tsx +0 -11
  702. package/shell/dev/slotShowcase/LayoutWithOptions.tsx +0 -17
  703. package/shell/dev/slotShowcase/SlotShowcasePage.tsx +0 -66
  704. package/shell/dev/slotShowcase/WidgetWithOptions.tsx +0 -11
  705. package/shell/dev/slotShowcase/app.tsx +0 -373
  706. package/shell/footer/CenterLinks.tsx +0 -11
  707. package/shell/footer/CopyrightNotice.tsx +0 -36
  708. package/shell/footer/Footer.tsx +0 -34
  709. package/shell/footer/LabeledLinkColumn.tsx +0 -19
  710. package/shell/footer/LanguageMenu.tsx +0 -35
  711. package/shell/footer/LanguageMenuItem.tsx +0 -23
  712. package/shell/footer/LeftLinks.tsx +0 -11
  713. package/shell/footer/LegalNotices.tsx +0 -17
  714. package/shell/footer/PoweredBy.tsx +0 -17
  715. package/shell/footer/RevealLinks.tsx +0 -43
  716. package/shell/footer/RightLinks.tsx +0 -11
  717. package/shell/footer/app.tsx +0 -73
  718. package/shell/footer/data/api.ts +0 -48
  719. package/shell/header/AuthenticatedMenu.tsx +0 -32
  720. package/shell/header/Header.tsx +0 -17
  721. package/shell/header/anonymous-menu/AnonymousMenu.tsx +0 -14
  722. package/shell/header/anonymous-menu/LoginButton.tsx +0 -14
  723. package/shell/header/anonymous-menu/RegisterButton.tsx +0 -15
  724. package/shell/header/app.tsx +0 -142
  725. package/shell/header/desktop/DesktopLayout.tsx +0 -22
  726. package/shell/header/desktop/PrimaryNavLinks.tsx +0 -10
  727. package/shell/header/desktop/SecondaryNavLinks.tsx +0 -10
  728. package/shell/header/mobile/MobileLayout.tsx +0 -47
  729. package/shell/header/mobile/MobileNavLinks.tsx +0 -10
  730. package/shell/i18n/index.ts +0 -25
  731. package/shell/jest.config.js +0 -30
  732. package/shell/menus/LinkMenuItem.tsx +0 -64
  733. package/shell/menus/NavDropdownMenuSlot.tsx +0 -29
  734. package/shell/menus/ProfileLinkMenuItem.tsx +0 -33
  735. package/shell/menus/data/utils.ts +0 -19
  736. package/shell/public/index.html +0 -10
  737. package/shell/router/createRouter.test.tsx +0 -50
  738. package/shell/router/createRouter.ts +0 -17
  739. package/shell/router/getAppRoutes.test.tsx +0 -59
  740. package/shell/router/getAppRoutes.ts +0 -21
  741. package/shell/setupTest.js +0 -48
  742. package/shell/site.config.dev.tsx +0 -49
  743. package/shell/site.config.test.tsx +0 -16
  744. package/shell/site.tsx +0 -41
  745. package/tools/dist/babel/babel.config.js +0 -28
  746. package/tools/dist/cli/intl-imports.js +0 -233
  747. package/tools/dist/cli/intl-imports.test.js +0 -146
  748. package/tools/dist/cli/transifex-utils.js +0 -68
  749. package/tools/dist/cli/utils/formatter.js +0 -10
  750. package/tools/dist/config-helpers/createConfig.js +0 -13
  751. package/tools/dist/config-helpers/createLintConfig.js +0 -16
  752. package/tools/dist/config-helpers/getBaseConfig.js +0 -12
  753. package/tools/dist/defaultConfigPaths.js +0 -35
  754. package/tools/dist/eslint/base.eslint.config.js +0 -113
  755. package/tools/dist/index.js +0 -12
  756. package/tools/dist/webpack/common-config/all/getCodeRules.js +0 -52
  757. package/tools/dist/webpack/common-config/all/getFileLoaderRules.js +0 -26
  758. package/tools/dist/webpack/common-config/all/getIgnoreWarnings.js +0 -14
  759. package/tools/dist/webpack/common-config/all/getImageMinimizer.js +0 -25
  760. package/tools/dist/webpack/common-config/all/getStylesheetRule.js +0 -112
  761. package/tools/dist/webpack/common-config/index.js +0 -18
  762. package/tools/dist/webpack/common-config/site/getHtmlWebpackPlugin.js +0 -16
  763. package/tools/dist/webpack/plugins/html-webpack-new-relic-plugin/HtmlWebpackNewRelicPlugin.js +0 -91
  764. package/tools/dist/webpack/plugins/html-webpack-new-relic-plugin/index.js +0 -7
  765. package/tools/dist/webpack/plugins/html-webpack-new-relic-plugin/test/HtmlWebpackNewRelicPlugin.test.js +0 -66
  766. package/tools/dist/webpack/plugins/html-webpack-new-relic-plugin/test/fixtures/entry.js +0 -3
  767. package/tools/dist/webpack/plugins/paragon-webpack-plugin/ParagonWebpackPlugin.js +0 -108
  768. package/tools/dist/webpack/plugins/paragon-webpack-plugin/index.js +0 -7
  769. package/tools/dist/webpack/plugins/paragon-webpack-plugin/utils/assetUtils.js +0 -64
  770. package/tools/dist/webpack/plugins/paragon-webpack-plugin/utils/htmlUtils.js +0 -53
  771. package/tools/dist/webpack/plugins/paragon-webpack-plugin/utils/index.js +0 -9
  772. package/tools/dist/webpack/plugins/paragon-webpack-plugin/utils/paragonStylesheetUtils.js +0 -114
  773. package/tools/dist/webpack/plugins/paragon-webpack-plugin/utils/scriptUtils.js +0 -146
  774. package/tools/dist/webpack/plugins/paragon-webpack-plugin/utils/stylesheetUtils.js +0 -126
  775. package/tools/dist/webpack/plugins/paragon-webpack-plugin/utils/tagUtils.js +0 -57
  776. package/tools/dist/webpack/types.js +0 -2
  777. package/tools/dist/webpack/utils/getLocalAliases.js +0 -65
  778. package/tools/dist/webpack/utils/getResolvedSiteConfigPath.js +0 -32
  779. package/tools/dist/webpack/utils/paragonUtils.js +0 -138
  780. package/tools/dist/webpack/webpack.config.build.js +0 -80
  781. package/tools/dist/webpack/webpack.config.dev.js +0 -76
  782. package/tools/dist/webpack/webpack.config.dev.shell.js +0 -110
  783. package/types.ts +0 -99
  784. /package/{runtime/slots/index.ts → dist/runtime/slots/index.d.ts} +0 -0
  785. /package/{runtime/slots/layout/index.ts → dist/runtime/slots/layout/index.d.ts} +0 -0
  786. /package/{runtime/slots/widget/index.ts → dist/runtime/slots/widget/index.d.ts} +0 -0
  787. /package/{shell/dev/devFooter/index.ts → dist/shell/dev/devFooter/index.d.ts} +0 -0
  788. /package/{shell/dev/devHeader/index.ts → dist/shell/dev/devHeader/index.d.ts} +0 -0
  789. /package/{shell/dev/devHome/index.ts → dist/shell/dev/devHome/index.d.ts} +0 -0
  790. /package/{shell/dev/devUser/index.ts → dist/shell/dev/devUser/index.d.ts} +0 -0
  791. /package/{shell/dev/index.ts → dist/shell/dev/index.d.ts} +0 -0
  792. /package/{shell/dev/slotShowcase/index.ts → dist/shell/dev/slotShowcase/index.d.ts} +0 -0
  793. /package/{shell/footer/index.ts → dist/shell/footer/index.d.ts} +0 -0
  794. /package/{config → dist/tools}/babel/babel.config.js +0 -0
  795. /package/{tools/dist → dist/tools}/cli/commands/serve.js +0 -0
  796. /package/{tools/dist → dist/tools}/cli/utils/ensureConfigFilenameOption.js +0 -0
  797. /package/{tools/dist → dist/tools}/cli/utils/getResolvedConfigPath.js +0 -0
  798. /package/{tools/dist → dist/tools}/cli/utils/prettyPrintTitle.js +0 -0
  799. /package/{config → dist/tools}/config-helpers/createConfig.js +0 -0
  800. /package/{config → dist/tools}/config-helpers/createLintConfig.js +0 -0
  801. /package/{config → dist/tools}/config-helpers/getBaseConfig.js +0 -0
  802. /package/{config → dist/tools}/defaultConfigPaths.js +0 -0
  803. /package/{tools/dist → dist/tools}/eslint.config.js +0 -0
  804. /package/{config → dist/tools}/index.js +0 -0
  805. /package/{config → dist/tools}/jest/jest.config.js +0 -0
  806. /package/{tools/dist → dist/tools}/jest.config.js +0 -0
  807. /package/{config → dist/tools}/webpack/common-config/all/getCodeRules.js +0 -0
  808. /package/{config → dist/tools}/webpack/common-config/all/getFileLoaderRules.js +0 -0
  809. /package/{config → dist/tools}/webpack/common-config/all/getImageMinimizer.js +0 -0
  810. /package/{config → dist/tools}/webpack/plugins/html-webpack-new-relic-plugin/HtmlWebpackNewRelicPlugin.js +0 -0
  811. /package/{config → dist/tools}/webpack/plugins/html-webpack-new-relic-plugin/index.js +0 -0
  812. /package/{config → dist/tools}/webpack/plugins/html-webpack-new-relic-plugin/test/fixtures/entry.js +0 -0
  813. /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,370 @@
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 isEqual from 'lodash/isEqual';
114
+ import keyBy from 'lodash/keyBy';
115
+ import merge from 'lodash/merge';
116
+ import { EnvironmentTypes } from '../../types';
117
+ import { ACTIVE_ROLES_CHANGED, CONFIG_CHANGED } from '../constants';
118
+ import { publish } from '../subscriptions';
119
+ let siteConfig = {
120
+ // Required
121
+ siteId: '',
122
+ baseUrl: '',
123
+ siteName: '',
124
+ loginUrl: '',
125
+ logoutUrl: '',
126
+ lmsBaseUrl: '',
127
+ // Optional
128
+ environment: EnvironmentTypes.PRODUCTION,
129
+ apps: [],
130
+ externalRoutes: [],
131
+ externalLinkUrlOverrides: [],
132
+ runtimeConfigJsonUrl: null,
133
+ theme: {},
134
+ accessTokenCookieName: 'edx-jwt-cookie-header-payload',
135
+ csrfTokenApiPath: '/csrf/api/v1/token',
136
+ ignoredErrorRegex: null,
137
+ languagePreferenceCookieName: 'openedx-language-preference',
138
+ refreshAccessTokenApiPath: '/login_refresh',
139
+ userInfoCookieName: 'edx-user-info',
140
+ segmentKey: null,
141
+ };
142
+ /**
143
+ * Getter for the application configuration document. This is synchronous and merely returns a
144
+ * reference to an existing object, and is thus safe to call as often as desired.
145
+ *
146
+ * Example:
147
+ *
148
+ * ```
149
+ * import { getSiteConfig } from '@openedx/frontend-base';
150
+ *
151
+ * const {
152
+ * lmsBaseUrl,
153
+ * } = getSiteConfig();
154
+ * ```
155
+ *
156
+ * @returns {SiteConfig}
157
+ */
158
+ export function getSiteConfig() {
159
+ return siteConfig;
160
+ }
161
+ /**
162
+ * Replaces the existing SiteConfig. This is not commonly used, but can be helpful for tests.
163
+ *
164
+ * Example:
165
+ *
166
+ * ```
167
+ * import { setSiteConfig } from '@openedx/frontend-base';
168
+ *
169
+ * setSiteConfig({
170
+ * lmsBaseUrl, // This is overriding the ENTIRE document - this is not merged in!
171
+ * });
172
+ * ```
173
+ *
174
+ * @param newConfig A replacement SiteConfig which will completely override the current SiteConfig.
175
+ */
176
+ export function setSiteConfig(newSiteConfig) {
177
+ siteConfig = newSiteConfig;
178
+ publish(CONFIG_CHANGED);
179
+ }
180
+ /**
181
+ * Merges additional configuration values into the site config returned by `getSiteConfig`. Will
182
+ * override any values that exist with the same keys.
183
+ *
184
+ * ```
185
+ * mergeSiteConfig({
186
+ * NEW_KEY: 'new value',
187
+ * OTHER_NEW_KEY: 'other new value',
188
+ * });
189
+ *
190
+ * This function uses lodash.merge internally to merge configuration objects
191
+ * which means they will be merged recursively. See https://lodash.com/docs/latest#merge for
192
+ * documentation on the exact behavior.
193
+ *
194
+ * Apps are merged by appId rather than array index. By default, apps in the incoming config
195
+ * that don't exist in the current config will be added.
196
+ *
197
+ * When `limitAppMergeToConfig` is true:
198
+ * - All non-app parts of the config are still merged normally
199
+ * - Only the `config` property of each existing app is merged
200
+ * - Apps in the incoming config that don't exist in the current config are ignored
201
+ *
202
+ * @param {Object} newSiteConfig
203
+ * @param {Object} options
204
+ * @param {boolean} options.limitAppMergeToConfig - Limit app merging to only the config property of existing apps
205
+ */
206
+ export function mergeSiteConfig(newSiteConfig, options = {}) {
207
+ var _a;
208
+ const { limitAppMergeToConfig = false } = options;
209
+ const { apps: newApps } = newSiteConfig, restOfNewConfig = __rest(newSiteConfig, ["apps"]);
210
+ /* `merge({}, ...)` deep-clones into the fresh target, so the new `siteConfig`
211
+ is a brand-new reference and the previous one is never mutated. This is what
212
+ lets React consumers detect that CONFIG_CHANGED actually changed something. */
213
+ siteConfig = merge({}, siteConfig, restOfNewConfig);
214
+ // if we don't have new apps, we're done
215
+ if (!(newApps === null || newApps === void 0 ? void 0 : newApps.length)) {
216
+ publish(CONFIG_CHANGED);
217
+ return;
218
+ }
219
+ // if we're doing a full merge, merge the objects
220
+ if (!limitAppMergeToConfig) {
221
+ siteConfig.apps = Object.values(merge({}, keyBy(siteConfig.apps || [], 'appId'), keyBy(newApps, 'appId')));
222
+ publish(CONFIG_CHANGED);
223
+ return;
224
+ }
225
+ // we're doing a config-only merge, if we don't
226
+ // have apps already, we can't update their configs
227
+ if (!((_a = siteConfig.apps) === null || _a === void 0 ? void 0 : _a.length)) {
228
+ publish(CONFIG_CHANGED);
229
+ return;
230
+ }
231
+ // handle config-only merging
232
+ const newAppsById = keyBy(newApps, 'appId');
233
+ siteConfig.apps = siteConfig.apps.map((app) => {
234
+ const newApp = newAppsById[app.appId];
235
+ if (!(newApp === null || newApp === void 0 ? void 0 : newApp.config)) {
236
+ return app;
237
+ }
238
+ return Object.assign(Object.assign({}, app), { config: merge({}, app.config, newApp.config) });
239
+ });
240
+ publish(CONFIG_CHANGED);
241
+ }
242
+ const appConfigs = {};
243
+ /**
244
+ * addAppConfigs finds any AppConfig objects in the apps in SiteConfig and makes their config
245
+ * available to be used by Apps via getAppConfig(appId) or useAppConfig() functions. This is
246
+ * used at initialization time to process any AppConfigs bundled with the site.
247
+ */
248
+ export function addAppConfigs() {
249
+ const { apps } = getSiteConfig();
250
+ if (!apps)
251
+ return;
252
+ for (const app of apps) {
253
+ const { appId, config } = app;
254
+ if (config !== undefined) {
255
+ appConfigs[appId] = config;
256
+ }
257
+ }
258
+ publish(CONFIG_CHANGED);
259
+ }
260
+ export function getAppConfig(id) {
261
+ const { commonAppConfig } = getSiteConfig();
262
+ if (commonAppConfig === undefined) {
263
+ return appConfigs[id];
264
+ }
265
+ return merge({}, commonAppConfig, appConfigs[id]);
266
+ }
267
+ export function mergeAppConfig(id, newAppConfig) {
268
+ // Non-mutating: produce a fresh entry so consumers holding a reference to
269
+ // the previous one don't observe the change underneath them.
270
+ appConfigs[id] = merge({}, appConfigs[id], newAppConfig);
271
+ publish(CONFIG_CHANGED);
272
+ }
273
+ let activeRouteRoles = [];
274
+ export function setActiveRouteRoles(roles) {
275
+ if (isEqual(activeRouteRoles, roles))
276
+ return;
277
+ activeRouteRoles = roles;
278
+ publish(ACTIVE_ROLES_CHANGED);
279
+ }
280
+ export function getActiveRouteRoles() {
281
+ return activeRouteRoles;
282
+ }
283
+ const activeWidgetRoles = {};
284
+ export function addActiveWidgetRole(role) {
285
+ var _a, _b;
286
+ // Only publish when the role transitions from absent to present.
287
+ const wasPresent = ((_a = activeWidgetRoles[role]) !== null && _a !== void 0 ? _a : 0) > 0;
288
+ activeWidgetRoles[role] = ((_b = activeWidgetRoles[role]) !== null && _b !== void 0 ? _b : 0) + 1;
289
+ if (!wasPresent)
290
+ publish(ACTIVE_ROLES_CHANGED);
291
+ }
292
+ export function removeActiveWidgetRole(role) {
293
+ if (activeWidgetRoles[role] === undefined)
294
+ return;
295
+ activeWidgetRoles[role] -= 1;
296
+ if (activeWidgetRoles[role] < 1) {
297
+ delete activeWidgetRoles[role];
298
+ // Only publish when the role transitions from present to absent.
299
+ publish(ACTIVE_ROLES_CHANGED);
300
+ }
301
+ }
302
+ export function getActiveWidgetRoles() {
303
+ return Object.entries(activeWidgetRoles)
304
+ .filter(([, count]) => count !== undefined && count > 0)
305
+ .map(([role]) => role);
306
+ }
307
+ // Gets all active roles from the route roles and widget roles.
308
+ export function getActiveRoles() {
309
+ return [...getActiveRouteRoles(), ...getActiveWidgetRoles()];
310
+ }
311
+ /**
312
+ * Collects all `provides` entries from registered apps that match the given identifier.
313
+ * This enables inter-app data sharing without frontend-base needing to understand the data shape.
314
+ *
315
+ * @param id - The namespaced provides identifier.
316
+ * @returns An array of provided data from all apps that declared data for this identifier.
317
+ */
318
+ export function getProvides(id) {
319
+ const { apps } = getSiteConfig();
320
+ if (!apps)
321
+ return [];
322
+ const results = [];
323
+ for (const app of apps) {
324
+ if (app.provides && app.provides[id] !== undefined) {
325
+ results.push(app.provides[id]);
326
+ }
327
+ }
328
+ return results;
329
+ }
330
+ /**
331
+ * Collects and flattens all `provides` entries for the given identifier
332
+ * as strings. Each entry can be a single string or a string array; entries
333
+ * of other types are silently skipped.
334
+ *
335
+ * @param id - The namespaced provides identifier.
336
+ * @returns A flat array of strings from all apps that declared data for this identifier.
337
+ */
338
+ export function getProvidesAsStrings(id) {
339
+ return getProvides(id)
340
+ .filter((data) => typeof data === 'string' || Array.isArray(data))
341
+ .flat();
342
+ }
343
+ /**
344
+ * Get an external link URL based on the URL provided. If the passed in URL is overridden in the
345
+ * `externalLinkUrlOverrides` object, it will return the overridden URL. Otherwise, it will return
346
+ * the provided URL.
347
+ *
348
+ *
349
+ * @param {string} url - The default URL.
350
+ * @returns {string} - The external link URL. Defaults to the input URL if not found in the
351
+ * `externalLinkUrlOverrides` object. If the input URL is invalid, '#' is returned.
352
+ *
353
+ * @example
354
+ * import { getExternalLinkUrl } from '@openedx/frontend-base';
355
+ *
356
+ * <Hyperlink
357
+ * destination={getExternalLinkUrl(data.helpLink)}
358
+ * target="_blank"
359
+ * >
360
+ */
361
+ export function getExternalLinkUrl(url) {
362
+ var _a, _b;
363
+ // Guard against whitespace-only strings
364
+ if (typeof url !== 'string' || !url.trim()) {
365
+ return '#';
366
+ }
367
+ const overriddenLinkUrls = (_a = getSiteConfig().externalLinkUrlOverrides) !== null && _a !== void 0 ? _a : {};
368
+ return (_b = overriddenLinkUrls[url]) !== null && _b !== void 0 ? _b : url;
369
+ }
370
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../runtime/config/index.ts"],"names":[],"mappings":"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","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 isEqual from 'lodash/isEqual';\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 /* `merge({}, ...)` deep-clones into the fresh target, so the new `siteConfig`\n is a brand-new reference and the previous one is never mutated. This is what\n lets React consumers detect that CONFIG_CHANGED actually changed something. */\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 {},\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 siteConfig.apps = siteConfig.apps.map((app) => {\n const newApp = newAppsById[app.appId];\n if (!newApp?.config) {\n return app;\n }\n return { ...app, config: merge({}, app.config, newApp.config) };\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 // Non-mutating: produce a fresh entry so consumers holding a reference to\n // the previous one don't observe the change underneath them.\n appConfigs[id] = merge({}, appConfigs[id], newAppConfig);\n publish(CONFIG_CHANGED);\n}\n\nlet activeRouteRoles: string[] = [];\n\nexport function setActiveRouteRoles(roles: string[]) {\n if (isEqual(activeRouteRoles, roles)) return;\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 // Only publish when the role transitions from absent to present.\n const wasPresent = (activeWidgetRoles[role] ?? 0) > 0;\n activeWidgetRoles[role] = (activeWidgetRoles[role] ?? 0) + 1;\n if (!wasPresent) publish(ACTIVE_ROLES_CHANGED);\n}\n\nexport function removeActiveWidgetRole(role: string) {\n if (activeWidgetRoles[role] === undefined) return;\n activeWidgetRoles[role] -= 1;\n if (activeWidgetRoles[role] < 1) {\n delete activeWidgetRoles[role];\n // Only publish when the role transitions from present to absent.\n publish(ACTIVE_ROLES_CHANGED);\n }\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"]}