
Product
Introducing Socket Fix for Safe, Automated Dependency Upgrades
Automatically fix and test dependency updates with socket fixβa new CLI tool that turns CVE alerts into safe, automated upgrades.
nuxt-typed-router
Advanced tools
Provide autocompletion for pages route names generated by Nuxt router
Provide a safe typed router to nuxt with auto-generated typed definitions for route names
Nuxt is great because it generate the router based on your pages directory. It generates all the pages name and it abstract a lot of boilerplate.
Problem: If you want a type-safe routing flow, the current model can be hard to maintain if you modify the page file name and is error prone in big projects.
Solution: Thanks to Nuxt powerful hook system, this module reads all your routes and generate typings and enums accordingly
yarn add nuxt-typed-router
#or
npm install nuxt-typed-router
First, register the module in the nuxt.config.[js|ts]
const config = {
...,
modules: [
'nuxt-typed-router',
]
}
Or
const config = {
...,
modules: [
['nuxt-typed-router', {
// options
}],
]
}
Options:
type Options = {
// Path to where you cant the file to be saved (ex: "./src/models/__routes.ts")
filePath?: string;
// Name of the routesNames object (ex: "routesTree")
// Default: "routerPagesNames"
routesObjectName?: string;
};
Nuxt-typed-router provides two ways to have name-based typed routing
$typedRouter
(Default)A global $typedRouter
method is added to the Nuxt context and is accessible in your components and context. It's an alias of Vue $router
, but the typings are modified so the name
options is typed with the routes names generated from the pages directory
$router
and $route
?That was the idea when I builded this module initially, but I got confronted with Typescript limitations for modifying already defined third-party lib typings.
If I wanted to modify vue-router types, i could have just written this:
declare module 'vue-router/types' {
export interface Location {
name: 'login' | 'home';
}
}
Unfortunately that's not possible, Typescript throws this errors:
Subsequent property declarations must have the same type. Property 'name' must be of type 'string', but here has type '"login" | "home"
All declarations of 'name' must have identical modifiers
So the only way for now is to have an alternative $typedRouter
, or a global enum-like object.
For your IDE to augment the Vue types, you need to explicitly import the module in your Nuxt config
// nuxt.config.js
import 'nuxt-typed-router';
The usage is exactly the same as $router
Given this structure
βββ pages
βββ index
βββ content.vue
βββ index.vue
βββ communication.vue
βββ statistics.vue
βββ users.vue
βββ index.vue
βββ forgotpassword.vue
βββ reset-password.vue
β βββ login.vue
βββ ...
This module also provide $typedRoute
, wich is an alias to Vue $route
, but with typed name property
The generated enum is located in the node_modules
folder.
Because of Intellisense limitations, the types from node_modules are not lived updated, so you need to either reload the window or restart Intellisense when you add a Page/ modify the name of a Page for it to take into account the pages names freshly generated
routerPagesNames
global objectThe module will create a file with the global object of the route names inside.
You have to specify the path of the generated file in your configuration
// nuxt.config.js
const config = {
typedRouter: {
filePath: './models/__routes.js', // or .ts,
},
};
// Or
const config = {
modules: [
[
'nuxt-typed-router',
{
filePath: './models/__routes.js', // or .ts,
},
],
],
};
Given this structure
βββ pages
βββ index
βββ content.vue
βββ index.vue
βββ communication.vue
βββ statistics.vue
βββ users.vue
βββ index.vue
βββ forgotpassword.vue
βββ reset-password.vue
β βββ login.vue
βββ ...
The generated file will look like this
export const routerPagesNames = {
forgotpassword: 'forgotpassword',
login: 'login',
resetPassword: 'reset-password',
index: {
index: 'index',
communication: 'index-communication',
content: 'index-content',
statistics: 'index-statistics',
users: 'index-users',
},
};
You can just import it now
import { routerPagesNames } from '~/models/__routes.js';
export default {
mounted() {
this.$router.push({ name: routerPagesNames.index.content });
},
};
yarn
or npm install
FAQs
Provide autocompletion for routes paths, names and params in Nuxt apps
The npm package nuxt-typed-router receives a total of 6,796 weekly downloads. As such, nuxt-typed-router popularity was classified as popular.
We found that nuxt-typed-router demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Automatically fix and test dependency updates with socket fixβa new CLI tool that turns CVE alerts into safe, automated upgrades.
Security News
CISA denies CVE funding issues amid backlash over a new CVE foundation formed by board members, raising concerns about transparency and program governance.
Product
Weβre excited to announce a powerful new capability in Socket: historical data and enhanced analytics.