first commit

This commit is contained in:
brandon 2014-02-22 01:13:31 -08:00
commit 071ca7cb36
31 changed files with 2128 additions and 0 deletions

13
README.md Normal file
View File

@ -0,0 +1,13 @@
#node-ipc
*a nodejs module for local and remote Inter Process Communication*
----
#### Documentation coming soon
----
#### Local IPC
Uses Unix Sockets to give lightning fast communication and avoid the network card to reduce overhead and latency.
#### Remote IPC
Uses ``not yet defined`` Sockets to give fastest possible communication across the network with the minimum overhead and latency.

View File

@ -0,0 +1,41 @@
var ipc=require('../../../node-ipc');
/***************************************\
*
* You should start both hello and world
* then you will see them communicating.
*
* *************************************/
ipc.config.id = 'hello';
ipc.config.retry= 1500;
ipc.connectTo(
'world',
function(){
ipc.of.world.on(
'connect',
function(){
ipc.log('## connected to world ##'.rainbow, ipc.config.delay);
ipc.of.world.emit(
'message',
'hello'
)
}
);
ipc.of.world.on(
'disconnect',
function(){
ipc.log('disconnected from world'.notice);
}
);
ipc.of.world.on(
'message',
function(data){
ipc.log('got a message from world : '.debug, data);
}
);
}
);
console.log(ipc)

View File

@ -0,0 +1,30 @@
var ipc=require('../../../node-ipc');
/***************************************\
*
* You should start both hello and world
* then you will see them communicating.
*
* *************************************/
ipc.config.id = 'world';
ipc.config.retry= 1500;
ipc.serve(
function(){
ipc.server.on(
'message',
function(data,socket){
ipc.log('got a message : '.debug, data);
socket.emit(
'message',
data+' world!'
);
}
);
}
);
ipc.server.start();
console.log(ipc)

103
lib/client.js Normal file
View File

@ -0,0 +1,103 @@
var net = require('net'),
eventParser = require('../lib/eventParser.js'),
pubsub = require('event-pubsub');
function init(config,log){
var client={
config : config,
socket : false,
connect : connect,
emit : emit,
log : log
}
new pubsub(client);
return client;
}
function emit(type,data){
this.log('dispatching event to '.debug, this.id.variable, this.path.variable,' : ', type.data,',', data);
if(!data)
data=false;
this.socket.write(
eventParser.format(
{
type:type,
data:data
}
)
);
};
function connect(){
//init client object for scope persistance especially inside of socket events.
var client=this;
client.log('requested connection to '.debug, client.id.variable, client.path.variable);
if(!this.path){
client.log('\n\n######\nerror: '.error, client.id .info,' client has not specified socket path it wishes to connect to.'.error);
return;
}
client.socket = net.connect(
{
path:client.path
}
);
client.socket.setEncoding(this.config.encoding);
client.socket.on(
'error',
function(err){
client.log('\n\n######\nerror: '.error, err);
}
);
client.socket.on(
'connect',
function(){
client.trigger('connect');
}
);
client.socket.on(
'close',
function(){
client.log('connection closed'.notice ,client.id.variable , client.path.variable);
setTimeout(
(
function(client){
return function(){
client.connect();
}
}
)(client),
client.config.retry
);
client.trigger('disconnect');
}
);
client.socket.on(
'data',
function(data) {
client.log('## recieved events ##'.rainbow);
var events = eventParser.parse(data);
var eCount = events.length;
for(var i=0; i<eCount; i++){
var e=JSON.parse(
events[i]
);
client.log('detected event of type '.debug, e.type.data, e.data);
client.trigger(
e.type,
e.data
);
}
}
);
}
module.exports=init;

23
lib/eventParser.js Normal file
View File

@ -0,0 +1,23 @@
function formatData(data){
if(!data.data)
data.data={};
if(data.data['_maxListeners'])
delete data.data;
data=JSON.stringify(data)+parser.delimiter;
return data;
};
function parseDataEvents(data){
var events=data.split(parser.delimiter);
events.pop();
return events;
}
var parser={
parse : parseDataEvents,
format : formatData,
delimiter : '\f'
}
module.exports=parser;

212
lib/socketServer.js Normal file
View File

@ -0,0 +1,212 @@
var net = require('net'),
fs = require('fs'),
eventParser = require('../lib/eventParser.js'),
pubsub = require('event-pubsub');
function emit(socket, type, data){
if(!data)
data=false;
console.log(type,data)
this.log('dispatching event to socket'.debug, ' : ', type.data, data);
socket.write(
eventParser.format(
{
type:type,
data:data
}
)
);
};
function broadcast(type,data){
this.log('broadcasting event to '.debug, this.path.variable,' : ', type.data, data);
if(!data)
data=false;
var e=eventParser.format(
{
type:type,
data:data
}
);
for(var i=0, count=this.sockets.length; i<count; i++){
this.sockets[i].write(e);
}
};
function init(path,config,log){
var server={
config : config,
path : path,
log : log,
server : false,
sockets : [],
emit : emit,
broadcast : broadcast,
define : {
listen : {
'get.events.broadcasting' : 'does not require any special paramaters',
'get.events.listening' : 'does not require any special paramaters'
},
broadcast : {
'events.broadcasting' : 'data.events is a JSON object of event definitions by type '+config.id+' will broadcast on '+path,
'events.listening' : 'data.events is a JSON object of event definitions by type '+config.id+' is listening for on '+path
}
},
onStart : function(socket){
this.trigger(
'start',
socket
);
},
start : function(){
if(!this.path){
console.log('Socket Server Path not specified, refusing to start'.warn);
return;
}
fs.unlink(
this.path,
(
function(server){
return function () {
server.log('starting server on '.debug,server.path.variable);
server.server=net.createServer(
function(socket) {
socket.setEncoding(server.config.encoding);
server.log('## socket connection to server detected ##'.rainbow);
socket.on(
'close',
function(socket){
server.trigger(
'close',
socket
);
}
);
socket.on(
'error',
function(err){
server.trigger('error',err);
}
);
socket.on(
'data',
function(data){
data=eventParser.parse(data);
while(data.length>0){
var e=JSON.parse(data.shift());
server.log('recieved event of : '.debug,e.type.data,e.data);
server.sockets.push(socket);
server.trigger(
e.type,
e.data,
socket
);
}
}
);
server.trigger(
'connect',
socket
);
server.trigger(
'get.events.broadcasting',
socket
);
server.trigger(
'get.events.listening',
socket
);
}
);
server.server.listen(
server.path,
(
function(server){
return function(socket){
server.onStart(socket)
}
}
)(server)
);
server.server.maxConnections=server.maxConnections;
}
}
)(this)
);
}
};
new pubsub(server);
server.on(
'get.events.broadcasting',
function(socket){
server.emit(
socket,
'events.broadcasting',
{
id : server.config.id,
events : server.define.broadcast
}
);
}
);
server.on(
'get.events.listening',
function(socket){
server.emit(
socket,
'events.listening',
{
id : server.config.id,
events : server.define.listen,
}
);
}
)
server.on(
'close',
function(){
for(var i=0, count=server.sockets.length; i<count; i++){
var socket=server.sockets[i];
if(socket.readable)
continue;
server.log('Socket disconnected'.notice);
socket.destroy();
delete server.sockets[i];
server.trigger(
'socket.disconnected'
);
return;
}
}
);
return server;
}
module.exports=init;

124
node-ipc.js Normal file
View File

@ -0,0 +1,124 @@
var os = require('os'),
colors = require('colors'),
pubsub = require('event-pubsub'),
eventParser = require('./lib/eventParser.js'),
Client = require('./lib/client.js'),
Server = require('./lib/socketServer.js'),
socketPrefix= 'app.';
colors.setTheme(
{
good : 'green',
notice : 'yellow',
warn : 'red',
error : 'redBG',
debug : 'magenta',
variable: 'cyan',
data : 'blue'
}
);
var defaults={
root : process.env.HOME,
appspace : socketPrefix,
socketRoot : '/tmp/',
id : os.hostname(),
encoding : 'utf8',
silent : false,
maxConnections : 100,
retry : 500
}
var ipc = {
config : defaults,
connectTo : connect,
serve : serve,
of : {},
server : false,
log : log
}
function log(){
if(ipc.config.silent)
return;
console.log(
Array.prototype.slice.call(arguments).join(' ')
);
}
function serve(path,callback){
if(typeof path=='function'){
callback=path;
path=false;
}
if(!path){
ipc.log(
'Server path not specified, so defaulting to'.notice,
'ipc.config.socketRoot + ipc.config.appspace + ipc.config.id'.variable,
(ipc.config.socketRoot+ipc.config.appspace+ipc.config.id).data
);
path=ipc.config.socketRoot+ipc.config.appspace+ipc.config.id;
}
ipc.server=new Server(
path,
ipc.config,
log
);
ipc.server.on(
'start',
callback
);
}
function connect(id,path,callback){
if(typeof path == 'function'){
callback=path;
path=false;
}
if(!callback)
callback=function(){};
if(!id){
ipc.log(
'Service id required'.warn,
'Requested service connection without specifying service id. Aborting connection attempt'.notice
);
return;
}
if(!path){
ipc.log(
'Service path not specified, so defaulting to'.notice,
'ipc.config.socketRoot + ipc.config.appspace + id'.variable,
(ipc.config.socketRoot+ipc.config.appspace+id).data
);
path=ipc.config.socketRoot+ipc.config.appspace+id;
}
if(ipc.of[id]){
if(!ipc.of[id].socket.destroyed){
ipc.log(
'Already Connected to'.notice,
id.variable,
'- So executing success without connection'.notice
);
callback();
return;
}
ipc.of[id].destroy();
}
ipc.of[id] = new Client(ipc.config,ipc.log);
ipc.of[id].id = id;
ipc.of[id].path = path;
ipc.of[id].connect();
callback();
}
module.exports=ipc;

22
node_modules/colors/MIT-LICENSE.txt generated vendored Normal file
View File

@ -0,0 +1,22 @@
Copyright (c) 2010
Marak Squires
Alexis Sellier (cloudhead)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

77
node_modules/colors/ReadMe.md generated vendored Normal file
View File

@ -0,0 +1,77 @@
# colors.js - get color and style in your node.js console ( and browser ) like what
<img src="http://i.imgur.com/goJdO.png" border = "0"/>
## Installation
npm install colors
## colors and styles!
- bold
- italic
- underline
- inverse
- yellow
- cyan
- white
- magenta
- green
- red
- grey
- blue
- rainbow
- zebra
- random
## Usage
``` js
var colors = require('./colors');
console.log('hello'.green); // outputs green text
console.log('i like cake and pies'.underline.red) // outputs red underlined text
console.log('inverse the color'.inverse); // inverses the color
console.log('OMG Rainbows!'.rainbow); // rainbow (ignores spaces)
```
# Creating Custom themes
```js
var colors = require('colors');
colors.setTheme({
silly: 'rainbow',
input: 'grey',
verbose: 'cyan',
prompt: 'grey',
info: 'green',
data: 'grey',
help: 'cyan',
warn: 'yellow',
debug: 'blue',
error: 'red'
});
// outputs red text
console.log("this is an error".error);
// outputs yellow text
console.log("this is a warning".warn);
```
### Contributors
Marak (Marak Squires)
Alexis Sellier (cloudhead)
mmalecki (Maciej Małecki)
nicoreed (Nico Reed)
morganrallen (Morgan Allen)
JustinCampbell (Justin Campbell)
ded (Dustin Diaz)
#### , Marak Squires , Justin Campbell, Dustin Diaz (@ded)

342
node_modules/colors/colors.js generated vendored Normal file
View File

