diff options
author | 2023-07-11 13:07:03 -0700 | |
---|---|---|
committer | 2023-07-11 13:07:03 -0700 | |
commit | bab58b754156cdd749faa6e5ee41bd4758346da6 (patch) | |
tree | a9e36ba811edb55ad4e75cec781a87aa1f5a48f0 | |
parent | c4c5eb2d3257fdddf47b843cfb621098dca816ee (diff) | |
download | bun-jarred/fix-http-compression.tar.gz bun-jarred/fix-http-compression.tar.zst bun-jarred/fix-http-compression.zip |
Avoid Object.getPrototypeOfjarred/fix-http-compression
-rw-r--r-- | src/js/node/http.ts | 16 | ||||
-rw-r--r-- | src/js/out/modules/node/http.js | 12 |
2 files changed, 22 insertions, 6 deletions
diff --git a/src/js/node/http.ts b/src/js/node/http.ts index 563cb8c46..42388b32e 100644 --- a/src/js/node/http.ts +++ b/src/js/node/http.ts @@ -957,6 +957,7 @@ export class OutgoingMessage extends Writable { } } +let OriginalWriteHeadFn, OriginalImplicitHeadFn; export class ServerResponse extends Writable { declare _writableState: any; @@ -1055,14 +1056,20 @@ export class ServerResponse extends Writable { ); } + #drainHeadersIfObservable() { + if (this._implicitHeader === OriginalImplicitHeadFn && this.writeHead === OriginalWriteHeadFn) { + return; + } + + this._implicitHeader(); + } + _final(callback) { if (!this.headersSent) { var data = this.#firstWrite || ""; this.#firstWrite = undefined; this.#finished = true; - if (this.writeHead !== Object.getPrototypeOf(this).writeHead) { - this._implicitHeader(); - } + this.#drainHeadersIfObservable(); this._reply( new Response(data, { headers: this.#headers, @@ -1181,6 +1188,9 @@ export class ServerResponse extends Writable { } } +OriginalWriteHeadFn = ServerResponse.prototype.writeHead; +OriginalImplicitHeadFn = ServerResponse.prototype._implicitHeader; + export class ClientRequest extends OutgoingMessage { #timeout; #res: IncomingMessage | null = null; diff --git a/src/js/out/modules/node/http.js b/src/js/out/modules/node/http.js index 7a9b87604..d0937a945 100644 --- a/src/js/out/modules/node/http.js +++ b/src/js/out/modules/node/http.js @@ -626,6 +626,7 @@ class OutgoingMessage extends Writable { return this; } } +var OriginalWriteHeadFn, OriginalImplicitHeadFn; class ServerResponse extends Writable { constructor({ req, reply }) { @@ -692,12 +693,15 @@ class ServerResponse extends Writable { statusText: this.statusMessage ?? STATUS_CODES[this.statusCode] })); } + #drainHeadersIfObservable() { + if (this._implicitHeader === OriginalImplicitHeadFn && this.writeHead === OriginalWriteHeadFn) + return; + this._implicitHeader(); + } _final(callback) { if (!this.headersSent) { var data = this.#firstWrite || ""; - if (this.#firstWrite = void 0, this.#finished = !0, this.writeHead !== Object.getPrototypeOf(this).writeHead) - this._implicitHeader(); - this._reply(new Response(data, { + this.#firstWrite = void 0, this.#finished = !0, this.#drainHeadersIfObservable(), this._reply(new Response(data, { headers: this.#headers, status: this.statusCode, statusText: this.statusMessage ?? STATUS_CODES[this.statusCode] @@ -783,6 +787,8 @@ class ServerResponse extends Writable { return _writeHead(statusCode, statusMessage, headers, this), this; } } +OriginalWriteHeadFn = ServerResponse.prototype.writeHead; +OriginalImplicitHeadFn = ServerResponse.prototype._implicitHeader; class ClientRequest extends OutgoingMessage { #timeout; |