40 lines
1.1 KiB
JavaScript
40 lines
1.1 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "getRouteMatcher", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return getRouteMatcher;
|
|
}
|
|
});
|
|
const _utils = require("../../utils");
|
|
function getRouteMatcher(param) {
|
|
let { re, groups } = param;
|
|
return (pathname)=>{
|
|
const routeMatch = re.exec(pathname);
|
|
if (!routeMatch) {
|
|
return false;
|
|
}
|
|
const decode = (param)=>{
|
|
try {
|
|
return decodeURIComponent(param);
|
|
} catch (_) {
|
|
throw new _utils.DecodeError("failed to decode param");
|
|
}
|
|
};
|
|
const params = {};
|
|
Object.keys(groups).forEach((slugName)=>{
|
|
const g = groups[slugName];
|
|
const m = routeMatch[g.pos];
|
|
if (m !== undefined) {
|
|
params[slugName] = ~m.indexOf("/") ? m.split("/").map((entry)=>decode(entry)) : g.repeat ? [
|
|
decode(m)
|
|
] : decode(m);
|
|
}
|
|
});
|
|
return params;
|
|
};
|
|
}
|
|
|
|
//# sourceMappingURL=route-matcher.js.map
|