@ -0,0 +1,342 @@
/*
colors.js
Copyright (c) 2010
Marak Squires
Alexis Sellier (cloudhead)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
var isHeadless = false;
if (typeof module !== 'undefined') {
isHeadless = true;
}
if (!isHeadless) {
var exports = {};
var module = {};
var colors = exports;
exports.mode = "browser";
} else {
exports.mode = "console";
}
//
// Prototypes the string object to have additional method calls that add terminal colors
//
var addProperty = function (color, func) {
exports[color] = function (str) {
return func.apply(str);
};
String.prototype.__defineGetter__(color, func);
};
function stylize(str, style) {
var styles;
if (exports.mode === 'console') {
styles = {
//styles
'bold' : ['\x1B[1m', '\x1B[22m'],
'italic' : ['\x1B[3m', '\x1B[23m'],
'underline' : ['\x1B[4m', '\x1B[24m'],
'inverse' : ['\x1B[7m', '\x1B[27m'],
'strikethrough' : ['\x1B[9m', '\x1B[29m'],
//text colors
//grayscale
'white' : ['\x1B[37m', '\x1B[39m'],
'grey' : ['\x1B[90m', '\x1B[39m'],
'black' : ['\x1B[30m', '\x1B[39m'],
//colors
'blue' : ['\x1B[34m', '\x1B[39m'],
'cyan' : ['\x1B[36m', '\x1B[39m'],
'green' : ['\x1B[32m', '\x1B[39m'],
'magenta' : ['\x1B[35m', '\x1B[39m'],
'red' : ['\x1B[31m', '\x1B[39m'],
'yellow' : ['\x1B[33m', '\x1B[39m'],
//background colors
//grayscale
'whiteBG' : ['\x1B[47m', '\x1B[49m'],
'greyBG' : ['\x1B[49;5;8m', '\x1B[49m'],
'blackBG' : ['\x1B[40m', '\x1B[49m'],
//colors
'blueBG' : ['\x1B[44m', '\x1B[49m'],
'cyanBG' : ['\x1B[46m', '\x1B[49m'],
'greenBG' : ['\x1B[42m', '\x1B[49m'],
'magentaBG' : ['\x1B[45m', '\x1B[49m'],
'redBG' : ['\x1B[41m', '\x1B[49m'],
'yellowBG' : ['\x1B[43m', '\x1B[49m']
};
} else if (exports.mode === 'browser') {
styles = {
//styles
'bold' : ['<b>', '</b>'],
'italic' : ['<i>', '</i>'],
'underline' : ['<u>', '</u>'],
'inverse' : ['<span style="background-color:black;color:white;">', '</span>'],
'strikethrough' : ['<del>', '</del>'],
//text colors
//grayscale
'white' : ['<span style="color:white;">', '</span>'],
'grey' : ['<span style="color:gray;">', '</span>'],
'black' : ['<span style="color:black;">', '</span>'],
//colors
'blue' : ['<span style="color:blue;">', '</span>'],
'cyan' : ['<span style="color:cyan;">', '</span>'],
'green' : ['<span style="color:green;">', '</span>'],
'magenta' : ['<span style="color:magenta;">', '</span>'],
'red' : ['<span style="color:red;">', '</span>'],
'yellow' : ['<span style="color:yellow;">', '</span>'],
//background colors
//grayscale
'whiteBG' : ['<span style="background-color:white;">', '</span>'],
'greyBG' : ['<span style="background-color:gray;">', '</span>'],
'blackBG' : ['<span style="background-color:black;">', '</span>'],
//colors
'blueBG' : ['<span style="background-color:blue;">', '</span>'],
'cyanBG' : ['<span style="background-color:cyan;">', '</span>'],
'greenBG' : ['<span style="background-color:green;">', '</span>'],
'magentaBG' : ['<span style="background-color:magenta;">', '</span>'],
'redBG' : ['<span style="background-color:red;">', '</span>'],
'yellowBG' : ['<span style="background-color:yellow;">', '</span>']
};
} else if (exports.mode === 'none') {
return str + '';
} else {
console.log('unsupported mode, try "browser", "console" or "none"');
}
return styles[style][0] + str + styles[style][1];
}
function applyTheme(theme) {
//
// Remark: This is a list of methods that exist
// on String that you should not overwrite.
//
var stringPrototypeBlacklist = [
'__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__', 'charAt', 'constructor',
'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf', 'charCodeAt',
'indexOf', 'lastIndexof', 'length', 'localeCompare', 'match', 'replace', 'search', 'slice', 'split', 'substring',
'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toUpperCase', 'trim', 'trimLeft', 'trimRight'
];
Object.keys(theme).forEach(function (prop) {
if (stringPrototypeBlacklist.indexOf(prop) !== -1) {
console.log('warn: '.red + ('String.prototype' + prop).magenta + ' is probably something you don\'t want to override. Ignoring style name');
}
else {
if (typeof(theme[prop]) === 'string') {
addProperty(prop, function () {
return exports[theme[prop]](this);
});
}
else {
addProperty(prop, function () {
var ret = this;
for (var t = 0; t < theme[prop].length; t++) {
ret = exports[theme[prop][t]](ret);
}
return ret;
});
}
}
});
}
//
// Iterate through all default styles and colors
//
var x = ['bold', 'underline', 'strikethrough', 'italic', 'inverse', 'grey', 'black', 'yellow', 'red', 'green', 'blue', 'white', 'cyan', 'magenta', 'greyBG', 'blackBG', 'yellowBG', 'redBG', 'greenBG', 'blueBG', 'whiteBG', 'cyanBG', 'magentaBG'];
x.forEach(function (style) {
// __defineGetter__ at the least works in more browsers
// http://robertnyman.com/javascript/javascript-getters-setters.html
// Object.defineProperty only works in Chrome
addProperty(style, function () {
return stylize(this, style);
});
});
function sequencer(map) {
return function () {
if (!isHeadless) {
return this.replace(/( )/, '$1');
}
var exploded = this.split(""), i = 0;
exploded = exploded.map(map);
return exploded.join("");
};
}
var rainbowMap = (function () {
var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta']; //RoY G BiV
return function (letter, i, exploded) {
if (letter === " ") {
return letter;
} else {
return stylize(letter, rainbowColors[i++ % rainbowColors.length]);
}
};
})();
exports.themes = {};
exports.addSequencer = function (name, map) {
addProperty(name, sequencer(map));
};
exports.addSequencer('rainbow', rainbowMap);
exports.addSequencer('zebra', function (letter, i, exploded) {
return i % 2 === 0 ? letter : letter.inverse;
});
exports.setTheme = function (theme) {
if (typeof theme === 'string') {
try {
exports.themes[theme] = require(theme);
applyTheme(exports.themes[theme]);
return exports.themes[theme];
} catch (err) {
console.log(err);
return err;
}
} else {
applyTheme(theme);
}
};
addProperty('stripColors', function () {
return ("" + this).replace(/\x1B\[\d+m/g, '');
});
// please no
function zalgo(text, options) {
var soul = {
"up" : [
'̍', '̎', '̄', '̅',
'̿', '̑', '̆', '̐',
'͒', '͗', '͑', '̇',
'̈', '̊', '͂', '̓',
'̈', '͊', '͋', '͌',
'̃', '̂', '̌', '͐',
'̀', '́', '̋', '̏',
'̒', '̓', '̔', '̽',
'̉', 'ͣ', 'ͤ', 'ͥ',
'ͦ', 'ͧ', 'ͨ', 'ͩ',
'ͪ', 'ͫ', 'ͬ', 'ͭ',
'ͮ', 'ͯ', '̾', '͛',
'͆', '̚'
],
"down" : [
'̖', '̗', '̘', '̙',
'̜', '̝', '̞', '̟',
'̠', '̤', '̥', '̦',
'̩', '̪', '̫', '̬',
'̭', '̮', '̯', '̰',
'̱', '̲', '̳', '̹',
'̺', '̻', '̼', 'ͅ',
'͇', '͈', '͉', '͍',
'͎', '͓', '͔', '͕',
'͖', '͙', '͚', '̣'
],
"mid" : [
'̕', '̛', '̀', '́',
'͘', '̡', '̢', '̧',
'̨', '̴', '̵', '̶',
'͜', '͝', '͞',
'͟', '͠', '͢', '̸',
'̷', '͡', ' ҉'
]
},
all = [].concat(soul.up, soul.down, soul.mid),
zalgo = {};
function randomNumber(range) {
var r = Math.floor(Math.random() * range);
return r;
}
function is_char(character) {
var bool = false;
all.filter(function (i) {
bool = (i === character);
});
return bool;
}
function heComes(text, options) {
var result = '', counts, l;
options = options || {};
options["up"] = options["up"] || true;
options["mid"] = options["mid"] || true;
options["down"] = options["down"] || true;
options["size"] = options["size"] || "maxi";
text = text.split('');
for (l in text) {
if (is_char(l)) {
continue;
}
result = result + text[l];
counts = {"up" : 0, "down" : 0, "mid" : 0};
switch (options.size) {
case 'mini':
counts.up = randomNumber(8);
counts.min = randomNumber(2);
counts.down = randomNumber(8);
break;
case 'maxi':
counts.up = randomNumber(16) + 3;
counts.min = randomNumber(4) + 1;
counts.down = randomNumber(64) + 3;
break;
default:
counts.up = randomNumber(8) + 1;
counts.mid = randomNumber(6) / 2;
counts.down = randomNumber(8) + 1;
break;
}
var arr = ["up", "mid", "down"];
for (var d in arr) {
var index = arr[d];
for (var i = 0 ; i <= counts[index]; i++) {
if (options[index]) {
result = result + soul[index][randomNumber(soul[index].length)];
}
}
}
}
return result;
}
return heComes(text);
}
// don't summon zalgo
addProperty('zalgo', function () {
return zalgo(this);
});

76
node_modules/colors/example.html generated vendored Normal file
View File

@ -0,0 +1,76 @@
<!DOCTYPE HTML>
<html lang="en-us">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Colors Example</title>
<script src="colors.js"></script>
</head>
<body>
<script>
var test = colors.red("hopefully colorless output");
document.write('Rainbows are fun!'.rainbow + '<br/>');
document.write('So '.italic + 'are'.underline + ' styles! '.bold + 'inverse'.inverse); // styles not widely supported
document.write('Chains are also cool.'.bold.italic.underline.red); // styles not widely supported
//document.write('zalgo time!'.zalgo);
document.write(test.stripColors);
document.write("a".grey + " b".black);
document.write("Zebras are so fun!".zebra);
document.write(colors.rainbow('Rainbows are fun!'));
document.write("This is " + "not".strikethrough + " fun.");
document.write(colors.italic('So ') + colors.underline('are') + colors.bold(' styles! ') + colors.inverse('inverse')); // styles not widely supported
document.write(colors.bold(colors.italic(colors.underline(colors.red('Chains are also cool.'))))); // styles not widely supported
//document.write(colors.zalgo('zalgo time!'));
document.write(colors.stripColors(test));
document.write(colors.grey("a") + colors.black(" b"));
colors.addSequencer("america", function(letter, i, exploded) {
if(letter === " ") return letter;
switch(i%3) {
case 0: return letter.red;
case 1: return letter.white;
case 2: return letter.blue;
}
});
colors.addSequencer("random", (function() {
var available = ['bold', 'underline', 'italic', 'inverse', 'grey', 'yellow', 'red', 'green', 'blue', 'white', 'cyan', 'magenta'];
return function(letter, i, exploded) {
return letter === " " ? letter : letter[available[Math.round(Math.random() * (available.length - 1))]];
};
})());
document.write("AMERICA! F--K YEAH!".america);
document.write("So apparently I've been to Mars, with all the little green men. But you know, I don't recall.".random);
//
// Custom themes
//
colors.setTheme({
silly: 'rainbow',
input: 'grey',
verbose: 'cyan',
prompt: 'grey',
info: 'green',
data: 'grey',
help: 'cyan',
warn: 'yellow',
debug: 'blue',
error: 'red'
});
// outputs red text
document.write("this is an error".error);
// outputs yellow text
document.write("this is a warning".warn);
</script>
</body>
</html>

77
node_modules/colors/example.js generated vendored Normal file
View File

@ -0,0 +1,77 @@
var colors = require('./colors');
//colors.mode = "browser";
var test = colors.red("hopefully colorless output");
console.log('Rainbows are fun!'.rainbow);
console.log('So '.italic + 'are'.underline + ' styles! '.bold + 'inverse'.inverse); // styles not widely supported
console.log('Chains are also cool.'.bold.italic.underline.red); // styles not widely supported
//console.log('zalgo time!'.zalgo);
console.log(test.stripColors);
console.log("a".grey + " b".black);
console.log("Zebras are so fun!".zebra);
console.log('background color attack!'.black.whiteBG)
//
// Remark: .strikethrough may not work with Mac OS Terminal App
//
console.log("This is " + "not".strikethrough + " fun.");
console.log(colors.rainbow('Rainbows are fun!'));
console.log(colors.italic('So ') + colors.underline('are') + colors.bold(' styles! ') + colors.inverse('inverse')); // styles not widely supported
console.log(colors.bold(colors.italic(colors.underline(colors.red('Chains are also cool.'))))); // styles not widely supported
//console.log(colors.zalgo('zalgo time!'));
console.log(colors.stripColors(test));
console.log(colors.grey("a") + colors.black(" b"));
colors.addSequencer("america", function(letter, i, exploded) {
if(letter === " ") return letter;
switch(i%3) {
case 0: return letter.red;
case 1: return letter.white;
case 2: return letter.blue;
}
});
colors.addSequencer("random", (function() {
var available = ['bold', 'underline', 'italic', 'inverse', 'grey', 'yellow', 'red', 'green', 'blue', 'white', 'cyan', 'magenta'];
return function(letter, i, exploded) {
return letter === " " ? letter : letter[available[Math.round(Math.random() * (available.length - 1))]];
};
})());
console.log("AMERICA! F--K YEAH!".america);
console.log("So apparently I've been to Mars, with all the little green men. But you know, I don't recall.".random);
//
// Custom themes
//
// Load theme with JSON literal
colors.setTheme({
silly: 'rainbow',
input: 'grey',
verbose: 'cyan',
prompt: 'grey',
info: 'green',
data: 'grey',
help: 'cyan',
warn: 'yellow',
debug: 'blue',
error: 'red'
});
// outputs red text
console.log("this is an error".error);
// outputs yellow text
console.log("this is a warning".warn);
// outputs grey text
console.log("this is an input".input);
// Load a theme from file
colors.setTheme('./themes/winston-dark.js');
console.log("this is an input".input);

29
node_modules/colors/package.json generated vendored Normal file
View File

@ -0,0 +1,29 @@
{
"name": "colors",
"description": "get colors in your node.js console like what",
"version": "0.6.2",
"author": {
"name": "Marak Squires"
},
"homepage": "https://github.com/Marak/colors.js",
"bugs": {
"url": "https://github.com/Marak/colors.js/issues"
},
"keywords": [
"ansi",
"terminal",
"colors"
],
"repository": {
"type": "git",
"url": "http://github.com/Marak/colors.js.git"
},
"engines": {
"node": ">=0.1.90"
},
"main": "colors",
"readme": "# colors.js - get color and style in your node.js console ( and browser ) like what\n\n<img src=\"http://i.imgur.com/goJdO.png\" border = \"0\"/>\n\n\n## Installation\n\n npm install colors\n\n## colors and styles!\n\n- bold\n- italic\n- underline\n- inverse\n- yellow\n- cyan\n- white\n- magenta\n- green\n- red\n- grey\n- blue\n- rainbow\n- zebra\n- random\n\n## Usage\n\n``` js\nvar colors = require('./colors');\n\nconsole.log('hello'.green); // outputs green text\nconsole.log('i like cake and pies'.underline.red) // outputs red underlined text\nconsole.log('inverse the color'.inverse); // inverses the color\nconsole.log('OMG Rainbows!'.rainbow); // rainbow (ignores spaces)\n```\n\n# Creating Custom themes\n\n```js\n\nvar colors = require('colors');\n\ncolors.setTheme({\n silly: 'rainbow',\n input: 'grey',\n verbose: 'cyan',\n prompt: 'grey',\n info: 'green',\n data: 'grey',\n help: 'cyan',\n warn: 'yellow',\n debug: 'blue',\n error: 'red'\n});\n\n// outputs red text\nconsole.log(\"this is an error\".error);\n\n// outputs yellow text\nconsole.log(\"this is a warning\".warn);\n```\n\n\n### Contributors \n\nMarak (Marak Squires)\nAlexis Sellier (cloudhead)\nmmalecki (Maciej Małecki)\nnicoreed (Nico Reed)\nmorganrallen (Morgan Allen)\nJustinCampbell (Justin Campbell)\nded (Dustin Diaz)\n\n\n#### , Marak Squires , Justin Campbell, Dustin Diaz (@ded)\n",
"readmeFilename": "ReadMe.md",
"_id": "colors@0.6.2",
"_from": "colors@"
}

70
node_modules/colors/test.js generated vendored Normal file
View File

@ -0,0 +1,70 @@
var assert = require('assert'),
colors = require('./colors');
var s = 'string';
function a(s, code) {
return '\x1B[' + code.toString() + 'm' + s + '\x1B[39m';
}
function aE(s, color, code) {
assert.equal(s[color], a(s, code));
assert.equal(colors[color](s), a(s, code));
assert.equal(s[color], colors[color](s));
assert.equal(s[color].stripColors, s);
assert.equal(s[color].stripColors, colors.stripColors(s));
}
function h(s, color) {
return '<span style="color:' + color + ';">' + s + '</span>';
}
var stylesColors = ['white', 'black', 'blue', 'cyan', 'green', 'magenta', 'red', 'yellow'];
var stylesAll = stylesColors.concat(['bold', 'italic', 'underline', 'inverse', 'rainbow']);
colors.mode = 'console';
assert.equal(s.bold, '\x1B[1m' + s + '\x1B[22m');
assert.equal(s.italic, '\x1B[3m' + s + '\x1B[23m');
assert.equal(s.underline, '\x1B[4m' + s + '\x1B[24m');
assert.equal(s.strikethrough, '\x1B[9m' + s + '\x1B[29m');
assert.equal(s.inverse, '\x1B[7m' + s + '\x1B[27m');
assert.ok(s.rainbow);
aE(s, 'white', 37);
aE(s, 'grey', 90);
aE(s, 'black', 30);
aE(s, 'blue', 34);
aE(s, 'cyan', 36);
aE(s, 'green', 32);
aE(s, 'magenta', 35);
aE(s, 'red', 31);
aE(s, 'yellow', 33);
assert.equal(s, 'string');
colors.setTheme({error:'red'});
assert.equal(typeof("astring".red),'string');
assert.equal(typeof("astring".error),'string');
colors.mode = 'browser';
assert.equal(s.bold, '<b>' + s + '</b>');
assert.equal(s.italic, '<i>' + s + '</i>');
assert.equal(s.underline, '<u>' + s + '</u>');
assert.equal(s.strikethrough, '<del>' + s + '</del>');
assert.equal(s.inverse, '<span style="background-color:black;color:white;">' + s + '</span>');
assert.ok(s.rainbow);
stylesColors.forEach(function (color) {
assert.equal(s[color], h(s, color));
assert.equal(colors[color](s), h(s, color));
});
assert.equal(typeof("astring".red),'string');
assert.equal(typeof("astring".error),'string');
colors.mode = 'none';
stylesAll.forEach(function (style) {
assert.equal(s[style], s);
assert.equal(colors[style](s), s);
});
assert.equal(typeof("astring".red),'string');
assert.equal(typeof("astring".error),'string');

12
node_modules/colors/themes/winston-dark.js generated vendored Normal file
View File

@ -0,0 +1,12 @@
module['exports'] = {
silly: 'rainbow',
input: 'black',
verbose: 'cyan',
prompt: 'grey',
info: 'green',
data: 'grey',
help: 'cyan',
warn: 'yellow',
debug: 'blue',
error: 'red'
};

12
node_modules/colors/themes/winston-light.js generated vendored Normal file
View File

@ -0,0 +1,12 @@
module['exports'] = {
silly: 'rainbow',
input: 'grey',
verbose: 'cyan',
prompt: 'grey',
info: 'green',
data: 'grey',
help: 'cyan',
warn: 'yellow',
debug: 'blue',
error: 'red'
};

24
node_modules/event-pubsub/LICENSE generated vendored Normal file
View File

@ -0,0 +1,24 @@
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org>

61
node_modules/event-pubsub/README.md generated vendored Normal file
View File

@ -0,0 +1,61 @@
Event PubSub
============
Pubsub events for Node and the browser allowing event scoping and multiple scopes.
Easy for any developer level. No frills, just high speed pubsub events!
---
### Basic Examples
---
#### Node
var events = new require('../../event-pubsub.js')();
events.on(
'hello',
function(data){
console.log('hello event recieved ', data);
}
);
events.on(
'*',
function(type){
console.log('Catch all detected event type of : ',type, '. List of all the sent arguments ',arguments);
}
);
/************************************\
* trigger events for testing
* **********************************/
events.trigger(
'hello',
'world'
);
#### Browser
##### HTML
var events = new require('../../event-pubsub.js')();
events.on(
'hello',
function(data){
console.log('hello event recieved ', data);
}
);
events.on(
'*',
function(type){
console.log('Catch all detected event type of : ',type, '. List of all the sent arguments ',arguments);
}
);
/************************************\
* trigger events for testing
* **********************************/
events.trigger(
'hello',
'world'
);

