├── .editorconfig ├── .eslintrc ├── .gitignore ├── .jsdoc.json ├── .npmignore ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── lib ├── formatter.js ├── main.js ├── parse-ffmpeg-log.js ├── predict-progressbar-width.js ├── progress-bar.js └── theme.js ├── package-lock.json ├── package.json ├── resources └── screencasts │ ├── screencast-1.svg │ └── screencast-2.gif └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 4 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [.eslintrc] 13 | indent_size = 2 14 | 15 | [*.json] 16 | indent_size = 2 17 | 18 | [*.md] 19 | trim_trailing_whitespace = false 20 | 21 | [*.yml] 22 | indent_size = 2 23 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "es6": true, 5 | "node": true 6 | }, 7 | "parserOptions": { 8 | "ecmaVersion": 6, 9 | "ecmaFeatures": { 10 | "globalReturn": true, 11 | "impliedStrict": true, 12 | "jsx": true 13 | } 14 | }, 15 | "root": true, 16 | "rules": { 17 | "brace-style": [ 18 | "error", 19 | "1tbs", 20 | { 21 | "allowSingleLine": true 22 | } 23 | ], 24 | "camelcase": "off", 25 | "comma-dangle": [ 26 | "error", 27 | "never" 28 | ], 29 | "comma-style": [ 30 | "error", 31 | "last" 32 | ], 33 | "curly": "error", 34 | "dot-notation": "off", 35 | "eol-last": "error", 36 | "eqeqeq": "error", 37 | "indent": [ 38 | "error", 39 | 4, 40 | { 41 | "MemberExpression": "off", 42 | "SwitchCase": 1 43 | } 44 | ], 45 | "key-spacing": [ 46 | "error", 47 | { 48 | "afterColon": true, 49 | "beforeColon": false 50 | } 51 | ], 52 | "keyword-spacing": [ 53 | "error", 54 | { 55 | "after": true, 56 | "before": true 57 | } 58 | ], 59 | "linebreak-style": [ 60 | "error", 61 | "unix" 62 | ], 63 | "no-bitwise": "off", 64 | "no-caller": "error", 65 | "no-mixed-spaces-and-tabs": "error", 66 | "no-multi-str": "error", 67 | "no-trailing-spaces": "error", 68 | "no-undef": "error", 69 | "no-unused-vars": [ 70 | "error", 71 | { 72 | "args": "none", 73 | "vars": "local" 74 | } 75 | ], 76 | "no-use-before-define": [ 77 | "error", 78 | { 79 | "functions": false 80 | } 81 | ], 82 | "no-with": "error", 83 | "object-curly-spacing": [ 84 | "error", 85 | "always" 86 | ], 87 | "object-shorthand": "off", 88 | "quotes": [ 89 | "error", 90 | "single", 91 | { 92 | "allowTemplateLiterals": true 93 | } 94 | ], 95 | "semi": [ 96 | "error", 97 | "never" 98 | ], 99 | "space-before-blocks": [ 100 | "error", 101 | "always" 102 | ], 103 | "space-before-function-paren": [ 104 | "error", 105 | { 106 | "anonymous": "ignore", 107 | "named": "never" 108 | } 109 | ], 110 | "space-in-parens": [ 111 | "error", 112 | "never" 113 | ], 114 | "space-infix-ops": "error", 115 | "space-unary-ops": [ 116 | "error", 117 | { 118 | "words": false, 119 | "nonwords": false 120 | } 121 | ], 122 | "valid-jsdoc": [ 123 | "warn", 124 | { 125 | "requireReturn": false, 126 | "requireReturnDescription": false 127 | } 128 | ], 129 | "wrap-iife": "off" 130 | } 131 | } 132 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## BASE 2 | 3 | # macOS 4 | .DS_Store 5 | 6 | # Logs 7 | logs 8 | *.log 9 | 10 | # Temporary 11 | temp 12 | tmp 13 | 14 | # Caches 15 | .cache 16 | cache 17 | .sass-cache 18 | 19 | # JetBrains 20 | .idea 21 | *.sln.iml 22 | 23 | # VSCode 24 | .vscode 25 | 26 | # Compiled 27 | build 28 | 29 | # Generated documentation 30 | RELEASENOTES.md 31 | 32 | 33 | ## NODE.JS 34 | 35 | # Modules 36 | node_modules 37 | jspm_packages 38 | bower_components 39 | 40 | # Runtime data 41 | pids 42 | *.pid 43 | *.seed 44 | 45 | # Directory for instrumented libs generated by jscoverage/JSCover 46 | lib-cov 47 | 48 | # Coverage directory used by tools like istanbul 49 | coverage 50 | 51 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 52 | .grunt 53 | 54 | # Generated documentation 55 | docs 56 | -------------------------------------------------------------------------------- /.jsdoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "tags": { 3 | "allowUnknownTags": true 4 | }, 5 | "source": { 6 | "include": [ 7 | "./lib", 8 | "package.json", 9 | "README.md" 10 | ], 11 | "includePattern": ".js$", 12 | "excludePattern": "(node_modules/|docs)" 13 | }, 14 | "plugins": ["plugins/markdown"], 15 | "opts": { 16 | "destination": "./docs", 17 | "encoding": "utf8", 18 | "recurse": true, 19 | "template": "./node_modules/docdash", 20 | "verbose": true 21 | }, 22 | "markdown": { 23 | "parser": "gfm", 24 | "hardwrap": true 25 | }, 26 | "templates": { 27 | "cleverLinks": false, 28 | "monospaceLinks": false, 29 | "default": { 30 | "outputSourceFiles": true, 31 | "includeDate": false 32 | } 33 | }, 34 | "docdash": { 35 | "static": false, 36 | "sort": true 37 | } 38 | } -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | ## BASE 2 | 3 | # macOS 4 | .DS_Store 5 | 6 | # Logs 7 | logs 8 | *.log 9 | 10 | # Temporary 11 | temp 12 | tmp 13 | 14 | # Caches 15 | .cache 16 | cache 17 | .sass-cache 18 | 19 | # JetBrains 20 | .idea 21 | *.sln.iml 22 | 23 | # VSCode 24 | .vscode 25 | 26 | # Compiled 27 | build 28 | 29 | # Generated documentation 30 | RELEASENOTES.md 31 | 32 | 33 | ## NODE.JS 34 | 35 | # Modules 36 | node_modules 37 | jspm_packages 38 | bower_components 39 | 40 | # Runtime data 41 | pids 42 | *.pid 43 | *.seed 44 | 45 | # Directory for instrumented libs generated by jscoverage/JSCover 46 | lib-cov 47 | 48 | # Coverage directory used by tools like istanbul 49 | coverage 50 | 51 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 52 | .grunt 53 | 54 | # Generated documentation 55 | docs 56 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | ## Creating Issues 4 | 5 | To file bug reports and feature suggestions, use the ["Issues"](https://github.com/sidneys/ffmpeg-progressbar-cli/issues?q=is%3Aissue) page. 6 | 7 | 1. Make sure the issue has not been filed before. 8 | 1. Create a new issue by filling out [the issue form](https://github.com/sidneys/ffmpeg-progressbar-cli/issues/new). 9 | 1. If an issue requires more information and receives no further input, it will be closed. 10 | 11 | 12 | ## Creating Pull Requests 13 | 14 | To create pull requests, use the ["Pull Requests"](https://github.com/sidneys/ffmpeg-progressbar-cli/pulls) page. 15 | 16 | 1. [Create a new Issue](#creating-issues) describing the Bug or Feature you are addressing, to let others know you are working on it. 17 | 1. If a related issue exists, add a comment to let others know that you'll submit a pull request. 18 | 1. Create a new pull request by filling out [the pull request form](https://github.com/sidneys/ffmpeg-progressbar-cli/pulls/compare). 19 | 20 | 21 | ### Setup 22 | 23 | 1. Fork the repository. 24 | 1. Clone your fork. 25 | 1. Make a branch for your change. 26 | 1. Run `npm install`. 27 | 28 | ## Commit Messages 29 | 30 | Use the `Conventional Commits` format. 31 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2018 sidneys.github.io 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ffmpeg-progressbar-cli [![npm](https://img.shields.io/npm/v/ffmpeg-progressbar-cli.svg?style=flat-square)](https://npmjs.com/package/ffmpeg-progressbar-cli) 2 | 3 |

4 |
5 | ffmpeg-progressbar-cli is a colored progress bar for FFmpeg.
6 | Simply use ffmpeg-bar instead of ffmpeg.

7 |

