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

wyr-js

v0.1.0

Published

**Pronounced**: *wire* **Wyr** is a zero-crap, zero-dependency, lightweight, and typesafe dependency injection framework for TypeScript. It’s designed to be simple yet powerful, with full support for asynchronous bindings.

Downloads

4

Readme

Wyr

Pronounced: wire
Wyr is a zero-crap, zero-dependency, lightweight, and typesafe dependency injection framework for TypeScript. It’s designed to be simple yet powerful, with full support for asynchronous bindings.

Features

  • Typesafe: Enjoy TypeScript’s type safety when defining and retrieving dependencies.
  • Async Bindings: Seamlessly handle asynchronous creation of dependencies.

Installation

To install Wyr, run:

npm install --save wyr

Basic Usage

Creating a Module and Binding Dependencies

Wyr uses modules to define bindings. Each binding has a unique key and a creator that builds the dependency.

import Wyr, { BindingKey } from 'wyr';

// Create a new module
const module = Wyr.module();

// Define binding keys for the dependencies
const userRepoKey: BindingKey<UserRepo> = Symbol('UserRepo');
const userEventEmitterKey: BindingKey<UserEventEmitter> = Symbol('UserEventEmitter');
const userServiceKey: BindingKey<UserService> = Symbol('UserService');

// Bind the UserEventEmitter
module.bind(userEventEmitterKey).to(
  Wyr.creator()(async () => {
    return new UserEventEmitter();
  })
);

// Bind the UserRepo
module.bind(userRepoKey).to(
  Wyr.creator()(async (userEventEmitter) => {
    return new UserRepo(userEventEmitter);
  })
);

// Bind the  UserService that depends on UserRepo and UserEventEmitter
module.bind(userServiceKey).to(
  Wyr.creator(userRepoKey, userEventEmitterKey)(async (userRepo, userEventEmitter) => {
    return new UserService(userRepo, userEventEmitter);
  })
);

// Create a container from the module
const container = module.asContainer();

// Retrieve multiple dependencies, including the UserService and UserEventEmitter
const [userService, userEventEmitter] = await container.get(userServiceKey, userEventEmitterKey);

// Use the UserService and UserEventEmitter
userService.performAction();

Explanation:

Binding Keys: userRepoKey, loggerKey, and userServiceKey uniquely identify each service. Creators: The UserService is created with its dependencies (UserRepo and UserEventEmitter) using the Wyr.creator(userRepoKey, userEventEmitterKey) function. Retrieving Dependencies: Multiple keys can be passed to container.get(...) to retrieve a tuple of dependencies, in this case UserService and UserEventEmitter.

Merging Modules

Sometimes it comes in handy to group multiple bindings into a module, and create a container out of multiple modules. Modules can be merged, allowing you to compose dependencies from different parts of your application.

const anotherModule = Wyr.module();
// Merge modules together
module.mergeWith(anotherModule);

and a container can be created out of multiple modules like this:

const container = Wyr.container(module1,module2,module3)

License

Wyr is licensed under the MIT License.