@helpscout/hsds-react
Version:
React component library for Help Scout's Design System
163 lines (131 loc) • 4.02 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.max = exports.last = exports.first = exports.remove = exports.add = exports.setupManager = exports.matchPath = void 0;
var _pathToRegexp = _interopRequireDefault(require("path-to-regexp"));
var _lodash = _interopRequireDefault(require("lodash.isnil"));
var _id = require("../../utilities/id");
/* istanbul ignore file */
/**
* This exists to ensure that the imports work correctly.
*/
// Source
// https://github.com/ReactTraining/react-router/blob/3d233bf0b6dd5bf68d9bac9c94273ae25646b207/packages/react-router/modules/matchPath.js
var patternCache = {};
var cacheLimit = 10000;
var cacheCount = 0;
var compilePath = function compilePath(pattern, options) {
var cacheKey = "" + options.end + options.strict + options.sensitive;
var cache = patternCache[cacheKey] || (patternCache[cacheKey] = {});
if (cache[pattern]) return cache[pattern];
var keys = [];
var re = (0, _pathToRegexp.default)(pattern, keys, options);
var compiledPattern = {
re: re,
keys: keys
};
if (cacheCount < cacheLimit) {
cache[pattern] = compiledPattern;
cacheCount++;
}
return compiledPattern;
};
/**
* Public API for matching a URL pathname to a path pattern.
*/
var matchPath = function matchPath(pathname, options, parent) {
if (options === void 0) {
options = {};
}
if (typeof options === 'string') options = {
path: options
};
var _options = options,
path = _options.path,
_options$exact = _options.exact,
exact = _options$exact === void 0 ? false : _options$exact,
_options$strict = _options.strict,
strict = _options$strict === void 0 ? false : _options$strict,
_options$sensitive = _options.sensitive,
sensitive = _options$sensitive === void 0 ? false : _options$sensitive;
if ((0, _lodash.default)(path)) return parent;
var _compilePath = compilePath(path, {
end: exact,
strict: strict,
sensitive: sensitive
}),
re = _compilePath.re,
keys = _compilePath.keys;
var match = re.exec(pathname);
if (!match) return null;
var url = match[0],
values = match.slice(1);
var isExact = pathname === url;
if (exact && !isExact) return null;
return {
path: path,
// the path pattern used to match
url: path === '/' && url === '' ? '/' : url,
// the matched portion of the URL
isExact: isExact,
// whether or not we matched exactly
params: keys.reduce(function (memo, key, index) {
memo[key.name] = values[index];
return memo;
}, {})
};
};
exports.matchPath = matchPath;
var setupManager = function setupManager(namespace) {
if (namespace === void 0) {
namespace = '';
}
var ns = typeof namespace !== 'string' || !namespace.length ? (0, _id.createUniqueIDFactory)('BlueGlobalManager')() : namespace;
window[ns] = window[ns] || []; // Welcome aboard, Mr. Manager!
// Wow, I'm Mr. Manager!
// Well, manager… we we just say manager.
return {
data: window[ns],
add: add(window[ns]),
remove: remove(window[ns]),
first: first(window[ns]),
last: last(window[ns]),
max: max(window[ns])
};
};
exports.setupManager = setupManager;
var add = function add(manager) {
return function (item) {
manager.push(item);
return manager;
};
};
exports.add = add;
var remove = function remove(manager) {
return function (item) {
var index = manager.indexOf(item);
if (index >= 0) {
manager.splice(index, 1);
}
return manager;
};
};
exports.remove = remove;
var first = function first(manager) {
return function () {
return manager[0];
};
};
exports.first = first;
var last = function last(manager) {
return function () {
return manager[manager.length - 1];
};
};
exports.last = last;
var max = function max(manager) {
return function () {
return Math.max.apply(Math, manager);
};
};
exports.max = max;
;