MCPcopy Index your code
hub / github.com/angular/angular-cli / extract

Function extract

packages/angular/ssr/src/routes/ng-routes.ts:811–851  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

809 } = options;
810
811 async function extract(): Promise<{
812 appShellRoute: string | undefined;
813 routeTree: RouteTree<{}>;
814 errors: string[];
815 }> {
816 const routeTree = new RouteTree();
817 const document = await new ServerAssets(manifest).getIndexServerHtml().text();
818 const bootstrap = await manifest.bootstrap();
819 const { baseHref, appShellRoute, routes, errors } = await getRoutesFromAngularRouterConfig(
820 bootstrap,
821 document,
822 url,
823 invokeGetPrerenderParams,
824 includePrerenderFallbackRoutes,
825 manifest.entryPointToBrowserMapping,
826 );
827
828 for (const { route, ...metadata } of routes) {
829 if (metadata.redirectTo !== undefined) {
830 metadata.redirectTo = joinUrlParts(baseHref, metadata.redirectTo);
831 }
832
833 // Remove undefined fields
834 // Helps avoid unnecessary test updates
835 for (const [key, value] of Object.entries(metadata)) {
836 if (value === undefined) {
837 // eslint-disable-next-line @typescript-eslint/no-explicit-any
838 delete (metadata as any)[key];
839 }
840 }
841
842 const fullRoute = joinUrlParts(baseHref, route);
843 routeTree.insert(fullRoute, metadata);
844 }
845
846 return {
847 appShellRoute,
848 routeTree,
849 errors,
850 };
851 }
852
853 return signal ? promiseWithAbort(extract(), signal, 'Routes extraction') : extract();
854}

Callers 2

extractFileFunction · 0.50

Calls 6

insertMethod · 0.95
joinUrlPartsFunction · 0.90
textMethod · 0.80
getIndexServerHtmlMethod · 0.80
entriesMethod · 0.45

Tested by

no test coverage detected