UNPKG

next

Version:

The React Framework

147 lines (146 loc) 4.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); 0 && (module.exports = { NodeNextRequest: null, NodeNextResponse: null }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { NodeNextRequest: function() { return NodeNextRequest; }, NodeNextResponse: function() { return NodeNextResponse; } }); const _apiutils = require("../api-utils"); const _requestmeta = require("../request-meta"); const _index = require("./index"); let prop; class NodeNextRequest extends _index.BaseNextRequest { static #_ = prop = _NEXT_REQUEST_META = _requestmeta.NEXT_REQUEST_META; constructor(_req){ var _this__req; super(_req.method.toUpperCase(), _req.url, _req), this._req = _req, this.headers = this._req.headers, this.fetchMetrics = (_this__req = this._req) == null ? void 0 : _this__req.fetchMetrics, this[_NEXT_REQUEST_META] = this._req[_requestmeta.NEXT_REQUEST_META] || {}, this.streaming = false; } get originalRequest() { // Need to mimic these changes to the original req object for places where we use it: // render.tsx, api/ssg requests this._req[_requestmeta.NEXT_REQUEST_META] = this[_requestmeta.NEXT_REQUEST_META]; this._req.url = this.url; this._req.cookies = this.cookies; return this._req; } set originalRequest(value) { this._req = value; } /** * Returns the request body as a Web Readable Stream. The body here can only * be read once as the body will start flowing as soon as the data handler * is attached. * * @internal */ stream() { if (this.streaming) { throw Object.defineProperty(new Error('Invariant: NodeNextRequest.stream() can only be called once'), "__NEXT_ERROR_CODE", { value: "E467", enumerable: false, configurable: true }); } this.streaming = true; return new ReadableStream({ start: (controller)=>{ this._req.on('data', (chunk)=>{ controller.enqueue(new Uint8Array(chunk)); }); this._req.on('end', ()=>{ controller.close(); }); this._req.on('error', (err)=>{ controller.error(err); }); } }); } } class NodeNextResponse extends _index.BaseNextResponse { get originalResponse() { if (_apiutils.SYMBOL_CLEARED_COOKIES in this) { this._res[_apiutils.SYMBOL_CLEARED_COOKIES] = this[_apiutils.SYMBOL_CLEARED_COOKIES]; } return this._res; } constructor(_res){ super(_res), this._res = _res, this.textBody = undefined; } get sent() { return this._res.finished || this._res.headersSent; } get statusCode() { return this._res.statusCode; } set statusCode(value) { this._res.statusCode = value; } get statusMessage() { return this._res.statusMessage; } set statusMessage(value) { this._res.statusMessage = value; } setHeader(name, value) { this._res.setHeader(name, value); return this; } removeHeader(name) { this._res.removeHeader(name); return this; } getHeaderValues(name) { const values = this._res.getHeader(name); if (values === undefined) return undefined; return (Array.isArray(values) ? values : [ values ]).map((value)=>value.toString()); } hasHeader(name) { return this._res.hasHeader(name); } getHeader(name) { const values = this.getHeaderValues(name); return Array.isArray(values) ? values.join(',') : undefined; } getHeaders() { return this._res.getHeaders(); } appendHeader(name, value) { const currentValues = this.getHeaderValues(name) ?? []; if (!currentValues.includes(value)) { this._res.setHeader(name, [ ...currentValues, value ]); } return this; } body(value) { this.textBody = value; return this; } send() { this._res.end(this.textBody); } onClose(callback) { this.originalResponse.on('close', callback); } } var _NEXT_REQUEST_META; //# sourceMappingURL=node.js.map