@openedx/frontend-base 1.0.0-alpha.9 → 1.0.1-alpha.1
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.
- package/README.md +22 -84
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/analytics/MockAnalyticsService.d.ts +50 -0
- package/dist/runtime/analytics/MockAnalyticsService.js +64 -0
- package/dist/runtime/analytics/MockAnalyticsService.js.map +1 -0
- package/dist/runtime/analytics/SegmentAnalyticsService.d.ts +64 -0
- package/dist/runtime/analytics/SegmentAnalyticsService.js +218 -0
- package/dist/runtime/analytics/SegmentAnalyticsService.js.map +1 -0
- package/dist/runtime/analytics/index.d.ts +3 -0
- package/dist/runtime/analytics/index.js +4 -0
- package/dist/runtime/analytics/index.js.map +1 -0
- package/dist/runtime/analytics/interface.d.ts +53 -0
- package/dist/runtime/analytics/interface.js +133 -0
- package/dist/runtime/analytics/interface.js.map +1 -0
- package/dist/runtime/auth/AxiosCsrfTokenService.d.ts +10 -0
- package/dist/runtime/auth/AxiosCsrfTokenService.js +64 -0
- package/dist/runtime/auth/AxiosCsrfTokenService.js.map +1 -0
- package/dist/runtime/auth/AxiosJwtAuthService.d.ts +182 -0
- package/dist/runtime/auth/AxiosJwtAuthService.js +339 -0
- package/dist/runtime/auth/AxiosJwtAuthService.js.map +1 -0
- package/dist/runtime/auth/AxiosJwtTokenService.d.ts +16 -0
- package/dist/runtime/auth/AxiosJwtTokenService.js +130 -0
- package/dist/runtime/auth/AxiosJwtTokenService.js.map +1 -0
- package/dist/runtime/auth/LocalForageCache.d.ts +7 -0
- package/dist/runtime/auth/LocalForageCache.js +78 -0
- package/dist/runtime/auth/LocalForageCache.js.map +1 -0
- package/dist/runtime/auth/MockAuthService.d.ts +209 -0
- package/dist/runtime/auth/MockAuthService.js +256 -0
- package/dist/runtime/auth/MockAuthService.js.map +1 -0
- package/dist/runtime/auth/index.d.ts +3 -0
- package/dist/runtime/auth/index.js +4 -0
- package/dist/runtime/auth/index.js.map +1 -0
- package/dist/runtime/auth/interceptors/createCsrfTokenProviderInterceptor.d.ts +2 -0
- package/dist/runtime/auth/interceptors/createCsrfTokenProviderInterceptor.js +42 -0
- package/dist/runtime/auth/interceptors/createCsrfTokenProviderInterceptor.js.map +1 -0
- package/dist/runtime/auth/interceptors/createJwtTokenProviderInterceptor.d.ts +2 -0
- package/dist/runtime/auth/interceptors/createJwtTokenProviderInterceptor.js +40 -0
- package/dist/runtime/auth/interceptors/createJwtTokenProviderInterceptor.js.map +1 -0
- package/dist/runtime/auth/interceptors/createProcessAxiosRequestErrorInterceptor.d.ts +2 -0
- package/dist/runtime/auth/interceptors/createProcessAxiosRequestErrorInterceptor.js +26 -0
- package/dist/runtime/auth/interceptors/createProcessAxiosRequestErrorInterceptor.js.map +1 -0
- package/dist/runtime/auth/interceptors/createRetryInterceptor.d.ts +3 -0
- package/dist/runtime/auth/interceptors/createRetryInterceptor.js +67 -0
- package/dist/runtime/auth/interceptors/createRetryInterceptor.js.map +1 -0
- package/dist/runtime/auth/interface.d.ts +133 -0
- package/dist/runtime/auth/interface.js +302 -0
- package/dist/runtime/auth/interface.js.map +1 -0
- package/dist/runtime/auth/utils.d.ts +13 -0
- package/dist/runtime/auth/utils.js +66 -0
- package/dist/runtime/auth/utils.js.map +1 -0
- package/dist/runtime/babel.config.d.ts +2 -0
- package/dist/runtime/babel.config.js +4 -0
- package/dist/runtime/babel.config.js.map +1 -0
- package/dist/runtime/config/index.d.ts +216 -0
- package/dist/runtime/config/index.js +428 -0
- package/dist/runtime/config/index.js.map +1 -0
- package/dist/runtime/constants.d.ts +57 -0
- package/dist/runtime/constants.js +58 -0
- package/dist/runtime/constants.js.map +1 -0
- package/dist/runtime/i18n/index.d.ts +3 -0
- package/dist/runtime/i18n/index.js +78 -0
- package/dist/runtime/i18n/index.js.map +1 -0
- package/dist/runtime/i18n/injectIntlWithShim.d.ts +11 -0
- package/dist/runtime/i18n/injectIntlWithShim.js +45 -0
- package/dist/runtime/i18n/injectIntlWithShim.js.map +1 -0
- package/dist/runtime/i18n/lib.d.ts +113 -0
- package/dist/runtime/i18n/lib.js +223 -0
- package/dist/runtime/i18n/lib.js.map +1 -0
- package/dist/runtime/index.d.ts +14 -0
- package/dist/runtime/index.js +15 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/initialize.d.ts +87 -0
- package/dist/runtime/initialize.js +305 -0
- package/dist/runtime/initialize.js.map +1 -0
- package/dist/runtime/jest.config.d.ts +16 -0
- package/dist/runtime/jest.config.js +34 -0
- package/dist/runtime/jest.config.js.map +1 -0
- package/dist/runtime/logging/MockLoggingService.d.ts +28 -0
- package/dist/runtime/logging/MockLoggingService.js +31 -0
- package/dist/runtime/logging/MockLoggingService.js.map +1 -0
- package/dist/runtime/logging/NewRelicLoggingService.d.ts +67 -0
- package/dist/runtime/logging/NewRelicLoggingService.js +175 -0
- package/dist/runtime/logging/NewRelicLoggingService.js.map +1 -0
- package/dist/runtime/logging/index.d.ts +3 -0
- package/dist/runtime/logging/index.js +4 -0
- package/dist/runtime/logging/index.js.map +1 -0
- package/dist/runtime/logging/interface.d.ts +38 -0
- package/dist/runtime/logging/interface.js +99 -0
- package/dist/runtime/logging/interface.js.map +1 -0
- package/dist/runtime/logging/types.d.ts +4 -0
- package/dist/runtime/logging/types.js +2 -0
- package/dist/runtime/logging/types.js.map +1 -0
- package/dist/runtime/react/AuthenticatedPageRoute.d.ts +30 -0
- package/dist/runtime/react/AuthenticatedPageRoute.js +38 -0
- package/dist/runtime/react/AuthenticatedPageRoute.js.map +1 -0
- package/dist/runtime/react/CombinedAppProvider.d.ts +6 -0
- package/dist/runtime/react/CombinedAppProvider.js +20 -0
- package/dist/runtime/react/CombinedAppProvider.js.map +1 -0
- package/dist/runtime/react/CurrentAppContext.d.ts +20 -0
- package/dist/runtime/react/CurrentAppContext.js +21 -0
- package/dist/runtime/react/CurrentAppContext.js.map +1 -0
- package/dist/runtime/react/CurrentAppProvider.d.ts +23 -0
- package/dist/runtime/react/CurrentAppProvider.js +33 -0
- package/dist/runtime/react/CurrentAppProvider.js.map +1 -0
- package/dist/runtime/react/Divider.d.ts +1 -0
- package/dist/runtime/react/Divider.js +5 -0
- package/dist/runtime/react/Divider.js.map +1 -0
- package/dist/runtime/react/ErrorBoundary.d.ts +32 -0
- package/dist/runtime/react/ErrorBoundary.js +40 -0
- package/dist/runtime/react/ErrorBoundary.js.map +1 -0
- package/dist/runtime/react/ErrorPage.d.ts +17 -0
- package/dist/runtime/react/ErrorPage.js +29 -0
- package/dist/runtime/react/ErrorPage.js.map +1 -0
- package/dist/runtime/react/LoginRedirect.d.ts +8 -0
- package/dist/runtime/react/LoginRedirect.js +16 -0
- package/dist/runtime/react/LoginRedirect.js.map +1 -0
- package/dist/runtime/react/NotFoundPage.d.ts +2 -0
- package/dist/runtime/react/NotFoundPage.js +14 -0
- package/dist/runtime/react/NotFoundPage.js.map +1 -0
- package/dist/runtime/react/PageWrap.d.ts +8 -0
- package/dist/runtime/react/PageWrap.js +21 -0
- package/dist/runtime/react/PageWrap.js.map +1 -0
- package/dist/runtime/react/SiteContext.d.ts +24 -0
- package/dist/runtime/react/SiteContext.js +26 -0
- package/dist/runtime/react/SiteContext.js.map +1 -0
- package/dist/runtime/react/SiteProvider.d.ts +29 -0
- package/dist/runtime/react/SiteProvider.js +69 -0
- package/dist/runtime/react/SiteProvider.js.map +1 -0
- package/dist/runtime/react/constants.d.ts +3 -0
- package/dist/runtime/react/constants.js +4 -0
- package/dist/runtime/react/constants.js.map +1 -0
- package/dist/runtime/react/hooks/index.d.ts +7 -0
- package/dist/runtime/react/hooks/index.js +8 -0
- package/dist/runtime/react/hooks/index.js.map +1 -0
- package/dist/runtime/react/hooks/theme/index.js +3 -0
- package/dist/runtime/react/hooks/theme/index.js.map +1 -0
- package/dist/runtime/react/hooks/theme/useTheme.d.ts +35 -0
- package/dist/runtime/react/hooks/theme/useTheme.js +153 -0
- package/dist/runtime/react/hooks/theme/useTheme.js.map +1 -0
- package/dist/runtime/react/hooks/theme/useThemeConfig.d.ts +16 -0
- package/dist/runtime/react/hooks/theme/useThemeConfig.js +29 -0
- package/dist/runtime/react/hooks/theme/useThemeConfig.js.map +1 -0
- package/dist/runtime/react/hooks/theme/useThemeCore.d.ts +10 -0
- package/dist/runtime/react/hooks/theme/useThemeCore.js +48 -0
- package/dist/runtime/react/hooks/theme/useThemeCore.js.map +1 -0
- package/dist/runtime/react/hooks/theme/useThemeVariants.d.ts +17 -0
- package/dist/runtime/react/hooks/theme/useThemeVariants.js +90 -0
- package/dist/runtime/react/hooks/theme/useThemeVariants.js.map +1 -0
- package/dist/runtime/react/hooks/theme/useTrackColorSchemeChoice.d.ts +8 -0
- package/dist/runtime/react/hooks/theme/useTrackColorSchemeChoice.js +30 -0
- package/dist/runtime/react/hooks/theme/useTrackColorSchemeChoice.js.map +1 -0
- package/dist/runtime/react/hooks/theme/utils.d.ts +6 -0
- package/dist/runtime/react/hooks/theme/utils.js +11 -0
- package/dist/runtime/react/hooks/theme/utils.js.map +1 -0
- package/dist/runtime/react/hooks/useActiveRoles.d.ts +2 -0
- package/dist/runtime/react/hooks/useActiveRoles.js +16 -0
- package/dist/runtime/react/hooks/useActiveRoles.js.map +1 -0
- package/dist/runtime/react/hooks/useActiveRouteRoleWatcher.d.ts +2 -0
- package/dist/runtime/react/hooks/useActiveRouteRoleWatcher.js +22 -0
- package/dist/runtime/react/hooks/useActiveRouteRoleWatcher.js.map +1 -0
- package/dist/runtime/react/hooks/useAppConfig.d.ts +2 -0
- package/dist/runtime/react/hooks/useAppConfig.js +8 -0
- package/dist/runtime/react/hooks/useAppConfig.js.map +1 -0
- package/dist/runtime/react/hooks/useAuthenticatedUser.d.ts +2 -0
- package/dist/runtime/react/hooks/useAuthenticatedUser.js +8 -0
- package/dist/runtime/react/hooks/useAuthenticatedUser.js.map +1 -0
- package/dist/runtime/react/hooks/useSiteConfig.d.ts +2 -0
- package/dist/runtime/react/hooks/useSiteConfig.js +8 -0
- package/dist/runtime/react/hooks/useSiteConfig.js.map +1 -0
- package/dist/runtime/react/hooks/useSiteEvent.d.ts +12 -0
- package/dist/runtime/react/hooks/useSiteEvent.js +22 -0
- package/dist/runtime/react/hooks/useSiteEvent.js.map +1 -0
- package/dist/runtime/react/index.d.ts +19 -0
- package/dist/runtime/react/index.js +20 -0
- package/dist/runtime/react/index.js.map +1 -0
- package/dist/runtime/react/reducers.d.ts +11 -0
- package/dist/runtime/react/reducers.js +28 -0
- package/dist/runtime/react/reducers.js.map +1 -0
- package/dist/runtime/routing/authenticatedLoader.d.ts +2 -0
- package/dist/runtime/routing/authenticatedLoader.js +27 -0
- package/dist/runtime/routing/authenticatedLoader.js.map +1 -0
- package/dist/runtime/routing/index.d.ts +2 -0
- package/dist/runtime/routing/index.js +3 -0
- package/dist/runtime/routing/index.js.map +1 -0
- package/dist/runtime/routing/utils.d.ts +4 -0
- package/dist/runtime/routing/utils.js +43 -0
- package/dist/runtime/routing/utils.js.map +1 -0
- package/dist/runtime/scripts/index.d.ts +1 -0
- package/dist/runtime/scripts/index.js +14 -0
- package/dist/runtime/scripts/index.js.map +1 -0
- package/dist/runtime/setupTest.d.ts +1 -0
- package/dist/runtime/setupTest.js +12 -0
- package/dist/runtime/setupTest.js.map +1 -0
- package/dist/runtime/slots/Slot.d.ts +11 -0
- package/dist/runtime/slots/Slot.js +37 -0
- package/dist/runtime/slots/Slot.js.map +1 -0
- package/dist/runtime/slots/SlotContext.d.ts +8 -0
- package/dist/runtime/slots/SlotContext.js +7 -0
- package/dist/runtime/slots/SlotContext.js.map +1 -0
- package/dist/runtime/slots/hooks.d.ts +11 -0
- package/dist/runtime/slots/hooks.js +19 -0
- package/dist/runtime/slots/hooks.js.map +1 -0
- package/dist/runtime/slots/index.js +7 -0
- package/dist/runtime/slots/index.js.map +1 -0
- package/dist/runtime/slots/layout/DefaultSlotLayout.d.ts +1 -0
- package/dist/runtime/slots/layout/DefaultSlotLayout.js +7 -0
- package/dist/runtime/slots/layout/DefaultSlotLayout.js.map +1 -0
- package/dist/runtime/slots/layout/hooks.d.ts +9 -0
- package/dist/runtime/slots/layout/hooks.js +52 -0
- package/dist/runtime/slots/layout/hooks.js.map +1 -0
- package/dist/runtime/slots/layout/index.js +5 -0
- package/dist/runtime/slots/layout/index.js.map +1 -0
- package/dist/runtime/slots/layout/types.d.ts +30 -0
- package/dist/runtime/slots/layout/types.js +12 -0
- package/dist/runtime/slots/layout/types.js.map +1 -0
- package/dist/runtime/slots/layout/utils.d.ts +5 -0
- package/dist/runtime/slots/layout/utils.js +11 -0
- package/dist/runtime/slots/layout/utils.js.map +1 -0
- package/dist/runtime/slots/types.d.ts +18 -0
- package/dist/runtime/slots/types.js +7 -0
- package/dist/runtime/slots/types.js.map +1 -0
- package/dist/runtime/slots/utils.d.ts +3 -0
- package/dist/runtime/slots/utils.js +65 -0
- package/dist/runtime/slots/utils.js.map +1 -0
- package/dist/runtime/slots/widget/WidgetContext.d.ts +6 -0
- package/dist/runtime/slots/widget/WidgetContext.js +8 -0
- package/dist/runtime/slots/widget/WidgetContext.js.map +1 -0
- package/dist/runtime/slots/widget/WidgetProvider.d.ts +9 -0
- package/dist/runtime/slots/widget/WidgetProvider.js +18 -0
- package/dist/runtime/slots/widget/WidgetProvider.js.map +1 -0
- package/dist/runtime/slots/widget/hooks.d.ts +12 -0
- package/dist/runtime/slots/widget/hooks.js +84 -0
- package/dist/runtime/slots/widget/hooks.js.map +1 -0
- package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.d.ts +10 -0
- package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.js +42 -0
- package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.js.map +1 -0
- package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.messages.d.ts +13 -0
- package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.messages.js +15 -0
- package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.messages.js.map +1 -0
- package/dist/runtime/slots/widget/iframe/IFrameWidget.d.ts +6 -0
- package/dist/runtime/slots/widget/iframe/IFrameWidget.js +32 -0
- package/dist/runtime/slots/widget/iframe/IFrameWidget.js.map +1 -0
- package/dist/runtime/slots/widget/iframe/constants.d.ts +15 -0
- package/dist/runtime/slots/widget/iframe/constants.js +17 -0
- package/dist/runtime/slots/widget/iframe/constants.js.map +1 -0
- package/dist/runtime/slots/widget/iframe/hooks.d.ts +64 -0
- package/dist/runtime/slots/widget/iframe/hooks.js +144 -0
- package/dist/runtime/slots/widget/iframe/hooks.js.map +1 -0
- package/dist/runtime/slots/widget/iframe/index.d.ts +3 -0
- package/dist/runtime/slots/widget/iframe/index.js +3 -0
- package/dist/runtime/slots/widget/iframe/index.js.map +1 -0
- package/dist/runtime/slots/widget/iframe/types.d.ts +5 -0
- package/dist/runtime/slots/widget/iframe/types.js +3 -0
- package/dist/runtime/slots/widget/iframe/types.js.map +1 -0
- package/dist/runtime/slots/widget/index.js +6 -0
- package/dist/runtime/slots/widget/index.js.map +1 -0
- package/dist/runtime/slots/widget/types.d.ts +108 -0
- package/dist/runtime/slots/widget/types.js +41 -0
- package/dist/runtime/slots/widget/types.js.map +1 -0
- package/dist/runtime/slots/widget/utils.d.ts +22 -0
- package/dist/runtime/slots/widget/utils.js +181 -0
- package/dist/runtime/slots/widget/utils.js.map +1 -0
- package/dist/runtime/subscriptions.d.ts +24 -0
- package/dist/runtime/subscriptions.js +48 -0
- package/dist/runtime/subscriptions.js.map +1 -0
- package/dist/runtime/testing/index.d.ts +8 -0
- package/dist/runtime/testing/index.js +9 -0
- package/dist/runtime/testing/index.js.map +1 -0
- package/dist/runtime/testing/initializeMockApp.d.ts +46 -0
- package/dist/runtime/testing/initializeMockApp.js +71 -0
- package/dist/runtime/testing/initializeMockApp.js.map +1 -0
- package/dist/runtime/testing/mockMessages.d.ts +22 -0
- package/dist/runtime/testing/mockMessages.js +23 -0
- package/dist/runtime/testing/mockMessages.js.map +1 -0
- package/dist/runtime/utils.d.ts +95 -0
- package/dist/runtime/utils.js +163 -0
- package/dist/runtime/utils.js.map +1 -0
- package/dist/shell/DefaultLayout.d.ts +1 -0
- package/dist/shell/DefaultLayout.js +7 -0
- package/dist/shell/DefaultLayout.js.map +1 -0
- package/dist/shell/DefaultMain.d.ts +1 -0
- package/dist/shell/DefaultMain.js +6 -0
- package/dist/shell/DefaultMain.js.map +1 -0
- package/dist/shell/Logo.d.ts +6 -0
- package/dist/shell/Logo.js +16 -0
- package/dist/shell/Logo.js.map +1 -0
- package/dist/shell/Shell.d.ts +1 -0
- package/dist/shell/Shell.js +10 -0
- package/dist/shell/Shell.js.map +1 -0
- package/dist/shell/Shell.messages.d.ts +63 -0
- package/dist/shell/Shell.messages.js +65 -0
- package/dist/shell/Shell.messages.js.map +1 -0
- package/dist/shell/app.d.ts +3 -0
- package/dist/shell/app.js +43 -0
- package/dist/shell/app.js.map +1 -0
- package/dist/shell/babel.config.d.ts +2 -0
- package/dist/shell/babel.config.js +4 -0
- package/dist/shell/babel.config.js.map +1 -0
- package/dist/shell/constants.d.ts +2 -0
- package/dist/shell/constants.js +3 -0
- package/dist/shell/constants.js.map +1 -0
- package/dist/shell/dev/devFooter/app.d.ts +3 -0
- package/dist/shell/dev/devFooter/app.js +36 -0
- package/dist/shell/dev/devFooter/app.js.map +1 -0
- package/dist/shell/dev/devFooter/index.js +2 -0
- package/dist/shell/dev/devFooter/index.js.map +1 -0
- package/dist/shell/dev/devHeader/BarContext.d.ts +7 -0
- package/dist/shell/dev/devHeader/BarContext.js +8 -0
- package/dist/shell/dev/devHeader/BarContext.js.map +1 -0
- package/dist/shell/dev/devHeader/BarLink.d.ts +1 -0
- package/dist/shell/dev/devHeader/BarLink.js +10 -0
- package/dist/shell/dev/devHeader/BarLink.js.map +1 -0
- package/dist/shell/dev/devHeader/BarProvider.d.ts +6 -0
- package/dist/shell/dev/devHeader/BarProvider.js +16 -0
- package/dist/shell/dev/devHeader/BarProvider.js.map +1 -0
- package/dist/shell/dev/devHeader/CoursesLink.d.ts +1 -0
- package/dist/shell/dev/devHeader/CoursesLink.js +10 -0
- package/dist/shell/dev/devHeader/CoursesLink.js.map +1 -0
- package/dist/shell/dev/devHeader/FooContext.d.ts +7 -0
- package/dist/shell/dev/devHeader/FooContext.js +8 -0
- package/dist/shell/dev/devHeader/FooContext.js.map +1 -0
- package/dist/shell/dev/devHeader/FooLink.d.ts +1 -0
- package/dist/shell/dev/devHeader/FooLink.js +10 -0
- package/dist/shell/dev/devHeader/FooLink.js.map +1 -0
- package/dist/shell/dev/devHeader/FooProvider.d.ts +6 -0
- package/dist/shell/dev/devHeader/FooProvider.js +16 -0
- package/dist/shell/dev/devHeader/FooProvider.js.map +1 -0
- package/dist/shell/dev/devHeader/app.d.ts +3 -0
- package/dist/shell/dev/devHeader/app.js +34 -0
- package/dist/shell/dev/devHeader/app.js.map +1 -0
- package/dist/shell/dev/devHeader/index.js +2 -0
- package/dist/shell/dev/devHeader/index.js.map +1 -0
- package/dist/shell/dev/devHeader/providers.d.ts +3 -0
- package/dist/shell/dev/devHeader/providers.js +8 -0
- package/dist/shell/dev/devHeader/providers.js.map +1 -0
- package/dist/shell/dev/devHome/HomePage.d.ts +1 -0
- package/dist/shell/dev/devHome/HomePage.js +14 -0
- package/dist/shell/dev/devHome/HomePage.js.map +1 -0
- package/dist/shell/dev/devHome/app.d.ts +3 -0
- package/dist/shell/dev/devHome/app.js +15 -0
- package/dist/shell/dev/devHome/app.js.map +1 -0
- package/dist/shell/dev/devHome/index.js +2 -0
- package/dist/shell/dev/devHome/index.js.map +1 -0
- package/dist/shell/dev/devHome/messages.d.ts +8 -0
- package/dist/shell/dev/devHome/messages.js +10 -0
- package/dist/shell/dev/devHome/messages.js.map +1 -0
- package/dist/shell/dev/index.d.ts +4 -0
- package/dist/shell/dev/index.js +5 -0
- package/dist/shell/dev/index.js.map +1 -0
- package/dist/shell/dev/slotShowcase/HorizontalSlotLayout.d.ts +1 -0
- package/dist/shell/dev/slotShowcase/HorizontalSlotLayout.js +8 -0
- package/dist/shell/dev/slotShowcase/HorizontalSlotLayout.js.map +1 -0
- package/dist/shell/dev/slotShowcase/LayoutWithOptions.d.ts +1 -0
- package/dist/shell/dev/slotShowcase/LayoutWithOptions.js +9 -0
- package/dist/shell/dev/slotShowcase/LayoutWithOptions.js.map +1 -0
- package/dist/shell/dev/slotShowcase/SlotShowcase.scss +50 -0
- package/dist/shell/dev/slotShowcase/SlotShowcasePage.d.ts +2 -0
- package/dist/shell/dev/slotShowcase/SlotShowcasePage.js +17 -0
- package/dist/shell/dev/slotShowcase/SlotShowcasePage.js.map +1 -0
- package/dist/shell/dev/slotShowcase/ToggleByRoleLayout.d.ts +1 -0
- package/dist/shell/dev/slotShowcase/ToggleByRoleLayout.js +11 -0
- package/dist/shell/dev/slotShowcase/ToggleByRoleLayout.js.map +1 -0
- package/dist/shell/dev/slotShowcase/WidgetWithOptions.d.ts +1 -0
- package/dist/shell/dev/slotShowcase/WidgetWithOptions.js +8 -0
- package/dist/shell/dev/slotShowcase/WidgetWithOptions.js.map +1 -0
- package/dist/shell/dev/slotShowcase/app.d.ts +3 -0
- package/dist/shell/dev/slotShowcase/app.js +372 -0
- package/dist/shell/dev/slotShowcase/app.js.map +1 -0
- package/dist/shell/dev/slotShowcase/index.js +2 -0
- package/dist/shell/dev/slotShowcase/index.js.map +1 -0
- package/dist/shell/footer/CenterLinks.d.ts +1 -0
- package/dist/shell/footer/CenterLinks.js +7 -0
- package/dist/shell/footer/CenterLinks.js.map +1 -0
- package/dist/shell/footer/CopyrightNotice.d.ts +10 -0
- package/dist/shell/footer/CopyrightNotice.js +10 -0
- package/dist/shell/footer/CopyrightNotice.js.map +1 -0
- package/dist/shell/footer/DesktopFooterLayout.d.ts +1 -0
- package/dist/shell/footer/DesktopFooterLayout.js +12 -0
- package/dist/shell/footer/DesktopFooterLayout.js.map +1 -0
- package/dist/shell/footer/Footer.d.ts +1 -0
- package/dist/shell/footer/Footer.js +6 -0
- package/dist/shell/footer/Footer.js.map +1 -0
- package/dist/shell/footer/LabeledLinkColumn.d.ts +1 -0
- package/dist/shell/footer/LabeledLinkColumn.js +11 -0
- package/dist/shell/footer/LabeledLinkColumn.js.map +1 -0
- package/dist/shell/footer/LanguageMenu.d.ts +1 -0
- package/dist/shell/footer/LanguageMenu.js +16 -0
- package/dist/shell/footer/LanguageMenu.js.map +1 -0
- package/dist/shell/footer/LanguageMenuItem.d.ts +8 -0
- package/dist/shell/footer/LanguageMenuItem.js +11 -0
- package/dist/shell/footer/LanguageMenuItem.js.map +1 -0
- package/dist/shell/footer/LeftLinks.d.ts +1 -0
- package/dist/shell/footer/LeftLinks.js +7 -0
- package/dist/shell/footer/LeftLinks.js.map +1 -0
- package/dist/shell/footer/LegalNotices.d.ts +1 -0
- package/dist/shell/footer/LegalNotices.js +10 -0
- package/dist/shell/footer/LegalNotices.js.map +1 -0
- package/dist/shell/footer/PoweredBy.d.ts +1 -0
- package/dist/shell/footer/PoweredBy.js +9 -0
- package/dist/shell/footer/PoweredBy.js.map +1 -0
- package/dist/shell/footer/RevealLinks.d.ts +1 -0
- package/dist/shell/footer/RevealLinks.js +16 -0
- package/dist/shell/footer/RevealLinks.js.map +1 -0
- package/dist/shell/footer/RightLinks.d.ts +1 -0
- package/dist/shell/footer/RightLinks.js +7 -0
- package/dist/shell/footer/RightLinks.js.map +1 -0
- package/dist/shell/footer/app.d.ts +3 -0
- package/dist/shell/footer/app.js +67 -0
- package/dist/shell/footer/app.js.map +1 -0
- package/dist/shell/footer/data/api.d.ts +1 -0
- package/dist/shell/footer/data/api.js +45 -0
- package/dist/shell/footer/data/api.js.map +1 -0
- package/dist/shell/footer/index.js +3 -0
- package/dist/shell/footer/index.js.map +1 -0
- package/dist/shell/header/AuthenticatedMenu.d.ts +5 -0
- package/dist/shell/header/AuthenticatedMenu.js +9 -0
- package/dist/shell/header/AuthenticatedMenu.js.map +1 -0
- package/dist/shell/header/Header.d.ts +1 -0
- package/dist/shell/header/Header.js +8 -0
- package/dist/shell/header/Header.js.map +1 -0
- package/dist/shell/header/HelpButton.d.ts +5 -0
- package/dist/shell/header/HelpButton.js +10 -0
- package/dist/shell/header/HelpButton.js.map +1 -0
- package/dist/shell/header/anonymous-menu/AnonymousMenu.d.ts +5 -0
- package/dist/shell/header/anonymous-menu/AnonymousMenu.js +7 -0
- package/dist/shell/header/anonymous-menu/AnonymousMenu.js.map +1 -0
- package/dist/shell/header/anonymous-menu/LoginButton.d.ts +3 -0
- package/dist/shell/header/anonymous-menu/LoginButton.js +22 -0
- package/dist/shell/header/anonymous-menu/LoginButton.js.map +1 -0
- package/dist/shell/header/anonymous-menu/RegisterButton.d.ts +3 -0
- package/dist/shell/header/anonymous-menu/RegisterButton.js +22 -0
- package/dist/shell/header/anonymous-menu/RegisterButton.js.map +1 -0
- package/dist/shell/header/app.d.ts +4 -0
- package/dist/shell/header/app.js +157 -0
- package/dist/shell/header/app.js.map +1 -0
- package/dist/shell/header/app.scss +20 -0
- package/dist/shell/header/constants.d.ts +3 -0
- package/dist/shell/header/constants.js +4 -0
- package/dist/shell/header/constants.js.map +1 -0
- package/dist/shell/header/course-bar/data/service.d.ts +11 -0
- package/dist/shell/header/course-bar/data/service.js +49 -0
- package/dist/shell/header/course-bar/data/service.js.map +1 -0
- package/dist/shell/header/course-bar/masquerade/MasqueradeBar.d.ts +1 -0
- package/dist/shell/header/course-bar/masquerade/MasqueradeBar.js +22 -0
- package/dist/shell/header/course-bar/masquerade/MasqueradeBar.js.map +1 -0
- package/dist/shell/header/course-bar/masquerade/MasqueradeContext.d.ts +3 -0
- package/dist/shell/header/course-bar/masquerade/MasqueradeContext.js +10 -0
- package/dist/shell/header/course-bar/masquerade/MasqueradeContext.js.map +1 -0
- package/dist/shell/header/course-bar/masquerade/StudioLink.d.ts +6 -0
- package/dist/shell/header/course-bar/masquerade/StudioLink.js +27 -0
- package/dist/shell/header/course-bar/masquerade/StudioLink.js.map +1 -0
- package/dist/shell/header/course-bar/masquerade/data/api.d.ts +29 -0
- package/dist/shell/header/course-bar/masquerade/data/api.js +33 -0
- package/dist/shell/header/course-bar/masquerade/data/api.js.map +1 -0
- package/dist/shell/header/course-bar/masquerade/hooks.d.ts +20 -0
- package/dist/shell/header/course-bar/masquerade/hooks.js +203 -0
- package/dist/shell/header/course-bar/masquerade/hooks.js.map +1 -0
- package/dist/shell/header/course-bar/masquerade/index.d.ts +1 -0
- package/dist/shell/header/course-bar/masquerade/index.js +2 -0
- package/dist/shell/header/course-bar/masquerade/index.js.map +1 -0
- package/dist/shell/header/course-bar/masquerade/masquerade-widget/MasqueradeUserNameInput.d.ts +7 -0
- package/dist/shell/header/course-bar/masquerade/masquerade-widget/MasqueradeUserNameInput.js +18 -0
- package/dist/shell/header/course-bar/masquerade/masquerade-widget/MasqueradeUserNameInput.js.map +1 -0
- package/dist/shell/header/course-bar/masquerade/masquerade-widget/MasqueradeWidget.d.ts +1 -0
- package/dist/shell/header/course-bar/masquerade/masquerade-widget/MasqueradeWidget.js +16 -0
- package/dist/shell/header/course-bar/masquerade/masquerade-widget/MasqueradeWidget.js.map +1 -0
- package/dist/shell/header/course-bar/masquerade/masquerade-widget/MasqueradeWidgetOption.d.ts +6 -0
- package/dist/shell/header/course-bar/masquerade/masquerade-widget/MasqueradeWidgetOption.js +18 -0
- package/dist/shell/header/course-bar/masquerade/masquerade-widget/MasqueradeWidgetOption.js.map +1 -0
- package/dist/shell/header/course-bar/masquerade/masquerade-widget/index.d.ts +2 -0
- package/dist/shell/header/course-bar/masquerade/masquerade-widget/index.js +3 -0
- package/dist/shell/header/course-bar/masquerade/masquerade-widget/index.js.map +1 -0
- package/dist/shell/header/course-bar/masquerade/masquerade-widget/messages.d.ts +28 -0
- package/dist/shell/header/course-bar/masquerade/masquerade-widget/messages.js +30 -0
- package/dist/shell/header/course-bar/masquerade/masquerade-widget/messages.js.map +1 -0
- package/dist/shell/header/course-bar/masquerade/messages.d.ts +28 -0
- package/dist/shell/header/course-bar/masquerade/messages.js +30 -0
- package/dist/shell/header/course-bar/masquerade/messages.js.map +1 -0
- package/dist/shell/header/course-bar/navigation/CourseTabsNavigation.d.ts +3 -0
- package/dist/shell/header/course-bar/navigation/CourseTabsNavigation.js +39 -0
- package/dist/shell/header/course-bar/navigation/CourseTabsNavigation.js.map +1 -0
- package/dist/shell/header/course-bar/navigation/course-tabs-navigation.scss +7 -0
- package/dist/shell/header/course-bar/navigation/messages.d.ts +8 -0
- package/dist/shell/header/course-bar/navigation/messages.js +10 -0
- package/dist/shell/header/course-bar/navigation/messages.js.map +1 -0
- package/dist/shell/header/course-bar/utils.d.ts +3 -0
- package/dist/shell/header/course-bar/utils.js +54 -0
- package/dist/shell/header/course-bar/utils.js.map +1 -0
- package/dist/shell/header/desktop/DesktopLayout.d.ts +1 -0
- package/dist/shell/header/desktop/DesktopLayout.js +10 -0
- package/dist/shell/header/desktop/DesktopLayout.js.map +1 -0
- package/dist/shell/header/desktop/PrimaryNavLinks.d.ts +1 -0
- package/dist/shell/header/desktop/PrimaryNavLinks.js +7 -0
- package/dist/shell/header/desktop/PrimaryNavLinks.js.map +1 -0
- package/dist/shell/header/desktop/SecondaryNavLinks.d.ts +1 -0
- package/dist/shell/header/desktop/SecondaryNavLinks.js +7 -0
- package/dist/shell/header/desktop/SecondaryNavLinks.js.map +1 -0
- package/dist/shell/header/helpButtonSlotOperation.d.ts +6 -0
- package/dist/shell/header/helpButtonSlotOperation.js +14 -0
- package/dist/shell/header/helpButtonSlotOperation.js.map +1 -0
- package/dist/shell/header/index.d.ts +5 -0
- package/dist/shell/header/index.js +6 -0
- package/dist/shell/header/index.js.map +1 -0
- package/dist/shell/header/mobile/MobileLayout.d.ts +1 -0
- package/dist/shell/header/mobile/MobileLayout.js +17 -0
- package/dist/shell/header/mobile/MobileLayout.js.map +1 -0
- package/dist/shell/header/mobile/MobileNavLinks.d.ts +1 -0
- package/dist/shell/header/mobile/MobileNavLinks.js +7 -0
- package/dist/shell/header/mobile/MobileNavLinks.js.map +1 -0
- package/dist/shell/index.d.ts +8 -0
- package/dist/shell/index.js +9 -0
- package/dist/shell/index.js.map +1 -0
- package/dist/shell/jest.config.d.ts +15 -0
- package/dist/shell/jest.config.js +32 -0
- package/dist/shell/jest.config.js.map +1 -0
- package/dist/shell/layer-order.scss +1 -0
- package/dist/shell/menus/LinkMenuItem.d.ts +9 -0
- package/dist/shell/menus/LinkMenuItem.js +38 -0
- package/dist/shell/menus/LinkMenuItem.js.map +1 -0
- package/dist/shell/menus/NavDropdownMenuSlot.d.ts +7 -0
- package/dist/shell/menus/NavDropdownMenuSlot.js +14 -0
- package/dist/shell/menus/NavDropdownMenuSlot.js.map +1 -0
- package/dist/shell/menus/ProfileLinkMenuItem.d.ts +8 -0
- package/dist/shell/menus/ProfileLinkMenuItem.js +16 -0
- package/dist/shell/menus/ProfileLinkMenuItem.js.map +1 -0
- package/dist/shell/menus/data/utils.d.ts +4 -0
- package/dist/shell/menus/data/utils.js +13 -0
- package/dist/shell/menus/data/utils.js.map +1 -0
- package/dist/shell/router/createRouter.d.ts +1 -0
- package/dist/shell/router/createRouter.js +26 -0
- package/dist/shell/router/createRouter.js.map +1 -0
- package/dist/shell/router/getAppRoutes.d.ts +2 -0
- package/dist/shell/router/getAppRoutes.js +27 -0
- package/dist/shell/router/getAppRoutes.js.map +1 -0
- package/dist/shell/setupTest.d.ts +1 -0
- package/dist/shell/setupTest.js +12 -0
- package/dist/shell/setupTest.js.map +1 -0
- package/dist/shell/site.config.dev.d.ts +4 -0
- package/dist/shell/site.config.dev.js +43 -0
- package/dist/shell/site.config.dev.js.map +1 -0
- package/dist/shell/site.d.ts +1 -0
- package/dist/shell/site.js +45 -0
- package/dist/shell/site.js.map +1 -0
- package/dist/shell/style.d.ts +3 -0
- package/dist/shell/style.js +10 -0
- package/dist/shell/style.js.map +1 -0
- package/dist/shell/style.scss +147 -0
- package/dist/tools/babel/babel.config.d.ts +12 -0
- package/dist/tools/babel.config.d.ts +2 -0
- package/dist/tools/babel.config.js +3 -0
- package/dist/tools/cli/commands/serve.d.ts +1 -0
- package/dist/tools/cli/commands/translations.d.ts +2 -0
- package/dist/tools/cli/commands/translations.js +20 -0
- package/dist/tools/cli/openedx.d.ts +2 -0
- package/dist/tools/cli/openedx.js +111 -0
- package/dist/tools/cli/utils/ensureConfigFilenameOption.d.ts +2 -0
- package/dist/tools/cli/utils/formatter.d.ts +1 -0
- package/dist/tools/cli/utils/formatter.js +3 -0
- package/dist/tools/cli/utils/getResolvedConfigPath.d.ts +2 -0
- package/dist/tools/cli/utils/prettyPrintTitle.d.ts +1 -0
- package/dist/tools/cli/utils/printUsage.d.ts +1 -0
- package/dist/tools/cli/utils/printUsage.js +47 -0
- package/dist/tools/cli/utils/translations/index.d.ts +2 -0
- package/dist/tools/cli/utils/translations/index.js +7 -0
- package/dist/tools/cli/utils/translations/messagesObject.d.ts +26 -0
- package/dist/tools/cli/utils/translations/messagesObject.js +66 -0
- package/dist/tools/cli/utils/translations/prepare.d.ts +5 -0
- package/dist/tools/cli/utils/translations/prepare.js +98 -0
- package/dist/tools/cli/utils/translations/pull.d.ts +6 -0
- package/dist/tools/cli/utils/translations/pull.js +102 -0
- package/dist/tools/config-helpers/createConfig.d.ts +2 -0
- package/dist/tools/config-helpers/createLintConfig.d.ts +2 -0
- package/dist/tools/config-helpers/getBaseConfig.d.ts +2 -0
- package/dist/tools/defaultConfigPaths.d.ts +8 -0
- package/dist/tools/eslint/base.eslint.config.d.ts +3 -0
- package/dist/tools/eslint/base.eslint.config.js +114 -0
- package/dist/tools/eslint.config.d.ts +3 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/jest/jest.config.d.ts +14 -0
- package/dist/tools/jest.config.d.ts +8 -0
- package/dist/tools/types.d.ts +20 -0
- package/dist/tools/types.js +25 -0
- package/dist/tools/typescript/tsconfig.json +33 -0
- package/dist/tools/webpack/common-config/all/getCodeRules.d.ts +2 -0
- package/dist/tools/webpack/common-config/all/getFileLoaderRules.d.ts +11 -0
- package/dist/tools/webpack/common-config/all/getImageMinimizer.d.ts +5 -0
- package/dist/tools/webpack/common-config/all/getStylesheetRule.d.ts +12 -0
- package/dist/tools/webpack/common-config/all/getStylesheetRule.js +150 -0
- package/dist/tools/webpack/common-config/all/postcssWrapLayer.d.ts +4 -0
- package/dist/tools/webpack/common-config/all/postcssWrapLayer.js +32 -0
- package/dist/tools/webpack/common-config/dev/getDevServer.d.ts +2 -0
- package/dist/tools/webpack/common-config/dev/getDevServer.js +36 -0
- package/dist/tools/webpack/common-config/index.d.ts +7 -0
- package/dist/tools/webpack/common-config/index.js +20 -0
- package/dist/tools/webpack/common-config/site/getHtmlWebpackPlugin.d.ts +2 -0
- package/dist/tools/webpack/common-config/site/getHtmlWebpackPlugin.js +24 -0
- package/dist/tools/webpack/common-config/site/getI18nMessagesFallbackPlugin/emptyI18n.d.ts +2 -0
- package/dist/tools/webpack/common-config/site/getI18nMessagesFallbackPlugin/emptyI18n.js +3 -0
- package/dist/tools/webpack/common-config/site/getI18nMessagesFallbackPlugin/index.d.ts +2 -0
- package/dist/tools/webpack/common-config/site/getI18nMessagesFallbackPlugin/index.js +26 -0
- package/dist/tools/webpack/plugins/html-webpack-new-relic-plugin/HtmlWebpackNewRelicPlugin.d.ts +16 -0
- package/dist/tools/webpack/plugins/html-webpack-new-relic-plugin/index.d.ts +2 -0
- package/dist/tools/webpack/plugins/html-webpack-new-relic-plugin/test/fixtures/entry.d.ts +1 -0
- package/dist/tools/webpack/utils/getPublicPath.d.ts +1 -0
- package/dist/tools/webpack/utils/getPublicPath.js +6 -0
- package/dist/tools/webpack/utils/getResolvedSiteConfigPath.d.ts +1 -0
- package/dist/tools/webpack/utils/getResolvedSiteI18nPath.d.ts +1 -0
- package/dist/tools/webpack/utils/getResolvedSiteI18nPath.js +25 -0
- package/dist/tools/webpack/webpack.config.build.d.ts +3 -0
- package/dist/tools/webpack/webpack.config.build.js +78 -0
- package/dist/tools/webpack/webpack.config.dev.d.ts +3 -0
- package/dist/tools/webpack/webpack.config.dev.js +78 -0
- package/dist/tools/webpack/webpack.config.dev.shell.d.ts +3 -0
- package/dist/tools/webpack/webpack.config.dev.shell.js +105 -0
- package/dist/types.d.ts +93 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/package.json +45 -32
- package/config/eslint/base.eslint.config.js +0 -113
- package/config/tsconfig.json +0 -32
- package/config/types.js +0 -23
- package/config/webpack/common-config/all/getIgnoreWarnings.js +0 -14
- package/config/webpack/common-config/all/getStylesheetRule.js +0 -112
- package/config/webpack/common-config/dev/getDevServer.js +0 -38
- package/config/webpack/common-config/index.js +0 -18
- package/config/webpack/common-config/site/getHtmlWebpackPlugin.js +0 -16
- package/config/webpack/plugins/html-webpack-new-relic-plugin/test/HtmlWebpackNewRelicPlugin.test.js +0 -66
- package/config/webpack/utils/getLocalAliases.js +0 -65
- package/config/webpack/utils/getPublicPath.js +0 -6
- package/config/webpack/webpack.config.build.js +0 -69
- package/config/webpack/webpack.config.dev.js +0 -69
- package/config/webpack/webpack.config.dev.shell.js +0 -103
- package/index.ts +0 -7
- package/runtime/__mocks__/file.js +0 -1
- package/runtime/__mocks__/svg.js +0 -1
- package/runtime/__mocks__/universal-cookie.js +0 -6
- package/runtime/analytics/MockAnalyticsService.js +0 -71
- package/runtime/analytics/SegmentAnalyticsService.js +0 -243
- package/runtime/analytics/index.ts +0 -12
- package/runtime/analytics/interface.js +0 -145
- package/runtime/analytics/interface.test.js +0 -242
- package/runtime/auth/AxiosCsrfTokenService.js +0 -60
- package/runtime/auth/AxiosJwtAuthService.js +0 -363
- package/runtime/auth/AxiosJwtAuthService.test.jsx +0 -1076
- package/runtime/auth/AxiosJwtTokenService.js +0 -134
- package/runtime/auth/LocalForageCache.js +0 -76
- package/runtime/auth/MockAuthService.js +0 -278
- package/runtime/auth/index.ts +0 -19
- package/runtime/auth/interceptors/createCsrfTokenProviderInterceptor.js +0 -36
- package/runtime/auth/interceptors/createJwtTokenProviderInterceptor.js +0 -37
- package/runtime/auth/interceptors/createProcessAxiosRequestErrorInterceptor.js +0 -20
- package/runtime/auth/interceptors/createRetryInterceptor.js +0 -74
- package/runtime/auth/interceptors/createRetryInterceptor.test.js +0 -23
- package/runtime/auth/interface.js +0 -309
- package/runtime/auth/utils.js +0 -105
- package/runtime/babel.config.js +0 -3
- package/runtime/config/getExternalLinkUrl.test.js +0 -76
- package/runtime/config/index.ts +0 -294
- package/runtime/constants.ts +0 -68
- package/runtime/i18n/index.js +0 -118
- package/runtime/i18n/injectIntlWithShim.jsx +0 -48
- package/runtime/i18n/lib.test.js +0 -230
- package/runtime/i18n/lib.ts +0 -272
- package/runtime/index.ts +0 -139
- package/runtime/initialize.async.function.config.test.js +0 -43
- package/runtime/initialize.const.config.test.js +0 -41
- package/runtime/initialize.function.config.test.js +0 -41
- package/runtime/initialize.js +0 -352
- package/runtime/initialize.test.js +0 -356
- package/runtime/jest.config.js +0 -33
- package/runtime/logging/MockLoggingService.js +0 -31
- package/runtime/logging/NewRelicLoggingService.js +0 -184
- package/runtime/logging/NewRelicLoggingService.test.js +0 -214
- package/runtime/logging/index.ts +0 -9
- package/runtime/logging/interface.js +0 -109
- package/runtime/logging/types.ts +0 -4
- package/runtime/react/AuthenticatedPageRoute.jsx +0 -43
- package/runtime/react/AuthenticatedPageRoute.test.jsx +0 -135
- package/runtime/react/CombinedAppProvider.tsx +0 -46
- package/runtime/react/CurrentAppContext.tsx +0 -25
- package/runtime/react/CurrentAppProvider.tsx +0 -46
- package/runtime/react/Divider.tsx +0 -5
- package/runtime/react/ErrorBoundary.jsx +0 -47
- package/runtime/react/ErrorBoundary.test.jsx +0 -83
- package/runtime/react/ErrorPage.jsx +0 -72
- package/runtime/react/LoginRedirect.jsx +0 -16
- package/runtime/react/PageWrap.jsx +0 -24
- package/runtime/react/SiteContext.tsx +0 -32
- package/runtime/react/SiteProvider.test.jsx +0 -66
- package/runtime/react/SiteProvider.tsx +0 -101
- package/runtime/react/constants.ts +0 -3
- package/runtime/react/hooks/index.ts +0 -8
- package/runtime/react/hooks/theme/useTheme.test.ts +0 -221
- package/runtime/react/hooks/theme/useTheme.ts +0 -179
- package/runtime/react/hooks/theme/useThemeConfig.test.ts +0 -107
- package/runtime/react/hooks/theme/useThemeConfig.ts +0 -34
- package/runtime/react/hooks/theme/useThemeCore.test.ts +0 -65
- package/runtime/react/hooks/theme/useThemeCore.ts +0 -52
- package/runtime/react/hooks/theme/useThemeVariants.test.ts +0 -97
- package/runtime/react/hooks/theme/useThemeVariants.ts +0 -116
- package/runtime/react/hooks/theme/useTrackColorSchemeChoice.test.ts +0 -54
- package/runtime/react/hooks/theme/useTrackColorSchemeChoice.ts +0 -30
- package/runtime/react/hooks/theme/utils.ts +0 -11
- package/runtime/react/hooks/useActiveRoles.ts +0 -15
- package/runtime/react/hooks/useActiveRouteRoleWatcher.ts +0 -31
- package/runtime/react/hooks/useAppConfig.ts +0 -9
- package/runtime/react/hooks/useAuthenticatedUser.test.tsx +0 -41
- package/runtime/react/hooks/useAuthenticatedUser.ts +0 -9
- package/runtime/react/hooks/useSiteConfig.test.tsx +0 -13
- package/runtime/react/hooks/useSiteConfig.ts +0 -9
- package/runtime/react/hooks/useSiteEvent.ts +0 -24
- package/runtime/react/index.ts +0 -19
- package/runtime/react/reducers.ts +0 -40
- package/runtime/routing/index.ts +0 -1
- package/runtime/routing/utils.test.ts +0 -7
- package/runtime/routing/utils.ts +0 -34
- package/runtime/scripts/GoogleAnalyticsLoader.test.ts +0 -77
- package/runtime/scripts/GoogleAnalyticsLoader.ts +0 -59
- package/runtime/scripts/index.ts +0 -1
- package/runtime/setupTest.js +0 -14
- package/runtime/site.config.test.tsx +0 -33
- package/runtime/slots/Slot.test.tsx +0 -40
- package/runtime/slots/Slot.tsx +0 -32
- package/runtime/slots/SlotContext.tsx +0 -8
- package/runtime/slots/hooks.ts +0 -35
- package/runtime/slots/layout/DefaultSlotLayout.test.tsx +0 -31
- package/runtime/slots/layout/DefaultSlotLayout.tsx +0 -9
- package/runtime/slots/layout/hooks.test.tsx +0 -178
- package/runtime/slots/layout/hooks.ts +0 -65
- package/runtime/slots/layout/types.ts +0 -45
- package/runtime/slots/layout/utils.test.ts +0 -67
- package/runtime/slots/layout/utils.ts +0 -14
- package/runtime/slots/types.ts +0 -24
- package/runtime/slots/utils.test.ts +0 -64
- package/runtime/slots/utils.ts +0 -78
- package/runtime/slots/widget/WidgetContext.tsx +0 -9
- package/runtime/slots/widget/WidgetProvider.tsx +0 -30
- package/runtime/slots/widget/hooks.ts +0 -105
- package/runtime/slots/widget/iframe/IFrameContentWrapper.messages.tsx +0 -16
- package/runtime/slots/widget/iframe/IFrameContentWrapper.tsx +0 -84
- package/runtime/slots/widget/iframe/IFrameWidget.tsx +0 -59
- package/runtime/slots/widget/iframe/constants.ts +0 -19
- package/runtime/slots/widget/iframe/hooks.ts +0 -179
- package/runtime/slots/widget/iframe/index.ts +0 -6
- package/runtime/slots/widget/iframe/types.ts +0 -7
- package/runtime/slots/widget/types.ts +0 -134
- package/runtime/slots/widget/utils.tsx +0 -201
- package/runtime/subscriptions.ts +0 -60
- package/runtime/testing/index.ts +0 -9
- package/runtime/testing/initializeMockApp.test.ts +0 -66
- package/runtime/testing/initializeMockApp.ts +0 -86
- package/runtime/testing/mockMessages.ts +0 -23
- package/runtime/utils.js +0 -178
- package/runtime/utils.test.js +0 -116
- package/shell/DefaultLayout.tsx +0 -18
- package/shell/DefaultMain.tsx +0 -7
- package/shell/Logo.test.tsx +0 -32
- package/shell/Logo.tsx +0 -28
- package/shell/Shell.messages.ts +0 -61
- package/shell/Shell.tsx +0 -18
- package/shell/__mocks__/file.js +0 -1
- package/shell/__mocks__/svg.js +0 -1
- package/shell/__mocks__/universal-cookie.js +0 -6
- package/shell/app.scss +0 -150
- package/shell/app.ts +0 -38
- package/shell/babel.config.js +0 -3
- package/shell/dev/devFooter/app.tsx +0 -43
- package/shell/dev/devHeader/BarContext.tsx +0 -13
- package/shell/dev/devHeader/BarLink.tsx +0 -16
- package/shell/dev/devHeader/BarProvider.tsx +0 -25
- package/shell/dev/devHeader/CoursesLink.tsx +0 -16
- package/shell/dev/devHeader/FooContext.tsx +0 -13
- package/shell/dev/devHeader/FooLink.tsx +0 -16
- package/shell/dev/devHeader/FooProvider.tsx +0 -25
- package/shell/dev/devHeader/app.tsx +0 -53
- package/shell/dev/devHeader/providers.tsx +0 -11
- package/shell/dev/devHome/HomePage.tsx +0 -28
- package/shell/dev/devHome/app.ts +0 -18
- package/shell/dev/devHome/i18n/index.ts +0 -27
- package/shell/dev/devHome/messages.ts +0 -11
- package/shell/dev/devUser/app.tsx +0 -24
- package/shell/dev/devUser/index.ts +0 -1
- package/shell/dev/index.ts +0 -5
- package/shell/dev/slotShowcase/HorizontalSlotLayout.tsx +0 -11
- package/shell/dev/slotShowcase/LayoutWithOptions.tsx +0 -17
- package/shell/dev/slotShowcase/SlotShowcasePage.tsx +0 -66
- package/shell/dev/slotShowcase/WidgetWithOptions.tsx +0 -11
- package/shell/dev/slotShowcase/app.tsx +0 -373
- package/shell/footer/CenterLinks.tsx +0 -11
- package/shell/footer/CopyrightNotice.tsx +0 -36
- package/shell/footer/Footer.tsx +0 -34
- package/shell/footer/LabeledLinkColumn.tsx +0 -19
- package/shell/footer/LanguageMenu.tsx +0 -35
- package/shell/footer/LanguageMenuItem.tsx +0 -23
- package/shell/footer/LeftLinks.tsx +0 -11
- package/shell/footer/LegalNotices.tsx +0 -17
- package/shell/footer/PoweredBy.tsx +0 -17
- package/shell/footer/RevealLinks.tsx +0 -43
- package/shell/footer/RightLinks.tsx +0 -11
- package/shell/footer/app.tsx +0 -73
- package/shell/footer/data/api.ts +0 -48
- package/shell/header/AuthenticatedMenu.tsx +0 -32
- package/shell/header/Header.tsx +0 -17
- package/shell/header/anonymous-menu/AnonymousMenu.tsx +0 -14
- package/shell/header/anonymous-menu/LoginButton.tsx +0 -14
- package/shell/header/anonymous-menu/RegisterButton.tsx +0 -15
- package/shell/header/app.tsx +0 -142
- package/shell/header/desktop/DesktopLayout.tsx +0 -22
- package/shell/header/desktop/PrimaryNavLinks.tsx +0 -10
- package/shell/header/desktop/SecondaryNavLinks.tsx +0 -10
- package/shell/header/index.ts +0 -2
- package/shell/header/mobile/MobileLayout.tsx +0 -47
- package/shell/header/mobile/MobileNavLinks.tsx +0 -10
- package/shell/i18n/index.ts +0 -25
- package/shell/index.ts +0 -7
- package/shell/jest.config.js +0 -31
- package/shell/menus/LinkMenuItem.tsx +0 -64
- package/shell/menus/NavDropdownMenuSlot.tsx +0 -29
- package/shell/menus/ProfileLinkMenuItem.tsx +0 -33
- package/shell/menus/data/utils.ts +0 -19
- package/shell/public/index.html +0 -10
- package/shell/router/createRouter.test.tsx +0 -50
- package/shell/router/createRouter.ts +0 -17
- package/shell/router/getAppRoutes.test.tsx +0 -59
- package/shell/router/getAppRoutes.ts +0 -21
- package/shell/setupTest.js +0 -13
- package/shell/site.config.dev.tsx +0 -49
- package/shell/site.config.test.tsx +0 -16
- package/shell/site.tsx +0 -41
- package/tools/dist/babel/babel.config.js +0 -28
- package/tools/dist/cli/intl-imports.js +0 -233
- package/tools/dist/cli/intl-imports.test.js +0 -146
- package/tools/dist/cli/openedx.js +0 -86
- package/tools/dist/cli/transifex-utils.js +0 -68
- package/tools/dist/cli/utils/formatter.js +0 -10
- package/tools/dist/cli/utils/printUsage.js +0 -39
- package/tools/dist/config-helpers/createConfig.js +0 -13
- package/tools/dist/config-helpers/createLintConfig.js +0 -16
- package/tools/dist/config-helpers/getBaseConfig.js +0 -12
- package/tools/dist/defaultConfigPaths.js +0 -35
- package/tools/dist/eslint/base.eslint.config.js +0 -113
- package/tools/dist/index.js +0 -12
- package/tools/dist/jest/jest.config.js +0 -30
- package/tools/dist/types.js +0 -23
- package/tools/dist/typescript/tsconfig.json +0 -32
- package/tools/dist/webpack/common-config/all/getCodeRules.js +0 -52
- package/tools/dist/webpack/common-config/all/getFileLoaderRules.js +0 -26
- package/tools/dist/webpack/common-config/all/getIgnoreWarnings.js +0 -14
- package/tools/dist/webpack/common-config/all/getImageMinimizer.js +0 -25
- package/tools/dist/webpack/common-config/all/getStylesheetRule.js +0 -112
- package/tools/dist/webpack/common-config/dev/getDevServer.js +0 -38
- package/tools/dist/webpack/common-config/index.js +0 -18
- package/tools/dist/webpack/common-config/site/getHtmlWebpackPlugin.js +0 -16
- package/tools/dist/webpack/plugins/html-webpack-new-relic-plugin/HtmlWebpackNewRelicPlugin.js +0 -91
- package/tools/dist/webpack/plugins/html-webpack-new-relic-plugin/index.js +0 -7
- package/tools/dist/webpack/plugins/html-webpack-new-relic-plugin/test/HtmlWebpackNewRelicPlugin.test.js +0 -66
- package/tools/dist/webpack/plugins/html-webpack-new-relic-plugin/test/fixtures/entry.js +0 -3
- package/tools/dist/webpack/utils/getLocalAliases.js +0 -65
- package/tools/dist/webpack/utils/getPublicPath.js +0 -6
- package/tools/dist/webpack/utils/getResolvedSiteConfigPath.js +0 -32
- package/tools/dist/webpack/webpack.config.build.js +0 -69
- package/tools/dist/webpack/webpack.config.dev.js +0 -69
- package/tools/dist/webpack/webpack.config.dev.shell.js +0 -103
- package/types.ts +0 -119
- /package/{runtime/react/hooks/theme/index.ts → dist/runtime/react/hooks/theme/index.d.ts} +0 -0
- /package/{runtime/slots/index.ts → dist/runtime/slots/index.d.ts} +0 -0
- /package/{runtime/slots/layout/index.ts → dist/runtime/slots/layout/index.d.ts} +0 -0
- /package/{runtime/slots/widget/index.ts → dist/runtime/slots/widget/index.d.ts} +0 -0
- /package/{shell/dev/devFooter/index.ts → dist/shell/dev/devFooter/index.d.ts} +0 -0
- /package/{shell/dev/devHeader/index.ts → dist/shell/dev/devHeader/index.d.ts} +0 -0
- /package/{shell/dev/devHome/index.ts → dist/shell/dev/devHome/index.d.ts} +0 -0
- /package/{shell/dev/slotShowcase/index.ts → dist/shell/dev/slotShowcase/index.d.ts} +0 -0
- /package/{shell/footer/index.ts → dist/shell/footer/index.d.ts} +0 -0
- /package/{config → dist/tools}/babel/babel.config.js +0 -0
- /package/{tools/dist → dist/tools}/cli/commands/serve.js +0 -0
- /package/{tools/dist → dist/tools}/cli/utils/ensureConfigFilenameOption.js +0 -0
- /package/{tools/dist → dist/tools}/cli/utils/getResolvedConfigPath.js +0 -0
- /package/{tools/dist → dist/tools}/cli/utils/prettyPrintTitle.js +0 -0
- /package/{config → dist/tools}/config-helpers/createConfig.js +0 -0
- /package/{config → dist/tools}/config-helpers/createLintConfig.js +0 -0
- /package/{config → dist/tools}/config-helpers/getBaseConfig.js +0 -0
- /package/{config → dist/tools}/defaultConfigPaths.js +0 -0
- /package/{tools/dist → dist/tools}/eslint.config.js +0 -0
- /package/{config → dist/tools}/index.js +0 -0
- /package/{config → dist/tools}/jest/jest.config.js +0 -0
- /package/{tools/dist → dist/tools}/jest.config.js +0 -0
- /package/{config → dist/tools}/webpack/common-config/all/getCodeRules.js +0 -0
- /package/{config → dist/tools}/webpack/common-config/all/getFileLoaderRules.js +0 -0
- /package/{config → dist/tools}/webpack/common-config/all/getImageMinimizer.js +0 -0
- /package/{config → dist/tools}/webpack/plugins/html-webpack-new-relic-plugin/HtmlWebpackNewRelicPlugin.js +0 -0
- /package/{config → dist/tools}/webpack/plugins/html-webpack-new-relic-plugin/index.js +0 -0
- /package/{config → dist/tools}/webpack/plugins/html-webpack-new-relic-plugin/test/fixtures/entry.js +0 -0
- /package/{config → dist/tools}/webpack/utils/getResolvedSiteConfigPath.js +0 -0
package/README.md
CHANGED
|
@@ -1,14 +1,8 @@
|
|
|
1
1
|
# Open edX frontend framework
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|:------------------------------------------------------------------------------------------|
|
|
5
|
-
| frontend-base is under **active development** and may change significantly without warning. |
|
|
3
|
+
This library is part of a project to create a reference implementation of [OEP-65: Frontend Composability](https://open-edx-proposals.readthedocs.io/en/latest/architectural-decisions/oep-0065-arch-frontend-composability.html).
|
|
6
4
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Development of this library is part of a project to create a reference implementation for [OEP-65: Frontend Composability](https://open-edx-proposals.readthedocs.io/en/latest/architectural-decisions/oep-0065-arch-frontend-composability.html).
|
|
10
|
-
|
|
11
|
-
It will replace:
|
|
5
|
+
In practice, it's a replacement for some of the foundational libraries in the Open edX frontend. In particular:
|
|
12
6
|
|
|
13
7
|
- https://github.com/openedx/frontend-build
|
|
14
8
|
- https://github.com/openedx/frontend-platform
|
|
@@ -16,97 +10,41 @@ It will replace:
|
|
|
16
10
|
- https://github.com/openedx/frontend-component-header
|
|
17
11
|
- https://github.com/openedx/frontend-component-footer
|
|
18
12
|
|
|
19
|
-
|
|
13
|
+
It takes over responsibility for the functionality of those libraries, and also includes a "shell" application.
|
|
20
14
|
|
|
21
|
-
|
|
15
|
+
Furthermore, it enables Open edX frontends to be loaded as "direct plugins" as part of a single, unified application, while also supporting creation of "site" repositories as a central place to check in an Open edX instance's frontend customizations and extensions.
|
|
22
16
|
|
|
23
|
-
##
|
|
17
|
+
## Migrating an MFE to `frontend-base`
|
|
24
18
|
|
|
25
|
-
-
|
|
26
|
-
- [ADR 0001: Create a unified platform library](https://github.com/openedx/open-edx-proposals/pull/598)
|
|
27
|
-
- [Discourse discussion on frontend projects](https://discuss.openedx.org/t/oep-65-adjacent-a-frontend-architecture-vision/13223)
|
|
19
|
+
For a step-by-step guide on converting an MFE into a frontend-base app, refer to the [Frontend App Migration How To](./docs/how_tos/migrate-frontend-app.md). It is the authoritative reference on the conversion process.
|
|
28
20
|
|
|
29
|
-
|
|
21
|
+
Note that the existing Open edX MFEs are being ported over to `frontend-base` gradually. For an up-to-date reference of the apps that have already undergone the process, see the app dependencies in [`frontend-template-site`'s `package.json`](https://github.com/openedx/frontend-template-site/blob/main/package.json).
|
|
30
22
|
|
|
31
|
-
|
|
23
|
+
## Development
|
|
32
24
|
|
|
33
|
-
|
|
25
|
+
For prototyping changes to the library, this repository includes a self-contained dev mode. Run `npm run dev` to build `frontend-base` and start its bundled dev shell, which serves a minimal site from the source files directly, so you can iterate without a separate site checkout. The dev site will be available at `http://apps.local.openedx.io:8080`.
|
|
34
26
|
|
|
35
|
-
|
|
27
|
+
Once the change matures, we recommend moving over to the pre-configured [npm workspaces](https://docs.npmjs.com/cli/using-npm/workspaces) in a local checkout of [frontend-template-site](https://github.com/openedx/frontend-template-site). This will allow you to test changes against multiple real-world apps.
|
|
36
28
|
|
|
37
|
-
|
|
29
|
+
To do so, check this repository out into the site's `packages/` directory. Then, run `npm run dev:packages` from the site's root directory: this will watch-build any workspace check-outs and start the dev server, picking up changes automatically. If any apps (such as `frontend-app-instructor-dashboard`) require corresponding changes, you can check them out into the `packages/` directory as siblings to `frontend-base`. See [Local development with workspaces](https://github.com/openedx/frontend-template-site#local-development-with-workspaces) for full setup details.
|
|
38
30
|
|
|
39
|
-
###
|
|
31
|
+
### Continuous integration
|
|
40
32
|
|
|
41
|
-
In
|
|
33
|
+
In addition to running lint and the test suite, Github CI builds the included `test-site` against a packed tarball of `frontend-base`. This verifies that the library still works end-to-end as a real dependency of a consuming site.
|
|
42
34
|
|
|
43
|
-
|
|
44
|
-
from tutormfe.hooks import MFE_APPS, MFE_ATTRS_TYPE
|
|
35
|
+
If a change requires corresponding updates to a consuming site (for example, new or changed configuration, exports, or APIs), update `test-site` as part of your pull request so that CI continues to pass.
|
|
45
36
|
|
|
46
|
-
|
|
37
|
+
### Releases
|
|
47
38
|
|
|
48
|
-
|
|
49
|
-
(
|
|
50
|
-
"openedx-lms-development-settings",
|
|
51
|
-
"""
|
|
52
|
-
CORS_ORIGIN_WHITELIST.append("http://{{ MFE_HOST }}:8080")
|
|
53
|
-
LOGIN_REDIRECT_WHITELIST.append("http://{{ MFE_HOST }}:8080")
|
|
54
|
-
CSRF_TRUSTED_ORIGINS.append("http://{{ MFE_HOST }}:8080")
|
|
55
|
-
"""
|
|
56
|
-
)
|
|
57
|
-
)
|
|
58
|
-
```
|
|
39
|
+
This library is published automatically to npm using `semantic-release`. On merges to `main`, `alpha` versions are published. Stable releases come from the `release` branch. See [ADR 0012: Frontend branching strategy](./docs/decisions/0012-frontend-branching-strategy.rst) for details.
|
|
59
40
|
|
|
60
|
-
|
|
41
|
+
## Further reading
|
|
61
42
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
npm ci
|
|
65
|
-
npm run dev
|
|
66
|
-
```
|
|
43
|
+
- [OEP-65: Frontend composability](https://open-edx-proposals.readthedocs.io/en/latest/architectural-decisions/oep-0065-arch-frontend-composability.html)
|
|
44
|
+
- [ADR 0001: Create a unified platform repository](https://open-edx-proposals.readthedocs.io/en/latest/architectural-decisions/oep-0065/decisions/0001-unified-platform-repository.html)
|
|
67
45
|
|
|
68
|
-
|
|
46
|
+
## Communication
|
|
69
47
|
|
|
70
|
-
|
|
48
|
+
You can follow ongoing progress on the project's [Github project board](https://github.com/orgs/openedx/projects/65/views/1).
|
|
71
49
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
# Notable changes
|
|
75
|
-
|
|
76
|
-
This is a list of notable changes from the previous paradigm:
|
|
77
|
-
|
|
78
|
-
- Cease using `AUTHN_MINIMAL_HEADER`, replace it with an actual minimal header.
|
|
79
|
-
- No more using `process.env` in runtime code.
|
|
80
|
-
- Removed dotenv. Use `site.config.*.tsx`.
|
|
81
|
-
- Removed Purge CSS. We do not believe that Purge CSS works properly with Paragon in general.
|
|
82
|
-
- Removed `ensureConfig` function. This sort of type safety should happen with TypeScript types in the site config file.
|
|
83
|
-
- Removed `ensureDefinedConfig` function. Similar to ensureConfig, this sort of type safety should be handled by TypeScript.
|
|
84
|
-
- A number of site config variables now have sensible defaults:
|
|
85
|
-
- accessTokenCookieName: 'edx-jwt-cookie-header-payload',
|
|
86
|
-
- csrfTokenApiPath: '/csrf/api/v1/token',
|
|
87
|
-
- languagePreferenceCookieName: 'openedx-language-preference',
|
|
88
|
-
- userInfoCookieName: 'edx-user-info',
|
|
89
|
-
- environment: 'production',
|
|
90
|
-
- the `basename` and export has been replaced by: `getBasename`. This is because it may not be possible to determine the values of the original constants at code initialization time, since our config may arrive asynchronously. This ensures that anyone trying to get these values gets a current value.
|
|
91
|
-
- the `history` export no longer exists. Consumers should be using react-router 6's `useNavigate()` API instead.
|
|
92
|
-
- When using MockAuthService, set the authenticated user by calling setAuthenticatedUser after instantiating the service. It's not okay for us to add arbitrary config values to the site config.
|
|
93
|
-
- `REFRESH_ACCESS_TOKEN_ENDPOINT` has been replaced with `refreshAccessTokenApiPath`. It is now a path that defaults to '/login_refresh'. The Auth service assumes it is an endpoint on the LMS, and joins the path with `lmsBaseUrl`. This change creates more parity with other paths such as `csrfTokenApiPath`.
|
|
94
|
-
|
|
95
|
-
The following config variables have been removed, in favor of defining roles for specific modules, `externalRoutes`, or app-specific custom config as necessary:
|
|
96
|
-
|
|
97
|
-
- ACCOUNT_PROFILE_URL
|
|
98
|
-
- ACCOUNT_SETTINGS_URL
|
|
99
|
-
- LEARNING_BASE_URL
|
|
100
|
-
- ORDER_HISTORY_URL
|
|
101
|
-
- MARKETING_SITE_BASE_URL
|
|
102
|
-
- LEARNER_DASHBOARD_URL
|
|
103
|
-
- STUDIO_BASE_URL
|
|
104
|
-
- ACCESSIBILITY_URL
|
|
105
|
-
- PRIVACY_POLICY_URL
|
|
106
|
-
- TERMS_OF_SERVICE_URL
|
|
107
|
-
- SUPPORT_URL
|
|
108
|
-
- SUPPORT_EMAIL
|
|
109
|
-
- ECOMMERCE_BASE_URL
|
|
110
|
-
- DISCOVERY_API_BASE_URL
|
|
111
|
-
- CREDENTIALS_BASE_URL
|
|
112
|
-
- PUBLISHER_BASE_URL
|
|
50
|
+
Feel free to reach out in [#wg-frontend on Slack](https://openedx.slack.com/archives/C04BM6YC7A6) with any questions.
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAI1B,cAAc,SAAS,CAAC;AAExB,cAAc,SAAS,CAAC","sourcesContent":["export * from './runtime';\n\nexport type * from './types';\n\nexport * from './types';\n\nexport * from './shell';\n"]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export default MockAnalyticsService;
|
|
2
|
+
/**
|
|
3
|
+
* The MockAnalyticsService implements all functions of AnalyticsService as Jest mocks (jest.fn())).
|
|
4
|
+
* It emulates the behavior of a real analytics service but witohut making any requests. It has no
|
|
5
|
+
* other functionality.
|
|
6
|
+
*
|
|
7
|
+
* @implements {AnalyticsService}
|
|
8
|
+
* @memberof module:Analytics
|
|
9
|
+
*/
|
|
10
|
+
declare class MockAnalyticsService implements AnalyticsService {
|
|
11
|
+
static hasIdentifyBeenCalled: boolean;
|
|
12
|
+
constructor({ httpClient, loggingService }: {
|
|
13
|
+
httpClient: any;
|
|
14
|
+
loggingService: any;
|
|
15
|
+
});
|
|
16
|
+
loggingService: any;
|
|
17
|
+
httpClient: any;
|
|
18
|
+
checkIdentifyCalled: jest.Mock<void, [], any>;
|
|
19
|
+
/**
|
|
20
|
+
* Returns a resolved promise.
|
|
21
|
+
*
|
|
22
|
+
* @returns {Promise} The promise returned by HttpClient.post.
|
|
23
|
+
*/
|
|
24
|
+
sendTrackingLogEvent: jest.Mock<Promise<void>, [], any>;
|
|
25
|
+
/**
|
|
26
|
+
* No-op, but records that identify has been called.
|
|
27
|
+
*
|
|
28
|
+
* @param {string} userId
|
|
29
|
+
* @throws {Error} If userId argument is not supplied.
|
|
30
|
+
*/
|
|
31
|
+
identifyAuthenticatedUser: jest.Mock<void, [userId: any], any>;
|
|
32
|
+
hasIdentifyBeenCalled: boolean | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* No-op, but records that it has been called to prevent double-identification.
|
|
35
|
+
* @returns {Promise} A resolved promise.
|
|
36
|
+
*/
|
|
37
|
+
identifyAnonymousUser: jest.Mock<Promise<void>, [], any>;
|
|
38
|
+
/**
|
|
39
|
+
* Logs the event to the console.
|
|
40
|
+
*
|
|
41
|
+
* Checks whether identify has been called, logging an error to the logging service if not.
|
|
42
|
+
*/
|
|
43
|
+
sendTrackEvent: jest.Mock<void, [], any>;
|
|
44
|
+
/**
|
|
45
|
+
* Logs the event to the console.
|
|
46
|
+
*
|
|
47
|
+
* Checks whether identify has been called, logging an error to the logging service if not.
|
|
48
|
+
*/
|
|
49
|
+
sendPageEvent: jest.Mock<void, [], any>;
|
|
50
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The MockAnalyticsService implements all functions of AnalyticsService as Jest mocks (jest.fn())).
|
|
3
|
+
* It emulates the behavior of a real analytics service but witohut making any requests. It has no
|
|
4
|
+
* other functionality.
|
|
5
|
+
*
|
|
6
|
+
* @implements {AnalyticsService}
|
|
7
|
+
* @memberof module:Analytics
|
|
8
|
+
*/
|
|
9
|
+
class MockAnalyticsService {
|
|
10
|
+
constructor({ httpClient, loggingService }) {
|
|
11
|
+
this.checkIdentifyCalled = jest.fn(() => {
|
|
12
|
+
if (!this.hasIdentifyBeenCalled) {
|
|
13
|
+
this.loggingService.logError('Identify must be called before other tracking events.');
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
/**
|
|
17
|
+
* Returns a resolved promise.
|
|
18
|
+
*
|
|
19
|
+
* @returns {Promise} The promise returned by HttpClient.post.
|
|
20
|
+
*/
|
|
21
|
+
this.sendTrackingLogEvent = jest.fn(() => Promise.resolve());
|
|
22
|
+
/**
|
|
23
|
+
* No-op, but records that identify has been called.
|
|
24
|
+
*
|
|
25
|
+
* @param {string} userId
|
|
26
|
+
* @throws {Error} If userId argument is not supplied.
|
|
27
|
+
*/
|
|
28
|
+
this.identifyAuthenticatedUser = jest.fn((userId) => {
|
|
29
|
+
if (!userId) {
|
|
30
|
+
throw new Error('UserId is required for identifyAuthenticatedUser.');
|
|
31
|
+
}
|
|
32
|
+
this.hasIdentifyBeenCalled = true;
|
|
33
|
+
});
|
|
34
|
+
/**
|
|
35
|
+
* No-op, but records that it has been called to prevent double-identification.
|
|
36
|
+
* @returns {Promise} A resolved promise.
|
|
37
|
+
*/
|
|
38
|
+
this.identifyAnonymousUser = jest.fn(() => {
|
|
39
|
+
this.hasIdentifyBeenCalled = true;
|
|
40
|
+
return Promise.resolve();
|
|
41
|
+
});
|
|
42
|
+
/**
|
|
43
|
+
* Logs the event to the console.
|
|
44
|
+
*
|
|
45
|
+
* Checks whether identify has been called, logging an error to the logging service if not.
|
|
46
|
+
*/
|
|
47
|
+
this.sendTrackEvent = jest.fn(() => {
|
|
48
|
+
this.checkIdentifyCalled();
|
|
49
|
+
});
|
|
50
|
+
/**
|
|
51
|
+
* Logs the event to the console.
|
|
52
|
+
*
|
|
53
|
+
* Checks whether identify has been called, logging an error to the logging service if not.
|
|
54
|
+
*/
|
|
55
|
+
this.sendPageEvent = jest.fn(() => {
|
|
56
|
+
this.checkIdentifyCalled();
|
|
57
|
+
});
|
|
58
|
+
this.loggingService = loggingService;
|
|
59
|
+
this.httpClient = httpClient;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
MockAnalyticsService.hasIdentifyBeenCalled = false;
|
|
63
|
+
export default MockAnalyticsService;
|
|
64
|
+
//# sourceMappingURL=MockAnalyticsService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MockAnalyticsService.js","sourceRoot":"","sources":["../../../runtime/analytics/MockAnalyticsService.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,oBAAoB;IAGxB,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE;QAK1C,wBAAmB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YACjC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAChC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,uDAAuD,CAAC,CAAC;YACxF,CAAC;QACH,CAAC,CAAC,CAAC;QAEH;;;;WAIG;QACH,yBAAoB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAExD;;;;;WAKG;QACH,8BAAyB,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;YAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACvE,CAAC;YACD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH;;;WAGG;QACH,0BAAqB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YACnC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;YAClC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH;;;;WAIG;QACH,mBAAc,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH;;;;WAIG;QACH,kBAAa,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YAC3B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAvDD,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;;AALM,0CAAqB,GAAG,KAAK,AAAR,CAAS;AA6DvC,eAAe,oBAAoB,CAAC","sourcesContent":["/**\n * The MockAnalyticsService implements all functions of AnalyticsService as Jest mocks (jest.fn())).\n * It emulates the behavior of a real analytics service but witohut making any requests. It has no\n * other functionality.\n *\n * @implements {AnalyticsService}\n * @memberof module:Analytics\n */\nclass MockAnalyticsService {\n static hasIdentifyBeenCalled = false;\n\n constructor({ httpClient, loggingService }) {\n this.loggingService = loggingService;\n this.httpClient = httpClient;\n }\n\n checkIdentifyCalled = jest.fn(() => {\n if (!this.hasIdentifyBeenCalled) {\n this.loggingService.logError('Identify must be called before other tracking events.');\n }\n });\n\n /**\n * Returns a resolved promise.\n *\n * @returns {Promise} The promise returned by HttpClient.post.\n */\n sendTrackingLogEvent = jest.fn(() => Promise.resolve());\n\n /**\n * No-op, but records that identify has been called.\n *\n * @param {string} userId\n * @throws {Error} If userId argument is not supplied.\n */\n identifyAuthenticatedUser = jest.fn((userId) => {\n if (!userId) {\n throw new Error('UserId is required for identifyAuthenticatedUser.');\n }\n this.hasIdentifyBeenCalled = true;\n });\n\n /**\n * No-op, but records that it has been called to prevent double-identification.\n * @returns {Promise} A resolved promise.\n */\n identifyAnonymousUser = jest.fn(() => {\n this.hasIdentifyBeenCalled = true;\n return Promise.resolve();\n });\n\n /**\n * Logs the event to the console.\n *\n * Checks whether identify has been called, logging an error to the logging service if not.\n */\n sendTrackEvent = jest.fn(() => {\n this.checkIdentifyCalled();\n });\n\n /**\n * Logs the event to the console.\n *\n * Checks whether identify has been called, logging an error to the logging service if not.\n */\n sendPageEvent = jest.fn(() => {\n this.checkIdentifyCalled();\n });\n}\n\nexport default MockAnalyticsService;\n"]}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export default SegmentAnalyticsService;
|
|
2
|
+
/**
|
|
3
|
+
* @implements {AnalyticsService}
|
|
4
|
+
* @memberof module:Analytics
|
|
5
|
+
*/
|
|
6
|
+
declare class SegmentAnalyticsService implements AnalyticsService {
|
|
7
|
+
constructor({ httpClient, loggingService, config }: {
|
|
8
|
+
httpClient: any;
|
|
9
|
+
loggingService: any;
|
|
10
|
+
config: any;
|
|
11
|
+
});
|
|
12
|
+
loggingService: any;
|
|
13
|
+
httpClient: any;
|
|
14
|
+
trackingLogApiUrl: string;
|
|
15
|
+
segmentKey: any;
|
|
16
|
+
hasIdentifyBeenCalled: boolean;
|
|
17
|
+
segmentInitialized: boolean;
|
|
18
|
+
initializeSegment(): void;
|
|
19
|
+
/**
|
|
20
|
+
* Checks that identify was first called. Otherwise, logs error.
|
|
21
|
+
*
|
|
22
|
+
*/
|
|
23
|
+
checkIdentifyCalled(): void;
|
|
24
|
+
/**
|
|
25
|
+
* Logs events to tracking log and downstream.
|
|
26
|
+
* For tracking log event documentation, see
|
|
27
|
+
* https://openedx.atlassian.net/wiki/spaces/AN/pages/13205895/Event+Design+and+Review+Process
|
|
28
|
+
*
|
|
29
|
+
* @param {string} eventName (event_type on backend, but named to match Segment api)
|
|
30
|
+
* @param {Object} properties (event on backend, but named properties to match Segment api)
|
|
31
|
+
* @returns {Promise} The promise returned by HttpClient.post.
|
|
32
|
+
*/
|
|
33
|
+
sendTrackingLogEvent(eventName: string, properties: any): Promise<any>;
|
|
34
|
+
/**
|
|
35
|
+
* * Send identify call to Segment.
|
|
36
|
+
*
|
|
37
|
+
* @param {string} userId
|
|
38
|
+
* @param {*} [traits]
|
|
39
|
+
*/
|
|
40
|
+
identifyAuthenticatedUser(userId: string, traits?: any): void;
|
|
41
|
+
/**
|
|
42
|
+
* Send anonymous identify call to Segment's identify.
|
|
43
|
+
*
|
|
44
|
+
* @param {*} [traits]
|
|
45
|
+
* @returns {Promise} Promise that will resolve once the document readyState is complete
|
|
46
|
+
*/
|
|
47
|
+
identifyAnonymousUser(traits?: any): Promise<any>;
|
|
48
|
+
/**
|
|
49
|
+
* Sends a track event to Segment and downstream.
|
|
50
|
+
* Note: For links and forms, you should use trackLink and trackForm instead.
|
|
51
|
+
*
|
|
52
|
+
* @param {*} eventName
|
|
53
|
+
* @param {*} [properties]
|
|
54
|
+
*/
|
|
55
|
+
sendTrackEvent(eventName: any, properties?: any): void;
|
|
56
|
+
/**
|
|
57
|
+
* Sends a page event to Segment and downstream.
|
|
58
|
+
*
|
|
59
|
+
* @param {*} [name] If only one string arg provided, assumed to be name.
|
|
60
|
+
* @param {*} [category] Name is required to pass a category.
|
|
61
|
+
* @param {*} [properties]
|
|
62
|
+
*/
|
|
63
|
+
sendPageEvent(category?: any, name?: any, properties?: any): void;
|
|
64
|
+
}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import formurlencoded from 'form-urlencoded';
|
|
2
|
+
import { snakeCaseObject } from '../utils';
|
|
3
|
+
/**
|
|
4
|
+
* @implements {AnalyticsService}
|
|
5
|
+
* @memberof module:Analytics
|
|
6
|
+
*/
|
|
7
|
+
class SegmentAnalyticsService {
|
|
8
|
+
constructor({ httpClient, loggingService, config }) {
|
|
9
|
+
this.loggingService = loggingService;
|
|
10
|
+
this.httpClient = httpClient;
|
|
11
|
+
this.trackingLogApiUrl = `${config.lmsBaseUrl}/event`;
|
|
12
|
+
this.segmentKey = config.segmentKey;
|
|
13
|
+
this.hasIdentifyBeenCalled = false;
|
|
14
|
+
this.segmentInitialized = false;
|
|
15
|
+
if (this.segmentKey) {
|
|
16
|
+
this.initializeSegment();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
// The code in this function is from Segment's website, with a few updates:
|
|
20
|
+
// - It uses the segmentKey from the SegmentAnalyticsService instance.
|
|
21
|
+
// - It also saves a "segmentInitialized" variable on the SegmentAnalyticsService instance so
|
|
22
|
+
// that the service can keep track of its own initialization state.
|
|
23
|
+
// Reference:
|
|
24
|
+
// https://segment.com/docs/connections/sources/catalog/libraries/website/javascript/quickstart/
|
|
25
|
+
initializeSegment() {
|
|
26
|
+
// Create a queue, but don't obliterate an existing one!
|
|
27
|
+
global.analytics = global.analytics || [];
|
|
28
|
+
const { analytics } = global;
|
|
29
|
+
// If the real analytics.js is already on the page return.
|
|
30
|
+
if (analytics.initialize) {
|
|
31
|
+
this.segmentInitialized = true;
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
// If the snippet was invoked do nothing.
|
|
35
|
+
if (analytics.invoked) {
|
|
36
|
+
this.segmentInitialized = true;
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
// Invoked flag, to make sure the snippet
|
|
40
|
+
// is never invoked twice.
|
|
41
|
+
analytics.invoked = true;
|
|
42
|
+
// A list of the methods in Analytics.js to stub.
|
|
43
|
+
analytics.methods = [
|
|
44
|
+
'trackSubmit',
|
|
45
|
+
'trackClick',
|
|
46
|
+
'trackLink',
|
|
47
|
+
'trackForm',
|
|
48
|
+
'pageview',
|
|
49
|
+
'identify',
|
|
50
|
+
'reset',
|
|
51
|
+
'group',
|
|
52
|
+
'track',
|
|
53
|
+
'ready',
|
|
54
|
+
'alias',
|
|
55
|
+
'debug',
|
|
56
|
+
'page',
|
|
57
|
+
'once',
|
|
58
|
+
'off',
|
|
59
|
+
'on',
|
|
60
|
+
];
|
|
61
|
+
// Define a factory to create stubs. These are placeholders
|
|
62
|
+
// for methods in Analytics.js so that you never have to wait
|
|
63
|
+
// for it to load to actually record data. The `method` is
|
|
64
|
+
// stored as the first argument, so we can replay the data.
|
|
65
|
+
analytics.factory = method => (...args) => {
|
|
66
|
+
args.unshift(method);
|
|
67
|
+
analytics.push(args);
|
|
68
|
+
return analytics;
|
|
69
|
+
};
|
|
70
|
+
// For each of our methods, generate a queueing stub.
|
|
71
|
+
analytics.methods.forEach((key) => {
|
|
72
|
+
analytics[key] = analytics.factory(key);
|
|
73
|
+
});
|
|
74
|
+
// Define a method to load Analytics.js from our CDN,
|
|
75
|
+
// and that will be sure to only ever load it once.
|
|
76
|
+
analytics.load = (key, options) => {
|
|
77
|
+
// Create an async script element based on your key.
|
|
78
|
+
const script = document.createElement('script');
|
|
79
|
+
script.type = 'text/javascript';
|
|
80
|
+
script.onerror = () => {
|
|
81
|
+
this.segmentInitialized = false;
|
|
82
|
+
const event = new Event('segmentFailed');
|
|
83
|
+
document.dispatchEvent(event);
|
|
84
|
+
};
|
|
85
|
+
script.async = true;
|
|
86
|
+
script.src = `https://cdn.segment.com/analytics.js/v1/${key}/analytics.min.js`;
|
|
87
|
+
// Insert our script next to the first script element.
|
|
88
|
+
const first = document.getElementsByTagName('script')[0];
|
|
89
|
+
first.parentNode.insertBefore(script, first);
|
|
90
|
+
analytics._loadOptions = options;
|
|
91
|
+
this.segmentInitialized = true;
|
|
92
|
+
};
|
|
93
|
+
// Add a version to keep track of what's in the wild.
|
|
94
|
+
analytics.SNIPPET_VERSION = '4.1.0';
|
|
95
|
+
// Load Analytics.js with your key, which will automatically
|
|
96
|
+
// load the tools you've enabled for your account. Boosh!
|
|
97
|
+
analytics.load(this.segmentKey);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Checks that identify was first called. Otherwise, logs error.
|
|
101
|
+
*
|
|
102
|
+
*/
|
|
103
|
+
checkIdentifyCalled() {
|
|
104
|
+
if (!this.hasIdentifyBeenCalled) {
|
|
105
|
+
this.loggingService.logError('Identify must be called before other tracking events.');
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Logs events to tracking log and downstream.
|
|
110
|
+
* For tracking log event documentation, see
|
|
111
|
+
* https://openedx.atlassian.net/wiki/spaces/AN/pages/13205895/Event+Design+and+Review+Process
|
|
112
|
+
*
|
|
113
|
+
* @param {string} eventName (event_type on backend, but named to match Segment api)
|
|
114
|
+
* @param {Object} properties (event on backend, but named properties to match Segment api)
|
|
115
|
+
* @returns {Promise} The promise returned by HttpClient.post.
|
|
116
|
+
*/
|
|
117
|
+
sendTrackingLogEvent(eventName, properties) {
|
|
118
|
+
const snakeEventData = snakeCaseObject(properties, { deep: true });
|
|
119
|
+
const serverData = {
|
|
120
|
+
event_type: eventName,
|
|
121
|
+
event: JSON.stringify(snakeEventData),
|
|
122
|
+
page: global.location.href,
|
|
123
|
+
};
|
|
124
|
+
return this.httpClient.post(this.trackingLogApiUrl, formurlencoded(serverData), {
|
|
125
|
+
headers: {
|
|
126
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
127
|
+
},
|
|
128
|
+
}).catch((error) => {
|
|
129
|
+
this.loggingService.logError(error);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* * Send identify call to Segment.
|
|
134
|
+
*
|
|
135
|
+
* @param {string} userId
|
|
136
|
+
* @param {*} [traits]
|
|
137
|
+
*/
|
|
138
|
+
identifyAuthenticatedUser(userId, traits) {
|
|
139
|
+
if (!userId) {
|
|
140
|
+
throw new Error('UserId is required for identifyAuthenticatedUser.');
|
|
141
|
+
}
|
|
142
|
+
if (!this.segmentInitialized) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
global.analytics.identify(userId, traits);
|
|
146
|
+
this.hasIdentifyBeenCalled = true;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Send anonymous identify call to Segment's identify.
|
|
150
|
+
*
|
|
151
|
+
* @param {*} [traits]
|
|
152
|
+
* @returns {Promise} Promise that will resolve once the document readyState is complete
|
|
153
|
+
*/
|
|
154
|
+
identifyAnonymousUser(traits) {
|
|
155
|
+
if (!this.segmentInitialized) {
|
|
156
|
+
return Promise.resolve();
|
|
157
|
+
}
|
|
158
|
+
// if we do not have an authenticated user (indicated by being in this method),
|
|
159
|
+
// but we still have a user id associated in segment, reset the local segment state
|
|
160
|
+
// This has to be wrapped in the analytics.ready() callback because the analytics.user()
|
|
161
|
+
// function isn't available until the analytics.js package has finished initializing.
|
|
162
|
+
return new Promise((resolve, reject) => {
|
|
163
|
+
global.analytics.ready(() => {
|
|
164
|
+
if (global.analytics.user().id()) {
|
|
165
|
+
global.analytics.reset();
|
|
166
|
+
}
|
|
167
|
+
// We don’t need to call `identify` for anonymous users and can just make the value of
|
|
168
|
+
// hasIdentifyBeenCalled true. Segment automatically assigns them an anonymousId, so
|
|
169
|
+
// just calling `page` and `track` works fine without identify.
|
|
170
|
+
this.hasIdentifyBeenCalled = true;
|
|
171
|
+
resolve();
|
|
172
|
+
});
|
|
173
|
+
// this is added to handle a specific use-case where if a user has blocked the analytics
|
|
174
|
+
// tools in their browser, this promise does not get resolved and user sees a blank
|
|
175
|
+
// page. Dispatching this event in script.onerror callback in analytics.load.
|
|
176
|
+
document.addEventListener('segmentFailed', resolve);
|
|
177
|
+
// This is added to handle the google analytics blocked case which is injected into
|
|
178
|
+
// the DOM by segment.min.js.
|
|
179
|
+
setTimeout(() => {
|
|
180
|
+
var _a;
|
|
181
|
+
if (!((_a = global.ga) === null || _a === void 0 ? void 0 : _a.create) || !global.google_tag_manager) {
|
|
182
|
+
this.segmentInitialized = false;
|
|
183
|
+
resolve();
|
|
184
|
+
}
|
|
185
|
+
}, 2000);
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Sends a track event to Segment and downstream.
|
|
190
|
+
* Note: For links and forms, you should use trackLink and trackForm instead.
|
|
191
|
+
*
|
|
192
|
+
* @param {*} eventName
|
|
193
|
+
* @param {*} [properties]
|
|
194
|
+
*/
|
|
195
|
+
sendTrackEvent(eventName, properties) {
|
|
196
|
+
if (!this.segmentInitialized) {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
this.checkIdentifyCalled();
|
|
200
|
+
global.analytics.track(eventName, properties);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Sends a page event to Segment and downstream.
|
|
204
|
+
*
|
|
205
|
+
* @param {*} [name] If only one string arg provided, assumed to be name.
|
|
206
|
+
* @param {*} [category] Name is required to pass a category.
|
|
207
|
+
* @param {*} [properties]
|
|
208
|
+
*/
|
|
209
|
+
sendPageEvent(category, name, properties) {
|
|
210
|
+
if (!this.segmentInitialized) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
this.checkIdentifyCalled();
|
|
214
|
+
global.analytics.page(category, name, properties);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
export default SegmentAnalyticsService;
|
|
218
|
+
//# sourceMappingURL=SegmentAnalyticsService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SegmentAnalyticsService.js","sourceRoot":"","sources":["../../../runtime/analytics/SegmentAnalyticsService.js"],"names":[],"mappings":"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","sourcesContent":["import formurlencoded from 'form-urlencoded';\nimport { snakeCaseObject } from '../utils';\n\n/**\n * @implements {AnalyticsService}\n * @memberof module:Analytics\n */\nclass SegmentAnalyticsService {\n constructor({ httpClient, loggingService, config }) {\n this.loggingService = loggingService;\n this.httpClient = httpClient;\n this.trackingLogApiUrl = `${config.lmsBaseUrl}/event`;\n this.segmentKey = config.segmentKey;\n this.hasIdentifyBeenCalled = false;\n this.segmentInitialized = false;\n\n if (this.segmentKey) {\n this.initializeSegment();\n }\n }\n\n // The code in this function is from Segment's website, with a few updates:\n // - It uses the segmentKey from the SegmentAnalyticsService instance.\n // - It also saves a \"segmentInitialized\" variable on the SegmentAnalyticsService instance so\n // that the service can keep track of its own initialization state.\n // Reference:\n // https://segment.com/docs/connections/sources/catalog/libraries/website/javascript/quickstart/\n initializeSegment() {\n // Create a queue, but don't obliterate an existing one!\n global.analytics = global.analytics || [];\n const { analytics } = global;\n\n // If the real analytics.js is already on the page return.\n if (analytics.initialize) {\n this.segmentInitialized = true;\n return;\n }\n\n // If the snippet was invoked do nothing.\n if (analytics.invoked) {\n this.segmentInitialized = true;\n return;\n }\n\n // Invoked flag, to make sure the snippet\n // is never invoked twice.\n analytics.invoked = true;\n\n // A list of the methods in Analytics.js to stub.\n analytics.methods = [\n 'trackSubmit',\n 'trackClick',\n 'trackLink',\n 'trackForm',\n 'pageview',\n 'identify',\n 'reset',\n 'group',\n 'track',\n 'ready',\n 'alias',\n 'debug',\n 'page',\n 'once',\n 'off',\n 'on',\n ];\n\n // Define a factory to create stubs. These are placeholders\n // for methods in Analytics.js so that you never have to wait\n // for it to load to actually record data. The `method` is\n // stored as the first argument, so we can replay the data.\n analytics.factory = method => (...args) => {\n args.unshift(method);\n analytics.push(args);\n return analytics;\n };\n\n // For each of our methods, generate a queueing stub.\n analytics.methods.forEach((key) => {\n analytics[key] = analytics.factory(key);\n });\n\n // Define a method to load Analytics.js from our CDN,\n // and that will be sure to only ever load it once.\n analytics.load = (key, options) => {\n // Create an async script element based on your key.\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.onerror = () => {\n this.segmentInitialized = false;\n const event = new Event('segmentFailed');\n document.dispatchEvent(event);\n };\n script.async = true;\n script.src = `https://cdn.segment.com/analytics.js/v1/${key}/analytics.min.js`;\n\n // Insert our script next to the first script element.\n const first = document.getElementsByTagName('script')[0];\n first.parentNode.insertBefore(script, first);\n analytics._loadOptions = options;\n\n this.segmentInitialized = true;\n };\n\n // Add a version to keep track of what's in the wild.\n analytics.SNIPPET_VERSION = '4.1.0';\n\n // Load Analytics.js with your key, which will automatically\n // load the tools you've enabled for your account. Boosh!\n analytics.load(this.segmentKey);\n }\n\n /**\n * Checks that identify was first called. Otherwise, logs error.\n *\n */\n checkIdentifyCalled() {\n if (!this.hasIdentifyBeenCalled) {\n this.loggingService.logError('Identify must be called before other tracking events.');\n }\n }\n\n /**\n * Logs events to tracking log and downstream.\n * For tracking log event documentation, see\n * https://openedx.atlassian.net/wiki/spaces/AN/pages/13205895/Event+Design+and+Review+Process\n *\n * @param {string} eventName (event_type on backend, but named to match Segment api)\n * @param {Object} properties (event on backend, but named properties to match Segment api)\n * @returns {Promise} The promise returned by HttpClient.post.\n */\n sendTrackingLogEvent(eventName, properties) {\n const snakeEventData = snakeCaseObject(properties, { deep: true });\n const serverData = {\n event_type: eventName,\n event: JSON.stringify(snakeEventData),\n page: global.location.href,\n };\n return this.httpClient.post(\n this.trackingLogApiUrl,\n formurlencoded(serverData),\n {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n },\n ).catch((error) => {\n this.loggingService.logError(error);\n });\n }\n\n /**\n * * Send identify call to Segment.\n *\n * @param {string} userId\n * @param {*} [traits]\n */\n identifyAuthenticatedUser(userId, traits) {\n if (!userId) {\n throw new Error('UserId is required for identifyAuthenticatedUser.');\n }\n\n if (!this.segmentInitialized) {\n return;\n }\n global.analytics.identify(userId, traits);\n this.hasIdentifyBeenCalled = true;\n }\n\n /**\n * Send anonymous identify call to Segment's identify.\n *\n * @param {*} [traits]\n * @returns {Promise} Promise that will resolve once the document readyState is complete\n */\n identifyAnonymousUser(traits) { // eslint-disable-line @typescript-eslint/no-unused-vars\n if (!this.segmentInitialized) {\n return Promise.resolve();\n }\n // if we do not have an authenticated user (indicated by being in this method),\n // but we still have a user id associated in segment, reset the local segment state\n // This has to be wrapped in the analytics.ready() callback because the analytics.user()\n // function isn't available until the analytics.js package has finished initializing.\n return new Promise((resolve, reject) => { // eslint-disable-line @typescript-eslint/no-unused-vars\n global.analytics.ready(() => {\n if (global.analytics.user().id()) {\n global.analytics.reset();\n }\n // We don’t need to call `identify` for anonymous users and can just make the value of\n // hasIdentifyBeenCalled true. Segment automatically assigns them an anonymousId, so\n // just calling `page` and `track` works fine without identify.\n this.hasIdentifyBeenCalled = true;\n resolve();\n });\n\n // this is added to handle a specific use-case where if a user has blocked the analytics\n // tools in their browser, this promise does not get resolved and user sees a blank\n // page. Dispatching this event in script.onerror callback in analytics.load.\n document.addEventListener('segmentFailed', resolve);\n // This is added to handle the google analytics blocked case which is injected into\n // the DOM by segment.min.js.\n setTimeout(() => {\n if (!global.ga?.create || !global.google_tag_manager) {\n this.segmentInitialized = false;\n resolve();\n }\n }, 2000);\n });\n }\n\n /**\n * Sends a track event to Segment and downstream.\n * Note: For links and forms, you should use trackLink and trackForm instead.\n *\n * @param {*} eventName\n * @param {*} [properties]\n */\n sendTrackEvent(eventName, properties) {\n if (!this.segmentInitialized) {\n return;\n }\n this.checkIdentifyCalled();\n global.analytics.track(eventName, properties);\n }\n\n /**\n * Sends a page event to Segment and downstream.\n *\n * @param {*} [name] If only one string arg provided, assumed to be name.\n * @param {*} [category] Name is required to pass a category.\n * @param {*} [properties]\n */\n sendPageEvent(category, name, properties) {\n if (!this.segmentInitialized) {\n return;\n }\n this.checkIdentifyCalled();\n global.analytics.page(category, name, properties);\n }\n}\n\nexport default SegmentAnalyticsService;\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { configureAnalytics, getAnalyticsService, identifyAnonymousUser, identifyAuthenticatedUser, resetAnalyticsService, sendPageEvent, sendTrackEvent, sendTrackingLogEvent } from './interface';
|
|
2
|
+
export { default as MockAnalyticsService } from './MockAnalyticsService';
|
|
3
|
+
export { default as SegmentAnalyticsService } from './SegmentAnalyticsService';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { configureAnalytics, getAnalyticsService, identifyAnonymousUser, identifyAuthenticatedUser, resetAnalyticsService, sendPageEvent, sendTrackEvent, sendTrackingLogEvent } from './interface';
|
|
2
|
+
export { default as MockAnalyticsService } from './MockAnalyticsService';
|
|
3
|
+
export { default as SegmentAnalyticsService } from './SegmentAnalyticsService';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../runtime/analytics/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,oBAAoB,EACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,2BAA2B,CAAC","sourcesContent":["export {\n configureAnalytics,\n getAnalyticsService,\n identifyAnonymousUser,\n identifyAuthenticatedUser,\n resetAnalyticsService,\n sendPageEvent,\n sendTrackEvent,\n sendTrackingLogEvent\n} from './interface';\nexport { default as MockAnalyticsService } from './MockAnalyticsService';\nexport { default as SegmentAnalyticsService } from './SegmentAnalyticsService';\n"]}
|