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

zeit-router

v0.0.2

Published

A simple router for zeit.co integrations

Downloads

3

Readme

zeit-integration-router

Awesome npm version

What is this?

This is a small router concept for zeit integrations. It supports the basic functionality of a router and some extras like parameters.

DEMO: https://zeit.co/integrations/integration-router Example: go to src/example

How to?

The only package you need is zeit-router. Install and import it at the top of your entrypoint.

npm i zeit-router
# or
yarn add zeit-router

Create an instance:

import { ZeitRouter } from 'zeit-router';

// with optinal start route (default: '/')
const app = new ZeitRouter('/');

Note: The current route is saved to currentPath inside metadata, so do not overwrite it.

libs/router.ts returns a class. The class has 2 Methods.

add(path, cb, silent)

This method adds a route. You can define the path like you do in express or other frameworks. The callback function gives you handler(zeitClient, payload), router and params. You have to return a htm method. silent(default: false): If this parameter is set to true, this page will not be rendered again after a reload and the previous page will be displayed instead. This is a useful flag for confirmation fields.

app.add('/:id', ({ handler, router, params }) => {
  return htm`<Box>
    <B>${params.id}</B>
  </Box>`;
});

uiHook(handler, router)

This methods wraps withUiHook and adds an additional router-object to the callback function.

export default app.uiHook(async (handler: HandlerOptions, router: Router) => {
  return htm`<Page>${router.currentPath}</Page>`;
});

router-object

async navigate(path)

  • Navigate through a specific route. Works only inside the app.uiHook.

currentRoute

  • Shows the current route. Returns a promise.

previousRoute

  • Shows the previous route. Returns a promise.

renderRoute(path)

  • Renders a specific route.

Routing

All actions which start with a /, will automatically navigate trough a matching route. You can also navigate with the router.navigate method.

Full Example:

import { ZeitRouter } from 'zeit-router';
import { HandlerOptions, Router } from '../types';

const app = new ZeitRouter('/');

app.add('/', () => {
  return htm`<Box>
    <B>home</B>
  </Box>`;
});

app.add('/parameter/:id', ({ params }) => {
  return htm`<Box>
    <B>${params.id}</B>
  </Box>`;
});

const uiHook = app.uiHook(async (handler: HandlerOptions, router: Router) => {
  const {
    payload: { action }
  } = handler;

  if (action === 'home') {
    await router.navigate('/');
  }

  return htm`<Page>
    <Button action="home" small highlight>home</Button>
    <Button action="/parameter/123" small highlight>parameter</Button>
    <Button action="fail" small warning>fail</Button>

    ${await router.currentRoute}

    Your are here: <B>${router.currentPath}</B>
  </Page>`;
});

Development

  1. clone this repository
  2. install the now cli
  3. run following commands:
yarn install && yarn now:dev

or

npm install && npm run now:dev
  1. The server starts on port 5005

More information

You can also use yarn dev or npm run dev. This command will start a dev server which supports autoreloading on file change. (You need to install nodemon)

Used by:

Contribute

Feel free to add PRs or open Issues (: