UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

93 lines (90 loc) 2.5 kB
import _typeof from '@babel/runtime/helpers/typeof'; import { _ as __assign } from '../tslib.es6-096fffdd.js'; import pathToRegexp from './path-to-regexp.mjs'; function getQueryBaseStr(str) { if (str === void 0) { str = ''; } if (!str) { return {}; } return str.split('&').reduce(function (acc, item) { var list = item.split('='); acc[list[0]] = list[1]; return acc; }, {}); } function isMatchPath(meta, path) { var _a = meta.rawPath, rawPath = _a === void 0 ? [] : _a; if (!(rawPath === null || rawPath === void 0 ? void 0 : rawPath.length)) return; for (var _i = 0, rawPath_1 = rawPath; _i < rawPath_1.length; _i++) { var item = rawPath_1[_i]; // eslint-disable-next-line prefer-const var keys = []; var regexp = pathToRegexp(item, keys); var match = path.match(regexp); if (match) { return { match: match, regexp: regexp, keys: keys }; } } return; } /** * 根据路由表,找到 path 对应的 路由名称 * @param {string} path 路由路径 * @param {array} routes 路由表 * @returns {object} 匹配到的路由信息 * * @example * ```ts * const { name, params, meta, path } = findRouteName(rawPath, ALL_ROUTES) || {}; * * console.log('name', name); * ``` */ function findRouteName(path, routes) { var _loop_1 = function _loop_1(i) { var item = routes[i]; var name_1 = item.name, _a = item.meta, meta = _a === void 0 ? {} : _a, itemPath = item.path; var purePath = path; var queryStr = ''; if (path.includes('?')) { var idx = path.indexOf('?'); purePath = path.slice(0, idx); queryStr = path.slice(idx + 1); } var match = isMatchPath(meta, purePath); var queryBasePath = getQueryBaseStr(queryStr); if (match) { var iMatch_1 = match.match, keys = match.keys; var params = keys.reduce(function (acc, key, index) { var name = key.name; acc[name] = iMatch_1[index + 1]; return acc; }, {}); return { value: { name: name_1, params: __assign(__assign({}, params), queryBasePath), path: itemPath, meta: meta } }; } }; // eslint-disable-next-line @typescript-eslint/prefer-for-of for (var i = 0; i < routes.length; i++) { var state_1 = _loop_1(i); if (_typeof(state_1) === "object") return state_1.value; } } export { findRouteName, getQueryBaseStr, isMatchPath };