├── .eslintignore ├── .eslintrc ├── .gitignore ├── .prettierrc ├── CHANGELOG.md ├── README.md ├── package.json ├── src ├── estimates.js ├── humanize.js ├── index.js ├── logger.js ├── progress.js └── theme.js ├── types ├── index.d.ts ├── test.ts └── tsconfig.json └── yarn.lock /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | yarn.lock -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["plugin:prettier/recommended"], 3 | "parser": "babel-eslint" 4 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_STORE 2 | node_modules 3 | package-lock.json 4 | yarn-error.log -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true 3 | } -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # 0.3.1 2 | * Readme changes 3 | 4 | # 0.3.0 5 | * Updated TypeScript definitions. ([PR 17](https://github.com/bvaughn/progress-estimator/pull/17)) 6 | 7 | # 0.2.2 8 | * Updated README for npmjs.com. (No actual code changes.) 9 | 10 | # 0.2.1 11 | * Gracefully handle `null` or `undefined` options parameter passed to logger function. 12 | 13 | # 0.2.0 14 | * Configuration function returns a configured logger, enabling custom configurations for multiple logger use cases. 15 | * Configuration supports optional custom logging function. Default implementation will continue to use the [`log-update`](https://www.npmjs.com/package/log-update) package. 16 | * Log function replaces third parameter (previously the estimated duration) with an optional configuration object supporting multiple values (estimated duration and unique id). 17 | 18 | # 0.1.3 19 | * Moved `clearInterval` into `finally` block to ensure proper cleanup if a Promise throws. 20 | 21 | # 0.1.2 22 | * Moved percentage label (e.g. "35%") inside of progress bar to save horizontal space. 23 | * Changed format of time from estimated duration (e.g. "3.2 sec estimated") to include elapsed time (e.g. "1.5s, estimated 3.2s"). This new label format was inspired by the Jest test runner. 24 | * Added `estimateExceeded` key to `theme` for when elapsed duration exceeds the estimated duration. 25 | * Added TypeScript type defs to published lib. 26 | 27 | # 0.1.1 28 | * Fixed conversion bug for hour units. 29 | 30 | # 0.1.0 31 | * Initial release. 32 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # progress-estimator 2 | 3 | Logs a progress bar and estimation for how long a Promise will take to complete. This library tracks previous durations in order to provide more accurate estimates over time. 4 | 5 | ![Demo](https://user-images.githubusercontent.com/29597/48986949-474e2400-f0cf-11e8-86d7-d201f8ad8eca.gif) 6 | 7 | ### 🎉 [Become a sponsor](https://github.com/sponsors/bvaughn/) or ☕ [Buy me a coffee](http://givebrian.coffee/) 8 | 9 | ## Installation 10 | 11 | ```shell 12 | # use npm 13 | npm install progress-estimator 14 | 15 | # use yarn 16 | yarn add progress-estimator 17 | ``` 18 | 19 | ## Usage example 20 | 21 | ```js 22 | const createLogger = require('progress-estimator'); 23 | const { join } = require('path'); 24 | 25 | // All configuration keys are optional, but it's recommended to specify a storage location. 26 | // Learn more about configuration options below. 27 | const logger = createLogger({ 28 | storagePath: join(__dirname, '.progress-estimator'), 29 | }); 30 | 31 | async function run() { 32 | await logger(promiseOne, "This is a promise"); 33 | await logger( 34 | promiseTwo, 35 | "This is another promise. I think it will take about 1 second", 36 | { 37 | estimate: 1000 38 | } 39 | ); 40 | } 41 | ``` 42 | ## API 43 | 44 | ### `createLogger(optionalConfiguration)` 45 | 46 | This method is the default package export. It creates and configures a logger function (documented below). The following configuration options are supported. (They apply only to the logger instance that's returned.) 47 | 48 | | name | type | Description | 49 | | --- | --- | --- | 50 | | `logFunction` | Function | Custom logging function. Defaults to [`log-update`](https://npmjs.com/package/log-update). Must define `.done()` and `.clear()` methods. | 51 | | `spinner` | object | Which spinner from the [`cli-spinners`](https://npmjs.com/package/cli-spinners) package to use. Defaults to `dots`. | 52 | | `storagePath` | string | Where to record durations between runs. Defaults to [`os.tmpdir()`](https://nodejs.org/api/os.html). | 53 | | `theme` | object | Custom [`chalk`](https://npmjs.com/package/chalk) theme. Look to the [default theme](https://github.com/bvaughn/progress-estimator/blob/master/src/theme.js) for a list of required keys. | 54 | 55 | ### `logger(promise, labelString, options)` 56 | 57 | This method logs a progress bar and estimated duration for a promise. It requires at least two parameters– a `Promise` and a label (e.g. "Running tests"). The label is SHA1 hashed in order to uniquely identify the promise. 58 | 59 | An optional third parameter can be provided as well with the following keys: 60 | 61 | | name | type | Description | 62 | | --- | --- | --- | 63 | | `estimate` | Number | Estimated duration of promise. (This value is used initially, until a history of actual durations have been recorded.) | 64 | | `id` | String | Uniquely identifies the promise. This value is needed if the label string is not guaranteed to be unique. | 65 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "progress-estimator", 3 | "version": "0.3.1", 4 | "description": "Animated progress bars with estimated durations", 5 | "author": "Brian Vaughn ", 6 | "license": "MIT", 7 | "main": "src/index.js", 8 | "types": "types/index.d.ts", 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/bvaughn/progress-estimator.git" 12 | }, 13 | "bugs": { 14 | "url": "https://github.com/bvaughn/progress-estimator/issues" 15 | }, 16 | "scripts": { 17 | "lint": "eslint 'src/**/*.js' && tsc --project types", 18 | "prettier": "prettier --write 'src/**/*.js' 'types/**/*.ts'" 19 | }, 20 | "files": [ 21 | "src", 22 | "types" 23 | ], 24 | "keywords": [ 25 | "ascii", 26 | "busy", 27 | "cli", 28 | "console", 29 | "duration", 30 | "idle", 31 | "indicator", 32 | "list", 33 | "loading", 34 | "progress", 35 | "promise", 36 | "task", 37 | "term", 38 | "terminal", 39 | "timing", 40 | "unicode", 41 | "wait" 42 | ], 43 | "dependencies": { 44 | "chalk": "^2.4.1", 45 | "cli-spinners": "^1.3.1", 46 | "humanize-duration": "^3.15.3", 47 | "log-update": "^2.3.0" 48 | }, 49 | "devDependencies": { 50 | "babel-eslint": "^10.0.1", 51 | "eslint": "^5.9.0", 52 | "eslint-config-prettier": "^3.3.0", 53 | "eslint-plugin-prettier": "^3.0.0", 54 | "prettier": "^1.15.2", 55 | "typescript": "^3.1.6" 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/estimates.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const { existsSync, mkdirSync, readFileSync, writeFileSync } = require('fs'); 4 | const { join } = require('path'); 5 | 6 | const getEstimate = (id, estimatedDuration, storagePath) => { 7 | const durations = getPreviousDurations(id, storagePath); 8 | 9 | if (durations.length < 3 && estimatedDuration) { 10 | durations.push(estimatedDuration); 11 | } 12 | 13 | if (durations.length > 0) { 14 | return ( 15 | durations.reduce((total, current) => total + current, 0) / 16 | durations.length 17 | ); 18 | } else { 19 | return estimatedDuration; 20 | } 21 | }; 22 | 23 | const getPreviousDurations = (id, storagePath) => { 24 | const path = join(storagePath, id); 25 | if (existsSync(path)) { 26 | return readFileSync(path, 'utf8') 27 | .split('\n') 28 | .filter(line => line) 29 | .map(line => Number.parseInt(line, 10)); 30 | } 31 | return []; 32 | }; 33 | 34 | const updateEstimate = (id, duration, storagePath) => { 35 | if (!existsSync(storagePath)) { 36 | mkdirSync(storagePath); 37 | } 38 | 39 | const durations = getPreviousDurations(id, storagePath); 40 | durations.push(duration); 41 | 42 | if (durations.length > 10) { 43 | durations.shift(); 44 | } 45 | 46 | const path = join(storagePath, id); 47 | writeFileSync(path, durations.join('\n')); 48 | }; 49 | 50 | module.exports = { 51 | getEstimate, 52 | updateEstimate 53 | }; 54 | -------------------------------------------------------------------------------- /src/humanize.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const MS_PER_SECOND = 1000; 4 | const MS_PER_MINUTE = 60 * MS_PER_SECOND; 5 | const MS_PER_HOUR = 60 * MS_PER_MINUTE; 6 | 7 | const humanizeActual = msActual => { 8 | let unit; 9 | if (msActual < MS_PER_SECOND) { 10 | msActual = Math.round(msActual); 11 | unit = 'ms'; 12 | } else if (msActual < MS_PER_MINUTE) { 13 | msActual = (msActual / MS_PER_SECOND).toFixed(1); 14 | unit = 'secs'; 15 | } else if (msActual < MS_PER_HOUR) { 16 | msActual = (msActual / MS_PER_MINUTE).toFixed(1); 17 | unit = 'mins'; 18 | } else { 19 | msActual = (msActual / MS_PER_HOUR).toFixed(1); 20 | unit = 'hours'; 21 | } 22 | 23 | if (msActual % 1 === 0) { 24 | return `${Math.round(msActual)} ${unit}`; 25 | } 26 | return `${msActual} ${unit}`; 27 | }; 28 | 29 | const humanizeRemaining = (msElapsed, msEstimated) => { 30 | let unit; 31 | if (msEstimated < MS_PER_SECOND) { 32 | msElapsed = Math.round(msElapsed); 33 | msEstimated = Math.round(msEstimated); 34 | unit = 'ms'; 35 | } else if (msEstimated < MS_PER_MINUTE) { 36 | msElapsed = (msElapsed / MS_PER_SECOND).toFixed(1); 37 | msEstimated = (msEstimated / MS_PER_SECOND).toFixed(1); 38 | unit = 's'; 39 | } else if (msEstimated < MS_PER_HOUR) { 40 | msElapsed = (msElapsed / MS_PER_MINUTE).toFixed(1); 41 | msEstimated = (msEstimated / MS_PER_MINUTE).toFixed(1); 42 | unit = 'm'; 43 | } else { 44 | msElapsed = (msElapsed / MS_PER_HOUR).toFixed(1); 45 | msEstimated = (msEstimated / MS_PER_HOUR).toFixed(1); 46 | unit = 'h'; 47 | } 48 | 49 | return `${msElapsed}${unit}, estimated ${msEstimated}${unit}`; 50 | }; 51 | 52 | module.exports = { 53 | humanizeActual, 54 | humanizeRemaining 55 | }; 56 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const { dots } = require('cli-spinners'); 4 | const logUpdate = require('log-update'); 5 | const { tmpdir } = require('os'); 6 | 7 | const configureLogger = require('./logger'); 8 | 9 | const defaultConfiguration = { 10 | logFunction: logUpdate, 11 | spinner: dots, 12 | storagePath: `${tmpdir()}/progress-estimator`, 13 | theme: require('./theme') 14 | }; 15 | 16 | const createLogger = optionalConfiguration => { 17 | return configureLogger({ 18 | ...defaultConfiguration, 19 | ...optionalConfiguration 20 | }); 21 | }; 22 | 23 | module.exports = createLogger; 24 | -------------------------------------------------------------------------------- /src/logger.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const { createHash } = require('crypto'); 4 | 5 | const { humanizeActual, humanizeRemaining } = require('./humanize'); 6 | const { getEstimate, updateEstimate } = require('./estimates'); 7 | const { getProgressBar } = require('./progress'); 8 | 9 | const configureLogger = configuration => { 10 | const { logFunction, spinner, storagePath, theme } = configuration; 11 | 12 | return async (promise, label, options) => { 13 | let { estimate, id } = options || {}; 14 | 15 | if (!id) { 16 | const shasum = createHash('sha1'); 17 | shasum.update(label); 18 | id = shasum.digest('hex'); 19 | } 20 | 21 | let intervalId; 22 | 23 | try { 24 | // Refine our estimate using previous durations. 25 | estimate = getEstimate(id, estimate, storagePath); 26 | 27 | const startTime = Date.now(); 28 | 29 | const { frames, interval } = spinner; 30 | 31 | let index = 0; 32 | 33 | intervalId = setInterval(() => { 34 | index = ++index % frames.length; 35 | 36 | let updateString = theme`{asciiInProgress ${ 37 | frames[index] 38 | }} {label ${label}}`; 39 | 40 | if (estimate > 0) { 41 | const elapsedTime = Date.now() - startTime; 42 | const remainingTime = estimate - elapsedTime; 43 | 44 | let humanizedEstimate = humanizeRemaining(elapsedTime, estimate); 45 | humanizedEstimate = 46 | remainingTime < 0 47 | ? theme.estimateExceeded(humanizedEstimate) 48 | : theme.estimate(humanizedEstimate); 49 | 50 | const progressBar = getProgressBar(elapsedTime / estimate, theme); 51 | 52 | updateString += theme` ${progressBar} {estimate ${humanizedEstimate}}`; 53 | } 54 | 55 | logFunction(updateString); 56 | }, interval); 57 | 58 | const returnValue = await promise; 59 | 60 | const actualDuration = Date.now() - startTime; 61 | 62 | // Record the actual duration for later. 63 | // It will help us predict future runs more accurately. 64 | updateEstimate(id, actualDuration, storagePath); 65 | 66 | const humanizedActual = humanizeActual(actualDuration); 67 | 68 | logFunction( 69 | theme`{asciiCompleted ✓} {label ${label}} {estimate ${humanizedActual}}` 70 | ); 71 | logFunction.done(); 72 | 73 | return returnValue; 74 | } catch (error) { 75 | logFunction.clear(); 76 | 77 | throw error; 78 | } finally { 79 | clearInterval(intervalId); 80 | } 81 | }; 82 | }; 83 | 84 | module.exports = configureLogger; 85 | -------------------------------------------------------------------------------- /src/progress.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const getProgressBar = (percentage, theme, size = 20) => { 4 | percentage = Math.max(0, Math.min(0.99, percentage)); 5 | 6 | const template = ` ${Math.round(percentage * 100)}%`.padEnd(size); 7 | 8 | let string = ''; 9 | for (let i = 0; i < size; i++) { 10 | const char = template.charAt(i); 11 | string += 12 | percentage > 0 && i / size <= percentage 13 | ? theme.progressForeground(char) 14 | : theme.progressBackground(char); 15 | } 16 | 17 | return string; 18 | }; 19 | 20 | module.exports = { 21 | getProgressBar 22 | }; 23 | -------------------------------------------------------------------------------- /src/theme.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const chalk = require('chalk'); 4 | 5 | // Color support is limited: 6 | // https://github.com/jbnicolai/ansi-256-colors 7 | const colors = { 8 | black: '#171717', 9 | gray: '#757575', 10 | green: '#00de6d', 11 | darkGreen: '#007272', 12 | red: '#cf000b', 13 | yellow: '#ffdd00', 14 | white: '#ffffff' 15 | }; 16 | 17 | const theme = chalk.constructor(); 18 | theme.asciiCompleted = theme.hex(colors.green); 19 | theme.asciiInProgress = theme.hex(colors.yellow); 20 | theme.estimate = theme.hex(colors.gray); 21 | theme.estimateExceeded = theme.hex(colors.red); 22 | theme.label = theme; 23 | theme.percentage = theme; 24 | theme.progressBackground = theme.bgHex(colors.darkGreen).hex(colors.white); 25 | theme.progressForeground = theme.bgHex(colors.green).hex(colors.black); 26 | 27 | module.exports = theme; 28 | -------------------------------------------------------------------------------- /types/index.d.ts: -------------------------------------------------------------------------------- 1 | import { Chalk } from 'chalk'; 2 | 3 | declare namespace progressEstimator { 4 | interface Spinner { 5 | interval: number; 6 | frames: string[]; 7 | } 8 | 9 | interface ChalkTheme extends Chalk { 10 | asciiCompleted: Chalk; 11 | asciiInProgress: Chalk; 12 | estimate: Chalk; 13 | estimateExceeded: Chalk; 14 | label: Chalk; 15 | percentage: Chalk; 16 | progressBackground: Chalk; 17 | progressForeground: Chalk; 18 | } 19 | 20 | interface LogFunction { 21 | (...text: string[]): void; 22 | clear(): void; 23 | done(): void; 24 | } 25 | 26 | interface Configuration { 27 | logFunction?: LogFunction; 28 | spinner?: Spinner; 29 | storagePath?: string; 30 | theme?: ChalkTheme; 31 | } 32 | 33 | interface LogOption { 34 | estimate?: number; 35 | id?: string; 36 | } 37 | 38 | interface ProgressEstimator { 39 | (promise: Promise, label: string, options?: LogOption): Promise; 40 | } 41 | } 42 | 43 | declare function progressEstimator( 44 | config?: progressEstimator.Configuration 45 | ): progressEstimator.ProgressEstimator; 46 | 47 | export = progressEstimator; 48 | -------------------------------------------------------------------------------- /types/test.ts: -------------------------------------------------------------------------------- 1 | import chalk from 'chalk'; 2 | import createLogger, { ChalkTheme, LogFunction } from '..'; 3 | 4 | // Test promises 5 | const stringPromise = new Promise(resolve => resolve('hello')); 6 | const numberPromise = new Promise(resolve => resolve(10)); 7 | 8 | // Chalk theme 9 | const chalkTheme = chalk.constructor() as ChalkTheme; 10 | chalkTheme.asciiCompleted = chalkTheme; 11 | chalkTheme.asciiInProgress = chalkTheme; 12 | chalkTheme.estimate = chalkTheme; 13 | chalkTheme.estimateExceeded = chalkTheme; 14 | chalkTheme.label = chalkTheme; 15 | chalkTheme.percentage = chalkTheme; 16 | chalkTheme.progressBackground = chalkTheme; 17 | chalkTheme.progressForeground = chalkTheme; 18 | 19 | // logFunction 20 | const logFunction: LogFunction = (...text: string[]) => {}; 21 | logFunction.done = () => {}; 22 | logFunction.clear = () => {}; 23 | 24 | // Check `createLogger` 25 | const logger = createLogger(); 26 | createLogger({ 27 | spinner: { 28 | interval: 100, 29 | frames: ['.', ''] 30 | } 31 | }); 32 | createLogger({ 33 | storagePath: 'path/to/dir' 34 | }); 35 | createLogger({ 36 | theme: chalkTheme 37 | }); 38 | createLogger({ 39 | logFunction: logFunction 40 | }); 41 | createLogger({ 42 | spinner: { interval: 100, frames: ['.', ''] }, 43 | storagePath: 'path/to/dir', 44 | theme: chalkTheme, 45 | logFunction: logFunction 46 | }); 47 | 48 | const resultOne: Promise = logger( 49 | stringPromise, 50 | 'This promise has no initial estimate' 51 | ); 52 | const resultTwo: Promise = logger( 53 | numberPromise, 54 | 'This promise is initially estimated to take 1 second', 55 | { estimate: 1000 } 56 | ); 57 | const resultThree: Promise = logger(numberPromise, 'Valid export'); 58 | -------------------------------------------------------------------------------- /types/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "noImplicitAny": true, 6 | "noUnusedLocals": false, 7 | "noEmit": true, 8 | "esModuleInterop": true 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /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/generator@^7.1.6": 13 | version "7.1.6" 14 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.6.tgz#001303cf87a5b9d093494a4bf251d7b5d03d3999" 15 | integrity sha512-brwPBtVvdYdGxtenbQgfCdDPmtkmUBZPjUoK5SXJEBuHaA5BCubh9ly65fzXz7R6o5rA76Rs22ES8Z+HCc0YIQ== 16 | dependencies: 17 | "@babel/types" "^7.1.6" 18 | jsesc "^2.5.1" 19 | lodash "^4.17.10" 20 | source-map "^0.5.0" 21 | trim-right "^1.0.1" 22 | 23 | "@babel/helper-function-name@^7.1.0": 24 | version "7.1.0" 25 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" 26 | integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== 27 | dependencies: 28 | "@babel/helper-get-function-arity" "^7.0.0" 29 | "@babel/template" "^7.1.0" 30 | "@babel/types" "^7.0.0" 31 | 32 | "@babel/helper-get-function-arity@^7.0.0": 33 | version "7.0.0" 34 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" 35 | integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== 36 | dependencies: 37 | "@babel/types" "^7.0.0" 38 | 39 | "@babel/helper-split-export-declaration@^7.0.0": 40 | version "7.0.0" 41 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" 42 | integrity sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag== 43 | dependencies: 44 | "@babel/types" "^7.0.0" 45 | 46 | "@babel/highlight@^7.0.0": 47 | version "7.0.0" 48 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" 49 | integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== 50 | dependencies: 51 | chalk "^2.0.0" 52 | esutils "^2.0.2" 53 | js-tokens "^4.0.0" 54 | 55 | "@babel/parser@^7.0.0", "@babel/parser@^7.1.2", "@babel/parser@^7.1.6": 56 | version "7.1.6" 57 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.6.tgz#16e97aca1ec1062324a01c5a6a7d0df8dd189854" 58 | integrity sha512-dWP6LJm9nKT6ALaa+bnL247GHHMWir3vSlZ2+IHgHgktZQx0L3Uvq2uAWcuzIe+fujRsYWBW2q622C5UvGK9iQ== 59 | 60 | "@babel/template@^7.1.0": 61 | version "7.1.2" 62 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644" 63 | integrity sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag== 64 | dependencies: 65 | "@babel/code-frame" "^7.0.0" 66 | "@babel/parser" "^7.1.2" 67 | "@babel/types" "^7.1.2" 68 | 69 | "@babel/traverse@^7.0.0": 70 | version "7.1.6" 71 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.6.tgz#c8db9963ab4ce5b894222435482bd8ea854b7b5c" 72 | integrity sha512-CXedit6GpISz3sC2k2FsGCUpOhUqKdyL0lqNrImQojagnUMXf8hex4AxYFRuMkNGcvJX5QAFGzB5WJQmSv8SiQ== 73 | dependencies: 74 | "@babel/code-frame" "^7.0.0" 75 | "@babel/generator" "^7.1.6" 76 | "@babel/helper-function-name" "^7.1.0" 77 | "@babel/helper-split-export-declaration" "^7.0.0" 78 | "@babel/parser" "^7.1.6" 79 | "@babel/types" "^7.1.6" 80 | debug "^4.1.0" 81 | globals "^11.1.0" 82 | lodash "^4.17.10" 83 | 84 | "@babel/types@^7.0.0", "@babel/types@^7.1.2", "@babel/types@^7.1.6": 85 | version "7.1.6" 86 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.6.tgz#0adb330c3a281348a190263aceb540e10f04bcce" 87 | integrity sha512-DMiUzlY9DSjVsOylJssxLHSgj6tWM9PRFJOGW/RaOglVOK9nzTxoOMfTfRQXGUCUQ/HmlG2efwC+XqUEJ5ay4w== 88 | dependencies: 89 | esutils "^2.0.2" 90 | lodash "^4.17.10" 91 | to-fast-properties "^2.0.0" 92 | 93 | acorn-jsx@^5.0.0: 94 | version "5.0.1" 95 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" 96 | integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== 97 | 98 | acorn@^6.0.2: 99 | version "6.4.1" 100 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" 101 | integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== 102 | 103 | ajv@^6.5.3: 104 | version "6.5.5" 105 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.5.tgz#cf97cdade71c6399a92c6d6c4177381291b781a1" 106 | integrity sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg== 107 | dependencies: 108 | fast-deep-equal "^2.0.1" 109 | fast-json-stable-stringify "^2.0.0" 110 | json-schema-traverse "^0.4.1" 111 | uri-js "^4.2.2" 112 | 113 | ansi-escapes@^3.0.0: 114 | version "3.1.0" 115 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" 116 | integrity sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw== 117 | 118 | ansi-regex@^3.0.0: 119 | version "3.0.0" 120 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 121 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 122 | 123 | ansi-styles@^3.2.1: 124 | version "3.2.1" 125 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 126 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 127 | dependencies: 128 | color-convert "^1.9.0" 129 | 130 | argparse@^1.0.7: 131 | version "1.0.10" 132 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 133 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 134 | dependencies: 135 | sprintf-js "~1.0.2" 136 | 137 | babel-eslint@^10.0.1: 138 | version "10.0.1" 139 | resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.1.tgz#919681dc099614cd7d31d45c8908695092a1faed" 140 | integrity sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ== 141 | dependencies: 142 | "@babel/code-frame" "^7.0.0" 143 | "@babel/parser" "^7.0.0" 144 | "@babel/traverse" "^7.0.0" 145 | "@babel/types" "^7.0.0" 146 | eslint-scope "3.7.1" 147 | eslint-visitor-keys "^1.0.0" 148 | 149 | balanced-match@^1.0.0: 150 | version "1.0.0" 151 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 152 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 153 | 154 | brace-expansion@^1.1.7: 155 | version "1.1.11" 156 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 157 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 158 | dependencies: 159 | balanced-match "^1.0.0" 160 | concat-map "0.0.1" 161 | 162 | caller-path@^0.1.0: 163 | version "0.1.0" 164 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" 165 | integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= 166 | dependencies: 167 | callsites "^0.2.0" 168 | 169 | callsites@^0.2.0: 170 | version "0.2.0" 171 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" 172 | integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= 173 | 174 | chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1: 175 | version "2.4.1" 176 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" 177 | integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== 178 | dependencies: 179 | ansi-styles "^3.2.1" 180 | escape-string-regexp "^1.0.5" 181 | supports-color "^5.3.0" 182 | 183 | chardet@^0.7.0: 184 | version "0.7.0" 185 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" 186 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== 187 | 188 | circular-json@^0.3.1: 189 | version "0.3.3" 190 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" 191 | integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== 192 | 193 | cli-cursor@^2.0.0, cli-cursor@^2.1.0: 194 | version "2.1.0" 195 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" 196 | integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= 197 | dependencies: 198 | restore-cursor "^2.0.0" 199 | 200 | cli-spinners@^1.3.1: 201 | version "1.3.1" 202 | resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" 203 | integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg== 204 | 205 | cli-width@^2.0.0: 206 | version "2.2.0" 207 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" 208 | integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= 209 | 210 | color-convert@^1.9.0: 211 | version "1.9.3" 212 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 213 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 214 | dependencies: 215 | color-name "1.1.3" 216 | 217 | color-name@1.1.3: 218 | version "1.1.3" 219 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 220 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 221 | 222 | concat-map@0.0.1: 223 | version "0.0.1" 224 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 225 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 226 | 227 | cross-spawn@^6.0.5: 228 | version "6.0.5" 229 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 230 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 231 | dependencies: 232 | nice-try "^1.0.4" 233 | path-key "^2.0.1" 234 | semver "^5.5.0" 235 | shebang-command "^1.2.0" 236 | which "^1.2.9" 237 | 238 | debug@^4.0.1, debug@^4.1.0: 239 | version "4.1.0" 240 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87" 241 | integrity sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg== 242 | dependencies: 243 | ms "^2.1.1" 244 | 245 | deep-is@~0.1.3: 246 | version "0.1.3" 247 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 248 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 249 | 250 | doctrine@^2.1.0: 251 | version "2.1.0" 252 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" 253 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== 254 | dependencies: 255 | esutils "^2.0.2" 256 | 257 | escape-string-regexp@^1.0.5: 258 | version "1.0.5" 259 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 260 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 261 | 262 | eslint-config-prettier@^3.3.0: 263 | version "3.3.0" 264 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-3.3.0.tgz#41afc8d3b852e757f06274ed6c44ca16f939a57d" 265 | integrity sha512-Bc3bh5bAcKNvs3HOpSi6EfGA2IIp7EzWcg2tS4vP7stnXu/J1opihHDM7jI9JCIckyIDTgZLSWn7J3HY0j2JfA== 266 | dependencies: 267 | get-stdin "^6.0.0" 268 | 269 | eslint-plugin-prettier@^3.0.0: 270 | version "3.0.0" 271 | resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.0.tgz#f6b823e065f8c36529918cdb766d7a0e975ec30c" 272 | integrity sha512-4g11opzhqq/8+AMmo5Vc2Gn7z9alZ4JqrbZ+D4i8KlSyxeQhZHlmIrY8U9Akf514MoEhogPa87Jgkq87aZ2Ohw== 273 | dependencies: 274 | prettier-linter-helpers "^1.0.0" 275 | 276 | eslint-scope@3.7.1: 277 | version "3.7.1" 278 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" 279 | integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= 280 | dependencies: 281 | esrecurse "^4.1.0" 282 | estraverse "^4.1.1" 283 | 284 | eslint-scope@^4.0.0: 285 | version "4.0.0" 286 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" 287 | integrity sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA== 288 | dependencies: 289 | esrecurse "^4.1.0" 290 | estraverse "^4.1.1" 291 | 292 | eslint-utils@^1.3.1: 293 | version "1.4.3" 294 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" 295 | integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== 296 | dependencies: 297 | eslint-visitor-keys "^1.1.0" 298 | 299 | eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: 300 | version "1.1.0" 301 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" 302 | integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== 303 | 304 | eslint@^5.9.0: 305 | version "5.9.0" 306 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.9.0.tgz#b234b6d15ef84b5849c6de2af43195a2d59d408e" 307 | integrity sha512-g4KWpPdqN0nth+goDNICNXGfJF7nNnepthp46CAlJoJtC5K/cLu3NgCM3AHu1CkJ5Hzt9V0Y0PBAO6Ay/gGb+w== 308 | dependencies: 309 | "@babel/code-frame" "^7.0.0" 310 | ajv "^6.5.3" 311 | chalk "^2.1.0" 312 | cross-spawn "^6.0.5" 313 | debug "^4.0.1" 314 | doctrine "^2.1.0" 315 | eslint-scope "^4.0.0" 316 | eslint-utils "^1.3.1" 317 | eslint-visitor-keys "^1.0.0" 318 | espree "^4.0.0" 319 | esquery "^1.0.1" 320 | esutils "^2.0.2" 321 | file-entry-cache "^2.0.0" 322 | functional-red-black-tree "^1.0.1" 323 | glob "^7.1.2" 324 | globals "^11.7.0" 325 | ignore "^4.0.6" 326 | imurmurhash "^0.1.4" 327 | inquirer "^6.1.0" 328 | is-resolvable "^1.1.0" 329 | js-yaml "^3.12.0" 330 | json-stable-stringify-without-jsonify "^1.0.1" 331 | levn "^0.3.0" 332 | lodash "^4.17.5" 333 | minimatch "^3.0.4" 334 | mkdirp "^0.5.1" 335 | natural-compare "^1.4.0" 336 | optionator "^0.8.2" 337 | path-is-inside "^1.0.2" 338 | pluralize "^7.0.0" 339 | progress "^2.0.0" 340 | regexpp "^2.0.1" 341 | require-uncached "^1.0.3" 342 | semver "^5.5.1" 343 | strip-ansi "^4.0.0" 344 | strip-json-comments "^2.0.1" 345 | table "^5.0.2" 346 | text-table "^0.2.0" 347 | 348 | espree@^4.0.0: 349 | version "4.1.0" 350 | resolved "https://registry.yarnpkg.com/espree/-/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f" 351 | integrity sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w== 352 | dependencies: 353 | acorn "^6.0.2" 354 | acorn-jsx "^5.0.0" 355 | eslint-visitor-keys "^1.0.0" 356 | 357 | esprima@^4.0.0: 358 | version "4.0.1" 359 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 360 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 361 | 362 | esquery@^1.0.1: 363 | version "1.0.1" 364 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" 365 | integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== 366 | dependencies: 367 | estraverse "^4.0.0" 368 | 369 | esrecurse@^4.1.0: 370 | version "4.2.1" 371 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" 372 | integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== 373 | dependencies: 374 | estraverse "^4.1.0" 375 | 376 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: 377 | version "4.2.0" 378 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 379 | integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= 380 | 381 | esutils@^2.0.2: 382 | version "2.0.2" 383 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 384 | integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= 385 | 386 | external-editor@^3.0.0: 387 | version "3.0.3" 388 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" 389 | integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== 390 | dependencies: 391 | chardet "^0.7.0" 392 | iconv-lite "^0.4.24" 393 | tmp "^0.0.33" 394 | 395 | fast-deep-equal@^2.0.1: 396 | version "2.0.1" 397 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" 398 | integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= 399 | 400 | fast-diff@^1.1.2: 401 | version "1.2.0" 402 | resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" 403 | integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== 404 | 405 | fast-json-stable-stringify@^2.0.0: 406 | version "2.0.0" 407 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 408 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= 409 | 410 | fast-levenshtein@~2.0.4: 411 | version "2.0.6" 412 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 413 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 414 | 415 | figures@^2.0.0: 416 | version "2.0.0" 417 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" 418 | integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= 419 | dependencies: 420 | escape-string-regexp "^1.0.5" 421 | 422 | file-entry-cache@^2.0.0: 423 | version "2.0.0" 424 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" 425 | integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= 426 | dependencies: 427 | flat-cache "^1.2.1" 428 | object-assign "^4.0.1" 429 | 430 | flat-cache@^1.2.1: 431 | version "1.3.4" 432 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" 433 | integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== 434 | dependencies: 435 | circular-json "^0.3.1" 436 | graceful-fs "^4.1.2" 437 | rimraf "~2.6.2" 438 | write "^0.2.1" 439 | 440 | fs.realpath@^1.0.0: 441 | version "1.0.0" 442 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 443 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 444 | 445 | functional-red-black-tree@^1.0.1: 446 | version "1.0.1" 447 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 448 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 449 | 450 | get-stdin@^6.0.0: 451 | version "6.0.0" 452 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" 453 | integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== 454 | 455 | glob@^7.0.5, glob@^7.1.2: 456 | version "7.1.3" 457 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 458 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== 459 | dependencies: 460 | fs.realpath "^1.0.0" 461 | inflight "^1.0.4" 462 | inherits "2" 463 | minimatch "^3.0.4" 464 | once "^1.3.0" 465 | path-is-absolute "^1.0.0" 466 | 467 | globals@^11.1.0, globals@^11.7.0: 468 | version "11.9.0" 469 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.9.0.tgz#bde236808e987f290768a93d065060d78e6ab249" 470 | integrity sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg== 471 | 472 | graceful-fs@^4.1.2: 473 | version "4.1.15" 474 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" 475 | integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== 476 | 477 | has-flag@^3.0.0: 478 | version "3.0.0" 479 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 480 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 481 | 482 | humanize-duration@^3.15.3: 483 | version "3.15.3" 484 | resolved "https://registry.yarnpkg.com/humanize-duration/-/humanize-duration-3.15.3.tgz#600a939bd9d9a16b696e907b3fc08d1a4f15e8c9" 485 | integrity sha512-BMz6w8p3NVa6QP9wDtqUkXfwgBqDaZ5z/np0EYdoWrLqL849Onp6JWMXMhbHtuvO9jUThLN5H1ThRQ8dUWnYkA== 486 | 487 | iconv-lite@^0.4.24: 488 | version "0.4.24" 489 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 490 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 491 | dependencies: 492 | safer-buffer ">= 2.1.2 < 3" 493 | 494 | ignore@^4.0.6: 495 | version "4.0.6" 496 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 497 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 498 | 499 | imurmurhash@^0.1.4: 500 | version "0.1.4" 501 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 502 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 503 | 504 | inflight@^1.0.4: 505 | version "1.0.6" 506 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 507 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 508 | dependencies: 509 | once "^1.3.0" 510 | wrappy "1" 511 | 512 | inherits@2: 513 | version "2.0.3" 514 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 515 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 516 | 517 | inquirer@^6.1.0: 518 | version "6.2.0" 519 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.0.tgz#51adcd776f661369dc1e894859c2560a224abdd8" 520 | integrity sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg== 521 | dependencies: 522 | ansi-escapes "^3.0.0" 523 | chalk "^2.0.0" 524 | cli-cursor "^2.1.0" 525 | cli-width "^2.0.0" 526 | external-editor "^3.0.0" 527 | figures "^2.0.0" 528 | lodash "^4.17.10" 529 | mute-stream "0.0.7" 530 | run-async "^2.2.0" 531 | rxjs "^6.1.0" 532 | string-width "^2.1.0" 533 | strip-ansi "^4.0.0" 534 | through "^2.3.6" 535 | 536 | is-fullwidth-code-point@^2.0.0: 537 | version "2.0.0" 538 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 539 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 540 | 541 | is-promise@^2.1.0: 542 | version "2.1.0" 543 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" 544 | integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= 545 | 546 | is-resolvable@^1.1.0: 547 | version "1.1.0" 548 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" 549 | integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== 550 | 551 | isexe@^2.0.0: 552 | version "2.0.0" 553 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 554 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 555 | 556 | js-tokens@^4.0.0: 557 | version "4.0.0" 558 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 559 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 560 | 561 | js-yaml@^3.12.0: 562 | version "3.13.1" 563 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 564 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 565 | dependencies: 566 | argparse "^1.0.7" 567 | esprima "^4.0.0" 568 | 569 | jsesc@^2.5.1: 570 | version "2.5.2" 571 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 572 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 573 | 574 | json-schema-traverse@^0.4.1: 575 | version "0.4.1" 576 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 577 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 578 | 579 | json-stable-stringify-without-jsonify@^1.0.1: 580 | version "1.0.1" 581 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 582 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 583 | 584 | levn@^0.3.0, levn@~0.3.0: 585 | version "0.3.0" 586 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 587 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 588 | dependencies: 589 | prelude-ls "~1.1.2" 590 | type-check "~0.3.2" 591 | 592 | lodash@^4.17.10, lodash@^4.17.5: 593 | version "4.17.19" 594 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" 595 | integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== 596 | 597 | log-update@^2.3.0: 598 | version "2.3.0" 599 | resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" 600 | integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= 601 | dependencies: 602 | ansi-escapes "^3.0.0" 603 | cli-cursor "^2.0.0" 604 | wrap-ansi "^3.0.1" 605 | 606 | mimic-fn@^1.0.0: 607 | version "1.2.0" 608 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 609 | integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== 610 | 611 | minimatch@^3.0.4: 612 | version "3.0.4" 613 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 614 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 615 | dependencies: 616 | brace-expansion "^1.1.7" 617 | 618 | minimist@0.0.8: 619 | version "0.0.8" 620 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 621 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 622 | 623 | mkdirp@^0.5.1: 624 | version "0.5.1" 625 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 626 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 627 | dependencies: 628 | minimist "0.0.8" 629 | 630 | ms@^2.1.1: 631 | version "2.1.1" 632 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 633 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 634 | 635 | mute-stream@0.0.7: 636 | version "0.0.7" 637 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" 638 | integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= 639 | 640 | natural-compare@^1.4.0: 641 | version "1.4.0" 642 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 643 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 644 | 645 | nice-try@^1.0.4: 646 | version "1.0.5" 647 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 648 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 649 | 650 | object-assign@^4.0.1: 651 | version "4.1.1" 652 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 653 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 654 | 655 | once@^1.3.0: 656 | version "1.4.0" 657 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 658 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 659 | dependencies: 660 | wrappy "1" 661 | 662 | onetime@^2.0.0: 663 | version "2.0.1" 664 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" 665 | integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= 666 | dependencies: 667 | mimic-fn "^1.0.0" 668 | 669 | optionator@^0.8.2: 670 | version "0.8.2" 671 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 672 | integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= 673 | dependencies: 674 | deep-is "~0.1.3" 675 | fast-levenshtein "~2.0.4" 676 | levn "~0.3.0" 677 | prelude-ls "~1.1.2" 678 | type-check "~0.3.2" 679 | wordwrap "~1.0.0" 680 | 681 | os-tmpdir@~1.0.2: 682 | version "1.0.2" 683 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 684 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 685 | 686 | path-is-absolute@^1.0.0: 687 | version "1.0.1" 688 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 689 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 690 | 691 | path-is-inside@^1.0.2: 692 | version "1.0.2" 693 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 694 | integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= 695 | 696 | path-key@^2.0.1: 697 | version "2.0.1" 698 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 699 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 700 | 701 | pluralize@^7.0.0: 702 | version "7.0.0" 703 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" 704 | integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== 705 | 706 | prelude-ls@~1.1.2: 707 | version "1.1.2" 708 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 709 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 710 | 711 | prettier-linter-helpers@^1.0.0: 712 | version "1.0.0" 713 | resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" 714 | integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== 715 | dependencies: 716 | fast-diff "^1.1.2" 717 | 718 | prettier@^1.15.2: 719 | version "1.15.2" 720 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.15.2.tgz#d31abe22afa4351efa14c7f8b94b58bb7452205e" 721 | integrity sha512-YgPLFFA0CdKL4Eg2IHtUSjzj/BWgszDHiNQAe0VAIBse34148whfdzLagRL+QiKS+YfK5ftB6X4v/MBw8yCoug== 722 | 723 | progress@^2.0.0: 724 | version "2.0.1" 725 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.1.tgz#c9242169342b1c29d275889c95734621b1952e31" 726 | integrity sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg== 727 | 728 | punycode@^2.1.0: 729 | version "2.1.1" 730 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 731 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 732 | 733 | regexpp@^2.0.1: 734 | version "2.0.1" 735 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" 736 | integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== 737 | 738 | require-uncached@^1.0.3: 739 | version "1.0.3" 740 | resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" 741 | integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= 742 | dependencies: 743 | caller-path "^0.1.0" 744 | resolve-from "^1.0.0" 745 | 746 | resolve-from@^1.0.0: 747 | version "1.0.1" 748 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" 749 | integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= 750 | 751 | restore-cursor@^2.0.0: 752 | version "2.0.0" 753 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" 754 | integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= 755 | dependencies: 756 | onetime "^2.0.0" 757 | signal-exit "^3.0.2" 758 | 759 | rimraf@~2.6.2: 760 | version "2.6.2" 761 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 762 | integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== 763 | dependencies: 764 | glob "^7.0.5" 765 | 766 | run-async@^2.2.0: 767 | version "2.3.0" 768 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" 769 | integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= 770 | dependencies: 771 | is-promise "^2.1.0" 772 | 773 | rxjs@^6.1.0: 774 | version "6.3.3" 775 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55" 776 | integrity sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw== 777 | dependencies: 778 | tslib "^1.9.0" 779 | 780 | "safer-buffer@>= 2.1.2 < 3": 781 | version "2.1.2" 782 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 783 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 784 | 785 | semver@^5.5.0, semver@^5.5.1: 786 | version "5.6.0" 787 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" 788 | integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== 789 | 790 | shebang-command@^1.2.0: 791 | version "1.2.0" 792 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 793 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 794 | dependencies: 795 | shebang-regex "^1.0.0" 796 | 797 | shebang-regex@^1.0.0: 798 | version "1.0.0" 799 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 800 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 801 | 802 | signal-exit@^3.0.2: 803 | version "3.0.2" 804 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 805 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= 806 | 807 | slice-ansi@1.0.0: 808 | version "1.0.0" 809 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" 810 | integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== 811 | dependencies: 812 | is-fullwidth-code-point "^2.0.0" 813 | 814 | source-map@^0.5.0: 815 | version "0.5.7" 816 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 817 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 818 | 819 | sprintf-js@~1.0.2: 820 | version "1.0.3" 821 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 822 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 823 | 824 | string-width@^2.1.0, string-width@^2.1.1: 825 | version "2.1.1" 826 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 827 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 828 | dependencies: 829 | is-fullwidth-code-point "^2.0.0" 830 | strip-ansi "^4.0.0" 831 | 832 | strip-ansi@^4.0.0: 833 | version "4.0.0" 834 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 835 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 836 | dependencies: 837 | ansi-regex "^3.0.0" 838 | 839 | strip-json-comments@^2.0.1: 840 | version "2.0.1" 841 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 842 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 843 | 844 | supports-color@^5.3.0: 845 | version "5.5.0" 846 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 847 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 848 | dependencies: 849 | has-flag "^3.0.0" 850 | 851 | table@^5.0.2: 852 | version "5.1.0" 853 | resolved "https://registry.yarnpkg.com/table/-/table-5.1.0.tgz#69a54644f6f01ad1628f8178715b408dc6bf11f7" 854 | integrity sha512-e542in22ZLhD/fOIuXs/8yDZ9W61ltF8daM88rkRNtgTIct+vI2fTnAyu/Db2TCfEcI8i7mjZz6meLq0nW7TYg== 855 | dependencies: 856 | ajv "^6.5.3" 857 | lodash "^4.17.10" 858 | slice-ansi "1.0.0" 859 | string-width "^2.1.1" 860 | 861 | text-table@^0.2.0: 862 | version "0.2.0" 863 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 864 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 865 | 866 | through@^2.3.6: 867 | version "2.3.8" 868 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 869 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 870 | 871 | tmp@^0.0.33: 872 | version "0.0.33" 873 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 874 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== 875 | dependencies: 876 | os-tmpdir "~1.0.2" 877 | 878 | to-fast-properties@^2.0.0: 879 | version "2.0.0" 880 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 881 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 882 | 883 | trim-right@^1.0.1: 884 | version "1.0.1" 885 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 886 | integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= 887 | 888 | tslib@^1.9.0: 889 | version "1.9.3" 890 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" 891 | integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== 892 | 893 | type-check@~0.3.2: 894 | version "0.3.2" 895 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 896 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 897 | dependencies: 898 | prelude-ls "~1.1.2" 899 | 900 | typescript@^3.1.6: 901 | version "3.1.6" 902 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.1.6.tgz#b6543a83cfc8c2befb3f4c8fba6896f5b0c9be68" 903 | integrity sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA== 904 | 905 | uri-js@^4.2.2: 906 | version "4.2.2" 907 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 908 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 909 | dependencies: 910 | punycode "^2.1.0" 911 | 912 | which@^1.2.9: 913 | version "1.3.1" 914 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 915 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 916 | dependencies: 917 | isexe "^2.0.0" 918 | 919 | wordwrap@~1.0.0: 920 | version "1.0.0" 921 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 922 | integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= 923 | 924 | wrap-ansi@^3.0.1: 925 | version "3.0.1" 926 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" 927 | integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= 928 | dependencies: 929 | string-width "^2.1.1" 930 | strip-ansi "^4.0.0" 931 | 932 | wrappy@1: 933 | version "1.0.2" 934 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 935 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 936 | 937 | write@^0.2.1: 938 | version "0.2.1" 939 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" 940 | integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= 941 | dependencies: 942 | mkdirp "^0.5.1" 943 | --------------------------------------------------------------------------------