109
node_modules/event-pubsub/event-pubsub-browser.js generated vendored Normal file
View File

@ -0,0 +1,109 @@
window.pubsub=(
function(){
function sub(type,handler){
checkScope.apply(this);
if(!this._events_[type])
this._events_[type]=[];
this._events_[type].push(handler);
}
function unsub(type,handler){
checkScope.apply(this);
if(!this._events_[type])
return;
if(!handler){
delete this._events_[type];
return;
}
for(var i=0,
count=this._events_[type].length;
i<count;
i++){
if(this._events_[type][i]==handler)
delete this._events_[type][i];
return;
}
}
function pub(type){
checkScope.apply(this);
if(this._events_['*'] && type!='*'){
var params=Array.prototype.slice.call(arguments);
params.unshift('*');
this.trigger.apply(this,params);
}
if(!this._events_[type])
return;
for(var i=0,
events=this._events_[type],
count=events.length,
args=Array.prototype.slice.call(arguments,1);
i<count;
i++){
events[i].apply(this, args);
}
}
function checkScope(){
if(!this._events_)
this._events_={};
}
function init(scope){
if(!scope)
return {
on:sub,
off:unsub,
trigger:pub
};
scope.on=(
function(scope){
return function(){
sub.apply(
scope,
Array.prototype.slice.call(arguments)
);
}
}
)(scope);
scope.off=(
function(scope){
return function(){
unsub.apply(
scope,
Array.prototype.slice.call(arguments)
);
}
}
)(scope);
scope.trigger=(
function(scope){
return function(){
pub.apply(
scope,
Array.prototype.slice.call(arguments)
);
}
}
)(scope);
scope._events_={};
}
return init;
}
)();

