UNPKG

@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
"use strict"; 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