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

trafficlight

v5.0.1

Published

Flexible NodeJS Routing Decorators for API Routing

Downloads

250

Readme

Trafficlight 🚦

Codacy Badge Codacy Badge Build Status npm version

A flexible NodeJS Routing Decorators for API Routing. Features include:

  • Built for KOA2
  • Bring-your-own router
  • Bring-your-own body parser
  • TypeScript and ES7 Support
  • DI compatible

Usage

Building

npm run build

Install

npm i trafficlight --S

Note: You must have reflect-metadata installed as a peer dependency

Setup KOA

import 'reflect-metadata'; /* Must be singleton */
import * as Koa from 'koa';
import * as Router from 'koa-router';
import * as body from 'koa-better-body';

import { ProfileController } from './controllers';
import { bindRoutes } from 'trafficlight';

export function setupKoa() {
  const app = new Koa();

  app.use(body());
  buildRoutes(app);
  app.listen(3000);

  return app;
}

function buildRoutes(app) {
  const routerRoutes = new Router();

  // any router can be used, we support koa-router out of the box
  bindRoutes(routerRoutes, [ProfileController]);

  // if you are using with some sort of DI system you can pass
  // a third parameter callback to get the instance vs new ctrl.
  // bindRoutes(routerRoutes, [ProfileController], (ctrl) => injector.get(ctrl));

  app.use(routerRoutes.routes());
  app.use(routerRoutes.allowedMethods());
}

Decorate the controller

import { Controller, Get, Use, Param, Body, Delete, Put, Post, QueryParam } from 'trafficlight';

@Controller('/profile')
@Use(someMiddleware)
export class ProfileController {

  @Get()
  getAll(@QueryParam('filter') filter) {
    // return []
  }

  @Get('/:id')
  @Use(someMiddleware)
  getOne(@Param('id') id) {
    // return {}
  }

  @Post()
  create(@Body() body) {
    // return {}
  }

  @Post('/:id/upload')
  upload(@Param('id') id, @File() file) {
    // return {}
  }

  @Put('/:id')
  update(@Param('id') id, @Body() body) {
    // return {}
  }

  @Delete('/:id')
  destroy(@Param('id') id) {
    // return success
  }

}

API

  • bindRoutes(routerTable, controllers, getter) - Binds the controller to the route table.
  • Controller(url?) - Top level controller decorator. Optional root url
  • Route(method, url?) - Abstract method decorator, accepts method type, url
  • Get(url?) - Http GET method, accepts URL
  • Post(url?) - Http Post method, accepts URL
  • Put(url?) - Http Put method, accepts URL
  • Delete(url?) - Http Delete method, accepts URL
  • Params() - Returns all the parameters passed in the request
  • Param(val) - Returns a specific parameter passed in the request
  • File() - Returns a single file in the request body
  • Files() - Returns all files in the request body
  • QueryParams() - Returns all the query parameters passed in the request url as an object
  • QueryParam(val) - Returns a specific query parameter passed in the request url
  • Ctx() - Returns the KOA context object
  • Req() - Returns the Node request object
  • Request() - Returns the KOA request object
  • Res() - Returns the Node response object
  • Response() - Returns the KOA response object
  • Body() - Returns the request body object
  • Fields() - Returns the request fields object
  • Use() - Middleware decorator for class and functions

Special return types

Since typescript doesn't allow decorators on return types. Certain type has been added to indicate and allow for file download.

  • FileDownload: {fileName: string, mimeType: string, stream: ReadStream}

Inspiration

Credits

trafficlight is a Swimlane open-source project; we believe in giving back to the open-source community by sharing some of the projects we build for our application. Swimlane is an automated cyber security operations and incident response platform that enables cyber security teams to leverage threat intelligence, speed up incident response and automate security operations.