mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
Use a latest version of path-to-regexp for path-match (#3655)
* Use the latest path-to-regexp for path-match. * Fix the error route resolving. * Give proper credit to path-match * Remove an unwanted route. * Revert "Remove an unwanted route." This reverts commit 523c1687da8ddd499819e70df81567ec208e5998. * Add a comment why we need to keep _error.js route.
This commit is contained in:
parent
4305d526c0
commit
abe6e3ea47
|
@ -76,6 +76,7 @@
|
|||
"glob-promise": "3.3.0",
|
||||
"hoist-non-react-statics": "2.3.1",
|
||||
"htmlescape": "1.1.1",
|
||||
"http-errors": "1.6.2",
|
||||
"http-status": "1.0.1",
|
||||
"json-loader": "0.5.7",
|
||||
"loader-utils": "1.1.0",
|
||||
|
@ -84,7 +85,7 @@
|
|||
"mkdirp-then": "1.2.0",
|
||||
"mv": "2.1.1",
|
||||
"mz": "2.7.0",
|
||||
"path-match": "1.2.4",
|
||||
"path-to-regexp": "2.1.0",
|
||||
"pkg-up": "2.0.0",
|
||||
"prop-types": "15.6.0",
|
||||
"prop-types-exact": "1.1.1",
|
||||
|
|
|
@ -179,7 +179,11 @@ export default class Server {
|
|||
await serveStatic(req, res, path)
|
||||
},
|
||||
|
||||
'/_next/:buildId/page/_error*': async (req, res, params) => {
|
||||
// This is very similar to the following route.
|
||||
// But for this one, the page already built when the Next.js process starts.
|
||||
// There's no need to build it in on-demand manner and check for other things.
|
||||
// So, it's clean to have a seperate route for this.
|
||||
'/_next/:buildId/page/_error.js': async (req, res, params) => {
|
||||
if (!this.handleBuildId(params.buildId, res)) {
|
||||
const error = new Error('INVALID_BUILD_ID')
|
||||
const customFields = { buildIdMismatched: true }
|
||||
|
|
41
server/lib/path-match.js
Normal file
41
server/lib/path-match.js
Normal file
|
@ -0,0 +1,41 @@
|
|||
// We borrow this code from https://github.com/pillarjs/path-match
|
||||
// That's because, ^^^ package comes with very old version of path-to-regexp
|
||||
// So, it'll give us issues when the app has used a newer version of path-to-regexp
|
||||
// (When webpack resolving packages)
|
||||
var pathToRegexp = require('path-to-regexp')
|
||||
var createError = require('http-errors')
|
||||
|
||||
module.exports = function (options) {
|
||||
options = options || {}
|
||||
|
||||
return function (path) {
|
||||
var keys = []
|
||||
var re = pathToRegexp(path, keys, options)
|
||||
|
||||
return function (pathname, params) {
|
||||
var m = re.exec(pathname)
|
||||
if (!m) return false
|
||||
|
||||
params = params || {}
|
||||
|
||||
var key, param
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
key = keys[i]
|
||||
param = m[i + 1]
|
||||
if (!param) continue
|
||||
params[key.name] = decodeParam(param)
|
||||
if (key.repeat) params[key.name] = params[key.name].split(key.delimiter)
|
||||
}
|
||||
|
||||
return params
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function decodeParam (param) {
|
||||
try {
|
||||
return decodeURIComponent(param)
|
||||
} catch (_) {
|
||||
throw createError(400, 'failed to decode param "' + param + '"')
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
import pathMatch from 'path-match'
|
||||
import pathMatch from './lib/path-match'
|
||||
|
||||
const route = pathMatch()
|
||||
|
||||
|
|
30
yarn.lock
30
yarn.lock
|
@ -2912,14 +2912,7 @@ htmlparser2@^3.9.1:
|
|||
inherits "^2.0.1"
|
||||
readable-stream "^2.0.2"
|
||||
|
||||
http-errors@~1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.4.0.tgz#6c0242dea6b3df7afda153c71089b31c6e82aabf"
|
||||
dependencies:
|
||||
inherits "2.0.1"
|
||||
statuses ">= 1.2.1 < 2"
|
||||
|
||||
http-errors@~1.6.2:
|
||||
http-errors@1.6.2, http-errors@~1.6.2:
|
||||
version "1.6.2"
|
||||
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736"
|
||||
dependencies:
|
||||
|
@ -3230,10 +3223,6 @@ is-windows@^1.0.0:
|
|||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9"
|
||||
|
||||
isarray@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
|
||||
|
||||
isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
||||
|
@ -4512,13 +4501,6 @@ path-key@^2.0.0:
|
|||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
|
||||
|
||||
path-match@1.2.4:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/path-match/-/path-match-1.2.4.tgz#a62747f3c7e0c2514762697f24443585b09100ea"
|
||||
dependencies:
|
||||
http-errors "~1.4.0"
|
||||
path-to-regexp "^1.0.0"
|
||||
|
||||
path-parse@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
|
||||
|
@ -4527,11 +4509,9 @@ path-to-regexp@0.1.7:
|
|||
version "0.1.7"
|
||||
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
|
||||
|
||||
path-to-regexp@^1.0.0:
|
||||
version "1.7.0"
|
||||
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d"
|
||||
dependencies:
|
||||
isarray "0.0.1"
|
||||
path-to-regexp@2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.1.0.tgz#7e30f9f5b134bd6a28ffc2e3ef1e47075ac5259b"
|
||||
|
||||
path-type@^1.0.0:
|
||||
version "1.1.0"
|
||||
|
@ -5448,7 +5428,7 @@ standard@9.0.2:
|
|||
eslint-plugin-standard "~2.0.1"
|
||||
standard-engine "~5.4.0"
|
||||
|
||||
"statuses@>= 1.2.1 < 2", "statuses@>= 1.3.1 < 2", statuses@~1.3.1:
|
||||
"statuses@>= 1.3.1 < 2", statuses@~1.3.1:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
|
||||
|
||||
|
|
Loading…
Reference in a new issue