From dc13c12ccced3d709e9dfe4b5425f4ea355a10db Mon Sep 17 00:00:00 2001 From: Yixuan Xu Date: Mon, 8 Aug 2022 00:17:15 +0800 Subject: [PATCH] refactor: add named export in next/server (#39381) ## Bug When using next/server in different environment ([vitest](https://vitest.dev/)), named import will have runtime error. ```tsx import { NextRequest } from 'next/server' // TypeError: NextRequest is not a constructor const request = new NextRequest() ``` This is conflicted with current `server.d.ts` files. ## Alternative * reverte current `server.js` to esm, them compiled it to cjs. --- packages/next/server.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/next/server.js b/packages/next/server.js index e127917ec25f..53325c11e290 100644 --- a/packages/next/server.js +++ b/packages/next/server.js @@ -14,4 +14,13 @@ if (typeof URLPattern !== 'undefined') { serverExports.URLPattern = URLPattern } +// https://nodejs.org/api/esm.html#commonjs-namespaces +// When importing CommonJS modules, the module.exports object is provided as the default export module.exports = serverExports + +// make import { xxx } from 'next/server' work +exports.NextRequest = serverExports.NextRequest +exports.NextResponse = serverExports.NextResponse +exports.userAgentFromString = serverExports.userAgentFromString +exports.userAgent = serverExports.userAgent +exports.URLPattern = serverExports.URLPattern