Coder Social home page Coder Social logo

orchestrate's Introduction

Orchestrate

Simple dependency injection system for loading a buch of hooks ( async support ) that may both populate and receive dependencies from a context object. An example use case is for a plugin system where plugins may depend on each other's services. orchestrate detects their dependecies and loads them in proper order.

Install

npm i @desislavsd/orchestrate

Usage

import { orchestrare } from '@desislavsd/orchestrate'

let plugins = {

    /**
     * @param {Object} context the object that is being populated with all dependencies. For convinience it has reference to itself under `context` key
     * @param { Any } options the options provided to that specific hook ( plugin )
     **/
    async foo({ context, onContextReady }, {cfg}) {

        cfg // true

        // execution may be async
        await new Promise( resolve => setTimeout(resolve, 1000) )
        
        // add dependecy to context to be available for other services
        context.baz = 123

        // do something (sideeffect) after all hooks/plugins 
        // were successfully loaded
        onContextReady(() => {
            console.log('Context ready')
        })

        console.log('foo ready')
    },

    bar({
        baz, // 123
        
        // foo was not provided to the context by any hook but by default
        // each hook adds its name to the `context` as true when loaded
        // so that another hook may await its execution even though no service is provided
        foo, // true; 
    }) {

        console.log('bar ready')
    }
}

// second param is for options
orchestrate( plugins, { 

    // initial context
    context: {some: true}, 
    
    // options to pass as second param to `foo` plugin
    foo: {
        cfg: true
    }

    // ... options to other plugins
})

// Output:
// > foo ready
// > bar ready
// > Context ready

orchestrate's People

Contributors

desislavsd avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.