dimichgh / oja-context-provider

Provides a folder based resolution of domain and actions for oja/context

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

oja-context-provider

Provides a folder based resolution of domain and actions for oja/context. It assumes the app already have oja installed and available via a simple require resolution or can be provided as a createContext option.

codecov Build Status NPM Downloads Known Vulnerabilities Greenkeeper badge

Install

$ npm install oja-context-provider -S

Usage

const createProvider = require('oja-context-provider')();

// create provider one time or many times
const createContext = await createProvider([
    'path:src/actions',
    'path:src/other-actions'
]);

// create context and inject some properties or actions that will be merged with the ones discovered.
// NOTE: in-line options will override any discovered ones to allow easy mocking
const context = await createContext(); 

// or with properties
const context = await createContext({properties: {
    foo: 'foov',
    bar: 'barv'
}}); 

console.log(await context.domain1.getFoo());
console.log(context.foo); // >> foov

Using in-line actions to override discovered ones

const context = await createContext({
    properties: {
        foo: 'foov',
        bar: 'barv'
    },
    functions: {
        domain1: {
            getFoo: context => {
                // one can access injected properties from context
                return context.foo;
            },
            getBar: context => {
                return context.bar;
            }
        }
    }
});

const fooVal = await context.domain1.getFoo();

Configuration

The resolution of actions are done via initial initialization of the provider, while an actual action load is delayed till context.domain. is accessed.

const createProvider = require('oja-context-provider')();

// create provider one time or many times
// one should use it only once to avoid re-reading the same folder structure
const provider = createProvider([
    {
        source: 'path:src',
        filter: 'path:src/my-action-filter' // optional, use of fileFilter function
    },
    {
        source: 'path:src/other-actions',
        filter: 'regexp:-action\\.js$' // optional, use of regexp as a filter and
                                         // in this case match all files that end with -action.js
    }
], {
    contextFactory, // allows a nice way to inject your version of oja context implementation
    baseDir, // process.cwd() by default
});

Or a simpler way when no filter is needed

const createProvider = require('oja-context-provider')();

// create provider one time or many times
// one should use it only once to avoid re-reading the same folder structure
const provider = createProvider([
    'path:src',
    'path:src/other-actions'
], {
    contextFactory, // allows a nice way to inject your version of oja context implementation
    baseDir, // process.cwd() by default
});

Where:

  • baseDir is the location from where the path: shortstop handler will start path resolution
  • filter is a function that allows a user to decide if the given file is action (true) or not (false)
  • contextFactory is oja/context implementation injection

File filter API

async filePath => true|flase;

Note that the function is async and one can do async action before returning.

About

Provides a folder based resolution of domain and actions for oja/context

License:MIT License


Languages

Language:JavaScript 100.0%