enhance: cover re-exported gsp cases for runtime fallback (#35326)
Cover re-exported gsp cases from #35011
This commit is contained in:
parent
2e16d02faa
commit
99aea513bf
4 changed files with 37 additions and 7 deletions
|
@ -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) {}
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
export { getStaticProps } from '../lib/utils'
|
||||
|
||||
export default function ImportGsp({ gsp }) {
|
||||
return `import-${gsp}`
|
||||
}
|
|
@ -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')
|
||||
|
|
Loading…
Reference in a new issue