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 🙏

© 2025 – Pkg Stats / Ryan Hefner

skeidjs

v1.8.0

Published

A lightweight rest service framework

Readme

skeiðjs

About

skeidjs is a lightweight typescript based framework for creating restful apis.
The objective is to have a small driverless and expressive application that can run.
It uses ideas of declarative programming and concepts you may know from angular2. You can declare a @Application class (comparable to NgModules) and inject there the components with the endpoints and other dependencies and middlewares.
The main part is implemented via the typescript decorators (unfortunately this is still declared as an experimental feature and may change in future. Currently its working with typescript 2.8.1. If the new ECMA-script version will also support decorators it could also work with plain js)

Functionality notes

See full doc at

File handling

Because the endpoints are called later on from the router, handling the path directly in the endpoint can cause some problems (in general you would receive a HTTP 500 error code), because the path would'nt work. Use a static service class therefore to keep the file path clean.
You can use the binary method of the response to send the whole file binary at once or use the stream method for streaming data. Whatever: please keep in mind of setting the correct headers for the response

response.writeHead(200, {
    'Content-Type': 'audio/mpeg',
    'Content-Length': fileSize,
    'Content-Disposition': 'attachment; filename=your_file_name'
});

Middleware evaluation

The evaluation of middleware function goes as it follows:

  • First: the application scoped middleware
  • Second: the module scoped middleware
  • Third: the component scoped middleware
  • Fourth: the endpoint scoped middleware
  • The middleware follows the order, given in the array.
  • The last chain is the endpoint function
  • An endpoint/middleware function has three parameters (request, response, next?);
  • The next() function will break the current execution of the current function and start the next one

Routes

  • The basic route scheme is: /$applicationRoute/$moduleRoute/$componentRoute/$endpointRoute
  • you can define a param in a route like /:foo
    and access it via request.params.foo

Route Typing

you can directly define a typed route param with the pattern :param#type
/:id#number an non digit route would return a 404. The available types are:

  • number
  • hex
  • alpha (=> [a-zA-Z])

Decorator driven

Everything is decorator driven. The framework is not supposed to run an application like the "express.use().listen(x)". You decorate the main component with @Application and execute the driver without setting the app up manually. That also means its not supposed to be compatible with vanilla node-js, as long as ecma script doesnt provide decorators.
You are also able to gather components into modules and import the modules into your app, to have a nice clean structural approach.

Note!

Set in your tsconfig.json

{  
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
    
}

Visit the playground.ts to see a working example

playground.ts