├── .gitignore ├── .npmrc ├── .prettierignore ├── .travis.yml ├── changelog.md ├── index.js ├── package.json └── readme.md /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | package-lock.json 3 | npm-debug.log 4 | .DS_Store -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | package-lock=false 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | package.json 2 | package-lock.json 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - node 4 | - '6' 5 | notifications: 6 | email: false 7 | -------------------------------------------------------------------------------- /changelog.md: -------------------------------------------------------------------------------- 1 | # next-router-events changelog 2 | 3 | ## 2.1.0 4 | 5 | - Updated dependencies. 6 | - Updated Next.js peer dependency range to support v6. 7 | - New ESLint config with [`eslint-config-env`](https://npm.im/eslint-config-env). 8 | - Smarter package scripts. 9 | - Compact package `repository` field. 10 | - Setup Travis CI. 11 | - Readme tweaks, with some badges removed and a new Travis CI status badge added. 12 | 13 | ## 2.0.0 14 | 15 | - Updated dependencies and peer dependencies. 16 | - No longer using Babel. 17 | - Simplified project structure with `index.js` at the project root, allowing removal of the `package.json` `main` field. 18 | - More efficient logic. 19 | - Removed support for the `onAppUpdated` hook deprecated in [`next@5.0.1-canary.7`](https://github.com/zeit/next.js/releases/tag/5.0.1-canary.7), fixing [#1](https://github.com/jaydenseric/next-router-events/issues/1). 20 | - Prettier markdown. 21 | 22 | ## 1.0.1 23 | 24 | - Added a changelog. 25 | - Fixed the `lib` directory not being Git ignored. 26 | 27 | ## 1.0.0 28 | 29 | - Initial release. 30 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var emitter = require('tiny-emitter/instance') 2 | var Router = require('next/router').default 3 | 4 | var routerEvents = [ 5 | 'routeChangeStart', 6 | 'routeChangeComplete', 7 | 'routeChangeError', 8 | 'beforeHistoryChange' 9 | ] 10 | 11 | routerEvents.forEach(function(event) { 12 | Router['on' + event[0].toUpperCase() + event.slice(1)] = function() { 13 | emitter.emit.bind(emitter, event).apply(null, arguments) 14 | } 15 | }) 16 | 17 | module.exports = emitter 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "next-router-events", 3 | "version": "2.1.0", 4 | "description": "A more powerful Next.js router events API.", 5 | "license": "MIT", 6 | "author": { 7 | "name": "Jayden Seric", 8 | "email": "me@jaydenseric.com", 9 | "url": "http://jaydenseric.com" 10 | }, 11 | "repository": "github:jaydenseric/next-router-events", 12 | "homepage": "https://github.com/jaydenseric/next-router-events#readme", 13 | "bugs": "https://github.com/jaydenseric/next-router-events/issues", 14 | "keywords": [ 15 | "nextjs", 16 | "next", 17 | "router", 18 | "events" 19 | ], 20 | "files": [ 21 | "index.js" 22 | ], 23 | "engines": { 24 | "node": ">=6" 25 | }, 26 | "browserslist": ">1%", 27 | "peerDependencies": { 28 | "next": "5.0.1-canary.7 - 6" 29 | }, 30 | "dependencies": { 31 | "tiny-emitter": "^2.0.2" 32 | }, 33 | "devDependencies": { 34 | "eslint": "^5.0.1", 35 | "eslint-config-env": "^0.4.0", 36 | "eslint-config-prettier": "^2.9.0", 37 | "eslint-plugin-compat": "^2.4.0", 38 | "eslint-plugin-import": "^2.13.0", 39 | "eslint-plugin-node": "^6.0.1", 40 | "eslint-plugin-prettier": "^2.6.1", 41 | "husky": "^0.14.3", 42 | "lint-staged": "^7.2.0", 43 | "next": "^6.0.3", 44 | "npm-run-all": "^4.1.3", 45 | "prettier": "^1.13.6" 46 | }, 47 | "scripts": { 48 | "test": "run-s test:*", 49 | "test:eslint": "eslint .", 50 | "test:prettier": "prettier '**/*.{json,md}' -l", 51 | "prepublishOnly": "npm test", 52 | "precommit": "lint-staged" 53 | }, 54 | "lint-staged": { 55 | "*.js": "eslint", 56 | "*.md": "prettier -l" 57 | }, 58 | "eslintConfig": { 59 | "extends": [ 60 | "env" 61 | ] 62 | }, 63 | "prettier": { 64 | "proseWrap": "never", 65 | "singleQuote": true, 66 | "semi": false 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # next-router-events 2 | 3 | [![Build status](https://travis-ci.org/jaydenseric/next-router-events.svg)](https://travis-ci.org/jaydenseric/next-router-events) [![npm version](https://img.shields.io/npm/v/next-router-events.svg)](https://npm.im/next-router-events) 4 | 5 | A more powerful Next.js router events API. The standard API can only handle one listener per router event (see [zeit/next.js#2033](https://github.com/zeit/next.js/issues/2033)). 6 | 7 | ## Setup 8 | 9 | To install [`next-router-events`](https://npm.im/next-router-events) from [npm](https://npmjs.com) run: 10 | 11 | ``` 12 | npm install next-router-events 13 | ``` 14 | 15 | ## Usage 16 | 17 | To use router events: 18 | 19 | ```js 20 | import routerEvents from 'next-router-events' 21 | 22 | const logUrl = url => console.log(url) 23 | const alertUrl = url => alert(url) 24 | 25 | routerEvents.on('routeChangeComplete', logUrl) 26 | routerEvents.once('routeChangeComplete', alertUrl) 27 | routerEvents.off('routeChangeComplete', logUrl) 28 | ``` 29 | 30 | See `next` [router events](https://github.com/zeit/next.js#router-events) and `tiny-emitter` [instance methods](https://github.com/scottcorgan/tiny-emitter#instance-methods). 31 | --------------------------------------------------------------------------------