diff --git a/lib/core/Manager.js b/lib/core/Manager.js index 7db44ce..2abf5e0 100644 --- a/lib/core/Manager.js +++ b/lib/core/Manager.js @@ -179,8 +179,97 @@ var Manager = function () { } }, { key: 'getTasksJson', - value: function getTasksJson() { - return _flat2.default.unflatten(this.tasks); + value: function getTasksJson(key) { + return _flat2.default.unflatten(key ? this.tasks[key] : this.tasks); + } + }, { + key: 'getTasksMd', + value: function getTasksMd(key, start, end) { + var _this8 = this; + + var timings = void 0; + if (key) { + timings = this.tasks[key].timings; + } else { + timings = this.unflatTasks(this.tasks); + } + var body = "| Start | End | Hours | Subtotal | Description |\n"; + body += "| ----- | --- | -----:| -------: | ----------- |\n"; + var total = 0; + + timings = start || end ? this.filterDates(timings, start, end) : timings; + timings.forEach(function (k) { + var start = new Date(k.start); + var stop = k.stop ? new Date(k.stop) : new Date(); + total += stop - start; + body += "|" + _this8.dateFormat(start) + "|" + _this8.dateFormat(stop) + "|" + _this8.hourFormat(stop - start) + "|" + _this8.hourFormat(total) + "|" + k.name + "|\n"; + }); + body += "| | | |\n"; + body += "| Total | | " + this.hourFormat(total) + " | | |\n"; + + return body; + } + }, { + key: 'filterDates', + value: function filterDates(timings, start, end) { + var filterStart = function filterStart(timings) { + var filtered = []; + for (var i = 0; i < timings.length; i++) { + if (new Date(start) < new Date(timings[i].start)) { + filtered.push(timings[i]); + } + } + return filtered; + }; + var filterEnd = function filterEnd(timings) { + var filtered = []; + for (var i = 0; i < timings.length; i++) { + if (new Date(end) > new Date(timings[i].start)) { + filtered.push(timings[i]); + } + } + return filtered; + }; + + return start && end ? filterStart(filterEnd(timings)) : start ? filterStart(timings) : filterEnd(timings); + } + }, { + key: 'unflatTasks', + value: function unflatTasks(tasks) { + var keys = Object.keys(tasks); + var unflattened = []; + for (var i1 = 0; i1 < keys.length; i1++) { + for (var i2 = 0; i2 < tasks[keys[i1]].timings.length; i2++) { + var timing = tasks[keys[i1]].timings[i2]; + timing.name = keys[i1]; + timing.description = tasks[keys[i1]].description; + unflattened.push(timing); + } + } + return unflattened; + } + }, { + key: 'dateFormat', + value: function dateFormat(d) { + var date = d.getFullYear() + "/"; + var twoDigits = function twoDigits(n) { + return n < 10 ? "0" + n : n; + }; + date += twoDigits(d.getMonth() + 1) + "/"; + date += twoDigits(d.getDate()) + " "; + date += twoDigits(d.getHours()) + ":"; + date += twoDigits(d.getMinutes()) + ":"; + date += twoDigits(d.getSeconds()); + return date; + } + }, { + key: 'hourFormat', + value: function hourFormat(d) { + var date = new Date(d); + var twoDigits = function twoDigits(n) { + return n < 10 ? "0" + n : n; + }; + return Math.floor(d / 36e5) + ":" + twoDigits(date.getMinutes()) + ":" + twoDigits(date.getSeconds()); } }, { key: 'getConfig', @@ -205,7 +294,7 @@ var Manager = function () { }, { key: 'update', value: function update() { - var _this8 = this; + var _this9 = this; if (!this.config || this.config && this.config['config.version'] !== '2') { console.log('DB: Need to be updated'); @@ -217,8 +306,8 @@ var Manager = function () { }); return newTasks; }).then(function (migratedTasks) { - _this8.cfg.set('tasks', migratedTasks); - _this8.cfg.set('config', Object.assign(_this8.config, { + _this9.cfg.set('tasks', migratedTasks); + _this9.cfg.set('config', Object.assign(_this9.config, { 'config.version': '2' })); @@ -234,6 +323,9 @@ var Manager = function () { var full = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; var tasks = this.search(key); + tasks.sort(function (a, b) { + return a.name > b.name; + }); (0, _output.sumarize)(key, tasks, rate, full, this.config['format.output']); } }]); diff --git a/lib/core/Manager.js.map b/lib/core/Manager.js.map index 82f745f..568df2b 100644 --- a/lib/core/Manager.js.map +++ b/lib/core/Manager.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/core/Manager.js"],"names":["Manager","cfg","repositories","tasks","all","config","key","task","update","get","Object","assign","set","description","t","getTask","start","then","storeTask","console","log","toISOString","catch","pause","unpause","stop","text","setDescription","name","getSeconds","operation","stringTime","makeOperationOverTime","string","keys","forEach","indexOf","push","search","map","k","join","length","prompt","type","message","default","answers","cls","unflatten","element","value","configElements","toString","newCfg","newTasks","migratedTasks","rate","full"],"mappings":"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","file":"Manager.js","sourcesContent":["import flat from 'flat'\nimport moment from 'moment'\nimport inquirer from 'inquirer'\n\nimport Task from './Task'\nimport { recognizeModifierTiming } from './utils'\nimport { STARTED, PAUSED, UNPAUSED, IN_PROGRESS, FINISHED, configElements } from './constants'\nimport { sumarize, outputVertical, cliError, cliSuccess } from './output'\nimport { migrateToV2 } from './dbMigrations'\n\nexport default class Manager {\n\n repositories = ['tasks', 'config']\n\n constructor(cfg) {\n this.cfg = cfg\n this.tasks = cfg.all.tasks\n this.config = (cfg.all.config) ? cfg.all.config : {}\n }\n\n getTask(key) {\n let task = (this.tasks[key]) ? this.tasks[key] : null\n return new Task(task)\n }\n\n storeTask(key, task){\n let update = {}\n update[key] = task.get()\n this.tasks = Object.assign({}, this.tasks, update)\n this.cfg.set('tasks', this.tasks)\n }\n\n startTask(key, description) {\n let t = this.getTask(key)\n t.start(description)\n .then(() => {\n this.storeTask(key, t)\n console.log(\n outputVertical('Task:', key, STARTED, moment().toISOString())\n )\n }, cliError)\n .catch(cliError)\n }\n\n pauseTask(key){\n let t = this.getTask(key)\n t.pause()\n .then(()=>{\n this.storeTask(key, t)\n console.log(\n outputVertical('Task:', key, PAUSED, moment().toISOString())\n )\n }, cliError)\n .catch(cliError)\n }\n\n unpauseTask(key){\n let t = this.getTask(key)\n t.unpause()\n .then(()=>{\n this.storeTask(key, t)\n console.log(\n outputVertical('Task:', key, UNPAUSED, moment().toISOString())\n )\n }, cliError)\n .catch(cliError)\n }\n\n stopTask(key, description) {\n let t = this.getTask(key)\n t.stop(description)\n .then(()=>{\n this.storeTask(key, t)\n console.log(\n outputVertical('Task:', key, FINISHED, moment().toISOString())\n )\n }, cliError)\n .catch(cliError)\n }\n\n addDescription(key, text){\n let t = this.getTask(key)\n t.setDescription(text)\n this.storeTask(key, t)\n }\n\n getTime(name) {\n let t = this.getTask(name)\n return t.getSeconds()\n }\n\n modifyTask(operation, name, stringTime){\n let t = this.getTask(name)\n t.makeOperationOverTime(operation, stringTime)\n .then(()=>{\n this.storeTask(name, t)\n }, cliError)\n .catch(cliError)\n }\n\n search(string) {\n let keys = Object.keys(this.tasks)\n let tasks = []\n keys.forEach((key)=>{\n if (string === 'all' || key.indexOf(string) > -1){\n tasks.push({\n name: key,\n task: new Task(this.tasks[key])\n })\n }\n })\n return tasks\n }\n\n delete(string) {\n let tasks = this.search(string)\n\n console.log(\n tasks.map(k => `${k.name} \\n`).join('')\n )\n\n if (tasks.length === 0) {\n cliSuccess('No tasks found to delete.')\n return\n }\n\n inquirer.prompt([{\n type: 'confirm',\n name: 'cls',\n message: `Are you sure you want to delete this tasks?`,\n default: false\n }]).then((answers) => {\n if (answers.cls){\n tasks.forEach(k => {\n delete this.tasks[k.name]\n this.cfg.set('tasks', this.tasks)\n })\n cliSuccess('Tasks deleted.')\n }\n })\n .catch(cliError)\n }\n\n getTasksJson() {\n return flat.unflatten(this.tasks)\n }\n\n getConfig(){\n return this.config\n }\n\n configure(element, value){\n\n if (configElements.indexOf(element) < 0){\n return cliError(`Config key (${element}) not allowed, allowed keys: ${this.configElements.toString()} `)\n }\n\n let newCfg = {\n [element]: value\n }\n\n this.config = Object.assign({}, this.config, newCfg)\n this.cfg.set('config', this.config)\n\n return this.config\n }\n\n update() {\n if (!this.config || (this.config && this.config['config.version'] !== '2') ){\n console.log('DB: Need to be updated')\n\n migrateToV2(this.tasks)\n .then(tasks => {\n let newTasks = {}\n tasks.forEach(t => newTasks[t.key] = t.task)\n return newTasks\n })\n .then(migratedTasks => {\n this.cfg.set('tasks', migratedTasks)\n this.cfg.set('config', Object.assign(this.config, {\n 'config.version': '2'\n }))\n\n cliSuccess('Configuration migrated to version 2.')\n }, cliError)\n .catch(cliError)\n } else {\n cliSuccess('No need to update the DB.')\n }\n }\n\n sumarize(key, rate, full=true){\n let tasks = this.search(key)\n sumarize(key, tasks, rate, full, this.config['format.output'])\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/core/Manager.js"],"names":["Manager","cfg","repositories","tasks","all","config","key","task","update","get","Object","assign","set","description","t","getTask","start","then","storeTask","console","log","toISOString","catch","pause","unpause","stop","text","setDescription","name","getSeconds","operation","stringTime","makeOperationOverTime","string","keys","forEach","indexOf","push","search","map","k","join","length","prompt","type","message","default","answers","cls","unflatten","end","timings","unflatTasks","body","total","filterDates","Date","dateFormat","hourFormat","filterStart","filtered","i","filterEnd","unflattened","i1","i2","timing","d","date","getFullYear","twoDigits","n","getMonth","getDate","getHours","getMinutes","Math","floor","element","value","configElements","toString","newCfg","newTasks","migratedTasks","rate","full","sort","a","b"],"mappings":"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","file":"Manager.js","sourcesContent":["import flat from 'flat'\nimport moment from 'moment'\nimport inquirer from 'inquirer'\n\nimport Task from './Task'\nimport { recognizeModifierTiming } from './utils'\nimport { STARTED, PAUSED, UNPAUSED, IN_PROGRESS, FINISHED, configElements } from './constants'\nimport { sumarize, outputVertical, cliError, cliSuccess } from './output'\nimport { migrateToV2 } from './dbMigrations'\n\nexport default class Manager {\n\n repositories = ['tasks', 'config']\n\n constructor(cfg) {\n this.cfg = cfg\n this.tasks = cfg.all.tasks\n this.config = (cfg.all.config) ? cfg.all.config : {}\n }\n\n getTask(key) {\n let task = (this.tasks[key]) ? this.tasks[key] : null\n return new Task(task)\n }\n\n storeTask(key, task){\n let update = {}\n update[key] = task.get()\n this.tasks = Object.assign({}, this.tasks, update)\n this.cfg.set('tasks', this.tasks)\n }\n\n startTask(key, description) {\n let t = this.getTask(key)\n t.start(description)\n .then(() => {\n this.storeTask(key, t)\n console.log(\n outputVertical('Task:', key, STARTED, moment().toISOString())\n )\n }, cliError)\n .catch(cliError)\n }\n\n pauseTask(key){\n let t = this.getTask(key)\n t.pause()\n .then(()=>{\n this.storeTask(key, t)\n console.log(\n outputVertical('Task:', key, PAUSED, moment().toISOString())\n )\n }, cliError)\n .catch(cliError)\n }\n\n unpauseTask(key){\n let t = this.getTask(key)\n t.unpause()\n .then(()=>{\n this.storeTask(key, t)\n console.log(\n outputVertical('Task:', key, UNPAUSED, moment().toISOString())\n )\n }, cliError)\n .catch(cliError)\n }\n\n stopTask(key, description) {\n let t = this.getTask(key)\n t.stop(description)\n .then(()=>{\n this.storeTask(key, t)\n console.log(\n outputVertical('Task:', key, FINISHED, moment().toISOString())\n )\n }, cliError)\n .catch(cliError)\n }\n\n addDescription(key, text){\n let t = this.getTask(key)\n t.setDescription(text)\n this.storeTask(key, t)\n }\n\n getTime(name) {\n let t = this.getTask(name)\n return t.getSeconds()\n }\n\n modifyTask(operation, name, stringTime){\n let t = this.getTask(name)\n t.makeOperationOverTime(operation, stringTime)\n .then(()=>{\n this.storeTask(name, t)\n }, cliError)\n .catch(cliError)\n }\n\n search(string) {\n let keys = Object.keys(this.tasks)\n let tasks = []\n keys.forEach((key)=>{\n if (string === 'all' || key.indexOf(string) > -1){\n tasks.push({\n name: key,\n task: new Task(this.tasks[key])\n })\n }\n })\n return tasks\n }\n\n delete(string) {\n let tasks = this.search(string)\n\n console.log(\n tasks.map(k => `${k.name} \\n`).join('')\n )\n\n if (tasks.length === 0) {\n cliSuccess('No tasks found to delete.')\n return\n }\n\n inquirer.prompt([{\n type: 'confirm',\n name: 'cls',\n message: `Are you sure you want to delete this tasks?`,\n default: false\n }]).then((answers) => {\n if (answers.cls){\n tasks.forEach(k => {\n delete this.tasks[k.name]\n this.cfg.set('tasks', this.tasks)\n })\n cliSuccess('Tasks deleted.')\n }\n })\n .catch(cliError)\n }\n\n getTasksJson(key) {\n return flat.unflatten(key ? this.tasks[key]: this.tasks)\n }\n\n\tgetTasksMd(key, start, end) {\n\t\tlet timings\n\t\tif(key){\n\t\t\ttimings = this.tasks[key].timings\n\t\t}else{\n\t\t\ttimings = this.unflatTasks(this.tasks)\n\t\t}\n\t\tlet body = \t\"| Start | End | Hours | Subtotal | Description |\\n\"\n\t\tbody += \t\"| ----- | --- | -----:| -------: | ----------- |\\n\"\n\t\tlet total = 0;\n\n\t\ttimings = start || end ? this.filterDates(timings, start, end) : timings\n\t\ttimings.forEach( k => {\n\t\t\tlet start = new Date(k.start)\n\t\t\tlet stop = k.stop ? new Date(k.stop) : new Date()\n\t\t\ttotal += stop - start\n\t\t\tbody += \"|\" + this.dateFormat(start)+ \"|\" + this.dateFormat(stop)+ \"|\"+ this.hourFormat(stop - start)+ \"|\"+ this.hourFormat(total)+ \"|\" + k.name+ \"|\\n\"\n\t\t})\n\t\tbody += \t\"| | | |\\n\"\n\t\tbody += \t\"| Total | | \" + this.hourFormat(total)+ \" | | |\\n\"\n\n return body\n }\n\n\tfilterDates(timings, start, end){\n\t\tlet filterStart = function(timings){\n\t\t\tlet filtered = []\n\t\t\tfor(let i = 0; i < timings.length; i++){\n\t\t\t\tif(new Date(start) < new Date(timings[i].start)){\n\t\t\t\t\tfiltered.push(timings[i])\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn filtered\n\t\t}\n\t\tlet filterEnd = function(timings){\n\t\t\tlet filtered = []\n\t\t\tfor(let i = 0; i < timings.length; i++){\n\t\t\t\tif(new Date(end) > new Date(timings[i].start)){\n\t\t\t\t\tfiltered.push(timings[i])\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn filtered\n\t\t}\n\n\t\treturn start && end ? filterStart(filterEnd(timings)) : (start ? filterStart(timings) : filterEnd(timings))\n\t}\n\tunflatTasks(tasks){\n\t\tlet keys = Object.keys(tasks)\n\t\tlet unflattened = []\n\t\tfor(let i1 = 0; i1 < keys.length; i1++){\n\t\t\tfor(let i2 = 0; i2 < tasks[keys[i1]].timings.length; i2++){\n\t\t\t\tlet timing = tasks[keys[i1]].timings[i2]\n\t\t\t\ttiming.name = keys[i1]\n\t\t\t\ttiming.description = tasks[keys[i1]].description\n\t\t\t\tunflattened.push(timing)\n\t\t\t}\n\t\t}\n\t\treturn unflattened\n\t}\n\n\tdateFormat(d){\n\t\tlet date = d.getFullYear() + \"/\"\n\t\tlet twoDigits = n => n < 10 ? \"0\" + n : n\n\t\tdate += twoDigits(d.getMonth()+1) + \"/\"\n\t\tdate += twoDigits(d.getDate()) + \" \"\n\t\tdate += twoDigits(d.getHours()) + \":\"\n\t\tdate += twoDigits(d.getMinutes()) + \":\"\n\t\tdate += twoDigits(d.getSeconds())\n\t\treturn date\n\t}\n\n\thourFormat(d){\n\t\tlet date = new Date(d)\n\t\tlet twoDigits = n => n < 10 ? \"0\" + n : n\n\t\treturn Math.floor(d / 36e5) + \":\" + twoDigits(date.getMinutes()) + \":\" + twoDigits(date.getSeconds())\n\t}\n\n getConfig(){\n return this.config\n }\n\n configure(element, value){\n\n if (configElements.indexOf(element) < 0){\n return cliError(`Config key (${element}) not allowed, allowed keys: ${this.configElements.toString()} `)\n }\n\n let newCfg = {\n [element]: value\n }\n\n this.config = Object.assign({}, this.config, newCfg)\n this.cfg.set('config', this.config)\n\n return this.config\n }\n\n update() {\n if (!this.config || (this.config && this.config['config.version'] !== '2') ){\n console.log('DB: Need to be updated')\n\n migrateToV2(this.tasks)\n .then(tasks => {\n let newTasks = {}\n tasks.forEach(t => newTasks[t.key] = t.task)\n return newTasks\n })\n .then(migratedTasks => {\n this.cfg.set('tasks', migratedTasks)\n this.cfg.set('config', Object.assign(this.config, {\n 'config.version': '2'\n }))\n\n cliSuccess('Configuration migrated to version 2.')\n }, cliError)\n .catch(cliError)\n } else {\n cliSuccess('No need to update the DB.')\n }\n }\n\n sumarize(key, rate, full=true){\n let tasks = this.search(key)\n tasks.sort((a,b) => { return a.name > b.name })\n sumarize(key, tasks, rate, full, this.config['format.output'])\n }\n}\n"]} \ No newline at end of file diff --git a/lib/core/Task.js b/lib/core/Task.js index 1068196..65f178b 100644 --- a/lib/core/Task.js +++ b/lib/core/Task.js @@ -219,7 +219,7 @@ var Task = function () { }, { key: 'getStartDate', value: function getStartDate() { - if (this.task.timings) { + if (this.task.timings && this.task.timings[0]) { return this.task.timings[0].start; } else { return this.task.start; diff --git a/lib/core/Task.js.map b/lib/core/Task.js.map index 4f83a0b..d6350fc 100644 --- a/lib/core/Task.js.map +++ b/lib/core/Task.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/core/Task.js"],"names":["Task","task","description","timings","t","stop","diff","start","time","operation","timing","length","newStop","value","momentKey","isBefore","Promise","resolve","reject","started","error","push","toDate","setDescription","setStatus","log","toISOString","text","status","stringTime","parsed","map","_modifyTiming","err","console","duration","forEach","_calcTime"],"mappings":"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","file":"Task.js","sourcesContent":["import moment from 'moment'\n\nimport { STARTED, PAUSED, IN_PROGRESS, FINISHED } from './constants'\nimport { recognizeModifierTiming } from './utils'\nimport { cliError } from './output'\n\n\nexport default class Task {\n constructor(task){\n this.task = (task) ? task : {\n description: '',\n timings: []\n }\n }\n\n _calcTime(t){\n if (t.stop) {\n return moment(t.stop).diff(moment(t.start), 'seconds')\n } else {\n return moment().diff(moment(t.start), 'seconds')\n }\n }\n\n _modifyTiming(time, operation){\n let timing = this.task.timings[this.task.timings.length - 1]\n if (!timing){\n throw (`This task is not started, start it.`)\n }\n\n let newStop = moment(timing.stop)\n newStop = newStop[operation](time.value, time.momentKey)\n\n if (operation === 'subtract' && newStop.isBefore(timing.start)){\n throw('You cant subtract more time')\n return\n }\n\n this.task.timings[this.task.timings.length - 1].stop = newStop\n }\n\n start(description){\n return new Promise((resolve, reject)=>{\n let started = false\n\n let timing = this.task.timings[this.task.timings.length - 1]\n\n if (timing && timing.start && !timing.stop) {\n reject(this.error(`This task already started.`))\n }\n\n this.task.timings.push({\n start: moment().toDate()\n })\n\n this.setDescription(description)\n this.setStatus(IN_PROGRESS)\n this.log('start')\n resolve()\n })\n }\n\n pause(){\n return new Promise((resolve, reject)=>{\n let timing = this.task.timings[this.task.timings.length - 1]\n\n if (!timing){\n reject(this.error(`This task is not started, start it.`))\n }\n\n if (timing && timing.start && timing.stop) {\n reject(this.error(`This task are ended/paused, unpaused it.`))\n }\n\n this.task.timings[this.task.timings.length - 1].stop = moment().toDate()\n this.setStatus(PAUSED)\n this.log('pause')\n resolve()\n })\n }\n\n unpause(){\n return new Promise((resolve, reject)=>{\n let timing = this.task.timings[this.task.timings.length - 1]\n if (!timing){\n reject(this.error(`This task is not started, start it`))\n }\n\n if (timing && timing.start && !timing.stop) {\n reject(this.error(`This task is started, pause/stop first`))\n }\n\n this.task.timings.push({\n start: moment().toDate()\n })\n this.setStatus(IN_PROGRESS)\n this.log('unpause')\n resolve()\n })\n }\n\n stop (description){\n return new Promise((resolve, reject)=>{\n let timing = this.task.timings[this.task.timings.length - 1]\n if (!timing || timing && !timing.start){\n reject(this.error(`This task is not started, start it`))\n }\n\n if (timing.start && timing.stop) {\n reject(this.error(`This task already ended, start/unpause it.`))\n }\n\n this.task.timings[this.task.timings.length - 1].stop = moment().toDate()\n this.setDescription(description)\n this.setStatus(FINISHED)\n this.log('stop')\n resolve()\n })\n }\n\n log(operation){\n if (!this.task.log){\n this.task.log = []\n }\n\n this.task.log.push(`${operation}#${moment().toISOString()}`)\n }\n\n description(){\n return this.task.description\n }\n\n setDescription(text){\n this.task.description = (text) ? text : (this.task.description) ? this.task.description : ''\n }\n\n setStatus(status){\n this.task.status = status\n }\n\n makeOperationOverTime(operation, stringTime) {\n return new Promise((resolve, reject) => {\n let parsed = recognizeModifierTiming(stringTime)\n\n try {\n parsed.map((t)=>{\n this._modifyTiming(t, operation)\n })\n } catch(err){\n console.error(err)\n reject(this.error(`Error trying to ${operation} time to task`))\n }\n this.log(`${operation}:${stringTime}`)\n\n resolve()\n })\n }\n\n get(){\n return this.task\n }\n\n getSeconds(){\n let duration = 0\n\n if (this.task.timings){\n this.task.timings.forEach(timing => {\n duration += this._calcTime(timing)\n })\n } else {\n duration = this._calcTime(this.task)\n }\n\n return duration\n }\n\n getStartDate(){\n if (this.task.timings){\n return this.task.timings[0].start\n } else {\n return this.task.start\n }\n }\n\n error(err){\n return err //+ ` \\n Task: ${JSON.stringify(this.task)}`\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/core/Task.js"],"names":["Task","task","description","timings","t","stop","diff","start","time","operation","timing","length","newStop","value","momentKey","isBefore","Promise","resolve","reject","started","error","push","toDate","setDescription","setStatus","log","toISOString","text","status","stringTime","parsed","map","_modifyTiming","err","console","duration","forEach","_calcTime"],"mappings":"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","file":"Task.js","sourcesContent":["import moment from 'moment'\n\nimport { STARTED, PAUSED, IN_PROGRESS, FINISHED } from './constants'\nimport { recognizeModifierTiming } from './utils'\nimport { cliError } from './output'\n\n\nexport default class Task {\n constructor(task){\n this.task = (task) ? task : {\n description: '',\n timings: []\n }\n }\n\n _calcTime(t){\n if (t.stop) {\n return moment(t.stop).diff(moment(t.start), 'seconds')\n } else {\n return moment().diff(moment(t.start), 'seconds')\n }\n }\n\n _modifyTiming(time, operation){\n let timing = this.task.timings[this.task.timings.length - 1]\n if (!timing){\n throw (`This task is not started, start it.`)\n }\n\n let newStop = moment(timing.stop)\n newStop = newStop[operation](time.value, time.momentKey)\n\n if (operation === 'subtract' && newStop.isBefore(timing.start)){\n throw('You cant subtract more time')\n return\n }\n\n this.task.timings[this.task.timings.length - 1].stop = newStop\n }\n\n start(description){\n return new Promise((resolve, reject)=>{\n let started = false\n\n let timing = this.task.timings[this.task.timings.length - 1]\n\n if (timing && timing.start && !timing.stop) {\n reject(this.error(`This task already started.`))\n }\n\n this.task.timings.push({\n start: moment().toDate()\n })\n\n this.setDescription(description)\n this.setStatus(IN_PROGRESS)\n this.log('start')\n resolve()\n })\n }\n\n pause(){\n return new Promise((resolve, reject)=>{\n let timing = this.task.timings[this.task.timings.length - 1]\n\n if (!timing){\n reject(this.error(`This task is not started, start it.`))\n }\n\n if (timing && timing.start && timing.stop) {\n reject(this.error(`This task are ended/paused, unpaused it.`))\n }\n\n this.task.timings[this.task.timings.length - 1].stop = moment().toDate()\n this.setStatus(PAUSED)\n this.log('pause')\n resolve()\n })\n }\n\n unpause(){\n return new Promise((resolve, reject)=>{\n let timing = this.task.timings[this.task.timings.length - 1]\n if (!timing){\n reject(this.error(`This task is not started, start it`))\n }\n\n if (timing && timing.start && !timing.stop) {\n reject(this.error(`This task is started, pause/stop first`))\n }\n\n this.task.timings.push({\n start: moment().toDate()\n })\n this.setStatus(IN_PROGRESS)\n this.log('unpause')\n resolve()\n })\n }\n\n stop (description){\n return new Promise((resolve, reject)=>{\n let timing = this.task.timings[this.task.timings.length - 1]\n if (!timing || timing && !timing.start){\n reject(this.error(`This task is not started, start it`))\n }\n\n if (timing.start && timing.stop) {\n reject(this.error(`This task already ended, start/unpause it.`))\n }\n\n this.task.timings[this.task.timings.length - 1].stop = moment().toDate()\n this.setDescription(description)\n this.setStatus(FINISHED)\n this.log('stop')\n resolve()\n })\n }\n\n log(operation){\n if (!this.task.log){\n this.task.log = []\n }\n\n this.task.log.push(`${operation}#${moment().toISOString()}`)\n }\n\n description(){\n return this.task.description\n }\n\n setDescription(text){\n this.task.description = (text) ? text : (this.task.description) ? this.task.description : ''\n }\n\n setStatus(status){\n this.task.status = status\n }\n\n makeOperationOverTime(operation, stringTime) {\n return new Promise((resolve, reject) => {\n let parsed = recognizeModifierTiming(stringTime)\n\n try {\n parsed.map((t)=>{\n this._modifyTiming(t, operation)\n })\n } catch(err){\n console.error(err)\n reject(this.error(`Error trying to ${operation} time to task`))\n }\n this.log(`${operation}:${stringTime}`)\n\n resolve()\n })\n }\n\n get(){\n return this.task\n }\n\n getSeconds(){\n let duration = 0\n\n if (this.task.timings){\n this.task.timings.forEach(timing => {\n duration += this._calcTime(timing)\n })\n } else {\n duration = this._calcTime(this.task)\n }\n\n return duration\n }\n\n getStartDate(){\n if (this.task.timings && this.task.timings[0]){\n return this.task.timings[0].start\n } else {\n return this.task.start\n }\n }\n\n error(err){\n return err //+ ` \\n Task: ${JSON.stringify(this.task)}`\n }\n}\n"]} \ No newline at end of file diff --git a/lib/core/output.js b/lib/core/output.js index a586d80..81e0ee7 100644 --- a/lib/core/output.js +++ b/lib/core/output.js @@ -25,8 +25,8 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope var sumarize = exports.sumarize = function sumarize(search, tasks, rate, full, format) { var table = new _cliTable2.default({ - head: ['Duration', 'Dates', 'Task'], - colAligns: ['right', 'center', 'left'], + head: ['Name', 'Description', 'Dates', 'Duration'], + colAligns: ['left', 'center', 'center', 'left'], chars: { 'top': '═', 'top-mid': '╤', @@ -47,14 +47,31 @@ var sumarize = exports.sumarize = function sumarize(search, tasks, rate, full, f var head = 'Search: ' + search + ' \n'; tasks.forEach(function (task, index) { + var description = task.task.description() && task.task.description() !== '' ? task.task.description() : '-'; + var name = task.name; task = task.task; var duration = task.getSeconds(); total += duration; - var description = task.description() && task.description() !== '' ? task.description() : task.name; - - table.push([description, (0, _moment2.default)(task.getStartDate()).format(format), (0, _utils.humanParseDiff)(duration)]); + // Avoid excesive width for proper console fit + var splitWidth = function splitWidth(str, len) { + var arr = []; + while (str != '') { + if (str.length > len) { + arr.push(str.substring(0, len)); + str = str.substring(len); + } else { + arr.push(str); + break; + } + } + return arr.join('\n'); + }; + description = splitWidth(description, 51); + name = splitWidth(name, 40); + + table.push([name, description, (0, _moment2.default)(task.getStartDate()).format(format), (0, _utils.humanParseDiff)(duration)]); }); if (full) { @@ -63,7 +80,7 @@ var sumarize = exports.sumarize = function sumarize(search, tasks, rate, full, f if (rate) { table.push([{ rowSpan: 2, content: _colors2.default.red('Search:') + ' "' + search + '"', vAlign: 'center' }, _colors2.default.red('Total time'), (0, _utils.humanParseDiff)(total)], [_colors2.default.red('Rate'), (0, _utils.calcRate)(rate, total)]); } else { - table.push([{ rowSpan: 2, content: _colors2.default.red('Search:') + ' "' + search + '"', vAlign: 'center' }, { rowSpan: 2, content: _colors2.default.red('Total time'), vAlign: 'center' }, { rowSpan: 2, content: (0, _utils.humanParseDiff)(total), vAlign: 'center' }], []); + table.push([{ rowSpan: 2, content: _colors2.default.red('Search:') + ' "' + search + '"', vAlign: 'center' }, { rowSpan: 2, content: '', vAlign: 'center' }, { rowSpan: 2, content: _colors2.default.red('Total time'), vAlign: 'center' }, { rowSpan: 2, content: (0, _utils.humanParseDiff)(total), vAlign: 'center' }], []); } } diff --git a/lib/core/output.js.map b/lib/core/output.js.map index 732b4e0..03ce1d5 100644 --- a/lib/core/output.js.map +++ b/lib/core/output.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/core/output.js"],"names":["sumarize","search","tasks","rate","full","format","table","head","colAligns","chars","style","total","forEach","task","index","duration","getSeconds","description","name","push","getStartDate","rowSpan","content","red","vAlign","console","log","toString","outputConfig","config","Object","keys","map","e","outputVertical","args","table2","key","splice","cliError","err","error","cliSuccess","green"],"mappings":";;;;;;;AAAA;;;;AACA;;;;AACA;;;;AAEA;;;;;;AAEO,IAAMA,8BAAW,SAAXA,QAAW,CAASC,MAAT,EAAiBC,KAAjB,EAAwBC,IAAxB,EAA8BC,IAA9B,EAAoCC,MAApC,EAA4C;AAChE,QAAIC,QAAQ,uBAAU;AAClBC,cAAM,CAAC,UAAD,EAAa,OAAb,EAAsB,MAAtB,CADY;AAElBC,mBAAW,CAAC,OAAD,EAAU,QAAV,EAAoB,MAApB,CAFO;AAGlBC,eAAO;AACH,mBAAO,GADJ;AAED,uBAAW,GAFV;AAGD,wBAAY,GAHX;AAID,yBAAa,GAJZ;AAKD,sBAAU,GALT;AAMD,0BAAc,GANb;AAOD,2BAAe,GAPd;AAQD,4BAAgB,GARf;AASD,oBAAQ,GATP;AAUD,wBAAY,GAVX;AAWD,qBAAS,GAXR;AAYD,yBAAa;AAZZ,SAHW;AAiBlBC,eAAO,EAAEH,MAAM,CAAC,OAAD,CAAR;AAjBW,KAAV,CAAZ;AAmBA,QAAII,QAAQ,CAAZ;AACA,QAAIJ,oBAAiBN,MAAjB,QAAJ;;AAEAC,UAAMU,OAAN,CAAc,UAACC,IAAD,EAAOC,KAAP,EAAiB;AAC3BD,eAAOA,KAAKA,IAAZ;;AAEA,YAAIE,WAAWF,KAAKG,UAAL,EAAf;AACAL,iBAASI,QAAT;;AAEA,YAAIE,cAAeJ,KAAKI,WAAL,MAAsBJ,KAAKI,WAAL,OAAuB,EAA9C,GACZJ,KAAKI,WAAL,EADY,GAEZJ,KAAKK,IAFX;;AAIAZ,cAAMa,IAAN,CAAW,CAACF,WAAD,EAAc,sBAAOJ,KAAKO,YAAL,EAAP,EAA4Bf,MAA5B,CAAmCA,MAAnC,CAAd,EAA0D,2BAAeU,QAAf,CAA1D,CAAX;AACH,KAXD;;AAaA,QAAIX,IAAJ,EAAS;AACLE,cAAMa,IAAN,CAAW,EAAX;;AAEA,YAAIhB,IAAJ,EAAS;AACLG,kBAAMa,IAAN,CACI,CAAC,EAAEE,SAAQ,CAAV,EAAaC,SAAY,iBAAOC,GAAP,CAAW,SAAX,CAAZ,UAAsCtB,MAAtC,MAAb,EAA8DuB,QAAO,QAArE,EAAD,EAAiF,iBAAOD,GAAP,CAAW,YAAX,CAAjF,EAA2G,2BAAeZ,KAAf,CAA3G,CADJ,EAEI,CAAE,iBAAOY,GAAP,CAAW,MAAX,CAAF,EAAsB,qBAASpB,IAAT,EAAeQ,KAAf,CAAtB,CAFJ;AAIH,SALD,MAKO;AACHL,kBAAMa,IAAN,CACI,CACI,EAAEE,SAAQ,CAAV,EAAaC,SAAY,iBAAOC,GAAP,CAAW,SAAX,CAAZ,UAAsCtB,MAAtC,MAAb,EAA8DuB,QAAO,QAArE,EADJ,EAEI,EAAEH,SAAQ,CAAV,EAAaC,SAAS,iBAAOC,GAAP,CAAW,YAAX,CAAtB,EAAgDC,QAAO,QAAvD,EAFJ,EAGI,EAAEH,SAAQ,CAAV,EAAaC,SAAS,2BAAeX,KAAf,CAAtB,EAA6Ca,QAAO,QAApD,EAHJ,CADJ,EAMI,EANJ;AAQH;AACJ;;AAEDC,YAAQC,GAAR,CAAYpB,MAAMqB,QAAN,EAAZ;AACH,CAzDM;;AA2DA,IAAMC,sCAAe,SAAfA,YAAe,CAAUC,MAAV,EAAiB;AACzC,QAAIvB,QAAQ,uBAAU;AAClBC,cAAM,CAAC,KAAD,EAAQ,OAAR,CADY;AAElBE,eAAO;AACH,mBAAO,GADJ;AAED,uBAAW,GAFV;AAGD,wBAAY,GAHX;AAID,yBAAa,GAJZ;AAKD,sBAAU,GALT;AAMD,0BAAc,GANb;AAOD,2BAAe,GAPd;AAQD,4BAAgB,GARf;AASD,oBAAQ,GATP;AAUD,wBAAY,GAVX;AAWD,qBAAS,GAXR;AAYD,yBAAa;AAZZ,SAFW;AAgBlBD,mBAAW,CAAC,QAAD,EAAW,QAAX,CAhBO;AAiBlBE,eAAO,EAAEH,MAAM,CAAC,OAAD,CAAR;AAjBW,KAAV,CAAZ;;AAoBAuB,WAAOC,IAAP,CAAYF,MAAZ,EAAoBG,GAApB,CAAwB;AAAA,eAAK1B,MAAMa,IAAN,CAAW,CAACc,CAAD,EAAIJ,OAAOI,CAAP,CAAJ,CAAX,CAAL;AAAA,KAAxB;;AAEAR,YAAQC,GAAR,CAAYpB,MAAMqB,QAAN,EAAZ;AACH,CAxBM;;AA0BA,IAAMO,0CAAiB,SAAjBA,cAAiB,GAAkB;AAAA,sCAALC,IAAK;AAALA,YAAK;AAAA;;AAC5C,QAAIC,SAAS,wBAAb;AACI,QAAIC,MAAMF,KAAKG,MAAL,CAAY,CAAZ,EAAe,CAAf,CAAV;AACAF,WAAOjB,IAAP,qBACOkB,GADP,EACaF,IADb;;AAIA,WAAOC,OAAOT,QAAP,EAAP;AACP,CARM;;AAUA,IAAMY,8BAAW,SAAXA,QAAW,CAASC,GAAT,EAAc;AAClCf,YAAQgB,KAAR,CAAc,iBAAOlB,GAAP,aAAqBiB,GAArB,CAAd;AACH,CAFM;;AAIA,IAAME,kCAAa,SAAbA,UAAa,CAASF,GAAT,EAAc;AACpCf,YAAQC,GAAR,CAAY,iBAAOiB,KAAP,CAAaH,GAAb,CAAZ;AACH,CAFM","file":"output.js","sourcesContent":["import moment from 'moment'\nimport Table from 'cli-table2'\nimport colors from 'colors'\n\nimport { humanParseDiff, calcRate } from './utils'\n\nexport const sumarize = function(search, tasks, rate, full, format) {\n let table = new Table({\n head: ['Duration', 'Dates', 'Task'],\n colAligns: ['right', 'center', 'left'],\n chars: {\n 'top': '═'\n , 'top-mid': '╤'\n , 'top-left': '╔'\n , 'top-right': '╗'\n , 'bottom': '═'\n , 'bottom-mid': '╧'\n , 'bottom-left': '╚'\n , 'bottom-right': '╝'\n , 'left': '║'\n , 'left-mid': '╟'\n , 'right': '║'\n , 'right-mid': '╢'\n },\n style: { head: ['green'] }\n });\n let total = 0\n let head= `Search: ${search} \\n`\n\n tasks.forEach((task, index) => {\n task = task.task\n\n let duration = task.getSeconds()\n total += duration\n\n let description = (task.description() && task.description() !== '')\n ? task.description()\n : task.name\n\n table.push([description, moment(task.getStartDate()).format(format), humanParseDiff(duration)])\n })\n\n if (full){\n table.push([])\n\n if (rate){\n table.push(\n [{ rowSpan:2, content: `${colors.red('Search:')} \"${search}\"`, vAlign:'center'}, colors.red('Total time'), humanParseDiff(total)],\n [ colors.red('Rate'), calcRate(rate, total)]\n )\n } else {\n table.push(\n [\n { rowSpan:2, content: `${colors.red('Search:')} \"${search}\"`, vAlign:'center' },\n { rowSpan:2, content: colors.red('Total time'), vAlign:'center' },\n { rowSpan:2, content: humanParseDiff(total), vAlign:'center' }\n ],\n []\n )\n }\n }\n\n console.log(table.toString());\n}\n\nexport const outputConfig = function (config){\n let table = new Table({\n head: ['Key', 'value'],\n chars: {\n 'top': '═'\n , 'top-mid': '╤'\n , 'top-left': '╔'\n , 'top-right': '╗'\n , 'bottom': '═'\n , 'bottom-mid': '╧'\n , 'bottom-left': '╚'\n , 'bottom-right': '╝'\n , 'left': '║'\n , 'left-mid': '╟'\n , 'right': '║'\n , 'right-mid': '╢'\n },\n colAligns: ['center', 'center'],\n style: { head: ['green'] }\n });\n\n Object.keys(config).map(e => table.push([e, config[e]]))\n\n console.log(table.toString());\n}\n\nexport const outputVertical = function (...args){\n let table2 = new Table()\n let key = args.splice(0, 1)\n table2.push(\n { [key]: args },\n )\n\n return table2.toString()\n}\n\nexport const cliError = function(err) {\n console.error(colors.red(`Error: ${err}`))\n}\n\nexport const cliSuccess = function(err) {\n console.log(colors.green(err))\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/core/output.js"],"names":["sumarize","search","tasks","rate","full","format","table","head","colAligns","chars","style","total","forEach","task","index","description","name","duration","getSeconds","splitWidth","str","len","arr","length","push","substring","join","getStartDate","rowSpan","content","red","vAlign","console","log","toString","outputConfig","config","Object","keys","map","e","outputVertical","args","table2","key","splice","cliError","err","error","cliSuccess","green"],"mappings":"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","file":"output.js","sourcesContent":["import moment from 'moment'\nimport Table from 'cli-table2'\nimport colors from 'colors'\n\nimport { humanParseDiff, calcRate } from './utils'\n\nexport const sumarize = function(search, tasks, rate, full, format) {\n let table = new Table({\n head: ['Name','Description', 'Dates', 'Duration'],\n colAligns: ['left', 'center', 'center', 'left'],\n chars: {\n 'top': '═'\n , 'top-mid': '╤'\n , 'top-left': '╔'\n , 'top-right': '╗'\n , 'bottom': '═'\n , 'bottom-mid': '╧'\n , 'bottom-left': '╚'\n , 'bottom-right': '╝'\n , 'left': '║'\n , 'left-mid': '╟'\n , 'right': '║'\n , 'right-mid': '╢'\n },\n style: { head: ['green'] }\n });\n let total = 0\n let head= `Search: ${search} \\n`\n\n tasks.forEach((task, index) => {\n\t\tlet description = (task.task.description() && task.task.description() !== '')\n\t\t? task.task.description()\n\t\t: '-'\n let name = task.name\n task = task.task\n\n let duration = task.getSeconds()\n total += duration\n\n // Avoid excesive width for proper console fit\n let splitWidth = (str, len) => {\n let arr = []\n while (str != '') {\n if (str.length > len) {\n arr.push(str.substring(0,len))\n str = str.substring(len);\n } else {\n arr.push(str)\n break\n }\n }\n return arr.join('\\n')\n }\n description = splitWidth(description, 51)\n name = splitWidth(name, 40)\n\n table.push([name, description, moment(task.getStartDate()).format(format), humanParseDiff(duration)])\n })\n\n if (full){\n table.push([])\n\n if (rate){\n table.push(\n [{ rowSpan:2, content: `${colors.red('Search:')} \"${search}\"`, vAlign:'center'}, colors.red('Total time'), humanParseDiff(total)],\n [ colors.red('Rate'), calcRate(rate, total)]\n )\n } else {\n table.push(\n [\n { rowSpan:2, content: `${colors.red('Search:')} \"${search}\"`, vAlign:'center' },\n { rowSpan:2, content: '', vAlign:'center' },\n { rowSpan:2, content: colors.red('Total time'), vAlign:'center' },\n { rowSpan:2, content: humanParseDiff(total), vAlign:'center' }\n ],\n []\n )\n }\n }\n\n console.log(table.toString());\n}\n\nexport const outputConfig = function (config){\n let table = new Table({\n head: ['Key', 'value'],\n chars: {\n 'top': '═'\n , 'top-mid': '╤'\n , 'top-left': '╔'\n , 'top-right': '╗'\n , 'bottom': '═'\n , 'bottom-mid': '╧'\n , 'bottom-left': '╚'\n , 'bottom-right': '╝'\n , 'left': '║'\n , 'left-mid': '╟'\n , 'right': '║'\n , 'right-mid': '╢'\n },\n colAligns: ['center', 'center'],\n style: { head: ['green'] }\n });\n\n Object.keys(config).map(e => table.push([e, config[e]]))\n\n console.log(table.toString());\n}\n\nexport const outputVertical = function (...args){\n let table2 = new Table()\n let key = args.splice(0, 1)\n table2.push(\n { [key]: args },\n )\n\n return table2.toString()\n}\n\nexport const cliError = function(err) {\n console.error(colors.red(`Error: ${err}`))\n}\n\nexport const cliSuccess = function(err) {\n console.log(colors.green(err))\n}\n"]} \ No newline at end of file diff --git a/lib/index.js b/lib/index.js index 7093506..6718539 100644 --- a/lib/index.js +++ b/lib/index.js @@ -104,8 +104,17 @@ _commander2.default.command('log ').description('Logs the time of the EXEC = true; }); -_commander2.default.command('export').description('Export the tasks in a JSON').alias('e').action(function (key) { - console.log(JSON.stringify(manager.getTasksJson(), null, 4)); +_commander2.default.command('export [task_string]').description('Export the tasks in json (default) or md format').alias('e').option('-f --format [format]').option('-s --start [start date. Example: "2017/05/28"]').option('-e --end [end date. Example: "2018/05/28"]').action(function (key, options) { + switch (options.format ? options.format.toLowerCase() : undefined) { + case "json":case undefined: + console.log(JSON.stringify(manager.getTasksJson(key, options.start, options.end), null, 4)); + break; + case "markdown":case "md": + console.log(manager.getTasksMd(key, options.start, options.end)); + break; + default: + console.log("Format not supported"); + } EXEC = true; }); diff --git a/lib/index.js.map b/lib/index.js.map index 17aa3c9..137a7b0 100644 --- a/lib/index.js.map +++ b/lib/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/index.js"],"names":["config","name","tasks","pkg","notify","manager","EXEC","version","description","option","command","alias","action","key","Array","isArray","join","startTask","pauseTask","unpauseTask","stopTask","text","addDescription","stringTime","modifyTask","sumarize","search","rate","setInterval","getTime","process","stdout","write","moveCursor","console","log","JSON","stringify","getTasksJson","string","delete","value","configure","getConfig","parse","argv","updateDB","update","outputHelp","exit"],"mappings":"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","file":"index.js","sourcesContent":["import 'babel-polyfill'\n\nimport program from 'commander'\nimport updateNotifier from 'update-notifier'\nimport Configstore from 'configstore'\nimport pkg from '../package.json'\n\nimport Manager from './core/Manager'\nimport { humanParseDiff } from './core/utils'\nimport { outputVertical, cliError, outputConfig } from './core/output'\n\nimport autocomplete from './autocomplete'\n\nconst config = new Configstore(pkg.name, {\n tasks:{},\n config:{\n 'format.output': 'DD/MM'\n }\n})\n\nupdateNotifier({ pkg }).notify()\n\nconst manager = new Manager(config)\nautocomplete(config)\n\n//Exec\nlet EXEC = false\n\nprogram\n .version(pkg.version)\n .description('Tiny time tracker for projects')\n .option('--updateDB', 'Bool to update the db')\n\nprogram\n .command('start [description]')\n .description('Start task with a description.')\n .alias('s')\n .action(function(key, description) {\n description = (description) ? Array.isArray(description) ? description.join(' ') : description : null\n manager.startTask(key, description)\n EXEC = true\n })\n\nprogram\n .command('pause ')\n .description('Pause task')\n .alias('p')\n .action(function(key) {\n manager.pauseTask(key)\n EXEC = true\n })\n\nprogram\n .command('unpause ')\n .description('Unpause task')\n .alias('up')\n .action(function(key) {\n manager.unpauseTask(key)\n EXEC = true\n })\n\n\nprogram\n .command('finish [description]')\n .description('Stop task, you can add a description')\n .alias('f')\n .action(function(key, description) {\n description = (description) ? Array.isArray(description) ? description.join(' ') : description : null\n manager.stopTask(key, description)\n EXEC = true\n })\n\nprogram\n .command('description ')\n .description('Add description to your task.')\n .alias('d')\n .action(function(key, text) {\n text = Array.isArray(text) ? text.join(' ') : text\n manager.addDescription(key, text)\n EXEC = true\n })\n\nprogram\n .command('add ')\n .description('Adds time to a task. Example: \"1h2m3s\"')\n .action(function(key, stringTime) {\n manager.modifyTask('add', key, stringTime)\n manager.sumarize(key, manager.search(key), false)\n EXEC = true\n })\n\nprogram\n .command('subtract ')\n .description('Subtract time to a task. Example: \"1h2m3s\"')\n .alias('sub')\n .action(function(key, stringTime) {\n manager.modifyTask('subtract', key, stringTime)\n manager.sumarize(key, manager.search(key), false)\n EXEC = true\n })\n\nprogram\n .command('report [task_string] [rate]')\n .description('Report time of the tasks, empty for select all tasks. Can pass a rate (1h).')\n .alias('r')\n .action(function(tasks, rate) {\n tasks = (tasks) ? tasks : 'all'\n manager.sumarize(tasks, rate)\n EXEC = true\n })\n\nprogram\n .command('log ')\n .description('Logs the time of the task')\n .alias('l')\n .action(function(key) {\n setInterval(() => {\n let text = outputVertical('Task:', key, humanParseDiff(manager.getTime(key)))\n process.stdout.write(text)\n process.stdout.moveCursor(0,-2)\n }, 1000)\n EXEC = true\n })\n\nprogram\n .command('export')\n .description('Export the tasks in a JSON')\n .alias('e')\n .action(function(key) {\n console.log(JSON.stringify(manager.getTasksJson(), null, 4))\n EXEC = true\n })\n\nprogram\n .command('delete [task_string]')\n .description('Remove tasks from the list. Empty for select all tasks')\n .alias('del')\n .action(function(string) {\n string = (string) ? string : 'all'\n manager.delete(string)\n EXEC = true\n })\n\nprogram\n .command('configure ')\n .description('Configure the value of the config passing a key')\n .action(function(key, value) {\n manager.configure(key, value)\n EXEC = true\n })\n\nprogram\n .command('configuration')\n .description('Output configuration')\n .action(function(string) {\n outputConfig(manager.getConfig())\n EXEC = true\n })\n\nprogram\n .parse(process.argv)\n\n\nif (program.updateDB) {\n manager.update()\n EXEC = true\n}\n\nif (!EXEC) {\n cliError('You must use a valid command.')\n program.outputHelp()\n process.exit(1)\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../src/index.js"],"names":["config","name","tasks","pkg","notify","manager","EXEC","version","description","option","command","alias","action","key","Array","isArray","join","startTask","pauseTask","unpauseTask","stopTask","text","addDescription","stringTime","modifyTask","sumarize","search","rate","setInterval","getTime","process","stdout","write","moveCursor","options","format","toLowerCase","undefined","console","log","JSON","stringify","getTasksJson","start","end","getTasksMd","string","delete","value","configure","getConfig","parse","argv","updateDB","update","outputHelp","exit"],"mappings":"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","file":"index.js","sourcesContent":["import 'babel-polyfill'\n\nimport program from 'commander'\nimport updateNotifier from 'update-notifier'\nimport Configstore from 'configstore'\nimport pkg from '../package.json'\n\nimport Manager from './core/Manager'\nimport { humanParseDiff } from './core/utils'\nimport { outputVertical, cliError, outputConfig } from './core/output'\n\nimport autocomplete from './autocomplete'\n\nconst config = new Configstore(pkg.name, {\n tasks:{},\n config:{\n 'format.output': 'DD/MM'\n }\n})\n\nupdateNotifier({ pkg }).notify()\n\nconst manager = new Manager(config)\nautocomplete(config)\n\n//Exec\nlet EXEC = false\n\nprogram\n .version(pkg.version)\n .description('Tiny time tracker for projects')\n .option('--updateDB', 'Bool to update the db')\n\nprogram\n .command('start [description]')\n .description('Start task with a description.')\n .alias('s')\n .action(function(key, description) {\n description = (description) ? Array.isArray(description) ? description.join(' ') : description : null\n manager.startTask(key, description)\n EXEC = true\n })\n\nprogram\n .command('pause ')\n .description('Pause task')\n .alias('p')\n .action(function(key) {\n manager.pauseTask(key)\n EXEC = true\n })\n\nprogram\n .command('unpause ')\n .description('Unpause task')\n .alias('up')\n .action(function(key) {\n manager.unpauseTask(key)\n EXEC = true\n })\n\n\nprogram\n .command('finish [description]')\n .description('Stop task, you can add a description')\n .alias('f')\n .action(function(key, description) {\n description = (description) ? Array.isArray(description) ? description.join(' ') : description : null\n manager.stopTask(key, description)\n EXEC = true\n })\n\nprogram\n .command('description ')\n .description('Add description to your task.')\n .alias('d')\n .action(function(key, text) {\n text = Array.isArray(text) ? text.join(' ') : text\n manager.addDescription(key, text)\n EXEC = true\n })\n\nprogram\n .command('add ')\n .description('Adds time to a task. Example: \"1h2m3s\"')\n .action(function(key, stringTime) {\n manager.modifyTask('add', key, stringTime)\n manager.sumarize(key, manager.search(key), false)\n EXEC = true\n })\n\nprogram\n .command('subtract ')\n .description('Subtract time to a task. Example: \"1h2m3s\"')\n .alias('sub')\n .action(function(key, stringTime) {\n manager.modifyTask('subtract', key, stringTime)\n manager.sumarize(key, manager.search(key), false)\n EXEC = true\n })\n\nprogram\n .command('report [task_string] [rate]')\n .description('Report time of the tasks, empty for select all tasks. Can pass a rate (1h).')\n .alias('r')\n .action(function(tasks, rate) {\n tasks = (tasks) ? tasks : 'all'\n manager.sumarize(tasks, rate)\n EXEC = true\n })\n\nprogram\n .command('log ')\n .description('Logs the time of the task')\n .alias('l')\n .action(function(key) {\n setInterval(() => {\n let text = outputVertical('Task:', key, humanParseDiff(manager.getTime(key)))\n process.stdout.write(text)\n process.stdout.moveCursor(0,-2)\n }, 1000)\n EXEC = true\n })\n\nprogram\n .command('export [task_string]')\n .description('Export the tasks in json (default) or md format')\n .alias('e')\n .option('-f --format [format]')\n .option('-s --start [start date. Example: \"2017/05/28\"]')\n .option('-e --end [end date. Example: \"2018/05/28\"]')\n .action(function(key, options) {\n\t\tswitch (options.format ? options.format.toLowerCase() : undefined){\n\t\t\tcase \"json\": case undefined:\n\t\t\t\tconsole.log(JSON.stringify(manager.getTasksJson(key, options.start, options.end), null, 4))\n\t\t\t\tbreak\n\t\t\tcase \"markdown\": case \"md\":\n\t\t\t\tconsole.log(manager.getTasksMd(key, options.start, options.end))\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tconsole.log(\"Format not supported\")\n\t\t}\n EXEC = true\n })\n\nprogram\n .command('delete [task_string]')\n .description('Remove tasks from the list. Empty for select all tasks')\n .alias('del')\n .action(function(string) {\n string = (string) ? string : 'all'\n manager.delete(string)\n EXEC = true\n })\n\nprogram\n .command('configure ')\n .description('Configure the value of the config passing a key')\n .action(function(key, value) {\n manager.configure(key, value)\n EXEC = true\n })\n\nprogram\n .command('configuration')\n .description('Output configuration')\n .action(function(string) {\n outputConfig(manager.getConfig())\n EXEC = true\n })\n\nprogram\n .parse(process.argv)\n\n\nif (program.updateDB) {\n manager.update()\n EXEC = true\n}\n\nif (!EXEC) {\n cliError('You must use a valid command.')\n program.outputHelp()\n process.exit(1)\n}\n"]} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..11962b1 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3576 @@ +{ + "name": "time-tracker-cli", + "version": "2.3.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "requires": { + "string-width": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "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=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "ansi-escapes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", + "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "requires": { + "color-convert": "1.9.1" + } + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "optional": true, + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "optional": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "optional": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true, + "optional": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true, + "optional": true + }, + "babel": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel/-/babel-6.23.0.tgz", + "integrity": "sha1-0NHn2APpdHZb7qMjLU4VPA77kPQ=", + "dev": true + }, + "babel-cli": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", + "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-polyfill": "6.26.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "chokidar": "1.7.0", + "commander": "2.14.1", + "convert-source-map": "1.5.1", + "fs-readdir-recursive": "1.1.0", + "glob": "7.1.2", + "lodash": "4.17.5", + "output-file-sync": "1.1.2", + "path-is-absolute": "1.0.1", + "slash": "1.0.0", + "source-map": "0.5.7", + "v8flags": "2.1.1" + }, + "dependencies": { + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "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": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "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": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-core": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.1", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.5", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + }, + "dependencies": { + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "dev": true + } + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.5", + "source-map": "0.5.7", + "trim-right": "1.0.1" + }, + "dependencies": { + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "dev": true + } + } + }, + "babel-helper-bindify-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", + "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.5" + }, + "dependencies": { + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "dev": true + } + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-explode-class": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", + "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", + "dev": true, + "requires": { + "babel-helper-bindify-decorators": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.5" + }, + "dependencies": { + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "dev": true + } + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-async-generators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", + "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", + "dev": true + }, + "babel-plugin-syntax-class-constructor-call": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", + "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=", + "dev": true + }, + "babel-plugin-syntax-class-properties": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", + "dev": true + }, + "babel-plugin-syntax-decorators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", + "dev": true + }, + "babel-plugin-syntax-do-expressions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz", + "integrity": "sha1-V0d1YTmqJtOQ0JQQsDdEugfkeW0=", + "dev": true + }, + "babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-export-extensions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", + "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", + "dev": true + }, + "babel-plugin-syntax-function-bind": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz", + "integrity": "sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y=", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-generator-functions": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", + "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-generators": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-class-constructor-call": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", + "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", + "dev": true, + "requires": { + "babel-plugin-syntax-class-constructor-call": "6.18.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-class-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", + "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", + "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", + "dev": true, + "requires": { + "babel-helper-explode-class": "6.24.1", + "babel-plugin-syntax-decorators": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-decorators-legacy": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.4.tgz", + "integrity": "sha1-dBtY9sW86eYCfgiC2cmU8E82aSU=", + "dev": true, + "requires": { + "babel-plugin-syntax-decorators": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-do-expressions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz", + "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=", + "dev": true, + "requires": { + "babel-plugin-syntax-do-expressions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.5" + }, + "dependencies": { + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "dev": true + } + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", + "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-export-extensions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", + "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", + "dev": true, + "requires": { + "babel-plugin-syntax-export-extensions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-function-bind": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz", + "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=", + "dev": true, + "requires": { + "babel-plugin-syntax-function-bind": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "0.10.1" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "requires": { + "babel-runtime": "6.26.0", + "core-js": "2.5.3", + "regenerator-runtime": "0.10.5" + } + }, + "babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0" + } + }, + "babel-preset-stage-0": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz", + "integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=", + "dev": true, + "requires": { + "babel-plugin-transform-do-expressions": "6.22.0", + "babel-plugin-transform-function-bind": "6.22.0", + "babel-preset-stage-1": "6.24.1" + } + }, + "babel-preset-stage-1": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", + "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", + "dev": true, + "requires": { + "babel-plugin-transform-class-constructor-call": "6.24.1", + "babel-plugin-transform-export-extensions": "6.22.0", + "babel-preset-stage-2": "6.24.1" + } + }, + "babel-preset-stage-2": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", + "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", + "dev": true, + "requires": { + "babel-plugin-syntax-dynamic-import": "6.18.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-decorators": "6.24.1", + "babel-preset-stage-3": "6.24.1" + } + }, + "babel-preset-stage-3": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", + "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", + "dev": true, + "requires": { + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-generator-functions": "6.24.1", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-object-rest-spread": "6.26.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-runtime": "6.26.0", + "core-js": "2.5.3", + "home-or-tmp": "2.0.0", + "lodash": "4.17.5", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + }, + "dependencies": { + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "dev": true + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.3", + "regenerator-runtime": "0.11.1" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + } + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.5" + }, + "dependencies": { + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "dev": true + } + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.3", + "lodash": "4.17.5" + }, + "dependencies": { + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "dev": true + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.5", + "to-fast-properties": "1.0.3" + }, + "dependencies": { + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "dev": true + } + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true, + "optional": true + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "requires": { + "ansi-align": "2.0.0", + "camelcase": "4.1.0", + "chalk": "2.3.1", + "cli-boxes": "1.0.0", + "string-width": "2.1.1", + "term-size": "1.2.0", + "widest-line": "2.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=" + }, + "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=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "optional": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "capture-stack-trace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=" + }, + "chalk": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", + "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "5.2.0" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "optional": true, + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.1.3", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" + }, + "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=", + "requires": { + "restore-cursor": "2.0.0" + } + }, + "cli-table2": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/cli-table2/-/cli-table2-0.2.0.tgz", + "integrity": "sha1-LR738hig54biFFQFYtS9F3/jLZc=", + "requires": { + "colors": "1.1.2", + "lodash": "3.10.1", + "string-width": "1.0.2" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "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=" + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" + }, + "commander": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", + "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "configstore": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz", + "integrity": "sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw==", + "requires": { + "dot-prop": "4.2.0", + "graceful-fs": "4.1.11", + "make-dir": "1.2.0", + "unique-string": "1.0.0", + "write-file-atomic": "2.3.0", + "xdg-basedir": "3.0.0" + } + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "core-js": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", + "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true, + "optional": true + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "requires": { + "capture-stack-trace": "1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "requires": { + "is-obj": "1.0.1" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "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" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "optional": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "optional": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "external-editor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", + "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", + "requires": { + "chardet": "0.4.2", + "iconv-lite": "0.4.19", + "tmp": "0.0.33" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "optional": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "flat": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.0.0.tgz", + "integrity": "sha512-ji/WMv2jdsE+LaznpkIF9Haax0sdpTBozrz/Dtg4qSRMfbs8oVg4ypJunIRYPiMLvH/ed6OflXbnbTIKJhtgeg==", + "requires": { + "is-buffer": "1.1.6" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "optional": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "optional": true, + "requires": { + "for-in": "1.0.2" + } + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", + "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.9.2", + "node-pre-gyp": "0.6.39" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.39", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "1.0.2", + "hawk": "3.1.3", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + } + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "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": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "optional": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "requires": { + "ini": "1.3.5" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "requires": { + "create-error-class": "3.0.2", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-redirect": "1.0.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.0", + "safe-buffer": "5.1.1", + "timed-out": "4.0.1", + "unzip-response": "2.0.1", + "url-parse-lax": "1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "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==" + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "requires": { + "ansi-escapes": "3.0.0", + "chalk": "2.3.1", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "2.1.0", + "figures": "2.0.0", + "lodash": "4.17.5", + "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": "2.3.8" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "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=" + }, + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "invariant": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz", + "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==", + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "1.11.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true, + "optional": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "optional": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "requires": { + "global-dirs": "0.1.1", + "is-path-inside": "1.0.1" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true, + "optional": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true, + "optional": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "optional": true, + "requires": { + "isarray": "1.0.0" + } + }, + "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 + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "requires": { + "package-json": "4.0.1" + } + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "make-dir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz", + "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", + "requires": { + "pify": "3.0.0" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "optional": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "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.11" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "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" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "moment": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz", + "integrity": "sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg==" + }, + "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=" + }, + "nan": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.9.2.tgz", + "integrity": "sha512-ltW65co7f3PQWBDbqVvaU1WtFJUsNW7sWWm4HINhbMQIyVyzIeyZ8toX5TC5eeooE6piZoaEh4cZkueSKG3KYw==", + "dev": true, + "optional": true + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "2.0.1" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "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 + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "optional": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "omelette": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/omelette/-/omelette-0.4.5.tgz", + "integrity": "sha512-b0k9uqwF60u15KmVkneVw96VYRtZu2QCbXUQ26SgdyVUgMBzctzIfhNPKAWl4oqJEKpe52CzBYSS+HIKtiK8sw==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "1.2.0" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "output-file-sync": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", + "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "object-assign": "4.1.1" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "requires": { + "got": "6.7.1", + "registry-auth-token": "3.3.2", + "registry-url": "3.1.0", + "semver": "5.5.0" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "optional": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true, + "optional": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true, + "optional": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "optional": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "rc": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.5.tgz", + "integrity": "sha1-J1zWh/bjs2zHVrqibf7oCnkDAf0=", + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + } + }, + "readable-stream": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", + "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.4", + "set-immediate-shim": "1.0.1" + } + }, + "regenerate": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "optional": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "requires": { + "rc": "1.2.5", + "safe-buffer": "5.1.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "requires": { + "rc": "1.2.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "optional": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "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=", + "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=" + }, + "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=", + "requires": { + "rx-lite": "4.0.8" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "requires": { + "semver": "5.5.0" + } + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true, + "optional": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "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, + "optional": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "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=" + }, + "supports-color": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", + "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "requires": { + "has-flag": "3.0.0" + } + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "requires": { + "execa": "0.7.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "requires": { + "crypto-random-string": "1.0.0" + } + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" + }, + "update-notifier": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.3.0.tgz", + "integrity": "sha1-TognpruRUUCrCTVZ1wFOPruDdFE=", + "requires": { + "boxen": "1.3.0", + "chalk": "2.3.1", + "configstore": "3.1.1", + "import-lazy": "2.1.0", + "is-installed-globally": "0.1.0", + "is-npm": "1.0.0", + "latest-version": "3.1.0", + "semver-diff": "2.1.0", + "xdg-basedir": "3.0.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "1.0.4" + } + }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true, + "optional": true + }, + "v8flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "dev": true, + "requires": { + "user-home": "1.1.1" + } + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "requires": { + "isexe": "2.0.0" + } + }, + "widest-line": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", + "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", + "requires": { + "string-width": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "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=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "signal-exit": "3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + } + } +} diff --git a/src/core/Manager.js b/src/core/Manager.js index 93e91bf..e628fd1 100644 --- a/src/core/Manager.js +++ b/src/core/Manager.js @@ -141,10 +141,87 @@ export default class Manager { .catch(cliError) } - getTasksJson() { - return flat.unflatten(this.tasks) + getTasksJson(key) { + return flat.unflatten(key ? this.tasks[key]: this.tasks) } + getTasksMd(key, start, end) { + let timings + if(key){ + timings = this.tasks[key].timings + }else{ + timings = this.unflatTasks(this.tasks) + } + let body = "| Start | End | Hours | Subtotal | Description |\n" + body += "| ----- | --- | -----:| -------: | ----------- |\n" + let total = 0; + + timings = start || end ? this.filterDates(timings, start, end) : timings + timings.forEach( k => { + let start = new Date(k.start) + let stop = k.stop ? new Date(k.stop) : new Date() + total += stop - start + body += "|" + this.dateFormat(start)+ "|" + this.dateFormat(stop)+ "|"+ this.hourFormat(stop - start)+ "|"+ this.hourFormat(total)+ "|" + k.name+ "|\n" + }) + body += "| | | |\n" + body += "| Total | | " + this.hourFormat(total)+ " | | |\n" + + return body + } + + filterDates(timings, start, end){ + let filterStart = function(timings){ + let filtered = [] + for(let i = 0; i < timings.length; i++){ + if(new Date(start) < new Date(timings[i].start)){ + filtered.push(timings[i]) + } + } + return filtered + } + let filterEnd = function(timings){ + let filtered = [] + for(let i = 0; i < timings.length; i++){ + if(new Date(end) > new Date(timings[i].start)){ + filtered.push(timings[i]) + } + } + return filtered + } + + return start && end ? filterStart(filterEnd(timings)) : (start ? filterStart(timings) : filterEnd(timings)) + } + unflatTasks(tasks){ + let keys = Object.keys(tasks) + let unflattened = [] + for(let i1 = 0; i1 < keys.length; i1++){ + for(let i2 = 0; i2 < tasks[keys[i1]].timings.length; i2++){ + let timing = tasks[keys[i1]].timings[i2] + timing.name = keys[i1] + timing.description = tasks[keys[i1]].description + unflattened.push(timing) + } + } + return unflattened + } + + dateFormat(d){ + let date = d.getFullYear() + "/" + let twoDigits = n => n < 10 ? "0" + n : n + date += twoDigits(d.getMonth()+1) + "/" + date += twoDigits(d.getDate()) + " " + date += twoDigits(d.getHours()) + ":" + date += twoDigits(d.getMinutes()) + ":" + date += twoDigits(d.getSeconds()) + return date + } + + hourFormat(d){ + let date = new Date(d) + let twoDigits = n => n < 10 ? "0" + n : n + return Math.floor(d / 36e5) + ":" + twoDigits(date.getMinutes()) + ":" + twoDigits(date.getSeconds()) + } + getConfig(){ return this.config } @@ -191,6 +268,7 @@ export default class Manager { sumarize(key, rate, full=true){ let tasks = this.search(key) + tasks.sort((a,b) => { return a.name > b.name }) sumarize(key, tasks, rate, full, this.config['format.output']) } } diff --git a/src/core/Task.js b/src/core/Task.js index 1d923be..b7b08b2 100644 --- a/src/core/Task.js +++ b/src/core/Task.js @@ -174,7 +174,7 @@ export default class Task { } getStartDate(){ - if (this.task.timings){ + if (this.task.timings && this.task.timings[0]){ return this.task.timings[0].start } else { return this.task.start diff --git a/src/core/output.js b/src/core/output.js index f639ec9..f7d8477 100644 --- a/src/core/output.js +++ b/src/core/output.js @@ -6,8 +6,8 @@ import { humanParseDiff, calcRate } from './utils' export const sumarize = function(search, tasks, rate, full, format) { let table = new Table({ - head: ['Duration', 'Dates', 'Task'], - colAligns: ['right', 'center', 'left'], + head: ['Name','Description', 'Dates', 'Duration'], + colAligns: ['left', 'center', 'center', 'left'], chars: { 'top': '═' , 'top-mid': '╤' @@ -28,16 +28,33 @@ export const sumarize = function(search, tasks, rate, full, format) { let head= `Search: ${search} \n` tasks.forEach((task, index) => { + let description = (task.task.description() && task.task.description() !== '') + ? task.task.description() + : '-' + let name = task.name task = task.task let duration = task.getSeconds() total += duration - let description = (task.description() && task.description() !== '') - ? task.description() - : task.name + // Avoid excesive width for proper console fit + let splitWidth = (str, len) => { + let arr = [] + while (str != '') { + if (str.length > len) { + arr.push(str.substring(0,len)) + str = str.substring(len); + } else { + arr.push(str) + break + } + } + return arr.join('\n') + } + description = splitWidth(description, 51) + name = splitWidth(name, 40) - table.push([description, moment(task.getStartDate()).format(format), humanParseDiff(duration)]) + table.push([name, description, moment(task.getStartDate()).format(format), humanParseDiff(duration)]) }) if (full){ @@ -52,6 +69,7 @@ export const sumarize = function(search, tasks, rate, full, format) { table.push( [ { rowSpan:2, content: `${colors.red('Search:')} "${search}"`, vAlign:'center' }, + { rowSpan:2, content: '', vAlign:'center' }, { rowSpan:2, content: colors.red('Total time'), vAlign:'center' }, { rowSpan:2, content: humanParseDiff(total), vAlign:'center' } ], diff --git a/src/index.js b/src/index.js index 3b7c6f5..b1ddd58 100644 --- a/src/index.js +++ b/src/index.js @@ -123,11 +123,23 @@ program }) program - .command('export') - .description('Export the tasks in a JSON') + .command('export [task_string]') + .description('Export the tasks in json (default) or md format') .alias('e') - .action(function(key) { - console.log(JSON.stringify(manager.getTasksJson(), null, 4)) + .option('-f --format [format]') + .option('-s --start [start date. Example: "2017/05/28"]') + .option('-e --end [end date. Example: "2018/05/28"]') + .action(function(key, options) { + switch (options.format ? options.format.toLowerCase() : undefined){ + case "json": case undefined: + console.log(JSON.stringify(manager.getTasksJson(key, options.start, options.end), null, 4)) + break + case "markdown": case "md": + console.log(manager.getTasksMd(key, options.start, options.end)) + break + default: + console.log("Format not supported") + } EXEC = true })