Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/canary' into unflag/redirect
Browse files Browse the repository at this point in the history
  • Loading branch information
ijjk committed Oct 27, 2020
2 parents 41d58dc + 2972c06 commit 453a6fd
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 24 deletions.
27 changes: 18 additions & 9 deletions packages/next/next-server/server/render.tsx
Expand Up @@ -636,7 +636,7 @@ export async function renderToHTML(
throw new Error(invalidKeysMsg('getStaticProps', invalidKeys))
}

if (data.unstable_notFound) {
if ('unstable_notFound' in data && data.unstable_notFound) {
if (pathname === '/404') {
throw new Error(
`The /404 page can not return unstable_notFound in "getStaticProps", please remove it to continue!`
Expand All @@ -648,7 +648,11 @@ export async function renderToHTML(
return null
}

if (data.redirect && typeof data.redirect === 'object') {
if (
'redirect' in data &&
data.redirect &&
typeof data.redirect === 'object'
) {
checkRedirectValues(data.redirect, req)

if (isBuildTimeSSG) {
Expand All @@ -659,7 +663,7 @@ export async function renderToHTML(
}

if (isDataReq) {
data.props = {
;(data as any).props = {
__N_REDIRECT: data.redirect.destination,
}
} else {
Expand All @@ -670,15 +674,15 @@ export async function renderToHTML(

if (
(dev || isBuildTimeSSG) &&
!isSerializableProps(pathname, 'getStaticProps', data.props)
!isSerializableProps(pathname, 'getStaticProps', (data as any).props)
) {
// this fn should throw an error instead of ever returning `false`
throw new Error(
'invariant: getStaticProps did not return valid props. Please report this.'
)
}

if (typeof data.revalidate === 'number') {
if ('revalidate' in data && typeof data.revalidate === 'number') {
if (!Number.isInteger(data.revalidate)) {
throw new Error(
`A page's revalidate option must be seconds expressed as a natural number. Mixed numbers, such as '${data.revalidate}', cannot be used.` +
Expand All @@ -699,20 +703,25 @@ export async function renderToHTML(
`\nTo only run getStaticProps at build-time and not revalidate at runtime, you can set \`revalidate\` to \`false\`!`
)
}
} else if (data.revalidate === true) {
} else if ('revalidate' in data && data.revalidate === true) {
// When enabled, revalidate after 1 second. This value is optimal for
// the most up-to-date page possible, but without a 1-to-1
// request-refresh ratio.
data.revalidate = 1
} else {
// By default, we never revalidate.
data.revalidate = false
;(data as any).revalidate = false
}

props.pageProps = Object.assign({}, props.pageProps, data.props)
props.pageProps = Object.assign(
{},
props.pageProps,
'props' in data ? data.props : undefined
)
// pass up revalidate and props for export
// TODO: change this to a different passing mechanism
;(renderOpts as any).revalidate = data.revalidate
;(renderOpts as any).revalidate =
'revalidate' in data ? data.revalidate : undefined
;(renderOpts as any).pageData = props
}

Expand Down
22 changes: 7 additions & 15 deletions packages/next/types/index.d.ts
Expand Up @@ -85,12 +85,10 @@ export type GetStaticPropsContext<Q extends ParsedUrlQuery = ParsedUrlQuery> = {
locales?: string[]
}

export type GetStaticPropsResult<P> = {
props?: P
revalidate?: number | boolean
redirect?: Redirect
unstable_notFound?: true
}
export type GetStaticPropsResult<P> =
| { props: P; revalidate?: number | boolean }
| { redirect: Redirect; revalidate?: number | boolean }
| { unstable_notFound: true }

export type GetStaticProps<
P extends { [key: string]: any } = { [key: string]: any },
Expand Down Expand Up @@ -133,15 +131,9 @@ export type GetServerSidePropsContext<
}

export type GetServerSidePropsResult<P> =
| {
props: P
}
| {
redirect: Redirect
}
| {
unstable_notFound: true
}
| { props: P }
| { redirect: Redirect }
| { unstable_notFound: true }

export type GetServerSideProps<
P extends { [key: string]: any } = { [key: string]: any },
Expand Down

0 comments on commit 453a6fd

Please sign in to comment.