Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.
Sign upbrotli: add brotli support #20458
brotli: add brotli support #20458
Conversation
Do you think it would be possible to work on re-using as much code as possible? I think that would be a very good idea if we can make it work (because it’s going to happen eventually anyway). |
|
without overstepping this pr too much, maybe we can take this opportunity to think of a new way to group our compression stuff, both in terms of source and namespace ( |
|
As per Introducing New Modules policy, beware: |
|
cc @devongovett |
I managed to miss that, I can talk to the author but maybe this could be moved under a scope as brought up in nodejs/TSC#389 |
|
hey guys, I'm the owner of |
|
Doc part LGTM with some nits. Sorry for a big bunch of them) And thank you! |
| @@ -81,6 +81,10 @@ added: v9.6.0 | |||
|
|
|||
| Enable experimental ES Module support in the `vm` module. | |||
|
|
|||
| ### `--expose-brotli` | |||
|
|
|||
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Hackzzila
May 1, 2018
•
Author
Contributor
I didn't know what I should put there so I just removed those. Should they just be set to like v10.x.x? Or I guess REPLACEME works too :)
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
vsemozhetbyt
May 2, 2018
Contributor
If I recall correctly, REPLACEME has some part in build automation as a do-not-forget-to-replace guard)
| @@ -0,0 +1,404 @@ | |||
| # Brotli | |||
|
|
|||
This comment was marked as resolved.
This comment was marked as resolved.
|
|
||
| ## Threadpool Usage | ||
|
|
||
| Note that all brotli APIs except those that are explicitly synchronous use |
This comment has been minimized.
This comment has been minimized.
| content-encoding mechanism defined by | ||
| [HTTP](https://tools.ietf.org/html/rfc7230#section-4.2). | ||
|
|
||
| The HTTP [`Accept-Encoding`][] header is used within an http request to identify |
This comment has been minimized.
This comment has been minimized.
|
|
||
| // Note: This is not a conformant accept-encoding parser. | ||
| // See https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3 | ||
| // Note: A quality of 4 is a good balace of speed and quality. |
This comment has been minimized.
This comment has been minimized.
| Error codes for decompression operations. | ||
|
|
||
| ## brotli.constants | ||
|
|
This comment was marked as resolved.
This comment was marked as resolved.
| to supply options to the `brotli` classes and will call the supplied callback | ||
| with `callback(error, result)`. | ||
|
|
||
| Every method has a `*Sync` counterpart, which accept the same arguments, but |
This comment has been minimized.
This comment has been minimized.
| Every method has a `*Sync` counterpart, which accept the same arguments, but | ||
| without a callback. | ||
|
|
||
| ### brotli.compress(buffer[, options][, callback]) |
This comment has been minimized.
This comment has been minimized.
| - `buffer` {Buffer|TypedArray|DataView|ArrayBuffer|string} | ||
|
|
||
| Decompress a chunk of data with [Decompress][]. | ||
| If callback is omitted a Promise will be returned. |
This comment has been minimized.
This comment has been minimized.
vsemozhetbyt
May 1, 2018
Contributor
Promise -> `Promise` or even {Promise} (will be linkified)?
Ditto below.
|
|
||
| - `buffer` {Buffer|TypedArray|DataView|ArrayBuffer|string} | ||
|
|
||
| Decompress a chunk of data with [Decompress][]. |
This comment has been minimized.
This comment has been minimized.
|
@vsemozhetbyt a few of the things you mentioned also apply to the zlib docs, those should probably be looked over sometime as well. |
|
|
||
| Compress a stream. | ||
|
|
||
| ### new brotli.Compress(options) |
This comment has been minimized.
This comment has been minimized.
|
|
||
| Decompress a stream. | ||
|
|
||
| ### new brotli.Decompress(options) |
This comment has been minimized.
This comment has been minimized.
| [`Accept-Encoding`]: https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3 | ||
| [`ArrayBuffer`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer | ||
| [`brotli/encode.h`]: https://github.com/google/brotli/blob/v1.0.4/c/include/brotli/encode.h | ||
| [`brotli/decode.h`]: https://github.com/google/brotli/blob/v1.0.4/c/include/brotli/decode.h |
This comment has been minimized.
This comment has been minimized.
vsemozhetbyt
May 1, 2018
•
Contributor
We usually sort bottom references in ASCII order, so this should go before the [`brotli/encode.h`]:.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Yeah, our docs are far from ideal, but we are working on them) |
|
I will go ahead and create |
|
|
||
| // Note: This is not a conformant accept-encoding parser. | ||
| // See https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3 | ||
| // Note: A quality of 4 is a good balace of speed and quality. |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
ChALkeR
May 2, 2018
Member
I believe «Note: » prefixes were removed from the docs earlier in #18592.
Are those needed here?
|
@vsemozhetbyt thanks for the docs review! Hopefully I have fixed everything now. |
| if (!acceptEncoding) { | ||
| acceptEncoding = ''; | ||
| } | ||
| let acceptEncoding = request.headers['accept-encoding'] || ''; |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
vsemozhetbyt
May 2, 2018
Contributor
Can eslint-plugin-markdown be of any help? We use it in CI and local linting.
Also, you can just run from the project root for linting code fragments in docs:
node tools/node_modules/eslint/bin/eslint.js --ext=.md doc
| [`Accept-Encoding`]: https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3 | ||
| [`ArrayBuffer`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer | ||
| [`brotli/encode.h`]: https://github.com/google/brotli/blob/v1.0.4/c/include/brotli/encode.h | ||
| [`brotli.constants`]: #brotli_constants |
This comment has been minimized.
This comment has been minimized.
vsemozhetbyt
May 2, 2018
•
Contributor
If this intended to refer brotli.constants property (and not just "Constants" section), then this should be #brotli_brotli_constants.
I am unsure how this would be done for the C++ code, but it might be worth a shot for the JS. |
| Note that some options are only relevant when compressing, and are | ||
| ignored by the decompression classes. | ||
| Note that some options are only relevant when compressing or decompressing, | ||
| and are simply ignored. |
This comment has been minimized.
This comment has been minimized.
vsemozhetbyt
May 2, 2018
Contributor
I am not sure, but it seems a bit incomplete or confusing now. Maybe something like "and are simply ignored when inappropriate."?
This comment has been minimized.
This comment has been minimized.
Hackzzila
May 2, 2018
Author
Contributor
Something like "and invalid options are simply ignored" should also work.
Refs: nodejs#20458 Co-authored-by: Hackzzila <admin@hackzzila.com>
Refs: #20458 Co-authored-by: Hackzzila <admin@hackzzila.com> PR-URL: #24938 Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Jan Krems <jan.krems@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Myles Borins <myles.borins@gmail.com> Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com> Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
Refs: #20458 Co-authored-by: Hackzzila <admin@hackzzila.com> PR-URL: #24938 Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Jan Krems <jan.krems@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Myles Borins <myles.borins@gmail.com> Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com> Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
|
This has been done in #24938! |
Refs: nodejs#20458 Co-authored-by: Hackzzila <admin@hackzzila.com> PR-URL: nodejs#24938 Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Jan Krems <jan.krems@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Myles Borins <myles.borins@gmail.com> Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com> Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
Refs: nodejs#20458 Co-authored-by: Hackzzila <admin@hackzzila.com> PR-URL: nodejs#24938 Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Jan Krems <jan.krems@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Myles Borins <myles.borins@gmail.com> Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com> Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
Refs: #20458 Co-authored-by: Hackzzila <admin@hackzzila.com> Backport-PR-URL: #27681 PR-URL: #24938 Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Jan Krems <jan.krems@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Myles Borins <myles.borins@gmail.com> Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com> Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
Refs: #20458 Co-authored-by: Hackzzila <admin@hackzzila.com> Backport-PR-URL: #27681 PR-URL: #24938 Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Jan Krems <jan.krems@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Myles Borins <myles.borins@gmail.com> Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com> Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
mohammad-masud
commented
Aug 23, 2019
|
very informative for my website called computer keyboards |



Hackzzila commentedMay 1, 2018
Fixes: #18964
Adds brotli support to core. The brotli module must be enabled with
--expose-brotli. The api, and most of the source code, is almost identical to the zlib module.There are a few things that need polishing but I thought I would open this up for discussion.
/cc @MylesBorins
Checklist
make -j4 test(UNIX), orvcbuild test(Windows) passes