UNPKG

plotly-icons

Version:
193 lines (154 loc) 5.71 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.Router = exports.createRouter = exports.withRouter = undefined; var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray'); var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); var _defineProperty = require('babel-runtime/core-js/object/define-property'); var _defineProperty2 = _interopRequireDefault(_defineProperty); var _withRouter = require('./with-router'); Object.defineProperty(exports, 'withRouter', { enumerable: true, get: function get() { return _interopRequireDefault(_withRouter).default; } }); exports._rewriteUrlForNextExport = _rewriteUrlForNextExport; exports.makePublicRouterInstance = makePublicRouterInstance; var _router = require('./router'); var _router2 = _interopRequireDefault(_router); var _utils = require('../utils'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* global window */ var SingletonRouter = { router: null, // holds the actual router instance readyCallbacks: [], ready: function ready(cb) { if (this.router) return cb(); if (typeof window !== 'undefined') { this.readyCallbacks.push(cb); } } }; // Create public properties and methods of the router in the SingletonRouter var propertyFields = ['components', 'pathname', 'route', 'query', 'asPath']; var coreMethodFields = ['push', 'replace', 'reload', 'back', 'prefetch']; var routerEvents = ['routeChangeStart', 'beforeHistoryChange', 'routeChangeComplete', 'routeChangeError']; propertyFields.forEach(function (field) { // Here we need to use Object.defineProperty because, we need to return // the property assigned to the actual router // The value might get changed as we change routes and this is the // proper way to access it (0, _defineProperty2.default)(SingletonRouter, field, { get: function get() { throwIfNoRouter(); return SingletonRouter.router[field]; } }); }); coreMethodFields.forEach(function (field) { SingletonRouter[field] = function () { var _SingletonRouter$rout; throwIfNoRouter(); return (_SingletonRouter$rout = SingletonRouter.router)[field].apply(_SingletonRouter$rout, arguments); }; }); routerEvents.forEach(function (event) { SingletonRouter.ready(function () { SingletonRouter.router.events.on(event, function () { var eventField = 'on' + event.charAt(0).toUpperCase() + event.substring(1); if (SingletonRouter[eventField]) { try { SingletonRouter[eventField].apply(SingletonRouter, arguments); } catch (err) { console.error('Error when running the Router event: ' + eventField); console.error(err.message + '\n' + err.stack); } } }); }); }); var warnAboutRouterOnAppUpdated = (0, _utils.execOnce)(function () { console.warn('Router.onAppUpdated is removed - visit https://err.sh/next.js/no-on-app-updated-hook for more information.'); }); Object.defineProperty(SingletonRouter, 'onAppUpdated', { get: function get() { return null; }, set: function set() { warnAboutRouterOnAppUpdated(); return null; } }); function throwIfNoRouter() { if (!SingletonRouter.router) { var message = 'No router instance found.\n' + 'You should only use "next/router" inside the client side of your app.\n'; throw new Error(message); } } // Export the SingletonRouter and this is the public API. exports.default = SingletonRouter; // Reexport the withRoute HOC // INTERNAL APIS // ------------- // (do not use following exports inside the app) // Create a router and assign it as the singleton instance. // This is used in client side when we are initilizing the app. // This should **not** use inside the server. var createRouter = exports.createRouter = function createRouter() { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } SingletonRouter.router = new (Function.prototype.bind.apply(_router2.default, [null].concat(args)))(); SingletonRouter.readyCallbacks.forEach(function (cb) { return cb(); }); SingletonRouter.readyCallbacks = []; return SingletonRouter.router; }; // Export the actual Router class, which is usually used inside the server var Router = exports.Router = _router2.default; function _rewriteUrlForNextExport(url) { var _url$split = url.split('#'), _url$split2 = (0, _slicedToArray3.default)(_url$split, 2), hash = _url$split2[1]; url = url.replace(/#.*/, ''); var _url$split3 = url.split('?'), _url$split4 = (0, _slicedToArray3.default)(_url$split3, 2), path = _url$split4[0], qs = _url$split4[1]; path = path.replace(/\/$/, ''); var newPath = path; // Append a trailing slash if this path does not have an extension if (!/\.[^/]+\/?$/.test(path)) { newPath = path + '/'; } if (qs) { newPath = newPath + '?' + qs; } if (hash) { newPath = newPath + '#' + hash; } return newPath; } function makePublicRouterInstance(router) { var instance = {}; propertyFields.forEach(function (field) { // Here we need to use Object.defineProperty because, we need to return // the property assigned to the actual router // The value might get changed as we change routes and this is the // proper way to access it (0, _defineProperty2.default)(instance, field, { get: function get() { return router[field]; } }); }); coreMethodFields.forEach(function (field) { instance[field] = function () { return router[field].apply(router, arguments); }; }); return instance; }