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: expressjs/express
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: e1b45ebd050b6f06aa38cda5aaf0c21708b0c71e
Choose a base ref
...
head repository: expressjs/express
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: b28db2c12c3bd9cd763316824446f79bf81e0686
Choose a head ref
Loading
Showing with 4,971 additions and 1,371 deletions.
  1. +1 −1 .eslintrc.yml
  2. +218 −0 .github/workflows/ci.yml
  3. +4 −16 .gitignore
  4. +0 −66 .travis.yml
  5. +92 −0 Charter.md
  6. +139 −0 Code-Of-Conduct.md
  7. +2 −1 Collaborator-Guide.md
  8. +103 −12 Contributing.md
  9. +143 −5 History.md
  10. +46 −35 Readme.md
  11. +6 −0 Release-Process.md
  12. +5 −2 Security.md
  13. +63 −0 Triager-Guide.md
  14. +59 −11 appveyor.yml
  15. +12 −8 benchmarks/Makefile
  16. +34 −0 benchmarks/README.md
  17. +1 −1 benchmarks/middleware.js
  18. +5 −3 benchmarks/run
  19. +29 −0 examples/README.md
  20. +6 −3 examples/auth/index.js
  21. +2 −0 examples/auth/views/head.ejs
  22. +6 −7 examples/auth/views/login.ejs
  23. +2 −0 examples/content-negotiation/db.js
  24. +2 −0 examples/content-negotiation/index.js
  25. +1 −0 examples/content-negotiation/users.js
  26. +4 −5 examples/cookie-sessions/index.js
  27. +2 −0 examples/cookies/index.js
  28. +3 −0 examples/downloads/files/notes/groceries.txt
  29. +13 −8 examples/downloads/index.js
  30. +2 −0 examples/ejs/index.js
  31. +1 −1 examples/ejs/public/stylesheets/style.css
  32. +1 −0 examples/ejs/views/header.html
  33. +2 −2 examples/ejs/views/users.html
  34. +2 −0 examples/error-pages/index.js
  35. +2 −2 examples/error-pages/views/404.ejs
  36. +2 −2 examples/error-pages/views/500.ejs
  37. +2 −0 examples/error-pages/views/error_header.ejs
  38. +2 −0 examples/error-pages/views/index.ejs
  39. +3 −1 examples/error/index.js
  40. +3 −1 examples/hello-world/index.js
  41. +3 −1 examples/markdown/index.js
  42. +2 −0 examples/multi-router/controllers/api_v1.js
  43. +2 −0 examples/multi-router/controllers/api_v2.js
  44. +2 −0 examples/multi-router/index.js
  45. +0 −60 examples/multipart/index.js
  46. +2 −0 examples/mvc/controllers/main/index.js
  47. +2 −0 examples/mvc/controllers/pet/index.js
  48. +2 −0 examples/mvc/controllers/pet/views/edit.ejs
  49. +2 −0 examples/mvc/controllers/pet/views/show.ejs
  50. +2 −0 examples/mvc/controllers/user-pet/index.js
  51. +2 −0 examples/mvc/controllers/user/index.js
  52. +2 −0 examples/mvc/controllers/user/views/edit.hbs
  53. +2 −0 examples/mvc/controllers/user/views/list.hbs
  54. +2 −0 examples/mvc/controllers/user/views/show.hbs
  55. +2 −0 examples/mvc/db.js
  56. +2 −0 examples/mvc/index.js
  57. +2 −0 examples/mvc/lib/boot.js
  58. +1 −0 examples/mvc/views/404.ejs
  59. +1 −0 examples/mvc/views/5xx.ejs
  60. +1 −0 examples/online/index.js
  61. +6 −11 examples/params/index.js
  62. +3 −1 examples/resource/index.js
  63. +6 −3 examples/route-map/index.js
  64. +3 −1 examples/route-middleware/index.js
  65. +2 −0 examples/route-separation/index.js
  66. +2 −0 examples/route-separation/post.js
  67. +2 −0 examples/route-separation/site.js
  68. +2 −0 examples/route-separation/user.js
  69. +1 −0 examples/route-separation/views/header.ejs
  70. +2 −2 examples/route-separation/views/index.ejs
  71. +2 −2 examples/route-separation/views/posts/index.ejs
  72. +3 −3 examples/route-separation/views/users/edit.ejs
  73. +2 −2 examples/route-separation/views/users/index.ejs
  74. +2 −2 examples/route-separation/views/users/view.ejs
  75. +1 −0 examples/search/index.js
  76. +2 −0 examples/search/public/client.js
  77. +3 −2 examples/search/public/index.html
  78. +1 −0 examples/session/index.js
  79. +2 −0 examples/session/redis.js
  80. +2 −0 examples/static-files/index.js
  81. +2 −0 examples/vhost/index.js
  82. +2 −0 examples/view-constructor/github-view.js
  83. +2 −0 examples/view-constructor/index.js
  84. +4 −2 examples/view-locals/index.js
  85. +2 −0 examples/view-locals/user.js
  86. +1 −0 examples/view-locals/views/index.ejs
  87. +8 −6 examples/web-service/index.js
  88. +19 −2 lib/application.js
  89. +1 −1 lib/request.js
  90. +69 −33 lib/response.js
  91. +26 −15 lib/router/index.js
  92. +22 −8 lib/router/route.js
  93. +7 −10 lib/utils.js
  94. +1 −1 lib/view.js
  95. +31 −31 package.json
  96. +52 −20 test/Route.js
  97. +87 −7 test/Router.js
  98. +16 −1 test/acceptance/auth.js
  99. +1 −1 test/acceptance/cookie-sessions.js
  100. +17 −0 test/acceptance/downloads.js
  101. +21 −0 test/acceptance/hello-world.js
  102. +3 −3 test/acceptance/web-service.js
  103. +8 −5 test/app.all.js
  104. +1 −0 test/app.del.js
  105. +8 −6 test/app.engine.js
  106. +8 −10 test/app.head.js
  107. +40 −18 test/app.js
  108. +3 −7 test/app.listen.js
  109. +16 −17 test/app.locals.js
  110. +1 −0 test/app.options.js
  111. +19 −20 test/app.param.js
  112. +28 −27 test/app.render.js
  113. +120 −0 test/app.request.js
  114. +114 −15 test/app.response.js
  115. +2 −0 test/app.route.js
  116. +61 −28 test/app.router.js
  117. +9 −6 test/app.routes.error.js
  118. +11 −9 test/app.use.js
  119. +45 −0 test/config.js
  120. +11 −11 test/exports.js
  121. +234 −108 test/express.json.js
  122. +186 −18 test/express.raw.js
  123. +3 −2 test/express.static.js
  124. +193 −29 test/express.text.js
  125. +198 −66 test/express.urlencoded.js
  126. +1 −0 test/middleware.basic.js
  127. +0 −2 test/mocha.opts
  128. +1 −0 test/regression.js
  129. +1 −0 test/req.accepts.js
  130. +1 −0 test/req.acceptsCharset.js
  131. +1 −0 test/req.acceptsCharsets.js
  132. +19 −16 test/req.acceptsEncoding.js
  133. +19 −16 test/req.acceptsEncodings.js
  134. +29 −25 test/req.acceptsLanguage.js
  135. +29 −25 test/req.acceptsLanguages.js
  136. +1 −0 test/req.baseUrl.js
  137. +1 −0 test/req.fresh.js
  138. +1 −0 test/req.get.js
  139. +1 −0 test/req.host.js
  140. +1 −0 test/req.hostname.js
  141. +17 −1 test/req.ip.js
  142. +1 −0 test/req.ips.js
  143. +1 −0 test/req.is.js
  144. +1 −0 test/req.param.js
  145. +1 −0 test/req.path.js
  146. +1 −0 test/req.protocol.js
  147. +4 −1 test/req.query.js
  148. +1 −0 test/req.range.js
  149. +7 −4 test/req.route.js
  150. +1 −0 test/req.secure.js
  151. +1 −0 test/req.signedCookies.js
  152. +1 −0 test/req.stale.js
  153. +1 −0 test/req.subdomains.js
  154. +23 −43 test/req.xhr.js
  155. +42 −30 test/res.append.js
  156. +1 −0 test/res.attachment.js
  157. +1 −0 test/res.clearCookie.js
  158. +141 −19 test/res.cookie.js
  159. +320 −25 test/res.download.js
  160. +31 −3 test/res.format.js
  161. +1 −0 test/res.get.js
  162. +16 −0 test/res.json.js
  163. +72 −52 test/res.jsonp.js
  164. +1 −0 test/res.links.js
  165. +1 −0 test/res.locals.js
  166. +293 −12 test/res.location.js
  167. +14 −20 test/res.redirect.js
  168. +1 −0 test/res.render.js
  169. +27 −26 test/res.send.js
  170. +781 −195 test/res.sendFile.js
  171. +1 −0 test/res.sendStatus.js
  172. +1 −0 test/res.set.js
  173. +194 −12 test/res.status.js
  174. +1 −0 test/res.type.js
  175. +1 −0 test/res.vary.js
  176. +14 −0 test/support/utils.js
  177. +26 −18 test/utils.js
