state-trooper
Version:
Application State Manager
69 lines (58 loc) • 1.44 kB
JavaScript
;
var buffers = require("./impl/buffers");
var channels = require("./impl/channels");
var select = require("./impl/select");
var process = require("./impl/process");
var timers = require("./impl/timers");
function spawn(gen, creator) {
var ch = channels.chan(buffers.fixed(1));
(new process.Process(gen, function(value) {
if (value === channels.CLOSED) {
ch.close();
} else {
process.put_then_callback(ch, value, function(ok) {
ch.close();
});
}
}, creator)).run();
return ch;
};
function go(f, args) {
args = args || [];
var gen = f.apply(null, args);
return spawn(gen, f);
};
function chan(bufferOrNumber, xform, exHandler) {
var buf;
if (bufferOrNumber === 0) {
bufferOrNumber = null;
}
if (typeof bufferOrNumber === "number") {
buf = buffers.fixed(bufferOrNumber);
} else {
buf = bufferOrNumber;
}
return channels.chan(buf, xform, exHandler);
};
module.exports = {
buffers: {
fixed: buffers.fixed,
dropping: buffers.dropping,
sliding: buffers.sliding
},
spawn: spawn,
go: go,
chan: chan,
DEFAULT: select.DEFAULT,
CLOSED: channels.CLOSED,
put: process.put,
take: process.take,
offer: process.offer,
poll: process.poll,
sleep: process.sleep,
alts: process.alts,
putAsync: process.put_then_callback,
takeAsync: process.take_then_callback,
NO_VALUE: process.NO_VALUE,
timeout: timers.timeout
};