t-comm
Version:
专业、稳定、纯粹的工具库
93 lines (90 loc) • 2.5 kB
JavaScript
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 };