1// This file runs in Node.js environments. 2// no relative imports 3import { getRoutes } from './getRoutes'; 4import { getServerManifest } from './getServerManifest'; 5import { RequireContext } from './types'; 6 7export type RouteInfo<TRegex = string> = { 8 page: string; 9 namedRegex: TRegex; 10 routeKeys: { [named: string]: string }; 11}; 12 13export type ExpoRoutesManifestV1<TRegex = string> = { 14 apiRoutes: RouteInfo<TRegex>[]; 15 htmlRoutes: RouteInfo<TRegex>[]; 16 notFoundRoutes: RouteInfo<TRegex>[]; 17}; 18 19function createMockContextModule(map: string[] = []) { 20 const contextModule = (key) => ({ default() {} }); 21 22 Object.defineProperty(contextModule, 'keys', { 23 value: () => map, 24 }); 25 26 return contextModule as RequireContext; 27} 28 29export function createRoutesManifest(paths: string[]): ExpoRoutesManifestV1 | null { 30 // TODO: Drop this part for Node.js 31 const routeTree = getRoutes(createMockContextModule(paths), { 32 preserveApiRoutes: true, 33 ignoreRequireErrors: true, 34 }); 35 36 if (!routeTree) { 37 return null; 38 } 39 return getServerManifest(routeTree); 40} 41