Browse Source

add logger

pull/62/head
Cian Butler 3 years ago
parent
commit
6641ecb9eb
Signed by: butlerx GPG Key ID: B37CA765BAA89170
9 changed files with 285 additions and 102 deletions
  1. +0
    -1
      .eslintignore
  2. +11
    -3
      .eslintrc.js
  3. +26
    -22
      bot/Bot.js
  4. +18
    -14
      bot/index.js
  5. +16
    -0
      bot/logger.js
  6. +0
    -34
      config/config.json
  7. +34
    -0
      config/index.js
  8. +5
    -3
      package.json
  9. +175
    -25
      yarn.lock

+ 0
- 1
.eslintignore View File

@@ -1,3 +1,2 @@
node_modules/
.esm-cache
bot/index.js

+ 11
- 3
.eslintrc.js View File

@@ -2,11 +2,19 @@ module.exports = {
parserOptions: {
sourceType: 'module',
},
parser: 'babel-eslint',
root: true,
extends: ['coderdojo'],
env: {
es6: true,
node: true,
},
extends: ['airbnb'],
rules: {
'no-console': ['error', { allow: ['warn', 'trace', 'log', 'error'] }],
'class-methods-use-this': 0,
'linebreak-style': ['error', 'unix'],
'arrow-parens': ['error', 'as-needed'],
'no-param-reassign': ['error', { props: false }],
'func-style': ['error', 'declaration', { allowArrowFunctions: true }],
'no-use-before-define': ['error', { functions: false }],
'consistent-return': 0,
},
};

+ 26
- 22
bot/Bot.js View File

@@ -1,6 +1,7 @@
import _ from 'lodash';
import irc from 'irc';
import config from '../config/config.json';
import config from '../config';
import Logger from './logger';

