diff --git a/packages/accounts/create/admin.js b/packages/accounts/create/admin.js
index 524cfaf..a5601e6 100644
--- a/packages/accounts/create/admin.js
+++ b/packages/accounts/create/admin.js
@@ -47,7 +47,7 @@ if (Meteor.isClient) {
orion.accounts.invitations.insert({ roles: roles, email: email }, function(error, result) {
if (error) {
alert(error.reason);
- console.log(error);
+ orion.log.error(error);
} else {
Session.set('accounts.create.invitationId', result);
}
@@ -69,7 +69,7 @@ if (Meteor.isClient) {
Meteor.call('accountsCreateUser', options, function(error, result) {
if (error) {
alert(error.reason);
- console.log(error);
+ orion.log.error(error);
} else {
RouterLayer.go('accounts.index');
}
@@ -144,12 +144,12 @@ if (Meteor.isClient) {
}, function(error, result) {
if (error) {
Session.set('registerWithInvitationError', error.reason);
- console.log(error);
+ orion.log.error(error);
} else {
Meteor.loginWithPassword(email, password, function(error) {
if (error) {
Session.set('registerWithInvitationError', error.reason);
- console.log(error);
+ orion.log.error(error);
} else {
RouterLayer.go('admin');
}
diff --git a/packages/accounts/package.js b/packages/accounts/package.js
index 2a7496a..7e13efc 100644
--- a/packages/accounts/package.js
+++ b/packages/accounts/package.js
@@ -1,7 +1,7 @@
Package.describe({
name: 'orionjs:accounts',
summary: 'Orion accounts mannager',
- version: '1.4.2',
+ version: '1.4.3',
git: 'https://github.com/orionjs/orion'
});
@@ -9,13 +9,13 @@ Package.onUse(function(api) {
api.versionsFrom('1.0');
api.use([
- 'orionjs:base@1.4.0',
- 'orionjs:attributes@1.4.0',
+ 'orionjs:base@1.4.2',
+ 'orionjs:attributes@1.4.1',
'accounts-base',
'accounts-password',
'useraccounts:core@1.12.0',
- 'aldeed:simple-schema@1.3.2',
- 'matb33:collection-hooks@0.7.11',
+ 'aldeed:simple-schema@1.3.3',
+ 'matb33:collection-hooks@0.7.13',
'meteorhacks:inject-initial@1.0.2',
]);
diff --git a/packages/attributes/attributes.js b/packages/attributes/attributes.js
index 2eff2b5..0c725ef 100644
--- a/packages/attributes/attributes.js
+++ b/packages/attributes/attributes.js
@@ -18,18 +18,18 @@ orion.attribute = function(name, schema, options) {
if (!_.has(orion.attributes, name)) {
throw 'The attribute "' + name + '" does not exist';
}
- var schema = schema || {};
- var options = options || {};
- var attributeSchema = orion.attributes[name].getSchema.call(this, options);
+ var _schema = schema || {};
+ var _options = options || {};
+ var attributeSchema = orion.attributes[name].getSchema.call(this, _options);
var override = {
orionAttribute: name,
autoform: {
type: 'orion.' + name
}
- }
- var attribute = orion.helpers.deepExtend(orion.helpers.deepExtend(schema, attributeSchema), override);
+ };
+ var attribute = orion.helpers.deepExtend(orion.helpers.deepExtend(_schema, attributeSchema), override);
return attribute;
-}
+};
/**
* Returns proper tabular column for the attribute
@@ -52,12 +52,12 @@ orion.attributeColumn = function(name, key, title) {
item: rowData,
collection: collection,
schema: schema,
- }
+ };
var template = ReactiveTemplates.get('attributePreview.' + name);
Blaze.renderWithData(Template[template], data, cell);
}
- }
-}
+ };
+};
/**
* Helper function to use arrays of attributes (Ex: array of images)
@@ -73,7 +73,7 @@ orion.arrayOfAttribute = function(name, schema, options) {
return orion.helpers.deepExtend(schema, {
type: [subSchema]
});
-}
+};
/**
* Creates a new attribute
@@ -112,4 +112,4 @@ orion.attributes.registerAttribute = function(name, attribute) {
});
});
}
-}
+};
diff --git a/packages/attributes/created-at/created-at.js b/packages/attributes/created-at/created-at.js
index 149ec8f..87c5e97 100644
--- a/packages/attributes/created-at/created-at.js
+++ b/packages/attributes/created-at/created-at.js
@@ -8,9 +8,9 @@ orion.attributes.registerAttribute('createdAt', {
},
autoValue: function() {
if (this.isInsert) {
- return new Date;
+ return new Date();
} else if (this.isUpsert) {
- return {$setOnInsert: new Date};
+ return {$setOnInsert: new Date()};
} else {
this.unset();
}
@@ -25,4 +25,4 @@ if (Meteor.isClient) {
return this.value && moment(this.value).format('LLL');
}
});
-}
\ No newline at end of file
+}
diff --git a/packages/attributes/created-by/created-by.js b/packages/attributes/created-by/created-by.js
index e6428d1..bc67853 100644
--- a/packages/attributes/created-by/created-by.js
+++ b/packages/attributes/created-by/created-by.js
@@ -28,12 +28,12 @@ if (Meteor.isServer) {
}
if (Meteor.isClient) {
ReactiveTemplates.onRendered('attributePreview.createdBy', function() {
- this.subscribe('userProfileForCreatedByAttributeColumn', this.data.value)
+ this.subscribe('userProfileForCreatedByAttributeColumn', this.data.value);
});
ReactiveTemplates.helpers('attributePreview.createdBy', {
name: function() {
- var user = Meteor.users.findOne(this.value)
+ var user = Meteor.users.findOne(this.value);
return user && user.profile.name;
}
});
-}
\ No newline at end of file
+}
diff --git a/packages/attributes/package.js b/packages/attributes/package.js
index 100c268..711b60e 100644
--- a/packages/attributes/package.js
+++ b/packages/attributes/package.js
@@ -1,7 +1,7 @@
Package.describe({
name: 'orionjs:attributes',
summary: 'Orion attributes',
- version: '1.4.0',
+ version: '1.4.1',
git: 'https://github.com/orionjs/orion'
});
@@ -9,10 +9,10 @@ Package.onUse(function(api) {
api.versionsFrom('1.0');
api.use([
- 'orionjs:base@1.4.0',
- 'aldeed:collection2@2.0.0',
+ 'orionjs:base@1.4.2',
+ 'aldeed:collection2@2.3.3',
'aldeed:autoform@5.4.0',
- 'momentjs:moment@2.10.3'
+ 'momentjs:moment@2.10.6'
]);
api.imply([
diff --git a/packages/attributes/updated-at/updated-at.js b/packages/attributes/updated-at/updated-at.js
index 2ad9d75..0ba208f 100644
--- a/packages/attributes/updated-at/updated-at.js
+++ b/packages/attributes/updated-at/updated-at.js
@@ -8,9 +8,9 @@ orion.attributes.registerAttribute('updatedAt', {
},
autoValue: function() {
if (this.isUpdate || this.isInsert) {
- return new Date;
+ return new Date();
} else if (this.isUpsert) {
- return {$setOnInsert: new Date};
+ return {$setOnInsert: new Date()};
} else {
this.unset();
}
@@ -25,4 +25,4 @@ if (Meteor.isClient) {
return this.value && moment(this.value).format('LLL');
}
});
-}
\ No newline at end of file
+}
diff --git a/packages/base/helpers.js b/packages/base/helpers.js
index 3d03a87..5d924ca 100644
--- a/packages/base/helpers.js
+++ b/packages/base/helpers.js
@@ -1,7 +1,7 @@
/**
* Orion Helpers
*/
-orion.helpers = {}
+orion.helpers = {};
/**
* Searchs a object with a givin string
@@ -48,5 +48,5 @@ orion.helpers.deepExtend = function(target, source) {
orion.helpers.getTranslation = function(key) {
return function() {
return i18n(key);
- }
-}
+ };
+};
diff --git a/packages/base/helpers_client.js b/packages/base/helpers_client.js
index 70f8b1d..f1dc857 100644
--- a/packages/base/helpers_client.js
+++ b/packages/base/helpers_client.js
@@ -7,4 +7,4 @@ orion.helpers.getBase64Image = function(file, callback) {
callback(e.target.result);
};
FR.readAsDataURL(file);
-}
+};
diff --git a/packages/base/init.js b/packages/base/init.js
deleted file mode 100644
index 0a490db..0000000
--- a/packages/base/init.js
+++ /dev/null
@@ -1 +0,0 @@
-orion = {};
\ No newline at end of file
diff --git a/packages/base/links.js b/packages/base/links.js
index 4d99e40..725484f 100644
--- a/packages/base/links.js
+++ b/packages/base/links.js
@@ -40,7 +40,7 @@ orion.links.add = function(options) {
}
self._collection.upsert({ identifier: options.identifier }, { $set: options });
});
-}
+};
orion.links.get = function() {
var links = this._collection.find({ index: { $exists: true }, parent: { $exists: false } }, { sort: { index: 1 } }).fetch();
@@ -50,11 +50,11 @@ orion.links.get = function() {
}
return true;
});
-}
+};
orion.links.getLink = function(identifier) {
return this._collection.findOne({ identifier: identifier });
-}
+};
orion.links._collection.helpers({
childs: function() {
@@ -70,8 +70,8 @@ orion.links._collection.helpers({
Template.registerHelper('adminLinks', function() {
return orion.links.get();
-})
+});
Template.registerHelper('getAdminLink', function(identifier) {
return orion.links.getLink(identifier);
-})
+});
diff --git a/packages/base/package.js b/packages/base/package.js
index d52b844..8bb5607 100644
--- a/packages/base/package.js
+++ b/packages/base/package.js
@@ -1,7 +1,7 @@
Package.describe({
name: 'orionjs:base',
summary: 'Orion',
- version: '1.4.1',
+ version: '1.4.2',
git: 'https://github.com/orionjs/orion'
});
@@ -16,7 +16,9 @@ Package.onUse(function(api) {
'nicolaslopezj:roles@1.2.0',
'nicolaslopezj:router-layer@0.0.8',
'aldeed:simple-schema@1.3.3',
- 'orionjs:lang-en@1.4.0'
+ 'orionjs:namespace@1.4.0',
+ 'orionjs:lang-en@1.4.0',
+ 'orionjs:logging@1.4.0'
]);
api.imply([
@@ -30,7 +32,6 @@ Package.onUse(function(api) {
]);
api.addFiles([
- 'init.js',
'helpers.js',
'home-route.js',
'layouts.js',
@@ -39,7 +40,7 @@ Package.onUse(function(api) {
api.addFiles([
'helpers_client.js',
'links.js'
- ], 'client')
+ ], 'client');
api.export('orion');
});
diff --git a/packages/bootstrap/package.js b/packages/bootstrap/package.js
index f866dad..829af08 100644
--- a/packages/bootstrap/package.js
+++ b/packages/bootstrap/package.js
@@ -1,7 +1,7 @@
Package.describe({
name: 'orionjs:bootstrap',
summary: 'A simple theme for orion',
- version: '1.4.0',
+ version: '1.4.1',
git: 'https://github.com/orionjs/orion'
});
@@ -10,10 +10,10 @@ Package.onUse(function(api) {
api.use([
'meteor-platform',
- 'orionjs:core@1.4.0',
+ 'orionjs:core@1.4.1',
'less',
'aldeed:autoform@5.4.0',
- 'aldeed:tabular@1.1.0',
+ 'aldeed:tabular@1.2.0',
'useraccounts:bootstrap@1.11.1'
]);
diff --git a/packages/bootstrap/views/collections/index.js b/packages/bootstrap/views/collections/index.js
index e578c56..c3e6fa2 100644
--- a/packages/bootstrap/views/collections/index.js
+++ b/packages/bootstrap/views/collections/index.js
@@ -21,7 +21,7 @@ Template.orionBootstrapCollectionsIndex.onRendered(function() {
Session.set('orionBootstrapCollectionsIndex_showTable', true);
});
});
-})
+});
Template.orionBootstrapCollectionsIndex.helpers({
showTable: function () {
diff --git a/packages/bootstrap/views/config/update.js b/packages/bootstrap/views/config/update.js
index b7a49cc..c7dd0fa 100644
--- a/packages/bootstrap/views/config/update.js
+++ b/packages/bootstrap/views/config/update.js
@@ -10,7 +10,7 @@ Template.orionBootstrapConfigUpdate.helpers({
class: function() {
return Session.get('configUpdateCurrentCategory') == category ? 'btn-default disabled': 'btn-primary';
}
- }
+ };
});
}
-});
\ No newline at end of file
+});
diff --git a/packages/bootstrap/views/dictionary/update.js b/packages/bootstrap/views/dictionary/update.js
index a353efb..c1509ec 100644
--- a/packages/bootstrap/views/dictionary/update.js
+++ b/packages/bootstrap/views/dictionary/update.js
@@ -10,7 +10,7 @@ Template.orionBootstrapDictionaryUpdate.helpers({
class: function() {
return Session.get('dictionaryUpdateCurrentCategory') == category ? 'btn-default disabled': 'btn-primary';
}
- }
+ };
});
}
-});
\ No newline at end of file
+});
diff --git a/packages/bootstrap/views/sidebar/sidebar.js b/packages/bootstrap/views/sidebar/sidebar.js
index 94bc60c..bd321fa 100644
--- a/packages/bootstrap/views/sidebar/sidebar.js
+++ b/packages/bootstrap/views/sidebar/sidebar.js
@@ -1,6 +1,6 @@
Template.orionBootstrapSidebar.onRendered(function() {
this.autorun(function() {
var depend = orion.links._collection.find().fetch();
- $('.orion-links a[data-toggle="collapse"]').collapse()
- })
-})
+ $('.orion-links a[data-toggle="collapse"]').collapse();
+ });
+});
diff --git a/packages/collections/collections_client.js b/packages/collections/collections_client.js
index 1e2b0c9..0c1f89b 100644
--- a/packages/collections/collections_client.js
+++ b/packages/collections/collections_client.js
@@ -17,12 +17,12 @@ orion.collections.onCreated(function() {
var getCollection = function() {
var collection = null;
try {
- collection = orion.collections.list[RouterLayer.getPath().split('/')[2]]
+ collection = orion.collections.list[RouterLayer.getPath().split('/')[2]];
} catch (e) {
- console.log('Error getting collection', e);
+ orion.log.error('Error getting collection', e);
}
return collection;
- }
+ };
ReactiveTemplates.helpers('collections.' + self.name + '.index', {
collection: function() {
@@ -45,7 +45,7 @@ orion.collections.onCreated(function() {
ReactiveTemplates.helpers('collections.' + self.name + '.update', {
collection: function() {
- return getCollection()
+ return getCollection();
},
item: function() {
return getCollection().findOne(RouterLayer.getParam('_id'));
@@ -73,7 +73,7 @@ orion.collections.onCreated(function() {
var objectId = RouterLayer.getParam('_id');
self.remove(objectId, function(error, result) {
if (error) {
- console.warn('Error while deleting', objectId, 'in collection', getCollection().name, ':', error);
+ orion.log.warn('Error while deleting', objectId, 'in collection', getCollection().name, ':', error);
}
// Only go back to index in case the deletion has been properly achieved
if (result === 1) {
@@ -82,4 +82,4 @@ orion.collections.onCreated(function() {
});
}
});
-})
+});
diff --git a/packages/collections/package.js b/packages/collections/package.js
index 190aa11..70b4b9a 100755
--- a/packages/collections/package.js
+++ b/packages/collections/package.js
@@ -1,7 +1,7 @@
Package.describe({
name: 'orionjs:collections',
summary: 'Meteor collection with some magic',
- version: '1.4.1',
+ version: '1.4.2',
git: 'https://github.com/orionjs/orion'
});
@@ -9,7 +9,7 @@ Package.onUse(function(api) {
api.versionsFrom('1.0');
api.use([
- 'orionjs:base@1.4.1',
+ 'orionjs:base@1.4.2',
'underscore',
'aldeed:simple-schema@1.3.3',
'aldeed:collection2@2.3.3',
diff --git a/packages/config/config_server.js b/packages/config/config_server.js
index 359c061..8758425 100644
--- a/packages/config/config_server.js
+++ b/packages/config/config_server.js
@@ -4,7 +4,7 @@
orion.config.collection.after.update(function (userId, doc, fieldNames, modifier, options) {
// Timeout is necessary to no enter a infinit loop of restarts
Meteor.setTimeout(function () {
- console.log('Updating Orion config');
+ orion.log.info('Updating Orion config');
process.exit();
}, 500);
});
@@ -14,7 +14,7 @@ orion.config.collection.after.update(function (userId, doc, fieldNames, modifier
*/
if (orion.config.collection.find().count() === 0) {
orion.config.collection.insert({}, function(){
- console.log("Orion config initialized");
+ orion.log.info("Orion config initialized");
});
}
diff --git a/packages/config/package.js b/packages/config/package.js
index 40ab75e..317cc20 100644
--- a/packages/config/package.js
+++ b/packages/config/package.js
@@ -1,7 +1,7 @@
Package.describe({
name: 'orionjs:config',
summary: 'Orion Filesystem',
- version: '1.4.0',
+ version: '1.4.1',
git: 'https://github.com/orionjs/orion'
});
@@ -10,7 +10,7 @@ Package.onUse(function(api) {
api.use([
'orionjs:lang-en@1.4.0',
- 'orionjs:base@1.4.0',
+ 'orionjs:base@1.4.2',
'aldeed:simple-schema@1.3.3',
'aldeed:collection2@2.3.3',
'matb33:collection-hooks@0.7.13',
diff --git a/packages/core/package.js b/packages/core/package.js
index 9cad1d8..63fd68e 100644
--- a/packages/core/package.js
+++ b/packages/core/package.js
@@ -1,7 +1,7 @@
Package.describe({
name: 'orionjs:core',
summary: 'Orion',
- version: '1.4.0',
+ version: '1.4.1',
git: 'https://github.com/orionjs/orion'
});
@@ -9,16 +9,17 @@ Package.onUse(function(api) {
api.versionsFrom('1.0');
api.use([
- 'orionjs:base@1.4.0',
- 'orionjs:accounts@1.4.0',
- 'orionjs:config@1.4.0',
- 'orionjs:collections@1.4.0',
- 'orionjs:dictionary@1.4.0',
- 'orionjs:attributes@1.4.0',
+ 'orionjs:base@1.4.2',
+ 'orionjs:accounts@1.4.3',
+ 'orionjs:config@1.4.1',
+ 'orionjs:collections@1.4.2',
+ 'orionjs:dictionary@1.4.1',
+ 'orionjs:attributes@1.4.1',
'orionjs:lang-en@1.4.0'
]);
api.imply([
+ 'orionjs:logging',
'orionjs:lang-en',
'orionjs:base',
'orionjs:accounts',
@@ -26,12 +27,14 @@ Package.onUse(function(api) {
'orionjs:collections',
'orionjs:dictionary',
'orionjs:attributes',
- ]);
+ ]);
api.export('orion');
});
Package.onTest(function(api) {
- api.use('tinytest');
- api.use('orionjs:core');
+ api.use([
+ 'tinytest',
+ 'orionjs:core'
+ ]);
});
diff --git a/packages/dictionary/dictionary_client.js b/packages/dictionary/dictionary_client.js
index f6622cc..7a71aee 100644
--- a/packages/dictionary/dictionary_client.js
+++ b/packages/dictionary/dictionary_client.js
@@ -12,7 +12,7 @@ Template.registerHelper('dict', function(name, defaultValue) {
*/
orion.dictionary.isReady = function() {
return subscription.ready();
-}
+};
/**
* Is the dictionary subscription ready for templates
diff --git a/packages/dictionary/dictionary_server.js b/packages/dictionary/dictionary_server.js
index d9da5b0..4605702 100644
--- a/packages/dictionary/dictionary_server.js
+++ b/packages/dictionary/dictionary_server.js
@@ -4,7 +4,7 @@
if (orion.dictionary.find().count() != 1) {
orion.dictionary.remove({});
orion.dictionary.insert({}, function(){
- console.log("Orion dictionary initialized");
+ orion.log.info('Orion dictionary initialized');
});
}
diff --git a/packages/dictionary/package.js b/packages/dictionary/package.js
index 40c46e0..cbc3b81 100644
--- a/packages/dictionary/package.js
+++ b/packages/dictionary/package.js
@@ -1,7 +1,7 @@
Package.describe({
name: 'orionjs:dictionary',
summary: 'Meteor collection with some magic',
- version: '1.4.0',
+ version: '1.4.1',
git: 'https://github.com/orionjs/orion'
});
@@ -9,7 +9,7 @@ Package.onUse(function(api) {
api.versionsFrom('1.0');
api.use([
- 'orionjs:base@1.4.0',
+ 'orionjs:base@1.4.2',
'aldeed:simple-schema@1.3.3',
'aldeed:collection2@2.3.3',
]);
diff --git a/packages/file-attribute/file.js b/packages/file-attribute/file.js
index e7defd6..aae3750 100644
--- a/packages/file-attribute/file.js
+++ b/packages/file-attribute/file.js
@@ -24,7 +24,7 @@ ReactiveTemplates.events('attribute.file', {
if (upload.ready()) {
if (upload.error) {
Session.set('file' + self.name, null);
- console.log(upload.error);
+ orion.log.error(upload.error);
alert(upload.error.reason);
} else {
Session.set('file' + self.name, {
diff --git a/packages/file-attribute/package.js b/packages/file-attribute/package.js
index 86985f9..3ae2b2a 100644
--- a/packages/file-attribute/package.js
+++ b/packages/file-attribute/package.js
@@ -1,7 +1,7 @@
Package.describe({
name: 'orionjs:file-attribute',
summary: 'File attribute for orion',
- version: '1.4.0',
+ version: '1.4.1',
git: 'http://github.com/orionjs/orion'
});
@@ -9,9 +9,9 @@ Package.onUse(function(api) {
api.versionsFrom('1.0');
api.use([
- 'orionjs:base@1.4.0',
- 'orionjs:attributes@1.4.0',
- 'orionjs:filesystem@1.4.0',
+ 'orionjs:base@1.4.2',
+ 'orionjs:attributes@1.4.1',
+ 'orionjs:filesystem@1.4.1',
'less'
]);
diff --git a/packages/filesystem/package.js b/packages/filesystem/package.js
index ccf45ca..39d3ecd 100644
--- a/packages/filesystem/package.js
+++ b/packages/filesystem/package.js
@@ -1,7 +1,7 @@
Package.describe({
name: 'orionjs:filesystem',
summary: 'Orion Filesystem',
- version: '1.4.0',
+ version: '1.4.1',
git: 'https://github.com/orionjs/orion'
});
@@ -9,7 +9,7 @@ Package.onUse(function(api) {
api.versionsFrom('1.0');
api.use([
- 'orionjs:base@1.4.0',
+ 'orionjs:base@1.4.2',
'aldeed:collection2@2.3.3'
]);
diff --git a/packages/froala/froala.js b/packages/froala/froala.js
index 5ba2ffd..a7e69a3 100644
--- a/packages/froala/froala.js
+++ b/packages/froala/froala.js
@@ -1,6 +1,6 @@
ReactiveTemplates.onRendered('attribute.froala', function () {
var name = this.data.name;
- var parent = $('[data-schema-key="' + name + '"]')
+ var parent = $('[data-schema-key="' + name + '"]');
// Find the element
var element = parent.find('.editor');
// initialize froala
@@ -24,7 +24,7 @@ ReactiveTemplates.onRendered('attribute.froala', function () {
Tracker.autorun(function () {
if (upload.ready()) {
if (upload.error) {
- console.log(upload.error, "error uploading file")
+ orion.log.error(upload.error, 'error uploading file');
} else {
element.editable("insertHTML", "
", true);
}
diff --git a/packages/froala/package.js b/packages/froala/package.js
index e348efc..349257e 100644
--- a/packages/froala/package.js
+++ b/packages/froala/package.js
@@ -1,7 +1,7 @@
Package.describe({
name: 'orionjs:froala',
summary: 'Froala editor for orion',
- version: '1.4.0',
+ version: '1.4.1',
git: 'https://github.com/orionjs/orion'
});
@@ -9,10 +9,10 @@ Package.onUse(function(api) {
api.versionsFrom('1.0');
api.use([
- 'orionjs:base@1.4.0',
- 'orionjs:attributes@1.4.0',
+ 'orionjs:base@1.4.2',
+ 'orionjs:attributes@1.4.1',
'less',
- 'orionjs:filesystem@1.4.0',
+ 'orionjs:filesystem@1.4.1',
'froala:editor@1.2.8',
]);
diff --git a/packages/image-attribute/colibri.js b/packages/image-attribute/colibri.js
index 27aaf8e..d405916 100644
--- a/packages/image-attribute/colibri.js
+++ b/packages/image-attribute/colibri.js
@@ -36,20 +36,20 @@ Colibri = ( function ( ) {
};
var rgbToYuv = function ( rgb ) {
- return [ rgb[ 0 ] * 0.299 + rgb[ 1 ] * 0.587 + rgb[ 2 ] * 0.114
- , rgb[ 0 ] * -0.147 + rgb[ 1 ] * 0.289 + rgb[ 2 ] * 0.436
- , rgb[ 0 ] * 0.615 + rgb[ 1 ] * 0.515 + rgb[ 2 ] * 0.100 ]; };
+ return [ rgb[ 0 ] * 0.299 + rgb[ 1 ] * 0.587 + rgb[ 2 ] * 0.114,
+ rgb[ 0 ] * -0.147 + rgb[ 1 ] * 0.289 + rgb[ 2 ] * 0.436,
+ rgb[ 0 ] * 0.615 + rgb[ 1 ] * 0.515 + rgb[ 2 ] * 0.100 ]; };
var colorDistance = function ( rgb1, rgb2 ) {
var yuv1 = rgbToYuv( rgb1 ), yuv2 = rgbToYuv( rgb2 );
- return sqrt( pow( yuv1[ 0 ] - yuv2[ 0 ] )
- + pow( yuv1[ 1 ] - yuv2[ 1 ] )
- + pow( yuv1[ 2 ] - yuv2[ 2 ] ) ); };
+ return sqrt( pow( yuv1[ 0 ] - yuv2[ 0 ] ) +
+ pow( yuv1[ 1 ] - yuv2[ 1 ] ) +
+ pow( yuv1[ 2 ] - yuv2[ 2 ] ) ); };
var colorBrightness = function ( rgb ) {
- return sqrt( pow( rgb[ 0 ] ) * 0.241
- + pow( rgb[ 1 ] ) * 0.691
- + pow( rgb[ 2 ] ) * 0.068 ); };
+ return sqrt( pow( rgb[ 0 ] ) * 0.241 +
+ pow( rgb[ 1 ] ) * 0.691 +
+ pow( rgb[ 2 ] ) * 0.068 ); };
var gatherSimilarElements = function ( list, comparator ) {
@@ -163,12 +163,12 @@ Colibri = ( function ( ) {
var fullImageData = [ ];
loadDataFromContext( fullImageData, context, 0, 0, canvas.width, canvas.height );
- var backgroundColor = dominantColor( borderImageData, .1 );
- var contentColors = dominantColor( fullImageData, .1, - 1 ).filter( function ( color ) {
- return abs( colorBrightness( backgroundColor ) - colorBrightness( color ) ) > .4;
+ var backgroundColor = dominantColor( borderImageData, 0.1 );
+ var contentColors = dominantColor( fullImageData, 0.1, - 1 ).filter( function ( color ) {
+ return abs( colorBrightness( backgroundColor ) - colorBrightness( color ) ) > 0.4;
} ).reduce( function ( filteredContentColors, currentColor ) {
var previous = filteredContentColors[ filteredContentColors.length - 1 ];
- if ( ! previous || colorDistance( previous, currentColor ) > .3 )
+ if ( ! previous || colorDistance( previous, currentColor ) > 0.3 )
filteredContentColors.push( currentColor );
return filteredContentColors;
}, [ ] );
diff --git a/packages/image-attribute/helper.js b/packages/image-attribute/helper.js
index 7e6b8de..fe2e27c 100644
--- a/packages/image-attribute/helper.js
+++ b/packages/image-attribute/helper.js
@@ -1,5 +1,5 @@
orion.helpers.analizeColorFromBase64 = function(base64) {
- var image = new Image;
+ var image = new Image();
image.src = base64;
var colorInfo = Colibri.extractImageColors(image, 'hex');
var width = image.naturalWidth;
@@ -11,5 +11,5 @@ orion.helpers.analizeColorFromBase64 = function(base64) {
backgroundColor: colorInfo.background,
primaryColor: colorInfo.content[0] || '#ffffff',
secondaryColor: colorInfo.content[1] || colorInfo.content[0] || '#ffffff',
- }
-}
\ No newline at end of file
+ };
+};
diff --git a/packages/image-attribute/image.js b/packages/image-attribute/image.js
index 9db2a43..2309275 100644
--- a/packages/image-attribute/image.js
+++ b/packages/image-attribute/image.js
@@ -52,7 +52,7 @@ ReactiveTemplates.events('attribute.image', {
if (upload.ready()) {
if (upload.error) {
Session.set('image' + self.name, null);
- console.log(upload.error);
+ orion.log.error(upload.error);
alert(upload.error.reason);
} else {
var information = orion.helpers.analizeColorFromBase64(base64);
@@ -68,6 +68,6 @@ ReactiveTemplates.events('attribute.image', {
Tracker.autorun(function () {
Session.set('uploadProgress' + self.name, upload.progress());
});
- })
+ });
}
});
diff --git a/packages/image-attribute/images.js b/packages/image-attribute/images.js
index bef06df..58d3964 100644
--- a/packages/image-attribute/images.js
+++ b/packages/image-attribute/images.js
@@ -44,7 +44,7 @@ ReactiveTemplates.events('attribute.images', {
Tracker.autorun(function () {
if (upload.ready()) {
if (upload.error) {
- console.log(upload.error);
+ orion.log.error(upload.error);
alert(upload.error.reason);
} else {
var information = orion.helpers.analizeColorFromBase64(base64);
@@ -63,6 +63,6 @@ ReactiveTemplates.events('attribute.images', {
event.currentTarget.value = '';
}
});
- })
+ });
}
});
diff --git a/packages/image-attribute/package.js b/packages/image-attribute/package.js
index 99f8884..b57a5b8 100644
--- a/packages/image-attribute/package.js
+++ b/packages/image-attribute/package.js
@@ -1,7 +1,7 @@
Package.describe({
name: 'orionjs:image-attribute',
summary: 'Image attribute for orion',
- version: '1.4.0',
+ version: '1.4.1',
git: 'http://github.com/orionjs/orion'
});
@@ -9,9 +9,9 @@ Package.onUse(function(api) {
api.versionsFrom('1.0');
api.use([
- 'orionjs:base@1.4.0',
- 'orionjs:attributes@1.4.0',
- 'orionjs:filesystem@1.4.0',
+ 'orionjs:base@1.4.2',
+ 'orionjs:attributes@1.4.1',
+ 'orionjs:filesystem@1.4.1',
'less'
]);
diff --git a/packages/lang-en/init.js b/packages/lang-en/init.js
index bd34745..0195098 100644
--- a/packages/lang-en/init.js
+++ b/packages/lang-en/init.js
@@ -1,5 +1,5 @@
-i18n.setDefaultLanguage('en')
-i18n.showMissing('[no translation for "<%= label %>" in <%= language %>]')
+i18n.setDefaultLanguage('en');
+i18n.showMissing('[no translation for "<%= label %>" in <%= language %>]');
if (Meteor.isClient) {
/**
@@ -10,7 +10,7 @@ if (Meteor.isClient) {
language = language.split('-')[0];
i18n.setLanguage(language);
T9n.setLanguage(language);
- }
+ };
/**
* Detects and set the language on startup
@@ -18,4 +18,4 @@ if (Meteor.isClient) {
Meteor.startup(function () {
detectLanguage();
});
-}
\ No newline at end of file
+}
diff --git a/packages/lang-en/package.js b/packages/lang-en/package.js
index b386fbe..8e51c97 100644
--- a/packages/lang-en/package.js
+++ b/packages/lang-en/package.js
@@ -11,7 +11,7 @@ Package.onUse(function(api) {
api.use('anti:i18n@0.4.3');
api.use('softwarerero:accounts-t9n@1.1.3');
- api.imply('anti:i18n@0.4.3');
+ api.imply('anti:i18n');
api.addFiles('init.js');
api.addFiles('en.js');
diff --git a/packages/logging/.npm/package/.gitignore b/packages/logging/.npm/package/.gitignore
new file mode 100644
index 0000000..3c3629e
--- /dev/null
+++ b/packages/logging/.npm/package/.gitignore
@@ -0,0 +1 @@
+node_modules
diff --git a/packages/logging/.npm/package/README b/packages/logging/.npm/package/README
new file mode 100644
index 0000000..3d49255
--- /dev/null
+++ b/packages/logging/.npm/package/README
@@ -0,0 +1,7 @@
+This directory and the files immediately inside it are automatically generated
+when you change this package's NPM dependencies. Commit the files in this
+directory (npm-shrinkwrap.json, .gitignore, and this README) to source control
+so that others run the same versions of sub-dependencies.
+
+You should NOT check in the node_modules directory that Meteor automatically
+creates; if you are using git, the .gitignore file tells git to ignore it.
diff --git a/packages/logging/.npm/package/node_modules/.bin/bunyan b/packages/logging/.npm/package/node_modules/.bin/bunyan
new file mode 120000
index 0000000..3555ac7
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/.bin/bunyan
@@ -0,0 +1 @@
+../bunyan/bin/bunyan
\ No newline at end of file
diff --git a/packages/logging/.npm/package/node_modules/.node_version b/packages/logging/.npm/package/node_modules/.node_version
new file mode 100644
index 0000000..ca7baf6
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/.node_version
@@ -0,0 +1 @@
+v0.10.*
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/.npmignore b/packages/logging/.npm/package/node_modules/bunyan-format/.npmignore
new file mode 100644
index 0000000..d93aea1
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/.npmignore
@@ -0,0 +1 @@
+/assets
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/.travis.yml b/packages/logging/.npm/package/node_modules/bunyan-format/.travis.yml
new file mode 100644
index 0000000..6e5919d
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/.travis.yml
@@ -0,0 +1,3 @@
+language: node_js
+node_js:
+ - "0.10"
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/LICENSE b/packages/logging/.npm/package/node_modules/bunyan-format/LICENSE
new file mode 100644
index 0000000..41702c5
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/LICENSE
@@ -0,0 +1,23 @@
+Copyright 2013 Thorsten Lorenz.
+All rights reserved.
+
+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.
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/README.md b/packages/logging/.npm/package/node_modules/bunyan-format/README.md
new file mode 100644
index 0000000..c5b6cd7
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/README.md
@@ -0,0 +1,65 @@
+# bunyan-format [](http://travis-ci.org/thlorenz/bunyan-format)
+
+Writable stream that formats bunyan records that are piped into it
+
+```js
+var bunyan = require('bunyan')
+ , bformat = require('bunyan-format')
+ , formatOut = bformat({ outputMode: 'short' })
+ ;
+
+var log = bunyan.createLogger({ name: 'app', stream: formatOut, level: 'debug' } );
+
+log.info('starting up');
+log.debug('things are heating up', { temperature: 80, status: { started: 'yes', overheated: 'no' } });
+log.warn('getting a bit hot', { temperature: 120 });
+log.error('OOOOHHH it burns!', new Error('temperature: 200'));
+log.fatal('I died! Do you know what that means???');
+```
+
+* Printing the level in String representation for Json objects
+
+```js
+var bunyan = require('bunyan')
+ , bformat = require('../')
+ , formatOut = bformat({ outputMode: 'bunyan', levelInString: true })
+ ;
+```
+
+The output would use the string levels:
+
+```
+$ node example/json-string-level.js
+{"name":"app","hostname":"ubuntu","pid":28081,"level":"INFO","msg":"starting up","time":"2014-12-01T19:41:29.136Z","v":0}
+{"name":"app","hostname":"ubuntu","pid":28081,"level":"DEBUG","msg":"things are heating up { temperature: 80,\n status: { started: 'yes', overheated: 'no' } }","time":"2014-12-01T19:41:29.142Z","v":0}
+{"name":"app","hostname":"ubuntu","pid":28081,"level":"WARN","msg":"getting a bit hot { temperature: 120 }","time":"2014-12-01T19:41:29.143Z","v":0}
+{"name":"app","hostname":"ubuntu","pid":28081,"level":"ERROR","msg":"OOOOHHH it burns! [Error: temperature: 200]","time":"2014-12-01T19:41:29.144Z","v":0}
+{"name":"app","hostname":"ubuntu","pid":28081,"level":"FATAL","msg":"I died! Do you know what that means???","time":"2014-12-01T19:41:29.144Z","v":0}
+```
+
+
+
+## Installation
+
+ npm install bunyan-format
+
+## API
+
+```
+/**
+ * Creates a writable stream that formats bunyan records written to it.
+ *
+ * @name BunyanFormatWritable
+ * @function
+ * @param opts {Options} passed to bunyan format function
+ * - outputMode: short|long|simple|json|bunyan
+ * - color (true): toggles colors in output
+ * - colorFromLevel: allows overriding log level colors
+ * @param out {Stream} (process.stdout) writable stream to write
+ * @return {WritableStream} that you can pipe bunyan output into
+ */
+```
+
+## License
+
+MIT
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/example/bunyan-string-level.js b/packages/logging/.npm/package/node_modules/bunyan-format/example/bunyan-string-level.js
new file mode 100644
index 0000000..7caa790
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/example/bunyan-string-level.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var bunyan = require('bunyan')
+ , bformat = require('../')
+ , formatOut = bformat({ outputMode: 'bunyan', levelInString: true })
+ ;
+
+var log = bunyan.createLogger({ name: 'app', stream: formatOut, level: 'debug' } );
+
+log.info('starting up');
+log.debug('things are heating up', { temperature: 80, status: { started: 'yes', overheated: 'no' } });
+log.warn('getting a bit hot', { temperature: 120 });
+log.error('OOOOHHH it burns!', new Error('temperature: 200'));
+log.fatal('I died! Do you know what that means???');
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/example/inspect.js b/packages/logging/.npm/package/node_modules/bunyan-format/example/inspect.js
new file mode 100644
index 0000000..7d145ae
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/example/inspect.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var bunyan = require('bunyan')
+ , bformat = require('../')
+ , formatOut = bformat({ outputMode: 'inspect' })
+ ;
+
+var log = bunyan.createLogger({ name: 'app', stream: formatOut, level: 'debug' } );
+
+log.info('starting up');
+log.debug('things are heating up', { temperature: 80, status: { started: 'yes', overheated: 'no' } });
+log.warn('getting a bit hot', { temperature: 120 });
+log.error('OOOOHHH it burns!', new Error('temperature: 200'));
+log.fatal('I died! Do you know what that means???');
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/example/json.js b/packages/logging/.npm/package/node_modules/bunyan-format/example/json.js
new file mode 100644
index 0000000..35fc1c8
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/example/json.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var bunyan = require('bunyan')
+ , bformat = require('../')
+ , formatOut = bformat({ outputMode: 'json', jsonIndent: 2})
+ ;
+
+var log = bunyan.createLogger({ name: 'app', stream: formatOut, level: 'debug' } );
+
+log.info('starting up');
+log.debug('things are heating up', { temperature: 80, status: { started: 'yes', overheated: 'no' } });
+log.warn('getting a bit hot', { temperature: 120 });
+log.error('OOOOHHH it burns!', new Error('temperature: 200'));
+log.fatal('I died! Do you know what that means???');
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/example/long.js b/packages/logging/.npm/package/node_modules/bunyan-format/example/long.js
new file mode 100644
index 0000000..2557e70
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/example/long.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var bunyan = require('bunyan')
+ , bformat = require('../')
+ , formatOut = bformat({ outputMode: 'long' })
+ ;
+
+var log = bunyan.createLogger({ name: 'app', stream: formatOut, level: 'debug' } );
+
+log.info('starting up');
+log.debug('things are heating up', { temperature: 80, status: { started: 'yes', overheated: 'no' } });
+log.warn('getting a bit hot', { temperature: 120 });
+log.error('OOOOHHH it burns!', new Error('temperature: 200'));
+log.fatal('I died! Do you know what that means???');
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/example/short.js b/packages/logging/.npm/package/node_modules/bunyan-format/example/short.js
new file mode 100644
index 0000000..c06c392
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/example/short.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var bunyan = require('bunyan')
+ , bformat = require('../')
+ , formatOut = bformat({ outputMode: 'short' })
+ ;
+
+var log = bunyan.createLogger({ name: 'app', stream: formatOut, level: 'debug' } );
+
+log.info('starting up');
+log.debug('things are heating up', { temperature: 80, status: { started: 'yes', overheated: 'no' } });
+log.warn('getting a bit hot', { temperature: 120 });
+log.error('OOOOHHH it burns!', new Error('temperature: 200'));
+log.fatal('I died! Do you know what that means???');
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/example/simple.js b/packages/logging/.npm/package/node_modules/bunyan-format/example/simple.js
new file mode 100644
index 0000000..242ddd8
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/example/simple.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var bunyan = require('bunyan')
+ , bformat = require('../')
+ , formatOut = bformat({ outputMode: 'simple' })
+ ;
+
+var log = bunyan.createLogger({ name: 'app', stream: formatOut, level: 'debug' } );
+
+log.info('starting up');
+log.debug('things are heating up', { temperature: 80, status: { started: 'yes', overheated: 'no' } });
+log.warn('getting a bit hot', { temperature: 120 });
+log.error('OOOOHHH it burns!', new Error('temperature: 200'));
+log.fatal('I died! Do you know what that means???');
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/index.js b/packages/logging/.npm/package/node_modules/bunyan-format/index.js
new file mode 100644
index 0000000..4ca637e
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/index.js
@@ -0,0 +1,58 @@
+'use strict';
+
+var stream = require('stream');
+var util = require('util');
+var formatRecord = require('./lib/format-record');
+var xtend = require('xtend');
+
+
+var Writable = stream.Writable;
+
+module.exports = BunyanFormatWritable;
+
+util.inherits(BunyanFormatWritable, Writable);
+
+/**
+ * Creates a writable stream that formats bunyan records written to it.
+ *
+ * @name BunyanFormatWritable
+ * @function
+ * @param opts {Options} passed to bunyan format function
+ * - outputMode: short|long|simple|json|bunyan
+ * - color (true): toggles colors in output
+ * - colorFromLevel: allows overriding log level colors
+ * @param out {Stream} (process.stdout) writable stream to write
+ * @return {WritableStream} that you can pipe bunyan output into
+ */
+function BunyanFormatWritable (opts, out) {
+ if (!(this instanceof BunyanFormatWritable)) return new BunyanFormatWritable(opts, out);
+
+ opts = opts || {};
+ opts.objectMode = true;
+ Writable.call(this, opts);
+
+ this.opts = xtend({
+ outputMode: 'short',
+ color: true,
+ colorFromLevel: {
+ 10: 'brightBlack', // TRACE
+ 20: 'brightBlack', // DEBUG
+ 30: 'green', // INFO
+ 40: 'magenta', // WARN
+ 50: 'red', // ERROR
+ 60: 'brightRed', // FATAL
+ }
+ }, opts);
+ this.out = out || process.stdout;
+}
+
+BunyanFormatWritable.prototype._write = function (chunk, encoding, cb) {
+ var rec;
+ try {
+ rec = JSON.parse(chunk);
+ this.out.write(formatRecord(rec, this.opts));
+ } catch (e) {
+ this.out.write(chunk);
+ }
+ cb();
+};
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/lib/format-record.js b/packages/logging/.npm/package/node_modules/bunyan-format/lib/format-record.js
new file mode 100644
index 0000000..12a94d6
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/lib/format-record.js
@@ -0,0 +1,418 @@
+'use strict';
+
+var util = require('util');
+var format = util.format;
+var http = require('http');
+var xtend = require('xtend');
+var ansicolors = require('ansicolors');
+var ansistyles = require('ansistyles');
+
+var styles = xtend(ansistyles, ansicolors);
+
+// Most of this code is lifted directly from the bunyan ./bin file and should be cleaned up once there is more time
+var OM_LONG = 1;
+var OM_JSON = 2;
+var OM_INSPECT = 3;
+var OM_SIMPLE = 4;
+var OM_SHORT = 5;
+var OM_BUNYAN = 6;
+var OM_FROM_NAME = {
+ 'long': OM_LONG,
+ 'json': OM_JSON,
+ 'inspect': OM_INSPECT,
+ 'simple': OM_SIMPLE,
+ 'short': OM_SHORT,
+ 'bunyan': OM_BUNYAN
+};
+
+// Levels
+var TRACE = 10;
+var DEBUG = 20;
+var INFO = 30;
+var WARN = 40;
+var ERROR = 50;
+var FATAL = 60;
+
+var levelFromName = {
+ 'trace': TRACE,
+ 'debug': DEBUG,
+ 'info': INFO,
+ 'warn': WARN,
+ 'error': ERROR,
+ 'fatal': FATAL
+};
+var nameFromLevel = {};
+var upperNameFromLevel = {};
+var upperPaddedNameFromLevel = {};
+Object.keys(levelFromName).forEach(function (name) {
+ var lvl = levelFromName[name];
+ nameFromLevel[lvl] = name;
+ upperNameFromLevel[lvl] = name.toUpperCase();
+ upperPaddedNameFromLevel[lvl] = (
+ name.length === 4 ? ' ' : '') + name.toUpperCase();
+});
+
+
+/**
+ * Is this a valid Bunyan log record.
+ */
+function isValidRecord(rec) {
+ if (rec.v === null ||
+ rec.level === null ||
+ rec.name === null ||
+ rec.hostname === null ||
+ rec.pid === null ||
+ rec.time === null ||
+ rec.msg === null) {
+ // Not valid Bunyan log.
+ return false;
+ } else {
+ return true;
+ }
+}
+
+function indent(s) {
+ return ' ' + s.split(/\r?\n/).join('\n ');
+}
+
+function stylizeWithColor(s, color) {
+ if (!s) return '';
+ var fn = styles[color];
+ return fn ? fn(s) : s;
+}
+
+function stylizeWithoutColor(str, color) {
+ return str;
+}
+
+/**
+ * @param {int} level is the level of the record.
+ * @return The level value to its String representation.
+ * This is only used on json-related formats output and first suggested at
+ * https://github.com/trentm/node-bunyan/issues/194#issuecomment-64858117
+ */
+function mapLevelToName(level) {
+ switch (level) {
+ case TRACE:
+ return 'TRACE';
+ case DEBUG:
+ return 'DEBUG';
+ case INFO:
+ return 'INFO';
+ case WARN:
+ return 'WARN';
+ case ERROR:
+ return 'ERROR';
+ case FATAL:
+ return 'FATAL';
+ }
+}
+
+/**
+ * Print out a single result, considering input options.
+ */
+module.exports = function formatRecord(rec, opts) {
+
+ function _res(res) {
+ var s = '';
+ if (res.header) {
+ s += res.header.trimRight();
+ } else if (res.headers) {
+ if (res.statusCode) {
+ s += format('HTTP/1.1 %s %s\n', res.statusCode,
+ http.STATUS_CODES[res.statusCode]);
+ }
+ var headers = res.headers;
+ s += Object.keys(headers).map(
+ function (h) { return h + ': ' + headers[h]; }).join('\n');
+ }
+ delete res.header;
+ delete res.headers;
+ delete res.statusCode;
+ if (res.body) {
+ s += '\n\n' + (typeof (res.body) === 'object'
+ ? JSON.stringify(res.body, null, 2) : res.body);
+ delete res.body;
+ }
+ if (res.trailer) {
+ s += '\n' + res.trailer;
+ }
+ delete res.trailer;
+ if (s) {
+ details.push(indent(s));
+ }
+ // E.g. for extra 'foo' field on 'res', add 'res.foo' at
+ // top-level. This *does* have the potential to stomp on a
+ // literal 'res.foo' key.
+ Object.keys(res).forEach(function (k) {
+ rec['res.' + k] = res[k];
+ });
+ }
+
+ var short = false;
+ var time;
+ var line = rec.line;
+ var stylize = opts.color ? stylizeWithColor : stylizeWithoutColor;
+ var outputMode = isNaN(opts.outputMode) ? OM_FROM_NAME[opts.outputMode] : opts.outputMode;
+
+ switch (outputMode) {
+ case OM_SHORT:
+ short = true;
+ /* falls through */
+ case OM_LONG:
+ // [time] LEVEL: name[/comp]/pid on hostname (src): msg* (extras...)
+ // msg*
+ // --
+ // long and multi-line extras
+ // ...
+ // If 'msg' is single-line, then it goes in the top line.
+ // If 'req', show the request.
+ // If 'res', show the response.
+ // If 'err' and 'err.stack' then show that.
+ if (!isValidRecord(rec)) {
+ return line + '\n';
+ }
+
+ delete rec.v;
+
+ /*
+ * We assume the Date is formatted according to ISO8601, in which
+ * case we can safely chop off the date information.
+ */
+ if (short && rec.time[10] == 'T') {
+ time = rec.time.substr(11);
+ time = stylize(time, 'brightBlack');
+ } else {
+ time = stylize('[' + rec.time + ']', 'brightBlack');
+ }
+
+ delete rec.time;
+
+ var nameStr = rec.name;
+ delete rec.name;
+
+ if (rec.component) {
+ nameStr += '/' + rec.component;
+ }
+ delete rec.component;
+
+ if (!short)
+ nameStr += '/' + rec.pid;
+ delete rec.pid;
+
+ var level = (upperPaddedNameFromLevel[rec.level] || 'LVL' + rec.level);
+ if (opts.color) {
+ var colorFromLevel = opts.colorFromLevel || {
+ 10: 'brightBlack', // TRACE
+ 20: 'brightBlack', // DEBUG
+ 30: 'cyan', // INFO
+ 40: 'magenta', // WARN
+ 50: 'red', // ERROR
+ 60: 'inverse', // FATAL
+ };
+ level = stylize(level, colorFromLevel[rec.level]);
+ }
+ delete rec.level;
+
+ var src = '';
+ var s;
+ var headers;
+ var hostHeaderLine = '';
+ if (rec.src && rec.src.file) {
+ s = rec.src;
+ if (s.func) {
+ src = format(' (%s:%d in %s)', s.file, s.line, s.func);
+ } else {
+ src = format(' (%s:%d)', s.file, s.line);
+ }
+ src = stylize(src, 'green');
+ }
+ delete rec.src;
+
+ var hostname = rec.hostname;
+ delete rec.hostname;
+
+ var extras = [];
+ var details = [];
+
+ if (rec.req_id) {
+ extras.push('req_id=' + rec.req_id);
+ }
+ delete rec.req_id;
+
+ var onelineMsg;
+ if (rec.msg.indexOf('\n') !== -1) {
+ onelineMsg = '';
+ details.push(indent(stylize(rec.msg, 'cyan')));
+ } else {
+ onelineMsg = ' ' + stylize(rec.msg, 'cyan');
+ }
+ delete rec.msg;
+
+ if (rec.req && typeof (rec.req) === 'object') {
+ var req = rec.req;
+ delete rec.req;
+ headers = req.headers;
+ s = format('%s %s HTTP/%s%s', req.method,
+ req.url,
+ req.httpVersion || '1.1',
+ (headers ?
+ '\n' + Object.keys(headers).map(function (h) {
+ return h + ': ' + headers[h];
+ }).join('\n') :
+ '')
+ );
+ delete req.url;
+ delete req.method;
+ delete req.httpVersion;
+ delete req.headers;
+ if (req.body) {
+ s += '\n\n' + (typeof (req.body) === 'object'
+ ? JSON.stringify(req.body, null, 2) : req.body);
+ delete req.body;
+ }
+ if (req.trailers && Object.keys(req.trailers) > 0) {
+ s += '\n' + Object.keys(req.trailers).map(function (t) {
+ return t + ': ' + req.trailers[t];
+ }).join('\n');
+ }
+ delete req.trailers;
+ details.push(indent(s));
+ // E.g. for extra 'foo' field on 'req', add 'req.foo' at
+ // top-level. This *does* have the potential to stomp on a
+ // literal 'req.foo' key.
+ Object.keys(req).forEach(function (k) {
+ rec['req.' + k] = req[k];
+ })
+ }
+
+ if (rec.client_req && typeof (rec.client_req) === 'object') {
+ var client_req = rec.client_req;
+ delete rec.client_req;
+ headers = client_req.headers;
+ s = '';
+ if (client_req.address) {
+ hostHeaderLine = 'Host: ' + client_req.address;
+ if (client_req.port)
+ hostHeaderLine += ':' + client_req.port;
+ hostHeaderLine += '\n';
+ }
+ delete client_req.headers;
+ delete client_req.address;
+ delete client_req.port;
+ s += format('%s %s HTTP/%s\n%s%s', client_req.method,
+ client_req.url,
+ client_req.httpVersion || '1.1',
+ hostHeaderLine,
+ (headers ?
+ Object.keys(headers).map(
+ function (h) {
+ return h + ': ' + headers[h];
+ }).join('\n') :
+ ''));
+ delete client_req.method;
+ delete client_req.url;
+ delete client_req.httpVersion;
+ if (client_req.body) {
+ s += '\n\n' + (typeof (client_req.body) === 'object' ?
+ JSON.stringify(client_req.body, null, 2) :
+ client_req.body);
+ delete client_req.body;
+ }
+ // E.g. for extra 'foo' field on 'client_req', add
+ // 'client_req.foo' at top-level. This *does* have the potential
+ // to stomp on a literal 'client_req.foo' key.
+ Object.keys(client_req).forEach(function (k) {
+ rec['client_req.' + k] = client_req[k];
+ })
+ details.push(indent(s));
+ }
+
+
+ if (rec.res && typeof (rec.res) === 'object') {
+ _res(rec.res);
+ delete rec.res;
+ }
+ if (rec.client_res && typeof (rec.client_res) === 'object') {
+ _res(rec.client_res);
+ delete rec.res;
+ }
+
+ if (rec.err && rec.err.stack) {
+ details.push(indent(rec.err.stack));
+ delete rec.err;
+ }
+
+ var leftover = Object.keys(rec);
+ for (var i = 0; i < leftover.length; i++) {
+ var key = leftover[i];
+ var value = rec[key];
+ var stringified = false;
+ if (typeof (value) !== 'string') {
+ value = JSON.stringify(value, null, 2);
+ stringified = true;
+ }
+ if (value.indexOf('\n') !== -1 || value.length > 50) {
+ details.push(indent(key + ': ' + value));
+ } else if (!stringified && (value.indexOf(' ') != -1 ||
+ value.length === 0))
+ {
+ extras.push(key + '=' + JSON.stringify(value));
+ } else {
+ extras.push(key + '=' + value);
+ }
+ }
+
+ extras = stylize(
+ (extras.length ? ' (' + extras.join(', ') + ')' : ''), 'brightBlack');
+ details = stylize(
+ (details.length ? details.join('\n --\n') + '\n' : ''), 'brightBlack');
+ if (!short)
+ return format('%s %s: %s on %s%s:%s%s\n%s',
+ time,
+ level,
+ nameStr,
+ hostname || '',
+ src,
+ onelineMsg,
+ extras,
+ details);
+ else
+ return format('%s %s %s:%s%s\n%s',
+ time,
+ level,
+ nameStr,
+ onelineMsg,
+ extras,
+ details);
+ break;
+
+ case OM_INSPECT:
+ return util.inspect(rec, false, Infinity, true) + '\n';
+
+ case OM_BUNYAN:
+ if (opts.levelInString) {
+ rec.level = mapLevelToName(rec.level);
+ }
+ return JSON.stringify(rec, null, 0) + '\n';
+
+ case OM_JSON:
+ if (opts.levelInString) {
+ rec.level = mapLevelToName(rec.level);
+ }
+ return JSON.stringify(rec, null, opts.jsonIndent) + '\n';
+
+ case OM_SIMPLE:
+ /* JSSTYLED */
+ //
+ if (!isValidRecord(rec)) {
+ return line + '\n';
+ }
+ return format('%s - %s\n',
+ upperNameFromLevel[rec.level] || 'LVL' + rec.level,
+ rec.msg);
+ default:
+ throw new Error('unknown output mode: '+opts.outputMode);
+ }
+}
+
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/.npmignore b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/.npmignore
new file mode 100644
index 0000000..a72b52e
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/.npmignore
@@ -0,0 +1,15 @@
+lib-cov
+*.seed
+*.log
+*.csv
+*.dat
+*.out
+*.pid
+*.gz
+
+pids
+logs
+results
+
+npm-debug.log
+node_modules
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/.travis.yml b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/.travis.yml
new file mode 100644
index 0000000..895dbd3
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - 0.6
+ - 0.8
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/LICENSE b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/LICENSE
new file mode 100644
index 0000000..41702c5
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/LICENSE
@@ -0,0 +1,23 @@
+Copyright 2013 Thorsten Lorenz.
+All rights reserved.
+
+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.
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/README.md b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/README.md
new file mode 100644
index 0000000..30b6a52
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/README.md
@@ -0,0 +1,42 @@
+# ansicolors [](http://next.travis-ci.org/thlorenz/ansicolors)
+
+Functions that surround a string with ansicolor codes so it prints in color.
+
+## Installation
+
+ npm install ansicolors
+
+## Usage
+
+```js
+var colors = require('ansicolors');
+
+// foreground colors
+var redHerring = colors.red('herring');
+var blueMoon = colors.blue('moon');
+var brighBlueMoon = colors.brightBlue('moon');
+
+console.log(redHerring); // this will print 'herring' in red
+console.log(blueMoon); // this 'moon' in blue
+console.log(brightBlueMoon); // I think you got the idea
+
+// background colors
+console.log(colors.bgYellow('printed on yellow background'));
+console.log(colors.bgBrightBlue('printed on bright blue background'));
+
+// mixing background and foreground colors
+// below two lines have same result (order in which bg and fg are combined doesn't matter)
+console.log(colors.bgYellow(colors.blue('printed on yellow background in blue')));
+console.log(colors.blue(colors.bgYellow('printed on yellow background in blue')));
+```
+
+## Tests
+
+Look at the [tests](https://github.com/thlorenz/ansicolors/blob/master/test/ansicolors.js) to see more examples and/or run them via:
+
+ npm explore ansicolors && npm test
+
+## Alternatives
+
+**ansicolors** tries to meet simple use cases with a very simple API. However, if you need a more powerful ansi formatting tool,
+I'd suggest to look at the [features](https://github.com/TooTallNate/ansi.js#features) of the [ansi module](https://github.com/TooTallNate/ansi.js).
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/ansicolors.js b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/ansicolors.js
new file mode 100644
index 0000000..b0e18f6
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/ansicolors.js
@@ -0,0 +1,55 @@
+// ColorCodes explained: http://www.termsys.demon.co.uk/vtansi.htm
+'use strict';
+
+var colorNums = {
+ white : 37
+ , black : 30
+ , blue : 34
+ , cyan : 36
+ , green : 32
+ , magenta : 35
+ , red : 31
+ , yellow : 33
+ , brightBlack : 90
+ , brightRed : 91
+ , brightGreen : 92
+ , brightYellow : 93
+ , brightBlue : 94
+ , brightMagenta : 95
+ , brightCyan : 96
+ , brightWhite : 97
+ }
+ , backgroundColorNums = {
+ bgBlack : 40
+ , bgRed : 41
+ , bgGreen : 42
+ , bgYellow : 43
+ , bgBlue : 44
+ , bgMagenta : 45
+ , bgCyan : 46
+ , bgWhite : 47
+ , bgBrightBlack : 100
+ , bgBrightRed : 101
+ , bgBrightGreen : 102
+ , bgBrightYellow : 103
+ , bgBrightBlue : 104
+ , bgBrightMagenta : 105
+ , bgBrightCyan : 106
+ , bgBrightWhite : 107
+ }
+ , colors = {};
+
+
+Object.keys(colorNums).forEach(function (k) {
+ colors[k] = function (s) {
+ return '\u001b[' + colorNums[k] + 'm' + s + '\u001b[39m';
+ };
+});
+
+Object.keys(backgroundColorNums).forEach(function (k) {
+ colors[k] = function (s) {
+ return '\u001b[' + backgroundColorNums[k] + 'm' + s + '\u001b[49m';
+ };
+});
+
+module.exports = colors;
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/package.json b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/package.json
new file mode 100644
index 0000000..03f6d3a
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "ansicolors",
+ "version": "0.2.1",
+ "description": "Functions that surround a string with ansicolor codes so it prints in color.",
+ "main": "ansicolors.js",
+ "scripts": {
+ "test": "node test/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/thlorenz/ansicolors.git"
+ },
+ "keywords": [
+ "ansi",
+ "colors",
+ "highlight",
+ "string"
+ ],
+ "author": {
+ "name": "Thorsten Lorenz",
+ "email": "thlorenz@gmx.de",
+ "url": "thlorenz.com"
+ },
+ "license": "MIT",
+ "readmeFilename": "README.md",
+ "gitHead": "858847ca28e8b360d9b70eee0592700fa2ab087d",
+ "readme": "# ansicolors [](http://next.travis-ci.org/thlorenz/ansicolors)\n\nFunctions that surround a string with ansicolor codes so it prints in color.\n\n## Installation\n\n npm install ansicolors\n\n## Usage\n\n```js\nvar colors = require('ansicolors');\n\n// foreground colors\nvar redHerring = colors.red('herring');\nvar blueMoon = colors.blue('moon');\nvar brighBlueMoon = colors.brightBlue('moon');\n\nconsole.log(redHerring); // this will print 'herring' in red\nconsole.log(blueMoon); // this 'moon' in blue\nconsole.log(brightBlueMoon); // I think you got the idea\n\n// background colors\nconsole.log(colors.bgYellow('printed on yellow background'));\nconsole.log(colors.bgBrightBlue('printed on bright blue background'));\n\n// mixing background and foreground colors\n// below two lines have same result (order in which bg and fg are combined doesn't matter)\nconsole.log(colors.bgYellow(colors.blue('printed on yellow background in blue')));\nconsole.log(colors.blue(colors.bgYellow('printed on yellow background in blue')));\n```\n\n## Tests\n\nLook at the [tests](https://github.com/thlorenz/ansicolors/blob/master/test/ansicolors.js) to see more examples and/or run them via: \n\n npm explore ansicolors && npm test\n\n## Alternatives\n\n**ansicolors** tries to meet simple use cases with a very simple API. However, if you need a more powerful ansi formatting tool, \nI'd suggest to look at the [features](https://github.com/TooTallNate/ansi.js#features) of the [ansi module](https://github.com/TooTallNate/ansi.js).\n",
+ "_id": "ansicolors@0.2.1",
+ "dist": {
+ "shasum": "be089599097b74a5c9c4a84a0cdbcdb62bd87aef",
+ "tarball": "http://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz"
+ },
+ "_npmVersion": "1.1.69",
+ "_npmUser": {
+ "name": "thlorenz",
+ "email": "thlorenz@gmx.de"
+ },
+ "maintainers": [
+ {
+ "name": "thlorenz",
+ "email": "thlorenz@gmx.de"
+ }
+ ],
+ "directories": {},
+ "_shasum": "be089599097b74a5c9c4a84a0cdbcdb62bd87aef",
+ "_resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz",
+ "_from": "ansicolors@~0.2.1",
+ "bugs": {
+ "url": "https://github.com/thlorenz/ansicolors/issues"
+ },
+ "homepage": "https://github.com/thlorenz/ansicolors"
+}
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/test/ansicolors.js b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/test/ansicolors.js
new file mode 100644
index 0000000..46aec3e
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansicolors/test/ansicolors.js
@@ -0,0 +1,55 @@
+'use strict';
+
+var assert = require('assert')
+ , colors = require('..');
+
+console.log('Foreground colors ..');
+
+assert.equal(colors.white('printed in white'), '\u001b[37mprinted in white\u001b[39m');
+
+assert.equal(colors.black('printed in black'), '\u001b[30mprinted in black\u001b[39m');
+assert.equal(colors.brightBlack('printed in bright black'), '\u001b[90mprinted in bright black\u001b[39m');
+
+assert.equal(colors.green('printed in green'), '\u001b[32mprinted in green\u001b[39m');
+assert.equal(colors.brightGreen('printed in bright green'), '\u001b[92mprinted in bright green\u001b[39m');
+
+assert.equal(colors.red('printed in red'), '\u001b[31mprinted in red\u001b[39m');
+assert.equal(colors.brightRed('printed in bright red'), '\u001b[91mprinted in bright red\u001b[39m');
+
+console.log('OK');
+
+console.log('Background colors ..');
+
+assert.equal(
+ colors.bgBlack('printed with black background')
+ , '\u001b[40mprinted with black background\u001b[49m'
+);
+
+assert.equal(
+ colors.bgYellow('printed with yellow background')
+ , '\u001b[43mprinted with yellow background\u001b[49m'
+);
+assert.equal(
+ colors.bgBrightYellow('printed with bright yellow background')
+ , '\u001b[103mprinted with bright yellow background\u001b[49m'
+);
+
+assert.equal(
+ colors.bgWhite('printed with white background')
+ , '\u001b[47mprinted with white background\u001b[49m'
+);
+
+console.log('OK');
+
+console.log('Mixing background and foreground colors ..');
+
+assert.equal(
+ colors.blue(colors.bgYellow('printed in blue with yellow background'))
+ , '\u001b[34m\u001b[43mprinted in blue with yellow background\u001b[49m\u001b[39m'
+);
+assert.equal(
+ colors.bgYellow(colors.blue('printed in blue with yellow background again'))
+ , '\u001b[43m\u001b[34mprinted in blue with yellow background again\u001b[39m\u001b[49m'
+);
+
+console.log('OK');
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansistyles/LICENSE b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansistyles/LICENSE
new file mode 100644
index 0000000..41702c5
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansistyles/LICENSE
@@ -0,0 +1,23 @@
+Copyright 2013 Thorsten Lorenz.
+All rights reserved.
+
+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.
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansistyles/README.md b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansistyles/README.md
new file mode 100644
index 0000000..e39b8df
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansistyles/README.md
@@ -0,0 +1,71 @@
+# ansistyles [](http://next.travis-ci.org/thlorenz/ansistyles)
+
+Functions that surround a string with ansistyle codes so it prints in style.
+
+In case you need colors, like `red`, have a look at [ansicolors](https://github.com/thlorenz/ansicolors).
+
+## Installation
+
+ npm install ansistyles
+
+## Usage
+
+```js
+var styles = require('ansistyles');
+
+console.log(styles.bright('hello world')); // prints hello world in 'bright' white
+console.log(styles.underline('hello world')); // prints hello world underlined
+console.log(styles.inverse('hello world')); // prints hello world black on white
+```
+
+## Combining with ansicolors
+
+Get the ansicolors module:
+
+ npm install ansicolors
+
+```js
+var styles = require('ansistyles')
+ , colors = require('ansicolors');
+
+ console.log(
+ // prints hello world underlined in blue on a green background
+ colors.bgGreen(colors.blue(styles.underline('hello world')))
+ );
+```
+
+## Tests
+
+Look at the [tests](https://github.com/thlorenz/ansistyles/blob/master/test/ansistyles.js) to see more examples and/or run them via:
+
+ npm explore ansistyles && npm test
+
+## More Styles
+
+As you can see from [here](https://github.com/thlorenz/ansistyles/blob/master/ansistyles.js#L4-L15), more styles are available,
+but didn't have any effect on the terminals that I tested on Mac Lion and Ubuntu Linux.
+
+I included them for completeness, but didn't show them in the examples because they seem to have no effect.
+
+### reset
+
+A style reset function is also included, please note however that this is not nestable.
+
+Therefore the below only underlines `hell` only, but not `world`.
+
+```js
+console.log(styles.underline('hell' + styles.reset('o') + ' world'));
+```
+
+It is essentially the same as:
+
+```js
+console.log(styles.underline('hell') + styles.reset('') + 'o world');
+```
+
+
+
+## Alternatives
+
+**ansistyles** tries to meet simple use cases with a very simple API. However, if you need a more powerful ansi formatting tool,
+I'd suggest to look at the [features](https://github.com/TooTallNate/ansi.js#features) of the [ansi module](https://github.com/TooTallNate/ansi.js).
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansistyles/ansistyles.js b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansistyles/ansistyles.js
new file mode 100644
index 0000000..5b8788c
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansistyles/ansistyles.js
@@ -0,0 +1,38 @@
+'use strict';
+
+/*
+ * Info: http://www.termsys.demon.co.uk/vtansi.htm#colors
+ * Following caveats
+ * bright - brightens the color (bold-blue is same as brigthtBlue)
+ * dim - nothing on Mac or Linux
+ * italic - nothing on Mac or Linux
+ * underline - underlines string
+ * blink - nothing on Mac or linux
+ * inverse - background becomes foreground and vice versa
+ *
+ * In summary, the only styles that work are:
+ * - bright, underline and inverse
+ * - the others are only included for completeness
+ */
+
+var styleNums = {
+ reset : [0, 22]
+ , bright : [1, 22]
+ , dim : [2, 22]
+ , italic : [3, 23]
+ , underline : [4, 24]
+ , blink : [5, 25]
+ , inverse : [7, 27]
+ }
+ , styles = {}
+ ;
+
+Object.keys(styleNums).forEach(function (k) {
+ styles[k] = function (s) {
+ var open = styleNums[k][0]
+ , close = styleNums[k][1];
+ return '\u001b[' + open + 'm' + s + '\u001b[' + close + 'm';
+ };
+});
+
+module.exports = styles;
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansistyles/package.json b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansistyles/package.json
new file mode 100644
index 0000000..af77053
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansistyles/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "ansistyles",
+ "version": "0.1.3",
+ "description": "Functions that surround a string with ansistyle codes so it prints in style.",
+ "main": "ansistyles.js",
+ "scripts": {
+ "test": "node test/ansistyles.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/thlorenz/ansistyles.git"
+ },
+ "keywords": [
+ "ansi",
+ "style",
+ "terminal",
+ "console"
+ ],
+ "author": {
+ "name": "Thorsten Lorenz",
+ "email": "thlorenz@gmx.de",
+ "url": "thlorenz.com"
+ },
+ "license": "MIT",
+ "readmeFilename": "README.md",
+ "gitHead": "27bf1bc65231bcc7fd109bf13b13601b51f8cd04",
+ "readme": "# ansistyles [](http://next.travis-ci.org/thlorenz/ansistyles)\n\nFunctions that surround a string with ansistyle codes so it prints in style.\n\nIn case you need colors, like `red`, have a look at [ansicolors](https://github.com/thlorenz/ansicolors).\n\n## Installation\n\n npm install ansistyles\n\n## Usage\n\n```js\nvar styles = require('ansistyles');\n\nconsole.log(styles.bright('hello world')); // prints hello world in 'bright' white\nconsole.log(styles.underline('hello world')); // prints hello world underlined\nconsole.log(styles.inverse('hello world')); // prints hello world black on white\n```\n\n## Combining with ansicolors\n\nGet the ansicolors module:\n\n npm install ansicolors\n\n```js\nvar styles = require('ansistyles')\n , colors = require('ansicolors');\n\n console.log(\n // prints hello world underlined in blue on a green background\n colors.bgGreen(colors.blue(styles.underline('hello world'))) \n );\n```\n\n## Tests\n\nLook at the [tests](https://github.com/thlorenz/ansistyles/blob/master/test/ansistyles.js) to see more examples and/or run them via: \n\n npm explore ansistyles && npm test\n\n## More Styles\n\nAs you can see from [here](https://github.com/thlorenz/ansistyles/blob/master/ansistyles.js#L4-L15), more styles are available,\nbut didn't have any effect on the terminals that I tested on Mac Lion and Ubuntu Linux.\n\nI included them for completeness, but didn't show them in the examples because they seem to have no effect.\n\n### reset\n\nA style reset function is also included, please note however that this is not nestable.\n\nTherefore the below only underlines `hell` only, but not `world`.\n\n```js\nconsole.log(styles.underline('hell' + styles.reset('o') + ' world'));\n```\n\nIt is essentially the same as:\n\n```js\nconsole.log(styles.underline('hell') + styles.reset('') + 'o world');\n```\n\n\n\n## Alternatives\n\n**ansistyles** tries to meet simple use cases with a very simple API. However, if you need a more powerful ansi formatting tool, \nI'd suggest to look at the [features](https://github.com/TooTallNate/ansi.js#features) of the [ansi module](https://github.com/TooTallNate/ansi.js).\n",
+ "bugs": {
+ "url": "https://github.com/thlorenz/ansistyles/issues"
+ },
+ "_id": "ansistyles@0.1.3",
+ "dist": {
+ "shasum": "5de60415bda071bb37127854c864f41b23254539",
+ "tarball": "http://registry.npmjs.org/ansistyles/-/ansistyles-0.1.3.tgz"
+ },
+ "_from": "ansistyles@~0.1.1",
+ "_npmVersion": "1.3.11",
+ "_npmUser": {
+ "name": "thlorenz",
+ "email": "thlorenz@gmx.de"
+ },
+ "maintainers": [
+ {
+ "name": "thlorenz",
+ "email": "thlorenz@gmx.de"
+ }
+ ],
+ "directories": {},
+ "_shasum": "5de60415bda071bb37127854c864f41b23254539",
+ "_resolved": "https://registry.npmjs.org/ansistyles/-/ansistyles-0.1.3.tgz",
+ "homepage": "https://github.com/thlorenz/ansistyles"
+}
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansistyles/test/ansistyles.js b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansistyles/test/ansistyles.js
new file mode 100644
index 0000000..f769bf8
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/ansistyles/test/ansistyles.js
@@ -0,0 +1,15 @@
+'use strict';
+/*jshint asi: true */
+var assert = require('assert')
+ , styles = require('../')
+
+function inspect(obj, depth) {
+ console.log(require('util').inspect(obj, false, depth || 5, true));
+}
+
+assert.equal(styles.reset('reset'), '\u001b[0mreset\u001b[22m', 'reset')
+assert.equal(styles.underline('underlined'), '\u001b[4munderlined\u001b[24m', 'underline')
+assert.equal(styles.bright('bright'), '\u001b[1mbright\u001b[22m', 'bright')
+assert.equal(styles.inverse('inversed'), '\u001b[7minversed\u001b[27m', 'inverse')
+
+console.log('OK');
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/.npmignore b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/.npmignore
new file mode 100644
index 0000000..3c3629e
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/.npmignore
@@ -0,0 +1 @@
+node_modules
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/LICENCE b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/LICENCE
new file mode 100644
index 0000000..a23e08a
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/LICENCE
@@ -0,0 +1,19 @@
+Copyright (c) 2012 Raynos.
+
+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.
\ No newline at end of file
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/Makefile b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/Makefile
new file mode 100644
index 0000000..d583fcf
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/Makefile
@@ -0,0 +1,4 @@
+browser:
+ node ./support/compile
+
+.PHONY: browser
\ No newline at end of file
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/README.md b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/README.md
new file mode 100644
index 0000000..389adae
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/README.md
@@ -0,0 +1,27 @@
+# xtend
+
+[![browser support][3]][4]
+
+Extend like a boss
+
+xtend is a basic utility library which allows you to extend an object by appending all of the properties from each object in a list. When there are identical properties, the right-most property takes presedence.
+
+## Examples
+
+```js
+var extend = require("xtend")
+
+var combination = extend({
+ a: "a"
+}, {
+ b: "b"
+})
+// { a: "a", b: "b" }
+```
+
+
+## MIT Licenced
+
+
+ [3]: http://ci.testling.com/Raynos/xtend.png
+ [4]: http://ci.testling.com/Raynos/xtend
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/has-keys.js b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/has-keys.js
new file mode 100644
index 0000000..62391e7
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/has-keys.js
@@ -0,0 +1,7 @@
+module.exports = hasKeys
+
+function hasKeys(source) {
+ return source !== null &&
+ (typeof source === "object" ||
+ typeof source === "function")
+}
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/index.js b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/index.js
new file mode 100644
index 0000000..20937d1
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/index.js
@@ -0,0 +1,25 @@
+var Keys = require("object-keys")
+var hasKeys = require("./has-keys")
+
+module.exports = extend
+
+function extend() {
+ var target = {}
+
+ for (var i = 0; i < arguments.length; i++) {
+ var source = arguments[i]
+
+ if (!hasKeys(source)) {
+ continue
+ }
+
+ var keys = Keys(source)
+
+ for (var j = 0; j < keys.length; j++) {
+ var name = keys[j]
+ target[name] = source[name]
+ }
+ }
+
+ return target
+}
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/mutable.js b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/mutable.js
new file mode 100644
index 0000000..17454ae
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/mutable.js
@@ -0,0 +1,25 @@
+var Keys = require("object-keys")
+var hasKeys = require("./has-keys")
+
+module.exports = extend
+
+function extend(target) {
+ var sources = [].slice.call(arguments, 1)
+
+ for (var i = 0; i < sources.length; i++) {
+ var source = sources[i]
+
+ if (!hasKeys(source)) {
+ continue
+ }
+
+ var keys = Keys(source)
+
+ for (var j = 0; j < keys.length; j++) {
+ var name = keys[j]
+ target[name] = source[name]
+ }
+ }
+
+ return target
+}
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/.npmignore b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/.npmignore
new file mode 100644
index 0000000..3c3629e
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/.npmignore
@@ -0,0 +1 @@
+node_modules
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/.travis.yml b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/.travis.yml
new file mode 100644
index 0000000..60d00ce
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/.travis.yml
@@ -0,0 +1,5 @@
+language: node_js
+node_js:
+ - "0.10"
+ - "0.8"
+ - "0.6"
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/README.md b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/README.md
new file mode 100644
index 0000000..ab32d0a
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/README.md
@@ -0,0 +1,39 @@
+#object-keys [![Version Badge][2]][1]
+
+[![Build Status][3]][4] [![dependency status][5]][6]
+
+[![browser support][7]][8]
+
+An Object.keys shim. Uses Object.keys if available.
+
+## Example
+
+```js
+var keys = require('object-keys');
+var assert = require('assert');
+var obj = {
+ a: true,
+ b: true,
+ c: true
+};
+
+assert.equal(keys(obj), ['a', 'b', 'c']);
+```
+
+## Source
+Implementation taken directly from [es5-shim]([9]), with modifications, including from [lodash]([10]).
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+[1]: https://npmjs.org/package/object-keys
+[2]: http://vb.teelaun.ch/ljharb/object-keys.svg
+[3]: https://travis-ci.org/ljharb/object-keys.png
+[4]: https://travis-ci.org/ljharb/object-keys
+[5]: https://david-dm.org/ljharb/object-keys.png
+[6]: https://david-dm.org/ljharb/object-keys
+[7]: https://ci.testling.com/ljharb/object-keys.png
+[8]: https://ci.testling.com/ljharb/object-keys
+[9]: https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js#L542-589
+[10]: https://github.com/bestiejs/lodash
+
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/foreach.js b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/foreach.js
new file mode 100644
index 0000000..db32d45
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/foreach.js
@@ -0,0 +1,40 @@
+var hasOwn = Object.prototype.hasOwnProperty;
+var toString = Object.prototype.toString;
+
+var isFunction = function (fn) {
+ var isFunc = (typeof fn === 'function' && !(fn instanceof RegExp)) || toString.call(fn) === '[object Function]';
+ if (!isFunc && typeof window !== 'undefined') {
+ isFunc = fn === window.setTimeout || fn === window.alert || fn === window.confirm || fn === window.prompt;
+ }
+ return isFunc;
+};
+
+module.exports = function forEach(obj, fn) {
+ if (!isFunction(fn)) {
+ throw new TypeError('iterator must be a function');
+ }
+ var i, k,
+ isString = typeof obj === 'string',
+ l = obj.length,
+ context = arguments.length > 2 ? arguments[2] : null;
+ if (l === +l) {
+ for (i = 0; i < l; i++) {
+ if (context === null) {
+ fn(isString ? obj.charAt(i) : obj[i], i, obj);
+ } else {
+ fn.call(context, isString ? obj.charAt(i) : obj[i], i, obj);
+ }
+ }
+ } else {
+ for (k in obj) {
+ if (hasOwn.call(obj, k)) {
+ if (context === null) {
+ fn(obj[k], k, obj);
+ } else {
+ fn.call(context, obj[k], k, obj);
+ }
+ }
+ }
+ }
+};
+
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/index.js b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/index.js
new file mode 100644
index 0000000..f5b24b6
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/index.js
@@ -0,0 +1,2 @@
+module.exports = Object.keys || require('./shim');
+
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/isArguments.js b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/isArguments.js
new file mode 100644
index 0000000..74a0989
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/isArguments.js
@@ -0,0 +1,16 @@
+var toString = Object.prototype.toString;
+
+module.exports = function isArguments(value) {
+ var str = toString.call(value);
+ var isArguments = str === '[object Arguments]';
+ if (!isArguments) {
+ isArguments = str !== '[object Array]'
+ && value !== null
+ && typeof value === 'object'
+ && typeof value.length === 'number'
+ && value.length >= 0
+ && toString.call(value.callee) === '[object Function]';
+ }
+ return isArguments;
+};
+
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/package.json b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/package.json
new file mode 100644
index 0000000..023bdd1
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/package.json
@@ -0,0 +1,74 @@
+{
+ "name": "object-keys",
+ "version": "0.4.0",
+ "author": {
+ "name": "Jordan Harband"
+ },
+ "description": "An Object.keys replacement, in case Object.keys is not available. From https://github.com/kriskowal/es5-shim",
+ "license": "MIT",
+ "main": "index.js",
+ "scripts": {
+ "test": "node test/index.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/ljharb/object-keys.git"
+ },
+ "keywords": [
+ "Object.keys",
+ "keys",
+ "ES5",
+ "shim"
+ ],
+ "dependencies": {},
+ "devDependencies": {
+ "foreach": "~2.0.3",
+ "is": "~0.2.6",
+ "tape": "~1.0.4",
+ "indexof": "~0.0.1"
+ },
+ "testling": {
+ "files": "test/index.js",
+ "browsers": [
+ "iexplore/6.0..latest",
+ "firefox/3.0..6.0",
+ "firefox/15.0..latest",
+ "firefox/nightly",
+ "chrome/4.0..10.0",
+ "chrome/20.0..latest",
+ "chrome/canary",
+ "opera/10.0..latest",
+ "opera/next",
+ "safari/4.0..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2"
+ ]
+ },
+ "bugs": {
+ "url": "https://github.com/ljharb/object-keys/issues"
+ },
+ "_id": "object-keys@0.4.0",
+ "dist": {
+ "shasum": "28a6aae7428dd2c3a92f3d95f21335dd204e0336",
+ "tarball": "http://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz"
+ },
+ "_from": "object-keys@~0.4.0",
+ "_npmVersion": "1.3.5",
+ "_npmUser": {
+ "name": "ljharb",
+ "email": "ljharb@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "ljharb",
+ "email": "ljharb@gmail.com"
+ }
+ ],
+ "directories": {},
+ "deprecated": "",
+ "_shasum": "28a6aae7428dd2c3a92f3d95f21335dd204e0336",
+ "_resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
+ "readme": "ERROR: No README data found!",
+ "homepage": "https://github.com/ljharb/object-keys#readme"
+}
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/shim.js b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/shim.js
new file mode 100644
index 0000000..b88421b
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/shim.js
@@ -0,0 +1,62 @@
+(function () {
+ "use strict";
+
+ // modified from https://github.com/kriskowal/es5-shim
+ var has = Object.prototype.hasOwnProperty,
+ toString = Object.prototype.toString,
+ forEach = require('./foreach'),
+ isArgs = require('./isArguments'),
+ hasDontEnumBug = !({'toString': null}).propertyIsEnumerable('toString'),
+ hasProtoEnumBug = (function () {}).propertyIsEnumerable('prototype'),
+ dontEnums = [
+ "toString",
+ "toLocaleString",
+ "valueOf",
+ "hasOwnProperty",
+ "isPrototypeOf",
+ "propertyIsEnumerable",
+ "constructor"
+ ],
+ keysShim;
+
+ keysShim = function keys(object) {
+ var isObject = object !== null && typeof object === 'object',
+ isFunction = toString.call(object) === '[object Function]',
+ isArguments = isArgs(object),
+ theKeys = [];
+
+ if (!isObject && !isFunction && !isArguments) {
+ throw new TypeError("Object.keys called on a non-object");
+ }
+
+ if (isArguments) {
+ forEach(object, function (value) {
+ theKeys.push(value);
+ });
+ } else {
+ var name,
+ skipProto = hasProtoEnumBug && isFunction;
+
+ for (name in object) {
+ if (!(skipProto && name === 'prototype') && has.call(object, name)) {
+ theKeys.push(name);
+ }
+ }
+ }
+
+ if (hasDontEnumBug) {
+ var ctor = object.constructor,
+ skipConstructor = ctor && ctor.prototype === object;
+
+ forEach(dontEnums, function (dontEnum) {
+ if (!(skipConstructor && dontEnum === 'constructor') && has.call(object, dontEnum)) {
+ theKeys.push(dontEnum);
+ }
+ });
+ }
+ return theKeys;
+ };
+
+ module.exports = keysShim;
+}());
+
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/test/foreach.js b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/test/foreach.js
new file mode 100644
index 0000000..f29f065
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/test/foreach.js
@@ -0,0 +1,156 @@
+var test = require('tape');
+var forEach = require('../foreach.js');
+
+test('second argument: iterator', function (t) {
+ var arr = [];
+ t.throws(function () { forEach(arr); }, TypeError, 'undefined is not a function');
+ t.throws(function () { forEach(arr, null); }, TypeError, 'null is not a function');
+ t.throws(function () { forEach(arr, ''); }, TypeError, 'string is not a function');
+ t.throws(function () { forEach(arr, /a/); }, TypeError, 'regex is not a function');
+ t.throws(function () { forEach(arr, true); }, TypeError, 'true is not a function');
+ t.throws(function () { forEach(arr, false); }, TypeError, 'false is not a function');
+ t.throws(function () { forEach(arr, NaN); }, TypeError, 'NaN is not a function');
+ t.throws(function () { forEach(arr, 42); }, TypeError, '42 is not a function');
+ t.doesNotThrow(function () { forEach(arr, function () {}); }, 'function is a function');
+ t.doesNotThrow(function () { forEach(arr, setTimeout); }, 'setTimeout is a function');
+ if (typeof window !== 'undefined') {
+ t.doesNotThrow(function () { forEach(arr, window.alert); }, 'alert is a function');
+ }
+ t.end();
+});
+
+test('array', function (t) {
+ var arr = [1, 2, 3];
+
+ t.test('iterates over every item', function (st) {
+ var index = 0;
+ forEach(arr, function () { index += 1; });
+ st.equal(index, arr.length, 'iterates ' + arr.length + ' times');
+ st.end();
+ });
+
+ t.test('first iterator argument', function (st) {
+ var index = 0;
+ st.plan(arr.length);
+ forEach(arr, function (item) {
+ st.equal(arr[index], item, 'item ' + index + ' is passed as first argument');
+ index += 1;
+ });
+ st.end();
+ });
+
+ t.test('second iterator argument', function (st) {
+ var counter = 0;
+ st.plan(arr.length);
+ forEach(arr, function (item, index) {
+ st.equal(counter, index, 'index ' + index + ' is passed as second argument');
+ counter += 1;
+ });
+ st.end();
+ });
+
+ t.test('third iterator argument', function (st) {
+ st.plan(arr.length);
+ forEach(arr, function (item, index, array) {
+ st.deepEqual(arr, array, 'array is passed as third argument');
+ });
+ st.end();
+ });
+
+ t.test('context argument', function (st) {
+ var context = {};
+ st.plan(arr.length);
+ forEach(arr, function () {
+ st.equal(this, context, '"this" is the passed context');
+ }, context);
+ st.end();
+ });
+
+ t.end();
+});
+
+test('object', function (t) {
+ var obj = {
+ a: 1,
+ b: 2,
+ c: 3
+ };
+ var keys = ['a', 'b', 'c'];
+
+ var F = function () {
+ this.a = 1;
+ this.b = 2;
+ };
+ F.prototype.c = 3;
+ var fKeys = ['a', 'b'];
+
+ t.test('iterates over every object literal key', function (st) {
+ var counter = 0;
+ forEach(obj, function () { counter += 1; });
+ st.equal(counter, keys.length, 'iterated ' + counter + ' times');
+ st.end();
+ });
+
+ t.test('iterates only over own keys', function (st) {
+ var counter = 0;
+ forEach(new F(), function () { counter += 1; });
+ st.equal(counter, fKeys.length, 'iterated ' + fKeys.length + ' times');
+ st.end();
+ });
+
+ t.test('first iterator argument', function (st) {
+ var index = 0;
+ st.plan(keys.length);
+ forEach(obj, function (item) {
+ st.equal(obj[keys[index]], item, 'item at key ' + keys[index] + ' is passed as first argument');
+ index += 1;
+ });
+ st.end();
+ });
+
+ t.test('second iterator argument', function (st) {
+ var counter = 0;
+ st.plan(keys.length);
+ forEach(obj, function (item, key) {
+ st.equal(keys[counter], key, 'key ' + key + ' is passed as second argument');
+ counter += 1;
+ });
+ st.end();
+ });
+
+ t.test('third iterator argument', function (st) {
+ st.plan(keys.length);
+ forEach(obj, function (item, key, object) {
+ st.deepEqual(obj, object, 'object is passed as third argument');
+ });
+ st.end();
+ });
+
+ t.test('context argument', function (st) {
+ var context = {};
+ st.plan(1);
+ forEach({foo: 'bar'}, function () {
+ st.equal(this, context, '"this" is the passed context');
+ }, context);
+ st.end();
+ });
+
+ t.end();
+});
+
+
+test('string', function (t) {
+ var str = 'str';
+ t.test('second iterator argument', function (st) {
+ var counter = 0;
+ st.plan(str.length * 2 + 1);
+ forEach(str, function (item, index) {
+ st.equal(counter, index, 'index ' + index + ' is passed as second argument');
+ st.equal(str.charAt(index), item);
+ counter += 1;
+ });
+ st.equal(counter, str.length, 'iterates ' + str.length + ' times');
+ });
+ t.end();
+});
+
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/test/index.js b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/test/index.js
new file mode 100644
index 0000000..8b77b1f
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/test/index.js
@@ -0,0 +1,6 @@
+
+require('./foreach');
+require('./isArguments');
+
+require('./shim');
+
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/test/isArguments.js b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/test/isArguments.js
new file mode 100644
index 0000000..62a07c2
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/test/isArguments.js
@@ -0,0 +1,10 @@
+var test = require('tape');
+var isArguments = require('../isArguments');
+
+test('is.arguments', function (t) {
+ t.notOk(isArguments([]), 'array is not arguments');
+ (function () { t.ok(isArguments(arguments), 'arguments is arguments'); }());
+ (function () { t.notOk(isArguments(Array.prototype.slice.call(arguments)), 'sliced arguments is not arguments'); }());
+ t.end();
+});
+
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/test/shim.js b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/test/shim.js
new file mode 100644
index 0000000..9d93271
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/node_modules/object-keys/test/shim.js
@@ -0,0 +1,134 @@
+var test = require('tape');
+var shimmedKeys = require('../index.js');
+var is = require('is');
+var keys = require('../shim.js');
+var forEach = require('foreach');
+var indexOf = require('indexof');
+
+var obj = {
+ "str": "boz",
+ "obj": {},
+ "arr": [],
+ "bool": true,
+ "num": 42,
+ "aNull": null,
+ "undef": undefined
+};
+var objKeys = ['str', 'obj', 'arr', 'bool', 'num', 'aNull', 'undef'];
+
+test('exports a function', function (t) {
+ if (Object.keys) {
+ t.equal(Object.keys, shimmedKeys, 'Object.keys is supported and exported');
+ } else {
+ t.equal(keys, shimmedKeys, 'Object.keys is not supported; shim is exported');
+ }
+ t.end();
+});
+
+test('working with actual shim', function (t) {
+ t.notEqual(Object.keys, keys, 'keys shim is not native Object.keys');
+ t.end();
+});
+
+test('works with an object literal', function (t) {
+ var theKeys = keys(obj);
+ t.equal(is.array(theKeys), true, 'returns an array');
+ t.deepEqual(theKeys, objKeys, 'Object has expected keys');
+ t.end();
+});
+
+test('works with an array', function (t) {
+ var arr = [1, 2, 3];
+ var theKeys = keys(arr);
+ t.equal(is.array(theKeys), true, 'returns an array');
+ t.deepEqual(theKeys, ['0', '1', '2'], 'Array has expected keys');
+ t.end();
+});
+
+test('works with a function', function (t) {
+ var foo = function () {};
+ foo.a = true;
+
+ t.doesNotThrow(function () { return keys(foo); }, 'does not throw an error');
+ t.deepEqual(keys(foo), ['a'], 'returns expected keys');
+ t.end();
+});
+
+test('returns names which are own properties', function (t) {
+ forEach(keys(obj), function (name) {
+ t.equal(obj.hasOwnProperty(name), true, name + ' should be returned');
+ });
+ t.end();
+});
+
+test('returns names which are enumerable', function (t) {
+ var k, loopedValues = [];
+ for (k in obj) {
+ loopedValues.push(k);
+ }
+ forEach(keys(obj), function (name) {
+ t.notEqual(indexOf(loopedValues, name), -1, name + ' is not enumerable');
+ });
+ t.end();
+});
+
+test('throws an error for a non-object', function (t) {
+ t.throws(
+ function () { return keys(42); },
+ new TypeError('Object.keys called on a non-object'),
+ 'throws on a non-object'
+ );
+ t.end();
+});
+
+test('works with an object instance', function (t) {
+ var Prototype = function () {};
+ Prototype.prototype.foo = true;
+ var obj = new Prototype();
+ obj.bar = true;
+ var theKeys = keys(obj);
+ t.equal(is.array(theKeys), true, 'returns an array');
+ t.deepEqual(theKeys, ['bar'], 'Instance has expected keys');
+ t.end();
+});
+
+test('works in iOS 5 mobile Safari', function (t) {
+ var Foo = function () {};
+ Foo.a = function () {};
+
+ // the bug is keys(Foo) => ['a', 'prototype'] instead of ['a']
+ t.deepEqual(keys(Foo), ['a'], 'has expected keys');
+ t.end();
+});
+
+test('works in environments with the dontEnum bug (IE < 9)', function (t) {
+ var Foo = function () {};
+ Foo.prototype.a = function () {};
+
+ // the bug is keys(Foo.prototype) => ['a', 'constructor'] instead of ['a']
+ t.deepEqual(keys(Foo.prototype), ['a'], 'has expected keys');
+ t.end();
+});
+
+test('shadowed properties', function (t) {
+ var shadowedProps = [
+ 'dummyControlProp', /* just to be sure */
+ 'constructor',
+ 'hasOwnProperty',
+ 'isPrototypeOf',
+ 'propertyIsEnumerable',
+ 'toLocaleString',
+ 'toString',
+ 'valueOf'
+ ];
+ shadowedProps.sort();
+ var shadowedObject = {};
+ forEach(shadowedProps, function (value, index) {
+ shadowedObject[value] = index;
+ });
+ var shadowedObjectKeys = keys(shadowedObject);
+ shadowedObjectKeys.sort();
+ t.deepEqual(shadowedObjectKeys, shadowedProps, 'troublesome shadowed properties are keys of object literals');
+ t.end();
+});
+
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/package.json b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/package.json
new file mode 100644
index 0000000..fe74554
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/package.json
@@ -0,0 +1,89 @@
+{
+ "name": "xtend",
+ "version": "2.1.2",
+ "description": "extend like a boss",
+ "keywords": [
+ "extend",
+ "merge",
+ "options",
+ "opts",
+ "object",
+ "array"
+ ],
+ "author": {
+ "name": "Raynos",
+ "email": "raynos2@gmail.com"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/Raynos/xtend.git"
+ },
+ "main": "index",
+ "scripts": {
+ "test": "node test"
+ },
+ "dependencies": {
+ "object-keys": "~0.4.0"
+ },
+ "devDependencies": {
+ "tape": "~1.1.0"
+ },
+ "homepage": "https://github.com/Raynos/xtend",
+ "contributors": [
+ {
+ "name": "Jake Verbaten"
+ },
+ {
+ "name": "Matt Esch"
+ }
+ ],
+ "bugs": {
+ "url": "https://github.com/Raynos/xtend/issues",
+ "email": "raynos2@gmail.com"
+ },
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "http://github.com/raynos/xtend/raw/master/LICENSE"
+ }
+ ],
+ "testling": {
+ "files": "test.js",
+ "browsers": [
+ "ie/7..latest",
+ "firefox/16..latest",
+ "firefox/nightly",
+ "chrome/22..latest",
+ "chrome/canary",
+ "opera/12..latest",
+ "opera/next",
+ "safari/5.1..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest"
+ ]
+ },
+ "engines": {
+ "node": ">=0.4"
+ },
+ "_id": "xtend@2.1.2",
+ "dist": {
+ "shasum": "6efecc2a4dad8e6962c4901b337ce7ba87b5d28b",
+ "tarball": "http://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz"
+ },
+ "_from": "xtend@~2.1.1",
+ "_npmVersion": "1.3.14",
+ "_npmUser": {
+ "name": "raynos",
+ "email": "raynos2@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "raynos",
+ "email": "raynos2@gmail.com"
+ }
+ ],
+ "directories": {},
+ "_shasum": "6efecc2a4dad8e6962c4901b337ce7ba87b5d28b",
+ "_resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/test.js b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/test.js
new file mode 100644
index 0000000..3369d79
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/node_modules/xtend/test.js
@@ -0,0 +1,63 @@
+var test = require("tape")
+var extend = require("./")
+var mutableExtend = require("./mutable")
+
+test("merge", function(assert) {
+ var a = { a: "foo" }
+ var b = { b: "bar" }
+
+ assert.deepEqual(extend(a, b), { a: "foo", b: "bar" })
+ assert.end()
+})
+
+test("replace", function(assert) {
+ var a = { a: "foo" }
+ var b = { a: "bar" }
+
+ assert.deepEqual(extend(a, b), { a: "bar" })
+ assert.end()
+})
+
+test("undefined", function(assert) {
+ var a = { a: undefined }
+ var b = { b: "foo" }
+
+ assert.deepEqual(extend(a, b), { a: undefined, b: "foo" })
+ assert.deepEqual(extend(b, a), { a: undefined, b: "foo" })
+ assert.end()
+})
+
+test("handle 0", function(assert) {
+ var a = { a: "default" }
+ var b = { a: 0 }
+
+ assert.deepEqual(extend(a, b), { a: 0 })
+ assert.deepEqual(extend(b, a), { a: "default" })
+ assert.end()
+})
+
+test("is immutable", function (assert) {
+ var record = {}
+
+ extend(record, { foo: "bar" })
+ assert.equal(record.foo, undefined)
+ assert.end()
+})
+
+test("null as argument", function (assert) {
+ var a = { foo: "bar" }
+ var b = null
+ var c = void 0
+
+ assert.deepEqual(extend(b, a, c), { foo: "bar" })
+ assert.end()
+})
+
+test("mutable", function (assert) {
+ var a = { foo: "bar" }
+
+ mutableExtend(a, { bar: "baz" })
+
+ assert.equal(a.bar, "baz")
+ assert.end()
+})
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/package.json b/packages/logging/.npm/package/node_modules/bunyan-format/package.json
new file mode 100644
index 0000000..bb1f592
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/package.json
@@ -0,0 +1,70 @@
+{
+ "name": "bunyan-format",
+ "version": "0.2.1",
+ "description": "Writable stream that formats bunyan records that are piped into it.",
+ "main": "index.js",
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/thlorenz/bunyan-format.git"
+ },
+ "homepage": "https://github.com/thlorenz/bunyan-format",
+ "dependencies": {
+ "ansistyles": "~0.1.1",
+ "ansicolors": "~0.2.1",
+ "xtend": "~2.1.1"
+ },
+ "devDependencies": {
+ "tap": "~0.4.3",
+ "bunyan": "~0.22.0"
+ },
+ "keywords": [
+ "bunyan",
+ "stream",
+ "log",
+ "logger",
+ "format",
+ "pretty",
+ "color",
+ "style"
+ ],
+ "author": {
+ "name": "Thorsten Lorenz",
+ "email": "thlorenz@gmx.de",
+ "url": "http://thlorenz.com"
+ },
+ "license": {
+ "type": "MIT",
+ "url": "https://github.com/thlorenz/bunyan-format/blob/master/LICENSE"
+ },
+ "engine": {
+ "node": ">=0.10"
+ },
+ "gitHead": "da4ea06a283e650acfc7a595ce65c5095ab3e4d1",
+ "bugs": {
+ "url": "https://github.com/thlorenz/bunyan-format/issues"
+ },
+ "_id": "bunyan-format@0.2.1",
+ "_shasum": "a4b3b0d80070a865279417269e3f00ff02fbcb47",
+ "_from": "bunyan-format@0.2.1",
+ "_npmVersion": "2.0.0",
+ "_npmUser": {
+ "name": "thlorenz",
+ "email": "thlorenz@gmx.de"
+ },
+ "maintainers": [
+ {
+ "name": "thlorenz",
+ "email": "thlorenz@gmx.de"
+ }
+ ],
+ "dist": {
+ "shasum": "a4b3b0d80070a865279417269e3f00ff02fbcb47",
+ "tarball": "http://registry.npmjs.org/bunyan-format/-/bunyan-format-0.2.1.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/bunyan-format/-/bunyan-format-0.2.1.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/test/short.js b/packages/logging/.npm/package/node_modules/bunyan-format/test/short.js
new file mode 100644
index 0000000..0b6282f
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/test/short.js
@@ -0,0 +1,42 @@
+'use strict';
+
+var bunyan = require('bunyan')
+ , bformat = require('../')
+ , test = require('tap').test
+ ;
+
+function inspect(obj, depth) {
+ console.error(require('util').inspect(obj, false, depth || 5, true));
+}
+
+function removeTime(s) {
+ return s.substring(29);
+}
+
+test('\nshort mode', function (t) {
+ var formatOut = bformat({ outputMode: 'short'}, { write: onwrite })
+ var log = bunyan.createLogger({ name: 'app', stream: formatOut, level: 'debug' } );
+
+ var writes = [];
+ function onwrite (c) {
+ process.stdout.write(c)
+ writes.push(c)
+ }
+
+ log.info('starting up');
+ log.debug('things are heating up', { temperature: 80, status: { started: 'yes', overheated: 'no' } });
+ log.warn('getting a bit hot', { temperature: 120 });
+ log.error('OOOOHHH it burns!', new Error('temperature: 200'));
+ log.fatal('I died! Do you know what that means???');
+
+ t.deepEqual(
+ writes.map(removeTime)
+ , [ ' INFO\u001b[39m app: \u001b[36mstarting up\u001b[39m\n',
+ 'DEBUG\u001b[39m app:\n\u001b[90m \u001b[36mthings are heating up { temperature: 80,\n status: { started: \'yes\', overheated: \'no\' } }\u001b[39m\n\u001b[39m',
+ ' WARN\u001b[39m app: \u001b[36mgetting a bit hot { temperature: 120 }\u001b[39m\n',
+ 'ERROR\u001b[39m app: \u001b[36mOOOOHHH it burns! [Error: temperature: 200]\u001b[39m\n',
+ 'FATAL\u001b[39m app: \u001b[36mI died! Do you know what that means???\u001b[39m\n' ]
+ , 'writes colorized messages in "short" format'
+ )
+ t.end();
+})
diff --git a/packages/logging/.npm/package/node_modules/bunyan-format/test/simple.js b/packages/logging/.npm/package/node_modules/bunyan-format/test/simple.js
new file mode 100644
index 0000000..abad81b
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan-format/test/simple.js
@@ -0,0 +1,38 @@
+'use strict';
+
+var bunyan = require('bunyan')
+ , bformat = require('../')
+ , test = require('tap').test
+ ;
+
+function inspect(obj, depth) {
+ console.error(require('util').inspect(obj, false, depth || 5, true));
+}
+
+test('\nsimple mode', function (t) {
+ var formatOut = bformat({ outputMode: 'simple'}, { write: onwrite })
+ var log = bunyan.createLogger({ name: 'app', stream: formatOut, level: 'debug' } );
+
+ var writes = [];
+ function onwrite (c) {
+ process.stdout.write(c)
+ writes.push(c)
+ }
+
+ log.info('starting up');
+ log.debug('things are heating up', { temperature: 80, status: { started: 'yes', overheated: 'no' } });
+ log.warn('getting a bit hot', { temperature: 120 });
+ log.error('OOOOHHH it burns!', new Error('temperature: 200'));
+ log.fatal('I died! Do you know what that means???');
+
+ t.deepEqual(
+ writes
+ , [ 'INFO - starting up\n',
+ 'DEBUG - things are heating up { temperature: 80,\n status: { started: \'yes\', overheated: \'no\' } }\n',
+ 'WARN - getting a bit hot { temperature: 120 }\n',
+ 'ERROR - OOOOHHH it burns! [Error: temperature: 200]\n',
+ 'FATAL - I died! Do you know what that means???\n' ]
+ , 'writes colorized messages in "simple" format'
+ )
+ t.end();
+})
diff --git a/packages/logging/.npm/package/node_modules/bunyan/.npmignore b/packages/logging/.npm/package/node_modules/bunyan/.npmignore
new file mode 100644
index 0000000..84d129f
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan/.npmignore
@@ -0,0 +1,7 @@
+/tmp
+/node_modules
+*.log
+/examples
+/test
+/*.tgz
+/tools
diff --git a/packages/logging/.npm/package/node_modules/bunyan/AUTHORS b/packages/logging/.npm/package/node_modules/bunyan/AUTHORS
new file mode 100644
index 0000000..bc8fc52
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan/AUTHORS
@@ -0,0 +1,22 @@
+Trent Mick (http://trentm.com)
+Mark Cavage (https://github.com/mcavage)
+Dave Pacheco (https://github.com/davepacheco)
+Michael Hart (https://github.com/mhart)
+Isaac Schlueter (https://github.com/isaacs)
+Rob Gulewich (https://github.com/rgulewich)
+Bryan Cantrill (https://github.com/bcantrill)
+Michael Hart (https://github.com/mhart)
+Simon Wade (https://github.com/aexmachina)
+https://github.com/glenn-murray-bse
+Chakrit Wichian (https://github.com/chakrit)
+Patrick Mooney (https://github.com/pfmooney)
+Johan Nordberg (https://github.com/jnordberg)
+https://github.com/timborodin
+Ryan Graham (https://github.com/rmg)
+Alex Kocharin (https://github.com/rlidwka)
+Andrei Neculau (https://github.com/andreineculau)
+Mihai Tomescu (https://github.com/matomesc)
+Daniel Juhl (https://github.com/danieljuhl)
+Chris Barber (https://github.com/cb1kenobi)
+Manuel Schneider (https://github.com/manuelschneider)
+Martin Gausby (https://github.com/gausby)
diff --git a/packages/logging/.npm/package/node_modules/bunyan/CHANGES.md b/packages/logging/.npm/package/node_modules/bunyan/CHANGES.md
new file mode 100644
index 0000000..d44edbd
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan/CHANGES.md
@@ -0,0 +1,1147 @@
+# bunyan Changelog
+
+Known issues:
+
+- [issue #58] Can't install to a dir with spaces. This is [this node-gyp
+ bug](https://github.com/TooTallNate/node-gyp/issues/65).
+
+
+## bunyan 1.4.0
+
+(Bumping minor ver b/c I'm wary of dtrace-provider changes. :)
+
+- [issue #258, pull #259] Update to dtrace-provider 0.5 to fix
+ install and tests on recent io.js versions.
+- safe-json-stringify@1.0.3 changed output, breaking some tests. Fix those.
+
+
+## bunyan 1.3.6
+
+- [issue #244] Make `bunyan` defensive on `res.header=null`.
+
+
+## bunyan 1.3.5
+
+- [issue #233] Make `bunyan` defensive on res.header as a boolean.
+- [issue #242] Make `bunyan` defensive on err.stack not being a string.
+
+
+## bunyan 1.3.4
+
+- Allow `log.child(...)` to work even if the logger is a *sub-class*
+ of Bunyan's Logger class.
+- [issue #219] Hide 'source-map-support' require from browserify.
+- [issue #218] Reset `haveNonRawStreams` on `.addStream`.
+
+
+## bunyan 1.3.3
+
+- [pull #127] Update to dtrace-provider 0.4.0, which gives io.js 1.x support
+ for dtrace-y parts of Bunyan.
+
+
+## bunyan 1.3.2
+
+- [pull #182] Fallback to using the optional 'safe-json-stringify' module
+ if `JSON.stringify` throws -- possibly with an enumerable property
+ getter than throws. By Martin Gausby.
+
+
+## bunyan 1.3.1
+
+- Export `bunyan.RotatingFileStream` which is needed if one wants to
+ customize it. E.g. see issue #194.
+
+- [pull #122] Source Map support for caller line position for [the "src"
+ field](https://github.com/trentm/node-bunyan#src). This could be interesting
+ for [CoffeeScript](http://coffeescript.org/documentation/docs/sourcemap.html)
+ users of Bunyan. By Manuel Schneider.
+
+- [issue #164] Ensure a top-level `level` given in `bunyan.createLogger`
+ is *used* for given `streams`. For example, ensure that the following
+ results in the stream having a DEBUG level:
+
+ var log = bunyan.createLogger({
+ name: 'foo',
+ level: 'debug',
+ streams: [
+ {
+ path: '/var/tmp/foo.log'
+ }
+ ]
+ });
+
+ This was broken in the 1.0.1 release. Between that release and 1.3.0
+ the "/var/tmp/foo.log" stream would be at the INFO level (Bunyan's
+ default level).
+
+
+## bunyan 1.3.0
+
+- [issue #103] `bunyan -L` (or `bunyan --time local`) to show local time.
+ Bunyan log records store `time` in UTC time. Sometimes it is convenient
+ to display in local time.
+
+- [issue #205] Fix the "The Bunyan CLI crashed!" checking to properly warn of
+ the common failure case when `-c CONDITION` is being used.
+
+
+## bunyan 1.2.4
+
+- [issue #210] Export `bunyan.nameFromLevel` and `bunyan.levelFromName`. It can
+ be a pain for custom streams to have to reproduce that.
+
+- [issue #100] Gracefully handle the case of an unbound
+ `Logger.{info,debug,...}` being used for logging, e.g.:
+
+ myEmittingThing.on('data', log.info)
+
+ Before this change, bunyan would throw. Now it emits a warning to stderr
+ *once*, and then silently ignores those log attempts, e.g.:
+
+ bunyan usage error: /Users/trentm/tm/node-bunyan/foo.js:12: attempt to log with an unbound log method: `this` is: { _events: { data: [Function] } }
+
+
+## bunyan 1.2.3
+
+- [issue #184] Fix log rotation for rotation periods > ~25 days. Before this
+ change, a rotation period longer than this could hit [the maximum setTimeout
+ delay in node.js](https://github.com/joyent/node/issues/8656). By Daniel Juhl.
+
+
+## bunyan 1.2.2
+
+- Drop the guard that a bunyan Logger level must be between TRACE (10)
+ and FATAL (60), inclusive. This allows a trick of setting the level
+ to `FATAL + 1` to turn logging off. While the standard named log levels are
+ the golden path, then intention was not to get in the way of using
+ other level numbers.
+
+
+## bunyan 1.2.1
+
+- [issue #178, #181] Get at least dtrace-provider 0.3.1 for
+ optionalDependencies to get a fix for install with decoupled npm (e.g. with
+ homebrew's node and npm).
+
+
+## bunyan 1.2.0
+
+- [issue #157] Restore dtrace-provider as a dependency (in
+ "optionalDependencies").
+
+ Dtrace-provider version 0.3.0 add build sugar that should eliminate the
+ problems from older versions:
+ The build is not attempted on Linux and Windows. The build spew is
+ *not* emitted by default (use `V=1 npm install` to see it); instead a
+ short warning is emitted if the build fails.
+
+ Also, importantly, the new dtrace-provider fixes working with node
+ v0.11/0.12.
+
+
+## bunyan 1.1.3
+
+- [issue #165] Include extra `err` fields in `bunyan` CLI output. Before
+ this change only the fields part of the typical node.js error stack
+ (err.stack, err.message, err.name) would be emitted, even though
+ the Bunyan *library* would typically include err.code and err.signal
+ in the raw JSON log record.
+
+
+## bunyan 1.1.2
+
+- Fix a breakage in `log.info(err)` on a logger with no serializers.
+
+
+## bunyan 1.1.1
+
+Note: *Bad release.* It breaks `log.info(err)` on a logger with no serializers.
+Use version 1.1.2.
+
+- [pull #168] Fix handling of `log.info(err)` to use the `log` Logger's `err`
+ serializer if it has one, instead of always using the core Bunyan err
+ serializer. (By Mihai Tomescu.)
+
+
+## bunyan 1.1.0
+
+- [issue #162] Preliminary support for [browserify](http://browserify.org/).
+ See [the section in the README](../README.md#browserify).
+
+
+## bunyan 1.0.1
+
+- [issues #105, #138, #151] Export `.addStream(...)` and
+ `.addSerializers(...)` to be able to add them after Logger creation.
+ Thanks @andreineculau!
+
+- [issue #159] Fix bad handling in construtor guard intending to allow
+ creation without "new": `var log = Logger(...)`. Thanks @rmg!
+
+- [issue #156] Smaller install size via .npmignore file.
+
+- [issue #126, #161] Ignore SIGINT (Ctrl+C) when processing stdin. `...| bunyan`
+ should expect the preceding process in the pipeline to handle SIGINT. While
+ it is doing so, `bunyan` should continue to process any remaining output.
+ Thanks @timborodin and @jnordberg!
+
+- [issue #160] Stop using ANSI 'grey' in `bunyan` CLI output, because of the
+ problems that causes with Solarized Dark themes (see
+ ).
+
+
+## bunyan 1.0.0
+
+- [issue #87] **Backward incompatible change to `-c CODE`** improving
+ performance by over 10x (good!), with a backward incompatible change to
+ semantics (unfortunate), and adding some sugar (good!).
+
+ The `-c CODE` implementation was changed to use a JS function for processing
+ rather than `vm.runInNewContext`. The latter was specatularly slow, so
+ won't be missed. Unfortunately this does mean a few semantic differences in
+ the `CODE`, the most noticeable of which is that **`this` is required to
+ access the object fields:**
+
+ # Bad. Works with bunyan 0.x but not 1.x.
+ $ bunyan -c 'pid === 123' foo.log
+ ...
+
+ # Good. Works with all versions of bunyan
+ $ bunyan -c 'this.pid === 123' foo.log
+ ...
+
+ The old behaviour of `-c` can be restored with the `BUNYAN_EXEC=vm`
+ environment variable:
+
+ $ BUNYAN_EXEC=vm bunyan -c 'pid === 123' foo.log
+ ...
+
+ Some sugar was also added: the TRACE, DEBUG, ... constants are defined, so
+ one can:
+
+ $ bunyan -c 'this.level >= ERROR && this.component === "http"' foo.log
+ ...
+
+ And example of the speed improvement on a 10 MiB log example:
+
+ $ time BUNYAN_EXEC=vm bunyan -c 'this.level === ERROR' big.log | cat >slow
+
+ real 0m6.349s
+ user 0m6.292s
+ sys 0m0.110s
+
+ $ time bunyan -c 'this.level === ERROR' big.log | cat >fast
+
+ real 0m0.333s
+ user 0m0.303s
+ sys 0m0.028s
+
+ The change was courtesy Patrick Mooney (https://github.com/pfmooney). Thanks!
+
+- Add `bunyan -0 ...` shortcut for `bunyan -o bunyan ...`.
+
+- [issue #135] **Backward incompatible.** Drop dtrace-provider even from
+ `optionalDependencies`. Dtrace-provider has proven a consistent barrier to
+ installing bunyan, because it is a binary dep. Even as an *optional* dep it
+ still caused confusion and install noise.
+
+ Users of Bunyan on dtrace-y platforms (SmartOS, Mac, Illumos, Solaris) will
+ need to manually `npm install dtrace-provider` themselves to get [Bunyan's
+ dtrace support](https://github.com/trentm/node-bunyan#runtime-log-snooping-via-dtrace)
+ to work. If not installed, bunyan should stub it out properly.
+
+
+
+## bunyan 0.23.1
+
+- [pull #125, pull #97, issue #73] Unref rotating-file timeout which was
+ preventing processes from exiting (by https://github.com/chakrit and
+ https://github.com/glenn-murray-bse). Note: this only fixes the issue
+ for node 0.10 and above.
+
+
+## bunyan 0.23.0
+
+- [issue #139] Fix `bunyan` crash on a log record with `res.header` that is an
+ object. A side effect of this improvement is that a record with `res.statusCode`
+ but no header info will render a response block, for example:
+
+ [2012-08-08T10:25:47.637Z] INFO: my-service/12859 on my-host: some message (...)
+ ...
+ --
+ HTTP/1.1 200 OK
+ --
+ ...
+
+- [pull #42] Fix `bunyan` crash on a log record with `req.headers` that is a *string*
+ (by https://github.com/aexmachina).
+
+- Drop node 0.6 support. I can't effectively `npm install` with a node 0.6
+ anymore.
+
+- [issue #85] Ensure logging a non-object/non-string doesn't throw (by
+ https://github.com/mhart). This changes fixes:
+
+ log.info() # TypeError: Object.keys called on non-object
+ log.info() # "msg":"" (instead of wanted "msg":"[Function]")
+ log.info() # "msg":"" (instead of wanted "msg":util.format())
+
+
+## bunyan 0.22.3
+
+- Republish the same code to npm.
+
+
+## bunyan 0.22.2
+
+Note: Bad release. The published package in the npm registry got corrupted. Use 0.22.3 or later.
+
+- [issue #131] Allow `log.info()` and, most importantly, don't crash on that.
+
+- Update 'mv' optional dep to latest.
+
+
+## bunyan 0.22.1
+
+- [issue #111] Fix a crash when attempting to use `bunyan -p` on a platform without
+ dtrace.
+
+- [issue #101] Fix a crash in `bunyan` rendering a record with unexpected "res.headers".
+
+
+## bunyan 0.22.0
+
+- [issue #104] `log.reopenFileStreams()` convenience method to be used with external log
+ rotation.
+
+
+## bunyan 0.21.4
+
+- [issue #96] Fix `bunyan` to default to paging (with `less`) by default in node 0.10.0.
+ The intention has always been to default to paging for node >=0.8.
+
+
+## bunyan 0.21.3
+
+- [issue #90] Fix `bunyan -p '*'` breakage in version 0.21.2.
+
+
+## bunyan 0.21.2
+
+**Note: Bad release. The switchrate change below broke `bunyan -p '*'` usage
+(see issue #90). Use 0.21.3 or later.**
+
+- [issue #88] Should be able to efficiently combine "-l" with "-p *".
+
+- Avoid DTrace buffer filling up, e.g. like this:
+
+ $ bunyan -p 42241 > /tmp/all.log
+ dtrace: error on enabled probe ID 3 (ID 75795: bunyan42241:mod-87ea640:log-trace:log-trace): out of scratch space in action #1 at DIF offset 12
+ dtrace: error on enabled probe ID 3 (ID 75795: bunyan42241:mod-87ea640:log-trace:log-trace): out of scratch space in action #1 at DIF offset 12
+ dtrace: 138 drops on CPU 4
+ ...
+
+ From Bryan: "the DTrace buffer is filling up because the string size is so
+ large... by increasing the switchrate, you're increasing the rate at
+ which that buffer is emptied."
+
+
+## bunyan 0.21.1
+
+- [pull #83] Support rendering 'client_res' key in bunyan CLI (by
+ github.com/mcavage).
+
+
+## bunyan 0.21.0
+
+- 'make check' clean, 4-space indenting. No functional change here, just
+ lots of code change.
+- [issue #80, #82] Drop assert that broke using 'rotating-file' with
+ a default `period` (by github.com/ricardograca).
+
+
+## bunyan 0.20.0
+
+- [Slight backward incompatibility] Fix serializer bug introduced in 0.18.3
+ (see below) to only apply serializers to log records when appropriate.
+
+ This also makes a semantic change to custom serializers. Before this change
+ a serializer function was called for a log record key when that value was
+ truth-y. The semantic change is to call the serializer function as long
+ as the value is not `undefined`. That means that a serializer function
+ should handle falsey values such as `false` and `null`.
+
+- Update to latest 'mv' dep (required for rotating-file support) to support
+ node v0.10.0.
+
+
+## bunyan 0.19.0
+
+**WARNING**: This release includes a bug introduced in bunyan 0.18.3 (see
+below). Please upgrade to bunyan 0.20.0.
+
+- [Slight backward incompatibility] Change the default error serialization
+ (a.k.a. `bunyan.stdSerializers.err`) to *not* serialize all additional
+ attributes of the given error object. This is an open door to unsafe logging
+ and logging should always be safe. With this change, error serialization
+ will log these attributes: message, name, stack, code, signal. The latter
+ two are added because some core node APIs include those fields (e.g.
+ `child_process.exec`).
+
+ Concrete examples where this has hurt have been the "domain" change
+ necessitating 0.18.3 and a case where
+ [node-restify](https://github.com/mcavage/node-restify) uses an error object
+ as the response object. When logging the `err` and `res` in the same log
+ statement (common for restify audit logging), the `res.body` would be JSON
+ stringified as '[Circular]' as it had already been emitted for the `err` key.
+ This results in a WTF with the bunyan CLI because the `err.body` is not
+ rendered.
+
+ If you need the old behaviour back you will need to do this:
+
+ var bunyan = require('bunyan');
+ var errSkips = {
+ // Skip domain keys. `domain` especially can have huge objects that can
+ // OOM your app when trying to JSON.stringify.
+ domain: true,
+ domain_emitter: true,
+ domain_bound: true,
+ domain_thrown: true
+ };
+ bunyan.stdSerializers.err = function err(err) {
+ if (!err || !err.stack)
+ return err;
+ var obj = {
+ message: err.message,
+ name: err.name,
+ stack: getFullErrorStack(err)
+ }
+ Object.keys(err).forEach(function (k) {
+ if (err[k] !== undefined && !errSkips[k]) {
+ obj[k] = err[k];
+ }
+ });
+ return obj;
+ };
+
+- "long" and "bunyan" output formats for the CLI. `bunyan -o long` is the default
+ format, the same as before, just called "long" now instead of the cheesy "paul"
+ name. The "bunyan" output format is the same as "json-0", just with a more
+ convenient name.
+
+
+## bunyan 0.18.3
+
+**WARNING**: This release introduced a bug such that all serializers are
+applied to all log records even if the log record did not contain the key
+for that serializer. If a logger serializer function does not handle
+being given `undefined`, then you'll get warnings like this on stderr:
+
+ bunyan: ERROR: This should never happen. This is a bug in or in this application. Exception from "foo" Logger serializer: Error: ...
+ at Object.bunyan.createLogger.serializers.foo (.../myapp.js:20:15)
+ at Logger._applySerializers (.../lib/bunyan.js:644:46)
+ at Array.forEach (native)
+ at Logger._applySerializers (.../lib/bunyan.js:640:33)
+ ...
+
+and the following junk in written log records:
+
+ "foo":"(Error in Bunyan log "foo" serializer broke field. See stderr for details.)"
+
+Please upgrade to bunyan 0.20.0.
+
+
+- Change the `bunyan.stdSerializers.err` serializer for errors to *exclude*
+ [the "domain*" keys](http://nodejs.org/docs/latest/api/all.html#all_additions_to_error_objects).
+ `err.domain` will include its assigned members which can arbitrarily large
+ objects that are not intended for logging.
+
+- Make the "dtrace-provider" dependency optional. I hate to do this, but
+ installing bunyan on Windows is made very difficult with this as a required
+ dep. Even though "dtrace-provider" stubs out for non-dtrace-y platforms,
+ without a compiler and Python around, node-gyp just falls over.
+
+
+## bunyan 0.18.2
+
+- [pull #67] Remove debugging prints in rotating-file support.
+ (by github.com/chad3814).
+- Update to dtrace-provider@0.2.7.
+
+
+## bunyan 0.18.1
+
+- Get the `bunyan` CLI to **not** automatically page (i.e. pipe to `less`)
+ if stdin isn't a TTY, or if following dtrace probe output (via `-p PID`),
+ or if not given log file arguments.
+
+
+## bunyan 0.18.0
+
+- Automatic paging support in the `bunyan` CLI (similar to `git log` et al).
+ IOW, `bunyan` will open your pager (by default `less`) and pipe rendered
+ log output through it. A main benefit of this is getting colored logs with
+ a pager without the pain. Before you had to explicit use `--color` to tell
+ bunyan to color output when the output was not a TTY:
+
+ bunyan foo.log --color | less -R # before
+ bunyan foo.log # now
+
+ Disable with the `--no-pager` option or the `BUNYAN_NO_PAGER=1` environment
+ variable.
+
+ Limitations: Only supported for node >=0.8. Windows is not supported (at
+ least not yet).
+
+- Switch test suite to nodeunit (still using a node-tap'ish API via
+ a helper).
+
+
+## bunyan 0.17.0
+
+- [issue #33] Log rotation support:
+
+ var bunyan = require('bunyan');
+ var log = bunyan.createLogger({
+ name: 'myapp',
+ streams: [{
+ type: 'rotating-file',
+ path: '/var/log/myapp.log',
+ count: 7,
+ period: 'daily'
+ }]
+ });
+
+
+- Tweak to CLI default pretty output: don't special case "latency" field.
+ The special casing was perhaps nice, but less self-explanatory.
+ Before:
+
+ [2012-12-27T21:17:38.218Z] INFO: audit/45769 on myserver: handled: 200 (15ms, audit=true, bar=baz)
+ GET /foo
+ ...
+
+ After:
+
+ [2012-12-27T21:17:38.218Z] INFO: audit/45769 on myserver: handled: 200 (audit=true, bar=baz, latency=15)
+ GET /foo
+ ...
+
+- *Exit* CLI on EPIPE, otherwise we sit there useless processing a huge log
+ file with, e.g. `bunyan huge.log | head`.
+
+
+## bunyan 0.16.8
+
+- Guards on `-c CONDITION` usage to attempt to be more user friendly.
+ Bogus JS code will result in this:
+
+ $ bunyan portal.log -c 'this.req.username==boo@foo'
+ bunyan: error: illegal CONDITION code: SyntaxError: Unexpected token ILLEGAL
+ CONDITION script:
+ Object.prototype.TRACE = 10;
+ Object.prototype.DEBUG = 20;
+ Object.prototype.INFO = 30;
+ Object.prototype.WARN = 40;
+ Object.prototype.ERROR = 50;
+ Object.prototype.FATAL = 60;
+ this.req.username==boo@foo
+ Error:
+ SyntaxError: Unexpected token ILLEGAL
+ at new Script (vm.js:32:12)
+ at Function.Script.createScript (vm.js:48:10)
+ at parseArgv (/Users/trentm/tm/node-bunyan-0.x/bin/bunyan:465:27)
+ at main (/Users/trentm/tm/node-bunyan-0.x/bin/bunyan:1252:16)
+ at Object. (/Users/trentm/tm/node-bunyan-0.x/bin/bunyan:1330:3)
+ at Module._compile (module.js:449:26)
+ at Object.Module._extensions..js (module.js:467:10)
+ at Module.load (module.js:356:32)
+ at Function.Module._load (module.js:312:12)
+ at Module.runMain (module.js:492:10)
+
+ And all CONDITION scripts will be run against a minimal valid Bunyan
+ log record to ensure they properly guard against undefined values
+ (at least as much as can reasonably be checked). For example:
+
+ $ bunyan portal.log -c 'this.req.username=="bob"'
+ bunyan: error: CONDITION code cannot safely filter a minimal Bunyan log record
+ CONDITION script:
+ Object.prototype.TRACE = 10;
+ Object.prototype.DEBUG = 20;
+ Object.prototype.INFO = 30;
+ Object.prototype.WARN = 40;
+ Object.prototype.ERROR = 50;
+ Object.prototype.FATAL = 60;
+ this.req.username=="bob"
+ Minimal Bunyan log record:
+ {
+ "v": 0,
+ "level": 30,
+ "name": "name",
+ "hostname": "hostname",
+ "pid": 123,
+ "time": 1355514346206,
+ "msg": "msg"
+ }
+ Filter error:
+ TypeError: Cannot read property 'username' of undefined
+ at bunyan-condition-0:7:9
+ at Script.Object.keys.forEach.(anonymous function) [as runInNewContext] (vm.js:41:22)
+ at parseArgv (/Users/trentm/tm/node-bunyan-0.x/bin/bunyan:477:18)
+ at main (/Users/trentm/tm/node-bunyan-0.x/bin/bunyan:1252:16)
+ at Object. (/Users/trentm/tm/node-bunyan-0.x/bin/bunyan:1330:3)
+ at Module._compile (module.js:449:26)
+ at Object.Module._extensions..js (module.js:467:10)
+ at Module.load (module.js:356:32)
+ at Function.Module._load (module.js:312:12)
+ at Module.runMain (module.js:492:10)
+
+ A proper way to do that condition would be:
+
+ $ bunyan portal.log -c 'this.req && this.req.username=="bob"'
+
+
+
+## bunyan 0.16.7
+
+- [issue #59] Clear a possibly interrupted ANSI color code on signal
+ termination.
+
+
+## bunyan 0.16.6
+
+- [issue #56] Support `bunyan -p NAME` to dtrace all PIDs matching 'NAME' in
+ their command and args (using `ps -A -o pid,command | grep NAME` or, on SunOS
+ `pgrep -lf NAME`). E.g.:
+
+ bunyan -p myappname
+
+ This is useful for usage of node's [cluster
+ module](http://nodejs.org/docs/latest/api/all.html#all_cluster) where you'll
+ have multiple worker processes.
+
+
+## bunyan 0.16.5
+
+- Allow `bunyan -p '*'` to capture bunyan dtrace probes from **all** processes.
+- issue #55: Add support for `BUNYAN_NO_COLOR` environment variable to
+ turn off all output coloring. This is still overridden by the `--color`
+ and `--no-color` options.
+
+
+## bunyan 0.16.4
+
+- issue #54: Ensure (again, see 0.16.2) that stderr from the dtrace child
+ process (when using `bunyan -p PID`) gets through. There had been a race
+ between exiting bunyan and the flushing of the dtrace process' stderr.
+
+
+## bunyan 0.16.3
+
+- Drop 'trentm-dtrace-provider' fork dep now that
+ has been resolved.
+ Back to dtrace-provider.
+
+
+## bunyan 0.16.2
+
+- Ensure that stderr from the dtrace child process (when using `bunyan -p PID`)
+ gets through. The `pipe` usage wasn't working on SmartOS. This is important
+ to show the user if they need to 'sudo'.
+
+
+## bunyan 0.16.1
+
+- Ensure that a possible dtrace child process (with using `bunyan -p PID`) is
+ terminated on signal termination of the bunyan CLI (at least for SIGINT,
+ SIGQUIT, SIGTERM, SIGHUP).
+
+
+## bunyan 0.16.0
+
+- Add `bunyan -p PID` support. This is a convenience wrapper that effectively
+ calls:
+
+ dtrace -x strsize=4k -qn 'bunyan$PID:::log-*{printf("%s", copyinstr(arg0))}' | bunyan
+
+
+## bunyan 0.15.0
+
+- issue #48: Dtrace support! The elevator pitch is you can watch all logging
+ from all Bunyan-using process with something like this:
+
+ dtrace -x strsize=4k -qn 'bunyan*:::log-*{printf("%d: %s: %s", pid, probefunc, copyinstr(arg0))}'
+
+ And this can include log levels *below* what the service is actually configured
+ to log. E.g. if the service is only logging at INFO level and you need to see
+ DEBUG log messages, with this you can. Obviously this only works on dtrace-y
+ platforms: Illumos derivatives of SunOS (e.g. SmartOS, OmniOS), Mac, FreeBSD.
+
+ Or get the bunyan CLI to render logs nicely:
+
+ dtrace -x strsize=4k -qn 'bunyan*:::log-*{printf("%s", copyinstr(arg0))}' | bunyan
+
+ See for details. By
+ Bryan Cantrill.
+
+
+## bunyan 0.14.6
+
+- Export `bunyan.safeCycles()`. This may be useful for custom `type == "raw"`
+ streams that may do JSON stringification of log records themselves. Usage:
+
+ var str = JSON.stringify(rec, bunyan.safeCycles());
+
+- [issue #49] Allow a `log.child()` to specify the level of inherited streams.
+ For example:
+
+ # Before
+ var childLog = log.child({...});
+ childLog.level('debug');
+
+ # After
+ var childLog = log.child({..., level: 'debug'});
+
+- Improve the Bunyan CLI crash message to make it easier to provide relevant
+ details in a bug report.
+
+
+## bunyan 0.14.5
+
+- Fix a bug in the long-stack-trace error serialization added in 0.14.4. The
+ symptom:
+
+ bunyan@0.14.4: .../node_modules/bunyan/lib/bunyan.js:1002
+ var ret = ex.stack || ex.toString();
+ ^
+ TypeError: Cannot read property 'stack' of undefined
+ at getFullErrorStack (.../node_modules/bunyan/lib/bunyan.js:1002:15)
+ ...
+
+
+## bunyan 0.14.4
+
+- **Bad release. Use 0.14.5 instead.**
+- Improve error serialization to walk the chain of `.cause()` errors
+ from the likes of `WError` or `VError` error classes from
+ [verror](https://github.com/davepacheco/node-verror) and
+ [restify v2.0](https://github.com/mcavage/node-restify). Example:
+
+ [2012-10-11T00:30:21.871Z] ERROR: imgapi/99612 on 0525989e-2086-4270-b960-41dd661ebd7d: my-message
+ ValidationFailedError: my-message; caused by TypeError: cause-error-message
+ at Server.apiPing (/opt/smartdc/imgapi/lib/app.js:45:23)
+ at next (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:550:50)
+ at Server.setupReq (/opt/smartdc/imgapi/lib/app.js:178:9)
+ at next (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:550:50)
+ at Server.parseBody (/opt/smartdc/imgapi/node_modules/restify/lib/plugins/body_parser.js:15:33)
+ at next (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:550:50)
+ at Server.parseQueryString (/opt/smartdc/imgapi/node_modules/restify/lib/plugins/query.js:40:25)
+ at next (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:550:50)
+ at Server._run (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:579:17)
+ at Server._handle.log.trace.req (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:480:38)
+ Caused by: TypeError: cause-error-message
+ at Server.apiPing (/opt/smartdc/imgapi/lib/app.js:40:25)
+ at next (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:550:50)
+ at Server.setupReq (/opt/smartdc/imgapi/lib/app.js:178:9)
+ at next (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:550:50)
+ at Server.parseBody (/opt/smartdc/imgapi/node_modules/restify/lib/plugins/body_parser.js:15:33)
+ at next (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:550:50)
+ at Server.parseQueryString (/opt/smartdc/imgapi/node_modules/restify/lib/plugins/query.js:40:25)
+ at next (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:550:50)
+ at Server._run (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:579:17)
+ at Server._handle.log.trace.req (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:480:38)
+
+
+## bunyan 0.14.2
+
+- [issue #45] Fix bunyan CLI (default output mode) to not crash on a 'res'
+ field that isn't a response object, but a string.
+
+
+## bunyan 0.14.1
+
+- [issue #44] Fix the default `bunyan` CLI output of a `res.body` that is an
+ object instead of a string. See issue#38 for the same with `req.body`.
+
+
+## bunyan 0.14.0
+
+- [pull #41] Safe `JSON.stringify`ing of emitted log records to avoid blowing
+ up on circular objects (by Isaac Schlueter).
+
+
+## bunyan 0.13.5
+
+- [issue #39] Fix a bug with `client_req` handling in the default output
+ of the `bunyan` CLI.
+
+
+## bunyan 0.13.4
+
+- [issue #38] Fix the default `bunyan` CLI output of a `req.body` that is an
+ object instead of a string.
+
+
+## bunyan 0.13.3
+
+- Export `bunyan.resolveLevel(NAME-OR-NUM)` to resolve a level name or number
+ to its log level number value:
+
+ > bunyan.resolveLevel('INFO')
+ 30
+ > bunyan.resolveLevel('debug')
+ 20
+
+ A side-effect of this change is that the uppercase level name is now allowed
+ in the logger constructor.
+
+
+## bunyan 0.13.2
+
+- [issue #35] Ensure that an accidental `log.info(BUFFER)`, where BUFFER is
+ a node.js Buffer object, doesn't blow up.
+
+
+## bunyan 0.13.1
+
+- [issue #34] Ensure `req.body`, `res.body` and other request/response fields
+ are emitted by the `bunyan` CLI (mostly by Rob Gulewich).
+
+
+
+## bunyan 0.13.0
+
+- [issue #31] Re-instate defines for the (uppercase) log level names (TRACE,
+ DEBUG, etc.) in `bunyan -c "..."` filtering condition code. E.g.:
+
+ $ ... | bunyan -c 'level >= ERROR'
+
+
+## bunyan 0.12.0
+
+- [pull #32] `bunyan -o short` for more concise output (by Dave Pacheco). E.g.:
+
+ 22:56:52.856Z INFO myservice: My message
+
+ instead of:
+
+ [2012-02-08T22:56:52.856Z] INFO: myservice/123 on example.com: My message
+
+
+## bunyan 0.11.3
+
+- Add '--strict' option to `bunyan` CLI to suppress all but legal Bunyan JSON
+ log lines. By default non-JSON, and non-Bunyan lines are passed through.
+
+
+## bunyan 0.11.2
+
+- [issue #30] Robust handling of 'req' field without a 'headers' subfield
+ in `bunyan` CLI.
+- [issue #31] Pull the TRACE, DEBUG, et al defines from `bunyan -c "..."`
+ filtering code. This was added in v0.11.1, but has a significant adverse
+ affect.
+
+
+## bunyan 0.11.1
+
+- **Bad release. The TRACE et al names are bleeding into the log records
+ when using '-c'.**
+- Add defines for the (uppercase) log level names (TRACE, DEBUG, etc.) in
+ `bunyan -c "..."` filtering condition code. E.g.:
+
+ $ ... | bunyan -c 'level >= ERROR'
+
+
+## bunyan 0.11.0
+
+- [pull #29] Add -l/--level for level filtering, and -c/--condition for
+ arbitrary conditional filtering (by github.com/isaacs):
+
+ $ ... | bunyan -l error # filter out log records below error
+ $ ... | bunyan -l 50 # numeric value works too
+ $ ... | bunyan -c 'level===50' # equiv with -c filtering
+ $ ... | bunyan -c 'pid===123' # filter on any field
+ $ ... | bunyan -c 'pid===123' -c '_audit' # multiple filters
+
+
+## bunyan 0.10.0
+
+- [pull #24] Support for gzip'ed log files in the bunyan CLI (by
+ github.com/mhart):
+
+ $ bunyan foo.log.gz
+ ...
+
+
+## bunyan 0.9.0
+
+- [pull #16] Bullet proof the `bunyan.stdSerializers` (by github.com/rlidwka).
+
+- [pull #15] The `bunyan` CLI will now chronologically merge multiple log
+ streams when it is given multiple file arguments. (by github.com/davepacheco)
+
+ $ bunyan foo.log bar.log
+ ... merged log records ...
+
+- [pull #15] A new `bunyan.RingBuffer` stream class that is useful for
+ keeping the last N log messages in memory. This can be a fast way to keep
+ recent, and thus hopefully relevant, log messages. (by @dapsays,
+ github.com/davepacheco)
+
+ Potential uses: Live debugging if a running process could inspect those
+ messages. One could dump recent log messages at a finer log level than is
+ typically logged on
+ [`uncaughtException`](http://nodejs.org/docs/latest/api/all.html#all_event_uncaughtexception).
+
+ var ringbuffer = new bunyan.RingBuffer({ limit: 100 });
+ var log = new bunyan({
+ name: 'foo',
+ streams: [{
+ type: 'raw',
+ stream: ringbuffer,
+ level: 'debug'
+ }]
+ });
+
+ log.info('hello world');
+ console.log(ringbuffer.records);
+
+- Add support for "raw" streams. This is a logging stream that is given
+ raw log record objects instead of a JSON-stringified string.
+
+ function Collector() {
+ this.records = [];
+ }
+ Collector.prototype.write = function (rec) {
+ this.records.push(rec);
+ }
+ var log = new Logger({
+ name: 'mylog',
+ streams: [{
+ type: 'raw',
+ stream: new Collector()
+ }]
+ });
+
+ See "examples/raw-stream.js". I expect raw streams to be useful for
+ piping Bunyan logging to separate services (e.g. ,
+ ) or to separate in-process handling.
+
+- Add test/corpus/*.log files (accidentally excluded) so the test suite
+ actually works(!).
+
+
+## bunyan 0.8.0
+
+- [pull #21] Bunyan loggers now re-emit `fs.createWriteStream` error events.
+ By github.com/EvanOxfeld. See "examples/handle-fs-error.js" and
+ "test/error-event.js" for details.
+
+ var log = new Logger({name: 'mylog', streams: [{path: FILENAME}]});
+ log.on('error', function (err, stream) {
+ // Handle error writing to or creating FILENAME.
+ });
+
+- jsstyle'ing (via `make check`)
+
+
+## bunyan 0.7.0
+
+- [issue #12] Add `bunyan.createLogger(OPTIONS)` form, as is more typical in
+ node.js APIs. This'll eventually become the preferred form.
+
+
+## bunyan 0.6.9
+
+- Change `bunyan` CLI default output to color "src" info red. Before the "src"
+ information was uncolored. The "src" info is the filename, line number and
+ function name resulting from using `src: true` in `Logger` creation. I.e.,
+ the `(/Users/trentm/tm/node-bunyan/examples/hi.js:10)` in:
+
+ [2012-04-10T22:28:58.237Z] INFO: myapp/39339 on banana.local (/Users/trentm/tm/node-bunyan/examples/hi.js:10): hi
+
+- Tweak `bunyan` CLI default output to still show an "err" field if it doesn't
+ have a "stack" attribute.
+
+
+## bunyan 0.6.8
+
+- Fix bad bug in `log.child({...}, true);` where the added child fields **would
+ be added to the parent's fields**. This bug only existed for the "fast child"
+ path (that second `true` argument). A side-effect of fixing this is that
+ the "fast child" path is only 5 times as fast as the regular `log.child`,
+ instead of 10 times faster.
+
+
+## bunyan 0.6.7
+
+- [issue #6] Fix bleeding 'type' var to global namespace. (Thanks Mike!)
+
+
+## bunyan 0.6.6
+
+- Add support to the `bunyan` CLI taking log file path args, `bunyan foo.log`,
+ in addition to the usual `cat foo.log | bunyan`.
+- Improve reliability of the default output formatting of the `bunyan` CLI.
+ Before it could blow up processing log records missing some expected
+ fields.
+
+
+## bunyan 0.6.5
+
+- ANSI coloring output from `bunyan` CLI tool (for the default output mode/style).
+ Also add the '--color' option to force coloring if the output stream is not
+ a TTY, e.g. `cat my.log | bunyan --color | less -R`. Use `--no-color` to
+ disable coloring, e.g. if your terminal doesn't support ANSI codes.
+- Add 'level' field to log record before custom fields for that record. This
+ just means that the raw record JSON will show the 'level' field earlier,
+ which is a bit nicer for raw reading.
+
+
+## bunyan 0.6.4
+
+- [issue #5] Fix `log.info() -> boolean` to work properly. Previous all were
+ returning false. Ditto all trace/debug/.../fatal methods.
+
+
+## bunyan 0.6.3
+
+- Allow an optional `msg` and arguments to the `log.info( err)` logging
+ form. For example, before:
+
+ log.debug(my_error_instance) // good
+ log.debug(my_error_instance, "boom!") // wasn't allowed
+
+ Now the latter is allowed if you want to expliciting set the log msg. Of course
+ this applies to all the `log.{trace|debug|info...}()` methods.
+
+- `bunyan` cli output: clarify extra fields with quoting if empty or have
+ spaces. E.g. 'cmd' and 'stderr' in the following:
+
+ [2012-02-12T00:30:43.736Z] INFO: mo-docs/43194 on banana.local: buildDocs results (req_id=185edca2-2886-43dc-911c-fe41c09ec0f5, route=PutDocset, error=null, stderr="", cmd="make docs")
+
+
+## bunyan 0.6.2
+
+- Fix/guard against unintended inclusion of some files in npm published package
+ due to
+
+
+## bunyan 0.6.1
+
+- Internal: starting jsstyle usage.
+- Internal: add .npmignore. Previous packages had reams of bunyan crud in them.
+
+
+## bunyan 0.6.0
+
+- Add 'pid' automatic log record field.
+
+
+## bunyan 0.5.3
+
+- Add 'client_req' (HTTP client request) standard formatting in `bunyan` CLI
+ default output.
+- Improve `bunyan` CLI default output to include *all* log record keys. Unknown keys
+ are either included in the first line parenthetical (if short) or in the indented
+ subsequent block (if long or multiline).
+
+
+## bunyan 0.5.2
+
+- [issue #3] More type checking of `new Logger(...)` and `log.child(...)`
+ options.
+- Start a test suite.
+
+
+## bunyan 0.5.1
+
+- [issue #2] Add guard on `JSON.stringify`ing of log records before emission.
+ This will prevent `log.info` et al throwing on record fields that cannot be
+ represented as JSON. An error will be printed on stderr and a clipped log
+ record emitted with a 'bunyanMsg' key including error details. E.g.:
+
+ bunyan: ERROR: could not stringify log record from /Users/trentm/tm/node-bunyan/examples/unstringifyable.js:12: TypeError: Converting circular structure to JSON
+ {
+ "name": "foo",
+ "hostname": "banana.local",
+ "bunyanMsg": "bunyan: ERROR: could not stringify log record from /Users/trentm/tm/node-bunyan/examples/unstringifyable.js:12: TypeError: Converting circular structure to JSON",
+ ...
+
+ Some timing shows this does effect log speed:
+
+ $ node tools/timeguard.js # before
+ Time try/catch-guard on JSON.stringify:
+ - log.info: 0.07365ms per iteration
+ $ node tools/timeguard.js # after
+ Time try/catch-guard on JSON.stringify:
+ - log.info: 0.07368ms per iteration
+
+
+## bunyan 0.5.0
+
+- Use 10/20/... instead of 1/2/... for level constant values. Ostensibly this
+ allows for intermediary levels from the defined "trace/debug/..." set.
+ However, that is discouraged. I'd need a strong user argument to add
+ support for easily using alternative levels. Consider using a separate
+ JSON field instead.
+- s/service/name/ for Logger name field. "service" is unnecessarily tied
+ to usage for a service. No need to differ from log4j Logger "name".
+- Add `log.level(...)` and `log.levels(...)` API for changing logger stream
+ levels.
+- Add `TRACE|DEBUG|INFO|WARN|ERROR|FATAL` level constants to exports.
+- Add `log.info(err)` special case for logging an `Error` instance. For
+ example `log.info(new TypeError("boom")` will produce:
+
+ ...
+ "err": {
+ "message": "boom",
+ "name": "TypeError",
+ "stack": "TypeError: boom\n at Object. ..."
+ },
+ "msg": "boom",
+ ...
+
+
+## bunyan 0.4.0
+
+- Add `new Logger({src: true})` config option to have a 'src' attribute be
+ automatically added to log records with the log call source info. Example:
+
+ "src": {
+ "file": "/Users/trentm/tm/node-bunyan/examples/src.js",
+ "line": 20,
+ "func": "Wuzzle.woos"
+ },
+
+
+## bunyan 0.3.0
+
+- `log.child(options[, simple])` Added `simple` boolean arg. Set `true` to
+ assert that options only add fields (no config changes). Results in a 10x
+ speed increase in child creation. See "tools/timechild.js". On my Mac,
+ "fast child" creation takes about 0.001ms. IOW, if your app is dishing
+ 10,000 req/s, then creating a log child for each request will take
+ about 1% of the request time.
+- `log.clone` -> `log.child` to better reflect the relationship: streams and
+ serializers are inherited. Streams can't be removed as part of the child
+ creation. The child doesn't own the parent's streams (so can't close them).
+- Clean up Logger creation. The goal here was to ensure `log.child` usage
+ is fast. TODO: measure that.
+- Add `Logger.stdSerializers.err` serializer which is necessary to get good
+ Error object logging with node 0.6 (where core Error object properties
+ are non-enumerable).
+
+
+## bunyan 0.2.0
+
+- Spec'ing core/recommended log record fields.
+- Add `LOG_VERSION` to exports.
+- Improvements to request/response serializations.
+
+
+## bunyan 0.1.0
+
+First release.
diff --git a/packages/logging/.npm/package/node_modules/bunyan/LICENSE.txt b/packages/logging/.npm/package/node_modules/bunyan/LICENSE.txt
new file mode 100644
index 0000000..964efc1
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan/LICENSE.txt
@@ -0,0 +1,23 @@
+# This is the MIT license
+
+Copyright (c) 2011-2012 Joyent Inc.
+
+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.
+
diff --git a/packages/logging/.npm/package/node_modules/bunyan/Makefile b/packages/logging/.npm/package/node_modules/bunyan/Makefile
new file mode 100644
index 0000000..082f3ca
--- /dev/null
+++ b/packages/logging/.npm/package/node_modules/bunyan/Makefile
@@ -0,0 +1,136 @@
+
+#---- Tools
+
+NODEUNIT := ./node_modules/.bin/nodeunit
+SUDO := sudo
+ifeq ($(shell uname -s),SunOS)
+ # On SunOS (e.g. SmartOS) we expect to run the test suite as the
+ # root user -- necessary to run dtrace. Therefore `pfexec` isn't
+ # necessary.
+ SUDO :=
+endif
+DTRACE_UP_IN_HERE=
+ifeq ($(shell uname -s),SunOS)
+ DTRACE_UP_IN_HERE=1
+endif
+ifeq ($(shell uname -s),Darwin)
+ DTRACE_UP_IN_HERE=1
+endif
+NODEOPT ?= $(HOME)/opt
+
+
+
+#---- Files
+
+JSSTYLE_FILES := $(shell find lib test tools examples -name "*.js") bin/bunyan
+# All test files *except* dtrace.test.js.
+NON_DTRACE_TEST_FILES := $(shell ls -1 test/*.test.js | grep -v dtrace | xargs)
+
+
+
+#---- Targets
+
+all $(NODEUNIT):
+ npm install
+
+# Ensure all version-carrying files have the same version.
+.PHONY: versioncheck
+versioncheck:
+ @echo version is: $(shell cat package.json | json version)
+ [[ `cat package.json | json version` == `grep '^## ' CHANGES.md | head -1 | awk '{print $$3}'` ]]
+ [[ `cat package.json | json version` == `grep '^var VERSION' bin/bunyan | awk -F"'" '{print $$2}'` ]]
+ [[ `cat package.json | json version` == `grep '^var VERSION' lib/bunyan.js | awk -F"'" '{print $$2}'` ]]
+ @echo Version check ok.
+
+.PHONY: cutarelease
+cutarelease: versioncheck check
+ [[ `git status | tail -n1 | cut -c1-17` == "nothing to commit" ]]
+ ./tools/cutarelease.py -p bunyan -f package.json -f lib/bunyan.js -f bin/bunyan
+
+.PHONY: docs
+docs:
+ @[[ `which ronn` ]] || (echo "No 'ronn' on your PATH. Install with 'gem install ronn'" && exit 2)
+ mkdir -p man/man1
+ ronn --style=toc --manual="bunyan manual" --date=$(shell git log -1 --pretty=format:%cd --date=short) --roff --html docs/bunyan.1.ronn
+ python -c 'import sys; h = open("docs/bunyan.1.html").read(); h = h.replace(".mp dt.flush {float:left;width:8ex}", ""); open("docs/bunyan.1.html", "w").write(h)'
+ python -c 'import sys; h = open("docs/bunyan.1.html").read(); h = h.replace("