mirror of https://gitee.com/antv-l7/antv-l7
111 lines
2.7 KiB
JavaScript
111 lines
2.7 KiB
JavaScript
"use strict";
|
|
|
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
|
|
exports.__esModule = true;
|
|
exports.cleanPath = exports.findPath = exports.findMatchPath = exports.setMatchPaths = void 0;
|
|
|
|
var _utils = require("@reach/router/lib/utils");
|
|
|
|
var _stripPrefix = _interopRequireDefault(require("./strip-prefix"));
|
|
|
|
var _normalizePagePath = _interopRequireDefault(require("./normalize-page-path"));
|
|
|
|
const pathCache = new Map();
|
|
let matchPaths = [];
|
|
|
|
const trimPathname = rawPathname => {
|
|
let pathname = decodeURIComponent(rawPathname); // Remove the pathPrefix from the pathname.
|
|
|
|
let trimmedPathname = (0, _stripPrefix.default)(pathname, __BASE_PATH__) // Remove any hashfragment
|
|
.split(`#`)[0] // Remove search query
|
|
.split(`?`)[0];
|
|
return trimmedPathname;
|
|
};
|
|
/**
|
|
* Set list of matchPaths
|
|
*
|
|
* @param {Array<{path: string, matchPath: string}>} value collection of matchPaths
|
|
*/
|
|
|
|
|
|
const setMatchPaths = value => {
|
|
matchPaths = value;
|
|
};
|
|
/**
|
|
* Return a matchpath url
|
|
* if `match-paths.json` contains `{ "/foo*": "/page1", ...}`, then
|
|
* `/foo?bar=far` => `/page1`
|
|
*
|
|
* @param {string} rawPathname A raw pathname
|
|
* @return {string|null}
|
|
*/
|
|
|
|
|
|
exports.setMatchPaths = setMatchPaths;
|
|
|
|
const findMatchPath = rawPathname => {
|
|
const trimmedPathname = cleanPath(rawPathname);
|
|
|
|
for (const {
|
|
matchPath,
|
|
path
|
|
} of matchPaths) {
|
|
if ((0, _utils.match)(matchPath, trimmedPathname)) {
|
|
return (0, _normalizePagePath.default)(path);
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}; // Given a raw URL path, returns the cleaned version of it (trim off
|
|
// `#` and query params), or if it matches an entry in
|
|
// `match-paths.json`, its matched path is returned
|
|
//
|
|
// E.g `/foo?bar=far` => `/foo`
|
|
//
|
|
// Or if `match-paths.json` contains `{ "/foo*": "/page1", ...}`, then
|
|
// `/foo?bar=far` => `/page1`
|
|
|
|
|
|
exports.findMatchPath = findMatchPath;
|
|
|
|
const findPath = rawPathname => {
|
|
const trimmedPathname = trimPathname(rawPathname);
|
|
|
|
if (pathCache.has(trimmedPathname)) {
|
|
return pathCache.get(trimmedPathname);
|
|
}
|
|
|
|
let foundPath = findMatchPath(trimmedPathname);
|
|
|
|
if (!foundPath) {
|
|
foundPath = cleanPath(rawPathname);
|
|
}
|
|
|
|
pathCache.set(trimmedPathname, foundPath);
|
|
return foundPath;
|
|
};
|
|
/**
|
|
* Clean a url and converts /index.html => /
|
|
* E.g `/foo?bar=far` => `/foo`
|
|
*
|
|
* @param {string} rawPathname A raw pathname
|
|
* @return {string}
|
|
*/
|
|
|
|
|
|
exports.findPath = findPath;
|
|
|
|
const cleanPath = rawPathname => {
|
|
const trimmedPathname = trimPathname(rawPathname);
|
|
let foundPath = trimmedPathname;
|
|
|
|
if (foundPath === `/index.html`) {
|
|
foundPath = `/`;
|
|
}
|
|
|
|
foundPath = (0, _normalizePagePath.default)(foundPath);
|
|
return foundPath;
|
|
};
|
|
|
|
exports.cleanPath = cleanPath; |