_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.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
const r = router._pathToRoutePath(p);
assert.deepStrictEqual(r, expected);
});
+ it('defines a path with escaped parameter', function () {
+ const p = '/a/\\:b/c';
+ const expected = ['', 'a', ':b', 'c'];
+ expected[Router.kPathMethods] = {};
+ const r = router._pathToRoutePath(p);
+ assert.deepStrictEqual(r, expected);
+ });
}); // _pathToRoutePath
describe('_pathCompareExact', function () {