Spaces:
Running
Running
| ; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| 0 && (module.exports = { | |
| NextRequestAdapter: null, | |
| ResponseAborted: null, | |
| ResponseAbortedName: null, | |
| createAbortController: null, | |
| signalFromNodeResponse: null | |
| }); | |
| function _export(target, all) { | |
| for(var name in all)Object.defineProperty(target, name, { | |
| enumerable: true, | |
| get: all[name] | |
| }); | |
| } | |
| _export(exports, { | |
| NextRequestAdapter: function() { | |
| return NextRequestAdapter; | |
| }, | |
| ResponseAborted: function() { | |
| return ResponseAborted; | |
| }, | |
| ResponseAbortedName: function() { | |
| return ResponseAbortedName; | |
| }, | |
| createAbortController: function() { | |
| return createAbortController; | |
| }, | |
| signalFromNodeResponse: function() { | |
| return signalFromNodeResponse; | |
| } | |
| }); | |
| const _requestmeta = require("../../../request-meta"); | |
| const _utils = require("../../utils"); | |
| const _request = require("../request"); | |
| const _helpers = require("../../../base-http/helpers"); | |
| const ResponseAbortedName = 'ResponseAborted'; | |
| class ResponseAborted extends Error { | |
| constructor(...args){ | |
| super(...args), this.name = ResponseAbortedName; | |
| } | |
| } | |
| function createAbortController(response) { | |
| const controller = new AbortController(); | |
| // If `finish` fires first, then `res.end()` has been called and the close is | |
| // just us finishing the stream on our side. If `close` fires first, then we | |
| // know the client disconnected before we finished. | |
| response.once('close', ()=>{ | |
| if (response.writableFinished) return; | |
| controller.abort(new ResponseAborted()); | |
| }); | |
| return controller; | |
| } | |
| function signalFromNodeResponse(response) { | |
| const { errored, destroyed } = response; | |
| if (errored || destroyed) { | |
| return AbortSignal.abort(errored ?? new ResponseAborted()); | |
| } | |
| const { signal } = createAbortController(response); | |
| return signal; | |
| } | |
| class NextRequestAdapter { | |
| static fromBaseNextRequest(request, signal) { | |
| if (// The type check here ensures that `req` is correctly typed, and the | |
| // environment variable check provides dead code elimination. | |
| process.env.NEXT_RUNTIME === 'edge' && (0, _helpers.isWebNextRequest)(request)) { | |
| return NextRequestAdapter.fromWebNextRequest(request); | |
| } else if (// The type check here ensures that `req` is correctly typed, and the | |
| // environment variable check provides dead code elimination. | |
| process.env.NEXT_RUNTIME !== 'edge' && (0, _helpers.isNodeNextRequest)(request)) { | |
| return NextRequestAdapter.fromNodeNextRequest(request, signal); | |
| } else { | |
| throw Object.defineProperty(new Error('Invariant: Unsupported NextRequest type'), "__NEXT_ERROR_CODE", { | |
| value: "E345", | |
| enumerable: false, | |
| configurable: true | |
| }); | |
| } | |
| } | |
| static fromNodeNextRequest(request, signal) { | |
| // HEAD and GET requests can not have a body. | |
| let body = null; | |
| if (request.method !== 'GET' && request.method !== 'HEAD' && request.body) { | |
| // @ts-expect-error - this is handled by undici, when streams/web land use it instead | |
| body = request.body; | |
| } | |
| let url; | |
| if (request.url.startsWith('http')) { | |
| url = new URL(request.url); | |
| } else { | |
| // Grab the full URL from the request metadata. | |
| const base = (0, _requestmeta.getRequestMeta)(request, 'initURL'); | |
| if (!base || !base.startsWith('http')) { | |
| // Because the URL construction relies on the fact that the URL provided | |
| // is absolute, we need to provide a base URL. We can't use the request | |
| // URL because it's relative, so we use a dummy URL instead. | |
| url = new URL(request.url, 'http://n'); | |
| } else { | |
| url = new URL(request.url, base); | |
| } | |
| } | |
| return new _request.NextRequest(url, { | |
| method: request.method, | |
| headers: (0, _utils.fromNodeOutgoingHttpHeaders)(request.headers), | |
| duplex: 'half', | |
| signal, | |
| // geo | |
| // ip | |
| // nextConfig | |
| // body can not be passed if request was aborted | |
| // or we get a Request body was disturbed error | |
| ...signal.aborted ? {} : { | |
| body | |
| } | |
| }); | |
| } | |
| static fromWebNextRequest(request) { | |
| // HEAD and GET requests can not have a body. | |
| let body = null; | |
| if (request.method !== 'GET' && request.method !== 'HEAD') { | |
| body = request.body; | |
| } | |
| return new _request.NextRequest(request.url, { | |
| method: request.method, | |
| headers: (0, _utils.fromNodeOutgoingHttpHeaders)(request.headers), | |
| duplex: 'half', | |
| signal: request.request.signal, | |
| // geo | |
| // ip | |
| // nextConfig | |
| // body can not be passed if request was aborted | |
| // or we get a Request body was disturbed error | |
| ...request.request.signal.aborted ? {} : { | |
| body | |
| } | |
| }); | |
| } | |
| } | |
| //# sourceMappingURL=next-request.js.map |