this repo has no description
at main 125 lines 7.0 kB view raw
1import { makeRouterUsingRegisteredControllers } from '@jet/environment/routing'; 2 3import type { AppStoreObjectGraph } from '@jet-app/app-store/foundation/runtime/app-store-object-graph'; 4import { AppStoreIntentDispatcher } from '@jet-app/app-store/foundation/runtime/app-store-intent-dispatcher'; 5import { AppStoreRuntime } from '@jet-app/app-store/foundation/runtime/runtime'; 6 7import { 8 type Dependencies, 9 ObjectGraphType, 10 makeObjectGraph, 11} from '~/jet/dependencies'; 12 13import { AppEventPageIntentController } from '@jet-app/app-store/controllers/app-events/app-event-page-intent-controller'; 14import { BundlePageIntentController } from '@jet-app/app-store/controllers/product-page/bundle-page-intent-controller'; 15import { EditorialPageIntentController } from '@jet-app/app-store/controllers/editorial-pages/editorial-page-intent-controller'; 16import { EditorialShelfCollectionPageIntentController } from '@jet-app/app-store/controllers/editorial-pages/editorial-shelf-collection-page-intent-controller'; 17import { GroupingPageIntentController } from '@jet-app/app-store/controllers/grouping/grouping-page-intent-controller'; 18import { ProductPageIntentController } from '@jet-app/app-store/controllers/product-page/product-page-intent-controller'; 19import { SearchLandingPageIntentController } from '@jet-app/app-store/controllers/search/search-landing-page-intent-controller'; 20import { SearchResultsPageIntentController } from '@jet-app/app-store/controllers/search/search-results-controller'; 21import { RoutableArticlePageIntentController } from '@jet-app/app-store/controllers/today/routable-article-page-intent-controller'; 22import { ArcadeGroupingPageIntentController } from '@jet-app/app-store/controllers/arcade/arcade-grouping-page-intent-controller'; 23import { DeveloperPageIntentController } from '@jet-app/app-store/controllers/developer/developer-page-intent-controller'; 24import { ChartsPageIntentController } from '@jet-app/app-store/controllers/top-charts/charts-page-intent-controller'; 25import { ChartsHubPageIntentController } from '@jet-app/app-store/controllers/top-charts/charts-hub-page-intent-controller'; 26import { SeeAllPageIntentController } from '@jet-app/app-store/controllers/product-page/see-all-intent-controller'; 27import { RoutableTodayPageIntentController } from '@jet-app/app-store/controllers/today/routable-today-page-intent-controller'; 28import { RoomPageIntentController } from '@jet-app/app-store/controllers/room/room-page-intent-controller'; 29import { RoutableArcadeSeeAllPageController } from '@jet-app/app-store/controllers/arcade/routable-arcade-see-all-page-controller'; 30import * as landingPageNavigationControllers from '@jet-app/app-store/common/web-navigation/platform-landing-page-intent-controllers'; 31import { RootRedirectController } from '@jet-app/app-store/common/web-navigation/platform-landing-page-intent-controllers'; 32import { EulaPageIntentController } from '@jet-app/app-store/controllers/product-page/eula-page-intent-controller'; 33import { CategoryTabsIntentController } from '@jet-app/app-store/controllers/web-navigation/category-tabs-intent-controller'; 34 35import { ErrorPageIntentController } from '~/jet/intents/error-page-intent-controller'; 36import { ChartsPageRedirectIntentController } from '~/jet/intents/charts-page-redirect-intent-controller'; 37 38import { 39 RouteUrlIntentController, 40 LintMetricsEventIntentController, 41} from '~/jet/intents'; 42import * as staticMessagePageControllers from '~/jet/intents/static-message-pages'; 43 44function makeIntentDispatcher(): AppStoreIntentDispatcher { 45 const intentDispatcher = new AppStoreIntentDispatcher(); 46 47 intentDispatcher.register(RouteUrlIntentController); 48 intentDispatcher.register(LintMetricsEventIntentController); 49 50 // Route Providers 51 for (const Controller of Object.values(landingPageNavigationControllers)) { 52 // `RootRedirectController` needs to be registered last, due to it's path match of `/{sf}`, 53 // it could inadvertently match a landing page route like `/vision`, so we are skipping it here 54 // and registering it at the bottom of this function. 55 if (Controller !== RootRedirectController) { 56 intentDispatcher.register(Controller); 57 } 58 } 59 60 for (const StaticMessagePageController of Object.values( 61 staticMessagePageControllers, 62 )) { 63 intentDispatcher.register(StaticMessagePageController); 64 } 65 66 intentDispatcher.register(ArcadeGroupingPageIntentController); 67 intentDispatcher.register(BundlePageIntentController); 68 intentDispatcher.register(EditorialPageIntentController); 69 intentDispatcher.register(EditorialShelfCollectionPageIntentController); 70 intentDispatcher.register(GroupingPageIntentController); 71 intentDispatcher.register(new SearchResultsPageIntentController()); 72 intentDispatcher.register(SearchLandingPageIntentController); 73 intentDispatcher.register(DeveloperPageIntentController); 74 intentDispatcher.register(RoutableArticlePageIntentController); 75 intentDispatcher.register(RoutableTodayPageIntentController); 76 intentDispatcher.register(RoomPageIntentController); 77 intentDispatcher.register(RoutableArcadeSeeAllPageController); 78 intentDispatcher.register(EulaPageIntentController); 79 intentDispatcher.register(ChartsPageRedirectIntentController); 80 intentDispatcher.register(ErrorPageIntentController); 81 82 // "Charts" Pages; "hub" must come first since so it's URL matches before the "detail" page 83 intentDispatcher.register(ChartsHubPageIntentController); 84 intentDispatcher.register(ChartsPageIntentController); 85 86 // Product Page Routes; order is important due to overlapping URL patterns 87 // The product page itself must come last or it will match the more-specific patterns 88 intentDispatcher.register(AppEventPageIntentController); 89 intentDispatcher.register(SeeAllPageIntentController); 90 intentDispatcher.register(ProductPageIntentController); 91 92 intentDispatcher.register(new CategoryTabsIntentController()); 93 94 // We register the root redirect controller last so more specific path patterns can be matched first 95 intentDispatcher.register(RootRedirectController); 96 97 return intentDispatcher; 98} 99 100/** 101 * Bootstraps the Jet runtime for Apps 102 * 103 * @param dependencies dependencies to initialize the Object Graph with 104 */ 105export function bootstrap(dependencies: Dependencies): { 106 runtime: AppStoreRuntime; 107 objectGraph: AppStoreObjectGraph; 108} { 109 const intentDispatcher = makeIntentDispatcher(); 110 111 const baseObjectGraph = makeObjectGraph(dependencies); 112 113 const router = makeRouterUsingRegisteredControllers( 114 intentDispatcher, 115 baseObjectGraph, 116 ); 117 const appObjectGraph = baseObjectGraph 118 .adding(ObjectGraphType.router, router) 119 .adding(ObjectGraphType.dispatcher, intentDispatcher); 120 121 return { 122 runtime: new AppStoreRuntime(intentDispatcher, appObjectGraph), 123 objectGraph: appObjectGraph, 124 }; 125}