UNPKG

@helpscout/hsds-react

Version:

React component library for Help Scout's Design System

163 lines (131 loc) 4.02 kB
"use strict"; 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;