diff --git a/packages/next/src/server/node-polyfill-web-streams.ts b/packages/next/src/server/node-polyfill-web-streams.ts index 88e0f9091b87..2d76b62331bb 100644 --- a/packages/next/src/server/node-polyfill-web-streams.ts +++ b/packages/next/src/server/node-polyfill-web-streams.ts @@ -1,11 +1,22 @@ // Polyfill Web Streams for the Node.js runtime. if (!global.ReadableStream) { - const { ReadableStream } = - require('next/dist/compiled/@edge-runtime/ponyfill') as typeof import('next/dist/compiled/@edge-runtime/ponyfill') - global.ReadableStream = ReadableStream + // In Node v16, ReadableStream is available natively but under the `stream` namespace. + // In Node v18+, it's available under global. + if (require('stream').ReadableStream) { + global.ReadableStream = require('stream').ReadableStream + } else { + const { ReadableStream } = + require('next/dist/compiled/@edge-runtime/ponyfill') as typeof import('next/dist/compiled/@edge-runtime/ponyfill') + global.ReadableStream = ReadableStream + } } if (!global.TransformStream) { - const { TransformStream } = - require('next/dist/compiled/@edge-runtime/ponyfill') as typeof import('next/dist/compiled/@edge-runtime/ponyfill') - global.TransformStream = TransformStream + // Same as ReadableStream above. + if (require('stream').TransformStream) { + global.TransformStream = require('stream').TransformStream + } else { + const { TransformStream } = + require('next/dist/compiled/@edge-runtime/ponyfill') as typeof import('next/dist/compiled/@edge-runtime/ponyfill') + global.TransformStream = TransformStream + } }