Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: pillarjs/finalhandler
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v1.3.1
Choose a base ref
...
head repository: pillarjs/finalhandler
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v2.0.0
Choose a head ref
  • 5 commits
  • 6 files changed
  • 2 contributors

Commits on Sep 2, 2024

  1. fix: ignore status message for HTTP/2 (#53)

    * fix: ignore status message for HTTP/2
    
    * test: fix
    
    * test: fix node@9
    
    * refactor: tests
    
    * test: fix
    
    * test: fix syntax
    alexander-akait authored and wesleytodd committed Sep 2, 2024
    Copy the full SHA
    1e3f2ae View commit details
  2. Copy the full SHA
    b2b0d16 View commit details
  3. Copy the full SHA
    db834a9 View commit details
  4. fix(test): fix test for http2 with null socket

    wesleytodd committed Sep 2, 2024
    Copy the full SHA
    c45583d View commit details
  5. 2.0.0

    wesleytodd committed Sep 2, 2024
    Copy the full SHA
    5966c82 View commit details
Showing with 314 additions and 243 deletions.
  1. +5 −128 .github/workflows/ci.yml
  2. +6 −0 HISTORY.md
  3. +4 −1 index.js
  4. +1 −1 package.json
  5. +92 −2 test/support/utils.js
  6. +206 −111 test/test.js
133 changes: 5 additions & 128 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -16,124 +16,27 @@ jobs:
strategy:
matrix:
name:
- Node.js 0.8
- Node.js 0.10
- Node.js 0.12
- io.js 1.x
- io.js 2.x
- io.js 3.x
- Node.js 4.x
- Node.js 5.x
- Node.js 6.x
- Node.js 7.x
- Node.js 8.x
- Node.js 9.x
- Node.js 10.x
- Node.js 11.x
- Node.js 12.x
- Node.js 13.x
- Node.js 14.x
- Node.js 15.x
- Node.js 16.x
- Node.js 17.x
- Node.js 18.x
- Node.js 19.x
- Node.js 20.x
- Node.js 21.x
- Node.js 22.x

include:
- name: Node.js 0.8
node-version: "0.8"
npm-i: mocha@2.5.3 supertest@1.1.0
npm-rm: nyc

- name: Node.js 0.10
node-version: "0.10"
npm-i: mocha@2.5.3 nyc@10.3.2 supertest@2.0.0

- name: Node.js 0.12
node-version: "0.12"
npm-i: mocha@3.5.3 nyc@10.3.2 supertest@2.0.0

- name: io.js 1.x
node-version: "1.8"
npm-i: mocha@3.5.3 nyc@10.3.2 supertest@2.0.0

- name: io.js 2.x
node-version: "2.5"
npm-i: mocha@3.5.3 nyc@10.3.2 supertest@2.0.0

- name: io.js 3.x
node-version: "3.3"
npm-i: mocha@3.5.3 nyc@10.3.2 supertest@2.0.0

- name: Node.js 4.x
node-version: "4.9"
npm-i: mocha@5.2.0 nyc@11.9.0 supertest@3.4.2

- name: Node.js 5.x
node-version: "5.12"
npm-i: mocha@5.2.0 nyc@11.9.0 supertest@3.4.2

- name: Node.js 6.x
node-version: "6.17"
npm-i: mocha@6.2.3 nyc@14.1.1 supertest@6.1.6

- name: Node.js 7.x
node-version: "7.10"
npm-i: mocha@6.2.3 nyc@14.1.1 supertest@6.1.6

- name: Node.js 8.x
node-version: "8.16"
npm-i: mocha@7.2.0 nyc@14.1.1

- name: Node.js 9.x
node-version: "9.11"
npm-i: mocha@7.2.0 nyc@14.1.1

- name: Node.js 10.x
node-version: "10.24"
npm-i: mocha@8.4.0

- name: Node.js 11.x
node-version: "11.15"
npm-i: mocha@8.4.0

- name: Node.js 12.x
node-version: "12.22"
npm-i: mocha@9.2.2

- name: Node.js 13.x
node-version: "13.14"
npm-i: mocha@9.2.2

- name: Node.js 14.x
node-version: "14.20"

- name: Node.js 15.x
node-version: "15.14"

- name: Node.js 16.x
node-version: "16.16"

- name: Node.js 17.x
node-version: "17.9"

- name: Node.js 18.x
node-version: "18.14"
node-version: "18"

- name: Node.js 19.x
node-version: "19.6"
node-version: "19"

- name: Node.js 20.x
node-version: "20.12"
node-version: "20"

- name: Node.js 21.x
node-version: "21.7"
node-version: "21"

- name: Node.js 22.x
node-version: "22.0"
node-version: "22"

steps:
- uses: actions/checkout@v4
@@ -142,12 +45,6 @@ jobs:
shell: bash -eo pipefail -l {0}
run: |
nvm install --default ${{ matrix.node-version }}
if [[ "${{ matrix.node-version }}" == 0.* && "$(cut -d. -f2 <<< "${{ matrix.node-version }}")" -lt 10 ]]; then
nvm install --alias=npm 0.10
nvm use ${{ matrix.node-version }}
sed -i '1s;^.*$;'"$(printf '#!%q' "$(nvm which npm)")"';' "$(readlink -f "$(which npm)")"
npm config set strict-ssl false
fi
dirname "$(nvm which ${{ matrix.node-version }})" >> "$GITHUB_PATH"
- name: Configure npm
@@ -158,26 +55,6 @@ jobs:
npm config set shrinkwrap false
fi
- name: Remove npm module(s) ${{ matrix.npm-rm }}
run: npm rm --silent --save-dev ${{ matrix.npm-rm }}
if: matrix.npm-rm != ''

- name: Install npm module(s) ${{ matrix.npm-i }}
run: npm install --save-dev ${{ matrix.npm-i }}
if: matrix.npm-i != ''

- name: Setup Node.js version-specific dependencies
shell: bash
run: |
# eslint for linting
# - remove on Node.js < 10
if [[ "$(cut -d. -f1 <<< "${{ matrix.node-version }}")" -lt 10 ]]; then
node -pe 'Object.keys(require("./package").devDependencies).join("\n")' | \
grep -E '^eslint(-|$)' | \
sort -r | \
xargs -n1 npm rm --silent --save-dev
fi
- name: Install Node.js dependencies
run: npm install

6 changes: 6 additions & 0 deletions HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
unreleased
==================

* drop support for node <18
* ignore status message for HTTP/2 (#53)

v1.2.1 / 2024-09-02
==================

5 changes: 4 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
@@ -278,7 +278,10 @@ function send (req, res, status, headers, message) {

// response status
res.statusCode = status
res.statusMessage = statuses.message[status]

if (req.httpVersionMajor < 2) {
res.statusMessage = statuses.message[status]
}

// remove any content headers
res.removeHeader('Content-Encoding')
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "finalhandler",
"description": "Node.js final http responder",
"version": "1.2.1",
"version": "2.0.0",
"author": "Douglas Christopher Wilson <doug@somethingdoug.com>",
"license": "MIT",
"repository": "pillarjs/finalhandler",
94 changes: 92 additions & 2 deletions test/support/utils.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,25 @@
var assert = require('assert')
var finalhandler = require('../..')
var http = require('http')

var http2

try {
http2 = require('http2')
} catch (_err) {
// Nothing
}

var request = require('supertest')
var SlowWriteStream = require('./sws')

exports.assert = assert
exports.createError = createError
exports.createServer = createServer
exports.createHTTPServer = createHTTPServer
exports.createHTTP2Server = createHTTP2Server
exports.createSlowWriteStream = createSlowWriteStream
exports.rawrequest = rawrequest
exports.rawrequestHTTP2 = rawrequestHTTP2
exports.request = request
exports.shouldHaveStatusMessage = shouldHaveStatusMessage
exports.shouldNotHaveBody = shouldNotHaveBody
@@ -26,7 +37,7 @@ function createError (message, props) {
return err
}

function createServer (err, opts) {
function createHTTPServer (err, opts) {
return http.createServer(function (req, res) {
var done = finalhandler(req, res, opts)

@@ -39,6 +50,19 @@ function createServer (err, opts) {
})
}

function createHTTP2Server (err, opts) {
return http2.createServer(function (req, res) {
var done = finalhandler(req, res, opts)

if (typeof err === 'function') {
err(req, res, done)
return
}

done(err)
})
}

function createSlowWriteStream () {
return new SlowWriteStream()
}
@@ -107,6 +131,72 @@ function rawrequest (server) {
}
}

function rawrequestHTTP2 (server) {
var _headers = {}
var _path

function expect (status, body, callback) {
if (arguments.length === 2) {
_headers[status.toLowerCase()] = body
return this
}

server.listen(function onlisten () {
var buf = ''
var resHeaders
var addr = this.address()
var port = addr.port

var client = http2.connect('http://127.0.0.1:' + port)
var req = client.request({
':method': 'GET',
':path': _path.replace(/http:\/\/localhost/, '')
})
req.on('error', callback)
req.on('response', function onresponse (responseHeaders) {
resHeaders = responseHeaders
})
req.on('data', function ondata (s) { buf += s })
req.on('end', function onend () {
var err = null

try {
for (var key in _headers) {
assert.strictEqual(resHeaders[key], _headers[key])
}

assert.strictEqual(resHeaders[':status'], status)

if (body instanceof RegExp) {
assert.ok(body.test(buf), 'expected body ' + buf + ' to match ' + body)
} else {
assert.strictEqual(buf, body, 'expected ' + body + ' response body, got ' + buf)
}
} catch (e) {
err = e
}

req.close()
client.close()
server.close()
callback(err)
})
})
}

function get (path) {
_path = path

return {
expect: expect
}
}

return {
get: get
}
}

function shouldHaveStatusMessage (statusMessage) {
return function (test) {
assert.strictEqual(test.res.statusMessage, statusMessage, 'should have statusMessage "' + statusMessage + '"')
317 changes: 206 additions & 111 deletions test/test.js

Large diffs are not rendered by default.