aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-07-11 13:09:37 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-07-11 13:09:37 -0700
commitfd4c8fb871c12157f64b4d6297614dcc8f571ddd (patch)
tree907cfe1a8e5cf86d38e1395f462a0785a72c002a /src
parent5c8726d602fe73e49d027194fef65b9432872c8b (diff)
parentbab58b754156cdd749faa6e5ee41bd4758346da6 (diff)
downloadbun-fd4c8fb871c12157f64b4d6297614dcc8f571ddd.tar.gz
bun-fd4c8fb871c12157f64b4d6297614dcc8f571ddd.tar.zst
bun-fd4c8fb871c12157f64b4d6297614dcc8f571ddd.zip
Merge branch 'jarred/fix-http-compression'
Diffstat (limited to 'src')
-rw-r--r--src/js/node/http.ts19
-rw-r--r--src/js/out/modules/node/http.js11
2 files changed, 27 insertions, 3 deletions
diff --git a/src/js/node/http.ts b/src/js/node/http.ts
index a745f9b32..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;
@@ -989,9 +990,11 @@ export class ServerResponse extends Writable {
_removedContLen = false;
#deferred: (() => void) | undefined = undefined;
#finished = false;
-
// Express "compress" package uses this
- _implicitHeader() {}
+ _implicitHeader() {
+ // @ts-ignore
+ this.writeHead(this.statusCode);
+ }
_write(chunk, encoding, callback) {
if (!this.#firstWrite && !this.headersSent) {
@@ -1053,11 +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;
+ this.#drainHeadersIfObservable();
this._reply(
new Response(data, {
headers: this.#headers,
@@ -1176,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 13ee7fded..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 }) {
@@ -648,6 +649,7 @@ class ServerResponse extends Writable {
#deferred = void 0;
#finished = !1;
_implicitHeader() {
+ this.writeHead(this.statusCode);
}
_write(chunk, encoding, callback) {
if (!this.#firstWrite && !this.headersSent) {
@@ -691,10 +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 || "";
- this.#firstWrite = void 0, this.#finished = !0, 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]
@@ -780,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;