| import Stream from 'stream'; |
| import { fromNodeOutgoingHttpHeaders, toNodeOutgoingHttpHeaders } from '../web/utils'; |
| export class MockedRequest extends Stream.Readable { |
| constructor({ url, headers, method, socket = null, readable }){ |
| super(), |
| this.httpVersion = '1.0', this.httpVersionMajor = 1, this.httpVersionMinor = 0, |
| |
| |
| this.socket = new Proxy({}, { |
| get: (_target, prop)=>{ |
| if (prop !== 'encrypted' && prop !== 'remoteAddress') { |
| throw Object.defineProperty(new Error('Method not implemented'), "__NEXT_ERROR_CODE", { |
| value: "E52", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| if (prop === 'remoteAddress') return undefined; |
| |
| |
| return false; |
| } |
| }); |
| this.url = url; |
| this.headers = headers; |
| this.method = method; |
| if (readable) { |
| this.bodyReadable = readable; |
| this.bodyReadable.on('end', ()=>this.emit('end')); |
| this.bodyReadable.on('close', ()=>this.emit('close')); |
| } |
| if (socket) { |
| this.socket = socket; |
| } |
| } |
| get headersDistinct() { |
| const headers = {}; |
| for (const [key, value] of Object.entries(this.headers)){ |
| if (!value) continue; |
| headers[key] = Array.isArray(value) ? value : [ |
| value |
| ]; |
| } |
| return headers; |
| } |
| _read(size) { |
| if (this.bodyReadable) { |
| return this.bodyReadable._read(size); |
| } else { |
| this.emit('end'); |
| this.emit('close'); |
| } |
| } |
| |
| |
| |
| |
| get connection() { |
| return this.socket; |
| } |
| |
| |
| get aborted() { |
| throw Object.defineProperty(new Error('Method not implemented'), "__NEXT_ERROR_CODE", { |
| value: "E52", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| get complete() { |
| throw Object.defineProperty(new Error('Method not implemented'), "__NEXT_ERROR_CODE", { |
| value: "E52", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| get trailers() { |
| throw Object.defineProperty(new Error('Method not implemented'), "__NEXT_ERROR_CODE", { |
| value: "E52", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| get trailersDistinct() { |
| throw Object.defineProperty(new Error('Method not implemented'), "__NEXT_ERROR_CODE", { |
| value: "E52", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| get rawTrailers() { |
| throw Object.defineProperty(new Error('Method not implemented'), "__NEXT_ERROR_CODE", { |
| value: "E52", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| get rawHeaders() { |
| throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { |
| value: "E41", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| setTimeout() { |
| throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { |
| value: "E41", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| } |
| export class MockedResponse extends Stream.Writable { |
| constructor(res = {}){ |
| super(), this.statusMessage = '', this.finished = false, this.headersSent = false, |
| |
| |
| |
| this.buffers = []; |
| this.statusCode = res.statusCode ?? 200; |
| this.socket = res.socket ?? null; |
| this.headers = res.headers ? fromNodeOutgoingHttpHeaders(res.headers) : new Headers(); |
| this.headPromise = new Promise((resolve)=>{ |
| this.headPromiseResolve = resolve; |
| }); |
| |
| |
| this.hasStreamed = new Promise((resolve, reject)=>{ |
| this.on('finish', ()=>resolve(true)); |
| this.on('end', ()=>resolve(true)); |
| this.on('error', (err)=>reject(err)); |
| }).then((val)=>{ |
| this.headPromiseResolve == null ? void 0 : this.headPromiseResolve.call(this); |
| return val; |
| }); |
| if (res.resWriter) { |
| this.resWriter = res.resWriter; |
| } |
| } |
| appendHeader(name, value) { |
| const values = Array.isArray(value) ? value : [ |
| value |
| ]; |
| for (const v of values){ |
| this.headers.append(name, v); |
| } |
| return this; |
| } |
| |
| |
| |
| |
| get isSent() { |
| return this.finished || this.headersSent; |
| } |
| |
| |
| |
| |
| get connection() { |
| return this.socket; |
| } |
| write(chunk) { |
| if (this.resWriter) { |
| return this.resWriter(chunk); |
| } |
| this.buffers.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)); |
| return true; |
| } |
| end() { |
| this.finished = true; |
| return super.end(...arguments); |
| } |
| |
| |
| |
| |
| |
| |
| _implicitHeader() {} |
| _write(chunk, _encoding, callback) { |
| this.write(chunk); |
| |
| |
| |
| |
| |
| callback(); |
| } |
| writeHead(statusCode, statusMessage, headers) { |
| if (!headers && typeof statusMessage !== 'string') { |
| headers = statusMessage; |
| } else if (typeof statusMessage === 'string' && statusMessage.length > 0) { |
| this.statusMessage = statusMessage; |
| } |
| if (headers) { |
| |
| |
| |
| |
| |
| |
| |
| |
| if (Array.isArray(headers)) { |
| |
| |
| |
| |
| for(let i = 0; i < headers.length; i += 2){ |
| |
| this.setHeader(headers[i], headers[i + 1]); |
| } |
| } else { |
| for (const [key, value] of Object.entries(headers)){ |
| |
| if (typeof value === 'undefined') continue; |
| this.setHeader(key, value); |
| } |
| } |
| } |
| this.statusCode = statusCode; |
| this.headersSent = true; |
| this.headPromiseResolve == null ? void 0 : this.headPromiseResolve.call(this); |
| return this; |
| } |
| hasHeader(name) { |
| return this.headers.has(name); |
| } |
| getHeader(name) { |
| return this.headers.get(name) ?? undefined; |
| } |
| getHeaders() { |
| return toNodeOutgoingHttpHeaders(this.headers); |
| } |
| getHeaderNames() { |
| return Array.from(this.headers.keys()); |
| } |
| setHeader(name, value) { |
| if (Array.isArray(value)) { |
| |
| |
| this.headers.delete(name); |
| for (const v of value){ |
| this.headers.append(name, v); |
| } |
| } else if (typeof value === 'number') { |
| this.headers.set(name, value.toString()); |
| } else { |
| this.headers.set(name, value); |
| } |
| return this; |
| } |
| removeHeader(name) { |
| this.headers.delete(name); |
| } |
| flushHeaders() { |
| |
| |
| } |
| |
| |
| get strictContentLength() { |
| throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { |
| value: "E41", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| writeEarlyHints() { |
| throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { |
| value: "E41", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| get req() { |
| throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { |
| value: "E41", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| assignSocket() { |
| throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { |
| value: "E41", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| detachSocket() { |
| throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { |
| value: "E41", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| writeContinue() { |
| throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { |
| value: "E41", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| writeProcessing() { |
| throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { |
| value: "E41", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| get upgrading() { |
| throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { |
| value: "E41", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| get chunkedEncoding() { |
| throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { |
| value: "E41", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| get shouldKeepAlive() { |
| throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { |
| value: "E41", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| get useChunkedEncodingByDefault() { |
| throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { |
| value: "E41", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| get sendDate() { |
| throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { |
| value: "E41", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| setTimeout() { |
| throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { |
| value: "E41", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| addTrailers() { |
| throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { |
| value: "E41", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| setHeaders() { |
| throw Object.defineProperty(new Error('Method not implemented.'), "__NEXT_ERROR_CODE", { |
| value: "E41", |
| enumerable: false, |
| configurable: true |
| }); |
| } |
| } |
| export function createRequestResponseMocks({ url, headers = {}, method = 'GET', bodyReadable, resWriter, socket = null }) { |
| return { |
| req: new MockedRequest({ |
| url, |
| headers, |
| method, |
| socket, |
| readable: bodyReadable |
| }), |
| res: new MockedResponse({ |
| socket, |
| resWriter |
| }) |
| }; |
| } |
|
|
| |