2 changes: 1 addition & 1 deletion .eslintrc.yml
Original file line number Diff line number Diff line change
@@ -3,6 +3,6 @@ root: true
rules:
eol-last: error
eqeqeq: [error, allow-null]
indent: [error, 2, { SwitchCase: 1 }]
indent: [error, 2, { MemberExpression: "off", SwitchCase: 1 }]
no-trailing-spaces: error
no-unused-vars: [error, { vars: all, args: none, ignoreRestSiblings: true }]
218 changes: 218 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
name: ci

on:
- pull_request
- push

jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
name:
- 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

include:
- name: Node.js 0.10
node-version: "0.10"
npm-i: mocha@3.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.2 nyc@14.1.1 supertest@3.4.2

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

- name: Node.js 8.x
node-version: "8.17"
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.20"

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

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

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

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

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

steps:
- uses: actions/checkout@v4

- name: Install Node.js ${{ matrix.node-version }}
shell: bash -eo pipefail -l {0}
run: |
nvm install --default ${{ matrix.node-version }}
dirname "$(nvm which ${{ matrix.node-version }})" >> "$GITHUB_PATH"
- name: Configure npm
run: |
npm config set loglevel error
if [[ "$(npm config get package-lock)" == "true" ]]; then
npm config set package-lock false
else
npm config set shrinkwrap false
fi
- name: Install npm module(s) ${{ matrix.npm-i }}
run: npm install --save-dev ${{ matrix.npm-i }}
if: matrix.npm-i != ''

