Skip to content

Commit

Permalink
fix test cases and clean up loader
Browse files Browse the repository at this point in the history
  • Loading branch information
shuding committed Jan 25, 2022
1 parent e5658f2 commit 5369da5
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 121 deletions.
Expand Up @@ -12,7 +12,6 @@ export default async function middlewareSSRLoader(this: any) {
absoluteErrorPath,
isServerComponent,
stringifiedConfig,
...restRenderOpts
} = this.getOptions()

const stringifiedAbsolutePagePath = stringifyRequest(this, absolutePagePath)
Expand Down Expand Up @@ -59,6 +58,7 @@ export default async function middlewareSSRLoader(this: any) {
getServerSideProps: pageMod.getServerSideProps,
getStaticPaths: pageMod.getStaticPaths,
ComponentMod: undefined,
serverComponentManifest: ${isServerComponent} ? rscManifest : null,
// components
errorMod,
Expand All @@ -73,16 +73,9 @@ export default async function middlewareSSRLoader(this: any) {
}
const render = getRender({
App,
Document,
pageMod,
errorMod,
buildManifest,
reactLoadableManifest,
rscManifest,
isServerComponent: ${isServerComponent},
config: ${stringifiedConfig},
restRenderOpts: ${JSON.stringify(restRenderOpts)}
})
export default function rscMiddleware(opts) {
Expand Down
Expand Up @@ -12,9 +12,6 @@ const createHeaders = (args?: any) => ({
'Cache-Control': 'no-cache, no-store, max-age=0, must-revalidate',
})

// const encoder = new TextEncoder()
// const decoder = new TextDecoder()

function sendError(req: any, error: Error) {
const defaultMessage = 'An error occurred while rendering ' + req.url + '.'
return new Response((error && error.message) || defaultMessage, {
Expand All @@ -24,26 +21,12 @@ function sendError(req: any, error: Error) {
}

export function getRender({
App,
Document,
pageMod,
errorMod,
rscManifest,
buildManifest,
reactLoadableManifest,
isServerComponent,
restRenderOpts,
config,
}: {
App: any
Document: any
pageMod: any
errorMod: any
rscManifest: object
buildManifest: any
reactLoadableManifest: any
isServerComponent: boolean
restRenderOpts: any
config: NextConfig
}) {
// Used by `path-browserify`.
Expand Down Expand Up @@ -88,104 +71,16 @@ export function getRender({
? JSON.parse(query.__props__)
: undefined

delete query.__flight__
delete query.__props__

// Extend the options.
Object.assign((self as any).__server_context, {
renderServerComponentData,
serverComponentProps,
serverComponentManifest: isServerComponent ? rscManifest : null,
})

const extendedReq = new WebNextRequest(request)
const transformStream = new TransformStream()
const extendedRes = new WebNextResponse(transformStream)
requestHandler(extendedReq, extendedRes)
return await extendedRes.toResponse()

// const renderOpts = {
// ...restRenderOpts,
// // Locales are not supported yet.
// // locales: i18n?.locales,
// // locale: detectedLocale,
// // defaultLocale,
// // domainLocales: i18n?.domains,
// dev: process.env.NODE_ENV !== 'production',
// App,
// Document,
// buildManifest,
// Component: pageMod.default,
// pageConfig: pageMod.config || {},
// getStaticProps: pageMod.getStaticProps,
// getServerSideProps: pageMod.getServerSideProps,
// getStaticPaths: pageMod.getStaticPaths,
// reactLoadableManifest,
// env: process.env,
// supportsDynamicHTML: true,
// concurrentFeatures: true,
// // When streaming, opt-out the `defer` behavior for script tags.
// disableOptimizedLoading: true,
// renderServerComponentData,
// serverComponentProps,
// serverComponentManifest: isServerComponent ? rscManifest : null,
// ComponentMod: null,
// }

// const transformStream = new TransformStream()
// const writer = transformStream.writable.getWriter()

// let result: RenderResult | null
// let renderError: any
// try {
// result = await renderToHTML(
// req as any,
// {} as any,
// pathname,
// query,
// renderOpts
// )
// } catch (err: any) {
// console.error(
// 'An error occurred while rendering the initial result:',
// err
// )
// const errorRes = { statusCode: 500, err }
// renderError = err
// try {
// req.url = '/_error'
// result = await renderToHTML(
// req as any,
// errorRes as any,
// '/_error',
// query,
// {
// ...renderOpts,
// err,
// Component: errorMod.default,
// getStaticProps: errorMod.getStaticProps,
// getServerSideProps: errorMod.getServerSideProps,
// getStaticPaths: errorMod.getStaticPaths,
// }
// )
// } catch (err2: any) {
// return sendError(req, err2)
// }
// }

// if (!result) {
// return sendError(req, new Error('No result returned from render.'))
// }

// result.pipe({
// write: (str: string) => writer.write(encoder.encode(str)),
// end: () => writer.close(),
// // Not implemented: cork/uncork/on/removeListener
// } as any)

// return new Response(transformStream.readable, {
// headers: createHeaders(),
// status: renderError ? 500 : 200,
// })
}
}
4 changes: 0 additions & 4 deletions packages/next/server/base-server.ts
Expand Up @@ -597,10 +597,6 @@ export default abstract class Server {
// Backwards compatibility
protected async close(): Promise<void> {}

protected setImmutableAssetCacheControl(res: BaseNextResponse): void {
res.setHeader('Cache-Control', 'public, max-age=31536000, immutable')
}

protected getCustomRoutes(): CustomRoutes {
const customRoutes = this.getRoutesManifest()
let rewrites: CustomRoutes['rewrites']
Expand Down
4 changes: 4 additions & 0 deletions packages/next/server/next-server.ts
Expand Up @@ -200,6 +200,10 @@ export default class NextNodeServer extends BaseServer {
: []
}

protected setImmutableAssetCacheControl(res: BaseNextResponse): void {
res.setHeader('Cache-Control', 'public, max-age=31536000, immutable')
}

protected generateFsStaticRoutes(): Route[] {
return [
{
Expand Down
7 changes: 7 additions & 0 deletions packages/next/server/web-server.ts
Expand Up @@ -140,6 +140,13 @@ export default class NextWebServer extends BaseServer {
end: () => writer.close(),
// Not implemented: cork/uncork/on/removeListener
} as any)

// To prevent Safari's bfcache caching the "shell", we have to add the
// `no-cache` header to document responses.
res.setHeader(
'Cache-Control',
'no-cache, no-store, max-age=0, must-revalidate'
)
res.send()
}
protected async runApi() {
Expand Down
Expand Up @@ -355,7 +355,7 @@ async function runBasicTests(context, env) {
expect(pathNotFoundHTML).toContain(page404Content)
})

it('should disable cache for RSC pages', async () => {
it('should disable cache for fizz pages', async () => {
const urls = ['/', '/next-api/image', '/next-api/link']
await Promise.all(
urls.map(async (url) => {
Expand All @@ -375,16 +375,21 @@ async function runBasicTests(context, env) {
expect(linkText).toContain('go home')

const browser = await webdriver(context.appPort, '/next-api/link')

// We need to make sure the app is fully hydrated before clicking, otherwise
// it will be a full redirection instead of being taken over by the next
// router. This timeout prevents it being flaky caused by fast refresh's
// rebuilding event.
await new Promise((res) => setTimeout(res, 1000))
await browser.eval('window.beforeNav = 1')

await browser.waitForElementByCss('#next_id').click()
await check(() => browser.elementByCss('#query').text(), 'query:1')

await browser.waitForElementByCss('#next_id').click()
await check(() => browser.elementByCss('#query').text(), 'query:2')

if (!isDev) {
expect(await browser.eval('window.beforeNav')).toBe(1)
}
expect(await browser.eval('window.beforeNav')).toBe(1)
})

it('should suspense next/image on server side', async () => {
Expand Down

0 comments on commit 5369da5

Please sign in to comment.