未验证 提交 88cab271 编写于 作者: A Asher

Compress when sending client-side extension tars

上级 a8914b02
......@@ -119,7 +119,7 @@ index 2d8b725ff2..a8d93a17ca 100644
unique-stream@^2.0.2:
version "2.2.1"
diff --git a/package.json b/package.json
index fde05321d2..1a7ed2fa47 100644
index fde05321d2..2427e7d4ae 100644
--- a/package.json
+++ b/package.json
@@ -32,6 +32,9 @@
......@@ -128,7 +128,7 @@ index fde05321d2..1a7ed2fa47 100644
"dependencies": {
+ "@coder/logger": "^1.1.12",
+ "@coder/node-browser": "^1.0.8",
+ "@coder/requirefs": "^1.1.4",
+ "@coder/requirefs": "^1.1.5",
"applicationinsights": "1.0.8",
"chokidar": "3.2.3",
"graceful-fs": "4.1.11",
......@@ -3109,7 +3109,7 @@ index 82626a55c7..5d3ee1b69b 100644
union-value@^1.0.0:
version "1.0.1"
diff --git a/yarn.lock b/yarn.lock
index a98533bad9..19e94f8c4a 100644
index a98533bad9..f4da0987c9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -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"
+ integrity sha512-NLF9sYMRCN9WK1C224pHax1Cay3qKypg25BhVg7VfNbo3Cpa3daata8RF/rT8JK3lPsu8PmFgDRQjzGC9X1Lrw==
+
+"@coder/requirefs@^1.1.4":
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/@coder/requirefs/-/requirefs-1.1.4.tgz#ca59223a396021f2f606f71b833c43dbba06b10b"
+ integrity sha512-E+WB3Wvr31v7eqWdItBW4eVQ0tWr4iKH6qjzCMnRxTsbiiNzLgtDzRBYt/3KxnPrtWXXX6Fn02Ut933soZXJ+g==
+"@coder/requirefs@^1.1.5":
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/@coder/requirefs/-/requirefs-1.1.5.tgz#259db370d563a79a96fb150bc9d69c7db6edc9fb"
+ integrity sha512-3jB47OFCql9+9FI6Vc4YX0cfFnG5rxBfrZUH45S4XYtYGOz+/Xl4h4d2iMk50b7veHkeSWGlB4VHC3UZ16zuYQ==
+ optionalDependencies:
+ jszip "2.6.0"
+
......
......@@ -174,7 +174,7 @@ export class VscodeHttpProvider extends HttpProvider {
break
case "/tar":
if (typeof route.query.path === "string") {
return this.getTarredResource(route.query.path)
return this.getTarredResource(request, route.query.path)
}
break
case "/webview":
......
......@@ -11,6 +11,7 @@ import { Readable } from "stream"
import * as tarFs from "tar-fs"
import * as tls from "tls"
import * as url from "url"
import * as zlib from "zlib"
import { HttpCode, HttpError } from "../common/http"
import { normalize, Options, plural, split } from "../common/util"
import { SocketProxyProvider } from "./socket"
......@@ -222,9 +223,20 @@ export abstract class HttpProvider {
/**
* 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)
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 }
}
/**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册