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

@wreckingball/cacher

v0.1.27

Published

Cacher is an ExpressJS middleware which caches responses

Downloads

15

Readme

cacher

cacher is an ExpressJS middleware written in TypeScript which caches responses.

Install

$ npm i --save @wreckingball/[email protected]

Usage

See Config in /src/index.ts also src/example.ts. Run $ make dev to run the example.

Features

  • Respect standard Cache-Control headers:
    • no-cache: In GET requests, bypass cache, and returns live response
    • no-store: In GET requests, will not cache the response
    • max-age:
      • In GET requests, communicates the TTL
      • In GET requests, allows to set per-request TTL
  • Extend Cache-Control adding delete-cache which invalidates the cache, if any, for the given request
  • Respect standard HTTP ETag
  • Allows to specify a matcher:
    • Can match any combination of any request component: method || path || query params || header || everything (*)
  • Future proof, and extensible. It allows to use any storage. Storage can be changed without changing the implementation. Current storage implemented: Redis
    • Injects storage in the request chain making it easy to use, and store data
    • Automagically cache matched responses
    • Automagically delete cache for non-GET operations (which changes data), unless Cache-Control: persist-cache is specified, or feature is disabled.
  • Cache warmer:
    • Every N ms
    • One time only
    • Configurable after-start-up-delay
    • Batch request parallelize request calls speeding up the warming process
    • Configurable delay between batch calls to protect the storage from overload
  • Administrative API:
    • Delete cache by key
    • Delete whole cache
    • Introspect cache by key

How it works

A picture worth thousand words.

mocker

Development

  1. Clone repository
  2. Install dependencies
    1. Run $ npm i --save @wreckingball/cacher
  3. Make changes
  4. Validate your changes with tests
    1. Run $ make ci
  5. Open a pull request

CI/CD

  1. Code is merged into main
  2. package.json is automagically bumped
  3. Code is automagically tagged
  4. Release is automagically created
  5. Code is automagically pushed to NPM private repository

It's all magic! :)

Roadmap

  • Add meta information about a cache entry, so it doesn't get warmed many times
  • Add urlsFromFile option to config.warmer to support:
  • APIFilepath: Swagger API filepath
  • HARFilepath: Network filepath