{"ast":null,"code":"\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.useRouter = useRouter;\nexports.makePublicRouterInstance = makePublicRouterInstance;\nexports.createRouter = exports.withRouter = exports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _router2 = _interopRequireWildcard(require(\"../next-server/lib/router/router\"));\n\nexports.Router = _router2.default;\nexports.NextRouter = _router2.NextRouter;\n\nvar _routerContext = require(\"../next-server/lib/router-context\");\n\nvar _withRouter = _interopRequireDefault(require(\"./with-router\"));\n\nexports.withRouter = _withRouter.default;\n/* global window */\n\nconst singletonRouter = {\n  router: null,\n  // holds the actual router instance\n  readyCallbacks: [],\n\n  ready(cb) {\n    if (this.router) return cb();\n\n    if (false) {\n      this.readyCallbacks.push(cb);\n    }\n  }\n\n}; // Create public properties and methods of the router in the singletonRouter\n\nconst urlPropertyFields = ['pathname', 'route', 'query', 'asPath', 'components', 'isFallback', 'basePath'];\nconst routerEvents = ['routeChangeStart', 'beforeHistoryChange', 'routeChangeComplete', 'routeChangeError', 'hashChangeStart', 'hashChangeComplete'];\nconst coreMethodFields = ['push', 'replace', 'reload', 'back', 'prefetch', 'beforePopState']; // Events is a static property on the router, the router doesn't have to be initialized to use it\n\nObject.defineProperty(singletonRouter, 'events', {\n  get() {\n    return _router2.default.events;\n  }\n\n});\nurlPropertyFields.forEach(field => {\n  // Here we need to use Object.defineProperty because, we need to return\n  // the property assigned to the actual router\n  // The value might get changed as we change routes and this is the\n  // proper way to access it\n  Object.defineProperty(singletonRouter, field, {\n    get() {\n      const router = getRouter();\n      return router[field];\n    }\n\n  });\n});\ncoreMethodFields.forEach(field => {\n  // We don't really know the types here, so we add them later instead\n  ;\n\n  singletonRouter[field] = (...args) => {\n    const router = getRouter();\n    return router[field](...args);\n  };\n});\nrouterEvents.forEach(event => {\n  singletonRouter.ready(() => {\n    _router2.default.events.on(event, (...args) => {\n      const eventField = `on${event.charAt(0).toUpperCase()}${event.substring(1)}`;\n      const _singletonRouter = singletonRouter;\n\n      if (_singletonRouter[eventField]) {\n        try {\n          _singletonRouter[eventField](...args);\n        } catch (err) {\n          console.error(`Error when running the Router event: ${eventField}`);\n          console.error(`${err.message}\\n${err.stack}`);\n        }\n      }\n    });\n  });\n});\n\nfunction getRouter() {\n  if (!singletonRouter.router) {\n    const message = 'No router instance found.\\n' + 'You should only use \"next/router\" inside the client side of your app.\\n';\n    throw new Error(message);\n  }\n\n  return singletonRouter.router;\n} // Export the singletonRouter and this is the public API.\n\n\nvar _default = singletonRouter; // Reexport the withRoute HOC\n\nexports.default = _default;\n\nfunction useRouter() {\n  return _react.default.useContext(_routerContext.RouterContext);\n} // INTERNAL APIS\n// -------------\n// (do not use following exports inside the app)\n// Create a router and assign it as the singleton instance.\n// This is used in client side when we are initilizing the app.\n// This should **not** use inside the server.\n\n\nconst createRouter = (...args) => {\n  singletonRouter.router = new _router2.default(...args);\n  singletonRouter.readyCallbacks.forEach(cb => cb());\n  singletonRouter.readyCallbacks = [];\n  return singletonRouter.router;\n}; // This function is used to create the `withRouter` router instance\n\n\nexports.createRouter = createRouter;\n\nfunction makePublicRouterInstance(router) {\n  const _router = router;\n  const instance = {};\n\n  for (const property of urlPropertyFields) {\n    if (typeof _router[property] === 'object') {\n      instance[property] = Object.assign({}, _router[property]); // makes sure query is not stateful\n\n      continue;\n    }\n\n    instance[property] = _router[property];\n  } // Events is a static property on the router, the router doesn't have to be initialized to use it\n\n\n  instance.events = _router2.default.events;\n  coreMethodFields.forEach(field => {\n    instance[field] = (...args) => {\n      return _router[field](...args);\n    };\n  });\n  return instance;\n}","map":{"version":3,"sources":["../../client/router.ts"],"names":["singletonRouter","router","readyCallbacks","ready","cb","urlPropertyFields","routerEvents","coreMethodFields","Object","get","Router","field","getRouter","event","eventField","_singletonRouter","console","err","message","stack","React","RouterContext","createRouter","_router","instance"],"mappings":"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","sourcesContent":["/* global window */\nimport React from 'react'\nimport Router, { NextRouter } from '../next-server/lib/router/router'\nimport { RouterContext } from '../next-server/lib/router-context'\n\ntype ClassArguments<T> = T extends new (...args: infer U) => any ? U : any\n\ntype RouterArgs = ClassArguments<typeof Router>\n\ntype SingletonRouterBase = {\n  router: Router | null\n  readyCallbacks: Array<() => any>\n  ready(cb: () => any): void\n}\n\nexport { Router, NextRouter }\n\nexport type SingletonRouter = SingletonRouterBase & NextRouter\n\nconst singletonRouter: SingletonRouterBase = {\n  router: null, // holds the actual router instance\n  readyCallbacks: [],\n  ready(cb: () => void) {\n    if (this.router) return cb()\n    if (typeof window !== 'undefined') {\n      this.readyCallbacks.push(cb)\n    }\n  },\n}\n\n// Create public properties and methods of the router in the singletonRouter\nconst urlPropertyFields = [\n  'pathname',\n  'route',\n  'query',\n  'asPath',\n  'components',\n  'isFallback',\n  'basePath',\n]\nconst routerEvents = [\n  'routeChangeStart',\n  'beforeHistoryChange',\n  'routeChangeComplete',\n  'routeChangeError',\n  'hashChangeStart',\n  'hashChangeComplete',\n]\nconst coreMethodFields = [\n  'push',\n  'replace',\n  'reload',\n  'back',\n  'prefetch',\n  'beforePopState',\n]\n\n// Events is a static property on the router, the router doesn't have to be initialized to use it\nObject.defineProperty(singletonRouter, 'events', {\n  get() {\n    return Router.events\n  },\n})\n\nurlPropertyFields.forEach((field) => {\n  // Here we need to use Object.defineProperty because, we need to return\n  // the property assigned to the actual router\n  // The value might get changed as we change routes and this is the\n  // proper way to access it\n  Object.defineProperty(singletonRouter, field, {\n    get() {\n      const router = getRouter() as any\n      return router[field] as string\n    },\n  })\n})\n\ncoreMethodFields.forEach((field) => {\n  // We don't really know the types here, so we add them later instead\n  ;(singletonRouter as any)[field] = (...args: any[]) => {\n    const router = getRouter() as any\n    return router[field](...args)\n  }\n})\n\nrouterEvents.forEach((event) => {\n  singletonRouter.ready(() => {\n    Router.events.on(event, (...args) => {\n      const eventField = `on${event.charAt(0).toUpperCase()}${event.substring(\n        1\n      )}`\n      const _singletonRouter = singletonRouter as any\n      if (_singletonRouter[eventField]) {\n        try {\n          _singletonRouter[eventField](...args)\n        } catch (err) {\n          console.error(`Error when running the Router event: ${eventField}`)\n          console.error(`${err.message}\\n${err.stack}`)\n        }\n      }\n    })\n  })\n})\n\nfunction getRouter(): Router {\n  if (!singletonRouter.router) {\n    const message =\n      'No router instance found.\\n' +\n      'You should only use \"next/router\" inside the client side of your app.\\n'\n    throw new Error(message)\n  }\n  return singletonRouter.router\n}\n\n// Export the singletonRouter and this is the public API.\nexport default singletonRouter as SingletonRouter\n\n// Reexport the withRoute HOC\nexport { default as withRouter } from './with-router'\n\nexport function useRouter(): NextRouter {\n  return React.useContext(RouterContext)\n}\n\n// INTERNAL APIS\n// -------------\n// (do not use following exports inside the app)\n\n// Create a router and assign it as the singleton instance.\n// This is used in client side when we are initilizing the app.\n// This should **not** use inside the server.\nexport const createRouter = (...args: RouterArgs): Router => {\n  singletonRouter.router = new Router(...args)\n  singletonRouter.readyCallbacks.forEach((cb) => cb())\n  singletonRouter.readyCallbacks = []\n\n  return singletonRouter.router\n}\n\n// This function is used to create the `withRouter` router instance\nexport function makePublicRouterInstance(router: Router): NextRouter {\n  const _router = router as any\n  const instance = {} as any\n\n  for (const property of urlPropertyFields) {\n    if (typeof _router[property] === 'object') {\n      instance[property] = Object.assign({}, _router[property]) // makes sure query is not stateful\n      continue\n    }\n\n    instance[property] = _router[property]\n  }\n\n  // Events is a static property on the router, the router doesn't have to be initialized to use it\n  instance.events = Router.events\n\n  coreMethodFields.forEach((field) => {\n    instance[field] = (...args: any[]) => {\n      return _router[field](...args)\n    }\n  })\n\n  return instance\n}\n"]},"metadata":{},"sourceType":"script"}