123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- Object.defineProperty(exports, "Router", {
- enumerable: true,
- get: function() {
- return _router.default;
- }
- });
- Object.defineProperty(exports, "withRouter", {
- enumerable: true,
- get: function() {
- return _withRouter.default;
- }
- });
- exports.useRouter = useRouter;
- exports.createRouter = createRouter;
- exports.makePublicRouterInstance = makePublicRouterInstance;
- exports.default = void 0;
- var _interop_require_default = require("@swc/helpers/lib/_interop_require_default.js").default;
- var _react = _interop_require_default(require("react"));
- var _router = _interop_require_default(require("../shared/lib/router/router"));
- var _routerContext = require("../shared/lib/router-context");
- var _isError = _interop_require_default(require("../lib/is-error"));
- var _withRouter = _interop_require_default(require("./with-router"));
- const singletonRouter = {
- router: null,
- readyCallbacks: [],
- 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
- const urlPropertyFields = [
- 'pathname',
- 'route',
- 'query',
- 'asPath',
- 'components',
- 'isFallback',
- 'basePath',
- 'locale',
- 'locales',
- 'defaultLocale',
- 'isReady',
- 'isPreview',
- 'isLocaleDomain',
- 'domainLocales',
- ];
- const routerEvents = [
- 'routeChangeStart',
- 'beforeHistoryChange',
- 'routeChangeComplete',
- 'routeChangeError',
- 'hashChangeStart',
- 'hashChangeComplete',
- ];
- const 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
- Object.defineProperty(singletonRouter, 'events', {
- get () {
- return _router.default.events;
- }
- });
- function getRouter() {
- if (!singletonRouter.router) {
- const message = 'No router instance found.\n' + 'You should only use "next/router" on the client side of your app.\n';
- throw new Error(message);
- }
- return singletonRouter.router;
- }
- urlPropertyFields.forEach((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
- Object.defineProperty(singletonRouter, field, {
- get () {
- const router = getRouter();
- return router[field];
- }
- });
- });
- coreMethodFields.forEach((field)=>{
- singletonRouter[field] = (...args)=>{
- const router = getRouter();
- return router[field](...args);
- };
- });
- routerEvents.forEach((event)=>{
- singletonRouter.ready(()=>{
- _router.default.events.on(event, (...args)=>{
- const eventField = `on${event.charAt(0).toUpperCase()}${event.substring(1)}`;
- const _singletonRouter = singletonRouter;
- if (_singletonRouter[eventField]) {
- try {
- _singletonRouter[eventField](...args);
- } catch (err) {
- console.error(`Error when running the Router event: ${eventField}`);
- console.error((0, _isError).default(err) ? `${err.message}\n${err.stack}` : err + '');
- }
- }
- });
- });
- });
- var _default = singletonRouter;
- exports.default = _default;
- function useRouter() {
- return _react.default.useContext(_routerContext.RouterContext);
- }
- function createRouter(...args) {
- singletonRouter.router = new _router.default(...args);
- singletonRouter.readyCallbacks.forEach((cb)=>cb());
- singletonRouter.readyCallbacks = [];
- return singletonRouter.router;
- }
- function makePublicRouterInstance(router) {
- const scopedRouter = router;
- const instance = {};
- for (const property of urlPropertyFields){
- if (typeof scopedRouter[property] === 'object') {
- instance[property] = Object.assign(Array.isArray(scopedRouter[property]) ? [] : {}, scopedRouter[property]) // makes sure query is not stateful
- ;
- continue;
- }
- instance[property] = scopedRouter[property];
- }
- // Events is a static property on the router, the router doesn't have to be initialized to use it
- instance.events = _router.default.events;
- coreMethodFields.forEach((field)=>{
- instance[field] = (...args)=>{
- return scopedRouter[field](...args);
- };
- });
- return instance;
- }
- if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {
- Object.defineProperty(exports.default, '__esModule', { value: true });
- Object.assign(exports.default, exports);
- module.exports = exports.default;
- }
- //# sourceMappingURL=router.js.map
|