Common
A utility module for both node.js and the browser.
It is available through npm:
npm install common
Or as minified js file for the browser:
<script src='common.min.js'></script>
This module among other things contains a fork of step that also provides error handling
common.step([
function(next) {
fs.readFile(__filename, 'utf-8', next);
},
function(file) {
console.log(file);
}
], function(err) {
});
It also contains a shortcut to the EventEmitter
prototype and a compatible implementation of this for the browser.
var MyEmitter = common.emitter(function() {
this.foo = 42;
});
var me = new MyEmitter();
me.emit('foo', me.foo);
There is also a more general method for extending prototypes called extend
:
var MyEmitter = common.extend(events.EventEmitter, function() {
this.foo = 42;
});
If you want to use futures you can use the future
function to create a future:
var fut = common.future();
fut.get(function(val) {
console.log(val);
});
setTimeout(function() {
fut.put(42);
}, 1000)
To do string formatting you can use format
:
common.format('define {0} here', 'pattern');
common.format('define {foo} here', {foo:'pattern'});
There is a log
method that just accepts the does the same as format
except it prints out the result using console.log
if available
To generate a simple weak symbols (often used when generating keys for a map) use gensym
common.gensym()
common.gensym()
If you instead of a weak symbol need a strong one use uuid
:
common.uuid();
Common can also encode integers into alphanumerical notation using encode
:
common.encode(1000);
To ensure that a method cannot be called more than once you can use the once
function:
var fn = common.once(function() {
console.log('hello');
});
fn();
fn();
Besides the above common implements two of the utilities mentioned in The Good Parts, memoizer
and curry
.