UNPKG

next-csrf

Version:

CSRF mitigation library for Next.js

1 lines 15.6 kB
{"ast":null,"code":"\"use strict\";\n\nvar _construct = require(\"@babel/runtime/helpers/construct\");\n\nvar _s = $RefreshSig$();\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\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\nvar singletonRouter = {\n router: null,\n // holds the actual router instance\n readyCallbacks: [],\n ready: function ready(cb) {\n if (this.router) return cb();\n\n if (true) {\n this.readyCallbacks.push(cb);\n }\n }\n}; // Create public properties and methods of the router in the singletonRouter\n\nvar urlPropertyFields = ['pathname', 'route', 'query', 'asPath', 'components', 'isFallback', 'basePath'];\nvar routerEvents = ['routeChangeStart', 'beforeHistoryChange', 'routeChangeComplete', 'routeChangeError', 'hashChangeStart', 'hashChangeComplete'];\nvar 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: function get() {\n return _router2[\"default\"].events;\n }\n});\nurlPropertyFields.forEach(function (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: function get() {\n var router = getRouter();\n return router[field];\n }\n });\n});\ncoreMethodFields.forEach(function (field) {\n // We don't really know the types here, so we add them later instead\n ;\n\n singletonRouter[field] = function () {\n var router = getRouter();\n return router[field].apply(router, arguments);\n };\n});\nrouterEvents.forEach(function (event) {\n singletonRouter.ready(function () {\n _router2[\"default\"].events.on(event, function () {\n var eventField = \"on\".concat(event.charAt(0).toUpperCase()).concat(event.substring(1));\n var _singletonRouter = singletonRouter;\n\n if (_singletonRouter[eventField]) {\n try {\n _singletonRouter[eventField].apply(_singletonRouter, arguments);\n } catch (err) {\n console.error(\"Error when running the Router event: \".concat(eventField));\n console.error(\"\".concat(err.message, \"\\n\").concat(err.stack));\n }\n }\n });\n });\n});\n\nfunction getRouter() {\n if (!singletonRouter.router) {\n var 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 _s();\n\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\n_s(useRouter, \"gDsCjeeItUuvgOWf1v4qoK9RF6k=\");\n\nvar createRouter = function createRouter() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n singletonRouter.router = _construct(_router2[\"default\"], args);\n singletonRouter.readyCallbacks.forEach(function (cb) {\n return cb();\n });\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 var _router = router;\n var instance = {};\n\n var _iterator = _createForOfIteratorHelper(urlPropertyFields),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var property = _step.value;\n\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 } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n instance.events = _router2[\"default\"].events;\n coreMethodFields.forEach(function (field) {\n instance[field] = function () {\n return _router[field].apply(_router, arguments);\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","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"}