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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@js-injection/service-provider

v1.1.1

Published

A lightweight, type-safe dependency injection container

Readme

@js-injection/service-provider

Pipeline status NPM version NPM downloads License

BuyMeACoffee

A lightweight, fully type-safe Dependency Injection (DI) container for TypeScript. Designed for reliability, developer experience, and minification safety.

Table of Contents

Why this library?

  • Strictly Typed: Full Intellisense and compile-time validation. If your code compiles, your dependencies are correctly mapped.
  • Zero Runtime Dependencies: Ultra-lean with no external bloat.
  • Minification Proof: Built-in stable identity system ensures resolution works even when class names are mangled.
  • Modern Features: Built-in support for async factories, multiple lifetimes, circular dependency detection, and scoped resolution.
  • Flexible resolution: Resolve by Class reference, string keys, or complex URI-style patterns.

Installation

npm install @js-injection/service-provider

Quick Start

1. Define your services

class Logger {
  log(msg: string) { console.log(msg); }
}

class UserService {
  constructor(private logger: Logger) {}
  greet() { this.logger.log("Hello!"); }
}

2. Create a Type Map

The TypeMap is your central contract. It maps keys to their resolved instance types.

interface MyMap {
  Logger: Logger;
  UserService: UserService;
}

3. Register and Resolve

import { ServiceCollection } from '@js-injection/service-provider';

const di = new ServiceCollection<MyMap>()
  .addSingletonClass(Logger)
  .addSingletonClass(UserService)
  .build();

const userService = di.getService(UserService);
userService.greet();

Core Features

Multiple Lifetimes

  • Singleton: Created once and shared across the entire application.
  • Scoped: Created once per scope (e.g., per HTTP request).

Registration API

Support for various registration methods to handle any dependency graph:

  • Class Injection: addSingletonClass(Type, ...args)
    • args can be container keys, other classes, or raw values.
    • Example: .addSingletonClass(MyService, "static-api-key", OtherService)
  • Factory Functions: addSingletonFactory(key, (c) => new Service(c.Other))
  • Plain Functions: addSingletonFunc(key, myFunc, ...args)
  • Static Values: addSingletonValue(key, { config: true })
  • Service Groups: addSingletonGroup(key, ...types) (Multiple implementations for one key)

Async Support

Native support for asynchronous factories and functions.

.addSingletonFactory('db', async (c) => {
  const db = new Database();
  await db.connect();
  return db;
})

Resource Management

Support for IDisposable and IAsyncDisposable. Scopes track their own services and ensure they are cleaned up in reverse order of creation.

const scope = di.createAsyncScope();
// ... use services
await scope.disposeAsync();

Keyed Resolution & Routing

Resolve services or execute logic based on dynamic strings or URI-like patterns.

.map("GET:/users/{id:number}", (c, { id }) => c.UserService.findById(id))

const user = di.getKeyed("GET:/users/123");

Documentation

For a deep dive into all registration patterns and advanced features, see the Cheatsheet.

Development

  • Build: npm run bundle
  • Test: npm test
  • Smoke Tests: npm run test:smoke (Runs end-to-end scenarios against minified code)

License

Licensed under ISC.

Copyright © 2026+ contributors