103
node_modules/event-pubsub/event-pubsub.js generated vendored Normal file
View File

@ -0,0 +1,103 @@
function sub(type,handler){
checkScope.apply(this);
if(!this._events_[type])
this._events_[type]=[];
this._events_[type].push(handler);
}
function unsub(type,handler){
checkScope.apply(this);
if(!this._events_[type])
return;
if(!handler){
delete this._events_[type];
return;
}
for(var i=0,
count=this._events_[type].length;
i<count;
i++){
if(this._events_[type][i]==handler)
delete this._events_[type][i];
return;
}
}
function pub(type){
checkScope.apply(this);
if(this._events_['*'] && type!='*'){
var params=Array.prototype.slice.call(arguments);
params.unshift('*');
this.trigger.apply(this,params);
}
if(!this._events_[type])
return;
for(var i=0,
events=this._events_[type],
count=events.length,
args=Array.prototype.slice.call(arguments,1);
i<count;
i++){
events[i].apply(this, args);
}
}
function checkScope(){
if(!this._events_)
this._events_={};
}
function init(scope){
if(!scope)
return {
on:sub,
off:unsub,
trigger:pub
};
scope.on=(
function(scope){
return function(){
sub.apply(
scope,
Array.prototype.slice.call(arguments)
);
}
}
)(scope);
scope.off=(
function(scope){
return function(){
unsub.apply(
scope,
Array.prototype.slice.call(arguments)
);
}
}
)(scope);
scope.trigger=(
function(scope){
return function(){
pub.apply(
scope,
Array.prototype.slice.call(arguments)
);
}
}
)(scope);
scope._events_={};
}
module.exports=init

