diff options
author | Kayla Washburn <mckayla@hey.com> | 2022-06-14 10:10:28 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-14 10:10:28 -0600 |
commit | e1d488ab886ac19716e2b51c3ce1cebef163db8f (patch) | |
tree | 993e0756475bfc5c644420e1e53da5bc1a8306c2 /ext | |
parent | 443041c23e2e02ea59d69e1f2093c67ddfd818fd (diff) |
feature(web): enable deflate-raw compression format (#14863)
Diffstat (limited to 'ext')
-rw-r--r-- | ext/web/14_compression.js | 1 | ||||
-rw-r--r-- | ext/web/compression.rs | 21 |
2 files changed, 22 insertions, 0 deletions
diff --git a/ext/web/14_compression.js b/ext/web/14_compression.js index beff7a059..a96a7ce43 100644 --- a/ext/web/14_compression.js +++ b/ext/web/14_compression.js @@ -16,6 +16,7 @@ "CompressionFormat", [ "deflate", + "deflate-raw", "gzip", ], ); diff --git a/ext/web/compression.rs b/ext/web/compression.rs index 9f5fcb813..f3610e2ea 100644 --- a/ext/web/compression.rs +++ b/ext/web/compression.rs @@ -6,6 +6,8 @@ use deno_core::OpState; use deno_core::Resource; use deno_core::ResourceId; use deno_core::ZeroCopyBuf; +use flate2::write::DeflateDecoder; +use flate2::write::DeflateEncoder; use flate2::write::GzDecoder; use flate2::write::GzEncoder; use flate2::write::ZlibDecoder; @@ -19,10 +21,13 @@ use std::rc::Rc; #[derive(Debug)] struct CompressionResource(RefCell<Inner>); +/// https://wicg.github.io/compression/#supported-formats #[derive(Debug)] enum Inner { DeflateDecoder(ZlibDecoder<Vec<u8>>), DeflateEncoder(ZlibEncoder<Vec<u8>>), + DeflateRawDecoder(DeflateDecoder<Vec<u8>>), + DeflateRawEncoder(DeflateEncoder<Vec<u8>>), GzDecoder(GzDecoder<Vec<u8>>), GzEncoder(GzEncoder<Vec<u8>>), } @@ -45,6 +50,10 @@ pub fn op_compression_new( ("deflate", false) => { Inner::DeflateEncoder(ZlibEncoder::new(w, Compression::default())) } + ("deflate-raw", true) => Inner::DeflateRawDecoder(DeflateDecoder::new(w)), + ("deflate-raw", false) => { + Inner::DeflateRawEncoder(DeflateEncoder::new(w, Compression::default())) + } ("gzip", true) => Inner::GzDecoder(GzDecoder::new(w)), ("gzip", false) => { Inner::GzEncoder(GzEncoder::new(w, Compression::default())) @@ -74,6 +83,16 @@ pub fn op_compression_write( d.flush()?; d.get_mut().drain(..) } + Inner::DeflateRawDecoder(d) => { + d.write_all(&input)?; + d.flush()?; + d.get_mut().drain(..) + } + Inner::DeflateRawEncoder(d) => { + d.write_all(&input)?; + d.flush()?; + d.get_mut().drain(..) + } Inner::GzDecoder(d) => { d.write_all(&input)?; d.flush()?; @@ -100,6 +119,8 @@ pub fn op_compression_finish( let out: Vec<u8> = match inner { Inner::DeflateDecoder(d) => d.finish()?, Inner::DeflateEncoder(d) => d.finish()?, + Inner::DeflateRawDecoder(d) => d.finish()?, + Inner::DeflateRawEncoder(d) => d.finish()?, Inner::GzDecoder(d) => d.finish()?, Inner::GzEncoder(d) => d.finish()?, }; |