diff --git a/.eslintrc.yaml b/.eslintrc.yaml new file mode 100644 index 0000000..c6b56c6 --- /dev/null +++ b/.eslintrc.yaml @@ -0,0 +1,37 @@ +env: + browser: true + node: true + +plugins: + - prettier + +extends: + - prettier + +parserOptions: + ecmaVersion: 8 + sourceType: module + ecmaFeatures: + jsx: true + +rules: + curly: 2 + dot-notation: 2 + no-const-assign: 2 + no-dupe-class-members: 2 + no-else-return: 2 + no-inner-declarations: 2 + no-lonely-if: 2 + no-unneeded-ternary: 2 + no-unused-expressions: 2 + no-unused-vars: [2, {args: none}] + no-useless-return: 2 + no-var: 2 + one-var: [2, never] + prefer-arrow-callback: 2 + prefer-const: 2 + prefer-promise-reject-errors: 2 + prettier/prettier: 2 + sort-imports: 2 + sort-vars: 2 + strict: [2, global] diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..884a232 --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +**/dist/** diff --git a/.prettierrc.yaml b/.prettierrc.yaml new file mode 100644 index 0000000..323a417 --- /dev/null +++ b/.prettierrc.yaml @@ -0,0 +1,16 @@ +arrowParens: avoid +bracketSpacing: false +jsxBracketSameLine: false +printWidth: 80 +proseWrap: never +requirePragma: false +semi: false +singleQuote: true +tabWidth: 2 +trailingComma: all +useTabs: false + +overrides: +- files: "*.json" + options: + printWidth: 400 diff --git a/doc/faq.md b/doc/faq.md index a8d8212..a0fe872 100644 --- a/doc/faq.md +++ b/doc/faq.md @@ -1,6 +1,7 @@ # FAQ ## Disabling one method on an instance at runtime + ```js // To disable a given method, just pass a no-op to it logger.warn = function() {} @@ -12,6 +13,7 @@ logger.warn = logdown.prototype.warn ## Align prefixes If you want to align the output of each instance, like the example below: + ``` [ipsum] lorem [sitamet] lorem @@ -19,17 +21,19 @@ If you want to align the output of each instance, like the example below: ``` Use the the following function + ```js function alignPrefixes(Logdown) { - var longest = logdown._instances.sort(function (a, b) { + var longest = logdown._instances.sort(function(a, b) { return b.opts.prefix.length - a.opts.prefix.length })[0] - logdown._instances - .forEach(function (instance) { - var padding = new Array(Math.max(longest.opts.prefix.length - instance.opts.prefix.length + 1, 0)).join(' ') - instance.opts.prefix = instance.opts.prefix + padding - }) + logdown._instances.forEach(function(instance) { + var padding = new Array( + Math.max(longest.opts.prefix.length - instance.opts.prefix.length + 1, 0), + ).join(' ') + instance.opts.prefix = instance.opts.prefix + padding + }) } ``` diff --git a/example/lib/logdown.js b/example/lib/logdown.js index d8abb16..4daef20 100644 --- a/example/lib/logdown.js +++ b/example/lib/logdown.js @@ -1,533 +1,544 @@ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else if(typeof exports === 'object') - exports["logdown"] = factory(); - else - root["logdown"] = factory(); -})(this, function() { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports, __webpack_require__) { - -var Logdown = __webpack_require__(1)() -var markdown = __webpack_require__(3) -var isColorSupported = __webpack_require__(6) -var globalObject = __webpack_require__(9)() - -// -// Static -// - -// Tomorrow Night Eighties colors -// https://github.com/chriskempson/tomorrow-theme#tomorrow-night-eighties -Logdown.prefixColors = [ - '#F2777A', - '#F99157', - '#FFCC66', - '#99CC99', - '#66CCCC', - '#6699CC', - '#CC99CC' -] - -Logdown._setPrefixRegExps = function () { - try { - if ( - globalObject.localStorage && - typeof globalObject.localStorage.getItem('debug') === 'string' - ) { - Logdown._prefixRegExps = [] - - globalObject.localStorage - .getItem('debug') - .split(',') - .forEach(function (str) { - str = str.trim() - var type = 'enable' - - if (str[0] === '-') { - str = str.substr(1) - type = 'disable' - } - - var regExp = Logdown._prepareRegExpForPrefixSearch(str) - - Logdown._prefixRegExps.push({ - type: type, - regExp: regExp - }) - }) - } - } catch (error) {} -} - -Logdown._getNextPrefixColor = (function () { - var lastUsed = 0 - - return function () { - lastUsed += 1 - return Logdown.prefixColors[lastUsed % Logdown.prefixColors.length] - } -})() - -// -// Instance -// - -Logdown.prototype._getDecoratedPrefix = function () { - var decoratedPrefix = [] - - if (isColorSupported()) { - decoratedPrefix.push('%c' + this.opts.prefix + '%c ') - decoratedPrefix.push( - 'color:' + this.opts.prefixColor + '; font-weight:bold;', - '' // Empty string resets style. - ) +;(function webpackUniversalModuleDefinition(root, factory) { + if (typeof exports === 'object' && typeof module === 'object') { + module.exports = factory() + } else if (typeof define === 'function' && define.amd) { + define([], factory) + } else if (typeof exports === 'object') { + exports.logdown = factory() } else { - decoratedPrefix.push('[' + this.opts.prefix + '] ') - } - - return decoratedPrefix -} - -Logdown.prototype._prepareOutput = function (args) { - var preparedOutput = this._getDecoratedPrefix() - var parsedMarkdown - - // Only first argument on `console` can have style. - if (typeof args[0] === 'string') { - if (this.opts.markdown && isColorSupported()) { - parsedMarkdown = markdown.parse(args[0]) - preparedOutput[0] = preparedOutput[0] + parsedMarkdown.text - preparedOutput = preparedOutput.concat(parsedMarkdown.styles) - } else { - preparedOutput[0] = preparedOutput[0] + args[0] - } - } else { - preparedOutput.push(args[0]) - } - - if (args.length > 1) { - preparedOutput = preparedOutput.concat(args.slice(1)) + root.logdown = factory() } +})(this, () => { + return /******/ (function(modules) { + // webpackBootstrap + /******/ // The module cache + /******/ const installedModules = {} // The require function + /******/ + /******/ /******/ function __webpack_require__(moduleId) { + /******/ + /******/ // Check if module is in cache + /******/ if (installedModules[moduleId]) { + /******/ return installedModules[moduleId].exports + /******/ + } // Create a new module (and put it into the cache) + /******/ /******/ const module = (installedModules[moduleId] = { + /******/ i: moduleId, + /******/ l: false, + /******/ exports: {}, + /******/ + }) // Execute the module function + /******/ + /******/ /******/ modules[moduleId].call( + module.exports, + module, + module.exports, + __webpack_require__, + ) // Flag the module as loaded + /******/ + /******/ /******/ module.l = true // Return the exports of the module + /******/ + /******/ /******/ return module.exports + /******/ + } // expose the modules object (__webpack_modules__) + /******/ + /******/ + /******/ /******/ __webpack_require__.m = modules // expose the module cache + /******/ + /******/ /******/ __webpack_require__.c = installedModules // define getter function for harmony exports + /******/ + /******/ /******/ __webpack_require__.d = function(exports, name, getter) { + /******/ if (!__webpack_require__.o(exports, name)) { + /******/ Object.defineProperty(exports, name, { + /******/ configurable: false, + /******/ enumerable: true, + /******/ get: getter, + /******/ + }) + /******/ + } + /******/ + } // getDefaultExport function for compatibility with non-harmony modules + /******/ + /******/ /******/ __webpack_require__.n = function(module) { + /******/ const getter = + module && module.__esModule + ? /******/ function getDefault() { + return module.default + } + : /******/ function getModuleExports() { + return module + } + /******/ __webpack_require__.d(getter, 'a', getter) + /******/ return getter + /******/ + } // Object.prototype.hasOwnProperty.call + /******/ + /******/ /******/ __webpack_require__.o = function(object, property) { + return Object.prototype.hasOwnProperty.call(object, property) + } // __webpack_public_path__ + /******/ + /******/ /******/ __webpack_require__.p = '' // Load entry module and return exports + /******/ + /******/ /******/ return __webpack_require__((__webpack_require__.s = 0)) + /******/ + })( + /************************************************************************/ + /******/ [ + /* 0 */ + /***/ function(module, exports, __webpack_require__) { + const Logdown = __webpack_require__(1)() + const markdown = __webpack_require__(3) + const isColorSupported = __webpack_require__(6) + const globalObject = __webpack_require__(9)() + + // + // Static + // + + // Tomorrow Night Eighties colors + // https://github.com/chriskempson/tomorrow-theme#tomorrow-night-eighties + Logdown.prefixColors = [ + '#F2777A', + '#F99157', + '#FFCC66', + '#99CC99', + '#66CCCC', + '#6699CC', + '#CC99CC', + ] + + Logdown._setPrefixRegExps = function() { + try { + if ( + globalObject.localStorage && + typeof globalObject.localStorage.getItem('debug') === 'string' + ) { + Logdown._prefixRegExps = [] + + globalObject.localStorage + .getItem('debug') + .split(',') + .forEach(str => { + str = str.trim() + let type = 'enable' + + if (str[0] === '-') { + str = str.substr(1) + type = 'disable' + } + + const regExp = Logdown._prepareRegExpForPrefixSearch(str) + + Logdown._prefixRegExps.push({ + type: type, + regExp: regExp, + }) + }) + } + } catch (error) {} + } - return preparedOutput -} - -// -// API -// - -Logdown._setPrefixRegExps() - -module.exports = Logdown - - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { - -var toArray = __webpack_require__(2) - -module.exports = function () { - function Logdown (prefix, opts) { - if (!(this instanceof Logdown)) { - return new Logdown(prefix, opts) - } + Logdown._getNextPrefixColor = (function() { + let lastUsed = 0 - if (Logdown._isPrefixAlreadyInUse(prefix)) { - return Logdown._getInstanceByPrefix(prefix) - } + return function() { + lastUsed += 1 + return Logdown.prefixColors[lastUsed % Logdown.prefixColors.length] + } + })() + + // + // Instance + // + + Logdown.prototype._getDecoratedPrefix = function() { + const decoratedPrefix = [] + + if (isColorSupported()) { + decoratedPrefix.push('%c' + this.opts.prefix + '%c ') + decoratedPrefix.push( + 'color:' + this.opts.prefixColor + '; font-weight:bold;', + '', // Empty string resets style. + ) + } else { + decoratedPrefix.push('[' + this.opts.prefix + '] ') + } - this.opts = Logdown._normalizeOpts(prefix, opts) - this.state = Logdown._getInitialState(this.opts) + return decoratedPrefix + } - Logdown._decorateLoggerMethods(this) - Logdown._instances.push(this) + Logdown.prototype._prepareOutput = function(args) { + let preparedOutput = this._getDecoratedPrefix() + let parsedMarkdown + + // Only first argument on `console` can have style. + if (typeof args[0] === 'string') { + if (this.opts.markdown && isColorSupported()) { + parsedMarkdown = markdown.parse(args[0]) + preparedOutput[0] = preparedOutput[0] + parsedMarkdown.text + preparedOutput = preparedOutput.concat(parsedMarkdown.styles) + } else { + preparedOutput[0] = preparedOutput[0] + args[0] + } + } else { + preparedOutput.push(args[0]) + } - return this - } + if (args.length > 1) { + preparedOutput = preparedOutput.concat(args.slice(1)) + } - // - // Static - // + return preparedOutput + } - Logdown.transports = [] - Logdown._instances = [] - Logdown._prefixRegExps = [] + // + // API + // - Logdown._prepareRegExpForPrefixSearch = function (str) { - return new RegExp('^' + str.replace(/\*/g, '.*?') + '$') - } + Logdown._setPrefixRegExps() - Logdown._isPrefixAlreadyInUse = function (prefix) { - return Logdown._instances.some(function (instance) { - return (instance.opts.prefix === prefix) - }) - } + module.exports = Logdown - Logdown._getInstanceByPrefix = function (prefix) { - return Logdown._instances.filter(function (instanceCur) { - return instanceCur.opts.prefix === prefix - })[0] - } + /***/ + }, + /* 1 */ + /***/ function(module, exports, __webpack_require__) { + const toArray = __webpack_require__(2) - Logdown._normalizeOpts = function (prefix, opts) { - if (typeof prefix !== 'string') { - throw new TypeError('prefix must be a string') - } + module.exports = function() { + function Logdown(prefix, opts) { + if (!(this instanceof Logdown)) { + return new Logdown(prefix, opts) + } - opts = opts || {} + if (Logdown._isPrefixAlreadyInUse(prefix)) { + return Logdown._getInstanceByPrefix(prefix) + } - var markdown = opts.markdown === undefined ? true : Boolean(opts.markdown) - var prefixColor = opts.prefixColor || Logdown._getNextPrefixColor() - var logger = opts.logger || console + this.opts = Logdown._normalizeOpts(prefix, opts) + this.state = Logdown._getInitialState(this.opts) - return { - logger: logger, - markdown: markdown, - prefix: prefix, - prefixColor: prefixColor - } - } + Logdown._decorateLoggerMethods(this) + Logdown._instances.push(this) - Logdown._getInitialState = function (opts) { - return { - isEnabled: Logdown._getEnableState(opts) - } - } + return this + } - Logdown._getEnableState = function (opts) { - var isEnabled = false - - Logdown._prefixRegExps.forEach(function (filter) { - if ( - filter.type === 'enable' && - filter.regExp.test(opts.prefix) - ) { - isEnabled = true - } else if ( - filter.type === 'disable' && - filter.regExp.test(opts.prefix) - ) { - isEnabled = false - } - }) + // + // Static + // - return isEnabled - } + Logdown.transports = [] + Logdown._instances = [] + Logdown._prefixRegExps = [] - Logdown._decorateLoggerMethods = function (instance) { - var logger = instance.opts.logger - - var loggerMethods = Object - .keys(logger) - .filter(function (method) { return typeof logger[method] === 'function' }) - - // In old Safari and Chrome browsers, `console` methods are not iterable. - // In that case, we provide a minimum API. - if (loggerMethods.length === 0) { - loggerMethods = ['log', 'warn', 'error'] - } - - loggerMethods - .forEach(function (method) { - instance[method] = function () { - var args = toArray(arguments) - var instance = this.opts.prefix - - if (Logdown.transports.length) { - var msg = '[' + instance + '] ' + - args - .filter(function (arg) { return typeof arg !== 'object' }) - .join(' ') - - Logdown.transports.forEach(function (transport) { - transport({ - state: this.state, - instance: instance, - level: method, - args: args, - msg: msg - }) - }.bind(this)) + Logdown._prepareRegExpForPrefixSearch = function(str) { + return new RegExp('^' + str.replace(/\*/g, '.*?') + '$') } - if (this.state.isEnabled) { - var preparedOutput = this._prepareOutput(args, method) - logger[method].apply(logger, preparedOutput) + Logdown._isPrefixAlreadyInUse = function(prefix) { + return Logdown._instances.some(instance => { + return instance.opts.prefix === prefix + }) } - } - }) - } - - return Logdown -} - - -/***/ }), -/* 2 */ -/***/ (function(module, exports) { - -module.exports = function toArray (arg) { - return Array.prototype.slice.call(arg, 0) -} - - -/***/ }), -/* 3 */ -/***/ (function(module, exports, __webpack_require__) { -var rules = __webpack_require__(4) -var getNextMatch = __webpack_require__(5) + Logdown._getInstanceByPrefix = function(prefix) { + return Logdown._instances.filter(instanceCur => { + return instanceCur.opts.prefix === prefix + })[0] + } -function parse (text) { - var styles = [] - var match = getNextMatch(text, rules) + Logdown._normalizeOpts = function(prefix, opts) { + if (typeof prefix !== 'string') { + throw new TypeError('prefix must be a string') + } + + opts = opts || {} + + const markdown = + opts.markdown === undefined ? true : Boolean(opts.markdown) + const prefixColor = + opts.prefixColor || Logdown._getNextPrefixColor() + const logger = opts.logger || console + + return { + logger: logger, + markdown: markdown, + prefix: prefix, + prefixColor: prefixColor, + } + } - while (match) { - styles.push(match.rule.style) - styles.push('') // Empty string resets style. + Logdown._getInitialState = function(opts) { + return { + isEnabled: Logdown._getEnableState(opts), + } + } - text = text.replace(match.rule.regexp, match.rule.replacer) - match = getNextMatch(text, rules) - } + Logdown._getEnableState = function(opts) { + let isEnabled = false + + Logdown._prefixRegExps.forEach(filter => { + if (filter.type === 'enable' && filter.regExp.test(opts.prefix)) { + isEnabled = true + } else if ( + filter.type === 'disable' && + filter.regExp.test(opts.prefix) + ) { + isEnabled = false + } + }) + + return isEnabled + } - return { - text: text, - styles: styles - } -} - -// -// API -// - -module.exports = { - parse: parse -} - - -/***/ }), -/* 4 */ -/***/ (function(module, exports) { - -module.exports = [ - { - regexp: /\*([^*]+)\*/, - replacer: function (match, submatch1) { - return '%c' + submatch1 + '%c' - }, - style: 'font-weight:bold;' - }, - { - regexp: /_([^_]+)_/, - replacer: function (match, submatch1) { - return '%c' + submatch1 + '%c' - }, - style: 'font-style:italic;' - }, - { - regexp: /`([^`]+)`/, - replacer: function (match, submatch1) { - return '%c' + submatch1 + '%c' - }, - style: - 'background-color:rgba(255,204,102, 0.1);' + - 'color:#FFCC66;' + - 'padding:2px 5px;' + - 'border-radius:2px;' - } -] + Logdown._decorateLoggerMethods = function(instance) { + const logger = instance.opts.logger + + let loggerMethods = Object.keys(logger).filter(method => { + return typeof logger[method] === 'function' + }) + + // In old Safari and Chrome browsers, `console` methods are not iterable. + // In that case, we provide a minimum API. + if (loggerMethods.length === 0) { + loggerMethods = ['log', 'warn', 'error'] + } + + loggerMethods.forEach(method => { + instance[method] = function() { + const args = toArray(arguments) + const instance = this.opts.prefix + + if (Logdown.transports.length) { + const msg = + '[' + + instance + + '] ' + + args + .filter(arg => { + return typeof arg !== 'object' + }) + .join(' ') + + Logdown.transports.forEach(transport => { + transport({ + state: this.state, + instance: instance, + level: method, + args: args, + msg: msg, + }) + }) + } + + if (this.state.isEnabled) { + const preparedOutput = this._prepareOutput(args, method) + logger[method].apply(logger, preparedOutput) + } + } + }) + } + return Logdown + } -/***/ }), -/* 5 */ -/***/ (function(module, exports) { + /***/ + }, + /* 2 */ + /***/ function(module, exports) { + module.exports = function toArray(arg) { + return Array.prototype.slice.call(arg, 0) + } -module.exports = function getNextMatch (text, rules) { - var matches = [] + /***/ + }, + /* 3 */ + /***/ function(module, exports, __webpack_require__) { + const rules = __webpack_require__(4) + const getNextMatch = __webpack_require__(5) - rules.forEach(function (rule) { - var match = text.match(rule.regexp) + function parse(text) { + const styles = [] + let match = getNextMatch(text, rules) - if (match) { - matches.push({ - rule: rule, - match: match - }) - } - }) + while (match) { + styles.push(match.rule.style) + styles.push('') // Empty string resets style. - if (matches.length === 0) { - return null - } + text = text.replace(match.rule.regexp, match.rule.replacer) + match = getNextMatch(text, rules) + } - matches.sort(function (a, b) { - return a.match.index - b.match.index - }) + return { + text: text, + styles: styles, + } + } - return matches[0] -} + // + // API + // + module.exports = { + parse: parse, + } -/***/ }), -/* 6 */ -/***/ (function(module, exports, __webpack_require__) { + /***/ + }, + /* 4 */ + /***/ function(module, exports) { + module.exports = [ + { + regexp: /\*([^*]+)\*/, + replacer: function(match, submatch1) { + return '%c' + submatch1 + '%c' + }, + style: 'font-weight:bold;', + }, + { + regexp: /_([^_]+)_/, + replacer: function(match, submatch1) { + return '%c' + submatch1 + '%c' + }, + style: 'font-style:italic;', + }, + { + regexp: /`([^`]+)`/, + replacer: function(match, submatch1) { + return '%c' + submatch1 + '%c' + }, + style: + 'background-color:rgba(255,204,102, 0.1);' + + 'color:#FFCC66;' + + 'padding:2px 5px;' + + 'border-radius:2px;', + }, + ] + + /***/ + }, + /* 5 */ + /***/ function(module, exports) { + module.exports = function getNextMatch(text, rules) { + const matches = [] + + rules.forEach(rule => { + const match = text.match(rule.regexp) + + if (match) { + matches.push({ + rule: rule, + match: match, + }) + } + }) -var isWebkit = __webpack_require__(7) -var isFirefox = __webpack_require__(8) + if (matches.length === 0) { + return null + } -module.exports = function isColorSupported () { - return (isWebkit() || isFirefox()) -} + matches.sort((a, b) => { + return a.match.index - b.match.index + }) + return matches[0] + } -/***/ }), -/* 7 */ -/***/ (function(module, exports) { + /***/ + }, + /* 6 */ + /***/ function(module, exports, __webpack_require__) { + const isWebkit = __webpack_require__(7) + const isFirefox = __webpack_require__(8) -// Is webkit? http://stackoverflow.com/a/16459606/376773 -module.exports = function isWebkit () { - try { - return ('WebkitAppearance' in document.documentElement.style) && !/Edge/.test(navigator.userAgent) - } catch (error) { - return false - } -} + module.exports = function isColorSupported() { + return isWebkit() || isFirefox() + } + /***/ + }, + /* 7 */ + /***/ function(module, exports) { + // Is webkit? http://stackoverflow.com/a/16459606/376773 + module.exports = function isWebkit() { + try { + return ( + 'WebkitAppearance' in document.documentElement.style && + !/Edge/.test(navigator.userAgent) + ) + } catch (error) { + return false + } + } -/***/ }), -/* 8 */ -/***/ (function(module, exports) { + /***/ + }, + /* 8 */ + /***/ function(module, exports) { + module.exports = function isFirefox() { + try { + return /firefox\/(\d+)/i.test(navigator.userAgent) + } catch (error) { + return false + } + } -module.exports = function isFirefox () { - try { - return /firefox\/(\d+)/i.test(navigator.userAgent) - } catch (error) { - return false - } -} + /***/ + }, + /* 9 */ + /***/ function(module, exports, __webpack_require__) { + /* WEBPACK VAR INJECTION */ ;(function(global) { + /* eslint-disable no-new-func */ + /* global self, global */ + + function getGlobal(slf, glb) { + // Return the global object based on the environment presently in. + // window for browser and global for node. + // Ref from -> https://github.com/purposeindustries/window-or-global/blob/master/lib/index.js + return ( + (typeof slf === 'object' && slf.self === slf && slf) || + (typeof glb === 'object' && glb.global === glb && glb) || + this + ) + } + module.exports = getGlobal.bind(this, self, global) + module.exports.getGlobal = getGlobal + + /* WEBPACK VAR INJECTION */ + }.call(exports, __webpack_require__(10))) + + /***/ + }, + /* 10 */ + /***/ function(module, exports) { + let g + + // This works in non-strict mode + g = (function() { + return this + })() + + try { + // This works if eval is allowed (see CSP) + g = g || Function('return this')() || (1, eval)('this') + } catch (e) { + // This works if the window reference is available + if (typeof window === 'object') { + g = window + } + } -/***/ }), -/* 9 */ -/***/ (function(module, exports, __webpack_require__) { + // g can still be undefined, but nothing to do about it... + // We return undefined, instead of nothing here, so it's + // easier to handle this case. if(!global) { ...} -/* WEBPACK VAR INJECTION */(function(global) {/* eslint-disable no-new-func */ -/* global self, global */ + module.exports = g -function getGlobal (slf, glb) { - // Return the global object based on the environment presently in. - // window for browser and global for node. - // Ref from -> https://github.com/purposeindustries/window-or-global/blob/master/lib/index.js - return ( - (typeof slf === 'object' && slf.self === slf && slf) || - (typeof glb === 'object' && glb.global === glb && glb) || - this + /***/ + }, + /******/ + ], ) -} - -module.exports = getGlobal.bind(this, self, global) -module.exports.getGlobal = getGlobal - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(10))) - -/***/ }), -/* 10 */ -/***/ (function(module, exports) { - -var g; - -// This works in non-strict mode -g = (function() { - return this; -})(); - -try { - // This works if eval is allowed (see CSP) - g = g || Function("return this")() || (1,eval)("this"); -} catch(e) { - // This works if the window reference is available - if(typeof window === "object") - g = window; -} - -// g can still be undefined, but nothing to do about it... -// We return undefined, instead of nothing here, so it's -// easier to handle this case. if(!global) { ...} - -module.exports = g; - - -/***/ }) -/******/ ]); -}); \ No newline at end of file +}) diff --git a/example/node.js b/example/node.js index 7f044fd..06dd51b 100644 --- a/example/node.js +++ b/example/node.js @@ -1,18 +1,18 @@ -var logdown = require('../src/node') +const logdown = require('../src/node') -var demo = logdown('demo') +const demo = logdown('demo') demo.log('Initializing demo') -var log1 = logdown('foo:bar') +const log1 = logdown('foo:bar') log1.log('Lorem *ipsum* dolor sit _amet_ foo bar') log1.info('The method `foo()` is deprecated. You should use `bar()`') -var log2 = logdown('foo:quz') +const log2 = logdown('foo:quz') log2.log('Lorem *ipsum* dolor sit _amet_ foo bar') log2.warn('The method `foo()` is deprecated. You should use `bar()`') -var log3 = logdown('baz') +const log3 = logdown('baz') log3.log('Sit viderer eripuit tincidunt an') log3.error('The method `dolor()` is no longer supported.') diff --git a/license.md b/license.md index 54523b4..d84910c 100644 --- a/license.md +++ b/license.md @@ -1,19 +1,7 @@ Copyright (c) 2017 [Caio Gondim](https://caiogondim.com) -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: +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 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. +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/package-lock.json b/package-lock.json index 34359cb..a19b7bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,30 +33,6 @@ } } }, - "ajv": { - "version": "https://registry.npmjs.org/ajv/-/ajv-4.11.5.tgz", - "integrity": "sha1-tu50ZXuZOgHc5Et5RNVvSFgo1b0=", - "dev": true, - "requires": { - "co": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" - }, - "dependencies": { - "json-stable-stringify": { - "version": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz" - } - } - } - }, - "ajv-keywords": { - "version": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true - }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", @@ -84,6 +60,12 @@ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, + "any-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.2.0.tgz", + "integrity": "sha1-xnhwBYADV5AJCD9UrAq6+1wz0kI=", + "dev": true + }, "anymatch": { "version": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", @@ -93,6 +75,12 @@ "micromatch": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz" } }, + "app-root-path": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", + "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=", + "dev": true + }, "argparse": { "version": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", @@ -138,15 +126,6 @@ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true }, - "array.prototype.find": { - "version": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.0.4.tgz", - "integrity": "sha1-VWpcU2LAhkgyPdrrnenRS8GGTJA=", - "dev": true, - "requires": { - "define-properties": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "es-abstract": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.7.0.tgz" - } - }, "arrify": { "version": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", @@ -215,31 +194,6 @@ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", "dev": true }, - "babel-code-frame": { - "version": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", - "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "js-tokens": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "has-ansi": "2.0.0", - "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "supports-color": "2.0.0" - } - } - } - }, "babel-core": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", @@ -1782,6 +1736,12 @@ } } }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, "chokidar": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", @@ -1798,6 +1758,12 @@ "readdirp": "2.1.0" } }, + "ci-info": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.2.tgz", + "integrity": "sha512-uTGIPNx/nSpBdsF6xnseRXLLtfr9VLqkz8ZqHXr3Y7b6SftyRxBGjwMtJj1OhNbmlc1wZzLNAlAcvyIiE8a6ZA==", + "dev": true + }, "cipher-base": { "version": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.3.tgz", "integrity": "sha1-7qvxlEGc6QDaMBjCB9IS8qbfCgc=", @@ -1819,6 +1785,22 @@ "restore-cursor": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz" } }, + "cli-spinners": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", + "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", + "dev": true + }, + "cli-truncate": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", + "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "dev": true, + "requires": { + "slice-ansi": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" + } + }, "cli-width": { "version": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=", @@ -1970,31 +1952,6 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "concat-stream": { - "version": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", - "dev": true, - "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "typedarray": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" - }, - "dependencies": { - "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - } - } - } - }, "console-browserify": { "version": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", @@ -2008,11 +1965,6 @@ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", "dev": true }, - "contains-path": { - "version": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, "convert-source-map": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", @@ -2030,6 +1982,54 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "cosmiconfig": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-3.1.0.tgz", + "integrity": "sha512-zedsBhLSbPBms+kE7AH4vHg6JsKDz6epSv2/+5XHs8ILHlgDciSJfSWf8sX9aQ52Jb7KI7VswUTsLpR/G0cr2Q==", + "dev": true, + "requires": { + "is-directory": "0.3.1", + "js-yaml": "3.10.0", + "parse-json": "3.0.0", + "require-from-string": "2.0.1" + }, + "dependencies": { + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "js-yaml": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "dev": true, + "requires": { + "argparse": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "esprima": "4.0.0" + } + }, + "parse-json": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-3.0.0.tgz", + "integrity": "sha1-+m9HsY4jgm6tMvJj50TQ4ehH+xM=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + } + } + }, "create-ecdh": { "version": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", @@ -2118,56 +2118,33 @@ } } }, + "date-fns": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", + "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", + "dev": true + }, "date-now": { "version": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", "dev": true }, - "debug": { - "version": "https://registry.npmjs.org/debug/-/debug-2.6.3.tgz", - "integrity": "sha1-D364wwll7AjHKsz6ATDIt5mEFB0=", - "dev": true, - "requires": { - "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" - } - }, - "debug-log": { - "version": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", - "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", - "dev": true - }, "decamelize": { "version": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, "deep-is": { "version": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "define-properties": { - "version": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", - "dev": true, - "requires": { - "foreach": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "object-keys": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz" - } - }, - "deglob": { - "version": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz", - "integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=", - "dev": true, - "requires": { - "find-root": "https://registry.npmjs.org/find-root/-/find-root-1.0.0.tgz", - "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "ignore": "https://registry.npmjs.org/ignore/-/ignore-3.2.7.tgz", - "pkg-config": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", - "run-parallel": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.6.tgz", - "uniq": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz" - } - }, "del": { "version": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", @@ -2215,15 +2192,6 @@ "randombytes": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.3.tgz" } }, - "doctrine": { - "version": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", - "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", - "dev": true, - "requires": { - "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - } - }, "domain-browser": { "version": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", @@ -2238,6 +2206,12 @@ "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" } }, + "elegant-spinner": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "dev": true + }, "elliptic": { "version": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", @@ -2286,27 +2260,6 @@ "is-arrayish": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" } }, - "es-abstract": { - "version": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.7.0.tgz", - "integrity": "sha1-363ndOAb/Nl/lhgCmMRJyGI/uUw=", - "dev": true, - "requires": { - "es-to-primitive": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "function-bind": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", - "is-callable": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "is-regex": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz" - } - }, - "es-to-primitive": { - "version": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "dev": true, - "requires": { - "is-callable": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "is-date-object": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "is-symbol": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz" - } - }, "es5-ext": { "version": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.15.tgz", "integrity": "sha1-wzClk0we4hKEp8CBqG5f2TfJHqY=", @@ -2394,228 +2347,549 @@ } }, "eslint": { - "version": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", - "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.14.0.tgz", + "integrity": "sha512-Ul6CSGRjKscEyg0X/EeNs7o2XdnbTEOD1OM8cTjmx85RPcBJQrEhZLevhuJZNAE/vS2iVl5Uhgiqf3h5uLMCJQ==", "dev": true, "requires": { - "babel-code-frame": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", - "chalk": "1.1.3", - "concat-stream": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "debug": "https://registry.npmjs.org/debug/-/debug-2.6.3.tgz", - "doctrine": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", - "escope": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "espree": "https://registry.npmjs.org/espree/-/espree-3.4.1.tgz", - "esquery": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "ajv": "5.5.2", + "babel-code-frame": "6.26.0", + "chalk": "2.3.0", + "concat-stream": "1.6.0", + "cross-spawn": "5.1.0", + "debug": "3.1.0", + "doctrine": "2.0.2", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "1.0.0", + "espree": "3.5.2", + "esquery": "1.0.0", "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "file-entry-cache": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "globals": "https://registry.npmjs.org/globals/-/globals-9.17.0.tgz", - "ignore": "https://registry.npmjs.org/ignore/-/ignore-3.2.7.tgz", + "functional-red-black-tree": "1.0.1", + "glob": "7.1.2", + "globals": "11.1.0", + "ignore": "3.3.7", "imurmurhash": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "inquirer": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "is-my-json-valid": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", + "inquirer": "3.3.0", "is-resolvable": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", - "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.8.3.tgz", - "json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "js-yaml": "3.10.0", + "json-stable-stringify-without-jsonify": "1.0.1", "levn": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "lodash": "4.17.4", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "mkdirp": "0.5.1", "natural-compare": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "optionator": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "path-is-inside": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "pluralize": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "progress": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "pluralize": "7.0.0", + "progress": "2.0.0", "require-uncached": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "shelljs": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.7.tgz", - "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "strip-json-comments": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "table": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "text-table": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "user-home": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz" + "semver": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "strip-ansi": "4.0.0", + "strip-json-comments": "2.0.1", + "table": "4.0.2", + "text-table": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "acorn": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", + "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", + "dev": true + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "has-ansi": "2.0.0", - "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "supports-color": "2.0.0" + "co": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "fast-deep-equal": "1.0.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } }, - "estraverse": { - "version": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", "dev": true }, - "json-stable-stringify": { - "version": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "ansi-escapes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", + "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "jsonify": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz" + "chalk": "1.1.3", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "js-tokens": "3.0.2" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + } } }, - "strip-bom": { - "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true - } - } - }, - "eslint-config-standard-jsx": { - "version": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.1.tgz", - "integrity": "sha1-zU5GPQJo4tnnB/YfQvc/WzMzxkI=", - "dev": true - }, - "eslint-import-resolver-node": { - "version": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz", - "integrity": "sha1-Wt2BBujJKNssuiMrzZ76hG49oWw=", - "dev": true, - "requires": { - "debug": "https://registry.npmjs.org/debug/-/debug-2.6.3.tgz", - "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.3.2.tgz" - } - }, - "eslint-module-utils": { - "version": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz", - "integrity": "sha1-pvjCHZATWHWc3DXbrBmCrh7li84=", - "dev": true, - "requires": { - "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "pkg-dir": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz" - }, - "dependencies": { - "debug": { - "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { - "ms": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" + "balanced-match": "1.0.0", + "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" } }, - "ms": { - "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - } - } - }, - "eslint-plugin-import": { - "version": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz", - "integrity": "sha1-crowb60wXWfEgWNIpGmaQimsi04=", - "dev": true, - "requires": { - "builtin-modules": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "contains-path": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "debug": "https://registry.npmjs.org/debug/-/debug-2.6.3.tgz", - "doctrine": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "eslint-import-resolver-node": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz", - "eslint-module-utils": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz", - "has": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "lodash.cond": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "pkg-up": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz" - }, - "dependencies": { - "doctrine": { - "version": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", "dev": true, "requires": { - "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "ansi-styles": "3.2.0", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "supports-color": "4.5.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } } - } - } - }, - "eslint-plugin-node": { - "version": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-4.2.2.tgz", - "integrity": "sha1-gpWcqa7Xn8vSi7GxiNBcrAT7M2M=", - "dev": true, - "requires": { - "ignore": "https://registry.npmjs.org/ignore/-/ignore-3.2.7.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.3.2.tgz", - "semver": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz" - } - }, - "eslint-plugin-promise": { - "version": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz", - "integrity": "sha1-ePu2/+BHIBYnVp6FpsU3OvKmj8o=", - "dev": true - }, - "eslint-plugin-react": { - "version": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz", - "integrity": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=", - "dev": true, - "requires": { - "array.prototype.find": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.0.4.tgz", - "doctrine": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "has": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "jsx-ast-utils": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.0.tgz", - "object.assign": "https://registry.npmjs.org/object.assign/-/object.assign-4.0.4.tgz" - }, - "dependencies": { + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "2.0.0" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "readable-stream": "2.3.3", + "typedarray": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "doctrine": { - "version": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.2.tgz", + "integrity": "sha512-y0tm5Pq6ywp3qSTZ1vPgVdAnbDEoeoc5wlOHXoY1c4Wug/a7JvqHIl7BTvwodaHmejWkK/9dSb3sCYfyo/om8A==", "dev": true, "requires": { - "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz" + } + }, + "espree": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz", + "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==", + "dev": true, + "requires": { + "acorn": "5.2.1", + "acorn-jsx": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "esquery": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", + "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + }, + "dependencies": { + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "globals": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.1.0.tgz", + "integrity": "sha512-uEuWt9mqTlPDwSqi+sHjD4nWU/1N+q0fiWI9T1mZpD2UENqX20CFD5T/ziLZvztPaBKl7ZylUi1q6Qfm7E2CiQ==", + "dev": true + }, + "ignore": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "dev": true + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "3.0.0", + "chalk": "2.3.0", + "cli-cursor": "2.1.0", + "cli-width": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", + "external-editor": "2.1.0", + "figures": "2.0.0", + "lodash": "4.17.4", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "dev": true, + "requires": { + "argparse": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "esprima": "4.0.0" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "2.1.0" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + } + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "5.5.2", + "ajv-keywords": "2.1.1", + "chalk": "2.3.0", + "lodash": "4.17.4", + "slice-ansi": "1.0.0", + "string-width": "2.1.1" } } } }, - "eslint-plugin-standard": { - "version": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", - "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=", - "dev": true - }, - "espree": { - "version": "https://registry.npmjs.org/espree/-/espree-3.4.1.tgz", - "integrity": "sha1-KKg6tKrtce2P4PXv5ht2oFwTxNI=", + "eslint-config-prettier": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz", + "integrity": "sha512-ag8YEyBXsm3nmOv1Hz991VtNNDMRa+MNy8cY47Pl4bw6iuzqKbJajXdqUpiw13STdLLrznxgm1hj9NhxeOYq0A==", "dev": true, "requires": { - "acorn": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz", - "acorn-jsx": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz" + "get-stdin": "5.0.1" }, "dependencies": { - "acorn": { - "version": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz", - "integrity": "sha1-xGDfCEkUY/AozLguqzcwvwEIez0=", + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", "dev": true } } }, - "esprima": { - "version": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true + "eslint-plugin-prettier": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.4.0.tgz", + "integrity": "sha512-P0EohHM1MwL36GX5l1TOEYyt/5d7hcxrX3CqCjibTN3dH7VCAy2kjsC/WB6dUHnpB4mFkZq1Ndfh2DYQ2QMEGQ==", + "dev": true, + "requires": { + "fast-diff": "1.1.2", + "jest-docblock": "21.2.0" + } }, - "esquery": { - "version": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "dev": true, "requires": { - "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz" - }, - "dependencies": { - "estraverse": { - "version": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - } + "esrecurse": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz", + "estraverse": "4.2.0" } }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, "esrecurse": { "version": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz", "integrity": "sha1-RxO2U2rffyrE8yfVWed1a/9kgiA=", @@ -2632,6 +2906,12 @@ } } }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, "esutils": { "version": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", @@ -2740,6 +3020,17 @@ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", "dev": true }, + "external-editor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", + "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", + "dev": true, + "requires": { + "chardet": "0.4.2", + "iconv-lite": "0.4.19", + "tmp": "0.0.33" + } + }, "extglob": { "version": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", @@ -2759,6 +3050,18 @@ "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", "dev": true }, + "fast-diff": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", + "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, "fast-levenshtein": { "version": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", @@ -2799,9 +3102,10 @@ "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" } }, - "find-root": { - "version": "https://registry.npmjs.org/find-root/-/find-root-1.0.0.tgz", - "integrity": "sha1-li/yEaqyXGUg/u641ih/j26VgHo=", + "find-parent-dir": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", + "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", "dev": true }, "find-up": { @@ -2836,11 +3140,6 @@ "for-in": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" } }, - "foreach": { - "version": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, "forever-agent": { "version": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", @@ -2861,9 +3160,10 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "function-bind": { - "version": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", - "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, "generate-function": { @@ -2884,9 +3184,10 @@ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", "dev": true }, - "get-stdin": { - "version": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "get-own-enumerable-property-symbols": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz", + "integrity": "sha512-TtY/sbOemiMKPRUDDanGCSgBYe7Mf0vbRsWnBZ+9yghpZ1MvcpSpuZFjHdEeY/LZjZy0vdLjS77L6HosisFiug==", "dev": true }, "get-stream": { @@ -2940,11 +3241,6 @@ "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" } }, - "globals": { - "version": "https://registry.npmjs.org/globals/-/globals-9.17.0.tgz", - "integrity": "sha1-DAymltm5u2lNLlRwvTd3fKrVAoY=", - "dev": true - }, "globby": { "version": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", @@ -2969,14 +3265,6 @@ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", "dev": true }, - "has": { - "version": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true, - "requires": { - "function-bind": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz" - } - }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -2986,6 +3274,12 @@ "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" } }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, "hash.js": { "version": "https://registry.npmjs.org/hash.js/-/hash.js-1.0.3.tgz", "integrity": "sha1-EzL/ABVsCg/92CNgE9B7d6BFFXM=", @@ -3048,26 +3342,55 @@ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", "dev": true, "requires": { - "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "jsprim": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", - "sshpk": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz" + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "jsprim": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", + "sshpk": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz" + } + }, + "husky": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz", + "integrity": "sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==", + "dev": true, + "requires": { + "is-ci": "1.0.10", + "normalize-path": "1.0.0", + "strip-indent": "2.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", + "dev": true + } } }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true + }, "ieee754": { "version": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", "dev": true }, - "ignore": { - "version": "https://registry.npmjs.org/ignore/-/ignore-3.2.7.tgz", - "integrity": "sha1-SBDKXx2OylWVITo0uU8utO2Sa70=", - "dev": true - }, "imurmurhash": { "version": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, "indexof": { "version": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", @@ -3087,41 +3410,6 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "inquirer": { - "version": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dev": true, - "requires": { - "ansi-escapes": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "chalk": "1.1.3", - "cli-cursor": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "cli-width": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", - "figures": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "readline2": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "run-async": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "rx-lite": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "has-ansi": "2.0.0", - "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "supports-color": "2.0.0" - } - } - } - }, "interpret": { "version": "https://registry.npmjs.org/interpret/-/interpret-1.0.2.tgz", "integrity": "sha1-9PYj8LtxIvFfVxfI4lS4FhtcWy0=", @@ -3168,14 +3456,19 @@ "builtin-modules": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" } }, - "is-callable": { - "version": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", - "dev": true + "is-ci": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz", + "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=", + "dev": true, + "requires": { + "ci-info": "1.1.2" + } }, - "is-date-object": { - "version": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, "is-dotfile": { @@ -3253,6 +3546,21 @@ "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz" } }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-0.2.0.tgz", + "integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=", + "dev": true, + "requires": { + "symbol-observable": "0.2.4" + } + }, "is-path-cwd": { "version": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", @@ -3284,18 +3592,22 @@ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", "dev": true }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, "is-property": { "version": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", "dev": true }, - "is-regex": { - "version": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "https://registry.npmjs.org/has/-/has-1.0.1.tgz" - } + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true }, "is-resolvable": { "version": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", @@ -3311,11 +3623,6 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, - "is-symbol": { - "version": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true - }, "is-typedarray": { "version": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", @@ -8186,20 +8493,6 @@ "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" } }, - "js-tokens": { - "version": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz", - "integrity": "sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc=", - "dev": true - }, - "js-yaml": { - "version": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.8.3.tgz", - "integrity": "sha1-M6BexIHIUMiHWSkWb+G+thxyh2Y=", - "dev": true, - "requires": { - "argparse": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "esprima": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz" - } - }, "jsbn": { "version": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", @@ -8246,6 +8539,12 @@ } } }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, "json-stringify-safe": { "version": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", @@ -8284,14 +8583,6 @@ } } }, - "jsx-ast-utils": { - "version": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.0.tgz", - "integrity": "sha1-Wv44ho9WvIzHrq7wEAuox1vRJZE=", - "dev": true, - "requires": { - "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - } - }, "kind-of": { "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz", "integrity": "sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=", @@ -8323,6 +8614,271 @@ "type-check": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" } }, + "lint-staged": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-6.0.0.tgz", + "integrity": "sha512-ZUftK94S4vedpQG1LlA2tc2AuQXXBwc+1lB+j8SEfG5+p2dqu3Ug8iYQ8jdap+uLkhDw4OaJXqE+CZ/L+vfv+Q==", + "dev": true, + "requires": { + "app-root-path": "2.0.1", + "chalk": "2.3.0", + "commander": "2.12.2", + "cosmiconfig": "3.1.0", + "debug": "3.1.0", + "dedent": "0.7.0", + "execa": "0.8.0", + "find-parent-dir": "0.3.0", + "is-glob": "4.0.0", + "jest-validate": "21.2.1", + "listr": "0.13.0", + "lodash": "4.17.4", + "log-symbols": "2.1.0", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "npm-which": "3.0.1", + "p-map": "1.2.0", + "path-is-inside": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "pify": "3.0.0", + "staged-git-files": "0.0.4", + "stringify-object": "3.2.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "supports-color": "4.5.0" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "commander": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz", + "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "execa": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "listr": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.13.0.tgz", + "integrity": "sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-truncate": "0.2.1", + "figures": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "indent-string": "2.1.0", + "is-observable": "0.2.0", + "is-promise": "2.1.0", + "is-stream": "1.1.0", + "listr-silent-renderer": "1.1.1", + "listr-update-renderer": "0.4.0", + "listr-verbose-renderer": "0.4.1", + "log-symbols": "1.0.2", + "log-update": "1.0.2", + "ora": "0.2.3", + "p-map": "1.2.0", + "rxjs": "5.5.6", + "stream-to-observable": "0.2.0", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "has-ansi": "2.0.0", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "supports-color": "2.0.0" + } + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + } + } + }, + "listr-silent-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", + "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", + "dev": true + }, + "listr-update-renderer": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz", + "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-truncate": "0.2.1", + "elegant-spinner": "1.0.1", + "figures": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "indent-string": "3.2.0", + "log-symbols": "1.0.2", + "log-update": "1.0.2", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "has-ansi": "2.0.0", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "supports-color": "2.0.0" + } + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + } + } + }, + "listr-verbose-renderer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz", + "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-cursor": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "date-fns": "1.29.0", + "figures": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "has-ansi": "2.0.0", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "supports-color": "2.0.0" + } + } + } + }, "loader-runner": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", @@ -8354,10 +8910,24 @@ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", "dev": true }, - "lodash.cond": { - "version": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", - "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", - "dev": true + "log-symbols": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.1.0.tgz", + "integrity": "sha512-zLeLrzMA1A2vRF1e/0Mo+LNINzi6jzBylHj5WqvQ/WK/5WCZt8si9SyN4p9llr/HRYvVR1AoXHRHl4WTHyQAzQ==", + "dev": true, + "requires": { + "chalk": "2.0.1" + } + }, + "log-update": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", + "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", + "dev": true, + "requires": { + "ansi-escapes": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "cli-cursor": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz" + } }, "longest": { "version": "1.0.1", @@ -8477,11 +9047,6 @@ "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz" } }, - "minimist": { - "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, "mkdirp": { "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", @@ -8497,16 +9062,6 @@ } } }, - "ms": { - "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - }, - "mute-stream": { - "version": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", - "dev": true - }, "natural-compare": { "version": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", @@ -8596,6 +9151,32 @@ "remove-trailing-separator": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz" } }, + "npm-path": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.3.tgz", + "integrity": "sha1-Fc/04ciaONp39W9gVbJPl137K74=", + "dev": true, + "requires": { + "which": "1.3.0" + }, + "dependencies": { + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + } + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -8605,6 +9186,34 @@ "path-key": "2.0.1" } }, + "npm-which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", + "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", + "dev": true, + "requires": { + "commander": "2.9.0", + "npm-path": "2.0.3", + "which": "1.3.0" + }, + "dependencies": { + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + } + } + }, "number-is-nan": { "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", @@ -8620,21 +9229,6 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object-keys": { - "version": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", - "dev": true - }, - "object.assign": { - "version": "https://registry.npmjs.org/object.assign/-/object.assign-4.0.4.tgz", - "integrity": "sha1-scnMBE7xuf5jYG/BQau7MuFHMMw=", - "dev": true, - "requires": { - "define-properties": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "function-bind": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", - "object-keys": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz" - } - }, "object.omit": { "version": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", @@ -8677,10 +9271,38 @@ } } }, - "os-homedir": { - "version": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true + "ora": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", + "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "cli-cursor": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "cli-spinners": "0.1.2", + "object-assign": "4.1.1" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "has-ansi": "2.0.0", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "supports-color": "2.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + } + } }, "os-tmpdir": { "version": "1.0.2", @@ -8713,6 +9335,12 @@ "p-limit": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz" } }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, "pako": { "version": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", @@ -8775,11 +9403,6 @@ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, - "path-parse": { - "version": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, "pbkdf2": { "version": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.9.tgz", "integrity": "sha1-8sSyWmAAWLPDdzwIbDfbvuH/5pM=", @@ -8806,102 +9429,6 @@ "pinkie": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" } }, - "pkg-conf": { - "version": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.0.0.tgz", - "integrity": "sha1-BxyHZQQDvM+5xif1h1G/5HwGcnk=", - "dev": true, - "requires": { - "find-up": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "load-json-file": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz" - }, - "dependencies": { - "load-json-file": { - "version": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "parse-json": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" - } - }, - "strip-bom": { - "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "pkg-config": { - "version": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", - "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=", - "dev": true, - "requires": { - "debug-log": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", - "find-root": "https://registry.npmjs.org/find-root/-/find-root-1.0.0.tgz", - "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" - } - }, - "pkg-dir": { - "version": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz" - }, - "dependencies": { - "find-up": { - "version": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - } - }, - "path-exists": { - "version": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - } - } - } - }, - "pkg-up": { - "version": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz", - "integrity": "sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=", - "dev": true, - "requires": { - "find-up": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz" - }, - "dependencies": { - "find-up": { - "version": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - } - }, - "path-exists": { - "version": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - } - } - } - }, - "pluralize": { - "version": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", - "dev": true - }, "prelude-ls": { "version": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", @@ -8912,6 +9439,12 @@ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, + "prettier": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.9.2.tgz", + "integrity": "sha512-piXx9N2WT8hWb7PBbX1glAuJVIkEyUV9F5fMXFINpZ0x3otVOFKKeGmeuiclFJlP/UrgTckyV606VjH2rNK4bw==", + "dev": true + }, "pretty-format": { "version": "21.2.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-21.2.1.tgz", @@ -8970,11 +9503,6 @@ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", "dev": true }, - "progress": { - "version": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "dev": true - }, "prr": { "version": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", @@ -9063,24 +9591,6 @@ "set-immediate-shim": "1.0.1" } }, - "readline2": { - "version": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "dev": true, - "requires": { - "code-point-at": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "is-fullwidth-code-point": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "mute-stream": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz" - } - }, - "rechoir": { - "version": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.3.2.tgz" - } - }, "regenerator-runtime": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", @@ -9125,6 +9635,12 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-from-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.1.tgz", + "integrity": "sha1-xUUjPp19pmFunVmt+zn8n1iGdv8=", + "dev": true + }, "require-main-filename": { "version": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", @@ -9139,14 +9655,6 @@ "resolve-from": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz" } }, - "resolve": { - "version": "https://registry.npmjs.org/resolve/-/resolve-1.3.2.tgz", - "integrity": "sha1-HwRCyeDLuBNuh7kwX5MvRsfygjU=", - "dev": true, - "requires": { - "path-parse": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz" - } - }, "resolve-from": { "version": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", @@ -9183,22 +9691,41 @@ "integrity": "sha1-k6S71JQrxXS2mo+lfHHeEOzKfW4=", "dev": true }, - "run-async": { - "version": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "rx-lite": { + "version": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", "dev": true, "requires": { - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "rx-lite": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz" } }, - "run-parallel": { - "version": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.6.tgz", - "integrity": "sha1-KQA8miFj4B4tLfyQV18sbB1hoDk=", - "dev": true + "rxjs": { + "version": "5.5.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.6.tgz", + "integrity": "sha512-v4Q5HDC0FHAQ7zcBX7T2IL6O5ltl1a2GX4ENjPXg6SjDY69Cmx9v4113C99a4wGF16ClPv5Z8mghuYorVkg/kg==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + }, + "dependencies": { + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + } + } }, - "rx-lite": { - "version": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", "dev": true }, "semver": { @@ -9246,16 +9773,6 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, - "shelljs": { - "version": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.7.tgz", - "integrity": "sha1-svXHfvlxSPS09uImguELuoZnz/E=", - "dev": true, - "requires": { - "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "interpret": "https://registry.npmjs.org/interpret/-/interpret-1.0.2.tgz", - "rechoir": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" - } - }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -9355,41 +9872,11 @@ } } }, - "standard": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/standard/-/standard-10.0.2.tgz", - "integrity": "sha1-l0wcU8yGWwdaS1dueEQeFpXar3s=", - "dev": true, - "requires": { - "eslint": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", - "eslint-config-standard": "10.2.1", - "eslint-config-standard-jsx": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.1.tgz", - "eslint-plugin-import": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz", - "eslint-plugin-node": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-4.2.2.tgz", - "eslint-plugin-promise": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz", - "eslint-plugin-react": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz", - "eslint-plugin-standard": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", - "standard-engine": "https://registry.npmjs.org/standard-engine/-/standard-engine-7.0.0.tgz" - }, - "dependencies": { - "eslint-config-standard": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", - "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=", - "dev": true - } - } - }, - "standard-engine": { - "version": "https://registry.npmjs.org/standard-engine/-/standard-engine-7.0.0.tgz", - "integrity": "sha1-67d7nI/CyBZf+jU72Rug3/Qa9pA=", - "dev": true, - "requires": { - "deglob": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz", - "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "pkg-conf": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.0.0.tgz" - } + "staged-git-files": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-0.0.4.tgz", + "integrity": "sha1-15fhtVHKemOd7AI33G60u5vhfTU=", + "dev": true }, "stream-browserify": { "version": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", @@ -9412,6 +9899,15 @@ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" } }, + "stream-to-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.2.0.tgz", + "integrity": "sha1-WdbqOT2HwsDdrBCqDVYbxrpvDhA=", + "dev": true, + "requires": { + "any-observable": "0.2.0" + } + }, "string-width": { "version": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", @@ -9427,6 +9923,17 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, + "stringify-object": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.2.1.tgz", + "integrity": "sha512-jPcQYw/52HUPP8uOE4kkjxl5bB9LfHkKCTptIk3qw7ozP5XMIMlHMLjt00GGSwW6DJAf/njY5EU6Vpwl4LlBKQ==", + "dev": true, + "requires": { + "get-own-enumerable-property-symbols": "2.0.1", + "is-obj": "1.0.1", + "is-regexp": "1.0.0" + } + }, "stringstream": { "version": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", @@ -9446,9 +9953,10 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, - "strip-json-comments": { - "version": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", "dev": true }, "supports-color": { @@ -9457,47 +9965,11 @@ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true }, - "table": { - "version": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", - "dev": true, - "requires": { - "ajv": "https://registry.npmjs.org/ajv/-/ajv-4.11.5.tgz", - "ajv-keywords": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "chalk": "1.1.3", - "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "slice-ansi": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "string-width": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "has-ansi": "2.0.0", - "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "supports-color": "2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz", - "integrity": "sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4=", - "dev": true, - "requires": { - "is-fullwidth-code-point": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - } - } - } + "symbol-observable": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz", + "integrity": "sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=", + "dev": true }, "tapable": { "version": "0.2.8", @@ -9515,6 +9987,15 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + }, "to-arraybuffer": { "version": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", @@ -9622,11 +10103,6 @@ } } }, - "uniq": { - "version": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, "url": { "version": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", @@ -9649,14 +10125,6 @@ "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=", "dev": true }, - "user-home": { - "version": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", - "dev": true, - "requires": { - "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" - } - }, "util": { "version": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", diff --git a/package.json b/package.json index 25cd1bc..0f545e8 100644 --- a/package.json +++ b/package.json @@ -4,34 +4,28 @@ "description": "Debug utility with markdown support that runs on browser and server", "main": "src/node.js", "browser": "dist/logdown.min.js", - "files": [ - "src/", - "test/", - "dist/" - ], + "files": ["src/", "test/", "dist/"], + "lint-staged": { + "*.js": ["eslint --fix", "git add"], + "*.{json,md}": ["prettier --write", "git add"] + }, "scripts": { "build": "webpack && cp dist/logdown.js example/lib/logdown.js && uglifyjs --compress --mangle --screw-ie8 -- dist/logdown.js > dist/logdown.min.js && gzip dist/logdown.min.js --stdout --best > dist/logdown.min.js.gzip", + "fix": "npm run fix:config && npm run test:lint:fix", + "fix:config": "prettier --ignore-path .gitignore --write \"**/*.{json,md}\"", "preversion": "npm run test", "test": "jest && npm run test:lint", "test:watch": "jest --coverage=false --watch", "test:debug": "node --inspect --debug-brk ./node_modules/.bin/jest --runInBand", - "test:lint": "standard './src/**/*.js' './test/**/*.js'", - "test:lint:fix": "standard './src/**/*.js' './test/**/*.js' --fix", + "test:lint": "eslint --ignore-path .gitignore --ignore-path .prettierignore \"**/*.js\"", + "test:lint:fix": "npm run test:lint -- --fix", "version": "npm run build && git add ." }, "repository": { "type": "git", "url": "https://github.com/caiogondim/logdown" }, - "keywords": [ - "log", - "markdown", - "debug", - "console", - "info", - "error", - "logging" - ], + "keywords": ["log", "markdown", "debug", "console", "info", "error", "logging"], "author": "Caio Gondim (http://caiogondim.com)", "license": "MIT", "bugs": { @@ -41,20 +35,20 @@ "devDependencies": { "babel-core": "^6.26.0", "codecov": "^2.2.0", + "eslint-config-prettier": "2.9.0", + "eslint-plugin-prettier": "2.4.0", + "eslint": "4.14.0", + "husky": "0.14.3", "jest": "^21.2.1", - "standard": "^10.0.2", + "lint-staged": "6.0.0", + "prettier": "1.9.2", "uglify-js": "3.1.3", "webpack": "3.6.0" }, "jest": { - "roots": [ - "src/", - "test/" - ], + "roots": ["src/", "test/"], "collectCoverage": true, - "collectCoverageFrom": [ - "src/**" - ] + "collectCoverageFrom": ["src/**"] }, "dependencies": { "chalk": "^2.0.1" diff --git a/readme.md b/readme.md index c5a8b71..87a9fd8 100644 --- a/readme.md +++ b/readme.md @@ -15,8 +15,7 @@ It doesn't have any dependencies for the browser version and it's only 2K gzipped. -You can see it in action in the [example page](//caiogondim.github.io/logdown.js) or in the preview -below. +You can see it in action in the [example page](//caiogondim.github.io/logdown.js) or in the preview below. ## Installation @@ -39,8 +38,7 @@ Out-of-the box colors work well on both light and dark themes. ## Usage -`logdown` exports a function. For the simplest use case, pass the name of your module and -it will return a decorated `console`. +`logdown` exports a function. For the simplest use case, pass the name of your module and it will return a decorated `console`. ```js const logdown = require('logdown') @@ -53,8 +51,7 @@ Or in a more idiomatic way: const logger = require('logdown')('foo') ``` -Just like [debug.js](https://github.com/visionmedia/debug) and node core's [debuglog](https://nodejs.org/docs/latest/api/util.html#util_util_debuglog_section), the enviroment variable `NODE_DEBUG` is used to decide which -module will print debug information. +Just like [debug.js](https://github.com/visionmedia/debug) and node core's [debuglog](https://nodejs.org/docs/latest/api/util.html#util_util_debuglog_section), the enviroment variable `NODE_DEBUG` is used to decide which module will print debug information. ```js $ NODE_DEBUG=foo node example/node.js @@ -62,9 +59,7 @@ $ NODE_DEBUG=foo node example/node.js ### Logging -After creating your object, you can use the regular `log`, `warn`, `info` and `error` methods as we -have on `console`, but now with Markdown support. If a method is not provided by `logdown`, it will -just delegate to the original `console` object or `opts.logger` if passed. +After creating your object, you can use the regular `log`, `warn`, `info` and `error` methods as we have on `console`, but now with Markdown support. If a method is not provided by `logdown`, it will just delegate to the original `console` object or `opts.logger` if passed. ```js logger.log('lorem *ipsum*') @@ -86,7 +81,7 @@ The following options can be used for configuration. #### `prefix` -- Type: `String` +* Type: `String` ```js const logger = logdown('foo') @@ -103,13 +98,13 @@ fooQuzLogger.log('Lorem Ipsum') #### `markdown` -- Type: `Boolean` -- Default: `true` +* Type: `Boolean` +* Default: `true` If setted to `false`, markdown will not be parsed. ```js -var logger = logdown({ markdown: false }) +var logger = logdown({markdown: false}) logger.log('Lorem *ipsum*') // Will not parse the markdown ``` @@ -128,32 +123,31 @@ logger.log('lorem `ipsum`') #### `prefixColor` -- type: `String` -- default: next value after last used on the `logdown.prefixColors` array. +* type: `String` +* default: next value after last used on the `logdown.prefixColors` array. Hex value for a custom color. ```js -const logger1 = logdown('foo', { prefixColor: '#FF0000' }) // red prefix -const logger2 = logdown('bar', { prefixColor: '#00FF00' }) // green prefix -const logger3 = logdown('quz', { prefixColor: '#0000FF' }) // blue prefix +const logger1 = logdown('foo', {prefixColor: '#FF0000'}) // red prefix +const logger2 = logdown('bar', {prefixColor: '#00FF00'}) // green prefix +const logger3 = logdown('quz', {prefixColor: '#0000FF'}) // blue prefix ``` #### `logger` -- type: 'Object' -- default: `console` +* type: 'Object' +* default: `console` -Custom logger. On Node it's possible to instantiate a new `console` setting it's output to a -different stream other than `stdout` and `stderr`. +Custom logger. On Node it's possible to instantiate a new `console` setting it's output to a different stream other than `stdout` and `stderr`. ```js -const output = fs.createWriteStream('./stdout.log'); -const errorOutput = fs.createWriteStream('./stderr.log'); -const fileLogger = new Console(output, errorOutput) +const output = fs.createWriteStream('./stdout.log') +const errorOutput = fs.createWriteStream('./stderr.log') +const fileLogger = new Console(output, errorOutput) const logger = logdown('foo', { - logger: fileLogger + logger: fileLogger, }) ``` @@ -161,8 +155,8 @@ const logger = logdown('foo', { #### `isEnabled` -- type: 'Boolean' -- default: default value is derived from `localStorage.debug` on browser and from env var `NODE_DEBUG` on node. +* type: 'Boolean' +* default: default value is derived from `localStorage.debug` on browser and from env var `NODE_DEBUG` on node. Used to enable/disable a given instance at runtime. @@ -173,10 +167,7 @@ logger.state.isEnabled = false ## Enabling/disabling instances -`logdown` is compatible with Node.js -[util.debuglog](https://nodejs.org/docs/latest/api/util.html#util_util_debuglog_section) and -[debug.js](https://github.com/visionmedia/debug) as it uses the `NODE_DEBUG` enviroment variable to -control which instances are enabled to output debug info. +`logdown` is compatible with Node.js [util.debuglog](https://nodejs.org/docs/latest/api/util.html#util_util_debuglog_section) and [debug.js](https://github.com/visionmedia/debug) as it uses the `NODE_DEBUG` enviroment variable to control which instances are enabled to output debug info. For the browser use `localStorage.debug`. @@ -246,29 +237,24 @@ function transport({msg, level, args, state}) { } const levelMap = { - warn: 'warning', - error: 'error' - }; + warn: 'warning', + error: 'error', + } - if (levelMap[level] - && process.env.NODE_ENV === 'production' - ) { + if (levelMap[level] && process.env.NODE_ENV === 'production') { Raven.captureException(msg, { - level: levelMap[level], - extra: args[1] - }); + level: levelMap[level], + extra: args[1], + }) } } -logdown.transports = [ transport ]; +logdown.transports = [transport] ``` ## Conventions -If you're using this in one or more of your libraries, you should use the name of your library so -that developers may toggle debugging as desired without guessing names. If you have more than one -debuggers you should prefix them with your library name and use ":" to separate features. For -example "bodyParser" from Connect would then be "connect:bodyParser". +If you're using this in one or more of your libraries, you should use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you should prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser". ## FAQ @@ -276,16 +262,13 @@ example "bodyParser" from Connect would then be "connect:bodyParser". ## Sponsor -If you found this library useful and are willing to donate, transfer some -bitcoins to `1BqqKiZA8Tq43CdukdBEwCdDD42jxuX9UY`. +If you found this library useful and are willing to donate, transfer some bitcoins to `1BqqKiZA8Tq43CdukdBEwCdDD42jxuX9UY`. ## Credits -- [debug.js](https://github.com/visionmedia/debug) for some pieces of copied documentation -- [Node core's debuglog](https://nodejs.org/docs/latest/api/util.html#util_util_debuglog_section) +* [debug.js](https://github.com/visionmedia/debug) for some pieces of copied documentation +* [Node core's debuglog](https://nodejs.org/docs/latest/api/util.html#util_util_debuglog_section) --- -[caiogondim.com](https://caiogondim.com)  ·  -GitHub [@caiogondim](https://github.com/caiogondim)  ·  -Twitter [@caio_gondim](https://twitter.com/caio_gondim) +[caiogondim.com](https://caiogondim.com)  ·  GitHub [@caiogondim](https://github.com/caiogondim)  ·  Twitter [@caio_gondim](https://twitter.com/caio_gondim) diff --git a/src/base.js b/src/base.js index 2cb5c31..79220ac 100644 --- a/src/base.js +++ b/src/base.js @@ -1,7 +1,7 @@ -var toArray = require('./util/to-array') +const toArray = require('./util/to-array') -module.exports = function () { - function Logdown (prefix, opts) { +module.exports = function() { + function Logdown(prefix, opts) { if (!(this instanceof Logdown)) { return new Logdown(prefix, opts) } @@ -27,60 +27,54 @@ module.exports = function () { Logdown._instances = [] Logdown._prefixRegExps = [] - Logdown._prepareRegExpForPrefixSearch = function (str) { + Logdown._prepareRegExpForPrefixSearch = function(str) { return new RegExp('^' + str.replace(/\*/g, '.*?') + '$') } - Logdown._isPrefixAlreadyInUse = function (prefix) { - return Logdown._instances.some(function (instance) { - return (instance.opts.prefix === prefix) + Logdown._isPrefixAlreadyInUse = function(prefix) { + return Logdown._instances.some(instance => { + return instance.opts.prefix === prefix }) } - Logdown._getInstanceByPrefix = function (prefix) { - return Logdown._instances.filter(function (instanceCur) { + Logdown._getInstanceByPrefix = function(prefix) { + return Logdown._instances.filter(instanceCur => { return instanceCur.opts.prefix === prefix })[0] } - Logdown._normalizeOpts = function (prefix, opts) { + Logdown._normalizeOpts = function(prefix, opts) { if (typeof prefix !== 'string') { throw new TypeError('prefix must be a string') } opts = opts || {} - var markdown = opts.markdown === undefined ? true : Boolean(opts.markdown) - var prefixColor = opts.prefixColor || Logdown._getNextPrefixColor() - var logger = opts.logger || console + const markdown = opts.markdown === undefined ? true : Boolean(opts.markdown) + const prefixColor = opts.prefixColor || Logdown._getNextPrefixColor() + const logger = opts.logger || console return { logger: logger, markdown: markdown, prefix: prefix, - prefixColor: prefixColor + prefixColor: prefixColor, } } - Logdown._getInitialState = function (opts) { + Logdown._getInitialState = function(opts) { return { - isEnabled: Logdown._getEnableState(opts) + isEnabled: Logdown._getEnableState(opts), } } - Logdown._getEnableState = function (opts) { - var isEnabled = false + Logdown._getEnableState = function(opts) { + let isEnabled = false - Logdown._prefixRegExps.forEach(function (filter) { - if ( - filter.type === 'enable' && - filter.regExp.test(opts.prefix) - ) { + Logdown._prefixRegExps.forEach(filter => { + if (filter.type === 'enable' && filter.regExp.test(opts.prefix)) { isEnabled = true - } else if ( - filter.type === 'disable' && - filter.regExp.test(opts.prefix) - ) { + } else if (filter.type === 'disable' && filter.regExp.test(opts.prefix)) { isEnabled = false } }) @@ -88,12 +82,12 @@ module.exports = function () { return isEnabled } - Logdown._decorateLoggerMethods = function (instance) { - var logger = instance.opts.logger + Logdown._decorateLoggerMethods = function(instance) { + const logger = instance.opts.logger - var loggerMethods = Object - .keys(logger) - .filter(function (method) { return typeof logger[method] === 'function' }) + let loggerMethods = Object.keys(logger).filter(method => { + return typeof logger[method] === 'function' + }) // In old Safari and Chrome browsers, `console` methods are not iterable. // In that case, we provide a minimum API. @@ -101,35 +95,39 @@ module.exports = function () { loggerMethods = ['log', 'warn', 'error'] } - loggerMethods - .forEach(function (method) { - instance[method] = function () { - var args = toArray(arguments) - var instance = this.opts.prefix - - if (Logdown.transports.length) { - var msg = '[' + instance + '] ' + - args - .filter(function (arg) { return typeof arg !== 'object' }) - .join(' ') - - Logdown.transports.forEach(function (transport) { - transport({ - state: this.state, - instance: instance, - level: method, - args: args, - msg: msg + loggerMethods.forEach(method => { + instance[method] = function() { + const args = toArray(arguments) + const instance = this.opts.prefix + + if (Logdown.transports.length) { + const msg = + '[' + + instance + + '] ' + + args + .filter(arg => { + return typeof arg !== 'object' }) - }.bind(this)) - } + .join(' ') + + Logdown.transports.forEach(transport => { + transport({ + state: this.state, + instance: instance, + level: method, + args: args, + msg: msg, + }) + }) + } - if (this.state.isEnabled) { - var preparedOutput = this._prepareOutput(args, method) - logger[method].apply(logger, preparedOutput) - } + if (this.state.isEnabled) { + const preparedOutput = this._prepareOutput(args, method) + logger[method].apply(logger, preparedOutput) } - }) + } + }) } return Logdown diff --git a/src/browser.js b/src/browser.js index de38ae6..8b0a067 100644 --- a/src/browser.js +++ b/src/browser.js @@ -1,7 +1,7 @@ -var Logdown = require('./base')() -var markdown = require('./markdown/browser') -var isColorSupported = require('./util/is-color-supported/browser') -var globalObject = require('./util/get-global')() +const Logdown = require('./base')() +const markdown = require('./markdown/browser') +const isColorSupported = require('./util/is-color-supported/browser') +const globalObject = require('./util/get-global')() // // Static @@ -16,10 +16,10 @@ Logdown.prefixColors = [ '#99CC99', '#66CCCC', '#6699CC', - '#CC99CC' + '#CC99CC', ] -Logdown._setPrefixRegExps = function () { +Logdown._setPrefixRegExps = function() { try { if ( globalObject.localStorage && @@ -30,30 +30,30 @@ Logdown._setPrefixRegExps = function () { globalObject.localStorage .getItem('debug') .split(',') - .forEach(function (str) { + .forEach(str => { str = str.trim() - var type = 'enable' + let type = 'enable' if (str[0] === '-') { str = str.substr(1) type = 'disable' } - var regExp = Logdown._prepareRegExpForPrefixSearch(str) + const regExp = Logdown._prepareRegExpForPrefixSearch(str) Logdown._prefixRegExps.push({ type: type, - regExp: regExp + regExp: regExp, }) }) } } catch (error) {} } -Logdown._getNextPrefixColor = (function () { - var lastUsed = 0 +Logdown._getNextPrefixColor = (function() { + let lastUsed = 0 - return function () { + return function() { lastUsed += 1 return Logdown.prefixColors[lastUsed % Logdown.prefixColors.length] } @@ -63,14 +63,14 @@ Logdown._getNextPrefixColor = (function () { // Instance // -Logdown.prototype._getDecoratedPrefix = function () { - var decoratedPrefix = [] +Logdown.prototype._getDecoratedPrefix = function() { + const decoratedPrefix = [] if (isColorSupported()) { decoratedPrefix.push('%c' + this.opts.prefix + '%c ') decoratedPrefix.push( 'color:' + this.opts.prefixColor + '; font-weight:bold;', - '' // Empty string resets style. + '', // Empty string resets style. ) } else { decoratedPrefix.push('[' + this.opts.prefix + '] ') @@ -79,9 +79,9 @@ Logdown.prototype._getDecoratedPrefix = function () { return decoratedPrefix } -Logdown.prototype._prepareOutput = function (args) { - var preparedOutput = this._getDecoratedPrefix() - var parsedMarkdown +Logdown.prototype._prepareOutput = function(args) { + let preparedOutput = this._getDecoratedPrefix() + let parsedMarkdown // Only first argument on `console` can have style. if (typeof args[0] === 'string') { diff --git a/src/markdown/browser.js b/src/markdown/browser.js index 3474971..c0e43d6 100644 --- a/src/markdown/browser.js +++ b/src/markdown/browser.js @@ -1,9 +1,9 @@ -var rules = require('./rules/browser') -var getNextMatch = require('./get-next-match') +const rules = require('./rules/browser') +const getNextMatch = require('./get-next-match') -function parse (text) { - var styles = [] - var match = getNextMatch(text, rules) +function parse(text) { + const styles = [] + let match = getNextMatch(text, rules) while (match) { styles.push(match.rule.style) @@ -15,7 +15,7 @@ function parse (text) { return { text: text, - styles: styles + styles: styles, } } @@ -24,5 +24,5 @@ function parse (text) { // module.exports = { - parse: parse + parse: parse, } diff --git a/src/markdown/get-next-match.js b/src/markdown/get-next-match.js index 9e2b230..dbc6498 100644 --- a/src/markdown/get-next-match.js +++ b/src/markdown/get-next-match.js @@ -1,13 +1,13 @@ -module.exports = function getNextMatch (text, rules) { - var matches = [] +module.exports = function getNextMatch(text, rules) { + const matches = [] - rules.forEach(function (rule) { - var match = text.match(rule.regexp) + rules.forEach(rule => { + const match = text.match(rule.regexp) if (match) { matches.push({ rule: rule, - match: match + match: match, }) } }) @@ -16,7 +16,7 @@ module.exports = function getNextMatch (text, rules) { return null } - matches.sort(function (a, b) { + matches.sort((a, b) => { return a.match.index - b.match.index }) diff --git a/src/markdown/node.js b/src/markdown/node.js index b97df1e..961a818 100644 --- a/src/markdown/node.js +++ b/src/markdown/node.js @@ -1,9 +1,9 @@ -var rules = require('./rules/node') -var getNextMatch = require('./get-next-match') +const rules = require('./rules/node') +const getNextMatch = require('./get-next-match') -function parse (text) { - var styles = [] - var match = getNextMatch(text, rules) +function parse(text) { + const styles = [] + let match = getNextMatch(text, rules) while (match) { text = text.replace(match.rule.regexp, match.rule.replacer) @@ -12,7 +12,7 @@ function parse (text) { return { text: text, - styles: styles + styles: styles, } } @@ -21,5 +21,5 @@ function parse (text) { // module.exports = { - parse: parse + parse: parse, } diff --git a/src/markdown/rules/browser.js b/src/markdown/rules/browser.js index f4f1e27..836b56e 100644 --- a/src/markdown/rules/browser.js +++ b/src/markdown/rules/browser.js @@ -1,27 +1,27 @@ module.exports = [ { regexp: /\*([^*]+)\*/, - replacer: function (match, submatch1) { + replacer: function(match, submatch1) { return '%c' + submatch1 + '%c' }, - style: 'font-weight:bold;' + style: 'font-weight:bold;', }, { regexp: /_([^_]+)_/, - replacer: function (match, submatch1) { + replacer: function(match, submatch1) { return '%c' + submatch1 + '%c' }, - style: 'font-style:italic;' + style: 'font-style:italic;', }, { regexp: /`([^`]+)`/, - replacer: function (match, submatch1) { + replacer: function(match, submatch1) { return '%c' + submatch1 + '%c' }, style: 'background-color:rgba(255,204,102, 0.1);' + 'color:#FFCC66;' + 'padding:2px 5px;' + - 'border-radius:2px;' - } + 'border-radius:2px;', + }, ] diff --git a/src/markdown/rules/node.js b/src/markdown/rules/node.js index c01ec51..ea5f087 100644 --- a/src/markdown/rules/node.js +++ b/src/markdown/rules/node.js @@ -1,22 +1,22 @@ -var chalk = require('chalk') +const chalk = require('chalk') module.exports = [ { regexp: /\*([^*]+)\*/, - replacer: function (match, submatch1) { + replacer: function(match, submatch1) { return chalk.bold(submatch1) - } + }, }, { regexp: /_([^_]+)_/, - replacer: function (match, submatch1) { + replacer: function(match, submatch1) { return chalk.italic(submatch1) - } + }, }, { regexp: /`([^`]+)`/, - replacer: function (match, submatch1) { + replacer: function(match, submatch1) { return chalk.yellow(submatch1) - } - } + }, + }, ] diff --git a/src/node.js b/src/node.js index 53c7797..d44c8ea 100644 --- a/src/node.js +++ b/src/node.js @@ -1,7 +1,7 @@ -var Logdown = require('./base')() -var markdown = require('./markdown/node') -var isColorSupported = require('./util/is-color-supported/node') -var chalk = require('chalk') +const Logdown = require('./base')() +const markdown = require('./markdown/node') +const isColorSupported = require('./util/is-color-supported/node') +const chalk = require('chalk') // // Static @@ -12,67 +12,49 @@ Logdown.methodEmoji = { error: '❌', info: `\u{2139}\u{FE0F}`, // Forces emoji information instead of "i" symbol debug: '🐞', - log: ' ' + log: ' ', } -Logdown.prefixColors = [ - 'red', - 'green', - 'yellow', - 'blue', - 'magenta', - 'cyan' -] +Logdown.prefixColors = ['red', 'green', 'yellow', 'blue', 'magenta', 'cyan'] -Logdown._setPrefixRegExps = function () { +Logdown._setPrefixRegExps = function() { // Parsing `NODE_DEBUG` and `DEBUG` env var - var envVar = null + let envVar = null Logdown._prefixRegExps = [] - if ( - typeof process !== 'undefined' && - process.env !== undefined - ) { + if (typeof process !== 'undefined' && process.env !== undefined) { // `NODE_DEBUG` has precedence over `DEBUG` - if ( - process.env['NODE_DEBUG'] !== undefined && - process.env['NODE_DEBUG'] !== '' - ) { + if (process.env.NODE_DEBUG !== undefined && process.env.NODE_DEBUG !== '') { envVar = 'NODE_DEBUG' - } else if ( - process.env['DEBUG'] !== undefined && - process.env['DEBUG'] !== '' - ) { + } else if (process.env.DEBUG !== undefined && process.env.DEBUG !== '') { envVar = 'DEBUG' } if (envVar) { - process.env[envVar] - .split(',') - .forEach(function (str) { - str = str.trim() - var type = 'enable' - - if (str[0] === '-') { - str = str.substr(1) - type = 'disable' - } - - var regExp = Logdown._prepareRegExpForPrefixSearch(str) - - Logdown._prefixRegExps.push({ - type: type, - regExp: regExp - }) + process.env[envVar].split(',').forEach(str => { + str = str.trim() + let type = 'enable' + + if (str[0] === '-') { + str = str.substr(1) + type = 'disable' + } + + const regExp = Logdown._prepareRegExpForPrefixSearch(str) + + Logdown._prefixRegExps.push({ + type: type, + regExp: regExp, }) + }) } } } -Logdown._getNextPrefixColor = (function () { - var lastUsed = 0 +Logdown._getNextPrefixColor = (function() { + let lastUsed = 0 - return function () { + return function() { lastUsed += 1 return Logdown.prefixColors[lastUsed % Logdown.prefixColors.length] } @@ -82,8 +64,8 @@ Logdown._getNextPrefixColor = (function () { // Instance // -Logdown.prototype._getDecoratedPrefix = function (method) { - var decoratedPrefix +Logdown.prototype._getDecoratedPrefix = function(method) { + let decoratedPrefix if (isColorSupported()) { // If is a hex color value @@ -97,26 +79,31 @@ Logdown.prototype._getDecoratedPrefix = function (method) { } if (method === 'warn') { - decoratedPrefix = chalk.yellow(Logdown.methodEmoji.warn) + ' ' + decoratedPrefix + decoratedPrefix = + chalk.yellow(Logdown.methodEmoji.warn) + ' ' + decoratedPrefix } else if (method === 'error') { - decoratedPrefix = chalk.red(Logdown.methodEmoji.error) + ' ' + decoratedPrefix + decoratedPrefix = + chalk.red(Logdown.methodEmoji.error) + ' ' + decoratedPrefix } else if (method === 'info') { - decoratedPrefix = chalk.blue(Logdown.methodEmoji.info) + ' ' + decoratedPrefix + decoratedPrefix = + chalk.blue(Logdown.methodEmoji.info) + ' ' + decoratedPrefix } else if (method === 'debug') { - decoratedPrefix = chalk.gray(Logdown.methodEmoji.debug) + ' ' + decoratedPrefix + decoratedPrefix = + chalk.gray(Logdown.methodEmoji.debug) + ' ' + decoratedPrefix } else if (method === 'log') { - decoratedPrefix = chalk.white(Logdown.methodEmoji.log) + ' ' + decoratedPrefix + decoratedPrefix = + chalk.white(Logdown.methodEmoji.log) + ' ' + decoratedPrefix } return decoratedPrefix } -Logdown.prototype._prepareOutput = function (args, method) { - var preparedOutput = [] +Logdown.prototype._prepareOutput = function(args, method) { + const preparedOutput = [] preparedOutput[0] = this._getDecoratedPrefix(method) - args.forEach(function (arg) { + args.forEach(function(arg) { if (typeof arg === 'string') { if (this.opts.markdown) { preparedOutput.push(markdown.parse(arg).text) diff --git a/src/util/get-global.js b/src/util/get-global.js index 922d9ba..1f9ce50 100644 --- a/src/util/get-global.js +++ b/src/util/get-global.js @@ -1,14 +1,14 @@ /* eslint-disable no-new-func */ /* global self, global */ -function getGlobal (slf, glb) { +function getGlobal(slf, glb) { // Return the global object based on the environment presently in. // window for browser and global for node. // Ref from -> https://github.com/purposeindustries/window-or-global/blob/master/lib/index.js return ( - (typeof slf === 'object' && slf.self === slf && slf) || - (typeof glb === 'object' && glb.global === glb && glb) || - this + (typeof slf === 'object' && slf.self === slf && slf) || + (typeof glb === 'object' && glb.global === glb && glb) || + this ) } diff --git a/src/util/is-color-supported/browser.js b/src/util/is-color-supported/browser.js index d506dd8..99f8a4a 100644 --- a/src/util/is-color-supported/browser.js +++ b/src/util/is-color-supported/browser.js @@ -1,6 +1,6 @@ -var isWebkit = require('../is-webkit') -var isFirefox = require('../is-firefox') +const isWebkit = require('../is-webkit') +const isFirefox = require('../is-firefox') -module.exports = function isColorSupported () { - return (isWebkit() || isFirefox()) +module.exports = function isColorSupported() { + return isWebkit() || isFirefox() } diff --git a/src/util/is-color-supported/node.js b/src/util/is-color-supported/node.js index e8d41b8..ed2ea09 100644 --- a/src/util/is-color-supported/node.js +++ b/src/util/is-color-supported/node.js @@ -1,4 +1,4 @@ -module.exports = function isColorSupported () { +module.exports = function isColorSupported() { if (process.platform === 'win32') { return true } @@ -7,9 +7,7 @@ module.exports = function isColorSupported () { return true } - if ( - /^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM) - ) { + if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) { return true } diff --git a/src/util/is-firefox.js b/src/util/is-firefox.js index 1b5c71b..66547b3 100644 --- a/src/util/is-firefox.js +++ b/src/util/is-firefox.js @@ -1,4 +1,4 @@ -module.exports = function isFirefox () { +module.exports = function isFirefox() { try { return /firefox\/(\d+)/i.test(navigator.userAgent) } catch (error) { diff --git a/src/util/is-webkit.js b/src/util/is-webkit.js index f73d998..aad0775 100644 --- a/src/util/is-webkit.js +++ b/src/util/is-webkit.js @@ -1,7 +1,10 @@ // Is webkit? http://stackoverflow.com/a/16459606/376773 -module.exports = function isWebkit () { +module.exports = function isWebkit() { try { - return ('WebkitAppearance' in document.documentElement.style) && !/Edge/.test(navigator.userAgent) + return ( + 'WebkitAppearance' in document.documentElement.style && + !/Edge/.test(navigator.userAgent) + ) } catch (error) { return false } diff --git a/src/util/to-array.js b/src/util/to-array.js index 567ebb9..a141ad4 100644 --- a/src/util/to-array.js +++ b/src/util/to-array.js @@ -1,3 +1,3 @@ -module.exports = function toArray (arg) { +module.exports = function toArray(arg) { return Array.prototype.slice.call(arg, 0) } diff --git a/test/browser/logging-methods.test.js b/test/browser/logging-methods.test.js index 08a4cb1..f5e9810 100644 --- a/test/browser/logging-methods.test.js +++ b/test/browser/logging-methods.test.js @@ -11,17 +11,18 @@ globalObject.localStorage = localStorage const logdown = require('../../src/browser') const markdown = require('../../src/markdown/browser') -const consoleMethods = Object.keys(console) - .filter(method => typeof console[method] === 'function') +const consoleMethods = Object.keys(console).filter( + method => typeof console[method] === 'function', +) const toMarkdown = (logger, str, ...rest) => { - let expectedArgs = logger._getDecoratedPrefix() + const expectedArgs = logger._getDecoratedPrefix() expectedArgs[0] = expectedArgs[0] + markdown.parse(str).text return expectedArgs.concat(markdown.parse(str).styles).concat(rest) } -consoleMethods.forEach((method) => { +consoleMethods.forEach(method => { describe('logdown.' + method, () => { beforeEach(() => { jest.spyOn(console, method).mockImplementation(jest.fn()) @@ -36,41 +37,43 @@ consoleMethods.forEach((method) => { }) it('parses markdown if enabled', () => { - const foo = logdown('foo', { markdown: true }) - + const foo = logdown('foo', {markdown: true}) ;[ 'lorem *ipsum*', 'lorem _ipsum_', 'lorem `ipsum`', - 'lorem `ipsum` *dolor* sit _amet_' + 'lorem `ipsum` *dolor* sit _amet_', ].forEach(str => { foo[method](str) - expect(console[method]).toHaveBeenLastCalledWith(...toMarkdown(foo, str)) + expect(console[method]).toHaveBeenLastCalledWith( + ...toMarkdown(foo, str), + ) }) }) it('parses markdown only for first arg', () => { - const foo = logdown('foo', { markdown: true }) + const foo = logdown('foo', {markdown: true}) const str = 'lorem *ipsum*' foo[method](str, str) - expect(console[method]).toHaveBeenLastCalledWith(...toMarkdown(foo, str, str)) + expect(console[method]).toHaveBeenLastCalledWith( + ...toMarkdown(foo, str, str), + ) }) it('doesnt parse markdown if disabled', () => { - const foo = logdown('foo', { markdown: false }) - + const foo = logdown('foo', {markdown: false}) ;[ 'lorem *ipsum*', 'lorem _ipsum_', 'lorem `ipsum`', - 'lorem `ipsum` *dolor* sit _amet_' + 'lorem `ipsum` *dolor* sit _amet_', ].forEach(str => { foo[method](str) - let expectedArgs = foo._getDecoratedPrefix() + const expectedArgs = foo._getDecoratedPrefix() expectedArgs[0] = expectedArgs[0] + str expect(console[method]).toHaveBeenLastCalledWith(...expectedArgs) @@ -80,7 +83,7 @@ consoleMethods.forEach((method) => { // https://github.com/caiogondim/logdown/issues/14 it('prints not-string arguments as is', () => { const foo = logdown('foo') - const obj = { foo: 1, bar: 2 } + const obj = {foo: 1, bar: 2} foo[method](obj) @@ -98,7 +101,7 @@ consoleMethods.forEach((method) => { }) it('has a facade for every method on opts.logger', () => { - const foo = logdown('foo', { logger: console }) + const foo = logdown('foo', {logger: console}) consoleMethods.forEach(consoleMethod => { expect(typeof foo[consoleMethod]).toBe('function') diff --git a/test/browser/util.test.js b/test/browser/util.test.js index bd183c8..6b448db 100644 --- a/test/browser/util.test.js +++ b/test/browser/util.test.js @@ -22,7 +22,8 @@ describe('isColorSupported()', () => { it('returns true for firefox', () => { window.navigator = { - userAgent: 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1' + userAgent: + 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1', } expect(isColorSupported()).toBe(true) @@ -30,7 +31,8 @@ describe('isColorSupported()', () => { it('returns true for chrome', () => { window.navigator = { - userAgent: 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36' + userAgent: + 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36', } expect(isColorSupported()).toBe(true) @@ -38,7 +40,8 @@ describe('isColorSupported()', () => { it('returns true for safari', () => { window.navigator = { - userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A' + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A', } expect(isColorSupported()).toBe(true) @@ -46,7 +49,8 @@ describe('isColorSupported()', () => { it('returns false for Edge', () => { window.navigator = { - userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246' + userAgent: + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246', } expect(isColorSupported()).toBe(false) diff --git a/test/common/constructor.test.js b/test/common/constructor.test.js index 1c98ff9..8ce7280 100644 --- a/test/common/constructor.test.js +++ b/test/common/constructor.test.js @@ -41,7 +41,7 @@ describe('logdown()', () => { it('accepts custom prefixColor', () => { const prefixColor = '#FF0000' - const log1 = logdown('foo', { prefixColor }) + const log1 = logdown('foo', {prefixColor}) expect(log1.opts.prefixColor).toEqual(prefixColor) }) @@ -50,9 +50,9 @@ describe('logdown()', () => { logdown._setPrefixRegExps() const logger = { - log: jest.fn() + log: jest.fn(), } - const log1 = logdown('foo', { logger }) + const log1 = logdown('foo', {logger}) expect(logger.log).not.toHaveBeenCalled() log1.log('lorem') diff --git a/test/common/logging-methods.test.js b/test/common/logging-methods.test.js index 51c8f67..889e024 100644 --- a/test/common/logging-methods.test.js +++ b/test/common/logging-methods.test.js @@ -15,9 +15,9 @@ it('has a facade for every method on opts.logger', () => { const logger = { log: jest.fn(), warn: jest.fn(), - error: 'not a function' + error: 'not a function', } - const foo = logdown('foo', { logger: logger }) + const foo = logdown('foo', {logger: logger}) expect(typeof foo.log).toBe('function') expect(typeof foo.warn).toBe('function') @@ -27,7 +27,7 @@ it('has a facade for every method on opts.logger', () => { // Issue: https://github.com/caiogondim/logdown.js/issues/95 it('exposes a basic API for `logger` with no iterable methods', () => { const logger = {} - const foo = logdown('foo', { logger: logger }) + const foo = logdown('foo', {logger: logger}) expect(typeof foo.log).toBe('function') expect(typeof foo.warn).toBe('function') diff --git a/test/common/transports.test.js b/test/common/transports.test.js index 21e10ba..be052e1 100644 --- a/test/common/transports.test.js +++ b/test/common/transports.test.js @@ -21,17 +21,17 @@ describe('logdown.transports', () => { it('calls each transport function', () => { const transport = jest.fn() - const foo = logdown('foo', { logger: { log: () => {} } }) + const foo = logdown('foo', {logger: {log: () => {}}}) logdown.transports = [transport] foo.log('bar') expect(transport).toBeCalledWith({ - state: { isEnabled: true }, + state: {isEnabled: true}, instance: 'foo', level: 'log', args: ['bar'], - msg: '[foo] bar' + msg: '[foo] bar', }) }) @@ -39,14 +39,14 @@ describe('logdown.transports', () => { const transport1 = jest.fn(() => expect(transport2).not.toBeCalled()) const transport2 = jest.fn() const expectedArg = { - state: { isEnabled: true }, + state: {isEnabled: true}, instance: 'foo', level: 'log', args: ['bar'], - msg: '[foo] bar' + msg: '[foo] bar', } - const foo = logdown('foo', { logger: { log: () => {} } }) + const foo = logdown('foo', {logger: {log: () => {}}}) logdown.transports = [transport1, transport2] foo.log('bar') @@ -58,17 +58,17 @@ describe('logdown.transports', () => { it('allows remove transports at runtime', () => { const transport = jest.fn() - const foo = logdown('foo', { logger: { log: () => {} } }) + const foo = logdown('foo', {logger: {log: () => {}}}) logdown.transports = [transport] foo.log('bar') expect(transport).toBeCalledWith({ - state: { isEnabled: true }, + state: {isEnabled: true}, instance: 'foo', level: 'log', args: ['bar'], - msg: '[foo] bar' + msg: '[foo] bar', }) transport.mockReset() @@ -82,25 +82,25 @@ describe('logdown.transports', () => { it('should not include objects into msg', () => { const transport = jest.fn() - const foo = logdown('foo', { logger: { log: () => {} } }) + const foo = logdown('foo', {logger: {log: () => {}}}) logdown.transports = [transport] foo.log('bar', {quz: 1}, 'baz') expect(transport).toBeCalledWith({ - state: { isEnabled: true }, + state: {isEnabled: true}, instance: 'foo', level: 'log', args: ['bar', {quz: 1}, 'baz'], - msg: '[foo] bar baz' + msg: '[foo] bar baz', }) }) it('should execute transports even if state.isEnabled === false', () => { const transport = jest.fn() - const logger = { log: jest.fn() } + const logger = {log: jest.fn()} - const foo = logdown('foo', { logger: logger }) + const foo = logdown('foo', {logger: logger}) foo.state.isEnabled = false logdown.transports = [transport] @@ -108,11 +108,11 @@ describe('logdown.transports', () => { expect(logger.log).not.toBeCalled() expect(transport).toBeCalledWith({ - state: { isEnabled: false }, + state: {isEnabled: false}, instance: 'foo', level: 'log', args: ['bar'], - msg: '[foo] bar' + msg: '[foo] bar', }) }) }) diff --git a/test/mocks/local-storage.js b/test/mocks/local-storage.js index 3add9a3..9b38707 100644 --- a/test/mocks/local-storage.js +++ b/test/mocks/local-storage.js @@ -1,13 +1,13 @@ const localStorage = { - setItem (key, value) { + setItem(key, value) { localStorage[key] = value }, - getItem (key) { + getItem(key) { return localStorage[key] }, - removeItem (item) { + removeItem(item) { localStorage[item] = undefined - } + }, } module.exports = localStorage diff --git a/test/node/debug-env-var.test.js b/test/node/debug-env-var.test.js index dbb7293..e4e2928 100644 --- a/test/node/debug-env-var.test.js +++ b/test/node/debug-env-var.test.js @@ -1,13 +1,13 @@ /* eslint-env jest */ -var logdown = require('../../src/node') +const logdown = require('../../src/node') describe('NODE_DEBUG and DEBUG environment variables', () => { // NODE_DEBUG is the official env var supported by Node // https://nodejs.org/api/util.html#util_util_debuglog_section // DEBUG is for compatibility with the debug lib - var envVars = ['NODE_DEBUG', 'DEBUG'] - var origEnv = process.env + const envVars = ['NODE_DEBUG', 'DEBUG'] + const origEnv = process.env beforeEach(() => { console.log = jest.fn() @@ -28,15 +28,15 @@ describe('NODE_DEBUG and DEBUG environment variables', () => { expect(logdown._prefixRegExps).toHaveLength(0) }) - envVars.forEach((envVar) => { + envVars.forEach(envVar => { it('`' + envVar + '=foo` enables only instances with “foo” prefix', () => { process.env[envVar] = 'foo' logdown._setPrefixRegExps() - var foo = logdown('foo') - var bar = logdown('bar') - var quz = logdown('quz') - var baz = logdown('baz') + const foo = logdown('foo') + const bar = logdown('bar') + const quz = logdown('quz') + const baz = logdown('baz') bar.log('lorem') expect(console.log).not.toHaveBeenCalled() @@ -48,48 +48,58 @@ describe('NODE_DEBUG and DEBUG environment variables', () => { expect(console.log).toHaveBeenCalled() }) - it('`' + envVar + '=*foo` enables only instances with names ending with “foo”', () => { - process.env[envVar] = '*foo' - logdown._setPrefixRegExps() - - var foo = logdown('foo') - var bar = logdown('bar') - var foobar = logdown('foobar') - var barfoo = logdown('barfoo') - - bar.log('lorem') - foobar.log('lorem') - expect(console.log).not.toHaveBeenCalled() - foo.log('lorem') - barfoo.log('lorem') - expect(console.log).toHaveBeenCalledTimes(2) - }) - - it('`' + envVar + '=foo*` enables only instances with names beginning with “foo”', () => { - process.env[envVar] = 'foo*' - logdown._setPrefixRegExps() - - var foo = logdown('foo') - var bar = logdown('bar') - var foobar = logdown('foobar') - var barfoo = logdown('barfoo') - - bar.log('lorem') - barfoo.log('lorem') - expect(console.log).not.toHaveBeenCalled() - foobar.log('lorem') - foo.log('lorem') - expect(console.log).toHaveBeenCalledTimes(2) - }) + it( + '`' + + envVar + + '=*foo` enables only instances with names ending with “foo”', + () => { + process.env[envVar] = '*foo' + logdown._setPrefixRegExps() + + const foo = logdown('foo') + const bar = logdown('bar') + const foobar = logdown('foobar') + const barfoo = logdown('barfoo') + + bar.log('lorem') + foobar.log('lorem') + expect(console.log).not.toHaveBeenCalled() + foo.log('lorem') + barfoo.log('lorem') + expect(console.log).toHaveBeenCalledTimes(2) + }, + ) + + it( + '`' + + envVar + + '=foo*` enables only instances with names beginning with “foo”', + () => { + process.env[envVar] = 'foo*' + logdown._setPrefixRegExps() + + const foo = logdown('foo') + const bar = logdown('bar') + const foobar = logdown('foobar') + const barfoo = logdown('barfoo') + + bar.log('lorem') + barfoo.log('lorem') + expect(console.log).not.toHaveBeenCalled() + foobar.log('lorem') + foo.log('lorem') + expect(console.log).toHaveBeenCalledTimes(2) + }, + ) it('`' + envVar + '=-*` disables all instances', () => { process.env[envVar] = '-*' logdown._setPrefixRegExps() - var foo = logdown('foo') - var bar = logdown('bar') - var foobar = logdown('foobar') - var barfoo = logdown('barfoo') + const foo = logdown('foo') + const bar = logdown('bar') + const foobar = logdown('foobar') + const barfoo = logdown('barfoo') foobar.log('lorem') foo.log('lorem') @@ -98,65 +108,80 @@ describe('NODE_DEBUG and DEBUG environment variables', () => { expect(console.log).not.toHaveBeenCalled() }) - it('`' + envVar + '=*,-foo` enables all but only instances with “foo” prefix', () => { - process.env[envVar] = '*,-foo' - logdown._setPrefixRegExps() - - var foo = logdown('foo') - var bar = logdown('bar') - var quz = logdown('quz') - var baz = logdown('baz') - - foo.log('lorem') - expect(console.log).not.toHaveBeenCalled() - bar.log('lorem') - quz.log('lorem') - baz.log('lorem') - expect(console.log).toHaveBeenCalledTimes(3) - }) - - it('`' + envVar + '=*,-*foo` enables all but instances with names ending with “foo”', () => { - process.env[envVar] = '*,-*foo' - logdown._setPrefixRegExps() - - var foo = logdown('foo') - var bar = logdown('bar') - var foobar = logdown('foobar') - var barfoo = logdown('barfoo') - - foo.log('lorem') - barfoo.log('lorem') - expect(console.log).not.toHaveBeenCalled() - bar.log('lorem') - foobar.log('lorem') - expect(console.log).toHaveBeenCalledTimes(2) - }) - - it('`' + envVar + '=*,-foo*` enables all but instances with names beginning with “foo”', () => { - process.env[envVar] = '*,-foo*' - logdown._setPrefixRegExps() - - var foo = logdown('foo') - var bar = logdown('bar') - var foobar = logdown('foobar') - var barfoo = logdown('barfoo') - - foobar.log('lorem') - foo.log('lorem') - expect(console.log).not.toHaveBeenCalled() - bar.log('lorem') - barfoo.log('lorem') - expect(console.log).toHaveBeenCalledTimes(2) - }) + it( + '`' + + envVar + + '=*,-foo` enables all but only instances with “foo” prefix', + () => { + process.env[envVar] = '*,-foo' + logdown._setPrefixRegExps() + + const foo = logdown('foo') + const bar = logdown('bar') + const quz = logdown('quz') + const baz = logdown('baz') + + foo.log('lorem') + expect(console.log).not.toHaveBeenCalled() + bar.log('lorem') + quz.log('lorem') + baz.log('lorem') + expect(console.log).toHaveBeenCalledTimes(3) + }, + ) + + it( + '`' + + envVar + + '=*,-*foo` enables all but instances with names ending with “foo”', + () => { + process.env[envVar] = '*,-*foo' + logdown._setPrefixRegExps() + + const foo = logdown('foo') + const bar = logdown('bar') + const foobar = logdown('foobar') + const barfoo = logdown('barfoo') + + foo.log('lorem') + barfoo.log('lorem') + expect(console.log).not.toHaveBeenCalled() + bar.log('lorem') + foobar.log('lorem') + expect(console.log).toHaveBeenCalledTimes(2) + }, + ) + + it( + '`' + + envVar + + '=*,-foo*` enables all but instances with names beginning with “foo”', + () => { + process.env[envVar] = '*,-foo*' + logdown._setPrefixRegExps() + + const foo = logdown('foo') + const bar = logdown('bar') + const foobar = logdown('foobar') + const barfoo = logdown('barfoo') + + foobar.log('lorem') + foo.log('lorem') + expect(console.log).not.toHaveBeenCalled() + bar.log('lorem') + barfoo.log('lorem') + expect(console.log).toHaveBeenCalledTimes(2) + }, + ) it('`' + envVar + '` accepts N arguments', () => { process.env[envVar] = 'foo,barfoo' logdown._setPrefixRegExps() - var foo = logdown('foo') - var bar = logdown('bar') - var foobar = logdown('foobar') - var barfoo = logdown('barfoo') + const foo = logdown('foo') + const bar = logdown('bar') + const foobar = logdown('foobar') + const barfoo = logdown('barfoo') bar.log('lorem') foobar.log('lorem') @@ -170,14 +195,14 @@ describe('NODE_DEBUG and DEBUG environment variables', () => { // If `NODE_DEBUG` and `DEBUG` is declared, we should omit `DEBUG` and only // get the values in `NODE_DEBUG` it('`NODE_DEBUG` has precedence over `DEBUG`', () => { - process.env['NODE_DEBUG'] = 'foo,barfoo' - process.env['DEBUG'] = 'bar,foobar' + process.env.NODE_DEBUG = 'foo,barfoo' + process.env.DEBUG = 'bar,foobar' logdown._setPrefixRegExps() - var foo = logdown('foo') - var bar = logdown('bar') - var foobar = logdown('foobar') - var barfoo = logdown('barfoo') + const foo = logdown('foo') + const bar = logdown('bar') + const foobar = logdown('foobar') + const barfoo = logdown('barfoo') bar.log('lorem') foobar.log('lorem') @@ -186,7 +211,7 @@ describe('NODE_DEBUG and DEBUG environment variables', () => { barfoo.log('lorem') expect(console.log).toHaveBeenCalledTimes(2) - process.env['NODE_DEBUG'] = '' - process.env['DEBUG'] = '' + process.env.NODE_DEBUG = '' + process.env.DEBUG = '' }) }) diff --git a/test/node/logging-methods.test.js b/test/node/logging-methods.test.js index 35b3b67..6bbf62e 100644 --- a/test/node/logging-methods.test.js +++ b/test/node/logging-methods.test.js @@ -11,8 +11,9 @@ if (!console.debug) { console.debug = console.log.bind(console) } const origDebug = process.env.NODE_DEBUG -const consoleMethods = Object.keys(console) - .filter(method => typeof console[method] === 'function') +const consoleMethods = Object.keys(console).filter( + method => typeof console[method] === 'function', +) consoleMethods.forEach(method => { describe(`logdown.${method}`, () => { @@ -30,7 +31,7 @@ consoleMethods.forEach(method => { }) it('outputs multiple arguments', () => { - const foo = logdown('foo', { markdown: true }) + const foo = logdown('foo', {markdown: true}) foo[method]('one', 'two', 'three') @@ -38,7 +39,7 @@ consoleMethods.forEach(method => { foo._getDecoratedPrefix(method), 'one', 'two', - 'three' + 'three', ) }) @@ -51,56 +52,56 @@ consoleMethods.forEach(method => { foo._getDecoratedPrefix(method), 'one', markdown.parse('*two*').text, - 'three' + 'three', ) }) it('parses markdown if enabled', () => { - const foo = logdown('foo', { markdown: true }) + const foo = logdown('foo', {markdown: true}) foo[method]('lorem *ipsum*') expect(console[method]).toHaveBeenCalledWith( foo._getDecoratedPrefix(method), - markdown.parse('lorem *ipsum*').text + markdown.parse('lorem *ipsum*').text, ) foo[method]('lorem _ipsum_') expect(console[method]).toHaveBeenCalledWith( foo._getDecoratedPrefix(method), - markdown.parse('lorem _ipsum_').text + markdown.parse('lorem _ipsum_').text, ) foo[method]('lorem `ipsum`') expect(console[method]).toHaveBeenCalledWith( foo._getDecoratedPrefix(method), - markdown.parse('lorem `ipsum`').text + markdown.parse('lorem `ipsum`').text, ) }) it('doesnt parse markdown if disabled', () => { - const foo = logdown('foo', { markdown: false }) + const foo = logdown('foo', {markdown: false}) foo[method]('lorem *ipsum*') expect(console[method]).toHaveBeenCalledWith( foo._getDecoratedPrefix(method), - 'lorem *ipsum*' + 'lorem *ipsum*', ) foo[method]('lorem _ipsum_ dolor') expect(console[method]).toHaveBeenCalledWith( foo._getDecoratedPrefix(method), - 'lorem _ipsum_ dolor' + 'lorem _ipsum_ dolor', ) }) // https://github.com/caiogondim/logdown/issues/14 it('prints not-string arguments as is', () => { const foo = logdown('foo') - const obj = { bar: 2, foo: 1 } + const obj = {bar: 2, foo: 1} foo[method](obj) expect(console[method]).toHaveBeenCalledWith( foo._getDecoratedPrefix(method), - obj + obj, ) }) @@ -113,7 +114,7 @@ consoleMethods.forEach(method => { }) it('has a facade for every method on opts.logger', () => { - const foo = logdown('foo', { logger: console }) + const foo = logdown('foo', {logger: console}) consoleMethods.forEach(consoleMethod => { expect(typeof foo[consoleMethod]).toBe('function') diff --git a/test/node/output.test.js b/test/node/output.test.js index 5a2804e..2ad053a 100644 --- a/test/node/output.test.js +++ b/test/node/output.test.js @@ -25,12 +25,12 @@ describe('prefixColor', () => { it('allows to set named color', () => { const logger = { - log: jest.fn() + log: jest.fn(), } const foo = logdown('foo', { logger, - prefixColor: 'yellow' + prefixColor: 'yellow', }) foo.log('hello world') @@ -40,12 +40,12 @@ describe('prefixColor', () => { it('allows to set hex color', () => { const logger = { - log: jest.fn() + log: jest.fn(), } const foo = logdown('foo', { logger, - prefixColor: '#0ff' + prefixColor: '#0ff', }) foo.log('hello world') @@ -57,12 +57,12 @@ describe('prefixColor', () => { isColorSupported.mockReturnValue(false) const logger = { - log: jest.fn() + log: jest.fn(), } const foo = logdown('foo', { logger, - prefixColor: '#0ff' + prefixColor: '#0ff', }) foo.log('hello world') diff --git a/test/node/util.test.js b/test/node/util.test.js index d90260e..4b9fdd3 100644 --- a/test/node/util.test.js +++ b/test/node/util.test.js @@ -29,7 +29,7 @@ it('should not allow color for dumb TERM', () => { it('should not allow outside TTY', () => { process.stdout = { - isTTY: false + isTTY: false, } expect(isColorSupported()).toBe(false) @@ -46,17 +46,11 @@ it('should allow colors for COLORTERM', () => { }) it('should allow colors for linux like terminals', () => { - [ - 'screen', - 'xterm', - 'vt100', - 'color', - 'ansi', - 'cygwin', - 'linux' - ].forEach((term) => { - process.env.TERM = term - - expect(isColorSupported()).toBe(true) - }) + ;['screen', 'xterm', 'vt100', 'color', 'ansi', 'cygwin', 'linux'].forEach( + term => { + process.env.TERM = term + + expect(isColorSupported()).toBe(true) + }, + ) }) diff --git a/webpack.config.js b/webpack.config.js index 65a5a2a..33b65fc 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,11 +1,11 @@ -var path = require('path') +const path = require('path') module.exports = { entry: './src/browser.js', output: { libraryTarget: 'umd', library: 'logdown', - path: path.resolve(__dirname, "dist"), - filename: 'logdown.js' - } + path: path.resolve(__dirname, 'dist'), + filename: 'logdown.js', + }, }