15
node_modules/event-pubsub/examples/browser/basic.html generated vendored Normal file
View File

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html>
<head>
<title>Basic PubSub Example</title>
<script src='../../event-pubsub-browser.js'></script>
</head>
<body>
<ul id='events'>
<li>
<h1>PubSub Basic Events Example</h1>
</li>
</ul>
<script src='basic.js'></script>
</body>
</html>

73
node_modules/event-pubsub/examples/browser/basic.js generated vendored Normal file
View File

@ -0,0 +1,73 @@
var events = new window.pubsub();
/************************************\
*
* The events var was instantiated
* as it's own scope
*
* **********************************/
events.on(
'hello',
function(data){
eventLog.log('hello event recieved ', data);
}
);
events.on(
'hello',
function(data){
eventLog.log('Second handler listening to hello event got',data);
events.trigger(
'world',
{
type:'myObject',
data:{
x:'YAY, Objects!'
}
}
)
}
);
events.on(
'world',
function(data){
eventLog.log('World event got',data);
}
);
/**********************************\
*
* Demonstrate * event (on all events)
* remove this for less verbose
* example
*
* ********************************/
events.on(
'*',
function(type){
eventLog.log('Catch all detected event type of : ',type, '. List of all the sent arguments ',arguments);
}
);
/*******************************\
*
* Prep HTML for logging
*
* *****************************/
var eventLog=document.getElementById('events');
//not using console.log incase it doesn't work in some browser. *TLDT (Too lazy didn't test)*
eventLog.log=_log_;
function _log_ (){
var events=Array.prototype.slice.call(arguments),
newEvent=document.createElement('li');
newEvent.innerHTML=events.join(' ');
this.appendChild(newEvent);
}
events.trigger(
'hello',
'world'
);