const env = process.env.NODE_ENV || 'development';
const checkUserMode = () => true;
@@ -10,14 +11,15 @@ export default class Bot {
/**
* Initialize the bot
*/
constructor() {
constructor(conf, logger = Logger(config[env].nick)) {
// Don't join channels until registered on the server
this.registered = false;
this.delayedChannels = [];
this.commands = [];
this.msgs = [];
this.config = config[env];
console.log('Initializing...');
this.config = _.merge(config[env], conf);
this.logger = logger;
this.logger.info('Initializing...');
// init irc client
this.config.server = process.env.SERVER || this.config.server;
this.config.nick = process.env.NICK || this.config.nick;
@@ -38,7 +40,7 @@ export default class Bot {
joinChannels(channels) {
if (!_.isUndefined(channels)) {
if (this.registered) {
_.forEach(channels, (channel) => {
_.forEach(channels, channel => {
this.client.join(channel);
});
} else {
@@ -60,12 +62,13 @@ export default class Bot {
/**
* Initialize the bot and connect to irc server
*/
init() {
console.log(`Connecting to ${this.config.server} as ${this.config.nick}...`);
connect() {
this.logger.info(`Connecting to ${this.config.server} as ${this.config.nick}...`);
this.client = new irc.Client(this.config.server, this.config.nick, this.config.clientOptions);
this.client.logger = this.logger;
// handle connection to server for logging
this.client.addListener('registered', ({ server }) => {
console.log(`Connected to server ${server}`);
this.logger.info(`Connected to server ${server}`);
this.registered = true;

// Send connect commands after joining a server
@@ -81,7 +84,7 @@ export default class Bot {

// handle joins to channels for logging
this.client.addListener('join', (channel, nick) => {
console.log(`Joined ${channel} as ${nick}`);
this.logger.info(`Joined ${channel} as ${nick}`);
// Send join command after joining a channel
if (
!_.isUndefined(this.config.joinCommands) &&
@@ -95,26 +98,26 @@ export default class Bot {
});

// output errors
this.client.addListener('error', message => console.warn('IRC client error: ', message));
this.client.addListener('error', message => this.logger.warn('IRC client error: ', message));

this.client.addListener('message', function messageListener(from, to, text, message) {
console.log(`message from ${from} to ${to}: ${text}`);
this.client.addListener('message', (from, to, text, message) => {
this.logger.debug(`message from ${from} to ${to}: ${text}`);
// parse command
const cmdArr = text.trim().match(/^[.|!](\w+)\s?(.*)$/i);
if (!cmdArr || cmdArr.length <= 1) return false;
const command = cmdArr[1].toLowerCase();
// parse arguments
const cmdArgs = cmdArr[2];
console.log(cmdArr);
this.logger.debug(cmdArr);

// build callback options
if (this.config.nick === to) {
// private message commands
_.forEach(
this.msgs,
_.bind((c) => {
_.bind(c => {
if (command === c.cmd) {
console.log(`command: ${c.cmd}`);
this.logger.debug(`command: ${c.cmd}`);
// check user mode
if (checkUserMode(message, c.mode)) c.callback(this.client, message, cmdArgs);
}
@@ -124,17 +127,18 @@ export default class Bot {
// public commands
_.forEach(
this.commands,
_.bind((c) => {
_.bind(c => {
// If the command matches
if (command === c.cmd) {
// If the channel matches the command channels or is set to respond on all
// channels and is not in the commands excluded channels
if (_.includes(c.channel, to) || c.channel === 'all') {
if (_.isUndefined(c.exclude) || !_.includes(c.exclude, to)) {
console.log(`command: ${c.cmd}`);
// check user mode
if (checkUserMode(message, c.mode)) c.callback(this.client, message, cmdArgs);
}
if (
(_.includes(c.channel, to) || c.channel === 'all') &&
(_.isUndefined(c.exclude) || !_.includes(c.exclude, to))
) {
this.logger.debug(`command: ${c.cmd}`);
// check user mode
if (checkUserMode(message, c.mode)) c.callback(this.client, message, cmdArgs);
}
}
}, this),


+ 18
- 14
bot/index.js View File

@@ -1,28 +1,32 @@
import Bot from './Bot';
import pkg from '../package.json';
import glob from 'glob';
import { promisify } from 'util';
import Bot from './Bot';
import pkg from '../package.json';
import Logger from './logger';

const globP = promisify(glob);
const logger = Logger(`${pkg.name}: ${pkg.version}`);

process.env.NODE_ENV = process.env.NODE_ENV || 'development';
console.log(pkg.name, pkg.version, process.env.NODE_ENV);
const bot = new Bot();
bot.init();
logger.info(process.env.NODE_ENV);
const bot = new Bot(logger);
bot.connect();
globP(`${__dirname}/../plugins/*.js`)
.then(files => {
files.forEach(pluginName => {
import(pluginName)
.then(plugin => {
plugin.default(bot);
console.log(`Loaded ${pluginName} plugin.`);
logger.info(`Loaded ${pluginName} plugin.`);
})
.catch(err => {
console.error(err);
process.exit(1);
});
.catch(exit(1));
});
})
.catch(err => {
console.error(err);
process.exit(1);
});
.catch(exit(1));

function exit(code) {
return err => {
logger.error(err);
process.exitCode = code;
};
}

+ 16
- 0
bot/logger.js View File

@@ -0,0 +1,16 @@
import { createLogger, format, transports } from 'winston';

const {
combine, timestamp, label: labeler, printf, colorize,
} = format;

export default label =>
createLogger({
format: combine(
colorize({ all: true }),
labeler({ label }),
timestamp(),
printf(info => `${info.timestamp} [${info.label}] ${info.level}: ${info.message}`),
),
transports: [new transports.Console({ handleExceptions: true })],
});

+ 0
- 34
config/config.json View File

@@ -1,34 +0,0 @@
{
"production": {
"server": "localhost",
"nick": "butlerbot",
"connectCommands": [
{
"target": "nickserv",
"message": "identify"
}
],
"clientOptions": {
"userName": "butlerx",
"port": "6697",
"floodProtection": true,
"floodProtectionDelay": 175
}
},
"development": {
"server": "localhost",
"nick": "butlerDev",
"connectCommands": [
{
"target": "",
"message": ""
}
],
"clientOptions": {
"userName": "butlerx",
"port": "6697",
"floodProtection": true,
"floodProtectionDelay": 175
}
}
}

+ 34
- 0
config/index.js View File

@@ -0,0 +1,34 @@
export default {
production: {
server: 'localhost',
nick: 'butlerbot',
connectCommands: [
{
target: 'nickserv',
message: 'identify',
},
],
clientOptions: {
userName: 'butlerx',
port: '6697',
floodProtection: true,
floodProtectionDelay: 175,
},
},
development: {
server: 'localhost',
nick: 'butlerDev',
connectCommands: [
{
target: '',
message: '',
},
],
clientOptions: {
userName: 'butlerx',
port: '6697',
floodProtection: true,
floodProtectionDelay: 175,
},
},
};

+ 5
- 3
package.json View File

@@ -41,14 +41,16 @@
"glob": "^7.1.2",
"irc": "^0.5.2",
"lodash": "^4.17.4",
"request": "2.34"
"request": "2.34",
"winston": "^3.0.0-rc1"
},
"devDependencies": {
"babel-eslint": "7",
"eslint": "^4.6.0",
"eslint-config-coderdojo": "^1.0.6",
"eslint-config-airbnb": "^16.1.0",
"eslint-plugin-chai-friendly": "^0.4.0",
"eslint-plugin-import": "^2.7.0",
"eslint-plugin-jsx-a11y": "^5.1.1",
"eslint-plugin-jsx-a11y": "^6.0.2",
"eslint-plugin-lodash": "^2.4.4",
"eslint-plugin-node": "^5.1.1",
"eslint-plugin-promise": "^3.5.0",


+ 175
- 25
yarn.lock View File

@@ -140,6 +140,10 @@ ast-types-flow@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"

async@^1.0.0:
version "1.5.2"
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"

async@~0.9.0:
version "0.9.2"
resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
@@ -166,7 +170,7 @@ axobject-query@^0.1.0:
dependencies:
ast-types-flow "0.0.7"

babel-code-frame@^6.22.0:
babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
dependencies:
@@ -174,13 +178,55 @@ babel-code-frame@^6.22.0:
esutils "^2.0.2"
js-tokens "^3.0.2"

babel-runtime@^6.23.0, babel-runtime@^6.26.0:
babel-eslint@7:
version "7.2.3"
resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827"
dependencies:
babel-code-frame "^6.22.0"
babel-traverse "^6.23.1"
babel-types "^6.23.0"
babylon "^6.17.0"

babel-messages@^6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
dependencies:
babel-runtime "^6.22.0"

babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
dependencies:
core-js "^2.4.0"
regenerator-runtime "^0.11.0"

babel-traverse@^6.23.1:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
dependencies:
babel-code-frame "^6.26.0"
babel-messages "^6.23.0"
babel-runtime "^6.26.0"
babel-types "^6.26.0"
babylon "^6.18.0"
debug "^2.6.8"
globals "^9.18.0"
invariant "^2.2.2"
lodash "^4.17.4"

babel-types@^6.23.0, babel-types@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
dependencies:
babel-runtime "^6.26.0"
esutils "^2.0.2"
lodash "^4.17.4"
to-fast-properties "^1.0.3"

babylon@^6.17.0, babylon@^6.18.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"

balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
@@ -448,16 +494,48 @@ code-point-at@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"

color-convert@^0.5.0:
version "0.5.3"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd"

color-convert@^1.9.0:
version "1.9.1"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
dependencies:
color-name "^1.1.1"

color-name@^1.1.1:
color-name@^1.0.0, color-name@^1.1.1:
version "1.1.3"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"

color-string@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
dependencies:
color-name "^1.0.0"

color@0.8.x:
version "0.8.0"
resolved "https://registry.yarnpkg.com/color/-/color-0.8.0.tgz#890c07c3fd4e649537638911cf691e5458b6fca5"
dependencies:
color-convert "^0.5.0"
color-string "^0.3.0"

colornames@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/colornames/-/colornames-0.0.2.tgz#d811fd6c84f59029499a8ac4436202935b92be31"

colors@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"

colorspace@1.0.x:
version "1.0.1"
resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.0.1.tgz#c99c796ed31128b9876a52e1ee5ee03a4a719749"
dependencies:
color "0.8.x"
text-hex "0.0.x"

combined-stream@^1.0.5, combined-stream@~1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
@@ -638,6 +716,14 @@ depd@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359"

diagnostics@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/diagnostics/-/diagnostics-1.1.0.tgz#e1090900b49523e8527be20f081275205f2ae36a"
dependencies:
colorspace "1.0.x"
enabled "1.0.x"
kuler "0.0.x"

dlv@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.0.tgz#fee1a7c43f63be75f3f679e85262da5f102764a7"
@@ -716,6 +802,12 @@ emoji-regex@^6.1.0:
version "6.5.1"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2"

enabled@1.0.x:
version "1.0.2"
resolved "https://registry.yarnpkg.com/enabled/-/enabled-1.0.2.tgz#965f6513d2c2d1c5f4652b64a2e3396467fc2f93"
dependencies:
env-variable "0.0.x"

encoding@^0.1.11:
version "0.1.12"
resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
@@ -726,6 +818,10 @@ entities@^1.1.1, entities@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"

env-variable@0.0.x:
version "0.0.3"
resolved "https://registry.yarnpkg.com/env-variable/-/env-variable-0.0.3.tgz#b86c1641be5610267d506f18071ea76d707097cb"

error-ex@^1.2.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
@@ -758,23 +854,17 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"

eslint-config-airbnb-base@^11.3.0:
version "11.3.2"
resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz#8703b11abe3c88ac7ec2b745b7fdf52e00ae680a"
eslint-config-airbnb-base@^12.1.0:
version "12.1.0"
resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz#386441e54a12ccd957b0a92564a4bafebd747944"
dependencies:
eslint-restricted-globals "^0.1.1"

eslint-config-airbnb@^15.1.0:
version "15.1.0"
resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-15.1.0.tgz#fd432965a906e30139001ba830f58f73aeddae8e"
dependencies:
eslint-config-airbnb-base "^11.3.0"

eslint-config-coderdojo@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/eslint-config-coderdojo/-/eslint-config-coderdojo-1.0.6.tgz#02c8ff514dfa54a4fbb7b43e4248cab17d9d0382"
eslint-config-airbnb@^16.1.0:
version "16.1.0"
resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-16.1.0.tgz#2546bfb02cc9fe92284bf1723ccf2e87bc45ca46"
dependencies:
eslint-config-airbnb "^15.1.0"
eslint-config-airbnb-base "^12.1.0"

eslint-import-resolver-node@^0.3.1:
version "0.3.1"
@@ -809,9 +899,9 @@ eslint-plugin-import@^2.7.0:
minimatch "^3.0.3"
read-pkg-up "^2.0.0"

eslint-plugin-jsx-a11y@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz#5c96bb5186ca14e94db1095ff59b3e2bd94069b1"
eslint-plugin-jsx-a11y@^6.0.2:
version "6.0.3"
resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.3.tgz#54583d1ae442483162e040e13cc31865465100e5"
dependencies:
aria-query "^0.7.0"
array-includes "^3.0.3"
@@ -819,7 +909,7 @@ eslint-plugin-jsx-a11y@^5.1.1:
axobject-query "^0.1.0"
damerau-levenshtein "^1.0.0"
emoji-regex "^6.1.0"
jsx-ast-utils "^1.4.0"
jsx-ast-utils "^2.0.0"

eslint-plugin-lodash@^2.4.4:
version "2.5.0"
@@ -1006,6 +1096,10 @@ fbjs@^0.8.16:
setimmediate "^1.0.5"
ua-parser-js "^0.7.9"

fecha@^2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/fecha/-/fecha-2.3.2.tgz#360f035dd6edd954bc9581f95f2a4a7f2a3505c1"

figures@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
@@ -1152,6 +1246,10 @@ globals@^11.0.1:
version "11.0.1"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.0.1.tgz#12a87bb010e5154396acc535e1e43fc753b0e5e8"

globals@^9.18.0:
version "9.18.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"

globby@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
@@ -1325,6 +1423,12 @@ inquirer@^3.0.6:
strip-ansi "^4.0.0"
through "^2.3.6"

invariant@^2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
dependencies:
loose-envify "^1.0.0"

invert-kv@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
@@ -1469,7 +1573,7 @@ isomorphic-fetch@^2.1.1:
node-fetch "^1.0.1"
whatwg-fetch ">=0.10.0"

isstream@~0.1.2:
isstream@0.1.x, isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"

@@ -1542,16 +1646,18 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.0"

jsx-ast-utils@^1.4.0:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1"

jsx-ast-utils@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f"
dependencies:
array-includes "^3.0.3"

kuler@0.0.x:
version "0.0.0"
resolved "https://registry.yarnpkg.com/kuler/-/kuler-0.0.0.tgz#b66bb46b934e550f59d818848e0abba4f7f5553c"
dependencies:
colornames "0.0.2"

lcid@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
@@ -1691,6 +1797,13 @@ log-update@^1.0.2:
ansi-escapes "^1.0.0"
cli-cursor "^1.0.2"

logform@^1.2.1:
version "1.2.2"
resolved "https://registry.yarnpkg.com/logform/-/logform-1.2.2.tgz#7be8847684de07185029ed09c65b11d06191ef93"
dependencies:
colors "^1.1.2"
fecha "^2.3.2"

loglevel-colored-level-prefix@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz#6a40218fdc7ae15fc76c3d0f3e676c465388603e"
@@ -1930,6 +2043,10 @@ once@^1.3.0:
dependencies:
wrappy "1"

one-time@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/one-time/-/one-time-0.0.4.tgz#f8cdf77884826fe4dff93e3a9cc37b1e4480742e"

onetime@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
@@ -2518,6 +2635,10 @@ sshpk@^1.7.0:
jsbn "~0.1.0"
tweetnacl "~0.14.0"

stack-trace@0.0.x:
version "0.0.10"
resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"

staged-git-files@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35"
@@ -2628,6 +2749,10 @@ terraformer@~1.0.5:
dependencies:
"@types/geojson" "^1.0.0"

text-hex@0.0.x:
version "0.0.0"
resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-0.0.0.tgz#578fbc85a6a92636e42dd17b41d0218cce9eb2b3"

text-table@~0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
@@ -2646,6 +2771,10 @@ tmp@^0.0.33:
dependencies:
os-tmpdir "~1.0.2"

to-fast-properties@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"

toposort-class@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/toposort-class/-/toposort-class-1.0.1.tgz#7ffd1f78c8be28c3ba45cd4e1a3f5ee193bd9988"
@@ -2656,6 +2785,10 @@ tough-cookie@>=0.12.0, tough-cookie@>=2.3.3, tough-cookie@~2.3.3:
dependencies:
punycode "^1.4.1"

triple-beam@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.1.0.tgz#2ac387c8c4bd04bd26c61df891a6079f8592fe10"

tryit@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
@@ -2756,6 +2889,23 @@ which@^1.2.10, which@^1.2.9:
dependencies:
isexe "^2.0.0"

winston-transport@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-3.0.1.tgz#8008b15eef5660c4fb3fa094d58ccbd08528c58d"

winston@^3.0.0-rc1:
version "3.0.0-rc1"
resolved "https://registry.yarnpkg.com/winston/-/winston-3.0.0-rc1.tgz#982bc0ad4ef5c53000ca68036d78a3deaa28cac5"
dependencies:
async "^1.0.0"
diagnostics "^1.0.1"
isstream "0.1.x"
logform "^1.2.1"
one-time "0.0.4"
stack-trace "0.0.x"
triple-beam "^1.0.1"
winston-transport "^3.0.1"

wkx@^0.4.1:
version "0.4.2"
resolved "https://registry.yarnpkg.com/wkx/-/wkx-0.4.2.tgz#776d35a634a5c22e656e4744bdeb54f83fd2ce8d"


Loading…
Cancel
Save