UNPKG

@mapbox/batfish

Version:

The React-powered static-site generator you didn't know you wanted

100 lines (99 loc) 4.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports._invokeRouteChangeEndCallbacks = _invokeRouteChangeEndCallbacks; exports._invokeRouteChangeStartCallbacks = _invokeRouteChangeStartCallbacks; exports.addRouteChangeEndListener = addRouteChangeEndListener; exports.addRouteChangeStartListener = addRouteChangeStartListener; exports.invokeCallbacks = invokeCallbacks; exports.removeRouteChangeEndListener = removeRouteChangeEndListener; exports.removeRouteChangeStartListener = removeRouteChangeStartListener; var _prefixUrl = require("./prefix-url"); function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } var ALL_PATHS = '*'; var startListeners = _defineProperty({}, ALL_PATHS, []); var endListeners = _defineProperty({}, ALL_PATHS, []); function normalizePathname(pathname) { if (pathname !== ALL_PATHS && !(0, _prefixUrl.isUrlPrefixed)(pathname)) { pathname = (0, _prefixUrl.prefixUrl)(pathname); } return pathname.replace(/\/$/, ''); } function addListener(pathnameOrListener, maybeListener, registry, remover) { var listener; var pathname; if (typeof pathnameOrListener === 'function') { listener = pathnameOrListener; pathname = ALL_PATHS; } else { listener = maybeListener; pathname = pathnameOrListener; } pathname = normalizePathname(pathname); if (!registry[pathname]) { registry[pathname] = []; } registry[pathname].push(listener || noop); return function () { return remover(pathname, listener); }; } function removeListener(pathnameOrListener, maybeListener, registry) { var listener; var pathname; if (typeof pathnameOrListener === 'function' || !pathnameOrListener) { listener = pathnameOrListener; pathname = ALL_PATHS; } else { listener = maybeListener; pathname = pathnameOrListener; } pathname = normalizePathname(pathname); if (!listener) { registry[pathname] = []; return; } var listeners = registry[pathname]; for (var i = 0, l = listeners.length; i < l; i++) { if (listeners[i] === listener) { listeners.splice(i, 1); return; } } } function invokeCallbacks(nextPathname, registery) { nextPathname = normalizePathname(nextPathname); var promisesToKeep = [Promise.resolve()]; if (registery[nextPathname]) { registery[nextPathname].forEach(function (callback) { promisesToKeep.push(Promise.resolve(callback(nextPathname))); }); } registery[ALL_PATHS].forEach(function (callback) { promisesToKeep.push(Promise.resolve(callback(nextPathname))); }); return Promise.all(promisesToKeep); } function addRouteChangeStartListener(pathnameOrListener, maybeListener) { return addListener(pathnameOrListener, maybeListener, startListeners, removeRouteChangeStartListener); } function removeRouteChangeStartListener(pathnameOrListener, maybeListener) { removeListener(pathnameOrListener, maybeListener, startListeners); } function addRouteChangeEndListener(pathnameOrListener, maybeListener) { return addListener(pathnameOrListener, maybeListener, endListeners, removeRouteChangeEndListener); } function removeRouteChangeEndListener(pathnameOrListener, maybeListener) { removeListener(pathnameOrListener, maybeListener, endListeners); } function _invokeRouteChangeStartCallbacks(nextPathname) { return invokeCallbacks(nextPathname, startListeners); } function _invokeRouteChangeEndCallbacks(nextPathname) { return invokeCallbacks(nextPathname, endListeners); } function noop() {}