Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use fallbackable path module for node and edge runtime #36306

Merged
merged 7 commits into from Apr 21, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 4 additions & 1 deletion packages/next/lib/constants.ts
@@ -1,4 +1,7 @@
import { join } from 'path'
import path from '../shared/lib/isomorphic/path'

const { join } = path

export const NEXT_PROJECT_ROOT = join(__dirname, '..', '..')
export const NEXT_PROJECT_ROOT_DIST = join(NEXT_PROJECT_ROOT, 'dist')
export const NEXT_PROJECT_ROOT_NODE_MODULES = join(
Expand Down
2 changes: 1 addition & 1 deletion packages/next/server/incremental-cache.ts
@@ -1,7 +1,7 @@
import type { CacheFs } from '../shared/lib/utils'

import LRUCache from 'next/dist/compiled/lru-cache'
import path from 'path'
import path from '../shared/lib/isomorphic/path'
import { PrerenderManifest } from '../build'
import { normalizePagePath } from './normalize-page-path'
import { IncrementalCacheValue, IncrementalCacheEntry } from './response-cache'
Expand Down
4 changes: 3 additions & 1 deletion packages/next/server/normalize-page-path.ts
@@ -1,6 +1,8 @@
import { posix } from 'path'
import path from '../shared/lib/isomorphic/path'
import { isDynamicRoute } from '../shared/lib/router/utils'

const { posix } = path

export { normalizePathSep, denormalizePagePath } from './denormalize-page-path'

export function normalizePagePath(page: string): string {
Expand Down
5 changes: 3 additions & 2 deletions packages/next/server/render.tsx
@@ -1,4 +1,5 @@
import type { IncomingMessage, ServerResponse } from 'http'
import type { ParsedUrlQuery } from 'querystring'
import type { NextRouter } from '../shared/lib/router/router'
import type { HtmlProps } from '../shared/lib/html-context'
import type { DomainLocale } from './config'
Expand All @@ -20,7 +21,6 @@ import type { GetServerSideProps, GetStaticProps, PreviewData } from '../types'
import type { UnwrapPromise } from '../lib/coalesced-function'

import React from 'react'
import { ParsedUrlQuery, stringify as stringifyQuery } from 'querystring'
import { createFromReadableStream } from 'next/dist/compiled/react-server-dom-webpack'
import { renderToReadableStream } from 'next/dist/compiled/react-server-dom-webpack/writer.browser.server'
import { StyleRegistry, createStyleRegistry } from 'styled-jsx'
Expand Down Expand Up @@ -79,6 +79,7 @@ import { ImageConfigContext } from '../shared/lib/image-config-context'
import { FlushEffectsContext } from '../shared/lib/flush-effects'
import { interopDefault } from '../lib/interop-default'
import stripAnsi from 'next/dist/compiled/strip-ansi'
import { urlQueryToSearchParams } from '../shared/lib/router/utils/querystring'

let optimizeAmp: typeof import('./optimize-amp').default
let getFontDefinitionFromManifest: typeof import('./font-utils').getFontDefinitionFromManifest
Expand Down Expand Up @@ -518,7 +519,7 @@ export async function renderToHTML(

if (isServerComponent) {
serverComponentsInlinedTransformStream = new TransformStream()
const search = stringifyQuery(query)
const search = urlQueryToSearchParams(query).toString()
Component = createServerComponentRenderer(AppMod, ComponentMod, {
cachePrefix: pathname + (search ? `?${search}` : ''),
inlinedTransformStream: serverComponentsInlinedTransformStream,
Expand Down
5 changes: 4 additions & 1 deletion packages/next/server/web-server.ts
Expand Up @@ -5,8 +5,9 @@ import type { NextParsedUrlQuery } from './request-meta'
import type { Params } from './router'
import type { PayloadOptions } from './send-payload'
import type { LoadComponentsReturnType } from './load-components'
import type { Options } from './base-server'

import BaseServer, { Options } from './base-server'
import BaseServer from './base-server'
import { renderToHTML } from './render'
import { byteLength, generateETag } from './api-utils/web'

Expand All @@ -20,9 +21,11 @@ export default class NextWebServer extends BaseServer {

constructor(options: Options & { webServerConfig: WebServerConfig }) {
super(options)

this.webServerConfig = options.webServerConfig
Object.assign(this.renderOpts, options.webServerConfig.extendRenderOpts)
}

protected generateRewrites() {
// @TODO: assuming minimal mode right now
return {
Expand Down
5 changes: 5 additions & 0 deletions packages/next/shared/lib/isomorphic/path.ts
@@ -0,0 +1,5 @@
const path = process.browser
? require('next/dist/compiled/path-browserify')
: require('path')

export default path
2 changes: 1 addition & 1 deletion packages/next/shared/lib/router/utils/querystring.ts
@@ -1,4 +1,4 @@
import { ParsedUrlQuery } from 'querystring'
import type { ParsedUrlQuery } from 'querystring'

export function searchParamsToUrlQuery(
searchParams: URLSearchParams
Expand Down
5 changes: 5 additions & 0 deletions packages/next/types/misc.d.ts
Expand Up @@ -340,6 +340,11 @@ declare module 'next/dist/compiled/process' {
export = m
}

declare module 'next/dist/compiled/path-browserify' {
import m from 'path'
export = m
}

declare module 'pnp-webpack-plugin' {
import webpack from 'webpack4'

Expand Down
4 changes: 4 additions & 0 deletions test/integration/react-18/app/pages/index.js
Expand Up @@ -19,3 +19,7 @@ export default function Index() {
</div>
)
}

export const config = {
// runtime: 'edge'
}
3 changes: 3 additions & 0 deletions test/integration/react-18/test/index.test.js
Expand Up @@ -21,6 +21,7 @@ import webdriver from 'next-webdriver'
const appDir = join(__dirname, '../app')
const nextConfig = new File(join(appDir, 'next.config.js'))
const invalidPage = new File(join(appDir, 'pages/invalid.js'))
const indexPage = new File(join(appDir, 'pages/index.js'))

describe('Basics', () => {
runTests('default setting with react 18', basics)
Expand Down Expand Up @@ -67,12 +68,14 @@ function runTestsAgainstRuntime(runtime) {
invalidPage.write(`export const value = 1`)
}
nextConfig.replace("// runtime: 'edge'", `runtime: '${runtime}'`)
indexPage.replace("// runtime: 'edge'", `runtime: '${runtime}'`)
},
afterAll: (env) => {
if (env === 'dev') {
invalidPage.delete()
}
nextConfig.restore()
indexPage.restore()
},
}
)
Expand Down