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

blackbox-ioc

v1.0.2

Published

A basic Inversion Of Control container for decorator based wiring of class instances and services.

Downloads

5

Readme

blackbox-ioc

Version Version License

A basic Inversion Of Control container for decorator based wiring of class instances and services.

Blackbox IOC offers control of two distinct types of entity: Instances and Services.

Instances are associated with a name and can be autowired to a class' property.

Services are methods that provide a service and can be associated with a name and grouped by a tag. A service object can be created for all services with a given tag and then autowired to a class' property.

Table of Contents

Install

This package requires npm. You can install it by running:

npm i blackbox-ioc

Usage

Create a named instance of a class:

@named('calculator')
class Calculator {
  ...
}

An instance of class Calculator will be created and associated with the name calculator. The constructor must not take any parameters.

Autowire a class property to a named instance:

class Wrapper {
  @autowired('calculator')
  calc: Calcuator
}

Instances of Wrapper will automatically have the named instance of Calculator assigned to the calc property.

Create an instance using a factory method:

class Factories {
  @factory('logger')
  createLogger():Logger {
    ...
  }
}

The createLogger method will be called in order to create a new instance of the Logger class. The new instance will be associated with the name logger.

Identify a class as providing services:

@serviceClass('weather')
class WeatherService {
  getTemperature():number {
    ...
  }
  getHumidity():number {
    ...
  }
}

All methods in the class will become services grouped by the weather tag. By default, services are named according to the method names: i.e. getTemperature and getHumidity.

Create a service by name:

class WeatherService {
  @service('temp')
  getTemperature():number {
    ...
  }
}

The getTemperature method will provide a service named temp and will belong to the default tag.

Create a service by name and grouped with a tag:

class WeatherService {
  @taggedService('meteorology', 'temp')
  getTemperature():number {
    ...
  }
}

The getTemperature method will provide a service named temp and be grouped with any other services tagged with meteorology.

Autowire a class property to a service object:

class Wrapper {
  @autowiredService('weather')
  weatherService:any
}

Instances of Wrapper will automatically have a service object created and assigned to the weatherService property. The service object will include a method for each named service with the weather tag.

API

@named(name:string) Class decorator. Creates an instance of the class and associated it with name.

@factory(name:string) Method decorator. Calls the method and associates the returned instance with name.

@autowired(name:string) Property decorator. Assigns the instance named name to the property.

@serviceClass(tag:string) Class decorator. Creates an instance of the class and associates it with tag as its name. All of the class's methods will be marked as services tagged with tag and named name.

@service(name:string) Method decorator. The method will be marked as a service tagged with default and named name.

@taggedService(tag:string, name:string) Method decorator. The method will be marked as a service tagged with tag and named name.

@autowiredService(tag:string) Property decorator. The property will be assigned a new service object including a method for each service tagged with tag.

Maintainers

@ellipsistechnology

Contributing

PRs accepted.

Small note: If editing the README, please conform to the standard-readme specification.

License

MIT © 2019 Ben Millar