X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;ds=sidebyside;f=lib%2Frouter%2Findex.js;fp=lib%2Frouter%2Findex.js;h=1585065e14ce79b804cd6de967965951ab0d535a;hb=a90b9c1b279773c225560aa3ae5f5f21424ec420;hp=a13ac47d62f083e588d047f7d556f7502f4b91e4;hpb=3b15b5ff792fc5d61be8337989058c297460cd99;p=squeep-api-dingus diff --git a/lib/router/index.js b/lib/router/index.js index a13ac47..1585065 100644 --- a/lib/router/index.js +++ b/lib/router/index.js @@ -61,17 +61,43 @@ class Router { _pathToRoutePath(rawPath) { const routePath = rawPath .split('/') - .map((p) => p.startsWith(this.paramPrefix) ? new PathParameter(p.slice(this.paramPrefix.length)) : p); + .map((p) => this._pathPartMunge(p)); + if (this.ignoreTrailingSlash && routePath[routePath.length - 1] === '') { routePath.pop(); } + routePath[kPathMethods] = {}; + + Object.defineProperty(routePath, 'path', { + enumerable: false, + value: rawPath, + }); + Object.freeze(routePath); return routePath; } + /* + * Convert a path part string to parameter if needed. + * Remove escape from an escaped parameter. + * @param {String} part + * @returns {PathParameter|String} + * @private + */ + _pathPartMunge(part) { + if (part.startsWith(this.paramPrefix)) { + return new PathParameter(part.slice(this.paramPrefix.length)); + } + if (part.startsWith('\\' + this.paramPrefix)) { + return part.slice(1); + } + return part; + } + + /** * Compare checkPath to fixedPath, no param substitution, params must match. * @param {Router~RoutePath} routePath @@ -233,7 +259,7 @@ class Router { const { matchedPath, pathParams } = this._pathFind(pathParts); ctx.params = pathParams; if (matchedPath) { - ctx.matchedPath = matchedPath; + ctx.matchedPath = matchedPath.path; if (method in matchedPath[kPathMethods]) { return matchedPath[kPathMethods][method]; }