zlib: option for engine in convenience methods
Added option to expose engine to convenience methods Refs: https://github.com/nodejs/node/issues/8874 PR-URL: https://github.com/nodejs/node/pull/13089 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
parent
36867786d0
commit
d0b1b52edb
@ -301,6 +301,7 @@ ignored by the decompression classes.
|
|||||||
* `strategy` {integer} (compression only)
|
* `strategy` {integer} (compression only)
|
||||||
* `dictionary` {Buffer|TypedArray|DataView} (deflate/inflate only, empty dictionary by
|
* `dictionary` {Buffer|TypedArray|DataView} (deflate/inflate only, empty dictionary by
|
||||||
default)
|
default)
|
||||||
|
* `info` {boolean} (If `true`, returns an object with `buffer` and `engine`)
|
||||||
|
|
||||||
See the description of `deflateInit2` and `inflateInit2` at
|
See the description of `deflateInit2` and `inflateInit2` at
|
||||||
<http://zlib.net/manual.html#Advanced> for more information on these.
|
<http://zlib.net/manual.html#Advanced> for more information on these.
|
||||||
|
11
lib/zlib.js
11
lib/zlib.js
@ -77,6 +77,13 @@ function isInvalidStrategy(strategy) {
|
|||||||
// constants.Z_DEFAULT_STRATEGY (0)
|
// constants.Z_DEFAULT_STRATEGY (0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function responseData(engine, buffer) {
|
||||||
|
if (engine._opts.info) {
|
||||||
|
return { buffer, engine };
|
||||||
|
}
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
function zlibBuffer(engine, buffer, callback) {
|
function zlibBuffer(engine, buffer, callback) {
|
||||||
// Streams do not support non-Buffer ArrayBufferViews yet. Convert it to a
|
// Streams do not support non-Buffer ArrayBufferViews yet. Convert it to a
|
||||||
// Buffer without copying.
|
// Buffer without copying.
|
||||||
@ -121,7 +128,7 @@ function zlibBuffer(engine, buffer, callback) {
|
|||||||
|
|
||||||
buffers = [];
|
buffers = [];
|
||||||
engine.close();
|
engine.close();
|
||||||
callback(err, buf);
|
callback(err, responseData(engine, buf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,7 +141,7 @@ function zlibBufferSync(engine, buffer) {
|
|||||||
|
|
||||||
var flushFlag = engine._finishFlushFlag;
|
var flushFlag = engine._finishFlushFlag;
|
||||||
|
|
||||||
return engine._processChunk(buffer, flushFlag);
|
return responseData(engine, engine._processChunk(buffer, flushFlag));
|
||||||
}
|
}
|
||||||
|
|
||||||
function zlibOnError(message, errno) {
|
function zlibOnError(message, errno) {
|
||||||
|
@ -36,6 +36,10 @@ const opts = {
|
|||||||
chunkSize: 1024,
|
chunkSize: 1024,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const optsInfo = {
|
||||||
|
info: true
|
||||||
|
};
|
||||||
|
|
||||||
for (const [type, expect] of [
|
for (const [type, expect] of [
|
||||||
['string', expectStr],
|
['string', expectStr],
|
||||||
['Buffer', expectBuf],
|
['Buffer', expectBuf],
|
||||||
@ -44,10 +48,10 @@ for (const [type, expect] of [
|
|||||||
)
|
)
|
||||||
]) {
|
]) {
|
||||||
for (const method of [
|
for (const method of [
|
||||||
['gzip', 'gunzip'],
|
['gzip', 'gunzip', 'Gzip', 'Gunzip'],
|
||||||
['gzip', 'unzip'],
|
['gzip', 'unzip', 'Gzip', 'Unzip'],
|
||||||
['deflate', 'inflate'],
|
['deflate', 'inflate', 'Deflate', 'Inflate'],
|
||||||
['deflateRaw', 'inflateRaw'],
|
['deflateRaw', 'inflateRaw', 'DeflateRaw', 'InflateRaw'],
|
||||||
]) {
|
]) {
|
||||||
zlib[method[0]](expect, opts, common.mustCall((err, result) => {
|
zlib[method[0]](expect, opts, common.mustCall((err, result) => {
|
||||||
zlib[method[1]](result, opts, common.mustCall((err, result) => {
|
zlib[method[1]](result, opts, common.mustCall((err, result) => {
|
||||||
@ -65,6 +69,22 @@ for (const [type, expect] of [
|
|||||||
}));
|
}));
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
zlib[method[0]](expect, optsInfo, common.mustCall((err, result) => {
|
||||||
|
assert.ok(result.engine instanceof zlib[method[2]],
|
||||||
|
`Should get engine ${method[2]} after ${method[0]} ` +
|
||||||
|
`${type} with info option.`);
|
||||||
|
|
||||||
|
const compressed = result.buffer;
|
||||||
|
zlib[method[1]](compressed, optsInfo, common.mustCall((err, result) => {
|
||||||
|
assert.strictEqual(result.buffer.toString(), expectStr,
|
||||||
|
`Should get original string after ${method[0]}/` +
|
||||||
|
`${method[1]} ${type} with info option.`);
|
||||||
|
assert.ok(result.engine instanceof zlib[method[3]],
|
||||||
|
`Should get engine ${method[3]} after ${method[0]} ` +
|
||||||
|
`${type} with info option.`);
|
||||||
|
}));
|
||||||
|
}));
|
||||||
|
|
||||||
{
|
{
|
||||||
const compressed = zlib[`${method[0]}Sync`](expect, opts);
|
const compressed = zlib[`${method[0]}Sync`](expect, opts);
|
||||||
const decompressed = zlib[`${method[1]}Sync`](compressed, opts);
|
const decompressed = zlib[`${method[1]}Sync`](compressed, opts);
|
||||||
@ -81,5 +101,21 @@ for (const [type, expect] of [
|
|||||||
`Should get original string after ${method[0]}Sync/` +
|
`Should get original string after ${method[0]}Sync/` +
|
||||||
`${method[1]}Sync ${type} without options.`);
|
`${method[1]}Sync ${type} without options.`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
const compressed = zlib[`${method[0]}Sync`](expect, optsInfo);
|
||||||
|
assert.ok(compressed.engine instanceof zlib[method[2]],
|
||||||
|
`Should get engine ${method[2]} after ${method[0]} ` +
|
||||||
|
`${type} with info option.`);
|
||||||
|
const decompressed = zlib[`${method[1]}Sync`](compressed.buffer,
|
||||||
|
optsInfo);
|
||||||
|
assert.strictEqual(decompressed.buffer.toString(), expectStr,
|
||||||
|
`Should get original string after ${method[0]}Sync/` +
|
||||||
|
`${method[1]}Sync ${type} without options.`);
|
||||||
|
assert.ok(decompressed.engine instanceof zlib[method[3]],
|
||||||
|
`Should get engine ${method[3]} after ${method[0]} ` +
|
||||||
|
`${type} with info option.`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user