8 | 9 | 10 | ## Contents 11 | 12 | 1. [Installation](#installation) 13 | 1. [Usage](#usage) 14 | 1. [Configuration](#configuration) 15 | 1. [Requirements](#requirements) 16 | 1. [Compatibility](#compatibility) 17 | 1. [Contribute](#contribute) 18 | 1. [Author](#author) 19 | 20 | 21 | ## Installation 22 | 23 | ```bash 24 | $ npm install --global ffmpeg-progressbar-cli 25 | ``` 26 | 27 | 28 | ## Usage 29 | 30 | The installation process adds the `ffmpeg-bar` command to your system. 31 | This is a transparent wrapper, passing all commands to `ffmpeg`. 32 | 33 | To use it, simply launch `ffmpeg-bar` instead of `ffmpeg`, or replace `ffmpeg` with `ffmpeg-bar` inside your scripts. 34 | 35 | 36 | As long as no errors are encountered, the output of `ffmpeg-bar` will consist of a progress bar, the estimated time until process completion and a percentage. 37 | 38 | ###### Examples 39 | 40 | ```bash 41 | $> ffmpeg-bar -i input.mp4 output.avi 42 | ``` 43 | 44 | ```bash 45 | $> ffmpeg-bar -i input.avi -b:v 64k -bufsize 64k output.avi 46 | ``` 47 | 48 | ```bash 49 | $> ffmpeg-bar -i in.mkv -map_metadata:s:a 0:g out.mkv 50 | ``` 51 | 52 | 53 | ## Configuration 54 | 55 | For configuration purposes, `ffmpeg-progressbar-cli` exposes these environmental variables: 56 | 57 | 58 | ##### `BAR_FILENAME_LENGTH` 59 | The maximum number of characters of the filename label displayed next to the progress bar beam *(default: 20)* 60 | 61 | ###### Example 62 | 63 | ```bash 64 | $> BAR_FILENAME_LENGTH=7 ffmpeg-bar -i in.mp4 output.mp4 65 | ``` 66 | 67 | ##### `BAR_BEAM_RATIO ` 68 | 69 | The share of (available) horizontal display real estate the progress bar beam should occupy *(default: 0.75)* 70 | 71 | ###### Example 72 | 73 | ```bash 74 | $> BAR_BAR_SIZE_RATIO=0.5 ffmpeg-bar -i in.mp4 output.mp4 75 | ``` 76 | 77 | ## Requirements 78 | 79 | - [Node.js](https://nodejs.org/), v8.11 or later 80 | - [FFmpeg](https://ffmpeg.org/), installed correctly 81 | 82 | 83 | ## Compatibility 84 | 85 | Tested on 86 | 87 | - macOS 10.13, 10.14 Beta 88 | - Windows 10 1803 89 | - Ubuntu 18.04 90 | 91 | 92 | ## Contribute ![Contributors Wanted](https://img.shields.io/badge/contributions-wanted-red.svg?style=flat-square) 93 | 94 | Read the contribution [documentation](https://github.com/sidneys/ffmpeg-progressbar-cli/blob/master/CONTRIBUTING.md). 95 | 96 | 97 | ## License 98 | 99 | MIT 100 | 101 | 102 | ## Author 103 | 104 | [sidneys](http://sidneys.github.io) 2018 105 | 106 | -------------------------------------------------------------------------------- /lib/formatter.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | 4 | /** 5 | * Modules 6 | * Node 7 | * @constant 8 | */ 9 | const path = require('path') 10 | 11 | /** 12 | * Modules 13 | * External 14 | * @constant 15 | */ 16 | const appRootPath = require('app-root-path') 17 | appRootPath.setPath(path.join(__dirname, '..')) 18 | const ellipsize = require('ellipsize') 19 | const stringWidth = require('string-width') 20 | 21 | 22 | /** 23 | * Ellipse character 24 | * @type {string} 25 | * @constant 26 | * @default 27 | */ 28 | const ellipseCharacter = '…' 29 | 30 | /** 31 | * Convert file paths to prettified file name 32 | * @param {String} filePath - File path 33 | * @param {Number=} targetLength - File name length before adding ellipsis 34 | * @returns {String} - File name 35 | */ 36 | let filepathToFilename = (filePath, targetLength = 10) => { 37 | // console.debug('prettyFilenameForFilepath') 38 | 39 | let fileName 40 | 41 | // Format fileName 42 | const fileExtension = path.extname(filePath) 43 | const fileTitle = path.basename(filePath, fileExtension) 44 | 45 | // Lengths 46 | const fileExtensionLength = stringWidth(fileExtension) 47 | const fileTitleLength = stringWidth(fileTitle) 48 | const fileNameLength = fileTitleLength + fileExtensionLength 49 | 50 | /** 51 | * File name string formatter 52 | * Handles most edge cases of file name/file extension lengths 53 | */ 54 | if (fileNameLength > targetLength) { 55 | if (fileExtensionLength < (targetLength - 2)) { 56 | // Name too long: ellipse title, leave extension as-is 57 | // filetit….extension 58 | fileName = `${ellipsize(fileTitle, targetLength - fileExtensionLength, { ellipse: ellipseCharacter })}${fileExtension}` 59 | } else { 60 | // Name too long, extension too long: Ellipse title, hide extension 61 | // filetit… 62 | fileName = `${ellipsize(fileTitle, targetLength, { ellipse: ellipseCharacter })}` 63 | } 64 | } else if (fileNameLength < targetLength) { 65 | if (fileNameLength >= (targetLength - 1)) { 66 | // Name too short by less than 2 characters: pad title left 67 | // filetitle.extension 68 | fileName = `${fileTitle}${fileExtension}`.padStart(targetLength, ' ') 69 | } else { 70 | // Name too short by more than 2 characters: Prefix ellipsed directory tree 71 | // …ocuments/filetitle.extension 72 | fileName = `${ellipseCharacter}${filePath.substr(filePath.length - targetLength + 1, filePath.length - 1)}` 73 | } 74 | } else { 75 | // File name has perfect length 76 | fileName = `${fileTitle}${fileExtension}` 77 | } 78 | 79 | return fileName 80 | } 81 | 82 | 83 | /** 84 | * Convert fraction to zero-padded percentage 85 | * @param {String} fraction - Fraction 86 | * @param {String=} pad - Pad character 87 | * @returns {String} - percentage 88 | */ 89 | let fractionToPercentage = (fraction, pad = '0') => { 90 | // console.debug('fractionToPercentagePad') 91 | 92 | return String(Math.round(fraction * 100)).padStart(3, pad) 93 | } 94 | 95 | /** 96 | * @exports format-string 97 | */ 98 | module.exports = { 99 | filepathToFilename: filepathToFilename, 100 | fractionToPercentage: fractionToPercentage 101 | } 102 | 103 | 104 | -------------------------------------------------------------------------------- /lib/main.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 'use strict' 3 | 4 | /** 5 | * The maximum number of characters of the filename label displayed next to the progress bar beam. 6 | * @constant 7 | * @default 8 | */ 9 | const BAR_FILENAME_LENGTH = process.env.BAR_FILENAME_LENGTH || 20 10 | 11 | /** 12 | * The share of (available) horizontal display real estate the progress bar beam should occupy. 13 | * @constant 14 | */ 15 | const BAR_BEAM_RATIO = process.env.BAR_SIZE_RATIO || 0.75 16 | 17 | 18 | /** 19 | * Modules 20 | * Node 21 | * @constant 22 | */ 23 | const childProcess = require('child_process') 24 | const os = require('os') 25 | const readline = require('readline') 26 | const path = require('path') 27 | 28 | /** 29 | * Modules 30 | * External 31 | * @constant 32 | */ 33 | const appRootPath = require('app-root-path') 34 | appRootPath.setPath(path.join(__dirname, '..')) 35 | const ellipsize = require('ellipsize') 36 | const ini = require('ini') 37 | const which = require('which') 38 | 39 | /** 40 | * Modules 41 | * Internal 42 | * @constant 43 | */ 44 | const progressBar = require('./progress-bar') 45 | const parseFFmpegLog = require('./parse-ffmpeg-log') 46 | const predictProgressbarWidth = require('./predict-progressbar-width') 47 | const formatter = require('./formatter') 48 | const theme = require('./theme') 49 | 50 | 51 | /** 52 | * FFmpeg Binary 53 | * @constant 54 | */ 55 | const ffmpegFilepath = which.sync('ffmpeg') 56 | 57 | /** 58 | * FFmpeg arguments 59 | * @constant 60 | */ 61 | const ffmpegUserArgsList = process.argv.slice(2) 62 | const ffmpegPreparationTaskArgsList = [...ffmpegUserArgsList] 63 | const ffmpegPrimaryTaskArgsList = ['-y', '-loglevel', 'error', '-progress', 'pipe:1', ...ffmpegUserArgsList] 64 | 65 | 66 | /** 67 | * @typedef {ChildProcess} Task 68 | * @inherits {NodeJS.EventEmitter} 69 | * @property {NodeJS.ReadableStream} stdout - stdout Stream 70 | * @property {NodeJS.ReadableStream} stderr - stderr Stream 71 | * @property {NodeJS.WritableStream} stdin - stdin Stream 72 | * @property {function} on - NodeJS.EventEmitter.on 73 | */ 74 | 75 | /** 76 | * Primary Task 77 | * This task runs the FFmpeg commands provided. 78 | * @param {Number} totalTimeMs - Total duration (ms) 79 | * @param {String} filePath - Output target filepath 80 | */ 81 | let startPrimaryTask = (totalTimeMs, filePath) => { 82 | // console.debug('startPrimaryTask()') 83 | 84 | const progressbarWidth = predictProgressbarWidth.beam(Number(BAR_FILENAME_LENGTH), BAR_BEAM_RATIO) 85 | 86 | /** 87 | * Create Progress Bar 88 | * @type {progressBar} 89 | */ 90 | const bar = progressBar({ 91 | barsize: progressbarWidth 92 | }) 93 | 94 | /** 95 | * Startup status 96 | * @type {Boolean} 97 | */ 98 | let didStart = false 99 | 100 | /** 101 | * Last error log 102 | * @type {String} 103 | */ 104 | let lastError 105 | 106 | // DEBUG 107 | // lastError = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzstuvwxyz' 108 | 109 | /** 110 | * Main Task 111 | * @type {Task} 112 | */ 113 | const mainTask = childProcess.spawn(ffmpegFilepath, ffmpegPrimaryTaskArgsList) 114 | 115 | /** 116 | * Handles mainTask.stdout 117 | * @param {Buffer|String} data - FFmpeg Live Log Output Buffer 118 | */ 119 | let onData = (data) => { 120 | if (!didStart) { 121 | // Bar::start() 122 | bar.start(totalTimeMs, { 123 | filename: formatter.filepathToFilename(filePath, BAR_FILENAME_LENGTH) 124 | }) 125 | didStart = true 126 | } 127 | 128 | // Parse sparse output of nearly undocumented `-progress` argument 🤬🤬🤬 129 | // That is, key-value-pairs in .ini format 130 | const progressDictionary = ini.decode(data.toString()) 131 | 132 | const currentTimeMicroseconds = Number(progressDictionary['out_time_ms']) 133 | const currentTimeMs = Math.round(currentTimeMicroseconds / 1000) 134 | 135 | // Bar::update() (noncritical errors are written to Bar.annotation) 136 | bar.update(currentTimeMs, null, !!lastError ? theme.warning(ellipsize(lastError, progressbarWidth + 7)) : null) 137 | 138 | // DEBUG 139 | // console.debug('progress (ms)', progressMilliseconds, 'duration (ms)', durationMilliseconds, 'fraction', (progressMilliseconds / durationMilliseconds)) 140 | } 141 | 142 | /** 143 | * @fires mainTask#onData 144 | * @interface mainTask.stdout 145 | */ 146 | mainTask.stdout.on('data', onData) 147 | 148 | /** 149 | * @fires mainTask#onData 150 | * @interface mainTask.stderr 151 | */ 152 | mainTask.stderr.on('data', (data) => { 153 | // Error: Persist last line fo error logs to lastError 154 | const dataLines = data.toString().trim().split(os.EOL) 155 | lastError = dataLines[dataLines.length - 1] 156 | }) 157 | 158 | /** 159 | * @interface Process.ReadStream 160 | */ 161 | process.stdin.pipe(mainTask.stdin) 162 | 163 | /** 164 | * @listens mainTask#close 165 | */ 166 | mainTask.on('close', (code, signal) => { 167 | // DEBUG 168 | // console.debug('mainTask#close', 'code:', code, 'signal:', signal) 169 | 170 | // Set bar to 100% 171 | bar.update(totalTimeMs) 172 | 173 | // Restore cursor 174 | process.stdout.write('\x1B[?25h') 175 | 176 | // Exit 177 | process.exit(code) 178 | }) 179 | } 180 | 181 | /** 182 | * Preparation Task 183 | * This spawns a preliminary process, which gathers information about the output (filename, duration) which cannot be gathered via "ffmpeg -progress" 184 | */ 185 | let startPreparationTask = () => { 186 | // console.debug('startPreparationTask()') 187 | 188 | /** 189 | * Preparation Task 190 | */ 191 | const prepTask = childProcess.spawn(ffmpegFilepath, ffmpegPreparationTaskArgsList) 192 | 193 | /** 194 | * Duration of output file 195 | * @type {Number} 196 | */ 197 | let outputDuration 198 | 199 | /** 200 | * Name of output file 201 | * @type {String} 202 | */ 203 | let outputFilename 204 | 205 | /** 206 | * Last error log 207 | * @type {String} 208 | */ 209 | let lastError 210 | 211 | /** 212 | * Question status 213 | * @type {Boolean} 214 | */ 215 | let didShowQuestion = false 216 | 217 | /** 218 | * Handles prepTask.stdout 219 | * @param {Buffer|String} data - FFmpeg Live Log Output Buffer 220 | */ 221 | let onData = (data) => { 222 | data = data.toString() 223 | if (parseFFmpegLog.duration(data)) { outputDuration = parseFFmpegLog.duration(data) } 224 | if (parseFFmpegLog.output(data)) { outputFilename = parseFFmpegLog.output(data) } 225 | 226 | if (outputDuration && outputFilename) { 227 | if (didShowQuestion) { 228 | readline.moveCursor(process.stderr, 0, -1) 229 | readline.clearLine(process.stderr, 0) 230 | } 231 | // Send SIGKILL: preparation task succeeded 232 | prepTask.kill('SIGKILL') 233 | startPrimaryTask(outputDuration, outputFilename) 234 | } 235 | } 236 | 237 | /** 238 | * @fires prepTask#onData 239 | * @interface prepTask.stdout 240 | */ 241 | prepTask.stdout.on('data', onData) 242 | 243 | /** 244 | * @fires prepTask#onData 245 | * @interface prepTask.stderr 246 | */ 247 | prepTask.stderr.on('data', (data) => { 248 | if ((parseFFmpegLog.question(data.toString()))) { 249 | // Question: Show Question + whitespace 250 | process.stdout.write(theme.prompt(parseFFmpegLog.question(data.toString().trim()))) 251 | process.stdout.write(' ') 252 | didShowQuestion = true 253 | } else { 254 | // Error: Persist last line fo error logs to lastError 255 | const dataLines = data.toString().trim().split(os.EOL) 256 | lastError = dataLines[dataLines.length - 1] 257 | } 258 | onData(data) 259 | }) 260 | 261 | /** 262 | * @interface Process.ReadStream 263 | */ 264 | process.stdin.pipe(prepTask.stdin) 265 | 266 | /** 267 | * @listens prepTask#close 268 | */ 269 | prepTask.on('close', (code, signal) => { 270 | // DEBUG 271 | // console.debug('prepTask#close', 'code:', code, 'signal:', signal) 272 | 273 | // SIGKILL (fired by us) caused the process to close: ignore 274 | if (signal === 'SIGKILL') { return } 275 | 276 | // Other SIGNAL caused the process to close: Abort 277 | if (lastError) { 278 | // Show last error message 279 | process.stderr.write(theme.error(lastError)) 280 | } 281 | process.stdout.write(os.EOL) 282 | process.exit(code) 283 | }) 284 | } 285 | 286 | 287 | /** 288 | * Main 289 | */ 290 | if (require.main === module) { 291 | startPreparationTask() 292 | } 293 | -------------------------------------------------------------------------------- /lib/parse-ffmpeg-log.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | /** 4 | * Modules 5 | * Node 6 | * @constant 7 | */ 8 | const path = require('path') 9 | 10 | /** 11 | * Modules 12 | * External 13 | * @constant 14 | */ 15 | const moment = require('moment') 16 | /* eslint-disable no-unused-vars */ 17 | const momentDurationFormat = require('moment-duration-format') 18 | /* eslint-enable */ 19 | 20 | 21 | /** 22 | * Parse FFmpeg log for "y/N" question 23 | * @param {String} text - FFmpeg Log Output 24 | * @returns {String|void} - First output filepath 25 | */ 26 | let parseFFmpegLogForQuestion = (text) => { 27 | // console.debug('searchQuestionLog') 28 | 29 | let questionLine = text.match(/.*(\[y\/N\]).*$/gmi) 30 | 31 | if (!questionLine) { return } 32 | 33 | questionLine = questionLine[0] 34 | questionLine = questionLine.replace(/\'/gmi, '') 35 | 36 | return questionLine 37 | } 38 | 39 | /** 40 | * Parse FFmpeg log for "Duration: " 41 | * @param {String} text - FFmpeg Log Output 42 | * @returns {Number|void} - Duration (milliseconds) 43 | */ 44 | let parseFFmpegLogForDuration = (text) => { 45 | // console.debug('searchDurationLog') 46 | 47 | const durationList = text.match(/Duration: (.{2}):(.{2}):(.{2}).(.{2})/) 48 | 49 | if (!durationList) { return } 50 | 51 | // Grep 52 | const timecode = `${durationList[1]}:${durationList[2]}:${durationList[3]}.${durationList[4].padEnd(3, '0')}` 53 | 54 | // Format 55 | const timecodeMoment = moment.duration(timecode) 56 | 57 | return timecodeMoment.asMilliseconds() 58 | } 59 | 60 | /** 61 | * Parse FFmpeg log for "Output #0" 62 | * @param {String} text - FFmpeg Log Output 63 | * @returns {String|void} - First output filepath 64 | */ 65 | let parseFFmpegLogForOutput = (text) => { 66 | // console.debug('searchOutputLog') 67 | 68 | let outputLine = text.match(/(?:Output #0).*$/gmi) 69 | 70 | if (!outputLine) { return } 71 | 72 | outputLine = outputLine[0] 73 | outputLine = outputLine.match(/'(.*?)'/gmi)[0] 74 | outputLine = outputLine.replace(/\'/gmi, '') 75 | 76 | return path.resolve(outputLine) 77 | } 78 | 79 | 80 | /** 81 | * @exports parse-ffmpeg-log 82 | */ 83 | module.exports = { 84 | output: parseFFmpegLogForOutput, 85 | duration: parseFFmpegLogForDuration, 86 | question: parseFFmpegLogForQuestion 87 | } 88 | -------------------------------------------------------------------------------- /lib/predict-progressbar-width.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | 4 | /** 5 | * Modules 6 | * External 7 | * @constant 8 | */ 9 | const windowSize = require('window-size') 10 | 11 | 12 | /** 13 | * Calculate the progress bars' text components width (fixed width) 14 | * @param {Number} targetFilenameLength - Target filename length 15 | * @returns {Number} - String length 16 | * 17 | * @private 18 | */ 19 | let predictTextWidth = (targetFilenameLength) => { 20 | // console.debug('predictTextWidth()') 21 | 22 | // TEXT LABEL WIDTH 23 | // 🎬 Rendering 12 24 | // BAR_FILENAME_LENGTH 10 25 | // | {percentagePad}% | ETA {etaTimecode} 20 26 | 27 | const barTextWidth = 12 + targetFilenameLength + 20 28 | 29 | const correctionFactor = 4 30 | 31 | return barTextWidth - correctionFactor 32 | } 33 | 34 | /** 35 | * Calculate the progress bars' beam width (variable width) 36 | * @param {Number} targetFilenameLength - Target filename length 37 | * @param {Number} targetBarBeamRatio - Target bar beam ratio 38 | * @returns {Number} - String length 39 | * 40 | * @private 41 | */ 42 | let predictBeamWidth = (targetFilenameLength, targetBarBeamRatio) => { 43 | // console.debug('predictBeamWidth()') 44 | 45 | const barBeamWidth = (windowSize.get().width - predictTextWidth(targetFilenameLength)) * targetBarBeamRatio 46 | 47 | return Math.floor(barBeamWidth) 48 | } 49 | 50 | /** 51 | * Calculate the progress bars' beam total width 52 | * @param {Number} targetFilenameLength - Target filename length 53 | * @param {Number} targetBarBeamRatio - Target bar beam ratio 54 | * @returns {Number} - String length 55 | */ 56 | let predictTotalWidth = (targetFilenameLength, targetBarBeamRatio) => { 57 | // console.debug('approximateBarWidth()') 58 | 59 | return predictTextWidth(targetFilenameLength) + predictBeamWidth(targetFilenameLength, targetBarBeamRatio) 60 | } 61 | 62 | 63 | /** 64 | * @module predict-progressbar-width.js 65 | */ 66 | module.exports = { 67 | beam: predictBeamWidth, 68 | text: predictTextWidth, 69 | total: predictTotalWidth 70 | } 71 | 72 | -------------------------------------------------------------------------------- /lib/progress-bar.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | 4 | /** 5 | * Modules 6 | * Node 7 | * @constant 8 | */ 9 | const path = require('path') 10 | 11 | /** 12 | * Modules 13 | * External 14 | * @constant 15 | */ 16 | const appRootPath = require('app-root-path') 17 | appRootPath.setPath(path.join(__dirname, '..')) 18 | const CliProgress = require('@sidneys/cli-progress') 19 | const moment = require('moment') 20 | /* eslint-disable no-unused-vars */ 21 | const momentDurationFormat = require('moment-duration-format') 22 | /* eslint-enable */ 23 | 24 | /** 25 | * Modules 26 | * Internal 27 | * @constant 28 | */ 29 | const formatter = require('./formatter') 30 | const theme = require('./theme') 31 | 32 | /** 33 | * Timecode format 34 | * @constant 35 | * @default 36 | */ 37 | const etaFormat = 'HH:mm:ss' 38 | 39 | /** 40 | * Convert seconds into timecode format 41 | * @param {Number} seconds - Duration in seconds 42 | * @returns {String} - Timecode / HH:mm:ss 43 | */ 44 | let convertSecondsToTimecode = (seconds) => { 45 | // console.debug('convertSecondsToTimecode') 46 | 47 | return moment.duration(seconds, 'seconds').format(etaFormat, { trim: false }) 48 | } 49 | 50 | /** 51 | * Progress Bar Singleton 52 | * @external {CliProgress.Bar} 53 | */ 54 | let progressBar 55 | 56 | /** 57 | * Wrapper for progressBar constructor 58 | * @param {Object=} options - Options 59 | * @returns {CliProgress.Bar} - progressBar 60 | */ 61 | let createBar = (options) => { 62 | // console.debug('createProgressbar') 63 | 64 | const baseOptions = { 65 | format: `🎞 ${theme.filenameLabel('Rendering')} ${theme.filename('{filename}')} | ${theme.beam('{bar}')} ${theme.percentage('{percentagePad}%')} | ${theme.etaLabel('ETA')} ${theme.eta('{etaTimecode}')}`, 66 | fps: 20, 67 | barsize: 60, 68 | barCompleteChar: '\u2593', 69 | barIncompleteChar: '\u2591', 70 | etaBuffer: 64, 71 | hideCursor: true, 72 | stream: process.stdout, 73 | align: 'center', 74 | stopOnComplete: true, 75 | clearOnComplete: false 76 | } 77 | 78 | const finalOptions = Object.assign(baseOptions, options) 79 | 80 | // DEBUG 81 | // console.debug('configuration', require('util').inspect(finalOptions, /** @type {InspectOptions} */ { showHidden: true, colors: true, compact: true })) 82 | 83 | return new CliProgress.Bar(finalOptions) 84 | } 85 | 86 | /** 87 | * Wrapper for progressBar.start 88 | * @param {Number} totalValue - Total value 89 | * @param {Object=} payload - Extra Payload 90 | * @param {String=} annotation - Annotation 91 | * @public 92 | */ 93 | let startBar = (totalValue, payload, annotation) => { 94 | // console.debug('startProgressbar') 95 | 96 | const startPayload = { 97 | etaTimecode: convertSecondsToTimecode(0), 98 | percentagePad: '00' 99 | } 100 | 101 | const finalPayload = Object.assign(startPayload, payload) 102 | 103 | // DEBUG 104 | // console.debug('startBar', 'payload', require('util').inspect(finalPayload, /** @type {InspectOptions} */ { showHidden: true, colors: true, compact: true })) 105 | 106 | progressBar.start(totalValue, 0, finalPayload, annotation) 107 | } 108 | 109 | /** 110 | * Wrapper for progressBar.update 111 | * @param {Number} currentValue - Current value 112 | * @param {Object=} payload - Payload 113 | * @param {String=} annotation - Annotation 114 | * @public 115 | */ 116 | let updateBar = (currentValue, payload, annotation) => { 117 | // console.debug('updateProgressbar') 118 | 119 | const updatePayload = { 120 | percentagePad: formatter.fractionToPercentage(progressBar.value / progressBar.total, ' '), 121 | etaTimecode: convertSecondsToTimecode(progressBar.eta.eta) 122 | } 123 | 124 | const finalPayload = Object.assign(updatePayload, payload) 125 | 126 | // DEBUG 127 | // console.debug('updateBar', 'payload', require('util').inspect(finalPayload, /** @type {InspectOptions} */ { showHidden: true, colors: true, compact: true })) 128 | 129 | progressBar.update(currentValue, finalPayload, annotation) 130 | } 131 | 132 | /** 133 | * @typedef {Object} progressBar 134 | * @extends {CliProgress} 135 | * @property {function} bar 136 | * @property {function} start 137 | * @property {function} update 138 | */ 139 | 140 | /** 141 | * @param {Object} options - Progress Bar options 142 | * @exports progressBar 143 | * @returns {Object} 144 | */ 145 | module.exports = (options) => { 146 | progressBar = createBar(options) 147 | 148 | return { 149 | bar: progressBar, 150 | start: startBar, 151 | update: updateBar 152 | } 153 | } 154 | -------------------------------------------------------------------------------- /lib/theme.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | 4 | /** 5 | * Modules 6 | * External 7 | * @constant 8 | */ 9 | const chalk = require('chalk') 10 | 11 | /** 12 | * @namespace chalk 13 | * @function chalk.rgb 14 | */ 15 | 16 | /** 17 | * @module theme 18 | */ 19 | module.exports = { 20 | filenameLabel: chalk.rgb(180, 255, 220), 21 | filename: chalk.rgb(0, 255, 155).bold, 22 | beam: chalk.rgb(64, 0, 255), 23 | percentage: chalk.rgb(226, 217, 255), 24 | etaLabel: chalk.rgb(255, 180, 150), 25 | eta: chalk.rgb(255, 55, 0).bold, 26 | prompt: chalk.rgb(255, 230, 0).bold, 27 | error: chalk.rgb(255, 0, 0).bold, 28 | warning: chalk.rgb(255, 165, 0).bold 29 | } 30 | 31 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ffmpeg-progressbar-cli", 3 | "version": "1.5.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.0.0", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", 10 | "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.0.0" 14 | } 15 | }, 16 | "@babel/highlight": { 17 | "version": "7.0.0", 18 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", 19 | "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", 20 | "dev": true, 21 | "requires": { 22 | "chalk": "^2.0.0", 23 | "esutils": "^2.0.2", 24 | "js-tokens": "^4.0.0" 25 | } 26 | }, 27 | "@sidneys/cli-progress": { 28 | "version": "2.2.0", 29 | "resolved": "https://registry.npmjs.org/@sidneys/cli-progress/-/cli-progress-2.2.0.tgz", 30 | "integrity": "sha512-JMIiVpZpDhH0HgHEpM4HH3SxE0OkwzOaCqpm3GxuHHG3bIsEju6pcvrA6FyANI6Tbt991hZnH/flJX+DNNmmwA==", 31 | "requires": { 32 | "colors": "^1.3.2", 33 | "string-width": "^2.1.1" 34 | } 35 | }, 36 | "acorn": { 37 | "version": "6.0.4", 38 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz", 39 | "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==", 40 | "dev": true 41 | }, 42 | "acorn-jsx": { 43 | "version": "5.0.0", 44 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.0.tgz", 45 | "integrity": "sha512-XkB50fn0MURDyww9+UYL3c1yLbOBz0ZFvrdYlGB8l+Ije1oSC75qAqrzSPjYQbdnQUzhlUGNKuesryAv0gxZOg==", 46 | "dev": true 47 | }, 48 | "ajv": { 49 | "version": "6.5.5", 50 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz", 51 | "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==", 52 | "dev": true, 53 | "requires": { 54 | "fast-deep-equal": "^2.0.1", 55 | "fast-json-stable-stringify": "^2.0.0", 56 | "json-schema-traverse": "^0.4.1", 57 | "uri-js": "^4.2.2" 58 | } 59 | }, 60 | "ansi-escapes": { 61 | "version": "3.1.0", 62 | "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", 63 | "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", 64 | "dev": true 65 | }, 66 | "ansi-styles": { 67 | "version": "3.2.1", 68 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 69 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 70 | "requires": { 71 | "color-convert": "^1.9.0" 72 | } 73 | }, 74 | "app-root-path": { 75 | "version": "2.1.0", 76 | "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.1.0.tgz", 77 | "integrity": "sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo=" 78 | }, 79 | "argparse": { 80 | "version": "1.0.10", 81 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 82 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 83 | "dev": true, 84 | "requires": { 85 | "sprintf-js": "~1.0.2" 86 | } 87 | }, 88 | "array-union": { 89 | "version": "1.0.2", 90 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", 91 | "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", 92 | "dev": true, 93 | "requires": { 94 | "array-uniq": "^1.0.1" 95 | } 96 | }, 97 | "array-uniq": { 98 | "version": "1.0.3", 99 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 100 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", 101 | "dev": true 102 | }, 103 | "babylon": { 104 | "version": "7.0.0-beta.19", 105 | "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz", 106 | "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==", 107 | "dev": true 108 | }, 109 | "balanced-match": { 110 | "version": "1.0.0", 111 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 112 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 113 | "dev": true 114 | }, 115 | "bluebird": { 116 | "version": "3.5.1", 117 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", 118 | "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", 119 | "dev": true 120 | }, 121 | "brace-expansion": { 122 | "version": "1.1.11", 123 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 124 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 125 | "dev": true, 126 | "requires": { 127 | "balanced-match": "^1.0.0", 128 | "concat-map": "0.0.1" 129 | } 130 | }, 131 | "caller-path": { 132 | "version": "0.1.0", 133 | "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", 134 | "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", 135 | "dev": true, 136 | "requires": { 137 | "callsites": "^0.2.0" 138 | } 139 | }, 140 | "callsites": { 141 | "version": "0.2.0", 142 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", 143 | "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", 144 | "dev": true 145 | }, 146 | "catharsis": { 147 | "version": "0.8.9", 148 | "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz", 149 | "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=", 150 | "dev": true, 151 | "requires": { 152 | "underscore-contrib": "~0.3.0" 153 | } 154 | }, 155 | "chalk": { 156 | "version": "2.4.1", 157 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", 158 | "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", 159 | "requires": { 160 | "ansi-styles": "^3.2.1", 161 | "escape-string-regexp": "^1.0.5", 162 | "supports-color": "^5.3.0" 163 | } 164 | }, 165 | "chardet": { 166 | "version": "0.7.0", 167 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 168 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", 169 | "dev": true 170 | }, 171 | "circular-json": { 172 | "version": "0.3.3", 173 | "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", 174 | "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", 175 | "dev": true 176 | }, 177 | "cli-cursor": { 178 | "version": "2.1.0", 179 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", 180 | "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", 181 | "dev": true, 182 | "requires": { 183 | "restore-cursor": "^2.0.0" 184 | } 185 | }, 186 | "cli-width": { 187 | "version": "2.2.0", 188 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", 189 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", 190 | "dev": true 191 | }, 192 | "color-convert": { 193 | "version": "1.9.2", 194 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", 195 | "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", 196 | "requires": { 197 | "color-name": "1.1.1" 198 | } 199 | }, 200 | "color-name": { 201 | "version": "1.1.1", 202 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", 203 | "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=" 204 | }, 205 | "colors": { 206 | "version": "1.3.2", 207 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.2.tgz", 208 | "integrity": "sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ==" 209 | }, 210 | "concat-map": { 211 | "version": "0.0.1", 212 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 213 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 214 | "dev": true 215 | }, 216 | "cross-spawn": { 217 | "version": "6.0.5", 218 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 219 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 220 | "dev": true, 221 | "requires": { 222 | "nice-try": "^1.0.4", 223 | "path-key": "^2.0.1", 224 | "semver": "^5.5.0", 225 | "shebang-command": "^1.2.0", 226 | "which": "^1.2.9" 227 | } 228 | }, 229 | "debug": { 230 | "version": "4.1.0", 231 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", 232 | "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", 233 | "dev": true, 234 | "requires": { 235 | "ms": "^2.1.1" 236 | } 237 | }, 238 | "deep-is": { 239 | "version": "0.1.3", 240 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 241 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 242 | "dev": true 243 | }, 244 | "define-property": { 245 | "version": "1.0.0", 246 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 247 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 248 | "requires": { 249 | "is-descriptor": "^1.0.0" 250 | } 251 | }, 252 | "del": { 253 | "version": "3.0.0", 254 | "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", 255 | "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", 256 | "dev": true, 257 | "requires": { 258 | "globby": "^6.1.0", 259 | "is-path-cwd": "^1.0.0", 260 | "is-path-in-cwd": "^1.0.0", 261 | "p-map": "^1.1.1", 262 | "pify": "^3.0.0", 263 | "rimraf": "^2.2.8" 264 | } 265 | }, 266 | "docdash": { 267 | "version": "1.0.0", 268 | "resolved": "https://registry.npmjs.org/docdash/-/docdash-1.0.0.tgz", 269 | "integrity": "sha512-HhK72PT4z55og8FDqskO/tTYXxU+LovRz+9pCDHLnUoPchkxjdIJidS+96LqW3CLrRdBmnkDRrcVrDFGLIluTw==", 270 | "dev": true 271 | }, 272 | "doctrine": { 273 | "version": "2.1.0", 274 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", 275 | "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", 276 | "dev": true, 277 | "requires": { 278 | "esutils": "^2.0.2" 279 | } 280 | }, 281 | "ellipsize": { 282 | "version": "0.1.0", 283 | "resolved": "https://registry.npmjs.org/ellipsize/-/ellipsize-0.1.0.tgz", 284 | "integrity": "sha1-nUNoLUS5GtFuvYQmisEDFwplU/g=" 285 | }, 286 | "escape-string-regexp": { 287 | "version": "1.0.5", 288 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 289 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 290 | }, 291 | "eslint": { 292 | "version": "5.9.0", 293 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.9.0.tgz", 294 | "integrity": "sha512-g4KWpPdqN0nth+goDNICNXGfJF7nNnepthp46CAlJoJtC5K/cLu3NgCM3AHu1CkJ5Hzt9V0Y0PBAO6Ay/gGb+w==", 295 | "dev": true, 296 | "requires": { 297 | "@babel/code-frame": "^7.0.0", 298 | "ajv": "^6.5.3", 299 | "chalk": "^2.1.0", 300 | "cross-spawn": "^6.0.5", 301 | "debug": "^4.0.1", 302 | "doctrine": "^2.1.0", 303 | "eslint-scope": "^4.0.0", 304 | "eslint-utils": "^1.3.1", 305 | "eslint-visitor-keys": "^1.0.0", 306 | "espree": "^4.0.0", 307 | "esquery": "^1.0.1", 308 | "esutils": "^2.0.2", 309 | "file-entry-cache": "^2.0.0", 310 | "functional-red-black-tree": "^1.0.1", 311 | "glob": "^7.1.2", 312 | "globals": "^11.7.0", 313 | "ignore": "^4.0.6", 314 | "imurmurhash": "^0.1.4", 315 | "inquirer": "^6.1.0", 316 | "is-resolvable": "^1.1.0", 317 | "js-yaml": "^3.12.0", 318 | "json-stable-stringify-without-jsonify": "^1.0.1", 319 | "levn": "^0.3.0", 320 | "lodash": "^4.17.5", 321 | "minimatch": "^3.0.4", 322 | "mkdirp": "^0.5.1", 323 | "natural-compare": "^1.4.0", 324 | "optionator": "^0.8.2", 325 | "path-is-inside": "^1.0.2", 326 | "pluralize": "^7.0.0", 327 | "progress": "^2.0.0", 328 | "regexpp": "^2.0.1", 329 | "require-uncached": "^1.0.3", 330 | "semver": "^5.5.1", 331 | "strip-ansi": "^4.0.0", 332 | "strip-json-comments": "^2.0.1", 333 | "table": "^5.0.2", 334 | "text-table": "^0.2.0" 335 | } 336 | }, 337 | "eslint-scope": { 338 | "version": "4.0.0", 339 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", 340 | "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", 341 | "dev": true, 342 | "requires": { 343 | "esrecurse": "^4.1.0", 344 | "estraverse": "^4.1.1" 345 | } 346 | }, 347 | "eslint-utils": { 348 | "version": "1.3.1", 349 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", 350 | "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", 351 | "dev": true 352 | }, 353 | "eslint-visitor-keys": { 354 | "version": "1.0.0", 355 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", 356 | "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", 357 | "dev": true 358 | }, 359 | "espree": { 360 | "version": "4.1.0", 361 | "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", 362 | "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", 363 | "dev": true, 364 | "requires": { 365 | "acorn": "^6.0.2", 366 | "acorn-jsx": "^5.0.0", 367 | "eslint-visitor-keys": "^1.0.0" 368 | } 369 | }, 370 | "esprima": { 371 | "version": "4.0.1", 372 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 373 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 374 | "dev": true 375 | }, 376 | "esquery": { 377 | "version": "1.0.1", 378 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", 379 | "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", 380 | "dev": true, 381 | "requires": { 382 | "estraverse": "^4.0.0" 383 | } 384 | }, 385 | "esrecurse": { 386 | "version": "4.2.1", 387 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", 388 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", 389 | "dev": true, 390 | "requires": { 391 | "estraverse": "^4.1.0" 392 | } 393 | }, 394 | "estraverse": { 395 | "version": "4.2.0", 396 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", 397 | "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", 398 | "dev": true 399 | }, 400 | "esutils": { 401 | "version": "2.0.2", 402 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 403 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 404 | "dev": true 405 | }, 406 | "external-editor": { 407 | "version": "3.0.3", 408 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", 409 | "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", 410 | "dev": true, 411 | "requires": { 412 | "chardet": "^0.7.0", 413 | "iconv-lite": "^0.4.24", 414 | "tmp": "^0.0.33" 415 | } 416 | }, 417 | "fast-deep-equal": { 418 | "version": "2.0.1", 419 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", 420 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", 421 | "dev": true 422 | }, 423 | "fast-json-stable-stringify": { 424 | "version": "2.0.0", 425 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 426 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 427 | "dev": true 428 | }, 429 | "fast-levenshtein": { 430 | "version": "2.0.6", 431 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 432 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 433 | "dev": true 434 | }, 435 | "figures": { 436 | "version": "2.0.0", 437 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", 438 | "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", 439 | "dev": true, 440 | "requires": { 441 | "escape-string-regexp": "^1.0.5" 442 | } 443 | }, 444 | "file-entry-cache": { 445 | "version": "2.0.0", 446 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", 447 | "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", 448 | "dev": true, 449 | "requires": { 450 | "flat-cache": "^1.2.1", 451 | "object-assign": "^4.0.1" 452 | } 453 | }, 454 | "flat-cache": { 455 | "version": "1.3.2", 456 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.2.tgz", 457 | "integrity": "sha512-KByBY8c98sLUAGpnmjEdWTrtrLZRtZdwds+kAL/ciFXTCb7AZgqKsAnVnYFQj1hxepwO8JKN/8AsRWwLq+RK0A==", 458 | "dev": true, 459 | "requires": { 460 | "circular-json": "^0.3.1", 461 | "del": "^3.0.0", 462 | "graceful-fs": "^4.1.2", 463 | "write": "^0.2.1" 464 | } 465 | }, 466 | "fs.realpath": { 467 | "version": "1.0.0", 468 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 469 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 470 | "dev": true 471 | }, 472 | "functional-red-black-tree": { 473 | "version": "1.0.1", 474 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 475 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 476 | "dev": true 477 | }, 478 | "glob": { 479 | "version": "7.1.3", 480 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", 481 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", 482 | "dev": true, 483 | "requires": { 484 | "fs.realpath": "^1.0.0", 485 | "inflight": "^1.0.4", 486 | "inherits": "2", 487 | "minimatch": "^3.0.4", 488 | "once": "^1.3.0", 489 | "path-is-absolute": "^1.0.0" 490 | } 491 | }, 492 | "globals": { 493 | "version": "11.8.0", 494 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.8.0.tgz", 495 | "integrity": "sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==", 496 | "dev": true 497 | }, 498 | "globby": { 499 | "version": "6.1.0", 500 | "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", 501 | "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", 502 | "dev": true, 503 | "requires": { 504 | "array-union": "^1.0.1", 505 | "glob": "^7.0.3", 506 | "object-assign": "^4.0.1", 507 | "pify": "^2.0.0", 508 | "pinkie-promise": "^2.0.0" 509 | }, 510 | "dependencies": { 511 | "pify": { 512 | "version": "2.3.0", 513 | "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 514 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 515 | "dev": true 516 | } 517 | } 518 | }, 519 | "graceful-fs": { 520 | "version": "4.1.11", 521 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 522 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 523 | "dev": true 524 | }, 525 | "has-flag": { 526 | "version": "3.0.0", 527 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 528 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 529 | }, 530 | "iconv-lite": { 531 | "version": "0.4.24", 532 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 533 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 534 | "dev": true, 535 | "requires": { 536 | "safer-buffer": ">= 2.1.2 < 3" 537 | } 538 | }, 539 | "ignore": { 540 | "version": "4.0.6", 541 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 542 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 543 | "dev": true 544 | }, 545 | "imurmurhash": { 546 | "version": "0.1.4", 547 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 548 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 549 | "dev": true 550 | }, 551 | "inflight": { 552 | "version": "1.0.6", 553 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 554 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 555 | "dev": true, 556 | "requires": { 557 | "once": "^1.3.0", 558 | "wrappy": "1" 559 | } 560 | }, 561 | "inherits": { 562 | "version": "2.0.3", 563 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 564 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 565 | "dev": true 566 | }, 567 | "ini": { 568 | "version": "1.3.5", 569 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 570 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" 571 | }, 572 | "inquirer": { 573 | "version": "6.2.0", 574 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", 575 | "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", 576 | "dev": true, 577 | "requires": { 578 | "ansi-escapes": "^3.0.0", 579 | "chalk": "^2.0.0", 580 | "cli-cursor": "^2.1.0", 581 | "cli-width": "^2.0.0", 582 | "external-editor": "^3.0.0", 583 | "figures": "^2.0.0", 584 | "lodash": "^4.17.10", 585 | "mute-stream": "0.0.7", 586 | "run-async": "^2.2.0", 587 | "rxjs": "^6.1.0", 588 | "string-width": "^2.1.0", 589 | "strip-ansi": "^4.0.0", 590 | "through": "^2.3.6" 591 | } 592 | }, 593 | "is-accessor-descriptor": { 594 | "version": "1.0.0", 595 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 596 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 597 | "requires": { 598 | "kind-of": "^6.0.0" 599 | } 600 | }, 601 | "is-buffer": { 602 | "version": "1.1.6", 603 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 604 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" 605 | }, 606 | "is-data-descriptor": { 607 | "version": "1.0.0", 608 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 609 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 610 | "requires": { 611 | "kind-of": "^6.0.0" 612 | } 613 | }, 614 | "is-descriptor": { 615 | "version": "1.0.2", 616 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 617 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 618 | "requires": { 619 | "is-accessor-descriptor": "^1.0.0", 620 | "is-data-descriptor": "^1.0.0", 621 | "kind-of": "^6.0.2" 622 | } 623 | }, 624 | "is-fullwidth-code-point": { 625 | "version": "2.0.0", 626 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 627 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" 628 | }, 629 | "is-number": { 630 | "version": "3.0.0", 631 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 632 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 633 | "requires": { 634 | "kind-of": "^3.0.2" 635 | }, 636 | "dependencies": { 637 | "kind-of": { 638 | "version": "3.2.2", 639 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 640 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 641 | "requires": { 642 | "is-buffer": "^1.1.5" 643 | } 644 | } 645 | } 646 | }, 647 | "is-path-cwd": { 648 | "version": "1.0.0", 649 | "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", 650 | "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", 651 | "dev": true 652 | }, 653 | "is-path-in-cwd": { 654 | "version": "1.0.1", 655 | "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", 656 | "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", 657 | "dev": true, 658 | "requires": { 659 | "is-path-inside": "^1.0.0" 660 | } 661 | }, 662 | "is-path-inside": { 663 | "version": "1.0.1", 664 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", 665 | "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", 666 | "dev": true, 667 | "requires": { 668 | "path-is-inside": "^1.0.1" 669 | } 670 | }, 671 | "is-promise": { 672 | "version": "2.1.0", 673 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 674 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", 675 | "dev": true 676 | }, 677 | "is-resolvable": { 678 | "version": "1.1.0", 679 | "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", 680 | "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", 681 | "dev": true 682 | }, 683 | "isexe": { 684 | "version": "2.0.0", 685 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 686 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 687 | }, 688 | "js-tokens": { 689 | "version": "4.0.0", 690 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 691 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 692 | "dev": true 693 | }, 694 | "js-yaml": { 695 | "version": "3.12.0", 696 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", 697 | "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", 698 | "dev": true, 699 | "requires": { 700 | "argparse": "^1.0.7", 701 | "esprima": "^4.0.0" 702 | } 703 | }, 704 | "js2xmlparser": { 705 | "version": "3.0.0", 706 | "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz", 707 | "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=", 708 | "dev": true, 709 | "requires": { 710 | "xmlcreate": "^1.0.1" 711 | } 712 | }, 713 | "jsdoc": { 714 | "version": "3.5.5", 715 | "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz", 716 | "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==", 717 | "dev": true, 718 | "requires": { 719 | "babylon": "7.0.0-beta.19", 720 | "bluebird": "~3.5.0", 721 | "catharsis": "~0.8.9", 722 | "escape-string-regexp": "~1.0.5", 723 | "js2xmlparser": "~3.0.0", 724 | "klaw": "~2.0.0", 725 | "marked": "~0.3.6", 726 | "mkdirp": "~0.5.1", 727 | "requizzle": "~0.2.1", 728 | "strip-json-comments": "~2.0.1", 729 | "taffydb": "2.6.2", 730 | "underscore": "~1.8.3" 731 | } 732 | }, 733 | "json-schema-traverse": { 734 | "version": "0.4.1", 735 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 736 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 737 | "dev": true 738 | }, 739 | "json-stable-stringify-without-jsonify": { 740 | "version": "1.0.1", 741 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 742 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 743 | "dev": true 744 | }, 745 | "kind-of": { 746 | "version": "6.0.2", 747 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", 748 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" 749 | }, 750 | "klaw": { 751 | "version": "2.0.0", 752 | "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", 753 | "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", 754 | "dev": true, 755 | "requires": { 756 | "graceful-fs": "^4.1.9" 757 | } 758 | }, 759 | "levn": { 760 | "version": "0.3.0", 761 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 762 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 763 | "dev": true, 764 | "requires": { 765 | "prelude-ls": "~1.1.2", 766 | "type-check": "~0.3.2" 767 | } 768 | }, 769 | "lodash": { 770 | "version": "4.17.11", 771 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", 772 | "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", 773 | "dev": true 774 | }, 775 | "marked": { 776 | "version": "0.3.19", 777 | "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", 778 | "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", 779 | "dev": true 780 | }, 781 | "mimic-fn": { 782 | "version": "1.2.0", 783 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", 784 | "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", 785 | "dev": true 786 | }, 787 | "minimatch": { 788 | "version": "3.0.4", 789 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 790 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 791 | "dev": true, 792 | "requires": { 793 | "brace-expansion": "^1.1.7" 794 | } 795 | }, 796 | "minimist": { 797 | "version": "0.0.8", 798 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 799 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 800 | "dev": true 801 | }, 802 | "mkdirp": { 803 | "version": "0.5.1", 804 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 805 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 806 | "dev": true, 807 | "requires": { 808 | "minimist": "0.0.8" 809 | } 810 | }, 811 | "moment": { 812 | "version": "2.22.2", 813 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", 814 | "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" 815 | }, 816 | "moment-duration-format": { 817 | "version": "2.2.2", 818 | "resolved": "https://registry.npmjs.org/moment-duration-format/-/moment-duration-format-2.2.2.tgz", 819 | "integrity": "sha1-uVdhLeJgFsmtnrYIfAVFc+USd3k=" 820 | }, 821 | "ms": { 822 | "version": "2.1.1", 823 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 824 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", 825 | "dev": true 826 | }, 827 | "mute-stream": { 828 | "version": "0.0.7", 829 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", 830 | "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", 831 | "dev": true 832 | }, 833 | "natural-compare": { 834 | "version": "1.4.0", 835 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 836 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 837 | "dev": true 838 | }, 839 | "nice-try": { 840 | "version": "1.0.5", 841 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 842 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", 843 | "dev": true 844 | }, 845 | "object-assign": { 846 | "version": "4.1.1", 847 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 848 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 849 | "dev": true 850 | }, 851 | "once": { 852 | "version": "1.4.0", 853 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 854 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 855 | "dev": true, 856 | "requires": { 857 | "wrappy": "1" 858 | } 859 | }, 860 | "onetime": { 861 | "version": "2.0.1", 862 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", 863 | "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", 864 | "dev": true, 865 | "requires": { 866 | "mimic-fn": "^1.0.0" 867 | } 868 | }, 869 | "optionator": { 870 | "version": "0.8.2", 871 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", 872 | "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", 873 | "dev": true, 874 | "requires": { 875 | "deep-is": "~0.1.3", 876 | "fast-levenshtein": "~2.0.4", 877 | "levn": "~0.3.0", 878 | "prelude-ls": "~1.1.2", 879 | "type-check": "~0.3.2", 880 | "wordwrap": "~1.0.0" 881 | } 882 | }, 883 | "os-tmpdir": { 884 | "version": "1.0.2", 885 | "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 886 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 887 | "dev": true 888 | }, 889 | "p-map": { 890 | "version": "1.2.0", 891 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", 892 | "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", 893 | "dev": true 894 | }, 895 | "path-is-absolute": { 896 | "version": "1.0.1", 897 | "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 898 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 899 | "dev": true 900 | }, 901 | "path-is-inside": { 902 | "version": "1.0.2", 903 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 904 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", 905 | "dev": true 906 | }, 907 | "path-key": { 908 | "version": "2.0.1", 909 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 910 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 911 | "dev": true 912 | }, 913 | "pify": { 914 | "version": "3.0.0", 915 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 916 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", 917 | "dev": true 918 | }, 919 | "pinkie": { 920 | "version": "2.0.4", 921 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 922 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 923 | "dev": true 924 | }, 925 | "pinkie-promise": { 926 | "version": "2.0.1", 927 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 928 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 929 | "dev": true, 930 | "requires": { 931 | "pinkie": "^2.0.0" 932 | } 933 | }, 934 | "pluralize": { 935 | "version": "7.0.0", 936 | "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", 937 | "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", 938 | "dev": true 939 | }, 940 | "prelude-ls": { 941 | "version": "1.1.2", 942 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 943 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 944 | "dev": true 945 | }, 946 | "progress": { 947 | "version": "2.0.1", 948 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", 949 | "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", 950 | "dev": true 951 | }, 952 | "punycode": { 953 | "version": "2.1.1", 954 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 955 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 956 | "dev": true 957 | }, 958 | "regexpp": { 959 | "version": "2.0.1", 960 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", 961 | "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", 962 | "dev": true 963 | }, 964 | "require-uncached": { 965 | "version": "1.0.3", 966 | "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", 967 | "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", 968 | "dev": true, 969 | "requires": { 970 | "caller-path": "^0.1.0", 971 | "resolve-from": "^1.0.0" 972 | } 973 | }, 974 | "requizzle": { 975 | "version": "0.2.1", 976 | "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz", 977 | "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=", 978 | "dev": true, 979 | "requires": { 980 | "underscore": "~1.6.0" 981 | }, 982 | "dependencies": { 983 | "underscore": { 984 | "version": "1.6.0", 985 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", 986 | "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", 987 | "dev": true 988 | } 989 | } 990 | }, 991 | "resolve-from": { 992 | "version": "1.0.1", 993 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", 994 | "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", 995 | "dev": true 996 | }, 997 | "restore-cursor": { 998 | "version": "2.0.0", 999 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", 1000 | "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", 1001 | "dev": true, 1002 | "requires": { 1003 | "onetime": "^2.0.0", 1004 | "signal-exit": "^3.0.2" 1005 | } 1006 | }, 1007 | "rimraf": { 1008 | "version": "2.6.2", 1009 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 1010 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", 1011 | "dev": true, 1012 | "requires": { 1013 | "glob": "^7.0.5" 1014 | } 1015 | }, 1016 | "run-async": { 1017 | "version": "2.3.0", 1018 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", 1019 | "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", 1020 | "dev": true, 1021 | "requires": { 1022 | "is-promise": "^2.1.0" 1023 | } 1024 | }, 1025 | "rxjs": { 1026 | "version": "6.3.3", 1027 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", 1028 | "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", 1029 | "dev": true, 1030 | "requires": { 1031 | "tslib": "^1.9.0" 1032 | } 1033 | }, 1034 | "safer-buffer": { 1035 | "version": "2.1.2", 1036 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1037 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1038 | "dev": true 1039 | }, 1040 | "semver": { 1041 | "version": "5.6.0", 1042 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", 1043 | "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", 1044 | "dev": true 1045 | }, 1046 | "shebang-command": { 1047 | "version": "1.2.0", 1048 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 1049 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 1050 | "dev": true, 1051 | "requires": { 1052 | "shebang-regex": "^1.0.0" 1053 | } 1054 | }, 1055 | "shebang-regex": { 1056 | "version": "1.0.0", 1057 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 1058 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 1059 | "dev": true 1060 | }, 1061 | "signal-exit": { 1062 | "version": "3.0.2", 1063 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 1064 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 1065 | "dev": true 1066 | }, 1067 | "slice-ansi": { 1068 | "version": "1.0.0", 1069 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", 1070 | "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", 1071 | "dev": true, 1072 | "requires": { 1073 | "is-fullwidth-code-point": "^2.0.0" 1074 | } 1075 | }, 1076 | "sprintf-js": { 1077 | "version": "1.0.3", 1078 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1079 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1080 | "dev": true 1081 | }, 1082 | "string-width": { 1083 | "version": "2.1.1", 1084 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 1085 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 1086 | "requires": { 1087 | "is-fullwidth-code-point": "^2.0.0", 1088 | "strip-ansi": "^4.0.0" 1089 | } 1090 | }, 1091 | "strip-ansi": { 1092 | "version": "4.0.0", 1093 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1094 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1095 | "requires": { 1096 | "ansi-regex": "^3.0.0" 1097 | }, 1098 | "dependencies": { 1099 | "ansi-regex": { 1100 | "version": "3.0.0", 1101 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 1102 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" 1103 | } 1104 | } 1105 | }, 1106 | "strip-json-comments": { 1107 | "version": "2.0.1", 1108 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1109 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 1110 | "dev": true 1111 | }, 1112 | "supports-color": { 1113 | "version": "5.4.0", 1114 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", 1115 | "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", 1116 | "requires": { 1117 | "has-flag": "^3.0.0" 1118 | } 1119 | }, 1120 | "table": { 1121 | "version": "5.1.0", 1122 | "resolved": "https://registry.npmjs.org/table/-/table-5.1.0.tgz", 1123 | "integrity": "sha512-e542in22ZLhD/fOIuXs/8yDZ9W61ltF8daM88rkRNtgTIct+vI2fTnAyu/Db2TCfEcI8i7mjZz6meLq0nW7TYg==", 1124 | "dev": true, 1125 | "requires": { 1126 | "ajv": "^6.5.3", 1127 | "lodash": "^4.17.10", 1128 | "slice-ansi": "1.0.0", 1129 | "string-width": "^2.1.1" 1130 | } 1131 | }, 1132 | "taffydb": { 1133 | "version": "2.6.2", 1134 | "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", 1135 | "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", 1136 | "dev": true 1137 | }, 1138 | "text-table": { 1139 | "version": "0.2.0", 1140 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1141 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 1142 | "dev": true 1143 | }, 1144 | "through": { 1145 | "version": "2.3.8", 1146 | "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", 1147 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 1148 | "dev": true 1149 | }, 1150 | "tmp": { 1151 | "version": "0.0.33", 1152 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 1153 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 1154 | "dev": true, 1155 | "requires": { 1156 | "os-tmpdir": "~1.0.2" 1157 | } 1158 | }, 1159 | "tslib": { 1160 | "version": "1.9.3", 1161 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", 1162 | "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", 1163 | "dev": true 1164 | }, 1165 | "type-check": { 1166 | "version": "0.3.2", 1167 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 1168 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 1169 | "dev": true, 1170 | "requires": { 1171 | "prelude-ls": "~1.1.2" 1172 | } 1173 | }, 1174 | "underscore": { 1175 | "version": "1.8.3", 1176 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", 1177 | "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", 1178 | "dev": true 1179 | }, 1180 | "underscore-contrib": { 1181 | "version": "0.3.0", 1182 | "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz", 1183 | "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=", 1184 | "dev": true, 1185 | "requires": { 1186 | "underscore": "1.6.0" 1187 | }, 1188 | "dependencies": { 1189 | "underscore": { 1190 | "version": "1.6.0", 1191 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", 1192 | "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", 1193 | "dev": true 1194 | } 1195 | } 1196 | }, 1197 | "uri-js": { 1198 | "version": "4.2.2", 1199 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 1200 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 1201 | "dev": true, 1202 | "requires": { 1203 | "punycode": "^2.1.0" 1204 | } 1205 | }, 1206 | "which": { 1207 | "version": "1.3.1", 1208 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1209 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1210 | "requires": { 1211 | "isexe": "^2.0.0" 1212 | } 1213 | }, 1214 | "window-size": { 1215 | "version": "1.1.1", 1216 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-1.1.1.tgz", 1217 | "integrity": "sha512-5D/9vujkmVQ7pSmc0SCBmHXbkv6eaHwXEx65MywhmUMsI8sGqJ972APq1lotfcwMKPFLuCFfL8xGHLIp7jaBmA==", 1218 | "requires": { 1219 | "define-property": "^1.0.0", 1220 | "is-number": "^3.0.0" 1221 | } 1222 | }, 1223 | "wordwrap": { 1224 | "version": "1.0.0", 1225 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 1226 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 1227 | "dev": true 1228 | }, 1229 | "wrappy": { 1230 | "version": "1.0.2", 1231 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1232 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1233 | "dev": true 1234 | }, 1235 | "write": { 1236 | "version": "0.2.1", 1237 | "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", 1238 | "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", 1239 | "dev": true, 1240 | "requires": { 1241 | "mkdirp": "^0.5.1" 1242 | } 1243 | }, 1244 | "xmlcreate": { 1245 | "version": "1.0.2", 1246 | "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz", 1247 | "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=", 1248 | "dev": true 1249 | } 1250 | } 1251 | } 1252 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ffmpeg-progressbar-cli", 3 | "version": "1.5.0", 4 | "description": "A colored progress bar for FFmpeg. Simply use `ffmpeg-bar` instead of `ffmpeg`.", 5 | "license": "MIT", 6 | "homepage": "https://github.com/sidneys/ffmpeg-progressbar-cli", 7 | "author": { 8 | "name": "sidneys", 9 | "email": "sidneys.github.io@outlook.com", 10 | "url": "https://sidneys.github.io" 11 | }, 12 | "repository": { 13 | "type": "git", 14 | "url": "https://github.com/sidneys/ffmpeg-progressbar-cli.git" 15 | }, 16 | "bugs": { 17 | "url": "https://github.com/sidneys/ffmpeg-progressbar-cli/issues" 18 | }, 19 | "engines": { 20 | "node": ">=8.11.3" 21 | }, 22 | "os": [ 23 | "darwin", 24 | "win32", 25 | "linux" 26 | ], 27 | "keywords": [ 28 | "FFmpeg", 29 | "progress bar", 30 | "colored", 31 | "media", 32 | "commandline", 33 | "terminal", 34 | "cli", 35 | "video", 36 | "conversion" 37 | ], 38 | "preferGlobal": true, 39 | "dependencies": { 40 | "@sidneys/cli-progress": "^2.2.0", 41 | "app-root-path": "^2.1.0", 42 | "chalk": "^2.4.1", 43 | "ellipsize": "^0.1.0", 44 | "ini": "^1.3.5", 45 | "moment": "^2.22.2", 46 | "moment-duration-format": "^2.2.2", 47 | "string-width": "^2.1.1", 48 | "which": "^1.3.1", 49 | "window-size": "^1.1.1" 50 | }, 51 | "devDependencies": { 52 | "docdash": "^1.0.0", 53 | "eslint": "^5.9.0", 54 | "jsdoc": "^3.5.5" 55 | }, 56 | "main": "./lib/main.js", 57 | "bin": { 58 | "ffmpeg-bar": "./lib/main.js" 59 | }, 60 | "scripts": { 61 | "docs": "jsdoc --verbose --configure .jsdoc.json", 62 | "start": "node ./lib/main.js" 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /resources/screencasts/screencast-1.svg: -------------------------------------------------------------------------------- 1 | user@home(/~)>user@home(/~)>ffmpeg-bar-i$HOME/Movies/input.mp4-map0-ccopyoutput_filename.mp4🔴output_fi….mp4|░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░|0%|ETA0s🔴output_fi….mp4|███░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░|4%|ETA0s🔴output_fi….mp4|████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░|20%|ETA7s🔴output_fi….mp4|██████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░|29%|ETA15s🔴output_fi….mp4|████████████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░|46%|ETA20s🔴output_fi….mp4|███████████████████████████████████████░░░░░░░░░░░░░░░░░░░░░░|63%|ETA20s🔴output_fi….mp4|█████████████████████████████████████████████████░░░░░░░░░░░░|80%|ETA10s🔴output_fi….mp4|█████████████████████████████████████████████████████████████|99%|ETA1s🔴output_fi….mp4|█████████████████████████████████████████████████████████████|100%|ETA1suser@home(/~)>ffmpeg-baruser@home(/~)>ffmpeg-bar-i$HOME/Movies/input.mp4user@home(/~)>ffmpeg-bar-i$HOME/Movies/input.mp4-map0-ccopy🔴output_fi….mp4|████████████████████████████████████████████████████████████░|99%|ETA1ss🔴output_fi….mp4|████████████████████████████████████████████████████████████░|99%|ETA1s -------------------------------------------------------------------------------- /resources/screencasts/screencast-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sidneys/ffmpeg-progressbar-cli/a3dbd3ad949a8daa24c03a684dfa98a8a5649cbf/resources/screencasts/screencast-2.gif -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.0.0" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" 8 | integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== 9 | dependencies: 10 | "@babel/highlight" "^7.0.0" 11 | 12 | "@babel/highlight@^7.0.0": 13 | version "7.0.0" 14 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" 15 | integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== 16 | dependencies: 17 | chalk "^2.0.0" 18 | esutils "^2.0.2" 19 | js-tokens "^4.0.0" 20 | 21 | "@sidneys/cli-progress@^2.2.0": 22 | version "2.2.0" 23 | resolved "https://registry.yarnpkg.com/@sidneys/cli-progress/-/cli-progress-2.2.0.tgz#c7fc07f927b2f8e1f3d809a056043a26e36ee812" 24 | dependencies: 25 | colors "^1.3.2" 26 | string-width "^2.1.1" 27 | 28 | acorn-jsx@^4.1.1: 29 | version "4.1.1" 30 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-4.1.1.tgz#e8e41e48ea2fe0c896740610ab6a4ffd8add225e" 31 | dependencies: 32 | acorn "^5.0.3" 33 | 34 | acorn@^5.0.3, acorn@^5.6.0: 35 | version "5.7.1" 36 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8" 37 | 38 | ajv@^6.5.3: 39 | version "6.5.5" 40 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.5.tgz#cf97cdade71c6399a92c6d6c4177381291b781a1" 41 | integrity sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg== 42 | dependencies: 43 | fast-deep-equal "^2.0.1" 44 | fast-json-stable-stringify "^2.0.0" 45 | json-schema-traverse "^0.4.1" 46 | uri-js "^4.2.2" 47 | 48 | ansi-escapes@^3.0.0: 49 | version "3.1.0" 50 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" 51 | 52 | ansi-regex@^3.0.0: 53 | version "3.0.0" 54 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 55 | 56 | ansi-styles@^3.2.1: 57 | version "3.2.1" 58 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 59 | dependencies: 60 | color-convert "^1.9.0" 61 | 62 | app-root-path@^2.1.0: 63 | version "2.1.0" 64 | resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.1.0.tgz#98bf6599327ecea199309866e8140368fd2e646a" 65 | 66 | argparse@^1.0.7: 67 | version "1.0.10" 68 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 69 | dependencies: 70 | sprintf-js "~1.0.2" 71 | 72 | array-union@^1.0.1: 73 | version "1.0.2" 74 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" 75 | dependencies: 76 | array-uniq "^1.0.1" 77 | 78 | array-uniq@^1.0.1: 79 | version "1.0.3" 80 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" 81 | 82 | arrify@^1.0.0: 83 | version "1.0.1" 84 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 85 | 86 | babylon@7.0.0-beta.19: 87 | version "7.0.0-beta.19" 88 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.19.tgz#e928c7e807e970e0536b078ab3e0c48f9e052503" 89 | 90 | balanced-match@^1.0.0: 91 | version "1.0.0" 92 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 93 | 94 | bluebird@~3.5.0: 95 | version "3.5.1" 96 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" 97 | 98 | brace-expansion@^1.1.7: 99 | version "1.1.11" 100 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 101 | dependencies: 102 | balanced-match "^1.0.0" 103 | concat-map "0.0.1" 104 | 105 | caller-path@^0.1.0: 106 | version "0.1.0" 107 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" 108 | dependencies: 109 | callsites "^0.2.0" 110 | 111 | callsites@^0.2.0: 112 | version "0.2.0" 113 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" 114 | 115 | catharsis@~0.8.9: 116 | version "0.8.9" 117 | resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.8.9.tgz#98cc890ca652dd2ef0e70b37925310ff9e90fc8b" 118 | dependencies: 119 | underscore-contrib "~0.3.0" 120 | 121 | chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1: 122 | version "2.4.1" 123 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" 124 | dependencies: 125 | ansi-styles "^3.2.1" 126 | escape-string-regexp "^1.0.5" 127 | supports-color "^5.3.0" 128 | 129 | chardet@^0.7.0: 130 | version "0.7.0" 131 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" 132 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== 133 | 134 | circular-json@^0.3.1: 135 | version "0.3.3" 136 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" 137 | 138 | cli-cursor@^2.1.0: 139 | version "2.1.0" 140 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" 141 | dependencies: 142 | restore-cursor "^2.0.0" 143 | 144 | cli-width@^2.0.0: 145 | version "2.2.0" 146 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" 147 | 148 | color-convert@^1.9.0: 149 | version "1.9.2" 150 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147" 151 | dependencies: 152 | color-name "1.1.1" 153 | 154 | color-name@1.1.1: 155 | version "1.1.1" 156 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" 157 | 158 | colors@^1.3.2: 159 | version "1.3.2" 160 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.2.tgz#2df8ff573dfbf255af562f8ce7181d6b971a359b" 161 | 162 | concat-map@0.0.1: 163 | version "0.0.1" 164 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 165 | 166 | cross-spawn@^6.0.5: 167 | version "6.0.5" 168 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 169 | dependencies: 170 | nice-try "^1.0.4" 171 | path-key "^2.0.1" 172 | semver "^5.5.0" 173 | shebang-command "^1.2.0" 174 | which "^1.2.9" 175 | 176 | debug@^4.0.1: 177 | version "4.1.0" 178 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87" 179 | integrity sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg== 180 | dependencies: 181 | ms "^2.1.1" 182 | 183 | deep-is@~0.1.3: 184 | version "0.1.3" 185 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 186 | 187 | define-property@^1.0.0: 188 | version "1.0.0" 189 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" 190 | dependencies: 191 | is-descriptor "^1.0.0" 192 | 193 | del@^2.0.2: 194 | version "2.2.2" 195 | resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" 196 | dependencies: 197 | globby "^5.0.0" 198 | is-path-cwd "^1.0.0" 199 | is-path-in-cwd "^1.0.0" 200 | object-assign "^4.0.1" 201 | pify "^2.0.0" 202 | pinkie-promise "^2.0.0" 203 | rimraf "^2.2.8" 204 | 205 | docdash@^1.0.0: 206 | version "1.0.0" 207 | resolved "https://registry.yarnpkg.com/docdash/-/docdash-1.0.0.tgz#5b7df10fed3d341fc4416a8978c65ad561869d18" 208 | 209 | doctrine@^2.1.0: 210 | version "2.1.0" 211 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" 212 | dependencies: 213 | esutils "^2.0.2" 214 | 215 | ellipsize@^0.1.0: 216 | version "0.1.0" 217 | resolved "https://registry.yarnpkg.com/ellipsize/-/ellipsize-0.1.0.tgz#9d43682d44b91ad16ebd84268ac103170a6553f8" 218 | 219 | escape-string-regexp@^1.0.5, escape-string-regexp@~1.0.5: 220 | version "1.0.5" 221 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 222 | 223 | eslint-scope@^4.0.0: 224 | version "4.0.0" 225 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" 226 | dependencies: 227 | esrecurse "^4.1.0" 228 | estraverse "^4.1.1" 229 | 230 | eslint-utils@^1.3.1: 231 | version "1.3.1" 232 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" 233 | 234 | eslint-visitor-keys@^1.0.0: 235 | version "1.0.0" 236 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" 237 | 238 | eslint@^5.9.0: 239 | version "5.9.0" 240 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.9.0.tgz#b234b6d15ef84b5849c6de2af43195a2d59d408e" 241 | integrity sha512-g4KWpPdqN0nth+goDNICNXGfJF7nNnepthp46CAlJoJtC5K/cLu3NgCM3AHu1CkJ5Hzt9V0Y0PBAO6Ay/gGb+w== 242 | dependencies: 243 | "@babel/code-frame" "^7.0.0" 244 | ajv "^6.5.3" 245 | chalk "^2.1.0" 246 | cross-spawn "^6.0.5" 247 | debug "^4.0.1" 248 | doctrine "^2.1.0" 249 | eslint-scope "^4.0.0" 250 | eslint-utils "^1.3.1" 251 | eslint-visitor-keys "^1.0.0" 252 | espree "^4.0.0" 253 | esquery "^1.0.1" 254 | esutils "^2.0.2" 255 | file-entry-cache "^2.0.0" 256 | functional-red-black-tree "^1.0.1" 257 | glob "^7.1.2" 258 | globals "^11.7.0" 259 | ignore "^4.0.6" 260 | imurmurhash "^0.1.4" 261 | inquirer "^6.1.0" 262 | is-resolvable "^1.1.0" 263 | js-yaml "^3.12.0" 264 | json-stable-stringify-without-jsonify "^1.0.1" 265 | levn "^0.3.0" 266 | lodash "^4.17.5" 267 | minimatch "^3.0.4" 268 | mkdirp "^0.5.1" 269 | natural-compare "^1.4.0" 270 | optionator "^0.8.2" 271 | path-is-inside "^1.0.2" 272 | pluralize "^7.0.0" 273 | progress "^2.0.0" 274 | regexpp "^2.0.1" 275 | require-uncached "^1.0.3" 276 | semver "^5.5.1" 277 | strip-ansi "^4.0.0" 278 | strip-json-comments "^2.0.1" 279 | table "^5.0.2" 280 | text-table "^0.2.0" 281 | 282 | espree@^4.0.0: 283 | version "4.0.0" 284 | resolved "https://registry.yarnpkg.com/espree/-/espree-4.0.0.tgz#253998f20a0f82db5d866385799d912a83a36634" 285 | dependencies: 286 | acorn "^5.6.0" 287 | acorn-jsx "^4.1.1" 288 | 289 | esprima@^4.0.0: 290 | version "4.0.1" 291 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 292 | 293 | esquery@^1.0.1: 294 | version "1.0.1" 295 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" 296 | dependencies: 297 | estraverse "^4.0.0" 298 | 299 | esrecurse@^4.1.0: 300 | version "4.2.1" 301 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" 302 | dependencies: 303 | estraverse "^4.1.0" 304 | 305 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: 306 | version "4.2.0" 307 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 308 | 309 | esutils@^2.0.2: 310 | version "2.0.2" 311 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 312 | 313 | external-editor@^3.0.0: 314 | version "3.0.3" 315 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" 316 | integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== 317 | dependencies: 318 | chardet "^0.7.0" 319 | iconv-lite "^0.4.24" 320 | tmp "^0.0.33" 321 | 322 | fast-deep-equal@^2.0.1: 323 | version "2.0.1" 324 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" 325 | 326 | fast-json-stable-stringify@^2.0.0: 327 | version "2.0.0" 328 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 329 | 330 | fast-levenshtein@~2.0.4: 331 | version "2.0.6" 332 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 333 | 334 | figures@^2.0.0: 335 | version "2.0.0" 336 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" 337 | dependencies: 338 | escape-string-regexp "^1.0.5" 339 | 340 | file-entry-cache@^2.0.0: 341 | version "2.0.0" 342 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" 343 | dependencies: 344 | flat-cache "^1.2.1" 345 | object-assign "^4.0.1" 346 | 347 | flat-cache@^1.2.1: 348 | version "1.3.0" 349 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" 350 | dependencies: 351 | circular-json "^0.3.1" 352 | del "^2.0.2" 353 | graceful-fs "^4.1.2" 354 | write "^0.2.1" 355 | 356 | fs.realpath@^1.0.0: 357 | version "1.0.0" 358 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 359 | 360 | functional-red-black-tree@^1.0.1: 361 | version "1.0.1" 362 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 363 | 364 | glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: 365 | version "7.1.2" 366 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 367 | dependencies: 368 | fs.realpath "^1.0.0" 369 | inflight "^1.0.4" 370 | inherits "2" 371 | minimatch "^3.0.4" 372 | once "^1.3.0" 373 | path-is-absolute "^1.0.0" 374 | 375 | globals@^11.7.0: 376 | version "11.7.0" 377 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" 378 | 379 | globby@^5.0.0: 380 | version "5.0.0" 381 | resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" 382 | dependencies: 383 | array-union "^1.0.1" 384 | arrify "^1.0.0" 385 | glob "^7.0.3" 386 | object-assign "^4.0.1" 387 | pify "^2.0.0" 388 | pinkie-promise "^2.0.0" 389 | 390 | graceful-fs@^4.1.2, graceful-fs@^4.1.9: 391 | version "4.1.11" 392 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 393 | 394 | has-flag@^3.0.0: 395 | version "3.0.0" 396 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 397 | 398 | iconv-lite@^0.4.24: 399 | version "0.4.24" 400 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 401 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 402 | dependencies: 403 | safer-buffer ">= 2.1.2 < 3" 404 | 405 | ignore@^4.0.6: 406 | version "4.0.6" 407 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 408 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 409 | 410 | imurmurhash@^0.1.4: 411 | version "0.1.4" 412 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 413 | 414 | inflight@^1.0.4: 415 | version "1.0.6" 416 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 417 | dependencies: 418 | once "^1.3.0" 419 | wrappy "1" 420 | 421 | inherits@2: 422 | version "2.0.3" 423 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 424 | 425 | ini@^1.3.5: 426 | version "1.3.5" 427 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" 428 | 429 | inquirer@^6.1.0: 430 | version "6.2.0" 431 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.0.tgz#51adcd776f661369dc1e894859c2560a224abdd8" 432 | integrity sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg== 433 | dependencies: 434 | ansi-escapes "^3.0.0" 435 | chalk "^2.0.0" 436 | cli-cursor "^2.1.0" 437 | cli-width "^2.0.0" 438 | external-editor "^3.0.0" 439 | figures "^2.0.0" 440 | lodash "^4.17.10" 441 | mute-stream "0.0.7" 442 | run-async "^2.2.0" 443 | rxjs "^6.1.0" 444 | string-width "^2.1.0" 445 | strip-ansi "^4.0.0" 446 | through "^2.3.6" 447 | 448 | is-accessor-descriptor@^1.0.0: 449 | version "1.0.0" 450 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" 451 | dependencies: 452 | kind-of "^6.0.0" 453 | 454 | is-buffer@^1.1.5: 455 | version "1.1.6" 456 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 457 | 458 | is-data-descriptor@^1.0.0: 459 | version "1.0.0" 460 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" 461 | dependencies: 462 | kind-of "^6.0.0" 463 | 464 | is-descriptor@^1.0.0: 465 | version "1.0.2" 466 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" 467 | dependencies: 468 | is-accessor-descriptor "^1.0.0" 469 | is-data-descriptor "^1.0.0" 470 | kind-of "^6.0.2" 471 | 472 | is-fullwidth-code-point@^2.0.0: 473 | version "2.0.0" 474 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 475 | 476 | is-number@^3.0.0: 477 | version "3.0.0" 478 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 479 | dependencies: 480 | kind-of "^3.0.2" 481 | 482 | is-path-cwd@^1.0.0: 483 | version "1.0.0" 484 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" 485 | 486 | is-path-in-cwd@^1.0.0: 487 | version "1.0.1" 488 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" 489 | dependencies: 490 | is-path-inside "^1.0.0" 491 | 492 | is-path-inside@^1.0.0: 493 | version "1.0.1" 494 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" 495 | dependencies: 496 | path-is-inside "^1.0.1" 497 | 498 | is-promise@^2.1.0: 499 | version "2.1.0" 500 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" 501 | 502 | is-resolvable@^1.1.0: 503 | version "1.1.0" 504 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" 505 | 506 | isexe@^2.0.0: 507 | version "2.0.0" 508 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 509 | 510 | js-tokens@^4.0.0: 511 | version "4.0.0" 512 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 513 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 514 | 515 | js-yaml@^3.12.0: 516 | version "3.12.0" 517 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" 518 | integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== 519 | dependencies: 520 | argparse "^1.0.7" 521 | esprima "^4.0.0" 522 | 523 | js2xmlparser@~3.0.0: 524 | version "3.0.0" 525 | resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-3.0.0.tgz#3fb60eaa089c5440f9319f51760ccd07e2499733" 526 | dependencies: 527 | xmlcreate "^1.0.1" 528 | 529 | jsdoc@^3.5.5: 530 | version "3.5.5" 531 | resolved "https://registry.yarnpkg.com/jsdoc/-/jsdoc-3.5.5.tgz#484521b126e81904d632ff83ec9aaa096708fa4d" 532 | dependencies: 533 | babylon "7.0.0-beta.19" 534 | bluebird "~3.5.0" 535 | catharsis "~0.8.9" 536 | escape-string-regexp "~1.0.5" 537 | js2xmlparser "~3.0.0" 538 | klaw "~2.0.0" 539 | marked "~0.3.6" 540 | mkdirp "~0.5.1" 541 | requizzle "~0.2.1" 542 | strip-json-comments "~2.0.1" 543 | taffydb "2.6.2" 544 | underscore "~1.8.3" 545 | 546 | json-schema-traverse@^0.4.1: 547 | version "0.4.1" 548 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 549 | 550 | json-stable-stringify-without-jsonify@^1.0.1: 551 | version "1.0.1" 552 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 553 | 554 | kind-of@^3.0.2: 555 | version "3.2.2" 556 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 557 | dependencies: 558 | is-buffer "^1.1.5" 559 | 560 | kind-of@^6.0.0, kind-of@^6.0.2: 561 | version "6.0.2" 562 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" 563 | 564 | klaw@~2.0.0: 565 | version "2.0.0" 566 | resolved "https://registry.yarnpkg.com/klaw/-/klaw-2.0.0.tgz#59c128e0dc5ce410201151194eeb9cbf858650f6" 567 | dependencies: 568 | graceful-fs "^4.1.9" 569 | 570 | levn@^0.3.0, levn@~0.3.0: 571 | version "0.3.0" 572 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 573 | dependencies: 574 | prelude-ls "~1.1.2" 575 | type-check "~0.3.2" 576 | 577 | lodash@^4.17.10: 578 | version "4.17.11" 579 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" 580 | integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== 581 | 582 | lodash@^4.17.5: 583 | version "4.17.10" 584 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" 585 | 586 | marked@~0.3.6: 587 | version "0.3.19" 588 | resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" 589 | 590 | mimic-fn@^1.0.0: 591 | version "1.2.0" 592 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 593 | 594 | minimatch@^3.0.4: 595 | version "3.0.4" 596 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 597 | dependencies: 598 | brace-expansion "^1.1.7" 599 | 600 | minimist@0.0.8: 601 | version "0.0.8" 602 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 603 | 604 | mkdirp@^0.5.1, mkdirp@~0.5.1: 605 | version "0.5.1" 606 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 607 | dependencies: 608 | minimist "0.0.8" 609 | 610 | moment-duration-format@^2.2.2: 611 | version "2.2.2" 612 | resolved "https://registry.yarnpkg.com/moment-duration-format/-/moment-duration-format-2.2.2.tgz#b957612de26016c9ad9eb6087c054573e5127779" 613 | 614 | moment@^2.22.2: 615 | version "2.22.2" 616 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66" 617 | 618 | ms@^2.1.1: 619 | version "2.1.1" 620 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 621 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 622 | 623 | mute-stream@0.0.7: 624 | version "0.0.7" 625 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" 626 | 627 | natural-compare@^1.4.0: 628 | version "1.4.0" 629 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 630 | 631 | nice-try@^1.0.4: 632 | version "1.0.4" 633 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" 634 | 635 | object-assign@^4.0.1: 636 | version "4.1.1" 637 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 638 | 639 | once@^1.3.0: 640 | version "1.4.0" 641 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 642 | dependencies: 643 | wrappy "1" 644 | 645 | onetime@^2.0.0: 646 | version "2.0.1" 647 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" 648 | dependencies: 649 | mimic-fn "^1.0.0" 650 | 651 | optionator@^0.8.2: 652 | version "0.8.2" 653 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 654 | dependencies: 655 | deep-is "~0.1.3" 656 | fast-levenshtein "~2.0.4" 657 | levn "~0.3.0" 658 | prelude-ls "~1.1.2" 659 | type-check "~0.3.2" 660 | wordwrap "~1.0.0" 661 | 662 | os-tmpdir@~1.0.2: 663 | version "1.0.2" 664 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 665 | 666 | path-is-absolute@^1.0.0: 667 | version "1.0.1" 668 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 669 | 670 | path-is-inside@^1.0.1, path-is-inside@^1.0.2: 671 | version "1.0.2" 672 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 673 | 674 | path-key@^2.0.1: 675 | version "2.0.1" 676 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 677 | 678 | pify@^2.0.0: 679 | version "2.3.0" 680 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 681 | 682 | pinkie-promise@^2.0.0: 683 | version "2.0.1" 684 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 685 | dependencies: 686 | pinkie "^2.0.0" 687 | 688 | pinkie@^2.0.0: 689 | version "2.0.4" 690 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 691 | 692 | pluralize@^7.0.0: 693 | version "7.0.0" 694 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" 695 | 696 | prelude-ls@~1.1.2: 697 | version "1.1.2" 698 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 699 | 700 | progress@^2.0.0: 701 | version "2.0.0" 702 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" 703 | 704 | punycode@^2.1.0: 705 | version "2.1.1" 706 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 707 | 708 | regexpp@^2.0.1: 709 | version "2.0.1" 710 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" 711 | integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== 712 | 713 | require-uncached@^1.0.3: 714 | version "1.0.3" 715 | resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" 716 | dependencies: 717 | caller-path "^0.1.0" 718 | resolve-from "^1.0.0" 719 | 720 | requizzle@~0.2.1: 721 | version "0.2.1" 722 | resolved "https://registry.yarnpkg.com/requizzle/-/requizzle-0.2.1.tgz#6943c3530c4d9a7e46f1cddd51c158fc670cdbde" 723 | dependencies: 724 | underscore "~1.6.0" 725 | 726 | resolve-from@^1.0.0: 727 | version "1.0.1" 728 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" 729 | 730 | restore-cursor@^2.0.0: 731 | version "2.0.0" 732 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" 733 | dependencies: 734 | onetime "^2.0.0" 735 | signal-exit "^3.0.2" 736 | 737 | rimraf@^2.2.8: 738 | version "2.6.2" 739 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 740 | dependencies: 741 | glob "^7.0.5" 742 | 743 | run-async@^2.2.0: 744 | version "2.3.0" 745 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" 746 | dependencies: 747 | is-promise "^2.1.0" 748 | 749 | rxjs@^6.1.0: 750 | version "6.3.3" 751 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55" 752 | integrity sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw== 753 | dependencies: 754 | tslib "^1.9.0" 755 | 756 | "safer-buffer@>= 2.1.2 < 3": 757 | version "2.1.2" 758 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 759 | 760 | semver@^5.5.0: 761 | version "5.5.0" 762 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" 763 | 764 | semver@^5.5.1: 765 | version "5.6.0" 766 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" 767 | integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== 768 | 769 | shebang-command@^1.2.0: 770 | version "1.2.0" 771 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 772 | dependencies: 773 | shebang-regex "^1.0.0" 774 | 775 | shebang-regex@^1.0.0: 776 | version "1.0.0" 777 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 778 | 779 | signal-exit@^3.0.2: 780 | version "3.0.2" 781 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 782 | 783 | slice-ansi@1.0.0: 784 | version "1.0.0" 785 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" 786 | dependencies: 787 | is-fullwidth-code-point "^2.0.0" 788 | 789 | sprintf-js@~1.0.2: 790 | version "1.0.3" 791 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 792 | 793 | string-width@^2.1.0, string-width@^2.1.1: 794 | version "2.1.1" 795 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 796 | dependencies: 797 | is-fullwidth-code-point "^2.0.0" 798 | strip-ansi "^4.0.0" 799 | 800 | strip-ansi@^4.0.0: 801 | version "4.0.0" 802 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 803 | dependencies: 804 | ansi-regex "^3.0.0" 805 | 806 | strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: 807 | version "2.0.1" 808 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 809 | 810 | supports-color@^5.3.0: 811 | version "5.4.0" 812 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" 813 | dependencies: 814 | has-flag "^3.0.0" 815 | 816 | table@^5.0.2: 817 | version "5.1.0" 818 | resolved "https://registry.yarnpkg.com/table/-/table-5.1.0.tgz#69a54644f6f01ad1628f8178715b408dc6bf11f7" 819 | integrity sha512-e542in22ZLhD/fOIuXs/8yDZ9W61ltF8daM88rkRNtgTIct+vI2fTnAyu/Db2TCfEcI8i7mjZz6meLq0nW7TYg== 820 | dependencies: 821 | ajv "^6.5.3" 822 | lodash "^4.17.10" 823 | slice-ansi "1.0.0" 824 | string-width "^2.1.1" 825 | 826 | taffydb@2.6.2: 827 | version "2.6.2" 828 | resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.6.2.tgz#7cbcb64b5a141b6a2efc2c5d2c67b4e150b2a268" 829 | 830 | text-table@^0.2.0: 831 | version "0.2.0" 832 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 833 | 834 | through@^2.3.6: 835 | version "2.3.8" 836 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 837 | 838 | tmp@^0.0.33: 839 | version "0.0.33" 840 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 841 | dependencies: 842 | os-tmpdir "~1.0.2" 843 | 844 | tslib@^1.9.0: 845 | version "1.9.3" 846 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" 847 | integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== 848 | 849 | type-check@~0.3.2: 850 | version "0.3.2" 851 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 852 | dependencies: 853 | prelude-ls "~1.1.2" 854 | 855 | underscore-contrib@~0.3.0: 856 | version "0.3.0" 857 | resolved "https://registry.yarnpkg.com/underscore-contrib/-/underscore-contrib-0.3.0.tgz#665b66c24783f8fa2b18c9f8cbb0e2c7d48c26c7" 858 | dependencies: 859 | underscore "1.6.0" 860 | 861 | underscore@1.6.0, underscore@~1.6.0: 862 | version "1.6.0" 863 | resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" 864 | 865 | underscore@~1.8.3: 866 | version "1.8.3" 867 | resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" 868 | 869 | uri-js@^4.2.2: 870 | version "4.2.2" 871 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 872 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 873 | dependencies: 874 | punycode "^2.1.0" 875 | 876 | which@^1.2.9, which@^1.3.1: 877 | version "1.3.1" 878 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 879 | dependencies: 880 | isexe "^2.0.0" 881 | 882 | window-size@^1.1.1: 883 | version "1.1.1" 884 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-1.1.1.tgz#9858586580ada78ab26ecd6978a6e03115c1af20" 885 | dependencies: 886 | define-property "^1.0.0" 887 | is-number "^3.0.0" 888 | 889 | wordwrap@~1.0.0: 890 | version "1.0.0" 891 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 892 | 893 | wrappy@1: 894 | version "1.0.2" 895 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 896 | 897 | write@^0.2.1: 898 | version "0.2.1" 899 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" 900 | dependencies: 901 | mkdirp "^0.5.1" 902 | 903 | xmlcreate@^1.0.1: 904 | version "1.0.2" 905 | resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-1.0.2.tgz#fa6bf762a60a413fb3dd8f4b03c5b269238d308f" 906 | --------------------------------------------------------------------------------