next-csrf
Version:
CSRF mitigation library for Next.js
1 lines • 13.2 kB
JSON
{"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"}