npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

typed-named-routes

v0.2.9

Published

## What is it?

Downloads

1,349

Readme

Typed Named Routes

What is it?

This is a lightweight helper for converting typed route definitions and templates into a rich, typed API for using your routes.

It's largely inspired by this post, but provides a typed API for working with your routes. It is a lighter, less holistic solution than the one proposed in the post, and is designed to play nicely with the more dynamic nature of react-router 4+.

How do I use it?

Install as you would expect - npm i typed-named-routes --save or yarn add typed-named-routes.

Import the package - import { buildRoutesApi } from 'typed-named-routes or const { buildRoutesApi } = require('typed-named-routes').

Create your route definitions -

const routeDefinitions = {
  HOME: () => '/',
  ABOUT: () => '/about',
  PROFILE: (params: { id: string }) => `/profile/:id`,
};

Routes are defined using arrow functions. There are two parts to the route definition - the params signature, and the template. The signature defines the parameters required in order to build the route, and the template is used to build the route.

In the case of ABOUT above - no parameters are required, so the input for the arrow function is left empty, the template returns the route's path.

For the PROFILE definition a parameter id is required in order to build the route. This is typed (params: { id: string }) and will be used to generate the signature for the API for that route. The template for PROFILE provides the placeholders for each of the params.

Create the route API -

const routeAPI = buildRoutesApi(routeDefinitions);

Use the routes API -

import { Router, Switch, Route, Link } from 'react-router';

// ...

const App = () => (
  <>
    <nav>
      <Link to={routeAPI.HOME.build()}>Home</Link>
      <Link to={routeAPI.ABOUT.build()}>About</Link>
      <Link to={routeAPI.PROFILE.build({id: "123"})}>Your profile</Link>
    </nav>
    <Router>
      <Switch>
        <Route path={routeAPI.HOME.template} exact component={Home} />
        <Route path={routeAPI.ABOUT.template} component={About} />
        <Route path={routeAPI.PROFILE.template} component={Profile} />
      </Switch>
    </Router>
  </>
);

The template property will give you back the template that you provided in the route definition, so it can be used as the path for react-router <Route />s.

The build property is a method that will require the params defined in the route definition. If you are using vscode you should get intellisense around the required parameters for a given route and if you're using TypeScript it should warn you if you do not provide the correct params.

Image depicting intellisense at work

Change log

TODO

  • Document optional parameters (for now see routeHelpers.spec.ts for examples)