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

simplified-awilix

v0.2.10

Published

Simplified Awilix

Downloads

19

Readme

SimplifiedAwilix

API Documentation

Why?

  • I'm a functional programmer.
  • I personally do not expose classes to the public.
  • It is easy to infer function from value when not using classes.
  • If I really need to expose a class. I'll use the resolver functions that awilix exposes.
  • I also don't use the injection technique very often.
  • I also do not have to adapt my libraries to use what I need awilix for.
  • I write my code to be as environmentally agnostic as possible. Hence, my need for handling dependencies myself.

So, with all that boiled off, all I needed was Awilix.createContainer.

Changes

  • No need for asFunction, asValue, unless using injections. But you could still use them (see example)
  • Container.cradle doesn't throw on unregistered dependencies and by default returns undefined, but you can change this behavior.
  • Install dependencies yourself, in this case, Awilix.
  • Then createContainer() !!!
  • createScope works as expected

Installation

import {createContainer, install, configuration} from "simplified-awilix";
// If node, will import from your project dependencies
// if browser, will use jsdelivr to download the browser version of awilix.
await install();

// If you're bundling, or got awilix imported in other ways, or you have it in an import map, modifiy the configuration
// to include it.
import * as AwilixModule from "awilix";
import {createContainer, install, configuration} from "simplified-awilix";

configuration.dependencies.awilix = {
    get() {
        return AwilixModule
    }
}
await install();

Use

class CoffeeDrinker {
    constructor({howMuch}) {
        this.howMuch = howMuch;
    }

    get drinkCoffee() {
        return "I drank " + this.howMuch + " cups of coffee"
    }
}

const container = createContainer()
    .register({
        howMuch: 5,
        drinkCoffee({howMuch}) {
            return "I drank " + howMuch + " cups of coffee"
        },
        // IF you really need class
        coffeeDrinker: asClass(CoffeeDrinker),
        // Or if you really need to use the inject feature
        injectable: asFunction(({howMuch}) => {
            return "I drank " + howMuch + " cups of coffee"
        }).inject(() => ({howMuch: 100})),
        expanded: {
            // Use an object with this interface signature
            // For a function that needs fine-tuned configuration
            resolver({howMuch}) {
            },
            // Override the lifetime
            lifetime: "scoped",
            // Add disposer
            disposer(expanded) {
            },
            // Inject stuff
            injector() {
            }
        },
        // Set lifetime of the entire set of functions
    }, "transient")
    .register({
        // Maybe have some scoped dependencies
    }, "scoped")
    // Altnerative signature supported
    .register("alternative", () => "signature", "scoped")
    // Or use the added convenience functions
    .registerScoped({})
    // The convenience functions also support alternative signature.    
    .registerTransient("transientOne", () => "hi I'm transient")
    .registerSingleton({})

container.cradle.drinkCoffee; // 5;
container.cradle.missingFunction // undefined;

Test it

npm test

Distributed under the MIT license. See LICENSE for more information.