Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: call underlying implementation properly #183

Open
wants to merge 32 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
f4a997e
fix: call underlying implementation properly
fernandolguevara Jul 10, 2022
3ad026f
test(response): test response write with cb
fernandolguevara Jul 10, 2022
03361ec
test(response.write): fix test expect
fernandolguevara Jul 10, 2022
d76b3cb
fix(response.write): call underlying implementation properly
fernandolguevara Jul 10, 2022
4653825
test(response.write): should have Content-Encoding header
fernandolguevara Jul 10, 2022
2440598
fix(response.write): handle optional arguments
fernandolguevara Jul 10, 2022
2991c82
fix(response.write): handle end(cb)
fernandolguevara Jul 10, 2022
2b3369c
refactor(response-proxy): match nodejs behavior
fernandolguevara Jul 12, 2022
3493e8c
test(compression): avoid arrow fn
fernandolguevara Jul 12, 2022
50ca417
test(compression): add ERR_STREAM_ALREADY_FINISHED
fernandolguevara Jul 12, 2022
e87ca6b
fix(package): add missing dep
fernandolguevara Jul 13, 2022
0ec6742
Merge branch 'master' into master
fernandolguevara Jul 13, 2022
48c7ad6
fix(package): format
fernandolguevara Jul 13, 2022
1abb056
fix(package): use sinon 4.5.0 target
fernandolguevara Jul 16, 2022
6d20bec
Merge branch 'master' of github.com:expressjs/compression
fernandolguevara Jul 23, 2022
ee0c68c
refactor(lib): remove assert-is-uint8array dependency
fernandolguevara Aug 6, 2022
b96d7ac
fix(package): remove semver
fernandolguevara Aug 6, 2022
0736a7f
fix(package): typo in test script
fernandolguevara Aug 6, 2022
27c391f
use sinon 3.3.0
fernandolguevara Aug 6, 2022
96bccad
remove sinon
fernandolguevara Aug 6, 2022
bd4ff2b
remove deconstruct
fernandolguevara Aug 6, 2022
50aa251
listen error event
fernandolguevara Aug 6, 2022
1ecf4da
fix res.write proxy
fernandolguevara Aug 6, 2022
088b23c
emit stream error on res
fernandolguevara Aug 6, 2022
3c69597
fix node 0.8/0.10/0.12 issues
fernandolguevara Aug 6, 2022
5ed9a90
fix lint error
fernandolguevara Aug 6, 2022
8d9fb6c
remove console.log
fernandolguevara Aug 6, 2022
17e6933
fix(test): add code coverage
fernandolguevara Aug 16, 2022
68ee980
fix: ask for runtime version once
fernandolguevara Apr 11, 2023
696e58f
chore(ci):added new node versions
fernandolguevara Mar 3, 2024
3a98b98
chore(ci): bring back node 8/9
fernandolguevara Mar 3, 2024
b89ebed
Merge pull request #1 from fernandolguevara/add-node-versions
fernandolguevara Mar 3, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
29 changes: 22 additions & 7 deletions index.js
Expand Up @@ -75,25 +75,40 @@ function compression (options) {

// proxy

res.write = function write (chunk, encoding) {
res.write = function write (chunk, encoding, cb) {
if (ended) {
return false
fernandolguevara marked this conversation as resolved.
Show resolved Hide resolved
}

if (!cb && typeof encoding === 'function') {
cb = encoding
encoding = undefined
}

if (!this._header) {
this._implicitHeader()
}

return stream
? stream.write(toBuffer(chunk, encoding))
: _write.call(this, chunk, encoding)
? stream.write(toBuffer(chunk, encoding), encoding, cb)
: _write.call(this, chunk, encoding, cb)
}

res.end = function end (chunk, encoding) {
res.end = function end (chunk, encoding, cb) {
fernandolguevara marked this conversation as resolved.
Show resolved Hide resolved
if (ended) {
return false
}

if (!cb) {
if (typeof chunk === 'function') {
cb = chunk
chunk = encoding = undefined
} else if (typeof encoding === 'function') {
cb = encoding
encoding = undefined
}
}

if (!this._header) {
// estimate the length
if (!this.getHeader('Content-Length')) {
Expand All @@ -104,16 +119,16 @@ function compression (options) {
}

if (!stream) {
return _end.call(this, chunk, encoding)
return _end.call(this, chunk, encoding, cb)
}

// mark ended
ended = true

// write Buffer for Node.js 0.8
return chunk
? stream.end(toBuffer(chunk, encoding))
: stream.end()
? stream.end(toBuffer(chunk, encoding), encoding, cb)
: stream.end(cb)
}

res.on = function on (type, listener) {
Expand Down
29 changes: 29 additions & 0 deletions test/compression.js
Expand Up @@ -10,6 +10,29 @@ var zlib = require('zlib')
var compression = require('..')

describe('compression()', function () {
it('request should end', function (done) {
var reponseText = 'hello, world'

var server = createServer({ threshold: 0 }, function (req, res) {
res.setHeader('Content-Type', 'text/plain')

res.write(Buffer.from(reponseText), (err) => {
if (err) {
console.error('err', err)
}

res.end()
})
})

request(server)
.get('/')
.set('Accept-Encoding', 'gzip')
.expect(shouldHaveHeader('Content-Encoding'))
.expect(shouldHaveBodyLength(reponseText.length))
.expect(200, done)
})

it('should skip HEAD', function (done) {
var server = createServer({ threshold: 0 }, function (req, res) {
res.setHeader('Content-Type', 'text/plain')
Expand Down Expand Up @@ -680,6 +703,12 @@ function shouldHaveBodyLength (length) {
}
}

function shouldHaveHeader (header) {
return function (res) {
assert.ok((header.toLowerCase() in res.headers), 'should have header ' + header)
}
}

function shouldNotHaveHeader (header) {
return function (res) {
assert.ok(!(header.toLowerCase() in res.headers), 'should not have header ' + header)
Expand Down