Compress when sending client-side extension tars

This commit is contained in:
Asher 2020-02-28 14:25:28 -06:00
parent a8914b025f
commit 88cab27165
No known key found for this signature in database
GPG Key ID: D63C1EF81242354A
3 changed files with 22 additions and 10 deletions

View File

@ -119,7 +119,7 @@ index 2d8b725ff2..a8d93a17ca 100644
unique-stream@^2.0.2: unique-stream@^2.0.2:
version "2.2.1" version "2.2.1"
diff --git a/package.json b/package.json diff --git a/package.json b/package.json
index fde05321d2..1a7ed2fa47 100644 index fde05321d2..2427e7d4ae 100644
--- a/package.json --- a/package.json
+++ b/package.json +++ b/package.json
@@ -32,6 +32,9 @@ @@ -32,6 +32,9 @@
@ -128,7 +128,7 @@ index fde05321d2..1a7ed2fa47 100644
"dependencies": { "dependencies": {
+ "@coder/logger": "^1.1.12", + "@coder/logger": "^1.1.12",
+ "@coder/node-browser": "^1.0.8", + "@coder/node-browser": "^1.0.8",
+ "@coder/requirefs": "^1.1.4", + "@coder/requirefs": "^1.1.5",
"applicationinsights": "1.0.8", "applicationinsights": "1.0.8",
"chokidar": "3.2.3", "chokidar": "3.2.3",
"graceful-fs": "4.1.11", "graceful-fs": "4.1.11",
@ -3109,7 +3109,7 @@ index 82626a55c7..5d3ee1b69b 100644
union-value@^1.0.0: union-value@^1.0.0:
version "1.0.1" version "1.0.1"
diff --git a/yarn.lock b/yarn.lock diff --git a/yarn.lock b/yarn.lock
index a98533bad9..19e94f8c4a 100644 index a98533bad9..f4da0987c9 100644
--- a/yarn.lock --- a/yarn.lock
+++ b/yarn.lock +++ b/yarn.lock
@@ -140,6 +140,23 @@ @@ -140,6 +140,23 @@
@ -3126,10 +3126,10 @@ index a98533bad9..19e94f8c4a 100644
+ resolved "https://registry.yarnpkg.com/@coder/node-browser/-/node-browser-1.0.8.tgz#c22f581b089ad7d95ad1362fd351c57b7fbc6e70" + resolved "https://registry.yarnpkg.com/@coder/node-browser/-/node-browser-1.0.8.tgz#c22f581b089ad7d95ad1362fd351c57b7fbc6e70"
+ integrity sha512-NLF9sYMRCN9WK1C224pHax1Cay3qKypg25BhVg7VfNbo3Cpa3daata8RF/rT8JK3lPsu8PmFgDRQjzGC9X1Lrw== + integrity sha512-NLF9sYMRCN9WK1C224pHax1Cay3qKypg25BhVg7VfNbo3Cpa3daata8RF/rT8JK3lPsu8PmFgDRQjzGC9X1Lrw==
+ +
+"@coder/requirefs@^1.1.4": +"@coder/requirefs@^1.1.5":
+ version "1.1.4" + version "1.1.5"
+ resolved "https://registry.yarnpkg.com/@coder/requirefs/-/requirefs-1.1.4.tgz#ca59223a396021f2f606f71b833c43dbba06b10b" + resolved "https://registry.yarnpkg.com/@coder/requirefs/-/requirefs-1.1.5.tgz#259db370d563a79a96fb150bc9d69c7db6edc9fb"
+ integrity sha512-E+WB3Wvr31v7eqWdItBW4eVQ0tWr4iKH6qjzCMnRxTsbiiNzLgtDzRBYt/3KxnPrtWXXX6Fn02Ut933soZXJ+g== + integrity sha512-3jB47OFCql9+9FI6Vc4YX0cfFnG5rxBfrZUH45S4XYtYGOz+/Xl4h4d2iMk50b7veHkeSWGlB4VHC3UZ16zuYQ==
+ optionalDependencies: + optionalDependencies:
+ jszip "2.6.0" + jszip "2.6.0"
+ +

View File

@ -174,7 +174,7 @@ export class VscodeHttpProvider extends HttpProvider {
break break
case "/tar": case "/tar":
if (typeof route.query.path === "string") { if (typeof route.query.path === "string") {
return this.getTarredResource(route.query.path) return this.getTarredResource(request, route.query.path)
} }
break break
case "/webview": case "/webview":

View File

@ -11,6 +11,7 @@ import { Readable } from "stream"
import * as tarFs from "tar-fs" import * as tarFs from "tar-fs"
import * as tls from "tls" import * as tls from "tls"
import * as url from "url" import * as url from "url"
import * as zlib from "zlib"
import { HttpCode, HttpError } from "../common/http" import { HttpCode, HttpError } from "../common/http"
import { normalize, Options, plural, split } from "../common/util" import { normalize, Options, plural, split } from "../common/util"
import { SocketProxyProvider } from "./socket" import { SocketProxyProvider } from "./socket"
@ -222,9 +223,20 @@ export abstract class HttpProvider {
/** /**
* Tar up and stream a directory. * Tar up and stream a directory.
*/ */
protected async getTarredResource(...parts: string[]): Promise<HttpResponse> { protected async getTarredResource(request: http.IncomingMessage, ...parts: string[]): Promise<HttpResponse> {
const filePath = path.join(...parts) const filePath = path.join(...parts)
return { stream: tarFs.pack(filePath), filePath, mime: "application/tar", cache: true } let stream: Readable = tarFs.pack(filePath)
const headers: http.OutgoingHttpHeaders = {}
if (request.headers["accept-encoding"] && request.headers["accept-encoding"].includes("gzip")) {
logger.debug("gzipping tar", field("filePath", filePath))
const compress = zlib.createGzip()
stream.pipe(compress)
stream.on("error", (error) => compress.destroy(error))
stream.on("close", () => compress.end())
stream = compress
headers["content-encoding"] = "gzip"
}
return { stream, filePath, mime: "application/gzip", cache: true, headers }
} }
/** /**