Duffer Derek
{"version":3,"sources":["../../src/build/route-discovery.ts"],"sourcesContent":["import { join } from 'path'\nimport { createValidFileMatcher } from '../server/lib/find-page-file'\nimport { recursiveReadDir } from '../lib/recursive-readdir'\nimport {\n APP_DIR_ALIAS,\n PAGES_DIR_ALIAS,\n ROOT_DIR_ALIAS,\n} from '../lib/constants'\nimport { normalizePathSep } from '../shared/lib/page-path/normalize-path-sep'\nimport { normalizeAppPath } from '../shared/lib/router/utils/app-paths'\nimport { ensureLeadingSlash } from '../shared/lib/page-path/ensure-leading-slash'\nimport { PAGE_TYPES } from '../lib/page-types'\nimport {\n extractSlotsFromRoutes,\n combineSlots,\n type SlotInfo,\n type RouteInfo,\n} from './file-classifier'\nimport {\n normalizeMetadataRoute,\n normalizeMetadataPageToRoute,\n} from '../lib/metadata/get-metadata-route'\nimport { isMetadataRouteFile } from '../lib/metadata/is-metadata-route'\nimport { getPageStaticInfo } from './analysis/get-page-static-info'\nimport {\n UNDERSCORE_NOT_FOUND_ROUTE,\n UNDERSCORE_NOT_FOUND_ROUTE_ENTRY,\n UNDERSCORE_GLOBAL_ERROR_ROUTE,\n UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY,\n} from '../shared/lib/entry-constants'\nimport { isReservedPage } from './utils'\nimport type { PageExtensions } from './page-extensions-type'\nimport type { MappedPages } from './build-context'\n\nconst PRIVATE_PAGES_PREFIX_REGEX = /^private-next-pages\\//\nconst PRIVATE_APP_PREFIX_REGEX = /^private-next-app-dir\\//\nconst SKIP_ROUTES = new Set([\n UNDERSCORE_NOT_FOUND_ROUTE_ENTRY,\n UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY,\n])\n\nfunction removeSuffix(value: string, suffix: string): string {\n return value.endsWith(suffix) ? value.slice(0, -suffix.length) : value\n}\n\n/** Normalize a route for the app router */\nfunction normalizeAppRoute(pageName: string): string {\n return normalizeAppPath(normalizePathSep(pageName))\n}\n\n/** Normalize a layout route (strip /layout suffix) */\nfunction normalizeLayoutRoute(pageName: string): string {\n return ensureLeadingSlash(\n removeSuffix(normalizeAppPath(normalizePathSep(pageName)), '/layout')\n )\n}\n\n/**\n * For a given page path removes the provided extensions.\n */\nexport function getPageFromPath(\n pagePath: string,\n pageExtensions: PageExtensions\n) {\n let page = normalizePathSep(pagePath)\n // Try longer extensions first so compound extensions like 'page.js'\n // match before shorter ones like 'js'\n const sorted = [...pageExtensions].sort((a, b) => b.length - a.length)\n for (const extension of sorted) {\n const next = removeSuffix(page, `.${extension}`)\n if (next !== page) {\n page = next\n break\n }\n }\n\n page = removeSuffix(page, '/index')\n\n return page === '' ? '/' : page\n}\n\n/**\n * Collect app pages, layouts, and default files from the app directory\n */\nexport async function collectAppFiles(\n appDir: string,\n validFileMatcher: ReturnType<typeof createValidFileMatcher>\n): Promise<{\n appPaths: string[]\n layoutPaths: string[]\n defaultPaths: string[]\n}> {\n const allAppFiles = await recursiveReadDir(appDir, {\n pathnameFilter: (absolutePath) =>\n validFileMatcher.isAppRouterPage(absolutePath) ||\n validFileMatcher.isRootNotFound(absolutePath) ||\n validFileMatcher.isAppLayoutPage(absolutePath) ||\n validFileMatcher.isAppDefaultPage(absolutePath),\n ignorePartFilter: (part) => part.startsWith('_'),\n })\n\n const appPaths = allAppFiles.filter(\n (absolutePath) =>\n validFileMatcher.isAppRouterPage(absolutePath) ||\n validFileMatcher.isRootNotFound(absolutePath)\n )\n const layoutPaths = allAppFiles.filter((absolutePath) =>\n validFileMatcher.isAppLayoutPage(absolutePath)\n )\n const defaultPaths = allAppFiles.filter((absolutePath) =>\n validFileMatcher.isAppDefaultPage(absolutePath)\n )\n\n return { appPaths, layoutPaths, defaultPaths }\n}\n\n/**\n * Collect pages from the pages directory\n */\nexport async function collectPagesFiles(\n pagesDir: string,\n validFileMatcher: ReturnType<typeof createValidFileMatcher>\n): Promise<string[]> {\n return await recursiveReadDir(pagesDir, {\n pathnameFilter: validFileMatcher.isPageFile,\n })\n}\n\n/**\n * Create a relative file path from a mapped page path\n */\nexport function createRelativeFilePath(\n baseDir: string,\n filePath: string,\n prefix: 'pages' | 'app',\n isSrcDir: boolean\n): string {\n const privatePrefixRegex =\n prefix === 'pages' ? PRIVATE_PAGES_PREFIX_REGEX : PRIVATE_APP_PREFIX_REGEX\n const srcPrefix = isSrcDir ? 'src/' : ''\n return join(\n baseDir,\n filePath.replace(privatePrefixRegex, `${srcPrefix}${prefix}/`)\n )\n}\n\n/**\n * Process pages routes from mapped pages\n */\nexport function processPageRoutes(\n mappedPages: { [page: string]: string },\n baseDir: string,\n isSrcDir: boolean\n): {\n pageRoutes: RouteInfo[]\n pageApiRoutes: RouteInfo[]\n} {\n const pageRoutes: RouteInfo[] = []\n const pageApiRoutes: RouteInfo[] = []\n\n for (const [route, filePath] of Object.entries(mappedPages)) {\n const relativeFilePath = createRelativeFilePath(\n baseDir,\n filePath,\n 'pages',\n isSrcDir\n )\n\n if (route.startsWith('/api/')) {\n pageApiRoutes.push({\n route: normalizePathSep(route),\n filePath: relativeFilePath,\n })\n } else {\n if (isReservedPage(route)) continue\n\n pageRoutes.push({\n route: normalizePathSep(route),\n filePath: relativeFilePath,\n })\n }\n }\n\n return { pageRoutes, pageApiRoutes }\n}\n\n/**\n * Process app routes from mapped app pages\n */\nexport function processAppRoutes(\n mappedAppPages: { [page: string]: string },\n validFileMatcher: ReturnType<typeof createValidFileMatcher>,\n baseDir: string,\n isSrcDir: boolean\n): {\n appRoutes: RouteInfo[]\n appRouteHandlers: RouteInfo[]\n} {\n const appRoutes: RouteInfo[] = []\n const appRouteHandlers: RouteInfo[] = []\n\n for (const [page, filePath] of Object.entries(mappedAppPages)) {\n if (\n page === UNDERSCORE_NOT_FOUND_ROUTE_ENTRY ||\n page === UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY\n ) {\n continue\n }\n\n const relativeFilePath = createRelativeFilePath(\n baseDir,\n filePath,\n 'app',\n isSrcDir\n )\n const route = normalizeAppRoute(page)\n\n if (validFileMatcher.isAppRouterRoute(filePath)) {\n appRouteHandlers.push({ route, filePath: relativeFilePath })\n } else {\n appRoutes.push({ route, filePath: relativeFilePath })\n }\n }\n\n return { appRoutes, appRouteHandlers }\n}\n\n/**\n * Process layout routes from mapped app layouts\n */\nexport function processLayoutRoutes(\n mappedAppLayouts: { [page: string]: string },\n baseDir: string,\n isSrcDir: boolean\n): RouteInfo[] {\n return Object.entries(mappedAppLayouts).map(([route, filePath]) => ({\n route: normalizeLayoutRoute(route),\n filePath: createRelativeFilePath(baseDir, filePath, 'app', isSrcDir),\n }))\n}\n\n/**\n * Creates a mapping of route to page file path for a given list of page paths.\n */\nexport async function createPagesMapping({\n isDev,\n pageExtensions,\n pagePaths,\n pagesType,\n pagesDir,\n appDir,\n appDirOnly,\n}: {\n isDev: boolean\n pageExtensions: PageExtensions\n pagePaths: string[]\n pagesType: PAGE_TYPES\n pagesDir: string | undefined\n appDir: string | undefined\n appDirOnly: boolean\n}): Promise<MappedPages> {\n const isAppRoute = pagesType === 'app'\n\n const promises = pagePaths.map<Promise<[string, string] | undefined>>(\n async (pagePath) => {\n if (pagePath.endsWith('.d.ts') && pageExtensions.includes('ts')) {\n return\n }\n\n let pageKey = getPageFromPath(pagePath, pageExtensions)\n if (isAppRoute) {\n // Turbopack encodes '_' as '%5F' in app paths; normalize to underscores.\n pageKey = pageKey.replace(/%5F/g, '_')\n if (pageKey === UNDERSCORE_NOT_FOUND_ROUTE) {\n pageKey = UNDERSCORE_NOT_FOUND_ROUTE_ENTRY\n }\n if (pageKey === UNDERSCORE_GLOBAL_ERROR_ROUTE) {\n pageKey = UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY\n }\n }\n\n const normalizedPath = normalizePathSep(\n join(\n pagesType === PAGE_TYPES.PAGES\n ? PAGES_DIR_ALIAS\n : pagesType === PAGE_TYPES.APP\n ? APP_DIR_ALIAS\n : ROOT_DIR_ALIAS,\n pagePath\n )\n )\n\n let route =\n pagesType === PAGE_TYPES.APP ? normalizeMetadataRoute(pageKey) : pageKey\n\n if (\n pagesType === PAGE_TYPES.APP &&\n isMetadataRouteFile(pagePath, pageExtensions, true)\n ) {\n const filePath = join(appDir!, pagePath)\n const staticInfo = await getPageStaticInfo({\n nextConfig: {},\n pageFilePath: filePath,\n isDev,\n page: pageKey,\n pageType: pagesType,\n })\n\n route = normalizeMetadataPageToRoute(\n route,\n !!(staticInfo.generateImageMetadata || staticInfo.generateSitemaps)\n )\n }\n\n return [route, normalizedPath]\n }\n )\n\n const pages: MappedPages = Object.fromEntries(\n (await Promise.all(promises)).filter((entry) => entry != null)\n )\n\n switch (pagesType) {\n case PAGE_TYPES.ROOT: {\n return pages\n }\n case PAGE_TYPES.APP: {\n const hasAppPages = Object.keys(pages).length > 0\n const hasAppGlobalError = !isDev && appDirOnly\n return {\n ...(hasAppPages && {\n [UNDERSCORE_NOT_FOUND_ROUTE_ENTRY]: require.resolve(\n 'next/dist/client/components/builtin/global-not-found'\n ),\n }),\n ...(hasAppGlobalError && {\n [UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY]: require.resolve(\n 'next/dist/client/components/builtin/app-error'\n ),\n }),\n ...pages,\n }\n }\n case PAGE_TYPES.PAGES: {\n if (isDev) {\n delete pages['/_app']\n delete pages['/_error']\n delete pages['/_document']\n }\n\n const root = isDev && pagesDir ? PAGES_DIR_ALIAS : 'next/dist/pages'\n\n if (Object.keys(pages).length === 0 && !appDirOnly) {\n appDirOnly = true\n }\n\n return {\n ...((isDev || !appDirOnly) && {\n '/_app': `${root}/_app`,\n '/_error': `${root}/_error`,\n '/_document': `${root}/_document`,\n ...pages,\n }),\n }\n }\n default: {\n return {}\n }\n }\n}\n\nexport interface RouteDiscoveryOptions {\n appDir?: string\n pagesDir?: string\n pageExtensions: string[]\n isDev: boolean\n baseDir: string\n /** Whether the app/pages directories are under a /src directory. */\n isSrcDir?: boolean\n /** Override app-dir-only mode (e.g. from --experimental-app-only CLI flag) */\n appDirOnly?: boolean\n validFileMatcher?: ReturnType<typeof createValidFileMatcher>\n debugBuildPaths?: { app: string[]; pages: string[] }\n}\n\nexport interface RouteDiscoveryResult {\n appRoutes: RouteInfo[]\n appRouteHandlers: RouteInfo[]\n layoutRoutes: RouteInfo[]\n slots: SlotInfo[]\n pageRoutes: RouteInfo[]\n pageApiRoutes: RouteInfo[]\n mappedAppPages?: MappedPages\n mappedAppLayouts?: MappedPages\n mappedPages?: MappedPages\n /** Raw page file paths (post-filtering), useful for telemetry */\n pagesPaths: string[]\n /** Resolved app-dir-only state (may have been updated during discovery) */\n appDirOnly: boolean\n}\n\n/**\n * High-level API: Collect, map, and process all routes in one call\n */\nexport async function discoverRoutes(\n options: RouteDiscoveryOptions\n): Promise<RouteDiscoveryResult> {\n const {\n appDir,\n pagesDir,\n pageExtensions,\n isDev,\n baseDir,\n isSrcDir,\n debugBuildPaths,\n } = options\n\n const validFileMatcher =\n options.validFileMatcher || createValidFileMatcher(pageExtensions, appDir)\n\n let appDirOnly = options.appDirOnly ?? (!!appDir && !pagesDir)\n\n // Helper to reduce createPagesMapping boilerplate\n const mapPaths = (pagePaths: string[], pagesType: PAGE_TYPES) =>\n createPagesMapping({\n pagePaths,\n isDev,\n pagesType,\n pageExtensions,\n pagesDir,\n appDir,\n appDirOnly,\n })\n\n // Helper to apply debugBuildPaths filtering\n const applyDebugFilter = (\n paths: string[],\n debugPaths: string[]\n ): string[] => {\n if (debugPaths.length > 0) {\n const debugPathsSet = new Set(debugPaths)\n return paths.filter((p) => debugPathsSet.has(p))\n }\n // Empty array means build none\n return []\n }\n\n let pageRoutes: RouteInfo[] = []\n let pageApiRoutes: RouteInfo[] = []\n let mappedPages: MappedPages | undefined\n let pagesPaths: string[] = []\n\n if (pagesDir && !appDirOnly) {\n if (process.env.NEXT_PRIVATE_PAGE_PATHS) {\n pagesPaths = JSON.parse(process.env.NEXT_PRIVATE_PAGE_PATHS)\n } else {\n pagesPaths = await collectPagesFiles(pagesDir, validFileMatcher)\n\n if (debugBuildPaths) {\n pagesPaths = applyDebugFilter(pagesPaths, debugBuildPaths.pages)\n }\n }\n\n mappedPages = await mapPaths(pagesPaths, PAGE_TYPES.PAGES)\n\n // Update appDirOnly if no user page routes were found, so the\n // subsequent app mapping can emit the global error entry.\n if (Object.keys(mappedPages).length === 0) {\n appDirOnly = true\n }\n\n ;({ pageRoutes, pageApiRoutes } = processPageRoutes(\n mappedPages,\n baseDir,\n !!isSrcDir\n ))\n }\n\n let appRoutes: RouteInfo[] = []\n let appRouteHandlers: RouteInfo[] = []\n let layoutRoutes: RouteInfo[] = []\n let slots: SlotInfo[] = []\n let mappedAppPages: MappedPages | undefined\n let mappedAppLayouts: MappedPages | undefined\n\n if (appDir) {\n let appPaths: string[]\n let layoutPaths: string[]\n let defaultPaths: string[]\n\n if (process.env.NEXT_PRIVATE_APP_PATHS) {\n // Used for testing — override collected app paths\n appPaths = JSON.parse(process.env.NEXT_PRIVATE_APP_PATHS)\n layoutPaths = []\n defaultPaths = []\n } else {\n const result = await collectAppFiles(appDir, validFileMatcher)\n appPaths = result.appPaths\n layoutPaths = result.layoutPaths\n defaultPaths = result.defaultPaths\n\n if (debugBuildPaths) {\n appPaths = applyDebugFilter(appPaths, debugBuildPaths.app)\n }\n }\n\n // Map all app file types in parallel\n let mappedDefaultFiles: MappedPages\n ;[mappedAppPages, mappedAppLayouts, mappedDefaultFiles] = await Promise.all(\n [\n mapPaths(appPaths, PAGE_TYPES.APP),\n mapPaths(layoutPaths, PAGE_TYPES.APP),\n mapPaths(defaultPaths, PAGE_TYPES.APP),\n ]\n )\n\n // Extract slots from pages and default files\n slots = combineSlots(\n extractSlotsFromRoutes(mappedAppPages, SKIP_ROUTES),\n extractSlotsFromRoutes(mappedDefaultFiles)\n )\n\n // Process routes\n ;({ appRoutes, appRouteHandlers } = processAppRoutes(\n mappedAppPages,\n validFileMatcher,\n baseDir,\n !!isSrcDir\n ))\n layoutRoutes = processLayoutRoutes(mappedAppLayouts, baseDir, !!isSrcDir)\n }\n\n return {\n appRoutes,\n appRouteHandlers,\n layoutRoutes,\n slots,\n pageRoutes,\n pageApiRoutes,\n mappedAppPages,\n mappedAppLayouts,\n mappedPages,\n pagesPaths,\n appDirOnly,\n }\n}\n"],"names":["collectAppFiles","collectPagesFiles","createPagesMapping","createRelativeFilePath","discoverRoutes","getPageFromPath","processAppRoutes","processLayoutRoutes","processPageRoutes","PRIVATE_PAGES_PREFIX_REGEX","PRIVATE_APP_PREFIX_REGEX","SKIP_ROUTES","Set","UNDERSCORE_NOT_FOUND_ROUTE_ENTRY","UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY","removeSuffix","value","suffix","endsWith","slice","length","normalizeAppRoute","pageName","normalizeAppPath","normalizePathSep","normalizeLayoutRoute","ensureLeadingSlash","pagePath","pageExtensions","page","sorted","sort","a","b","extension","next","appDir","validFileMatcher","allAppFiles","recursiveReadDir","pathnameFilter","absolutePath","isAppRouterPage","isRootNotFound","isAppLayoutPage","isAppDefaultPage","ignorePartFilter","part","startsWith","appPaths","filter","layoutPaths","defaultPaths","pagesDir","isPageFile","baseDir","filePath","prefix","isSrcDir","privatePrefixRegex","srcPrefix","join","replace","mappedPages","pageRoutes","pageApiRoutes","route","Object","entries","relativeFilePath","push","isReservedPage","mappedAppPages","appRoutes","appRouteHandlers","isAppRouterRoute","mappedAppLayouts","map","isDev","pagePaths","pagesType","appDirOnly","isAppRoute","promises","includes","pageKey","UNDERSCORE_NOT_FOUND_ROUTE","UNDERSCORE_GLOBAL_ERROR_ROUTE","normalizedPath","PAGE_TYPES","PAGES","PAGES_DIR_ALIAS","APP","APP_DIR_ALIAS","ROOT_DIR_ALIAS","normalizeMetadataRoute","isMetadataRouteFile","staticInfo","getPageStaticInfo","nextConfig","pageFilePath","pageType","normalizeMetadataPageToRoute","generateImageMetadata","generateSitemaps","pages","fromEntries","Promise","all","entry","ROOT","hasAppPages","keys","hasAppGlobalError","require","resolve","root","options","debugBuildPaths","createValidFileMatcher","mapPaths","applyDebugFilter","paths","debugPaths","debugPathsSet","p","has","pagesPaths","process","env","NEXT_PRIVATE_PAGE_PATHS","JSON","parse","layoutRoutes","slots","NEXT_PRIVATE_APP_PATHS","result","app","mappedDefaultFiles","combineSlots","extractSlotsFromRoutes"],"mappings":"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","ignoreList":[0]}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists