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

@mrpotatoes/express-autoloader

v1.1.0

Published

A simple express autoloader, ya doink

Downloads

3

Readme

Why

  1. I don't feel that adding express routes manually is a good use of my time.
  2. I want to spend time figuring out & debugging why a path isn't being added.
  3. Having a common interface makes it easy to create
  4. The name of the path function isn't important, it's the path
  5. The Route should be self sufficient and should declare everything it needs itself.
  6. I like clean code and this will make things far cleaner.
  7. I don't like try/catch code in my handlers.
    • That should be handled by some wrapping function and I declare my happy path and unhappy path functions
  8. Dependencies shouldn't be hard to handle so I'm trying to make that easier.

Use

Check out ./example to see more examples

Simplest setup

Your app.js

try {
  const paths = routesLoader(app, path.join(__dirname, '/some/dir'), true)

  // Do this if you wanna see the output of all the paths.
  console.log()
  console.table(paths)
} catch (error) {
  console.log(error.toString())
}

Example test.route.ts. This is the minimal configuration needded to get it to be picked up.

Notes:

  • Your file must include the route.ts at the end. That's how the app finds the routes.
  • You can have multiple routes exported in a single file.
  • The error handler has the same signature as run
  • You needn't but it is beneficial to define your dependencies in Route<T>
export const cart = (): Route<object> => ({
  method: METHOD.GET,
  path: 'some/uri/:id',

  run: async (deps: Dependencies): Promise<JSONResponse> => {
    const { req } = deps // By default Express' req & res are added to deps.

    if (parseInt(req.params.id) == 1) {
      throw new Error('You can use the default error handler or make your own')
    }

    // Always return your JSON, do not need to use res.send
    return {
      origUrl: req.originalUrl
    }
  },
})

A note on Dependencies

When determining your type for dependencies make sure that you extend the main one. req, res and logger are all required and all routes will expect them. After that feel free to add your own in.


API

Eventually

Examples

Single line installer:

git clone https://github.com/mrpotatoes/express-autoloader.git; npm i; npm run example

To test it out run the curl commands that the example outputs and change any :vars variables that are needed

Currently broken things

  • I cannot use TS Paths in the config. What's up with that?
  • Add in the vscode debugging stuff to make life easier.