()
| 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 | } |
no test coverage detected