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

interchange-router

v0.0.0-19

Published

HTTP router agnostic of server technology

Downloads

6

Readme

WARNING: This library is still in development, and the following documentation is very incomplete.

Interchange Router

interchange-router is an opinionated HTTP router with one main design goal:

To have a separation of route handling and the technology delivering incomming HTTP requests.

This enables you to build your routes and acompanying handlers, while being free to easily switch between different technologies that facilitiate the incomming requests.

This library provides support for routing requests with the node.js http standard library as well as AWS lambdas. You may also extend functionality to others.

Install

npm install --save interchange-router

TypeScript definitions are bundled and do not require a separate install.

Architectural Overview

MatchableRoute

A MatchableRoute defines a URL method, path, and path parameters. It can then determine if a given HTTP request matches its given configuration.

Handler

A Handler contains the logic to process any input and generate a response.

Router

A Router has Handlers attached to it. HTTP requests are passed to it to be forwarded onto the first matching Handler.

transformers

Transformers such as HttpTransformer and LambdaTransformer are initialised with a router. Transformers provide an implementation to transform a HTTP request from a given technology to one that the Router accepts.

Usage

Create a basic handler returning a statusCode and JSON body.

# getUsers.ts

import { Handler, MatchableRoute } from 'interchange-router';

const getUsersRoute = new MatchableRoute('GET', '/users');

export const getUsersHandler = new Handler(getUsersRoute, (request) => {
    return {
        statusCode: 200,
        body: {
            users: [],
        },
    };
});
# createProduct.ts

import { Handler, MatchableRoute } from 'interchange-router';

const createUserProductRoute = new MatchableRoute('POST', '/users/:userId/products', {
    userId: value => value;
});

export const createProductHandler = new Handler(createUserProductRoute, async (request, { userId }) => {
    return {
        statusCode: 200,
        body: {
            success: true,
        },
    };
});
# router.ts

import { Router } from 'interchange-router';
import { createProductHandler } from './createProduct';
import { getUsersHandler } from './getUsers';

export const router = new Router();

router.attach(createUserProductRoute);
router.attach(getUsersHandler);
import * as http from 'http';
import { HttpTransformer } from 'interchange-router';
import { router } from './router';

const httpTransformer = new HttpTransformer(router);
const server = http.createServer(httpTransformer.requestListener);

server.listen(80);
import { LambdaTransformer } from 'interchange-router';
import { router } from './router';

const lambdaTransformer = new LambdaTransformer(router);

export const handler = lambdaTransformer.asyncHandler;

// or:
// export const handler = lambdaTransformer.handler;