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.
$ npm install oja-context-provider -S
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();
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
async filePath => true|flase;
Note that the function is async and one can do async action before returning.