simplified-awilix

0.2.10 • Public • Published

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.

Readme

Keywords

none

Package Sidebar

Install

npm i simplified-awilix

Weekly Downloads

1

Version

0.2.10

License

MIT

Unpacked Size

47.3 kB

Total Files

17

Last publish

Collaborators

  • zacharygriffee