@prodo/route
Version:
Route plugin for [Prodo](https://prodo.dev). See [documentation](https://docs.prodo.dev/plugins/routing) for more info.
66 lines • 2.2 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var pathToRegexp = require("path-to-regexp");
var cache = {};
var cacheLimit = 1000;
var cacheCount = 0;
var compilePattern = function (pattern, options) {
var optionKey = options.end + "." + options.strict + "." + options.sensitive;
var optionCache = cache[optionKey] || (cache[optionKey] = {});
if (optionCache[pattern]) {
return optionCache[pattern];
}
var keys = [];
var regex = pathToRegexp(pattern, keys, options);
var result = { keys: keys, regex: regex };
if (cacheCount < cacheLimit) {
optionCache[pattern] = result;
cacheCount++;
}
return result;
};
exports.matchRoute = function (path, pattern, exact) {
if (exact === void 0) { exact = false; }
var options = { end: exact, strict: false, sensitive: false };
var _a = compilePattern(pattern, options), regex = _a.regex, keys = _a.keys;
var match = regex.exec(path);
if (match == null) {
return null;
}
var url = match[0], values = match.slice(1);
var isExact = url === path;
if (exact && !isExact) {
return null;
}
return keys.reduce(function (acc, key, index) {
var _a;
return (__assign(__assign({}, acc), (_a = {}, _a[key.name] = values[index], _a)));
}, {});
};
exports.createParamString = function (params) {
if (params == null) {
return "";
}
var keys = Object.keys(params || {});
if (keys.length === 0) {
return "";
}
return "?" + keys
.map(function (key) { return encodeURIComponent(key) + "=" + encodeURIComponent(params[key]); })
.join("&");
};
exports.normalizePath = function (path) {
return path[0] !== "/" ? "/" + path : path;
};
//# sourceMappingURL=utils.js.map