{"_id":"07aj-next-routes-extended","_rev":"2-85ef3f4b88c1a624ad76e7b0afa5e431","name":"07aj-next-routes-extended","dist-tags":{"latest":"0.0.1"},"versions":{"1.7.0":{"name":"07aj-next-routes-extended","version":"1.7.0","description":"Easy to use universal dynamic routes for Next.js","repository":{"type":"git","url":"git+https://github.com/07abhishekrock/next-routes-extended.git"},"main":"dist","typings":"typings/next-routes.d.ts","scripts":{"lint":"standard 'src/*' 'test/*'","build":"del dist/* && babel src -d dist","pretest":"npm run lint && npm run build","test":"npm run testOnly && npm run testTypings","testOnly":"jest \\.test.js --coverage","testTypings":"tsc --project ./typings/tests","testCI":"npm run test && cat coverage/lcov.info | coveralls","dev":"concurrently -k 'npm run build -- -w' 'npm run testOnly -- --watch'"},"standard":{"parser":"babel-eslint"},"jest":{"testEnvironment":"node","roots":["test/","dist/"]},"dependencies":{"path-to-regexp":"^6.2.0","url-parse":"^1.5.4"},"peerDependencies":{"next":">=11","react":">=17"},"devDependencies":{"@babel/cli":"^7.16.8","@babel/core":"^7.16.12","@babel/preset-env":"^7.16.11","@types/babel-core":"^6.25.7","@types/babel__core":"^7.1.18","@types/babel__preset-env":"^7.9.2","@types/concurrently":"^6.4.0","@types/node":"^17.0.14","@types/prop-types":"^15.7.4","@types/react":"^17.0.38","@types/react-dom":"^17.0.11","@types/react-test-renderer":"^17.0.1","@types/url-parse":"^1.4.7","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.1.0","babel-jest":"^27.4.6","concurrently":"^7.0.0","coveralls":"^3.1.1","del-cli":"^4.0.1","jest":"^27.4.7","next":"^12.0.10","prop-types":"^15.8.1","react":"^17.0.2","react-dom":"^17.0.2","react-test-renderer":"^17.0.2","standard":"^16.0.4","typescript":"^4.5.5"},"author":{"name":"meabed"},"license":"MIT","keywords":["next","next.js","react","route","router","routes","routing"],"gitHead":"5155deb9501515c3767e595551d1024b20d5a66f","bugs":{"url":"https://github.com/07abhishekrock/next-routes-extended/issues"},"homepage":"https://github.com/07abhishekrock/next-routes-extended#readme","_id":"07aj-next-routes-extended@1.7.0","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-UGLlL3i7pPBTXTeg1IPDgKn8GTwFQdpolUfMymK4wb6MNXcOhxvFWFs+xk4KMoRM1RcRmx5buynRYwA19BRnDg==","shasum":"23329d478fad3a3007fdd019574d4e4e1433f584","tarball":"https://registry.npmjs.org/07aj-next-routes-extended/-/07aj-next-routes-extended-1.7.0.tgz","fileCount":8,"unpackedSize":21806,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKFeTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrvNg//dlkuj/uiQwJbe9dqX+gEM8ppJutjDGYMimVrPKWFcf2PVLDC\r\n4qTutb+quUxLuJmw5u23c+SB5vkLaXWTkaCMtAS8HHIInBo8Fg2GmJu1P/2d\r\n9jTMwdr7TNjhm2zFfFAJrW2xcYCv7pIVpyNsbGxbGX5DqzSzKfM45Mjr/cm1\r\n6H7/NJCdDxCj69+cMtkmbrg3FrBokxu8m+85t1nYYcpYSGy5FxGleooJ/nUC\r\nyO5pEkJD3rYJSLCyqMbUFZ7MXVzfqne/IPdc4cZOaOImJ4Et4mVGd+KDaprX\r\nfOODdbavKfe2SLcvu/paXgwSBItMHDWtMhXQN8uCFAyvgOl1ARsXpSycHPKV\r\n3/PLR9+MTcZ3DQYncAUXXDHKvIXSWo/rxMGwECoqK39RE+8PQyYxlpIb8DbZ\r\nXVcVR5gT0vMpZaydeAGkQlQTKm77it42OKNavsLREeYTHRElVWV0sbF1F/FO\r\nATTLtLqKTQHx2RHdbE218A7MTvMmItq+ERuzHb8/xyJzMb971ffl4vRjXVZg\r\npXKFJMsrdVzhCHtkR3jDQ4D17t3gYHZ641w6Pq7r859RVpCBKJGOxZ4M2taZ\r\nZ47enUnG3KyWX/yOLzkcbArLoBws0abpHhcB8rtFFXX1nanQYFMet3+/qv0l\r\nhWVeGq51zYu1XJlPJdErmgOoQd2PYPobkM8=\r\n=cq7Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDk0VbqW9qNn1616BSmMNjKn09kZEbRR8DbRhOAifu/owIgHl5J0sRvMWJQyrUvPiJwg6f8VlUYrCBp2Vqp7E+zzLs="}]},"_npmUser":{"name":"07abhishekrock","email":"07abhishekrock@gmail.com"},"directories":{},"maintainers":[{"name":"07abhishekrock","email":"07abhishekrock@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/07aj-next-routes-extended_1.7.0_1646811027851_0.5752915120147997"},"_hasShrinkwrap":false},"0.0.1":{"name":"07aj-next-routes-extended","version":"0.0.1","description":"Easy to use universal dynamic routes for Next.js","repository":{"type":"git","url":"git+https://github.com/07abhishekrock/next-routes-extended.git"},"main":"dist","typings":"typings/next-routes.d.ts","scripts":{"lint":"standard 'src/*' 'test/*'","build":"del dist/* && babel src -d dist","pretest":"npm run lint && npm run build","test":"npm run testOnly && npm run testTypings","testOnly":"jest \\.test.js --coverage","testTypings":"tsc --project ./typings/tests","testCI":"npm run test && cat coverage/lcov.info | coveralls","dev":"concurrently -k 'npm run build -- -w' 'npm run testOnly -- --watch'"},"standard":{"parser":"babel-eslint"},"jest":{"testEnvironment":"node","roots":["test/","dist/"]},"dependencies":{"path-to-regexp":"^6.2.0","url-parse":"^1.5.4"},"peerDependencies":{"next":">=11","react":">=17"},"devDependencies":{"@babel/cli":"^7.16.8","@babel/core":"^7.16.12","@babel/preset-env":"^7.16.11","@types/babel-core":"^6.25.7","@types/babel__core":"^7.1.18","@types/babel__preset-env":"^7.9.2","@types/concurrently":"^6.4.0","@types/node":"^17.0.14","@types/prop-types":"^15.7.4","@types/react":"^17.0.38","@types/react-dom":"^17.0.11","@types/react-test-renderer":"^17.0.1","@types/url-parse":"^1.4.7","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.1.0","babel-jest":"^27.4.6","concurrently":"^7.0.0","coveralls":"^3.1.1","del-cli":"^4.0.1","jest":"^27.4.7","next":"^12.0.10","prop-types":"^15.8.1","react":"^17.0.2","react-dom":"^17.0.2","react-test-renderer":"^17.0.2","standard":"^16.0.4","typescript":"^4.5.5"},"author":{"name":"meabed"},"license":"MIT","keywords":["next","next.js","react","route","router","routes","routing"],"gitHead":"5155deb9501515c3767e595551d1024b20d5a66f","bugs":{"url":"https://github.com/07abhishekrock/next-routes-extended/issues"},"homepage":"https://github.com/07abhishekrock/next-routes-extended#readme","_id":"07aj-next-routes-extended@0.0.1","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-sC33eRUbUydWdG2gfCoEaZyOsfpkRArP8i8C/oh82fVH3TsI//JZBiflQkK5Pd70+sTeMDWINrq0VJCswnoQgw==","shasum":"7c97cc98db22c34a583c24c9586cece5790c9fbe","tarball":"https://registry.npmjs.org/07aj-next-routes-extended/-/07aj-next-routes-extended-0.0.1.tgz","fileCount":8,"unpackedSize":21806,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKFemACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp00g/+PX2bAqFWwFWfED57BH6frfhve4ud/CCVzSFbAaZCUz6wNd8k\r\n7A5u02hDZB6l/vPM1DZhnYmZKcywOMBNPMNUeTgscdpj4SrwkF1eaHMDHv+u\r\nJN/14fPDOS1eQd686AnnYb9dj8VrjXQum60fofWYvB/JhGIRRdG6N2IJMhM0\r\ncsl+p3+XBENo8PJhJaDuqYrw/fQ74wIS0YP+/Dtgxoc3p94LFc+tkC9G5qcO\r\nEAUlwjgfpRQO5C89LdDCm90TvLIKhyxz/+dZdyiB/10IX7WGyxqwdW1wZHbW\r\nq5FFoPHmmXsZexuliK25cOgPQJdqiYyEnTJLguNZURxiyvVey9dVVWG2Pcci\r\nVGunka6DXxuZ1DoSKZqOk0gKrflwdJO2Ill+61e1+5Utlyh5uCNpXIxUsN3N\r\nPLWggvVe2nfe3NGaJZRzAom5vs3fQn72U/Krp7b57k24dCRPFbCtfmFPsPIx\r\nIN1oAxVZTedP/bfXjxQ1wz7m4cwuA2BEgER3eFtMiFBD9znSJofcviL/w2tp\r\nlrBUkQHDzmzjtVZ+Ai5iOv4rSWpMeS8p8NLBVEK1GTbEyC11jcy9C8hoIXoX\r\noioZ338ZbNi435iYlDItWJ9sfjZF9tB7v5AaIgpnr8fiGGGDlfhnqgkPDjf0\r\na5Z0kh9UBrgEkpoytyN66cScf6zNSRbhI6g=\r\n=8t5Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCO8SVd+fiIVAh4blzDxOkqb2i6cD6r0dLrEn42nwe/0AIhALH3RmXaB2aOEXRHGyMFuQIft9jz8BZTu8aeLmC+91yP"}]},"_npmUser":{"name":"07abhishekrock","email":"07abhishekrock@gmail.com"},"directories":{},"maintainers":[{"name":"07abhishekrock","email":"07abhishekrock@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/07aj-next-routes-extended_0.0.1_1646811046482_0.5485530655380206"},"_hasShrinkwrap":false}},"time":{"created":"2022-03-09T07:30:27.795Z","1.7.0":"2022-03-09T07:30:27.971Z","modified":"2022-04-04T10:08:10.169Z","0.0.1":"2022-03-09T07:30:46.632Z"},"maintainers":[{"name":"07abhishekrock","email":"07abhishekrock@gmail.com"}],"description":"Easy to use universal dynamic routes for Next.js","homepage":"https://github.com/07abhishekrock/next-routes-extended#readme","keywords":["next","next.js","react","route","router","routes","routing"],"repository":{"type":"git","url":"git+https://github.com/07abhishekrock/next-routes-extended.git"},"author":{"name":"meabed"},"bugs":{"url":"https://github.com/07abhishekrock/next-routes-extended/issues"},"license":"MIT","readme":"# Dynamic Routes for Next.js\n\n[![npm version](https://d25lcipzij17d.cloudfront.net/badge.svg?id=js&type=6&v=1.5.2&x2=0)](https://www.npmjs.com/package/next-routes-extended) [![Coverage Status](https://coveralls.io/repos/github/meabed/next-routes-extended/badge.svg)](https://coveralls.io/github/meabed/next-routes-extended) [![Build Status](https://travis-ci.org/meabed/next-routes-extended.svg?branch=master)](https://travis-ci.org/meabed/next-routes-extended)\n\n#### This is forked from version of the original repo with some enhancements\n\n- Updates to the latest packages ( next.js and path-to-regexp ) \n- Better typescript support\n- More examples and live codesandbox\n- Actively maintained\n\n#### PRs are welcome!\n\nEasy to use universal dynamic routes for [Next.js](https://github.com/zeit/next.js)\n\n- Express-style route and parameters matching\n- Request handler middleware for express & co\n- `Link` and `Router` that generate URLs by route definition\n\n## Examples \n[CodeSandbox Example](https://codesandbox.io/s/nextjs-next-routes-7g4yu?file=/pages/index.tsx)\n\n## How to use\n\nInstall:\n\n```bash\nnpm install next-routes-extended --save\n```\n\nCreate `routes.js` inside your project:\n\n```javascript\nconst routes = require('next-routes-extended')\n\n                                                    // Name   Page      Pattern\nmodule.exports = routes()                           // ----   ----      -----\n.add('about')                                       // about  about     /about\n.add('blog', '/blog/:slug')                         // blog   blog      /blog/:slug\n.add('user', '/user/:id', 'profile')                // user   profile   /user/:id\n.add('/:noname/:lang(en|es)/:wow+', 'complex')      // (none) complex   /:noname/:lang(en|es)/:wow+\n.add({name: 'beta', pattern: '/v3', page: 'v3'})    // beta   v3        /v3\n```\n\nThis file is used both on the server and the client.\n\nAPI:\n\n- `routes.add([name], pattern = /name, page = name)`\n- `routes.add(object)`\n\nArguments:\n\n- `name` - Route name\n- `pattern` - Route pattern (like express, see [path-to-regexp](https://github.com/pillarjs/path-to-regexp))\n- `page` - Page inside `./pages` to be rendered\n\nThe page component receives the matched URL parameters merged into `query`\n\n```javascript\nexport default class Blog extends React.Component {\n  static async getInitialProps ({query}) {\n    // query.slug\n  }\n  render () {\n    // this.props.url.query.slug\n  }\n}\n```\n\n## On the server\n\n```javascript\n// server.js\nconst next = require('next')\nconst routes = require('./routes')\nconst app = next({dev: process.env.NODE_ENV !== 'production'})\nconst handler = routes.getRequestHandler(app)\n\n// With express\nconst express = require('express')\napp.prepare().then(() => {\n  express().use(handler).listen(3000)\n})\n\n// Without express\nconst {createServer} = require('http')\napp.prepare().then(() => {\n  createServer(handler).listen(3000)\n})\n```\n\nOptionally you can pass a custom handler, for example:\n\n```javascript\nconst handler = routes.getRequestHandler(app, ({req, res, route, query}) => {\n  app.render(req, res, route.page, query)\n})\n```\n\nMake sure to use `server.js` in your `package.json` scripts:\n\n```json\n\"scripts\": {\n  \"dev\": \"node server.js\",\n  \"build\": \"next build\",\n  \"start\": \"NODE_ENV=production node server.js\"\n}\n```\n\n## On the client\n\nImport `Link` and `Router` from your `routes.js` file to generate URLs based on route definition:\n\n### `Link` example\n\n```jsx\n// pages/index.js\nimport {Link} from '../routes'\n\nexport default () => (\n  <div>\n    <div>Welcome to Next.js!</div>\n    <Link route='blog' params={{slug: 'hello-world'}}>\n      <a>Hello world</a>\n    </Link>\n    or\n    <Link route='/blog/hello-world'>\n      <a>Hello world</a>\n    </Link>\n  </div>\n)\n```\n\nAPI:\n\n- `<Link route='name'>...</Link>`\n- `<Link route='name' params={params}> ... </Link>`\n- `<Link route='/path/to/match'> ... </Link>`\n\nProps:\n\n- `route` - Route name or URL to match (alias: `to`)\n- `params` - Optional parameters for named routes\n\nIt generates the URLs for `href` and `as` and renders `next/link`. Other props like `prefetch` will work as well.\n\n### `Router` example\n\n```jsx\n// pages/blog.js\nimport React from 'react'\nimport {Router} from '../routes'\n\nexport default class Blog extends React.Component {\n  handleClick () {\n    // With route name and params\n    Router.pushRoute('blog', {slug: 'hello-world'})\n    // With route URL\n    Router.pushRoute('/blog/hello-world')\n  }\n  render () {\n    return (\n      <div>\n        <div>{this.props.url.query.slug}</div>\n        <button onClick={this.handleClick}>Home</button>\n      </div>\n    )\n  }\n}\n```\n\nAPI:\n\n- `Router.pushRoute(route)`\n- `Router.pushRoute(route, params)`\n- `Router.pushRoute(route, params, options)`\n\nArguments:\n\n- `route` - Route name or URL to match\n- `params` - Optional parameters for named routes\n- `options` - Passed to Next.js\n\nThe same works with `.replaceRoute()` and `.prefetchRoute()`\n\nIt generates the URLs and calls `next/router`\n\n---\n\nOptionally you can provide custom `Link` and `Router` objects, for example:\n\n```javascript\nconst routes = module.exports = require('next-routes-extended')({\n  Link: require('./my/link')\n  Router: require('./my/router')\n})\n```\n\n---\n\n##### Related links\n\n- [zeit/next.js](https://github.com/zeit/next.js) - Framework for server-rendered React applications\n- [path-to-regexp](https://github.com/pillarjs/path-to-regexp) - Express-style path to regexp\n","readmeFilename":"README.md"}