View File

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html>
<head>
<title>Basic PubSub Example</title>
<script src='../../event-pubsub-browser.js'></script>
</head>
<body>
<ul id='events'>
<li>
<h1>PubSub Multiple Event Scopes Example</h1>
</li>
</ul>
<script src='multipleScopes.js'></script>
</body>
</html>

View File

@ -0,0 +1,103 @@
/************************************\
* instantiating myEvents scope
* **********************************/
var myEvents=new window.pubsub();
/************************************\
* instantiating myEvents2 scope
* **********************************/
var myEvents2=new window.pubsub();
/************************************\
* binding myEvents events
* **********************************/
myEvents.on(
'hello',
function(data){
eventLog.log('myEvents hello event recieved ', data);
}
);
myEvents.on(
'hello',
function(data){
eventLog.log('Second handler listening to myEvents hello event got',data);
myEvents.trigger(
'world',
{
type:'myObject',
data:{
x:'YAY, Objects!'
}
}
)
}
);
myEvents.on(
'world',
function(data){
eventLog.log('myEvents World event got',data);
}
);
/**********************************\
*
* Demonstrate * event (on all events)
* remove this for less verbose
* example
*
* ********************************/
myEvents.on(
'*',
function(type){
eventLog.log('myEvents Catch all detected event type of : ',type, '. List of all the sent arguments ',arguments);
}
);
/************************************\
* binding myEvents2 events
* **********************************/
myEvents2.on(
'hello',
function(data){
eventLog.log('myEvents2 Hello event should never be called ', data);
}
);
myEvents2.on(
'world',
function(data){
eventLog.log('myEvents2 World event ',data);
}
);
/*******************************\
*
* Prep HTML for logging
*
* *****************************/
var eventLog=document.getElementById('events');
//not using console.log incase it doesn't work in some browser. *TLDT (Too lazy didn't test)*
eventLog.log=_log_;
function _log_ (){
var events=Array.prototype.slice.call(arguments),
newEvent=document.createElement('li');
newEvent.innerHTML=events.join(' ');
this.appendChild(newEvent);
}
/************************************\
* trigger events for testing
* **********************************/
myEvents.trigger(
'hello',
'world'
);
myEvents2.trigger(
'world',
'is round'
);

View File

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html>
<head>
<title>Basic PubSub Example</title>
<script src='../../event-pubsub-browser.js'></script>
</head>
<body>
<ul id='events'>
<li>
<h1>PubSub Events inside of and using an Object as the scope Example</h1>
</li>
</ul>
<script src='objectScope.js'></script>
</body>
</html>

View File

@ -0,0 +1,73 @@
/************************************\
*
* The events var was instantiated
* as it's own scope
*
* **********************************/
var thing={
id:'my thing'
}
/******************************\
*
* Create events in the scope
* of the "thing" object
*
* ****************************/
new window.pubsub(thing);
thing.on(
'getID',
function(){
eventLog.log('things id is : ',this.id);
}
);
thing.on(
'setID',
function(id){
eventLog.log('setting id to : ',id);
this.id=id;
this.trigger('getID');
}
);
/**********************************\
*
* Demonstrate * event (on all events)
* remove this for less verbose
* example
*
* ********************************/
thing.on(
'*',
function(type){
eventLog.log('Catch all detected event type of : ',type, '. List of all the sent arguments ',arguments);
}
);
/*******************************\
*
* Prep HTML for logging
*
* *****************************/
var eventLog=document.getElementById('events');
//not using console.log incase it doesn't work in some browser. *TLDT (Too lazy didn't test)*
eventLog.log=_log_;
function _log_ (){
var events=Array.prototype.slice.call(arguments),
newEvent=document.createElement('li');
newEvent.innerHTML=events.join(' ');
this.appendChild(newEvent);
}
/************************************\
* trigger events for testing
* **********************************/
thing.trigger('getID');
thing.trigger(
'setID',
'your thing'
)

60
node_modules/event-pubsub/examples/node/basic.js generated vendored Normal file
View File