- name: Remove non-test dependencies
run: npm rm --silent --save-dev connect-redis

- name: Setup Node.js version-specific dependencies
shell: bash
run: |
# eslint for linting
# - remove on Node.js < 12
if [[ "$(cut -d. -f1 <<< "${{ matrix.node-version }}")" -lt 12 ]]; 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

- name: List environment
id: list_env
shell: bash
run: |
echo "node@$(node -v)"
echo "npm@$(npm -v)"
npm -s ls ||:
(npm -s ls --depth=0 ||:) | awk -F'[ @]' 'NR>1 && $2 { print $2 "=" $3 }' >> "$GITHUB_OUTPUT"
- name: Run tests
shell: bash
run: |
npm run test-ci
cp coverage/lcov.info "coverage/${{ matrix.name }}.lcov"
- name: Lint code
if: steps.list_env.outputs.eslint != ''
run: npm run lint

- name: Collect code coverage
run: |
mv ./coverage "./${{ matrix.name }}"
mkdir ./coverage
mv "./${{ matrix.name }}" "./coverage/${{ matrix.name }}"
- name: Upload code coverage
uses: actions/upload-artifact@v3
with:
name: coverage
path: ./coverage
retention-days: 1

coverage:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Install lcov
shell: bash
run: sudo apt-get -y install lcov

- name: Collect coverage reports
uses: actions/download-artifact@v3
with:
name: coverage
path: ./coverage

- name: Merge coverage reports
shell: bash
run: find ./coverage -name lcov.info -exec printf '-a %q\n' {} \; | xargs lcov -o ./coverage/lcov.info

- name: Upload coverage report
uses: coverallsapp/github-action@master
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
20 changes: 4 additions & 16 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,27 +1,15 @@
# OS X
.DS_Store*
Icon?
._*

# Windows
Thumbs.db
ehthumbs.db
Desktop.ini

# Linux
.directory
*~


# npm
node_modules
package-lock.json
*.log
*.gz


# Coveralls
.nyc_output
coverage

# Benchmarking
benchmarks/graphs

# ignore additional files using core.excludesFile
# https://git-scm.com/docs/gitignore
66 changes: 0 additions & 66 deletions .travis.yml

This file was deleted.

Loading