UNPKG

next

Version:

The React Framework

45 lines (44 loc) 1.95 kB
import { isAppPageRoute } from '../../lib/is-app-page-route'; import { APP_PATHS_MANIFEST } from '../../shared/lib/constants'; import { AppNormalizers } from '../normalizers/built/app'; import { RouteKind } from '../route-kind'; import { AppPageRouteMatcher } from '../route-matchers/app-page-route-matcher'; import { ManifestRouteMatcherProvider } from './manifest-route-matcher-provider'; export class AppPageRouteMatcherProvider extends ManifestRouteMatcherProvider { constructor(distDir, manifestLoader){ super(APP_PATHS_MANIFEST, manifestLoader); this.normalizers = new AppNormalizers(distDir); } async transform(manifest) { // This matcher only matches app pages. const pages = Object.keys(manifest).filter((page)=>isAppPageRoute(page)); // Collect all the app paths for each page. This could include any parallel // routes. const allAppPaths = {}; for (const page of pages){ const pathname = this.normalizers.pathname.normalize(page); if (pathname in allAppPaths) allAppPaths[pathname].push(page); else allAppPaths[pathname] = [ page ]; } // Format the routes. const matchers = []; for (const [pathname, appPaths] of Object.entries(allAppPaths)){ // TODO-APP: (wyattjoh) this is a hack right now, should be more deterministic const page = appPaths[0]; const filename = this.normalizers.filename.normalize(manifest[page]); const bundlePath = this.normalizers.bundlePath.normalize(page); matchers.push(new AppPageRouteMatcher({ kind: RouteKind.APP_PAGE, pathname, page, bundlePath, filename, appPaths })); } return matchers; } } //# sourceMappingURL=app-page-route-matcher-provider.js.map