flip-flop v0.0.18
Flip Flop
Just Another IOC Library
This Package is Deprecated, please use @flipflop/core and @flipflop/node packages
Thanks to everyone that tried out flip flop. This package wasn't browser friendly so I've decided to break out the dependency injection code from the node-centric stuff for better modularity and clarity. Tentatively there will be a @flipflop/core module and a @flipflop/node module. @flipflop/browser and @flipflop/server modules are on the roadmap as well but may not see the light of day for a while.
flip-flop is just another ioc library
*in progress
Install
npm install --save flip-flopUsage
Tell flipflop where your dependencies are
let flipflop = require('flip-flop');
flipflop('./dist/*.js')
.load(function(){
console.log('everything loaded!');
});flipflop loads your files and takes care of supplying your (a)sync dependencies when they're ready.
Just export a function in your js files
module.exports = function(flipflop){
app('my.module')
.modules('my.otherModule')
.collections('collection1', 'collection2')
.when(function(myOtherModule, collection1, collection2){
// do something with your dependencies
})
}return an A+ compliant thenable (a promise) if your module has to do some async stuff
module.exports = function(app){
app.module('d')
.when(function(){
return new Promise(function(resolve, reject){
setTimeout(function(){
resolve('D');
}, 3000);
});
});
});
}Why?
let email = require('../../../../../../../lib/modules/components/settings/email.js');That's why.
You can probably come up with a glob to match all of your project files in a few seconds so just tell flip-flop what you want and stop worrying about where your code is.
Features
Asyncronous Dependencies
As long as your module constructor returns an A+ compliant thenable then any modules that depend on it won't load until it resolves.
log.txt
This is useful log outputa.js
module.exports = function(app){
app('a')
.when(function(){
return new Promise(function(resolve, reject){
fs.readFile('log.txt', 'utf8', function(err, file){
if(err){
return reject(err);
}
return resolve(file);
});
});
});
};b.js
module.exports = function(a){
app('b')
.modules('a')
.when(function(a){
console.log(a); // This is useful log output
});
};Returning anything but a promise lets flip-flop know that your module is ready right away.
Collections
With flip-flop you register and depend on collections. This is useful when you want to create multiple modules that share something in common
server.js
module.exports = function(app){
app('restify')
.collections('controllers')
.when(function(controllers){
return new Promise(function(resolve, reject){
var restify = require('restify');
var server = restify.createServer();
server.get('/c1', controllers[0].value);
server.get('/c2', controllers[1].value);
server.listen(8080, function(){
resolve(server);
});
});
});
};controller1.js
module.exports = function(app){
app('hello-controller')
.when(function(){
return function(req, res, next){
res.send('hello');
}
})
};controller2.js
module.exports = function(app){
app('goodbye-controller')
.when(function(){
return function(req, res, next){
res.send('goodbye');
}
})
};API
flipflop(String) | FlipFlop
Pass a file glob to flipflop which matches all of the files you wish to load. A FlipFlop instance will be returned with methods for loading your files and configuring your settings
const flipflop = require('flipflop');
const fl = flipflop('**/*.js');flipflop(Array) | FlipFlop
Pass an array of file globs to flipflop which matches all of the files you wish to load. A FlipFlop instance will be returned with methods for loading your files and configuring your settings
const flipflop = require('flipflop');
const fl = flipflop([
'dist/**/*.js',
'vendor/some-file/some-file.js'
]);flipflop uses glob-all to parse your globs
FlipFlop.options(Object) | FlipFlop
TODO
- Better Reject() logic
- Write Tests
- Make it Global
- Support for a config file instead of options
- Travis
- Coveralls See See
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago