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

@dtty/simpldi

v0.2.1

Published

Simple and compact Dependency Injection library for TS

Readme

@dtty/simpldi

A simple dependency injection library for typescript projects.

Installation

This library requires the reflect-metadata package to function properly. Add the line import 'reflect-metadata'; to the top of you entry file (e.g. index.js).

npm i @dtty/simpldi reflect-metadata

Usage

Unlike many other dependency injection libraries for Typescript projects, @dtty/simpldi requires developers to manage the container lifecycle themselvs. While some may consider this a burden, it ultimately allows for far more flexible configurations and a simpler API to engage with.

// Basic usage

const rootContainer = new Container();

// Add a simple provider
rootContainer.addProvider(simpleToken, SimpleProviderClass);

// Add a transient provider
rootContainer.addProvider(transientToken, TransientProviderClass, {
  mode: ProviderMode.TRANSIENT,
});

// Fetch a provider
const instance = await rootContainer.resolveProvider(simpleToken);

Tokens

Tokens in @dtty/simpldi are used in place of magic strings for dependency resolution. This enables stricter type checking when manually resolving dependencies.

// Create a token
const token = new Token<SimpleProviderClass>();

// Optionall, add a name to the token
const tokenWithName = new Token<SimpleProviderClass>("My Name");

Modes

By default, all providers in the container are registered as singletons. This behavior can be optionally changed by setting mode: ProviderMode.TRANSIENT when registering a provider. Transient providers will be re-initialized each time they are resolved, ensuring all downstream providers recieve a fresh instance.

Nested Containers

Providers are always scoped to their container but can depend on providers from a parent container. Creating a child container allows developers to scope specific providers to the lifetime of the container. for example the use of a child container for request-specific providers in a web server.

// Start with a root
const rootContainer = new Container();

// And spawn a child
const childContainer = rootContainer.createChildContainer();

Lifecycle

By default, all providers a lazy loaded into the container, meaning that provider instances are only created when the are needed. Lazy loading enables a faster application start time and ensures that only the relevant classes are created, cutting down on overhead.

Below are ways to hook into the provider lifecycle.

onProviderInit

By implementing the IOnProviderInit interface, a provider adds a lifecycle method that is called whenever the provider instance is resolved in the container. This can be useful for bootstrapping common providers like database connections that require an asynchronous interaction after creation.