@ -0,0 +1,60 @@
var events = new require('../../event-pubsub.js')();
/************************************\
*
* The events var was instantiated
* as it's own scope
*
* **********************************/
events.on(
'hello',
function(data){
console.log('hello event recieved ', data);
}
);
events.on(
'hello',
function(data){
console.log('Second handler listening to hello event got',data);
events.trigger(
'world',
{
type:'myObject',
data:{
x:'YAY, Objects!'
}
}
)
}
);
events.on(
'world',
function(data){
console.log('World event got',data);
}
);
/**********************************\
*
* Demonstrate * event (on all events)
* remove this for less verbose
* example
*
* ********************************/
events.on(
'*',
function(type){
console.log('Catch all detected event type of : ',type, '. List of all the sent arguments ',arguments);
}
);
/************************************\
* trigger events for testing
* **********************************/
events.trigger(
'hello',
'world'
);

View File

@ -0,0 +1,90 @@
var pubsub = require('../../event-pubsub.js');
/************************************\
* instantiating myEvents scope
* **********************************/
var myEvents=new pubsub();
/************************************\
* instantiating myEvents2 scope
* **********************************/
var myEvents2=new pubsub();
/************************************\
* binding myEvents events
* **********************************/
myEvents.on(
'hello',
function(data){
console.log('myEvents hello event recieved ', data);
}
);
myEvents.on(
'hello',
function(data){
console.log('Second handler listening to myEvents hello event got',data);
myEvents.trigger(
'world',
{
type:'myObject',
data:{
x:'YAY, Objects!'
}
}
)
}
);
myEvents.on(
'world',
function(data){
console.log('myEvents World event got',data);
}
);
/**********************************\
*
* Demonstrate * event (on all events)
* remove this for less verbose
* example
*
* ********************************/
myEvents.on(
'*',
function(type){
console.log('myEvents Catch all detected event type of : ',type, '. List of all the sent arguments ',arguments);
}
);
/************************************\
* binding myEvents2 events
* **********************************/
myEvents2.on(
'hello',
function(data){
console.log('myEvents2 Hello event should never be called ', data);
}
);
myEvents2.on(
'world',
function(data){
console.log('myEvents2 World event ',data);
}
);
/************************************\
* trigger events for testing
* **********************************/
myEvents.trigger(
'hello',
'world'
);
myEvents2.trigger(
'world',
'is round'
);

56
node_modules/event-pubsub/examples/node/objectScope.js generated vendored Normal file
View File

@ -0,0 +1,56 @@
var pubsub = require('../../event-pubsub.js');
/************************************\
*
* The events var was instantiated
* as it's own scope
*
* **********************************/
var thing={
id:'my thing'
}
/******************************\
*
* Create events in the scope
* of the "thing" object
*
* ****************************/
new pubsub(thing);
thing.on(
'getID',
function(){
console.log('things id is : ',this.id);
}
);
thing.on(
'setID',
function(id){
console.log('setting id to : ',id);
this.id=id;
this.trigger('getID');
}
);
/**********************************\
*
* Demonstrate * event (on all events)
* remove this for less verbose
* example
*
* ********************************/
thing.on(
'*',
function(type){
console.log('Catch all detected event type of : ',type, '. List of all the sent arguments ',arguments);
}
);
thing.trigger('getID');
thing.trigger(
'setID',
'your thing'
)

35
node_modules/event-pubsub/package.json generated vendored Normal file
View File

@ -0,0 +1,35 @@
{
"name": "event-pubsub",
"version": "1.0.2",
"description": "Pubsub events for Node and the browser allowing event scoping and multiple scopes. Easy for any developer level. No frills, just high speed pubsub events!",
"main": "event-pubsub.js",
"directories": {
"example": "examples"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "https://github.com/RIAEvangelist/event-pubsub.git"
},
"keywords": [
"event",
"events",
"pubsub",
"node",
"browser"
],
"author": {
"name": "Brandon Nozaki Miller"
},
"license": "Unlicense",
"bugs": {
"url": "https://github.com/RIAEvangelist/event-pubsub/issues"
},
"homepage": "https://github.com/RIAEvangelist/event-pubsub",
"readme": "Event PubSub\n============\n\nPubsub events for Node and the browser allowing event scoping and multiple scopes. \nEasy for any developer level. No frills, just high speed pubsub events!\n\n---\n### Basic Examples\n---\n#### Node\n\n var events = new require('../../event-pubsub.js')();\n\n events.on(\n 'hello',\n function(data){\n console.log('hello event recieved ', data);\n }\n );\n \n events.on(\n '*',\n function(type){\n console.log('Catch all detected event type of : ',type, '. List of all the sent arguments ',arguments);\n }\n );\n \n /************************************\\\n * trigger events for testing\n * **********************************/\n events.trigger(\n 'hello',\n 'world'\n );\n\n#### Browser\n##### HTML\n\n var events = new require('../../event-pubsub.js')();\n\n events.on(\n 'hello',\n function(data){\n console.log('hello event recieved ', data);\n }\n );\n \n events.on(\n '*',\n function(type){\n console.log('Catch all detected event type of : ',type, '. List of all the sent arguments ',arguments);\n }\n );\n \n /************************************\\\n * trigger events for testing\n * **********************************/\n events.trigger(\n 'hello',\n 'world'\n );\n",
"readmeFilename": "README.md",
"_id": "event-pubsub@1.0.2",
"_from": "event-pubsub@"
}

33
package.json Normal file
View File

@ -0,0 +1,33 @@
{
"name": "node-ipc",
"version": "0.0.2",
"description": "A nodejs module for local and remote Inter Process Communication (IPC) uses Unix Sockets for local communication avoiding the network card for lower overhead and latency. ## Solid but, ### Still under development and lacking documentation, but useable.",
"main": "node-ipc.js",
"directories": {
"example": "example"
},
"dependencies": {
"event-pubsub": "~1.0.2",
"colors": "~0.6.2"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"IPC",
"inter",
"process",
"communication",
"unix",
"sockets",
"threaded",
"communication",
"multi",
"process",
"shared",
"memory"
],
"author": "Brandon Nozaki Miller",
"license": "Unlicenced"
}