enhance: cover re-exported gsp cases for runtime fallback (#35326)

Cover re-exported gsp cases from #35011
This commit is contained in:
Jiachi Liu 2022-03-15 14:14:18 +01:00 committed by GitHub
parent 2e16d02faa
commit 99aea513bf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 37 additions and 7 deletions

View file

@ -144,7 +144,7 @@ export async function getPageRuntime(
for (const node of body) {
const { type, declaration } = node
if (type === 'ExportDeclaration') {
// `export const config`
// Match `export const config`
const valueNode = declaration?.declarations?.[0]
if (valueNode?.id?.value === 'config') {
const props = valueNode.init.properties
@ -155,15 +155,30 @@ export async function getPageRuntime(
pageRuntime =
runtime === 'edge' || runtime === 'nodejs' ? runtime : pageRuntime
} else if (declaration?.type === 'FunctionDeclaration') {
// `export function getStaticProps` and
// `export function getServerSideProps`
// Match `export function getStaticProps | getServerSideProps`
const identifier = declaration.identifier?.value
if (
declaration.identifier?.value === 'getStaticProps' ||
declaration.identifier?.value === 'getServerSideProps'
identifier === 'getStaticProps' ||
identifier === 'getServerSideProps'
) {
isRuntimeRequired = true
}
}
} else if (type === 'ExportNamedDeclaration') {
// Match `export { getStaticProps | getServerSideProps } <from '../..'>`
const { specifiers } = node
for (const specifier of specifiers) {
const { orig } = specifier
const hasDataFetchingExports =
specifier.type === 'ExportSpecifier' &&
orig?.type === 'Identifier' &&
(orig?.value === 'getStaticProps' ||
orig?.value === 'getServerSideProps')
if (hasDataFetchingExports) {
isRuntimeRequired = true
break
}
}
}
}
} catch (err) {}

View file

@ -0,0 +1,5 @@
export { getStaticProps } from '../lib/utils'
export default function ImportGsp({ gsp }) {
return `import-${gsp}`
}

View file

@ -24,10 +24,20 @@ describe('parse page runtime config', () => {
)
expect(runtime).toBe(undefined)
})
})
it('should fallback to the global runtime configuration if a runtime is needed', async () => {
describe('fallback to the global runtime configuration', () => {
it('should fallback when gSP is defined and exported', async () => {
const runtime = await getPageRuntime(
join(fixtureDir, 'page-runtime/fallback.js'),
join(fixtureDir, 'page-runtime/fallback-with-gsp.js'),
'edge'
)
expect(runtime).toBe('edge')
})
it('should fallback when gSP is re-exported from other module', async () => {
const runtime = await getPageRuntime(
join(fixtureDir, 'page-runtime/fallback-re-export-gsp.js'),
'edge'
)
expect(runtime).toBe('edge')