From 396644220970bb7946fe2202fc44dd0013d0f4a7 Mon Sep 17 00:00:00 2001 From: himself65 Date: Tue, 15 Nov 2022 16:13:08 -0600 Subject: [PATCH] fix: get source file for page in api routes Fixes: https://github.com/netlify/next-runtime/issues/1774 --- packages/runtime/src/helpers/files.ts | 12 +++++++----- packages/runtime/src/helpers/functions.ts | 5 ++++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/runtime/src/helpers/files.ts b/packages/runtime/src/helpers/files.ts index 387a9d0b13..ef43af64e4 100644 --- a/packages/runtime/src/helpers/files.ts +++ b/packages/runtime/src/helpers/files.ts @@ -337,11 +337,13 @@ const getServerFile = (root: string, includeBase = true) => { /** * Find the source file for a given page route */ -export const getSourceFileForPage = (page: string, root: string) => { - for (const extension of SOURCE_FILE_EXTENSIONS) { - const file = join(root, `${page}.${extension}`) - if (existsSync(file)) { - return file +export const getSourceFileForPage = (page: string, roots: string[]) => { + for (const root of roots) { + for (const extension of SOURCE_FILE_EXTENSIONS) { + const file = join(root, `${page}.${extension}`) + if (existsSync(file)) { + return file + } } } console.log('Could not find source file for page', page) diff --git a/packages/runtime/src/helpers/functions.ts b/packages/runtime/src/helpers/functions.ts index 052e0b5efc..c1fb651968 100644 --- a/packages/runtime/src/helpers/functions.ts +++ b/packages/runtime/src/helpers/functions.ts @@ -174,11 +174,14 @@ export const setupImageFunction = async ({ export const getApiRouteConfigs = async (publish: string, baseDir: string): Promise> => { const pages = await readJSON(join(publish, 'server', 'pages-manifest.json')) const apiRoutes = Object.keys(pages).filter((page) => page.startsWith('/api/')) + // two possible places + // Ref: https://nextjs.org/docs/advanced-features/src-directory const pagesDir = join(baseDir, 'pages') + const srcPagesDir = join(baseDir, 'src', 'pages') return await Promise.all( apiRoutes.map(async (apiRoute) => { - const filePath = getSourceFileForPage(apiRoute, pagesDir) + const filePath = getSourceFileForPage(apiRoute, [pagesDir, srcPagesDir]) return { route: apiRoute, config: await extractConfigFromFile(filePath), compiled: pages[apiRoute] } }), )